@alchemy.run/e2b 0.0.0-stage → 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 +60 -2
  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 +78 -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
@@ -0,0 +1,96 @@
1
+ import type * as tags from "@distilled.cloud/e2b/tags";
2
+ import type * as templates from "@distilled.cloud/e2b/templates";
3
+ import type * as unstable from "@distilled.cloud/e2b/unstable";
4
+ import * as Binding from "alchemy/Binding";
5
+ import type { RuntimeContext } from "alchemy/RuntimeContext";
6
+ import type * as Effect from "effect/Effect";
7
+ import type * as PlatformError from "effect/PlatformError";
8
+ import type { TemplateBuildFailed } from "./Errors.ts";
9
+ import type { TemplateBuildSpec } from "./internal/TemplateBuild.ts";
10
+ import type { E2BError } from "./SandboxClient.ts";
11
+ /**
12
+ * What a runtime build takes: E2B's own build inputs (a base `image` or
13
+ * `fromTemplate`, then `env`, `files` and `run` steps), with no Dockerfile.
14
+ * Files come from memory; there is no build-context directory where a
15
+ * Worker runs.
16
+ */
17
+ export type RuntimeTemplateSpec = TemplateBuildSpec;
18
+ /** A built template. */
19
+ export interface TemplateInfo {
20
+ readonly templateId: string;
21
+ readonly buildId: string;
22
+ /** Fully qualified names, e.g. `my-team/my-template:default`. */
23
+ readonly names: ReadonlyArray<string>;
24
+ }
25
+ /** Errors a runtime build can fail with. */
26
+ export type TemplateBuildError = E2BError | TemplateBuildFailed | PlatformError.PlatformError;
27
+ /** E2B templates: build, look up, tag and delete them at runtime. */
28
+ export interface TemplatesClient {
29
+ /** Builds a template and waits until it is ready. */
30
+ build(spec: RuntimeTemplateSpec): Effect.Effect<TemplateInfo, TemplateBuildError, RuntimeContext>;
31
+ /**
32
+ * Builds a template unless a ready build of these exact inputs exists.
33
+ * Each build is tagged with its content hash, so a repeat call is one
34
+ * lookup.
35
+ */
36
+ getOrBuild(spec: RuntimeTemplateSpec): Effect.Effect<TemplateInfo, TemplateBuildError, RuntimeContext>;
37
+ /** A template by id or name (alias), or `undefined`. */
38
+ get(nameOrId: string): Effect.Effect<templates.GetTemplateResponse | undefined, E2BError, RuntimeContext>;
39
+ /** The team's templates. */
40
+ list(options?: Omit<templates.ListTemplatesRequest, "teamID" | "nextToken">): Effect.Effect<ReadonlyArray<templates.Template>, E2BError, RuntimeContext>;
41
+ /** E2B's public base templates. */
42
+ listDefaults(): Effect.Effect<templates.ListDefaultTemplatesResponse, E2BError, RuntimeContext>;
43
+ /** Templates matching a search. */
44
+ search(options: unstable.SearchTemplatesRequest): Effect.Effect<unstable.TemplateSearchResponse, E2BError, RuntimeContext>;
45
+ /** Whether other teams can create sandboxes from the template. */
46
+ setPublic(templateId: string, isPublic: boolean): Effect.Effect<void, E2BError, RuntimeContext>;
47
+ /** A build's status, with its newest log lines. */
48
+ buildStatus(templateId: string, buildId: string, options?: Omit<templates.GetTemplateBuildStatusRequest, "templateID" | "buildID">): Effect.Effect<templates.TemplateBuildInfo, E2BError, RuntimeContext>;
49
+ /** A build's logs. */
50
+ buildLogs(templateId: string, buildId: string, options?: Omit<templates.ListTemplateBuildLogsRequest, "templateID" | "buildID">): Effect.Effect<templates.TemplateBuildLogsResponse, E2BError, RuntimeContext>;
51
+ /** Deletes a template. Deleting one that is gone succeeds. */
52
+ delete(templateId: string): Effect.Effect<void, E2BError, RuntimeContext>;
53
+ /** Tags on builds: `name:tag` names a build sandboxes are created from. */
54
+ readonly tags: {
55
+ /** Assigns tags to the build `target` (`name:tag` or `name`) points at. */
56
+ assign(target: string, tags: ReadonlyArray<string>): Effect.Effect<tags.AssignedTemplateTags, E2BError, RuntimeContext>;
57
+ /** Removes tags from a template by name. */
58
+ remove(name: string, tags: ReadonlyArray<string>): Effect.Effect<void, E2BError, RuntimeContext>;
59
+ list(templateId: string): Effect.Effect<tags.ListTemplateTagsResponse, E2BError, RuntimeContext>;
60
+ exists(templateId: string, tag: string): Effect.Effect<boolean, E2BError, RuntimeContext>;
61
+ count(templateId: string): Effect.Effect<number, E2BError, RuntimeContext>;
62
+ groups(templateId: string, options?: Omit<tags.ListTemplateTagGroupsRequest, "templateID">): Effect.Effect<tags.TemplateTagGroupsResponse, E2BError, RuntimeContext>;
63
+ assignments(templateId: string, tag: string, options?: Omit<tags.ListTemplateTagAssignmentsRequest, "templateID" | "tag">): Effect.Effect<tags.TemplateTagAssignmentsResponse, E2BError, RuntimeContext>;
64
+ };
65
+ }
66
+ /**
67
+ * Build E2B templates at runtime from E2B's own build inputs: a template
68
+ * per repository, per customer image, per agent configuration.
69
+ * E2B builds remotely, so this works from a Worker.
70
+ *
71
+ * Templates built at runtime carry no metadata, so they are not deleted
72
+ * when the host is destroyed. Delete them with `delete` when their owner
73
+ * goes away.
74
+ *
75
+ * ### Building at runtime
76
+ * **Example:** A template per repository, built once
77
+ * ```typescript
78
+ * const templates = yield* E2B.CreateTemplate();
79
+ * const sandboxes = yield* E2B.CreateSandbox();
80
+ * // in fetch:
81
+ * const template = yield* templates.getOrBuild({
82
+ * name: `repo-${slug}`,
83
+ * image: "node:22-bookworm",
84
+ * files: [{ path: "/home/user/app/package.json", contents: packageJson }],
85
+ * run: ["cd /home/user/app && npm install"],
86
+ * });
87
+ * const sandbox = yield* sandboxes.create({ templateID: template.templateId });
88
+ * ```
89
+ *
90
+ * @binding
91
+ * @product Template
92
+ */
93
+ export interface CreateTemplate extends Binding.Service<CreateTemplate, "E2B.CreateTemplate", () => Effect.Effect<TemplatesClient>> {
94
+ }
95
+ export declare const CreateTemplate: CreateTemplate;
96
+ //# sourceMappingURL=CreateTemplate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateTemplate.d.ts","sources":["../src/CreateTemplate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import * as Binding from "alchemy/Binding";
2
+ export const CreateTemplate = Binding.Service("E2B.CreateTemplate");
3
+ //# sourceMappingURL=CreateTemplate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateTemplate.js","sources":["../src/CreateTemplate.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAmI3C,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAiB,oBAAoB,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ import * as Layer from "effect/Layer";
2
+ import { CreateTemplate } from "./CreateTemplate.ts";
3
+ /**
4
+ * HTTP implementation of {@link CreateTemplate}. Works on any host.
5
+ *
6
+ * ### Provide the layer
7
+ * **Example:** On a Worker
8
+ * ```typescript
9
+ * Effect.gen(function* () {
10
+ * const templates = yield* E2B.CreateTemplate();
11
+ * // ...
12
+ * }).pipe(Effect.provide(E2B.CreateTemplateHttp))
13
+ * ```
14
+ *
15
+ * @layer
16
+ * @product Template
17
+ * @provides E2B.CreateTemplate
18
+ */
19
+ export declare const CreateTemplateHttp: Layer.Layer<CreateTemplate, never, never>;
20
+ //# sourceMappingURL=CreateTemplateHttp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateTemplateHttp.d.ts","sources":["../src/CreateTemplateHttp.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,EACL,cAAc,EAIf,MAAM,qBAAqB,CAAC;AAO7B;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,kBAAkB,2CAqH9B,CAAC"}
@@ -0,0 +1,99 @@
1
+ import * as tags from "@distilled.cloud/e2b/tags";
2
+ import * as templates from "@distilled.cloud/e2b/templates";
3
+ import * as unstable from "@distilled.cloud/e2b/unstable";
4
+ import * as Effect from "effect/Effect";
5
+ import * as Layer from "effect/Layer";
6
+ import * as Stream from "effect/Stream";
7
+ import { CreateTemplate, } from "./CreateTemplate.js";
8
+ import { bindE2B } from "./E2BBindings.js";
9
+ import { planTemplateBuild, runTemplateBuild } from "./internal/TemplateBuild.js";
10
+ /** The tag a build of these inputs carries. */
11
+ const hashTag = (hash) => `alchemy-${hash.slice(0, 16)}`;
12
+ /**
13
+ * HTTP implementation of {@link CreateTemplate}. Works on any host.
14
+ *
15
+ * ### Provide the layer
16
+ * **Example:** On a Worker
17
+ * ```typescript
18
+ * Effect.gen(function* () {
19
+ * const templates = yield* E2B.CreateTemplate();
20
+ * // ...
21
+ * }).pipe(Effect.provide(E2B.CreateTemplateHttp))
22
+ * ```
23
+ *
24
+ * @layer
25
+ * @product Template
26
+ * @provides E2B.CreateTemplate
27
+ */
28
+ export const CreateTemplateHttp = Layer.succeed(CreateTemplate, Effect.fn("E2B.CreateTemplate")(function* () {
29
+ const auth = yield* bindE2B;
30
+ const get = (nameOrId) => auth
31
+ .authorize(templates
32
+ .getTemplate({ templateID: nameOrId })
33
+ .pipe(Effect.catchTag("NotFound", () => templates
34
+ .getTemplateByAlias({ alias: nameOrId })
35
+ .pipe(Effect.flatMap((alias) => templates.getTemplate({ templateID: alias.templateID }))))))
36
+ .pipe(Effect.map((template) => template), Effect.catchTag("NotFound", () => Effect.undefined));
37
+ const build = Effect.fn("E2B.CreateTemplate.build")(function* (spec) {
38
+ const plan = yield* planTemplateBuild(spec);
39
+ const built = yield* auth.authorize(
40
+ // E2B builds the `default` tag only when no tags are given, so keep it
41
+ // next to the hash tag unless the caller chose its own.
42
+ runTemplateBuild({ ...spec, tags: [...(spec.tags ?? ["default"]), hashTag(plan.hash)] }, plan));
43
+ return {
44
+ templateId: built.templateId,
45
+ buildId: built.buildId,
46
+ names: built.names,
47
+ };
48
+ });
49
+ const client = {
50
+ build,
51
+ getOrBuild: Effect.fn("E2B.CreateTemplate.getOrBuild")(function* (spec) {
52
+ const plan = yield* planTemplateBuild(spec);
53
+ const existing = yield* get(spec.name);
54
+ if (existing !== undefined) {
55
+ const tagged = yield* auth.authorize(tags.getTemplateTagExists({ templateID: existing.templateID, tag: hashTag(plan.hash) }));
56
+ const ready = existing.builds.find((b) => b.buildID === existing.buildID)?.status === "ready";
57
+ if (tagged.exists && ready) {
58
+ return {
59
+ templateId: existing.templateID,
60
+ buildId: existing.buildID,
61
+ names: existing.names,
62
+ };
63
+ }
64
+ }
65
+ return yield* build(spec);
66
+ }),
67
+ get,
68
+ list: (options) => auth
69
+ .authorize(Stream.runCollect(templates.listTemplates.items({ ...options })))
70
+ .pipe(Effect.map((all) => Array.from(all))),
71
+ listDefaults: () => auth.authorize(templates.listDefaultTemplates({})),
72
+ search: (options) => auth.authorize(unstable.searchTemplates(options)),
73
+ setPublic: (templateId, isPublic) => auth
74
+ .authorize(templates.updateTemplate({ templateID: templateId, public: isPublic }))
75
+ .pipe(Effect.asVoid),
76
+ buildStatus: (templateId, buildId, options) => auth.authorize(templates.getTemplateBuildStatus({
77
+ ...options,
78
+ templateID: templateId,
79
+ buildID: buildId,
80
+ })),
81
+ buildLogs: (templateId, buildId, options) => auth.authorize(templates.listTemplateBuildLogs({ ...options, templateID: templateId, buildID: buildId })),
82
+ delete: (templateId) => auth.authorize(templates.deleteTemplate({ templateID: templateId })).pipe(Effect.asVoid, Effect.catchTag("NotFound", () => Effect.void)),
83
+ tags: {
84
+ assign: (target, assigned) => auth.authorize(tags.createTemplateTag({ target, tags: [...assigned] })),
85
+ remove: (name, removed) => auth.authorize(tags.deleteTemplateTags({ name, tags: [...removed] })).pipe(Effect.asVoid),
86
+ list: (templateId) => auth.authorize(tags.listTemplateTags({ templateID: templateId })),
87
+ exists: (templateId, tag) => auth
88
+ .authorize(tags.getTemplateTagExists({ templateID: templateId, tag }))
89
+ .pipe(Effect.map((res) => res.exists)),
90
+ count: (templateId) => auth
91
+ .authorize(tags.getTemplateTagCount({ templateID: templateId }))
92
+ .pipe(Effect.map((res) => res.total)),
93
+ groups: (templateId, options) => auth.authorize(tags.listTemplateTagGroups({ ...options, templateID: templateId })),
94
+ assignments: (templateId, tag, options) => auth.authorize(tags.listTemplateTagAssignments({ ...options, templateID: templateId, tag })),
95
+ },
96
+ };
97
+ return client;
98
+ }));
99
+ //# sourceMappingURL=CreateTemplateHttp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateTemplateHttp.js","sources":["../src/CreateTemplateHttp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import * as Binding from "alchemy/Binding";
2
+ import type { RuntimeContext } from "alchemy/RuntimeContext";
3
+ import type * as Effect from "effect/Effect";
4
+ import type { E2BError } from "./SandboxClient.ts";
5
+ import type { ReadWriteVolumeClient } from "./VolumeFiles.ts";
6
+ /** A volume created or found at runtime, with its files. */
7
+ export interface VolumeHandle {
8
+ /** E2B's volume id. */
9
+ readonly volumeId: string;
10
+ /** The volume's name. Mount it with `mounts: [{ volume, path }]`. */
11
+ readonly name: string;
12
+ /** The volume's files, readable and writable without a sandbox. */
13
+ readonly files: ReadWriteVolumeClient;
14
+ }
15
+ /** E2B volumes by name: create, look up, list and delete them. */
16
+ export interface VolumesClient {
17
+ /** Creates a volume. Fails with `Conflict` when the name is taken. */
18
+ create(name: string): Effect.Effect<VolumeHandle, E2BError, RuntimeContext>;
19
+ /** The volume with this name or id, or `undefined`. */
20
+ get(nameOrId: string): Effect.Effect<VolumeHandle | undefined, E2BError, RuntimeContext>;
21
+ /** The volume with this name, created if missing. Safe to race. */
22
+ getOrCreate(name: string): Effect.Effect<VolumeHandle, E2BError, RuntimeContext>;
23
+ /** Every volume in the team. */
24
+ list(): Effect.Effect<ReadonlyArray<{
25
+ readonly volumeId: string;
26
+ readonly name: string;
27
+ }>, E2BError, RuntimeContext>;
28
+ /** Deletes a volume and its files. Deleting one that is gone succeeds. */
29
+ delete(volumeId: string): Effect.Effect<void, E2BError, RuntimeContext>;
30
+ }
31
+ /**
32
+ * Create and manage E2B volumes at runtime, by name: a home directory per
33
+ * user, a workspace per session. Mount one into a sandbox by its `name`, and
34
+ * read or write its files with `files` without a sandbox.
35
+ *
36
+ * E2B volumes carry no metadata, so the volumes a host creates at runtime
37
+ * are not deleted when the host is destroyed. Delete them with `delete` when
38
+ * their owner goes away.
39
+ *
40
+ * ### Per-user volumes
41
+ * **Example:** A home volume per user, mounted into their sandbox
42
+ * ```typescript
43
+ * const volumes = yield* E2B.CreateVolume();
44
+ * const sandboxes = yield* E2B.CreateSandbox(Agent);
45
+ * // in fetch:
46
+ * const home = yield* volumes.getOrCreate(`user-${user}`);
47
+ * const sandbox = yield* sandboxes.create({
48
+ * mounts: [{ volume: home, path: "/home/user/work" }],
49
+ * });
50
+ * ```
51
+ *
52
+ * @binding
53
+ * @product Volume
54
+ */
55
+ export interface CreateVolume extends Binding.Service<CreateVolume, "E2B.CreateVolume", () => Effect.Effect<VolumesClient>> {
56
+ }
57
+ export declare const CreateVolume: CreateVolume;
58
+ //# sourceMappingURL=CreateVolume.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateVolume.d.ts","sources":["../src/CreateVolume.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAE9D,4DAA4D;AAC5D,MAAM,WAAW,YAAY;IAC3B,uBAAuB;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC;CACvC;AAED,kEAAkE;AAClE,MAAM,WAAW,aAAa;IAC5B,sEAAsE;IACtE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;IAC5E,uDAAuD;IACvD,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,GAAG,SAAS,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;IACzF,mEAAmE;IACnE,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;IACjF,gCAAgC;IAChC,IAAI,IAAI,MAAM,CAAC,MAAM,CACnB,aAAa,CAAC;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,EACnE,QAAQ,EACR,cAAc,CACf,CAAC;IACF,0EAA0E;IAC1E,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;CACzE;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,WAAW,YAAa,SAAQ,OAAO,CAAC,OAAO,CACnD,YAAY,EACZ,kBAAkB,EAClB,MAAM,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CACnC;CAAG;AAEJ,eAAO,MAAM,YAAY,cAAoD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import * as Binding from "alchemy/Binding";
2
+ export const CreateVolume = Binding.Service("E2B.CreateVolume");
3
+ //# sourceMappingURL=CreateVolume.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateVolume.js","sources":["../src/CreateVolume.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAgE3C,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAe,kBAAkB,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ import * as Layer from "effect/Layer";
2
+ import { CreateVolume } from "./CreateVolume.ts";
3
+ /**
4
+ * HTTP implementation of {@link CreateVolume}. Works on any host.
5
+ *
6
+ * ### Provide the layer
7
+ * **Example:** On a Worker
8
+ * ```typescript
9
+ * Effect.gen(function* () {
10
+ * const volumes = yield* E2B.CreateVolume();
11
+ * // ...
12
+ * }).pipe(Effect.provide(E2B.CreateVolumeHttp))
13
+ * ```
14
+ *
15
+ * @layer
16
+ * @product Volume
17
+ * @provides E2B.CreateVolume
18
+ */
19
+ export declare const CreateVolumeHttp: Layer.Layer<CreateVolume, never, never>;
20
+ //# sourceMappingURL=CreateVolumeHttp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateVolumeHttp.d.ts","sources":["../src/CreateVolumeHttp.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,YAAY,EAAyC,MAAM,mBAAmB,CAAC;AAUxF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,gBAAgB,yCAkD5B,CAAC"}
@@ -0,0 +1,51 @@
1
+ import * as volumes from "@distilled.cloud/e2b/volumes";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Layer from "effect/Layer";
4
+ import { CreateVolume } from "./CreateVolume.js";
5
+ import { bindE2B } from "./E2BBindings.js";
6
+ import { makeVolumeFiles } from "./internal/VolumeHttp.js";
7
+ const handleOf = (auth, volume) => ({
8
+ volumeId: volume.volumeID,
9
+ name: volume.name,
10
+ files: makeVolumeFiles(auth, Effect.succeed(volume.volumeID)),
11
+ });
12
+ /**
13
+ * HTTP implementation of {@link CreateVolume}. Works on any host.
14
+ *
15
+ * ### Provide the layer
16
+ * **Example:** On a Worker
17
+ * ```typescript
18
+ * Effect.gen(function* () {
19
+ * const volumes = yield* E2B.CreateVolume();
20
+ * // ...
21
+ * }).pipe(Effect.provide(E2B.CreateVolumeHttp))
22
+ * ```
23
+ *
24
+ * @layer
25
+ * @product Volume
26
+ * @provides E2B.CreateVolume
27
+ */
28
+ export const CreateVolumeHttp = Layer.succeed(CreateVolume, Effect.fn("E2B.CreateVolume")(function* () {
29
+ const auth = yield* bindE2B;
30
+ const findByName = (name) => auth
31
+ .authorize(volumes.listVolumes({}))
32
+ .pipe(Effect.map((all) => all.find((volume) => volume.name === name)));
33
+ const get = (nameOrId) => auth.authorize(volumes.getVolume({ volumeID: nameOrId })).pipe(Effect.map((volume) => volume), Effect.catchTag("NotFound", () => findByName(nameOrId)), Effect.map((volume) => (volume === undefined ? undefined : handleOf(auth, volume))));
34
+ const client = {
35
+ create: (name) => auth
36
+ .authorize(volumes.createVolume({ name }))
37
+ .pipe(Effect.map((volume) => handleOf(auth, volume))),
38
+ get,
39
+ getOrCreate: (name) => Effect.flatMap(get(name), (existing) => existing !== undefined
40
+ ? Effect.succeed(existing)
41
+ : auth.authorize(volumes.createVolume({ name })).pipe(Effect.map((volume) => handleOf(auth, volume)),
42
+ // A concurrent create won the name: use theirs.
43
+ Effect.catchTag("Conflict", (error) => Effect.flatMap(get(name), (raced) => raced === undefined ? Effect.fail(error) : Effect.succeed(raced))))),
44
+ list: () => auth
45
+ .authorize(volumes.listVolumes({}))
46
+ .pipe(Effect.map((all) => all.map((volume) => ({ volumeId: volume.volumeID, name: volume.name })))),
47
+ delete: (volumeId) => auth.authorize(volumes.deleteVolume({ volumeID: volumeId })).pipe(Effect.asVoid, Effect.catchTag("NotFound", () => Effect.void)),
48
+ };
49
+ return client;
50
+ }));
51
+ //# sourceMappingURL=CreateVolumeHttp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateVolumeHttp.js","sources":["../src/CreateVolumeHttp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { ConfigError } from "@distilled.cloud/core/errors";
2
+ import { Credentials, type Config } from "@distilled.cloud/e2b/Credentials";
3
+ import * as Effect from "effect/Effect";
4
+ import * as Layer from "effect/Layer";
5
+ export { Credentials, CredentialsFromEnv, credentials, DEFAULT_DOMAIN, type Config as CredentialsConfig, } from "@distilled.cloud/e2b/Credentials";
6
+ /**
7
+ * Fills in the team id for an access token that came without one: E2B
8
+ * lists the token's teams, and the default team is the one it acts on.
9
+ */
10
+ export declare const withTeamId: (config: Config) => Effect.Effect<Config, ConfigError, never>;
11
+ /**
12
+ * Build a `Credentials` layer that resolves E2B credentials via the current
13
+ * Alchemy profile, or directly from environment variables in CI. An access
14
+ * token without a team id gets its default team's id. A browser login's
15
+ * token is re-resolved (and refreshed) before it expires.
16
+ */
17
+ export declare const fromAuthProvider: () => Layer.Layer<Credentials, never, import("alchemy/Auth/Registry").AuthProviders | import("alchemy/Auth/Profile").ProfileStore>;
18
+ //# sourceMappingURL=Credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Credentials.d.ts","sources":["../src/Credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE3D,OAAO,EAEL,WAAW,EAEX,KAAK,MAAM,EACZ,MAAM,kCAAkC,CAAC;AAE1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAGtC,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,KAAK,MAAM,IAAI,iBAAiB,GACjC,MAAM,kCAAkC,CAAC;AAE1C;;;GAGG;AACH,eAAO,MAAM,UAAU,+DAqBrB,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,oIAyB1B,CAAC"}
@@ -0,0 +1,55 @@
1
+ import { ConfigError } from "@distilled.cloud/core/errors";
2
+ import * as auth from "@distilled.cloud/e2b/auth";
3
+ import { apiBaseUrlFor, Credentials, credentials, } from "@distilled.cloud/e2b/Credentials";
4
+ import { lazyCredentials } from "alchemy/Auth/Resolve";
5
+ import * as Effect from "effect/Effect";
6
+ import * as FetchHttpClient from "effect/http/FetchHttpClient";
7
+ import * as Layer from "effect/Layer";
8
+ import { E2B_AUTH_PROVIDER_NAME } from "./AuthProvider.js";
9
+ export { Credentials, CredentialsFromEnv, credentials, DEFAULT_DOMAIN, } from "@distilled.cloud/e2b/Credentials";
10
+ /**
11
+ * Fills in the team id for an access token that came without one: E2B
12
+ * lists the token's teams, and the default team is the one it acts on.
13
+ */
14
+ export const withTeamId = Effect.fn(function* (config) {
15
+ if (config.accessToken === undefined || (config.teamId ?? "") !== "")
16
+ return config;
17
+ const teams = yield* auth.listTeams({}).pipe(Effect.provide(Layer.mergeAll(credentials(config), FetchHttpClient.layer)), Effect.mapError((cause) => new ConfigError({
18
+ message: `Failed to look up the E2B team for the access token: ${cause.message}`,
19
+ })));
20
+ const team = teams.find((t) => t.isDefault) ?? (teams.length === 1 ? teams[0] : undefined);
21
+ if (team === undefined) {
22
+ return yield* new ConfigError({
23
+ message: teams.length === 0
24
+ ? "The E2B access token belongs to no team"
25
+ : `The E2B access token belongs to ${teams.length} teams and none is the default: set teamId (E2B_TEAM_ID)`,
26
+ });
27
+ }
28
+ return { ...config, teamId: team.teamID };
29
+ });
30
+ /**
31
+ * Build a `Credentials` layer that resolves E2B credentials via the current
32
+ * Alchemy profile, or directly from environment variables in CI. An access
33
+ * token without a team id gets its default team's id. A browser login's
34
+ * token is re-resolved (and refreshed) before it expires.
35
+ */
36
+ export const fromAuthProvider = () => Layer.effect(Credentials, Effect.gen(function* () {
37
+ const resolve = yield* lazyCredentials()(E2B_AUTH_PROVIDER_NAME, (creds) => ({
38
+ ...(creds.apiKey === undefined ? {} : { apiKey: creds.apiKey }),
39
+ ...(creds.accessToken === undefined ? {} : { accessToken: creds.accessToken }),
40
+ ...(creds.teamId === undefined ? {} : { teamId: creds.teamId }),
41
+ domain: creds.domain,
42
+ apiBaseUrl: apiBaseUrlFor(creds.domain),
43
+ }), { expiresAt: (creds) => creds.expires });
44
+ // The team lookup runs once; a failed one is retried on the next call.
45
+ let teamId;
46
+ return Effect.gen(function* () {
47
+ const config = yield* resolve;
48
+ if (teamId !== undefined && (config.teamId ?? "") === "")
49
+ return { ...config, teamId };
50
+ const withTeam = yield* withTeamId(config);
51
+ teamId = withTeam.teamId;
52
+ return withTeam;
53
+ });
54
+ }));
55
+ //# sourceMappingURL=Credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Credentials.js","sources":["../src/Credentials.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { Credentials } from "@distilled.cloud/e2b/Credentials";
2
+ import * as Output from "alchemy/Output";
3
+ import type { RuntimeContext } from "alchemy/RuntimeContext";
4
+ import * as Effect from "effect/Effect";
5
+ import type * as HttpClient from "effect/http/HttpClient";
6
+ /** The `alchemy::*` metadata on objects a host creates at run time. */
7
+ export type OwnerTags = Readonly<Record<string, string>>;
8
+ /** E2B's `metadata` filter: `key=value&…`. */
9
+ export declare const metadataQuery: (metadata: Readonly<Record<string, string>>) => string;
10
+ export interface E2BAuth {
11
+ /** Runs a distilled call with the bound credentials and an HTTP client. */
12
+ readonly authorize: <A, E>(effect: Effect.Effect<A, E, Credentials | HttpClient.HttpClient>) => Effect.Effect<A, E, RuntimeContext>;
13
+ /** The E2B domain sandboxes are addressed under. */
14
+ readonly domain: Effect.Effect<string>;
15
+ /** The team the host's key belongs to. */
16
+ readonly teamId: Effect.Effect<string>;
17
+ }
18
+ /**
19
+ * Mints the current host's API key and binds it, the domain and the
20
+ * ownership stamp onto the host, and returns runtime accessors for them.
21
+ * Call it in a binding's construction; every binding on a host shares the
22
+ * one key.
23
+ */
24
+ export declare const bindE2B: Effect.Effect<{
25
+ authorize: <A, E>(effect: Effect.Effect<A, E, Credentials | HttpClient.HttpClient>) => Effect.Effect<A, E, never>;
26
+ domain: Effect.Effect<string, never, never>;
27
+ teamId: Output.Accessor<string>;
28
+ }, never, never>;
29
+ /**
30
+ * Binds the host's `alchemy::stack` / `alchemy::stage` / `alchemy::id` into
31
+ * it, and returns them at run time for `create` to put on what it makes.
32
+ * Without a host (a script) there are none.
33
+ */
34
+ export declare const bindOwnerTags: Effect.Effect<Effect.Effect<Readonly<Record<string, string>>, never, never>, never, never>;
35
+ //# sourceMappingURL=E2BBindings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"E2BBindings.d.ts","sources":["../src/E2BBindings.ts"],"names":[],"mappings":"AAmBA,OAAO,EAEL,WAAW,EAGZ,MAAM,kCAAkC,CAAC;AAI1C,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AACzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG7D,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,KAAK,UAAU,MAAM,wBAAwB,CAAC;AAU1D,uEAAuE;AACvE,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAEzD,8CAA8C;AAC9C,eAAO,MAAM,aAAa,aAAc,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,WACd,CAAC;AAE3D,MAAM,WAAW,OAAO;IACtB,2EAA2E;IAC3E,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EACvB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,UAAU,CAAC,UAAU,CAAC,KAC7D,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;IACzC,oDAAoD;IACpD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvC,0CAA0C;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;CACxC;AAsBD;;;;;GAKG;AACH,eAAO,MAAM,OAAO;gBAnCG,CAAC,EAAE,CAAC;;;gBAyEzB,CAAC;AAUH;;;;GAIG;AACH,eAAO,MAAM,aAAa,4FAkBxB,CAAC"}