@alchemy.run/e2b 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 (284) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +56 -4
  3. package/lib/ApiKey.d.ts +53 -0
  4. package/lib/ApiKey.d.ts.map +1 -0
  5. package/lib/ApiKey.js +107 -0
  6. package/lib/ApiKey.js.map +1 -0
  7. package/lib/AuthProvider.d.ts +60 -0
  8. package/lib/AuthProvider.d.ts.map +1 -0
  9. package/lib/AuthProvider.js +293 -0
  10. package/lib/AuthProvider.js.map +1 -0
  11. package/lib/Bootstrap.d.ts +7 -0
  12. package/lib/Bootstrap.d.ts.map +1 -0
  13. package/lib/Bootstrap.js +25 -0
  14. package/lib/Bootstrap.js.map +1 -0
  15. package/lib/ConnectSandbox.d.ts +67 -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 +22 -0
  20. package/lib/ConnectSandboxHttp.d.ts.map +1 -0
  21. package/lib/ConnectSandboxHttp.js +30 -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 +139 -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 +22 -0
  32. package/lib/CreateSandboxHttp.d.ts.map +1 -0
  33. package/lib/CreateSandboxHttp.js +99 -0
  34. package/lib/CreateSandboxHttp.js.map +1 -0
  35. package/lib/CreateSecret.d.ts +57 -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 +20 -0
  40. package/lib/CreateSecretHttp.d.ts.map +1 -0
  41. package/lib/CreateSecretHttp.js +64 -0
  42. package/lib/CreateSecretHttp.js.map +1 -0
  43. package/lib/CreateSnapshot.d.ts +53 -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 +20 -0
  48. package/lib/CreateSnapshotHttp.d.ts.map +1 -0
  49. package/lib/CreateSnapshotHttp.js +41 -0
  50. package/lib/CreateSnapshotHttp.js.map +1 -0
  51. package/lib/CreateTemplate.d.ts +96 -0
  52. package/lib/CreateTemplate.d.ts.map +1 -0
  53. package/lib/CreateTemplate.js +3 -0
  54. package/lib/CreateTemplate.js.map +1 -0
  55. package/lib/CreateTemplateHttp.d.ts +20 -0
  56. package/lib/CreateTemplateHttp.d.ts.map +1 -0
  57. package/lib/CreateTemplateHttp.js +99 -0
  58. package/lib/CreateTemplateHttp.js.map +1 -0
  59. package/lib/CreateVolume.d.ts +58 -0
  60. package/lib/CreateVolume.d.ts.map +1 -0
  61. package/lib/CreateVolume.js +3 -0
  62. package/lib/CreateVolume.js.map +1 -0
  63. package/lib/CreateVolumeHttp.d.ts +20 -0
  64. package/lib/CreateVolumeHttp.d.ts.map +1 -0
  65. package/lib/CreateVolumeHttp.js +51 -0
  66. package/lib/CreateVolumeHttp.js.map +1 -0
  67. package/lib/Credentials.d.ts +18 -0
  68. package/lib/Credentials.d.ts.map +1 -0
  69. package/lib/Credentials.js +55 -0
  70. package/lib/Credentials.js.map +1 -0
  71. package/lib/E2BBindings.d.ts +35 -0
  72. package/lib/E2BBindings.d.ts.map +1 -0
  73. package/lib/E2BBindings.js +127 -0
  74. package/lib/E2BBindings.js.map +1 -0
  75. package/lib/Errors.d.ts +61 -0
  76. package/lib/Errors.d.ts.map +1 -0
  77. package/lib/Errors.js +23 -0
  78. package/lib/Errors.js.map +1 -0
  79. package/lib/InferEnv.d.ts +26 -0
  80. package/lib/InferEnv.d.ts.map +1 -0
  81. package/lib/InferEnv.js +1 -0
  82. package/lib/InferEnv.js.map +1 -0
  83. package/lib/MountVolume.d.ts +86 -0
  84. package/lib/MountVolume.d.ts.map +1 -0
  85. package/lib/MountVolume.js +3 -0
  86. package/lib/MountVolume.js.map +1 -0
  87. package/lib/MountVolumeLive.d.ts +23 -0
  88. package/lib/MountVolumeLive.d.ts.map +1 -0
  89. package/lib/MountVolumeLive.js +41 -0
  90. package/lib/MountVolumeLive.js.map +1 -0
  91. package/lib/Providers.d.ts +14 -0
  92. package/lib/Providers.d.ts.map +1 -0
  93. package/lib/Providers.js +23 -0
  94. package/lib/Providers.js.map +1 -0
  95. package/lib/ReadTeam.d.ts +41 -0
  96. package/lib/ReadTeam.d.ts.map +1 -0
  97. package/lib/ReadTeam.js +3 -0
  98. package/lib/ReadTeam.js.map +1 -0
  99. package/lib/ReadTeamHttp.d.ts +20 -0
  100. package/lib/ReadTeamHttp.d.ts.map +1 -0
  101. package/lib/ReadTeamHttp.js +40 -0
  102. package/lib/ReadTeamHttp.js.map +1 -0
  103. package/lib/ReadVolume.d.ts +25 -0
  104. package/lib/ReadVolume.d.ts.map +1 -0
  105. package/lib/ReadVolume.js +3 -0
  106. package/lib/ReadVolume.js.map +1 -0
  107. package/lib/ReadVolumeHttp.d.ts +20 -0
  108. package/lib/ReadVolumeHttp.d.ts.map +1 -0
  109. package/lib/ReadVolumeHttp.js +27 -0
  110. package/lib/ReadVolumeHttp.js.map +1 -0
  111. package/lib/ReadWebhook.d.ts +32 -0
  112. package/lib/ReadWebhook.d.ts.map +1 -0
  113. package/lib/ReadWebhook.js +3 -0
  114. package/lib/ReadWebhook.js.map +1 -0
  115. package/lib/ReadWebhookHttp.d.ts +20 -0
  116. package/lib/ReadWebhookHttp.d.ts.map +1 -0
  117. package/lib/ReadWebhookHttp.js +31 -0
  118. package/lib/ReadWebhookHttp.js.map +1 -0
  119. package/lib/ReadWriteVolume.d.ts +26 -0
  120. package/lib/ReadWriteVolume.d.ts.map +1 -0
  121. package/lib/ReadWriteVolume.js +3 -0
  122. package/lib/ReadWriteVolume.js.map +1 -0
  123. package/lib/ReadWriteVolumeHttp.d.ts +20 -0
  124. package/lib/ReadWriteVolumeHttp.d.ts.map +1 -0
  125. package/lib/ReadWriteVolumeHttp.js +27 -0
  126. package/lib/ReadWriteVolumeHttp.js.map +1 -0
  127. package/lib/Sandbox.d.ts +295 -0
  128. package/lib/Sandbox.d.ts.map +1 -0
  129. package/lib/Sandbox.js +351 -0
  130. package/lib/Sandbox.js.map +1 -0
  131. package/lib/SandboxClient.d.ts +226 -0
  132. package/lib/SandboxClient.d.ts.map +1 -0
  133. package/lib/SandboxClient.js +1 -0
  134. package/lib/SandboxClient.js.map +1 -0
  135. package/lib/SandboxEvents.d.ts +87 -0
  136. package/lib/SandboxEvents.d.ts.map +1 -0
  137. package/lib/SandboxEvents.js +39 -0
  138. package/lib/SandboxEvents.js.map +1 -0
  139. package/lib/SandboxEventsLive.d.ts +13 -0
  140. package/lib/SandboxEventsLive.d.ts.map +1 -0
  141. package/lib/SandboxEventsLive.js +80 -0
  142. package/lib/SandboxEventsLive.js.map +1 -0
  143. package/lib/Secret.d.ts +105 -0
  144. package/lib/Secret.d.ts.map +1 -0
  145. package/lib/Secret.js +161 -0
  146. package/lib/Secret.js.map +1 -0
  147. package/lib/Snapshot.d.ts +118 -0
  148. package/lib/Snapshot.d.ts.map +1 -0
  149. package/lib/Snapshot.js +158 -0
  150. package/lib/Snapshot.js.map +1 -0
  151. package/lib/Template.d.ts +313 -0
  152. package/lib/Template.d.ts.map +1 -0
  153. package/lib/Template.js +421 -0
  154. package/lib/Template.js.map +1 -0
  155. package/lib/Volume.d.ts +88 -0
  156. package/lib/Volume.d.ts.map +1 -0
  157. package/lib/Volume.js +136 -0
  158. package/lib/Volume.js.map +1 -0
  159. package/lib/VolumeFiles.d.ts +39 -0
  160. package/lib/VolumeFiles.d.ts.map +1 -0
  161. package/lib/VolumeFiles.js +1 -0
  162. package/lib/VolumeFiles.js.map +1 -0
  163. package/lib/Webhook.d.ts +83 -0
  164. package/lib/Webhook.d.ts.map +1 -0
  165. package/lib/Webhook.js +138 -0
  166. package/lib/Webhook.js.map +1 -0
  167. package/lib/WriteSecret.d.ts +34 -0
  168. package/lib/WriteSecret.d.ts.map +1 -0
  169. package/lib/WriteSecret.js +3 -0
  170. package/lib/WriteSecret.js.map +1 -0
  171. package/lib/WriteSecretHttp.d.ts +20 -0
  172. package/lib/WriteSecretHttp.d.ts.map +1 -0
  173. package/lib/WriteSecretHttp.js +37 -0
  174. package/lib/WriteSecretHttp.js.map +1 -0
  175. package/lib/WriteVolume.d.ts +25 -0
  176. package/lib/WriteVolume.d.ts.map +1 -0
  177. package/lib/WriteVolume.js +3 -0
  178. package/lib/WriteVolume.js.map +1 -0
  179. package/lib/WriteVolumeHttp.d.ts +20 -0
  180. package/lib/WriteVolumeHttp.d.ts.map +1 -0
  181. package/lib/WriteVolumeHttp.js +27 -0
  182. package/lib/WriteVolumeHttp.js.map +1 -0
  183. package/lib/index.d.ts +43 -0
  184. package/lib/index.d.ts.map +1 -0
  185. package/lib/index.js +43 -0
  186. package/lib/index.js.map +1 -0
  187. package/lib/internal/Declared.d.ts +29 -0
  188. package/lib/internal/Declared.d.ts.map +1 -0
  189. package/lib/internal/Declared.js +31 -0
  190. package/lib/internal/Declared.js.map +1 -0
  191. package/lib/internal/Login.d.ts +45 -0
  192. package/lib/internal/Login.d.ts.map +1 -0
  193. package/lib/internal/Login.js +157 -0
  194. package/lib/internal/Login.js.map +1 -0
  195. package/lib/internal/Ownership.d.ts +29 -0
  196. package/lib/internal/Ownership.d.ts.map +1 -0
  197. package/lib/internal/Ownership.js +49 -0
  198. package/lib/internal/Ownership.js.map +1 -0
  199. package/lib/internal/Program.d.ts +31 -0
  200. package/lib/internal/Program.d.ts.map +1 -0
  201. package/lib/internal/Program.js +60 -0
  202. package/lib/internal/Program.js.map +1 -0
  203. package/lib/internal/SandboxHandle.d.ts +25 -0
  204. package/lib/internal/SandboxHandle.d.ts.map +1 -0
  205. package/lib/internal/SandboxHandle.js +316 -0
  206. package/lib/internal/SandboxHandle.js.map +1 -0
  207. package/lib/internal/SnapshotBuild.d.ts +19 -0
  208. package/lib/internal/SnapshotBuild.d.ts.map +1 -0
  209. package/lib/internal/SnapshotBuild.js +49 -0
  210. package/lib/internal/SnapshotBuild.js.map +1 -0
  211. package/lib/internal/Tar.d.ts +10 -0
  212. package/lib/internal/Tar.d.ts.map +1 -0
  213. package/lib/internal/Tar.js +61 -0
  214. package/lib/internal/Tar.js.map +1 -0
  215. package/lib/internal/TemplateBuild.d.ts +142 -0
  216. package/lib/internal/TemplateBuild.d.ts.map +1 -0
  217. package/lib/internal/TemplateBuild.js +220 -0
  218. package/lib/internal/TemplateBuild.js.map +1 -0
  219. package/lib/internal/TemplatePlan.d.ts +57 -0
  220. package/lib/internal/TemplatePlan.d.ts.map +1 -0
  221. package/lib/internal/TemplatePlan.js +185 -0
  222. package/lib/internal/TemplatePlan.js.map +1 -0
  223. package/lib/internal/VolumeHttp.d.ts +5 -0
  224. package/lib/internal/VolumeHttp.d.ts.map +1 -0
  225. package/lib/internal/VolumeHttp.js +46 -0
  226. package/lib/internal/VolumeHttp.js.map +1 -0
  227. package/package.json +62 -3
  228. package/src/ApiKey.ts +148 -0
  229. package/src/AuthProvider.ts +437 -0
  230. package/src/Bootstrap.ts +51 -0
  231. package/src/ConnectSandbox.ts +71 -0
  232. package/src/ConnectSandboxHttp.ts +38 -0
  233. package/src/Contributions.ts +9 -0
  234. package/src/CreateSandbox.ts +157 -0
  235. package/src/CreateSandboxHttp.ts +131 -0
  236. package/src/CreateSecret.ts +65 -0
  237. package/src/CreateSecretHttp.ts +94 -0
  238. package/src/CreateSnapshot.ts +64 -0
  239. package/src/CreateSnapshotHttp.ts +55 -0
  240. package/src/CreateTemplate.ts +135 -0
  241. package/src/CreateTemplateHttp.ts +152 -0
  242. package/src/CreateVolume.ts +65 -0
  243. package/src/CreateVolumeHttp.ts +80 -0
  244. package/src/Credentials.ts +81 -0
  245. package/src/E2BBindings.ts +160 -0
  246. package/src/Errors.ts +47 -0
  247. package/src/InferEnv.ts +27 -0
  248. package/src/MountVolume.ts +92 -0
  249. package/src/MountVolumeLive.ts +49 -0
  250. package/src/Providers.ts +48 -0
  251. package/src/ReadTeam.ts +55 -0
  252. package/src/ReadTeamHttp.ts +44 -0
  253. package/src/ReadVolume.ts +29 -0
  254. package/src/ReadVolumeHttp.ts +32 -0
  255. package/src/ReadWebhook.ts +41 -0
  256. package/src/ReadWebhookHttp.ts +42 -0
  257. package/src/ReadWriteVolume.ts +30 -0
  258. package/src/ReadWriteVolumeHttp.ts +32 -0
  259. package/src/Sandbox.ts +581 -0
  260. package/src/SandboxClient.ts +268 -0
  261. package/src/SandboxEvents.ts +101 -0
  262. package/src/SandboxEventsLive.ts +118 -0
  263. package/src/Secret.ts +229 -0
  264. package/src/Snapshot.ts +234 -0
  265. package/src/Template.ts +636 -0
  266. package/src/Volume.ts +173 -0
  267. package/src/VolumeFiles.ts +53 -0
  268. package/src/Webhook.ts +215 -0
  269. package/src/WriteSecret.ts +39 -0
  270. package/src/WriteSecretHttp.ts +43 -0
  271. package/src/WriteVolume.ts +29 -0
  272. package/src/WriteVolumeHttp.ts +32 -0
  273. package/src/globals.d.ts +2 -0
  274. package/src/index.ts +42 -0
  275. package/src/internal/Declared.ts +80 -0
  276. package/src/internal/Login.ts +210 -0
  277. package/src/internal/Ownership.ts +67 -0
  278. package/src/internal/Program.ts +75 -0
  279. package/src/internal/SandboxHandle.ts +534 -0
  280. package/src/internal/SnapshotBuild.ts +74 -0
  281. package/src/internal/Tar.ts +74 -0
  282. package/src/internal/TemplateBuild.ts +383 -0
  283. package/src/internal/TemplatePlan.ts +230 -0
  284. package/src/internal/VolumeHttp.ts +88 -0
