@alchemy.run/daytona 0.0.0 → 2.0.0-beta.86

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 (274) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +76 -4
  3. package/lib/ApiKey.d.ts +99 -0
  4. package/lib/ApiKey.d.ts.map +1 -0
  5. package/lib/ApiKey.js +152 -0
  6. package/lib/ApiKey.js.map +1 -0
  7. package/lib/AuthProvider.d.ts +55 -0
  8. package/lib/AuthProvider.d.ts.map +1 -0
  9. package/lib/AuthProvider.js +280 -0
  10. package/lib/AuthProvider.js.map +1 -0
  11. package/lib/Bootstrap.d.ts +8 -0
  12. package/lib/Bootstrap.d.ts.map +1 -0
  13. package/lib/Bootstrap.js +28 -0
  14. package/lib/Bootstrap.js.map +1 -0
  15. package/lib/ConnectSandbox.d.ts +72 -0
  16. package/lib/ConnectSandbox.d.ts.map +1 -0
  17. package/lib/ConnectSandbox.js +3 -0
  18. package/lib/ConnectSandbox.js.map +1 -0
  19. package/lib/ConnectSandboxHttp.d.ts +5 -0
  20. package/lib/ConnectSandboxHttp.d.ts.map +1 -0
  21. package/lib/ConnectSandboxHttp.js +22 -0
  22. package/lib/ConnectSandboxHttp.js.map +1 -0
  23. package/lib/Contributions.d.ts +7 -0
  24. package/lib/Contributions.d.ts.map +1 -0
  25. package/lib/Contributions.js +6 -0
  26. package/lib/Contributions.js.map +1 -0
  27. package/lib/CreateSandbox.d.ts +86 -0
  28. package/lib/CreateSandbox.d.ts.map +1 -0
  29. package/lib/CreateSandbox.js +3 -0
  30. package/lib/CreateSandbox.js.map +1 -0
  31. package/lib/CreateSandboxHttp.d.ts +5 -0
  32. package/lib/CreateSandboxHttp.d.ts.map +1 -0
  33. package/lib/CreateSandboxHttp.js +65 -0
  34. package/lib/CreateSandboxHttp.js.map +1 -0
  35. package/lib/CreateSecret.d.ts +56 -0
  36. package/lib/CreateSecret.d.ts.map +1 -0
  37. package/lib/CreateSecret.js +3 -0
  38. package/lib/CreateSecret.js.map +1 -0
  39. package/lib/CreateSecretHttp.d.ts +5 -0
  40. package/lib/CreateSecretHttp.d.ts.map +1 -0
  41. package/lib/CreateSecretHttp.js +39 -0
  42. package/lib/CreateSecretHttp.js.map +1 -0
  43. package/lib/CreateSnapshot.d.ts +80 -0
  44. package/lib/CreateSnapshot.d.ts.map +1 -0
  45. package/lib/CreateSnapshot.js +3 -0
  46. package/lib/CreateSnapshot.js.map +1 -0
  47. package/lib/CreateSnapshotHttp.d.ts +5 -0
  48. package/lib/CreateSnapshotHttp.d.ts.map +1 -0
  49. package/lib/CreateSnapshotHttp.js +47 -0
  50. package/lib/CreateSnapshotHttp.js.map +1 -0
  51. package/lib/CreateVolume.d.ts +81 -0
  52. package/lib/CreateVolume.d.ts.map +1 -0
  53. package/lib/CreateVolume.js +10 -0
  54. package/lib/CreateVolume.js.map +1 -0
  55. package/lib/CreateVolumeHttp.d.ts +5 -0
  56. package/lib/CreateVolumeHttp.d.ts.map +1 -0
  57. package/lib/CreateVolumeHttp.js +31 -0
  58. package/lib/CreateVolumeHttp.js.map +1 -0
  59. package/lib/Credentials.d.ts +9 -0
  60. package/lib/Credentials.d.ts.map +1 -0
  61. package/lib/Credentials.js +18 -0
  62. package/lib/Credentials.js.map +1 -0
  63. package/lib/DaytonaBindings.d.ts +51 -0
  64. package/lib/DaytonaBindings.d.ts.map +1 -0
  65. package/lib/DaytonaBindings.js +61 -0
  66. package/lib/DaytonaBindings.js.map +1 -0
  67. package/lib/IdentityProvider.d.ts +80 -0
  68. package/lib/IdentityProvider.d.ts.map +1 -0
  69. package/lib/IdentityProvider.js +111 -0
  70. package/lib/IdentityProvider.js.map +1 -0
  71. package/lib/MountVolume.d.ts +86 -0
  72. package/lib/MountVolume.d.ts.map +1 -0
  73. package/lib/MountVolume.js +27 -0
  74. package/lib/MountVolume.js.map +1 -0
  75. package/lib/OAuthClient.d.ts +14 -0
  76. package/lib/OAuthClient.d.ts.map +1 -0
  77. package/lib/OAuthClient.js +23 -0
  78. package/lib/OAuthClient.js.map +1 -0
  79. package/lib/Organization.d.ts +40 -0
  80. package/lib/Organization.d.ts.map +1 -0
  81. package/lib/Organization.js +80 -0
  82. package/lib/Organization.js.map +1 -0
  83. package/lib/OrganizationInvitation.d.ts +70 -0
  84. package/lib/OrganizationInvitation.d.ts.map +1 -0
  85. package/lib/OrganizationInvitation.js +109 -0
  86. package/lib/OrganizationInvitation.js.map +1 -0
  87. package/lib/OrganizationMember.d.ts +86 -0
  88. package/lib/OrganizationMember.d.ts.map +1 -0
  89. package/lib/OrganizationMember.js +109 -0
  90. package/lib/OrganizationMember.js.map +1 -0
  91. package/lib/OrganizationOtelConfig.d.ts +59 -0
  92. package/lib/OrganizationOtelConfig.d.ts.map +1 -0
  93. package/lib/OrganizationOtelConfig.js +87 -0
  94. package/lib/OrganizationOtelConfig.js.map +1 -0
  95. package/lib/OrganizationRole.d.ts +66 -0
  96. package/lib/OrganizationRole.d.ts.map +1 -0
  97. package/lib/OrganizationRole.js +106 -0
  98. package/lib/OrganizationRole.js.map +1 -0
  99. package/lib/OrganizationSettings.d.ts +76 -0
  100. package/lib/OrganizationSettings.d.ts.map +1 -0
  101. package/lib/OrganizationSettings.js +107 -0
  102. package/lib/OrganizationSettings.js.map +1 -0
  103. package/lib/Providers.d.ts +14 -0
  104. package/lib/Providers.d.ts.map +1 -0
  105. package/lib/Providers.js +53 -0
  106. package/lib/Providers.js.map +1 -0
  107. package/lib/ReadAuditLogs.d.ts +30 -0
  108. package/lib/ReadAuditLogs.d.ts.map +1 -0
  109. package/lib/ReadAuditLogs.js +17 -0
  110. package/lib/ReadAuditLogs.js.map +1 -0
  111. package/lib/ReadOrganization.d.ts +39 -0
  112. package/lib/ReadOrganization.d.ts.map +1 -0
  113. package/lib/ReadOrganization.js +39 -0
  114. package/lib/ReadOrganization.js.map +1 -0
  115. package/lib/ReadUsage.d.ts +31 -0
  116. package/lib/ReadUsage.d.ts.map +1 -0
  117. package/lib/ReadUsage.js +17 -0
  118. package/lib/ReadUsage.js.map +1 -0
  119. package/lib/Region.d.ts +78 -0
  120. package/lib/Region.d.ts.map +1 -0
  121. package/lib/Region.js +169 -0
  122. package/lib/Region.js.map +1 -0
  123. package/lib/Registry.d.ts +84 -0
  124. package/lib/Registry.d.ts.map +1 -0
  125. package/lib/Registry.js +97 -0
  126. package/lib/Registry.js.map +1 -0
  127. package/lib/Runner.d.ts +66 -0
  128. package/lib/Runner.d.ts.map +1 -0
  129. package/lib/Runner.js +116 -0
  130. package/lib/Runner.js.map +1 -0
  131. package/lib/Sandbox.d.ts +376 -0
  132. package/lib/Sandbox.d.ts.map +1 -0
  133. package/lib/Sandbox.js +565 -0
  134. package/lib/Sandbox.js.map +1 -0
  135. package/lib/SandboxClient.d.ts +258 -0
  136. package/lib/SandboxClient.d.ts.map +1 -0
  137. package/lib/SandboxClient.js +233 -0
  138. package/lib/SandboxClient.js.map +1 -0
  139. package/lib/Secret.d.ts +93 -0
  140. package/lib/Secret.d.ts.map +1 -0
  141. package/lib/Secret.js +130 -0
  142. package/lib/Secret.js.map +1 -0
  143. package/lib/Snapshot.d.ts +327 -0
  144. package/lib/Snapshot.d.ts.map +1 -0
  145. package/lib/Snapshot.js +447 -0
  146. package/lib/Snapshot.js.map +1 -0
  147. package/lib/Volume.d.ts +99 -0
  148. package/lib/Volume.d.ts.map +1 -0
  149. package/lib/Volume.js +152 -0
  150. package/lib/Volume.js.map +1 -0
  151. package/lib/WarmPool.d.ts +61 -0
  152. package/lib/WarmPool.d.ts.map +1 -0
  153. package/lib/WarmPool.js +81 -0
  154. package/lib/WarmPool.js.map +1 -0
  155. package/lib/Webhooks.d.ts +58 -0
  156. package/lib/Webhooks.d.ts.map +1 -0
  157. package/lib/Webhooks.js +75 -0
  158. package/lib/Webhooks.js.map +1 -0
  159. package/lib/index.d.ts +37 -0
  160. package/lib/index.d.ts.map +1 -0
  161. package/lib/index.js +36 -0
  162. package/lib/index.js.map +1 -0
  163. package/lib/internal/BuildContext.d.ts +16 -0
  164. package/lib/internal/BuildContext.d.ts.map +1 -0
  165. package/lib/internal/BuildContext.js +50 -0
  166. package/lib/internal/BuildContext.js.map +1 -0
  167. package/lib/internal/Declared.d.ts +29 -0
  168. package/lib/internal/Declared.d.ts.map +1 -0
  169. package/lib/internal/Declared.js +31 -0
  170. package/lib/internal/Declared.js.map +1 -0
  171. package/lib/internal/Derived.d.ts +40 -0
  172. package/lib/internal/Derived.d.ts.map +1 -0
  173. package/lib/internal/Derived.js +64 -0
  174. package/lib/internal/Derived.js.map +1 -0
  175. package/lib/internal/Errors.d.ts +4 -0
  176. package/lib/internal/Errors.d.ts.map +1 -0
  177. package/lib/internal/Errors.js +1 -0
  178. package/lib/internal/Errors.js.map +1 -0
  179. package/lib/internal/Labels.d.ts +20 -0
  180. package/lib/internal/Labels.d.ts.map +1 -0
  181. package/lib/internal/Labels.js +22 -0
  182. package/lib/internal/Labels.js.map +1 -0
  183. package/lib/internal/Names.d.ts +18 -0
  184. package/lib/internal/Names.d.ts.map +1 -0
  185. package/lib/internal/Names.js +25 -0
  186. package/lib/internal/Names.js.map +1 -0
  187. package/lib/internal/Organization.d.ts +27 -0
  188. package/lib/internal/Organization.d.ts.map +1 -0
  189. package/lib/internal/Organization.js +32 -0
  190. package/lib/internal/Organization.js.map +1 -0
  191. package/lib/internal/Process.d.ts +14 -0
  192. package/lib/internal/Process.d.ts.map +1 -0
  193. package/lib/internal/Process.js +15 -0
  194. package/lib/internal/Process.js.map +1 -0
  195. package/lib/internal/Program.d.ts +83 -0
  196. package/lib/internal/Program.d.ts.map +1 -0
  197. package/lib/internal/Program.js +169 -0
  198. package/lib/internal/Program.js.map +1 -0
  199. package/lib/internal/Ref.d.ts +14 -0
  200. package/lib/internal/Ref.d.ts.map +1 -0
  201. package/lib/internal/Ref.js +7 -0
  202. package/lib/internal/Ref.js.map +1 -0
  203. package/lib/internal/Scoped.d.ts +31 -0
  204. package/lib/internal/Scoped.d.ts.map +1 -0
  205. package/lib/internal/Scoped.js +48 -0
  206. package/lib/internal/Scoped.js.map +1 -0
  207. package/lib/internal/Tar.d.ts +13 -0
  208. package/lib/internal/Tar.d.ts.map +1 -0
  209. package/lib/internal/Tar.js +62 -0
  210. package/lib/internal/Tar.js.map +1 -0
  211. package/lib/internal/Toolbox.d.ts +11 -0
  212. package/lib/internal/Toolbox.d.ts.map +1 -0
  213. package/lib/internal/Toolbox.js +20 -0
  214. package/lib/internal/Toolbox.js.map +1 -0
  215. package/lib/internal/Wait.d.ts +49 -0
  216. package/lib/internal/Wait.d.ts.map +1 -0
  217. package/lib/internal/Wait.js +57 -0
  218. package/lib/internal/Wait.js.map +1 -0
  219. package/package.json +64 -3
  220. package/src/ApiKey.ts +221 -0
  221. package/src/AuthProvider.ts +406 -0
  222. package/src/Bootstrap.ts +55 -0
  223. package/src/ConnectSandbox.ts +76 -0
  224. package/src/ConnectSandboxHttp.ts +26 -0
  225. package/src/Contributions.ts +9 -0
  226. package/src/CreateSandbox.ts +107 -0
  227. package/src/CreateSandboxHttp.ts +97 -0
  228. package/src/CreateSecret.ts +73 -0
  229. package/src/CreateSecretHttp.ts +58 -0
  230. package/src/CreateSnapshot.ts +133 -0
  231. package/src/CreateSnapshotHttp.ts +77 -0
  232. package/src/CreateVolume.ts +104 -0
  233. package/src/CreateVolumeHttp.ts +50 -0
  234. package/src/Credentials.ts +37 -0
  235. package/src/DaytonaBindings.ts +111 -0
  236. package/src/IdentityProvider.ts +181 -0
  237. package/src/MountVolume.ts +122 -0
  238. package/src/OAuthClient.ts +27 -0
  239. package/src/Organization.ts +121 -0
  240. package/src/OrganizationInvitation.ts +174 -0
  241. package/src/OrganizationMember.ts +174 -0
  242. package/src/OrganizationOtelConfig.ts +138 -0
  243. package/src/OrganizationRole.ts +167 -0
  244. package/src/OrganizationSettings.ts +187 -0
  245. package/src/Providers.ts +93 -0
  246. package/src/ReadAuditLogs.ts +50 -0
  247. package/src/ReadOrganization.ts +83 -0
  248. package/src/ReadUsage.ts +51 -0
  249. package/src/Region.ts +226 -0
  250. package/src/Registry.ts +164 -0
  251. package/src/Runner.ts +166 -0
  252. package/src/Sandbox.ts +927 -0
  253. package/src/SandboxClient.ts +625 -0
  254. package/src/Secret.ts +203 -0
  255. package/src/Snapshot.ts +685 -0
  256. package/src/Volume.ts +229 -0
  257. package/src/WarmPool.ts +128 -0
  258. package/src/Webhooks.ts +121 -0
  259. package/src/globals.d.ts +2 -0
  260. package/src/index.ts +46 -0
  261. package/src/internal/BuildContext.ts +62 -0
  262. package/src/internal/Declared.ts +80 -0
  263. package/src/internal/Derived.ts +97 -0
  264. package/src/internal/Errors.ts +4 -0
  265. package/src/internal/Labels.ts +39 -0
  266. package/src/internal/Names.ts +37 -0
  267. package/src/internal/Organization.ts +40 -0
  268. package/src/internal/Process.ts +25 -0
  269. package/src/internal/Program.ts +239 -0
  270. package/src/internal/Ref.ts +15 -0
  271. package/src/internal/Scoped.ts +102 -0
  272. package/src/internal/Tar.ts +72 -0
  273. package/src/internal/Toolbox.ts +27 -0
  274. package/src/internal/Wait.ts +105 -0