package/lib/Sandbox.js ADDED
@@ -0,0 +1,351 @@
1
+ import { Credentials } from "@distilled.cloud/e2b/Credentials";
2
+ import * as sandboxes from "@distilled.cloud/e2b/sandboxes";
3
+ import { Unowned } from "alchemy/AdoptPolicy";
4
+ import { isResolved } from "alchemy/Diff";
5
+ import * as Provider from "alchemy/Provider";
6
+ import { Resource } from "alchemy/Resource";
7
+ import * as Duration from "effect/Duration";
8
+ import * as Effect from "effect/Effect";
9
+ import * as Redacted from "effect/Redacted";
10
+ import * as Stream from "effect/Stream";
11
+ import { E2BUnexpectedResponse } from "./Errors.js";
12
+ import { declarable } from "./internal/Declared.js";
13
+ import { hasOwnershipMetadata, ownershipMetadata, userMetadata } from "./internal/Ownership.js";
14
+ import { denyUnlisted } from "./internal/SandboxHandle.js";
15
+ /**
16
+ * An E2B sandbox the stack owns: one long-lived sandbox that pauses when it
17
+ * is idle and resumes when it is used, instead of one per request.
18
+ *
19
+ * Use it for a workspace that outlives requests (an agent's home, a dev
20
+ * box) or to serve a template program at a stable URL. The sandbox runs for
21
+ * `timeout` after it starts or resumes, then E2B pauses it with its memory
22
+ * and files. A request to one of its URLs resumes it (`autoResume`), and so
23
+ * does `resume()` on `E2B.ConnectSandbox`.
24
+ *
25
+ * Alchemy stamps its stack, stage and logical ID into the sandbox's
26
+ * metadata to recognise the sandboxes it owns.
27
+ *
28
+ * :::caution
29
+ * Replacing the sandbox (a new or rebuilt `template`, or new `env`,
30
+ * `metadata`, `mounts`, `memory`, `autoResume`, `allowPublicTraffic`,
31
+ * `maskRequestHost` or `httpsPorts`) starts a
32
+ * fresh sandbox and kills the old one with its files. If E2B no longer has
33
+ * the sandbox, the next deploy that updates it (or `alchemy drift`) creates
34
+ * a new one.
35
+ * :::
36
+ *
37
+ * ### Creating a Sandbox
38
+ * **Example:** A dev box from a template
39
+ * ```typescript
40
+ * import * as E2B from "@alchemy.run/e2b";
41
+ * import * as Effect from "effect/Effect";
42
+ *
43
+ * export const Node = E2B.Template("Node", { image: "node:22" });
44
+ *
45
+ * export const DevBox = E2B.Sandbox("DevBox", {
46
+ * template: Node,
47
+ * timeout: "10 minutes",
48
+ * });
49
+ * ```
50
+ *
51
+ * ### Serving a template program
52
+ * A template program starts when its sandbox boots. Declare one sandbox for
53
+ * it: each new build of the program replaces the sandbox, so it always runs
54
+ * the current one.
55
+ *
56
+ * **Example:** The program at a stable URL
57
+ * ```typescript
58
+ * import * as E2B from "@alchemy.run/e2b";
59
+ * import * as Output from "alchemy/Output";
60
+ * import * as Effect from "effect/Effect";
61
+ * import Api from "./src/api.ts";
62
+ *
63
+ * export const ApiSandbox = Effect.gen(function* () {
64
+ * const sandbox = yield* E2B.Sandbox("Api", { template: Api });
65
+ * return { url: Output.interpolate`https://3000-${sandbox.sandboxId}.${sandbox.domain}` };
66
+ * });
67
+ * ```
68
+ *
69
+ * ### Private URLs
70
+ * **Example:** Require the traffic token
71
+ * ```typescript
72
+ * const sandbox = yield* E2B.Sandbox("Private", {
73
+ * template: Node,
74
+ * network: { allowPublicTraffic: false },
75
+ * });
76
+ * // send sandbox.trafficAccessToken in the `e2b-traffic-access-token` header
77
+ * ```
78
+ *
79
+ * ### Egress through your own proxy
80
+ * E2B sends the sandbox's outbound TCP through a SOCKS5 proxy you run,
81
+ * after its allow and deny rules. Code in the sandbox can't tell, and
82
+ * can't go around it.
83
+ *
84
+ * **Example:** A proxy over TLS, with a password
85
+ * ```typescript
86
+ * import * as E2B from "@alchemy.run/e2b";
87
+ * import * as Config from "effect/Config";
88
+ * import { Node } from "./Node.ts";
89
+ *
90
+ * export const Proxied = E2B.Sandbox("Proxied", {
91
+ * template: Node,
92
+ * network: {
93
+ * egressProxy: {
94
+ * address: "proxy.example.com:1080",
95
+ * username: "sandbox",
96
+ * password: Config.Redacted("PROXY_PASSWORD"),
97
+ * tls: { enabled: true },
98
+ * },
99
+ * },
100
+ * });
101
+ * ```
102
+ *
103
+ * ### Using it at runtime
104
+ * **Example:** Run a command in it from a Worker
105
+ * ```typescript
106
+ * const devBox = yield* E2B.ConnectSandbox(DevBox);
107
+ * // in fetch:
108
+ * yield* devBox.resume();
109
+ * const result = yield* devBox.exec("git pull && npm test", { cwd: "/home/user/repo" });
110
+ * ```
111
+ *
112
+ * ### Mounting volumes
113
+ * **Example:** A shared cache volume
114
+ * ```typescript
115
+ * export const Cache = E2B.Volume("Cache", {});
116
+ *
117
+ * export const Builder = E2B.Sandbox("Builder", {
118
+ * template: Node,
119
+ * mounts: [{ volume: Cache, path: "/cache" }],
120
+ * });
121
+ * ```
122
+ *
123
+ * ### Referencing a sandbox the stack doesn't manage
124
+ * **Example:** Look one up by id
125
+ * ```typescript
126
+ * const shared = E2B.Sandbox.lookup({ sandboxId: "i1a2b3c4d5e6f7g8h9" });
127
+ * const box = yield* E2B.ConnectSandbox(shared);
128
+ * ```
129
+ *
130
+ * @resource
131
+ * @product Sandbox
132
+ */
133
+ export const Sandbox = declarable()(Resource("E2B.Sandbox"));
134
+ const DEFAULT_TIMEOUT_SECONDS = 300;
135
+ const secondsOf = (timeout) => timeout === undefined
136
+ ? DEFAULT_TIMEOUT_SECONDS
137
+ : Math.max(1, Math.round(Duration.toMillis(Duration.fromInputUnsafe(timeout)) / 1000));
138
+ const redact = (token) => token === undefined || token === null
139
+ ? undefined
140
+ : Redacted.isRedacted(token)
141
+ ? token
142
+ : Redacted.make(token);
143
+ /** The E2B domain the credentials address; sandboxes on it report no domain of their own. */
144
+ const configuredDomain = Effect.gen(function* () {
145
+ const credentials = yield* Credentials;
146
+ return (yield* credentials).domain;
147
+ });
148
+ /** A sandbox's details, or `undefined` when E2B no longer has it. */
149
+ const observeSandbox = (sandboxId) => sandboxes.getSandbox({ sandboxID: sandboxId }).pipe(Effect.map((detail) => detail), Effect.catchTag("NotFound", () => Effect.undefined));
150
+ const toAttributes = (detail, stored, fallbackDomain) => ({
151
+ sandboxId: detail.sandboxID,
152
+ templateId: detail.templateID,
153
+ templateBuild: stored.templateBuild,
154
+ mounts: stored.mounts,
155
+ domain: detail.domain ?? fallbackDomain,
156
+ trafficAccessToken: stored.trafficAccessToken,
157
+ metadata: userMetadata(detail.metadata),
158
+ cpuCount: detail.cpuCount,
159
+ memoryMB: detail.memoryMB,
160
+ });
161
+ /** The network fields `updateSandboxNetwork` can change, as E2B stores them. */
162
+ const mutableNetwork = (network) => {
163
+ const desired = network === undefined ? {} : denyUnlisted(network);
164
+ return {
165
+ allowOut: [...(desired.allowOut ?? [])].sort(),
166
+ denyOut: [...(desired.denyOut ?? [])].sort(),
167
+ dnsServers: desired.dnsServers === undefined ? undefined : [...desired.dnsServers].sort(),
168
+ rules: desired.rules ?? {},
169
+ egressProxy: proxyIdentity(desired.egressProxy),
170
+ };
171
+ };
172
+ const plain = (value) => Redacted.isRedacted(value) ? Redacted.value(value) : value;
173
+ /** An egress proxy without its password, which E2B never returns. */
174
+ const proxyIdentity = (proxy) => proxy === undefined || proxy === null
175
+ ? undefined
176
+ : {
177
+ address: proxy.address,
178
+ username: proxy.username ?? undefined,
179
+ tls: proxy.tls?.enabled
180
+ ? {
181
+ serverName: proxy.tls.serverName ?? undefined,
182
+ caCert: proxy.tls.caCert ?? undefined,
183
+ }
184
+ : undefined,
185
+ };
186
+ const sameJson = (a, b) => JSON.stringify(a) === JSON.stringify(b);
187
+ /** The template's mounts and the sandbox's own, by path (the sandbox's win). */
188
+ const mountsOf = (props) => [
189
+ ...new Map([...(props.template.mounts ?? []), ...(props.mounts ?? [])].map((mount) => [mount.path, { volume: { name: mount.volume.name }, path: mount.path }])).values(),
190
+ ].sort((a, b) => a.path.localeCompare(b.path));
191
+ const templateBuildOf = (props) => props.template.buildId ?? props.template.setupHash;
192
+ /** Props whose change means a new sandbox (E2B can't change them on a live one). */
193
+ const replacingProps = (props) => ({
194
+ template: props.template.templateId,
195
+ build: templateBuildOf(props),
196
+ autoResume: props.autoResume ?? true,
197
+ memory: props.memory ?? true,
198
+ env: props.env ?? {},
199
+ metadata: props.metadata ?? {},
200
+ mounts: mountsOf(props),
201
+ allowPublicTraffic: props.network?.allowPublicTraffic ?? true,
202
+ maskRequestHost: props.network?.maskRequestHost,
203
+ httpsPorts: [...(props.network?.httpsPorts ?? [])].sort((a, b) => a - b),
204
+ });
205
+ export const SandboxProvider = () => Provider.effect(Sandbox, Effect.gen(function* () {
206
+ return {
207
+ stables: ["sandboxId", "templateId", "domain"],
208
+ diff: Effect.fn(function* ({ news, olds }) {
209
+ if (!isResolved(news) || olds === undefined)
210
+ return undefined;
211
+ if (!sameJson(replacingProps(olds), replacingProps(news))) {
212
+ return { action: "replace" };
213
+ }
214
+ return undefined;
215
+ }),
216
+ read: Effect.fn(function* ({ id, output }) {
217
+ if (output === undefined)
218
+ return undefined;
219
+ const detail = yield* observeSandbox(output.sandboxId);
220
+ if (detail === undefined)
221
+ return undefined;
222
+ const attrs = toAttributes(detail, output, yield* configuredDomain);
223
+ const ours = yield* hasOwnershipMetadata(id, detail.metadata);
224
+ return ours ? attrs : Unowned(attrs);
225
+ }),
226
+ lookup: Effect.fn(function* ({ sandboxId }) {
227
+ const detail = yield* observeSandbox(sandboxId);
228
+ if (detail === undefined)
229
+ return undefined;
230
+ return toAttributes(detail, { templateBuild: undefined, trafficAccessToken: undefined, mounts: [] }, yield* configuredDomain);
231
+ }),
232
+ reconcile: Effect.fn(function* ({ id, news, olds, output, session }) {
233
+ const timeout = secondsOf(news.timeout);
234
+ const memory = news.memory ?? true;
235
+ const autoResume = news.autoResume ?? true;
236
+ const mounts = mountsOf(news);
237
+ const templateBuild = templateBuildOf(news);
238
+ // Observe — `output` caches the id; the sandbox may be gone.
239
+ let detail = output === undefined ? undefined : yield* observeSandbox(output.sandboxId);
240
+ let trafficAccessToken = output?.trafficAccessToken;
241
+ // Ensure
242
+ if (detail === undefined) {
243
+ yield* session.note(`Creating sandbox from ${news.template.templateId}...`);
244
+ const created = yield* sandboxes.createSandbox({
245
+ templateID: news.template.templateId,
246
+ timeout,
247
+ autoPause: true,
248
+ autoPauseMemory: memory,
249
+ autoResume: { enabled: autoResume },
250
+ metadata: { ...news.metadata, ...(yield* ownershipMetadata(id)) },
251
+ ...(news.env === undefined ? {} : { envVars: news.env }),
252
+ ...(news.network === undefined ? {} : { network: denyUnlisted(news.network) }),
253
+ ...(mounts.length === 0
254
+ ? {}
255
+ : {
256
+ volumeMounts: mounts.map((mount) => ({
257
+ name: mount.volume.name,
258
+ path: mount.path,
259
+ })),
260
+ }),
261
+ });
262
+ trafficAccessToken = redact(created.trafficAccessToken);
263
+ detail = yield* observeSandbox(created.sandboxID);
264
+ if (detail === undefined) {
265
+ return yield* new E2BUnexpectedResponse({
266
+ message: `E2B sandbox ${created.sandboxID} vanished after create`,
267
+ });
268
+ }
269
+ return toAttributes(detail, { templateBuild, trafficAccessToken, mounts }, created.domain ?? (yield* configuredDomain));
270
+ }
271
+ // Sync — egress rules, observed against what E2B stores.
272
+ const desiredNetwork = mutableNetwork(news.network);
273
+ const observedNetwork = mutableNetwork(detail.network);
274
+ const dnsMatches = desiredNetwork.dnsServers === undefined ||
275
+ sameJson(desiredNetwork.dnsServers, observedNetwork.dnsServers);
276
+ if (!sameJson(desiredNetwork.allowOut, observedNetwork.allowOut) ||
277
+ !sameJson(desiredNetwork.denyOut, observedNetwork.denyOut) ||
278
+ !sameJson(desiredNetwork.rules, observedNetwork.rules) ||
279
+ !sameJson(desiredNetwork.egressProxy, observedNetwork.egressProxy) ||
280
+ // The proxy's password can't be observed, so `olds` is the only
281
+ // signal it changed.
282
+ (olds !== undefined &&
283
+ plain(olds.network?.egressProxy?.password) !==
284
+ plain(news.network?.egressProxy?.password)) ||
285
+ !dnsMatches) {
286
+ yield* session.note(`Updating sandbox ${detail.sandboxID} network...`);
287
+ yield* sandboxes.updateSandboxNetwork({
288
+ sandboxID: detail.sandboxID,
289
+ allowOut: desiredNetwork.allowOut,
290
+ denyOut: desiredNetwork.denyOut,
291
+ rules: desiredNetwork.rules,
292
+ // An update replaces the whole configuration: a field left
293
+ // out is cleared.
294
+ ...(news.network?.egressProxy === undefined
295
+ ? {}
296
+ : { egressProxy: news.network.egressProxy }),
297
+ ...(desiredNetwork.dnsServers === undefined
298
+ ? {}
299
+ : { dnsServers: desiredNetwork.dnsServers }),
300
+ });
301
+ }
302
+ // Sync — the run's timeout. E2B doesn't report the configured
303
+ // timeout, so `olds` is the only signal it changed.
304
+ if (olds !== undefined && secondsOf(olds.timeout) !== timeout) {
305
+ if (detail.state === "paused") {
306
+ // Resuming takes the new timeout; the sandbox pauses again after it.
307
+ const resumed = yield* sandboxes.connectSandbox({
308
+ sandboxID: detail.sandboxID,
309
+ timeout,
310
+ });
311
+ trafficAccessToken = redact(resumed.trafficAccessToken) ?? trafficAccessToken;
312
+ }
313
+ else {
314
+ yield* sandboxes.setSandboxTimeout({ sandboxID: detail.sandboxID, timeout });
315
+ }
316
+ }
317
+ return toAttributes(detail, { templateBuild, trafficAccessToken, mounts }, yield* configuredDomain);
318
+ }),
319
+ delete: Effect.fn(function* ({ output }) {
320
+ yield* sandboxes
321
+ .deleteSandbox({ sandboxID: output.sandboxId })
322
+ .pipe(Effect.catchTag("NotFound", () => Effect.void));
323
+ }),
324
+ list: Effect.fn(function* () {
325
+ const domain = yield* configuredDomain;
326
+ const all = Array.from(yield* Stream.runCollect(sandboxes.listSandboxes.items({
327
+ state: ["running", "paused"],
328
+ limit: 100,
329
+ })));
330
+ return (all
331
+ // Declared sandboxes and the ones bindings create at run time
332
+ // both carry `alchemy::stack`, so `nuke` finds both.
333
+ .filter((sandbox) => sandbox.metadata?.["alchemy::stack"] !== undefined)
334
+ .map((sandbox) => ({
335
+ sandboxId: sandbox.sandboxID,
336
+ templateId: sandbox.templateID,
337
+ templateBuild: undefined,
338
+ mounts: (sandbox.volumeMounts ?? []).map((mount) => ({
339
+ volume: { name: mount.name },
340
+ path: mount.path,
341
+ })),
342
+ domain,
343
+ trafficAccessToken: undefined,
344
+ metadata: userMetadata(sandbox.metadata),
345
+ cpuCount: sandbox.cpuCount,
346
+ memoryMB: sandbox.memoryMB,
347
+ })));
348
+ }),
349
+ };
350
+ }));
351
+ //# sourceMappingURL=Sandbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sandbox.js","sources":["../src/Sandbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,226 @@
1
+ import type * as E2B from "@distilled.cloud/e2b";
2
+ import type * as envd from "@distilled.cloud/e2b/envd";
3
+ import type * as filesystem from "@distilled.cloud/e2b/filesystem";
4
+ import type * as process from "@distilled.cloud/e2b/process";
5
+ import type * as sandboxes from "@distilled.cloud/e2b/sandboxes";
6
+ import type * as templates from "@distilled.cloud/e2b/templates";
7
+ import type * as volumes from "@distilled.cloud/e2b/volumes";
8
+ import type { RuntimeContext } from "alchemy/RuntimeContext";
9
+ import type * as Sandbox from "alchemy/Sandbox";
10
+ import type * as Duration from "effect/Duration";
11
+ import type * as Effect from "effect/Effect";
12
+ import type * as Scope from "effect/Scope";
13
+ import type * as Stream from "effect/Stream";
14
+ import type { E2BUnexpectedResponse, ExecTimedOut, SandboxBaseMissing } from "./Errors.ts";
15
+ /** Errors an E2B call can fail with. */
16
+ export type E2BError = E2B.E2BOpError | templates.TemplateInUse | volumes.VolumesNotEnabled | process.ConnectStreamError | process.SandboxNotRunning | filesystem.SandboxNotRunning | envd.SandboxNotRunning | SandboxBaseMissing | ExecTimedOut | E2BUnexpectedResponse;
17
+ /** A process inside a sandbox, by pid or by the tag it was started with. */
18
+ export type ProcessSelector = process.ConnectProcessRequest["process"];
19
+ /** An event from a watched directory. */
20
+ export type WatchEvent = filesystem.WatchDirEvent;
21
+ /** A file or directory inside a sandbox. */
22
+ export type EntryInfo = filesystem.EntryInfo;
23
+ /** A running process inside a sandbox, as `processes.list()` reports it. */
24
+ export type ProcessInfo = process.ProcessInfo;
25
+ /**
26
+ * A command: a shell command line (run with `bash -l -c`), or an argument
27
+ * vector run directly.
28
+ */
29
+ export type Command = Sandbox.Command;
30
+ /**
31
+ * `cwd` defaults to the sandbox user's home; `timeout` kills the command and
32
+ * fails with `ExecTimedOut`.
33
+ */
34
+ export type ExecOptions = Sandbox.ExecOptions;
35
+ /** What a finished command printed, and its exit code. A non-zero exit code is returned, not failed. */
36
+ export interface ExecResult extends Sandbox.ExecResult {
37
+ readonly pid: number;
38
+ /** envd's error for a process that could not run (e.g. the executable is missing). */
39
+ readonly error: string | undefined;
40
+ }
41
+ export interface StartOptions {
42
+ /** Working directory. @default the sandbox user's home */
43
+ readonly cwd?: string;
44
+ /** Environment variables for the command. */
45
+ readonly env?: Readonly<Record<string, string>>;
46
+ /** A tag to find the process by with `processes.attach({ tag })`. */
47
+ readonly tag?: string;
48
+ /** Keep stdin open for `write`. @default false */
49
+ readonly stdin?: boolean;
50
+ }
51
+ /** A chunk of a process's output. */
52
+ export type ProcessOutput = Sandbox.ProcessOutput;
53
+ /**
54
+ * A process started (or attached to) in the current scope. Closing the
55
+ * scope detaches: the process keeps running until it exits or is killed.
56
+ * `id` is its pid as a string.
57
+ */
58
+ export interface Process extends Sandbox.Process<E2BError> {
59
+ readonly pid: number;
60
+ /** stdout and stderr, from now until the process exits. Read it once. */
61
+ readonly output: Stream.Stream<ProcessOutput, E2BError>;
62
+ /** Writes to stdin (the process must have been started with `stdin: true`). */
63
+ write(data: string | Uint8Array): Effect.Effect<void, E2BError, RuntimeContext>;
64
+ /** Closes stdin. */
65
+ closeStdin(): Effect.Effect<void, E2BError, RuntimeContext>;
66
+ /** Signals the process. @default "SIGKILL" */
67
+ kill(signal?: "SIGTERM" | "SIGKILL"): Effect.Effect<void, E2BError, RuntimeContext>;
68
+ /** Waits for the process to exit, with everything it printed since it was started or attached. */
69
+ readonly wait: Effect.Effect<ExecResult, E2BError>;
70
+ }
71
+ /** The processes running in the sandbox. */
72
+ export interface Processes {
73
+ list(): Effect.Effect<ReadonlyArray<ProcessInfo>, E2BError, RuntimeContext>;
74
+ /** Re-attaches to a running process, by pid or tag; output streams from now on. */
75
+ attach(process: ProcessSelector): Effect.Effect<Process, E2BError, RuntimeContext | Scope.Scope>;
76
+ }
77
+ export interface PtyOptions extends Sandbox.PtyOptions {
78
+ /** A tag to find the terminal's process by. */
79
+ readonly tag?: string;
80
+ }
81
+ /** A pseudo-terminal opened in the current scope. Closing the scope detaches. `id` is its pid as a string. */
82
+ export interface PtyConnection extends Sandbox.PtyConnection<E2BError> {
83
+ readonly pid: number;
84
+ /** The terminal's output. Read it once. */
85
+ readonly output: Stream.Stream<Uint8Array, E2BError>;
86
+ /** Types into the terminal. */
87
+ write(data: string | Uint8Array): Effect.Effect<void, E2BError, RuntimeContext>;
88
+ resize(size: {
89
+ readonly cols: number;
90
+ readonly rows: number;
91
+ }): Effect.Effect<void, E2BError, RuntimeContext>;
92
+ /** Kills the terminal's process. */
93
+ kill(): Effect.Effect<void, E2BError, RuntimeContext>;
94
+ /** Waits for the terminal's process to exit. */
95
+ readonly wait: Effect.Effect<{
96
+ readonly exitCode: number;
97
+ }, E2BError>;
98
+ }
99
+ /** Pseudo-terminals inside the sandbox. */
100
+ export interface Pty extends Sandbox.Pty<E2BError, PtyOptions> {
101
+ open(options: PtyOptions): Effect.Effect<PtyConnection, E2BError, RuntimeContext | Scope.Scope>;
102
+ }
103
+ /** The sandbox's filesystem, through envd. Relative paths resolve in the user's home. */
104
+ export interface Files extends Sandbox.Files<E2BError, EntryInfo> {
105
+ read(path: string): Effect.Effect<Uint8Array, E2BError, RuntimeContext>;
106
+ readText(path: string): Effect.Effect<string, E2BError, RuntimeContext>;
107
+ /** Writes a file, creating parent directories. */
108
+ write(path: string, data: string | Uint8Array): Effect.Effect<void, E2BError, RuntimeContext>;
109
+ list(path: string, options?: {
110
+ readonly depth?: number;
111
+ }): Effect.Effect<ReadonlyArray<EntryInfo>, E2BError, RuntimeContext>;
112
+ stat(path: string): Effect.Effect<EntryInfo, E2BError, RuntimeContext>;
113
+ remove(path: string): Effect.Effect<void, E2BError, RuntimeContext>;
114
+ /** Creates the directory and its parents. */
115
+ makeDir(path: string): Effect.Effect<void, E2BError, RuntimeContext>;
116
+ exists(path: string): Effect.Effect<boolean, E2BError, RuntimeContext>;
117
+ move(source: string, destination: string): Effect.Effect<EntryInfo, E2BError, RuntimeContext>;
118
+ /** Concatenates files into `destination`. */
119
+ compose(sources: ReadonlyArray<string>, destination: string): Effect.Effect<void, E2BError, RuntimeContext>;
120
+ /** Streams changes under a directory until interrupted. */
121
+ watch(path: string, options?: {
122
+ readonly recursive?: boolean;
123
+ readonly includeEntry?: boolean;
124
+ }): Stream.Stream<WatchEvent, E2BError, RuntimeContext>;
125
+ }
126
+ /** One fork's outcome: the new sandbox, or why it could not start. */
127
+ export type ForkResult = {
128
+ readonly _tag: "Forked";
129
+ readonly sandbox: E2BSandbox;
130
+ } | {
131
+ readonly _tag: "ForkFailed";
132
+ readonly code: number | undefined;
133
+ readonly message: string;
134
+ };
135
+ /** Network rules for a running sandbox (`updateSandboxNetwork`), in E2B's shape. */
136
+ export type SandboxNetworkUpdate = Omit<sandboxes.UpdateSandboxNetworkRequest, "sandboxID">;
137
+ /**
138
+ * A port inside an E2B sandbox, served at `https://<port>-<sandboxId>.<domain>`.
139
+ * `fetch` sends a client request to it, or proxies a server request there.
140
+ */
141
+ export interface Port extends Sandbox.SandboxPort<E2BError> {
142
+ /** The host E2B serves the port on: `<port>-<sandboxId>.<domain>`. */
143
+ readonly host: string;
144
+ /** `https://<host>`. Public unless the sandbox requires its traffic token. */
145
+ readonly url: string;
146
+ }
147
+ /**
148
+ * What you can do with a sandbox, however you got it. Calls that reach
149
+ * inside a paused sandbox (`exec`, `start`, `files`, `pty`) fail with
150
+ * `SandboxNotRunning`: `resume()` it first. A sandbox created with
151
+ * `autoResume` is the exception: E2B resumes it on any request.
152
+ */
153
+ export interface SandboxOperations extends Sandbox.SandboxExec<E2BError, ExecResult, ExecOptions>, Sandbox.SandboxProcesses<E2BError, StartOptions>, Sandbox.SandboxFiles<E2BError, EntryInfo>, Sandbox.SandboxPty<E2BError, PtyOptions>, Sandbox.SandboxPorts<E2BError, Port> {
154
+ /** Runs a command to completion. */
155
+ exec(command: Command, options?: ExecOptions): Effect.Effect<ExecResult, E2BError, RuntimeContext>;
156
+ /** Starts a command in the current scope. */
157
+ start(command: Command, options?: StartOptions): Effect.Effect<Process, E2BError, RuntimeContext | Scope.Scope>;
158
+ readonly processes: Processes;
159
+ readonly files: Files;
160
+ readonly pty: Pty;
161
+ /**
162
+ * A port inside the sandbox. Its `fetch` adds the sandbox's traffic token
163
+ * when the sandbox's URLs are not public.
164
+ */
165
+ getTcpPort(port: number): Effect.Effect<Port, E2BError, RuntimeContext>;
166
+ /** Live details: state, resources, network, metadata. */
167
+ describe(): Effect.Effect<sandboxes.SandboxDetail, E2BError, RuntimeContext>;
168
+ /** Pauses the sandbox, keeping its memory and files. */
169
+ pause(): Effect.Effect<void, E2BError, RuntimeContext>;
170
+ /**
171
+ * Resumes a paused sandbox (a no-op on a running one). `timeout` sets how
172
+ * long it runs before it is paused or killed again.
173
+ */
174
+ resume(options?: {
175
+ readonly timeout?: Duration.Input;
176
+ }): Effect.Effect<void, E2BError, RuntimeContext>;
177
+ /** Kills the sandbox. Killing one that is gone succeeds. */
178
+ kill(): Effect.Effect<void, E2BError, RuntimeContext>;
179
+ /** Sets the time left before the sandbox is killed (or paused, with `autoPause`). */
180
+ setTimeout(timeout: Duration.Input): Effect.Effect<void, E2BError, RuntimeContext>;
181
+ /** Extends the sandbox's lifetime by `duration`. */
182
+ refresh(duration?: Duration.Input): Effect.Effect<void, E2BError, RuntimeContext>;
183
+ /** Replaces the sandbox's egress rules (E2B's `updateSandboxNetwork`). */
184
+ updateNetwork(network: SandboxNetworkUpdate): Effect.Effect<void, E2BError, RuntimeContext>;
185
+ /**
186
+ * Snapshots the sandbox into a named template (memory and disk by
187
+ * default). Sandboxes created from it start where this one is now.
188
+ */
189
+ snapshot(options?: {
190
+ readonly name?: string;
191
+ readonly memory?: boolean;
192
+ }): Effect.Effect<sandboxes.SnapshotInfo, E2BError, RuntimeContext>;
193
+ /**
194
+ * Checkpoints the sandbox (it keeps running) and starts `count` copies of
195
+ * it. Each fork succeeds or fails on its own.
196
+ */
197
+ fork(options?: {
198
+ readonly count?: number;
199
+ readonly timeout?: Duration.Input;
200
+ }): Effect.Effect<ReadonlyArray<ForkResult>, E2BError, RuntimeContext>;
201
+ /** CPU, memory and disk metrics. */
202
+ metrics(): Effect.Effect<ReadonlyArray<sandboxes.SandboxMetric>, E2BError, RuntimeContext>;
203
+ /** The sandbox's logs. */
204
+ logs(options?: Omit<sandboxes.ListSandboxLogsRequest, "sandboxID">): Effect.Effect<sandboxes.SandboxLogsV2Response, E2BError, RuntimeContext>;
205
+ }
206
+ /**
207
+ * A sandbox created or connected at runtime (`CreateSandbox`). Holds only
208
+ * ids and tokens, so it can be rebuilt from its id with `connect(id)` in
209
+ * any request.
210
+ */
211
+ export interface E2BSandbox extends SandboxOperations {
212
+ readonly sandboxId: string;
213
+ readonly templateId: string;
214
+ /** The domain the sandbox's ports are served under (`<port>-<sandboxId>.<domain>`). */
215
+ readonly domain: string;
216
+ /** What E2B returned for the sandbox when it was created or connected. */
217
+ readonly info: sandboxes.Sandbox;
218
+ }
219
+ /**
220
+ * A sandbox declared in the stack (`ConnectSandbox`). The same operations
221
+ * as {@link E2BSandbox}; its id is read at runtime.
222
+ */
223
+ export interface ConnectedSandbox extends SandboxOperations {
224
+ readonly sandboxId: Effect.Effect<string, never, RuntimeContext>;
225
+ }
226
+ //# sourceMappingURL=SandboxClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SandboxClient.d.ts","sources":["../src/SandboxClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=SandboxClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SandboxClient.js","sources":["../src/SandboxClient.ts"],"names":[],"mappings":""}