package/lib/Secret.js ADDED
@@ -0,0 +1,130 @@
1
+ import { createHash } from "node:crypto";
2
+ import * as secrets from "@distilled.cloud/daytona/secret";
3
+ import { Unowned } from "alchemy/AdoptPolicy";
4
+ import { deepEqual, isResolved } from "alchemy/Diff";
5
+ import * as Provider from "alchemy/Provider";
6
+ import { Resource } from "alchemy/Resource";
7
+ import * as Effect from "effect/Effect";
8
+ import * as Redacted from "effect/Redacted";
9
+ import * as Stream from "effect/Stream";
10
+ import { isOwnedName, resolveName } from "./internal/Names.js";
11
+ /**
12
+ * A secret stored in Daytona. A sandbox gets a placeholder in place of
13
+ * the value, and Daytona's egress proxy substitutes the real value only on
14
+ * requests to the secret's `hosts`, so code in the sandbox (or an agent
15
+ * running there) can use a credential without being able to read it.
16
+ *
17
+ * Declare a secret here for credentials the whole app shares. For a secret
18
+ * per user, create it at runtime with {@link CreateSecret}.
19
+ * @see https://www.daytona.io/docs/en/secrets/
20
+ *
21
+ * ### Creating a Secret
22
+ * **Example:** An npm token only sent to the registry
23
+ * ```typescript
24
+ * export const NpmToken = Daytona.Secret("NpmToken", {
25
+ * value: Config.Redacted("NPM_TOKEN"),
26
+ * hosts: ["registry.npmjs.org"],
27
+ * });
28
+ * ```
29
+ *
30
+ * ### Using a Secret in a Sandbox
31
+ * **Example:** Expose it to a sandbox as an environment variable
32
+ * ```typescript
33
+ * export const DevBox = Daytona.Sandbox("DevBox", {
34
+ * snapshot: Base,
35
+ * secrets: { NPM_TOKEN: NpmToken },
36
+ * });
37
+ * ```
38
+ *
39
+ * @resource
40
+ * @product Secret
41
+ */
42
+ export const Secret = Resource("Daytona.Secret");
43
+ export const hashSecretValue = (value) => Effect.sync(() => createHash("sha256")
44
+ .update(Redacted.isRedacted(value) ? Redacted.value(value) : value)
45
+ .digest("hex"));
46
+ export const toSecretAttributes = (s, valueHash) => ({
47
+ secretId: s.id,
48
+ name: s.name,
49
+ placeholder: s.placeholder,
50
+ hosts: s.hosts,
51
+ description: s.description,
52
+ valueHash,
53
+ });
54
+ export const getSecretById = (secretId) => secrets.getSecret({ secretId }).pipe(Effect.catchTag("SecretNotFound", () => Effect.undefined));
55
+ /** Exact-name lookup over the paginated list (its `name` filter is a substring match). */
56
+ export const findSecretByName = (name) => secrets.listSecretsPaginated.items({ name }).pipe(Stream.filter((s) => s.name === name), Stream.runHead, Effect.map((found) => (found._tag === "Some" ? found.value : undefined)));
57
+ export const ensureSecret = Effect.fn(function* (input) {
58
+ const valueHash = yield* hashSecretValue(input.value);
59
+ const existing = input.existing ?? (yield* findSecretByName(input.name));
60
+ if (existing === undefined) {
61
+ const created = yield* secrets
62
+ .createSecret({
63
+ name: input.name,
64
+ value: input.value,
65
+ description: input.description,
66
+ hosts: input.hosts,
67
+ })
68
+ .pipe(Effect.catchTag("SecretAlreadyExists", () => Effect.undefined));
69
+ if (created !== undefined)
70
+ return toSecretAttributes(created, valueHash);
71
+ }
72
+ const current = existing ?? (yield* findSecretByName(input.name));
73
+ if (current === undefined)
74
+ return yield* Effect.die(`Daytona secret ${input.name} vanished during create`);
75
+ // Sync — the value can't be observed, so it is rewritten unless the
76
+ // hash we last wrote matches. Description and hosts diff against cloud.
77
+ const hostsChanged = input.hosts !== undefined && !deepEqual([...input.hosts].sort(), [...current.hosts].sort());
78
+ const descriptionChanged = input.description !== undefined && input.description !== current.description;
79
+ const valueChanged = input.knownHash !== valueHash;
80
+ if (!hostsChanged && !descriptionChanged && !valueChanged)
81
+ return toSecretAttributes(current, valueHash);
82
+ const updated = yield* secrets.updateSecret({
83
+ secretId: current.id,
84
+ value: valueChanged ? input.value : undefined,
85
+ description: descriptionChanged ? input.description : undefined,
86
+ hosts: hostsChanged ? input.hosts : undefined,
87
+ });
88
+ return toSecretAttributes(updated, valueHash);
89
+ });
90
+ export const SecretProvider = () => Provider.effect(Secret, Effect.succeed({
91
+ stables: ["secretId", "placeholder"],
92
+ list: Effect.fn(function* () {
93
+ const all = yield* secrets.listSecretsPaginated.items({}).pipe(Stream.runCollect);
94
+ return Array.from(all).map((s) => toSecretAttributes(s, ""));
95
+ }),
96
+ diff: Effect.fn(function* ({ id, news, output }) {
97
+ if (!isResolved(news) || output === undefined)
98
+ return undefined;
99
+ const name = yield* resolveName(id, news.name, news.name === undefined ? output.name : undefined);
100
+ if (name !== output.name)
101
+ return { action: "replace", deleteFirst: true };
102
+ }),
103
+ read: Effect.fn(function* ({ id, olds, output }) {
104
+ const name = yield* resolveName(id, olds?.name, output?.name);
105
+ const found = (output ? yield* getSecretById(output.secretId) : undefined) ??
106
+ (yield* findSecretByName(name));
107
+ if (found === undefined)
108
+ return undefined;
109
+ const attrs = toSecretAttributes(found, output?.valueHash ?? "");
110
+ return (yield* isOwnedName(id, found.name, output !== undefined)) ? attrs : Unowned(attrs);
111
+ }),
112
+ reconcile: Effect.fn(function* ({ id, news, output }) {
113
+ const name = yield* resolveName(id, news.name, output?.name);
114
+ const byId = output ? yield* getSecretById(output.secretId) : undefined;
115
+ return yield* ensureSecret({
116
+ name,
117
+ value: news.value,
118
+ description: news.description,
119
+ hosts: news.hosts,
120
+ existing: byId?.name === name ? byId : undefined,
121
+ knownHash: byId?.name === name ? output?.valueHash : undefined,
122
+ });
123
+ }),
124
+ delete: Effect.fn(function* ({ output }) {
125
+ yield* secrets
126
+ .deleteSecret({ secretId: output.secretId })
127
+ .pipe(Effect.catchTag("SecretNotFound", () => Effect.void));
128
+ }),
129
+ }));
130
+ //# sourceMappingURL=Secret.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Secret.js","sources":["../src/Secret.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,327 @@
1
+ import * as BuildPlan from "@alchemy.run/docker/BuildPlan";
2
+ import type { InlineDockerfile } from "@alchemy.run/docker/Dockerfile";
3
+ import * as DockerfileParser from "@alchemy.run/docker/DockerfileParser";
4
+ import * as dockerRegistry from "@distilled.cloud/daytona/docker_registry";
5
+ import * as sandboxes from "@distilled.cloud/daytona/sandbox";
6
+ import * as snapshots from "@distilled.cloud/daytona/snapshots";
7
+ import * as Provider from "alchemy/Provider";
8
+ import { Resource } from "alchemy/Resource";
9
+ import * as Effect from "effect/Effect";
10
+ import type * as Redacted from "effect/Redacted";
11
+ import { type Ref } from "./internal/Ref.ts";
12
+ import type { Providers } from "./Providers.ts";
13
+ /** A snapshot, by name. Accepts a `Daytona.Snapshot` or `{ name }`. */
14
+ export type SnapshotRef = {
15
+ readonly name: string;
16
+ };
17
+ /** A private registry. Accepts a `Daytona.Registry` or `{ registryId }`. */
18
+ export type SnapshotRegistry = {
19
+ readonly registryId: string;
20
+ };
21
+ export type GpuType = snapshots.GpuType;
22
+ export interface SnapshotBuild {
23
+ /** Build arguments, read by the Dockerfile's `ARG` instructions. */
24
+ args?: Record<string, string>;
25
+ /**
26
+ * BuildKit secrets, keyed by id; mount one in a `RUN` step with
27
+ * `--mount=type=secret,id=<id>`. They never enter the image or its hash.
28
+ * Daytona's builders can't receive secrets, so setting any builds locally.
29
+ */
30
+ secrets?: Record<string, Redacted.Redacted<string>>;
31
+ /**
32
+ * Build on Daytona's builders (`true`), or with your local Docker
33
+ * (`false`), pushing the image to Daytona's registry. Build locally to use
34
+ * build secrets, base images only your machine can pull, or your local
35
+ * layer cache.
36
+ * @default true, unless `secrets` are set
37
+ */
38
+ remote?: boolean;
39
+ }
40
+ export interface SnapshotProps {
41
+ /**
42
+ * Snapshot name, unique in the organization. Sandboxes are created from
43
+ * it by name. If omitted, a unique name is generated from the stack,
44
+ * stage and logical ID. Changing it replaces the snapshot.
45
+ */
46
+ name?: string;
47
+ /**
48
+ * An image to pull, with an explicit tag or digest (Daytona rejects
49
+ * `latest`, `lts` and `stable`). Pass a {@link Registry} as `registry`
50
+ * for private images. Exclusive with `dockerfile` and `from`.
51
+ */
52
+ image?: string;
53
+ /**
54
+ * A Dockerfile to build: a path (relative to the cwd), or inline content
55
+ * (`Dockerfile.inline`). Daytona builds it on its own builders, uploading
56
+ * the files it `COPY`s from {@link context}; no local Docker is needed.
57
+ * Set `build.remote: false` to build it with your local Docker instead.
58
+ * Changing the Dockerfile or any file it copies replaces the snapshot.
59
+ * Exclusive with `image` and `from`.
60
+ * @default `${context}/Dockerfile` when `context` is set
61
+ */
62
+ dockerfile?: string | InlineDockerfile;
63
+ /**
64
+ * Build context directory for a Dockerfile path. Only the files its
65
+ * `COPY`/`ADD` instructions reach are uploaded (after `.dockerignore`).
66
+ * Inline Dockerfiles have no context and can't `COPY` local files.
67
+ */
68
+ context?: string;
69
+ /** How the Dockerfile is built. */
70
+ build?: SnapshotBuild;
71
+ /**
72
+ * Build a warm base from another snapshot: start a sandbox from `from`,
73
+ * run `run` in it, and capture its filesystem as this snapshot. Use it to
74
+ * bake a cloned repository and installed dependencies into the snapshot
75
+ * sandboxes fork from. Exclusive with `image` and `dockerfile`.
76
+ */
77
+ from?: Ref<SnapshotRef>;
78
+ /**
79
+ * Shell commands run in order in the `from` sandbox before it is
80
+ * captured. A non-zero exit fails the deploy.
81
+ */
82
+ run?: string[];
83
+ /** Private registry to pull `image` (or a Dockerfile's base) from. */
84
+ registry?: Ref<SnapshotRegistry>;
85
+ /** The command a sandbox from this snapshot runs. */
86
+ entrypoint?: string[];
87
+ /** vCPUs for sandboxes from this snapshot. */
88
+ cpu?: number;
89
+ /** Memory in GiB. */
90
+ memory?: number;
91
+ /** Disk in GiB. */
92
+ disk?: number;
93
+ /** GPUs per sandbox. Billed per hour while a sandbox runs. */
94
+ gpu?: number;
95
+ /** Acceptable GPU types, in order of preference. */
96
+ gpuType?: GpuType[];
97
+ /** Region to build the snapshot in. */
98
+ regionId?: string;
99
+ /** Sandbox class (`container`, `linux-vm`, …). Dockerfile builds need `container`. */
100
+ sandboxClass?: snapshots.SandboxClass;
101
+ }
102
+ export interface SnapshotAttributes {
103
+ /** Snapshot ID. */
104
+ snapshotId: string;
105
+ /** Snapshot name; what sandboxes are created from. */
106
+ name: string;
107
+ /** State (`active` once usable). */
108
+ state: snapshots.SnapshotState;
109
+ /** The pulled or built image. */
110
+ imageName: string | undefined;
111
+ /** Internal image reference. */
112
+ ref: string | undefined;
113
+ /** vCPUs. */
114
+ cpu: number;
115
+ /** Memory in GiB. */
116
+ memory: number;
117
+ /** Disk in GiB. */
118
+ disk: number;
119
+ /** GPUs. */
120
+ gpu: number;
121
+ /** The sandbox this snapshot was captured from, for `from` snapshots. */
122
+ sourceSandboxId: string | undefined;
123
+ /** Hash of everything the snapshot was built from. */
124
+ buildHash: string;
125
+ }
126
+ export type Snapshot = Resource<"Daytona.Snapshot", SnapshotProps, SnapshotAttributes, never, Providers, SnapshotLookup>;
127
+ /**
128
+ * Props for {@link Snapshot.lookup}: find a snapshot this stack
129
+ * doesn't manage by its name or id.
130
+ */
131
+ export interface SnapshotLookup {
132
+ /** Snapshot name or id. */
133
+ name: string;
134
+ }
135
+ /**
136
+ * A Daytona snapshot: the image sandboxes boot from, with its default
137
+ * size. Pull one from a registry, build one from a Dockerfile on
138
+ * Daytona's builders, or capture one from a sandbox after running setup
139
+ * commands in it (a warm base to fork from).
140
+ *
141
+ * Snapshots are immutable: changing what one is built from replaces it.
142
+ * Daytona deactivates a snapshot after two weeks without use; deploy
143
+ * reactivates it.
144
+ * @see https://www.daytona.io/docs/en/snapshots/
145
+ *
146
+ * ### Pulling an Image
147
+ * **Example:** A public image with a size
148
+ * ```typescript
149
+ * export const Node = Daytona.Snapshot("Node", {
150
+ * image: "node:22-bookworm",
151
+ * cpu: 2,
152
+ * memory: 4,
153
+ * disk: 10,
154
+ * });
155
+ * ```
156
+ *
157
+ * ### Building from a Dockerfile
158
+ * **Example:** An inline Dockerfile built by Daytona
159
+ * ```typescript
160
+ * export const Base = Daytona.Snapshot("Base", {
161
+ * dockerfile: Dockerfile.inline`
162
+ * FROM node:22-bookworm
163
+ * RUN apt-get update && apt-get install -y git ripgrep
164
+ * `,
165
+ * cpu: 2,
166
+ * memory: 4,
167
+ * });
168
+ * ```
169
+ *
170
+ * ### Building a Directory
171
+ * **Example:** A Dockerfile and the files it copies
172
+ * ```typescript
173
+ * export const App = Daytona.Snapshot("App", {
174
+ * context: "./sandbox",
175
+ * build: { args: { NODE_ENV: "production" } },
176
+ * });
177
+ * ```
178
+ *
179
+ * ### Building with Local Docker
180
+ * **Example:** A build that reads a private npm token
181
+ * ```typescript
182
+ * export const App = Daytona.Snapshot("App", {
183
+ * context: "./sandbox",
184
+ * build: {
185
+ * remote: false,
186
+ * secrets: { npmrc: Redacted.make(process.env.NPM_TOKEN!) },
187
+ * },
188
+ * });
189
+ * ```
190
+ *
191
+ * ### A Warm Base to Fork From
192
+ * **Example:** Clone and install once, then start every sandbox from it
193
+ * ```typescript
194
+ * export const Warm = Daytona.Snapshot("Warm", {
195
+ * from: Base,
196
+ * run: [
197
+ * "git clone https://github.com/alchemy-run/alchemy /home/daytona/alchemy",
198
+ * "cd /home/daytona/alchemy && pnpm install",
199
+ * ],
200
+ * });
201
+ * ```
202
+ *
203
+ * ### Looking up an existing snapshot
204
+ * `Snapshot.lookup` references a snapshot Alchemy doesn't manage (created in
205
+ * the Daytona dashboard or by another stack). It is read during plan/deploy,
206
+ * never created, updated or deleted.
207
+ * `buildHash` is empty: the image wasn't built by this stack.
208
+ *
209
+ * **Example:** Start a sandbox from an existing snapshot
210
+ * ```typescript
211
+ * const base = Daytona.Snapshot.lookup({ name: "python-ml" });
212
+ * ```
213
+ *
214
+ * @resource
215
+ * @product Snapshot
216
+ */
217
+ export declare const Snapshot: import("alchemy/Resource").ResourceConstructor<Snapshot, Providers> & Effect.Effect<import("alchemy/Resource").ResourceConstructor<Snapshot, never>, never, never> & {
218
+ Self: import("alchemy/Self").Self<Snapshot>;
219
+ Provider: Provider.Provider<Snapshot>;
220
+ Aliases: readonly string[] | undefined;
221
+ ref(id: string, options?: {
222
+ stage?: string;
223
+ stack?: string;
224
+ }): Effect.Effect<Snapshot, never, never>;
225
+ } & {
226
+ lookup(props: {
227
+ name: import("alchemy/Input").Input<string>;
228
+ }): Snapshot;
229
+ } & ((id: string, props: import("./internal/Declared.ts").DeclaredProps<SnapshotProps>) => Effect.Effect<Snapshot, never, Providers>);
230
+ /**
231
+ * What Daytona's builders can build: any Dockerfile, for amd64. Daytona's
232
+ * build request has no field for build arguments, so the plan bakes them
233
+ * into `ARG` defaults, nor for BuildKit secrets, so the plan rejects them.
234
+ */
235
+ export declare const capabilities: BuildPlan.Capabilities;
236
+ declare const SnapshotSourceInvalid_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
237
+ readonly _tag: "Daytona.SnapshotSourceInvalid";
238
+ } & Readonly<A>;
239
+ /** The snapshot props name more than one of `image`, `dockerfile` and `from`, or none. */
240
+ export declare class SnapshotSourceInvalid extends SnapshotSourceInvalid_base<{
241
+ readonly message: string;
242
+ }> {
243
+ }
244
+ declare const SnapshotContextUnsupported_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
245
+ readonly _tag: "Daytona.SnapshotContextUnsupported";
246
+ } & Readonly<A>;
247
+ /** A runtime build's Dockerfile copies local files, which only a deploy-time `context` can provide. */
248
+ export declare class SnapshotContextUnsupported extends SnapshotContextUnsupported_base<{
249
+ readonly line: string;
250
+ }> {
251
+ get message(): string;
252
+ }
253
+ declare const SnapshotRunFailed_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
254
+ readonly _tag: "Daytona.SnapshotRunFailed";
255
+ } & Readonly<A>;
256
+ /** A `run` command exited non-zero while building a snapshot from a sandbox. */
257
+ export declare class SnapshotRunFailed extends SnapshotRunFailed_base<{
258
+ readonly command: string;
259
+ readonly exitCode: number;
260
+ readonly output: string;
261
+ }> {
262
+ get message(): string;
263
+ }
264
+ declare const SnapshotImageTagInvalid_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
265
+ readonly _tag: "Daytona.SnapshotImageTagInvalid";
266
+ } & Readonly<A>;
267
+ /** The image has no tag, or a moving one Daytona rejects. */
268
+ export declare class SnapshotImageTagInvalid extends SnapshotImageTagInvalid_base<{
269
+ readonly image: string;
270
+ }> {
271
+ get message(): string;
272
+ }
273
+ /**
274
+ * Check Dockerfile content built at runtime (a Worker has no file system,
275
+ * so there is no context to copy from).
276
+ */
277
+ export declare const checkRuntimeDockerfile: (content: string) => Effect.Effect<undefined, DockerfileParser.DockerfileSyntaxError | SnapshotContextUnsupported | BuildPlan.UnsupportedDockerfile, never>;
278
+ export declare const toSnapshotAttributes: (s: snapshots.SnapshotDto, buildHash: string) => SnapshotAttributes;
279
+ export declare const getSnapshot: (idOrName: string) => Effect.Effect<snapshots.SnapshotDto | undefined, dockerRegistry.DaytonaOpError, dockerRegistry.DaytonaOpContext>;
280
+ /** Wait for a snapshot to become usable, reactivating it when Daytona has deactivated it. */
281
+ export declare const waitForSnapshot: (idOrName: string) => Effect.Effect<snapshots.SnapshotDto, import("./internal/Wait.ts").StateFailed | import("./internal/Wait.ts").StateTimeout | snapshots.GetSnapshotError, dockerRegistry.DaytonaOpContext>;
282
+ /** Delete a snapshot by name (Daytona deletes by id). Deleting a missing one succeeds. */
283
+ export declare const deleteSnapshotByName: (name: string) => Effect.Effect<void, import("./internal/Wait.ts").StateTimeout | dockerRegistry.DaytonaOpError, dockerRegistry.DaytonaOpContext>;
284
+ export declare const deleteSnapshot: (idOrName: string) => Effect.Effect<void, import("./internal/Wait.ts").StateTimeout | dockerRegistry.DaytonaOpError, dockerRegistry.DaytonaOpContext>;
285
+ /**
286
+ * Start a sandbox from `from`, run the commands in it and capture it as a
287
+ * snapshot named `name`. The build sandbox is deleted whatever happens, and
288
+ * deletes itself after an hour if this process dies first.
289
+ */
290
+ export declare const captureSnapshot: (input: {
291
+ readonly labels: Record<string, string>;
292
+ readonly name: string;
293
+ readonly from: string;
294
+ readonly run: readonly string[];
295
+ readonly note: (message: string) => Effect.Effect<void>;
296
+ }) => Effect.Effect<snapshots.SnapshotDto, import("@distilled.cloud/core/errors").BadGateway | import("@distilled.cloud/core/errors").BadRequest | import("@distilled.cloud/core/config").ConfigError | import("@distilled.cloud/core/errors").Conflict | import("@distilled.cloud/daytona/Errors").DaytonaParseError | import("@distilled.cloud/core/errors").Forbidden | import("@distilled.cloud/core/errors").GatewayTimeout | sandboxes.GpuCreditsRequired | sandboxes.GpuSandboxNotEphemeral | import("effect/http/HttpClientError").HttpClientError | import("@distilled.cloud/core/errors").InternalServerError | import("@distilled.cloud/core/protocol-http").InvalidInput | import("@distilled.cloud/core/errors").Locked | sandboxes.NetworkAccessRestricted | import("@distilled.cloud/core/errors").NotFound | sandboxes.QueueTimeoutNotEnabled | sandboxes.SandboxAlreadyExists | sandboxes.SandboxNotFound | sandboxes.SandboxResourcesFromSnapshot | import("@distilled.cloud/core/sdk-error").SdkError | import("@distilled.cloud/core/errors").ServiceUnavailable | snapshots.SnapshotNotFound | SnapshotRunFailed | import("./internal/Wait.ts").StateFailed | import("./internal/Wait.ts").StateTimeout | import("@distilled.cloud/core/errors").TooManyRequests | import("@distilled.cloud/core/errors").Unauthorized | import("@distilled.cloud/daytona/Errors").UnknownDaytonaError | import("@distilled.cloud/core/errors").UnprocessableEntity | sandboxes.WindowsSandboxesUnavailable, dockerRegistry.DaytonaOpContext>;
297
+ /** A snapshot's source with every input resolved (Dockerfile as content). */
298
+ export interface ResolvedSnapshotSource {
299
+ readonly image?: string | undefined;
300
+ readonly dockerfile?: string | undefined;
301
+ readonly from?: string | undefined;
302
+ readonly run?: readonly string[] | undefined;
303
+ readonly entrypoint?: string[] | undefined;
304
+ readonly cpu?: number | undefined;
305
+ readonly memory?: number | undefined;
306
+ readonly disk?: number | undefined;
307
+ readonly gpu?: number | undefined;
308
+ readonly gpuType?: GpuType[] | undefined;
309
+ readonly regionId?: string | undefined;
310
+ readonly sandboxClass?: snapshots.SandboxClass | undefined;
311
+ /** Uploaded build contexts the Dockerfile copies from (`buildInfo.contextHashes`). */
312
+ readonly contextHashes?: string[] | undefined;
313
+ }
314
+ /**
315
+ * Build a snapshot named `name` and wait until it is active: pull or
316
+ * build on Daytona's builders, or capture it from a `from` sandbox after
317
+ * running `run`. Shared by the resource and the runtime binding.
318
+ */
319
+ export declare const buildSnapshot: (input: {
320
+ readonly name: string;
321
+ readonly source: ResolvedSnapshotSource;
322
+ readonly labels: Record<string, string>;
323
+ readonly note: (message: string) => Effect.Effect<void>;
324
+ }) => Effect.Effect<snapshots.SnapshotDto, sandboxes.GpuCreditsRequired | sandboxes.GpuSandboxNotEphemeral | sandboxes.NetworkAccessRestricted | sandboxes.QueueTimeoutNotEnabled | sandboxes.SandboxAlreadyExists | sandboxes.SandboxNotFound | sandboxes.SandboxResourcesFromSnapshot | SnapshotImageTagInvalid | snapshots.SnapshotNotFound | SnapshotRunFailed | import("./internal/Wait.ts").StateFailed | import("./internal/Wait.ts").StateTimeout | sandboxes.WindowsSandboxesUnavailable | dockerRegistry.DaytonaOpError, dockerRegistry.DaytonaOpContext>;
325
+ export declare const SnapshotProvider: () => import("effect/Layer").Layer<Provider.Provider<Snapshot>, never, import("alchemy/AlchemyContext").AlchemyContext | import("@alchemy.run/docker/Docker").Docker | import("effect/FileSystem").FileSystem | import("effect/Path").Path | import("alchemy/Stack").Stack | import("alchemy/Stage").Stage | dockerRegistry.DaytonaOpContext>;
326
+ export {};
327
+ //# sourceMappingURL=Snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Snapshot.d.ts","sources":["../src/Snapshot.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,KAAK,gBAAgB,MAAM,sCAAsC,CAAC;AAOzE,OAAO,KAAK,cAAc,MAAM,0CAA0C,CAAC;AAC3E,OAAO,KAAK,SAAS,MAAM,kCAAkC,CAAC;AAC9D,OAAO,KAAK,SAAS,MAAM,oCAAoC,CAAC;AAGhE,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAOjD,OAAO,EAAY,KAAK,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,uEAAuE;AACvE,MAAM,MAAM,WAAW,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpD,4EAA4E;AAC5E,MAAM,MAAM,gBAAgB,GAAG;IAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/D,MAAM,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;AAExC,MAAM,WAAW,aAAa;IAC5B,oEAAoE;IACpE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACpD;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACvC;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;IACxB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,sEAAsE;IACtE,QAAQ,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACjC,qDAAqD;IACrD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,8CAA8C;IAC9C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sFAAsF;IACtF,YAAY,CAAC,EAAE,SAAS,CAAC,YAAY,CAAC;CACvC;AAED,MAAM,WAAW,kBAAkB;IACjC,mBAAmB;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,KAAK,EAAE,SAAS,CAAC,aAAa,CAAC;IAC/B,iCAAiC;IACjC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,gCAAgC;IAChC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,aAAa;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,yEAAyE;IACzE,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,sDAAsD;IACtD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,QAAQ,GAAG,QAAQ,CAC7B,kBAAkB,EAClB,aAAa,EACb,kBAAkB,EAClB,KAAK,EACL,SAAS,EACT,cAAc,CACf,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiFG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;qIAAiE,CAAC;AAEvF;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,SAAS,CAAC,YAKpC,CAAC;;;;AAEF,0FAA0F;AAC1F,qBAAa,qBAAsB,SAAQ,2BAAkD;IAC3F,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;CAAG;;;;AAEL,uGAAuG;AACvG,qBAAa,0BAA2B,SAAQ,gCAE9C;IACA,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,CAAC;IACA,IAAa,OAAO,WAEnB;CACF;;;;AAED,gFAAgF;AAChF,qBAAa,iBAAkB,SAAQ,uBAA8C;IACnF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;IACA,IAAa,OAAO,WAEnB;CACF;;;;AAED,6DAA6D;AAC7D,qBAAa,uBAAwB,SAAQ,6BAAoD;IAC/F,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAAC;IACA,IAAa,OAAO,WAEnB;CACF;AAuBD;;;GAGG;AACH,eAAO,MAAM,sBAAsB,6JAoBjC,CAAC;AA4DH,eAAO,MAAM,oBAAoB,MAC5B,SAAS,CAAC,WAAW,aACb,MAAM,KAChB,kBAYD,CAAC;AAEH,eAAO,MAAM,WAAW,aAAc,MAAM,qHAG0B,CAAC;AAEvE,6FAA6F;AAC7F,eAAO,MAAM,eAAe,gNAY1B,CAAC;AAEH,0FAA0F;AAC1F,eAAO,MAAM,oBAAoB,mJAG/B,CAAC;AAEH,eAAO,MAAM,cAAc,uJAUzB,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,eAAe;qBACT,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;mBACxB,MAAM;mBACN,MAAM;kBACP,SAAS,MAAM,EAAE;mBAChB,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;k9CAwCxC,CAAC;AAElB,6EAA6E;AAC7E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,CAAC,YAAY,GAAG,SAAS,CAAC;IAC3D,sFAAsF;IACtF,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CAC/C;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa;mBACT,MAAM;qBACJ,sBAAsB;qBACtB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;mBACxB,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;miBAqCvD,CAAC;AAsBH,eAAO,MAAM,gBAAgB,+UA2F1B,CAAC"}