@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.
- package/LICENSE +201 -0
- package/README.md +56 -4
- package/lib/ApiKey.d.ts +53 -0
- package/lib/ApiKey.d.ts.map +1 -0
- package/lib/ApiKey.js +107 -0
- package/lib/ApiKey.js.map +1 -0
- package/lib/AuthProvider.d.ts +60 -0
- package/lib/AuthProvider.d.ts.map +1 -0
- package/lib/AuthProvider.js +293 -0
- package/lib/AuthProvider.js.map +1 -0
- package/lib/Bootstrap.d.ts +7 -0
- package/lib/Bootstrap.d.ts.map +1 -0
- package/lib/Bootstrap.js +25 -0
- package/lib/Bootstrap.js.map +1 -0
- package/lib/ConnectSandbox.d.ts +67 -0
- package/lib/ConnectSandbox.d.ts.map +1 -0
- package/lib/ConnectSandbox.js +3 -0
- package/lib/ConnectSandbox.js.map +1 -0
- package/lib/ConnectSandboxHttp.d.ts +22 -0
- package/lib/ConnectSandboxHttp.d.ts.map +1 -0
- package/lib/ConnectSandboxHttp.js +30 -0
- package/lib/ConnectSandboxHttp.js.map +1 -0
- package/lib/Contributions.d.ts +7 -0
- package/lib/Contributions.d.ts.map +1 -0
- package/lib/Contributions.js +6 -0
- package/lib/Contributions.js.map +1 -0
- package/lib/CreateSandbox.d.ts +139 -0
- package/lib/CreateSandbox.d.ts.map +1 -0
- package/lib/CreateSandbox.js +3 -0
- package/lib/CreateSandbox.js.map +1 -0
- package/lib/CreateSandboxHttp.d.ts +22 -0
- package/lib/CreateSandboxHttp.d.ts.map +1 -0
- package/lib/CreateSandboxHttp.js +99 -0
- package/lib/CreateSandboxHttp.js.map +1 -0
- package/lib/CreateSecret.d.ts +57 -0
- package/lib/CreateSecret.d.ts.map +1 -0
- package/lib/CreateSecret.js +3 -0
- package/lib/CreateSecret.js.map +1 -0
- package/lib/CreateSecretHttp.d.ts +20 -0
- package/lib/CreateSecretHttp.d.ts.map +1 -0
- package/lib/CreateSecretHttp.js +64 -0
- package/lib/CreateSecretHttp.js.map +1 -0
- package/lib/CreateSnapshot.d.ts +53 -0
- package/lib/CreateSnapshot.d.ts.map +1 -0
- package/lib/CreateSnapshot.js +3 -0
- package/lib/CreateSnapshot.js.map +1 -0
- package/lib/CreateSnapshotHttp.d.ts +20 -0
- package/lib/CreateSnapshotHttp.d.ts.map +1 -0
- package/lib/CreateSnapshotHttp.js +41 -0
- package/lib/CreateSnapshotHttp.js.map +1 -0
- package/lib/CreateTemplate.d.ts +96 -0
- package/lib/CreateTemplate.d.ts.map +1 -0
- package/lib/CreateTemplate.js +3 -0
- package/lib/CreateTemplate.js.map +1 -0
- package/lib/CreateTemplateHttp.d.ts +20 -0
- package/lib/CreateTemplateHttp.d.ts.map +1 -0
- package/lib/CreateTemplateHttp.js +99 -0
- package/lib/CreateTemplateHttp.js.map +1 -0
- package/lib/CreateVolume.d.ts +58 -0
- package/lib/CreateVolume.d.ts.map +1 -0
- package/lib/CreateVolume.js +3 -0
- package/lib/CreateVolume.js.map +1 -0
- package/lib/CreateVolumeHttp.d.ts +20 -0
- package/lib/CreateVolumeHttp.d.ts.map +1 -0
- package/lib/CreateVolumeHttp.js +51 -0
- package/lib/CreateVolumeHttp.js.map +1 -0
- package/lib/Credentials.d.ts +18 -0
- package/lib/Credentials.d.ts.map +1 -0
- package/lib/Credentials.js +55 -0
- package/lib/Credentials.js.map +1 -0
- package/lib/E2BBindings.d.ts +35 -0
- package/lib/E2BBindings.d.ts.map +1 -0
- package/lib/E2BBindings.js +127 -0
- package/lib/E2BBindings.js.map +1 -0
- package/lib/Errors.d.ts +61 -0
- package/lib/Errors.d.ts.map +1 -0
- package/lib/Errors.js +23 -0
- package/lib/Errors.js.map +1 -0
- package/lib/InferEnv.d.ts +26 -0
- package/lib/InferEnv.d.ts.map +1 -0
- package/lib/InferEnv.js +1 -0
- package/lib/InferEnv.js.map +1 -0
- package/lib/MountVolume.d.ts +86 -0
- package/lib/MountVolume.d.ts.map +1 -0
- package/lib/MountVolume.js +3 -0
- package/lib/MountVolume.js.map +1 -0
- package/lib/MountVolumeLive.d.ts +23 -0
- package/lib/MountVolumeLive.d.ts.map +1 -0
- package/lib/MountVolumeLive.js +41 -0
- package/lib/MountVolumeLive.js.map +1 -0
- package/lib/Providers.d.ts +14 -0
- package/lib/Providers.d.ts.map +1 -0
- package/lib/Providers.js +23 -0
- package/lib/Providers.js.map +1 -0
- package/lib/ReadTeam.d.ts +41 -0
- package/lib/ReadTeam.d.ts.map +1 -0
- package/lib/ReadTeam.js +3 -0
- package/lib/ReadTeam.js.map +1 -0
- package/lib/ReadTeamHttp.d.ts +20 -0
- package/lib/ReadTeamHttp.d.ts.map +1 -0
- package/lib/ReadTeamHttp.js +40 -0
- package/lib/ReadTeamHttp.js.map +1 -0
- package/lib/ReadVolume.d.ts +25 -0
- package/lib/ReadVolume.d.ts.map +1 -0
- package/lib/ReadVolume.js +3 -0
- package/lib/ReadVolume.js.map +1 -0
- package/lib/ReadVolumeHttp.d.ts +20 -0
- package/lib/ReadVolumeHttp.d.ts.map +1 -0
- package/lib/ReadVolumeHttp.js +27 -0
- package/lib/ReadVolumeHttp.js.map +1 -0
- package/lib/ReadWebhook.d.ts +32 -0
- package/lib/ReadWebhook.d.ts.map +1 -0
- package/lib/ReadWebhook.js +3 -0
- package/lib/ReadWebhook.js.map +1 -0
- package/lib/ReadWebhookHttp.d.ts +20 -0
- package/lib/ReadWebhookHttp.d.ts.map +1 -0
- package/lib/ReadWebhookHttp.js +31 -0
- package/lib/ReadWebhookHttp.js.map +1 -0
- package/lib/ReadWriteVolume.d.ts +26 -0
- package/lib/ReadWriteVolume.d.ts.map +1 -0
- package/lib/ReadWriteVolume.js +3 -0
- package/lib/ReadWriteVolume.js.map +1 -0
- package/lib/ReadWriteVolumeHttp.d.ts +20 -0
- package/lib/ReadWriteVolumeHttp.d.ts.map +1 -0
- package/lib/ReadWriteVolumeHttp.js +27 -0
- package/lib/ReadWriteVolumeHttp.js.map +1 -0
- package/lib/Sandbox.d.ts +295 -0
- package/lib/Sandbox.d.ts.map +1 -0
- package/lib/Sandbox.js +351 -0
- package/lib/Sandbox.js.map +1 -0
- package/lib/SandboxClient.d.ts +226 -0
- package/lib/SandboxClient.d.ts.map +1 -0
- package/lib/SandboxClient.js +1 -0
- package/lib/SandboxClient.js.map +1 -0
- package/lib/SandboxEvents.d.ts +87 -0
- package/lib/SandboxEvents.d.ts.map +1 -0
- package/lib/SandboxEvents.js +39 -0
- package/lib/SandboxEvents.js.map +1 -0
- package/lib/SandboxEventsLive.d.ts +13 -0
- package/lib/SandboxEventsLive.d.ts.map +1 -0
- package/lib/SandboxEventsLive.js +80 -0
- package/lib/SandboxEventsLive.js.map +1 -0
- package/lib/Secret.d.ts +105 -0
- package/lib/Secret.d.ts.map +1 -0
- package/lib/Secret.js +161 -0
- package/lib/Secret.js.map +1 -0
- package/lib/Snapshot.d.ts +118 -0
- package/lib/Snapshot.d.ts.map +1 -0
- package/lib/Snapshot.js +158 -0
- package/lib/Snapshot.js.map +1 -0
- package/lib/Template.d.ts +313 -0
- package/lib/Template.d.ts.map +1 -0
- package/lib/Template.js +421 -0
- package/lib/Template.js.map +1 -0
- package/lib/Volume.d.ts +88 -0
- package/lib/Volume.d.ts.map +1 -0
- package/lib/Volume.js +136 -0
- package/lib/Volume.js.map +1 -0
- package/lib/VolumeFiles.d.ts +39 -0
- package/lib/VolumeFiles.d.ts.map +1 -0
- package/lib/VolumeFiles.js +1 -0
- package/lib/VolumeFiles.js.map +1 -0
- package/lib/Webhook.d.ts +83 -0
- package/lib/Webhook.d.ts.map +1 -0
- package/lib/Webhook.js +138 -0
- package/lib/Webhook.js.map +1 -0
- package/lib/WriteSecret.d.ts +34 -0
- package/lib/WriteSecret.d.ts.map +1 -0
- package/lib/WriteSecret.js +3 -0
- package/lib/WriteSecret.js.map +1 -0
- package/lib/WriteSecretHttp.d.ts +20 -0
- package/lib/WriteSecretHttp.d.ts.map +1 -0
- package/lib/WriteSecretHttp.js +37 -0
- package/lib/WriteSecretHttp.js.map +1 -0
- package/lib/WriteVolume.d.ts +25 -0
- package/lib/WriteVolume.d.ts.map +1 -0
- package/lib/WriteVolume.js +3 -0
- package/lib/WriteVolume.js.map +1 -0
- package/lib/WriteVolumeHttp.d.ts +20 -0
- package/lib/WriteVolumeHttp.d.ts.map +1 -0
- package/lib/WriteVolumeHttp.js +27 -0
- package/lib/WriteVolumeHttp.js.map +1 -0
- package/lib/index.d.ts +43 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +43 -0
- package/lib/index.js.map +1 -0
- package/lib/internal/Declared.d.ts +29 -0
- package/lib/internal/Declared.d.ts.map +1 -0
- package/lib/internal/Declared.js +31 -0
- package/lib/internal/Declared.js.map +1 -0
- package/lib/internal/Login.d.ts +45 -0
- package/lib/internal/Login.d.ts.map +1 -0
- package/lib/internal/Login.js +157 -0
- package/lib/internal/Login.js.map +1 -0
- package/lib/internal/Ownership.d.ts +29 -0
- package/lib/internal/Ownership.d.ts.map +1 -0
- package/lib/internal/Ownership.js +49 -0
- package/lib/internal/Ownership.js.map +1 -0
- package/lib/internal/Program.d.ts +31 -0
- package/lib/internal/Program.d.ts.map +1 -0
- package/lib/internal/Program.js +60 -0
- package/lib/internal/Program.js.map +1 -0
- package/lib/internal/SandboxHandle.d.ts +25 -0
- package/lib/internal/SandboxHandle.d.ts.map +1 -0
- package/lib/internal/SandboxHandle.js +316 -0
- package/lib/internal/SandboxHandle.js.map +1 -0
- package/lib/internal/SnapshotBuild.d.ts +19 -0
- package/lib/internal/SnapshotBuild.d.ts.map +1 -0
- package/lib/internal/SnapshotBuild.js +49 -0
- package/lib/internal/SnapshotBuild.js.map +1 -0
- package/lib/internal/Tar.d.ts +10 -0
- package/lib/internal/Tar.d.ts.map +1 -0
- package/lib/internal/Tar.js +61 -0
- package/lib/internal/Tar.js.map +1 -0
- package/lib/internal/TemplateBuild.d.ts +142 -0
- package/lib/internal/TemplateBuild.d.ts.map +1 -0
- package/lib/internal/TemplateBuild.js +220 -0
- package/lib/internal/TemplateBuild.js.map +1 -0
- package/lib/internal/TemplatePlan.d.ts +57 -0
- package/lib/internal/TemplatePlan.d.ts.map +1 -0
- package/lib/internal/TemplatePlan.js +185 -0
- package/lib/internal/TemplatePlan.js.map +1 -0
- package/lib/internal/VolumeHttp.d.ts +5 -0
- package/lib/internal/VolumeHttp.d.ts.map +1 -0
- package/lib/internal/VolumeHttp.js +46 -0
- package/lib/internal/VolumeHttp.js.map +1 -0
- package/package.json +62 -3
- package/src/ApiKey.ts +148 -0
- package/src/AuthProvider.ts +437 -0
- package/src/Bootstrap.ts +51 -0
- package/src/ConnectSandbox.ts +71 -0
- package/src/ConnectSandboxHttp.ts +38 -0
- package/src/Contributions.ts +9 -0
- package/src/CreateSandbox.ts +157 -0
- package/src/CreateSandboxHttp.ts +131 -0
- package/src/CreateSecret.ts +65 -0
- package/src/CreateSecretHttp.ts +94 -0
- package/src/CreateSnapshot.ts +64 -0
- package/src/CreateSnapshotHttp.ts +55 -0
- package/src/CreateTemplate.ts +135 -0
- package/src/CreateTemplateHttp.ts +152 -0
- package/src/CreateVolume.ts +65 -0
- package/src/CreateVolumeHttp.ts +80 -0
- package/src/Credentials.ts +81 -0
- package/src/E2BBindings.ts +160 -0
- package/src/Errors.ts +47 -0
- package/src/InferEnv.ts +27 -0
- package/src/MountVolume.ts +92 -0
- package/src/MountVolumeLive.ts +49 -0
- package/src/Providers.ts +48 -0
- package/src/ReadTeam.ts +55 -0
- package/src/ReadTeamHttp.ts +44 -0
- package/src/ReadVolume.ts +29 -0
- package/src/ReadVolumeHttp.ts +32 -0
- package/src/ReadWebhook.ts +41 -0
- package/src/ReadWebhookHttp.ts +42 -0
- package/src/ReadWriteVolume.ts +30 -0
- package/src/ReadWriteVolumeHttp.ts +32 -0
- package/src/Sandbox.ts +581 -0
- package/src/SandboxClient.ts +268 -0
- package/src/SandboxEvents.ts +101 -0
- package/src/SandboxEventsLive.ts +118 -0
- package/src/Secret.ts +229 -0
- package/src/Snapshot.ts +234 -0
- package/src/Template.ts +636 -0
- package/src/Volume.ts +173 -0
- package/src/VolumeFiles.ts +53 -0
- package/src/Webhook.ts +215 -0
- package/src/WriteSecret.ts +39 -0
- package/src/WriteSecretHttp.ts +43 -0
- package/src/WriteVolume.ts +29 -0
- package/src/WriteVolumeHttp.ts +32 -0
- package/src/globals.d.ts +2 -0
- package/src/index.ts +42 -0
- package/src/internal/Declared.ts +80 -0
- package/src/internal/Login.ts +210 -0
- package/src/internal/Ownership.ts +67 -0
- package/src/internal/Program.ts +75 -0
- package/src/internal/SandboxHandle.ts +534 -0
- package/src/internal/SnapshotBuild.ts +74 -0
- package/src/internal/Tar.ts +74 -0
- package/src/internal/TemplateBuild.ts +383 -0
- package/src/internal/TemplatePlan.ts +230 -0
- package/src/internal/VolumeHttp.ts +88 -0
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
import * as auth from "@distilled.cloud/e2b/auth";
|
|
2
|
+
import { credentials as e2bCredentials, DEFAULT_DOMAIN } from "@distilled.cloud/e2b/Credentials";
|
|
3
|
+
import { AuthError, AuthProviderLayer, NeedsReauth, refreshHint, } from "alchemy/Auth/AuthProvider";
|
|
4
|
+
import { browserOAuth } from "alchemy/Auth/BrowserOAuth";
|
|
5
|
+
import { displayRedacted } from "alchemy/Auth/Credentials";
|
|
6
|
+
import { getEnv, getEnvRedacted, mapPromptCancellation } from "alchemy/Auth/Env";
|
|
7
|
+
import { withProfileCredentialsLock } from "alchemy/Auth/Lock";
|
|
8
|
+
import { collectFieldValues, storedSecret, storedValueText, validateFieldValues, } from "alchemy/Auth/StoredAuthProvider";
|
|
9
|
+
import * as Interaction from "alchemy/Interaction";
|
|
10
|
+
import * as Clock from "effect/Clock";
|
|
11
|
+
import * as Duration from "effect/Duration";
|
|
12
|
+
import * as Effect from "effect/Effect";
|
|
13
|
+
import * as FetchHttpClient from "effect/http/FetchHttpClient";
|
|
14
|
+
import * as Layer from "effect/Layer";
|
|
15
|
+
import * as Match from "effect/Match";
|
|
16
|
+
import * as Redacted from "effect/Redacted";
|
|
17
|
+
import * as Schema from "effect/Schema";
|
|
18
|
+
import { grantFromUrl, refreshGrant, revokeGrant, startLogin, } from "./internal/Login.js";
|
|
19
|
+
export const E2B_AUTH_PROVIDER_NAME = "E2B";
|
|
20
|
+
/**
|
|
21
|
+
* A profile's E2B values: an OAuth grant from the browser login (`oauth`),
|
|
22
|
+
* or a pasted access token or API key (`stored`).
|
|
23
|
+
*/
|
|
24
|
+
export const E2BAuthConfigSchema = Schema.Union([
|
|
25
|
+
Schema.Struct({
|
|
26
|
+
method: Schema.Literal("oauth"),
|
|
27
|
+
email: Schema.String,
|
|
28
|
+
teamId: Schema.String,
|
|
29
|
+
teamName: Schema.String,
|
|
30
|
+
clientId: Schema.String,
|
|
31
|
+
tokenEndpoint: Schema.String,
|
|
32
|
+
revokeEndpoint: Schema.String,
|
|
33
|
+
access: Schema.String,
|
|
34
|
+
refresh: Schema.String,
|
|
35
|
+
expires: Schema.Number,
|
|
36
|
+
domain: Schema.optional(Schema.String),
|
|
37
|
+
}),
|
|
38
|
+
Schema.Struct({
|
|
39
|
+
method: Schema.Literal("stored"),
|
|
40
|
+
accessToken: Schema.optional(Schema.String),
|
|
41
|
+
teamId: Schema.optional(Schema.String),
|
|
42
|
+
apiKey: Schema.optional(Schema.String),
|
|
43
|
+
domain: Schema.optional(Schema.String),
|
|
44
|
+
}),
|
|
45
|
+
]);
|
|
46
|
+
const storedFields = [
|
|
47
|
+
{
|
|
48
|
+
name: "accessToken",
|
|
49
|
+
label: "E2B access token",
|
|
50
|
+
description: "Reaches every endpoint and mints the API keys bindings need.",
|
|
51
|
+
secret: true,
|
|
52
|
+
optional: true,
|
|
53
|
+
},
|
|
54
|
+
{ name: "teamId", label: "E2B team id, if not your default team", optional: true },
|
|
55
|
+
{
|
|
56
|
+
name: "apiKey",
|
|
57
|
+
label: "E2B API key (e2b_…)",
|
|
58
|
+
description: "Only without an access token: enough for resources, not for bindings.",
|
|
59
|
+
secret: true,
|
|
60
|
+
optional: true,
|
|
61
|
+
},
|
|
62
|
+
{ name: "domain", label: "E2B domain", optional: true, placeholder: DEFAULT_DOMAIN },
|
|
63
|
+
];
|
|
64
|
+
const storedConfig = (values) => ({
|
|
65
|
+
method: "stored",
|
|
66
|
+
...Object.fromEntries(Object.entries(values).flatMap(([key, value]) => {
|
|
67
|
+
const text = storedValueText(value);
|
|
68
|
+
return text === undefined ? [] : [[key, text]];
|
|
69
|
+
})),
|
|
70
|
+
});
|
|
71
|
+
const grantOf = (config) => ({
|
|
72
|
+
email: config.email,
|
|
73
|
+
access: Redacted.make(config.access),
|
|
74
|
+
refresh: Redacted.make(config.refresh),
|
|
75
|
+
tokenEndpoint: config.tokenEndpoint,
|
|
76
|
+
revokeEndpoint: config.revokeEndpoint,
|
|
77
|
+
clientId: config.clientId,
|
|
78
|
+
expires: config.expires,
|
|
79
|
+
});
|
|
80
|
+
const withGrant = (config, grant) => ({
|
|
81
|
+
...config,
|
|
82
|
+
access: Redacted.value(grant.access),
|
|
83
|
+
refresh: Redacted.value(grant.refresh),
|
|
84
|
+
expires: grant.expires,
|
|
85
|
+
});
|
|
86
|
+
/** The team the token acts on: its default team, as `e2b auth login` picks it. */
|
|
87
|
+
const defaultTeam = (access, domain) => auth.listTeams({}).pipe(Effect.provide(Layer.mergeAll(e2bCredentials({ accessToken: access, domain }), FetchHttpClient.layer)), Effect.flatMap((teams) => {
|
|
88
|
+
const team = teams.find((t) => t.isDefault) ?? (teams.length === 1 ? teams[0] : undefined);
|
|
89
|
+
return team === undefined
|
|
90
|
+
? Effect.fail(AuthError.make({ message: "E2B: the account has no default team" }))
|
|
91
|
+
: Effect.succeed(team);
|
|
92
|
+
}), Effect.mapError((cause) => cause._tag === "AuthError"
|
|
93
|
+
? cause
|
|
94
|
+
: AuthError.make({ message: "E2B: could not list the account's teams", cause })));
|
|
95
|
+
const readEnvironment = Effect.gen(function* () {
|
|
96
|
+
const apiKey = yield* getEnvRedacted("E2B_API_KEY");
|
|
97
|
+
const accessToken = yield* getEnvRedacted("E2B_ACCESS_TOKEN");
|
|
98
|
+
if (!apiKey && !accessToken) {
|
|
99
|
+
return yield* AuthError.make({
|
|
100
|
+
message: "E2B CI credentials not found. Set E2B_ACCESS_TOKEN (or E2B_API_KEY for resources only).",
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
apiKey,
|
|
105
|
+
accessToken,
|
|
106
|
+
teamId: yield* getEnv("E2B_TEAM_ID"),
|
|
107
|
+
domain: (yield* getEnv("E2B_DOMAIN")) ?? DEFAULT_DOMAIN,
|
|
108
|
+
source: { type: "env" },
|
|
109
|
+
};
|
|
110
|
+
});
|
|
111
|
+
/**
|
|
112
|
+
* Layer that registers the E2B {@link AuthProvider} into the
|
|
113
|
+
* {@link AuthProviders} registry when built. Included in `E2B.providers()`
|
|
114
|
+
* so `alchemy profile edit --add E2B` can configure it.
|
|
115
|
+
*
|
|
116
|
+
* Methods:
|
|
117
|
+
* - `oauth`: E2B's browser login, the one `e2b auth login` runs; the access
|
|
118
|
+
* token refreshes itself.
|
|
119
|
+
* - `stored`: a pasted access token or API key.
|
|
120
|
+
*/
|
|
121
|
+
export const E2BAuth = AuthProviderLayer()(E2B_AUTH_PROVIDER_NAME, Effect.gen(function* () {
|
|
122
|
+
const browserLogin = Effect.fn(function* (domain) {
|
|
123
|
+
const grant = yield* Effect.scoped(Effect.gen(function* () {
|
|
124
|
+
const login = yield* startLogin(domain);
|
|
125
|
+
return yield* browserOAuth({
|
|
126
|
+
provider: "E2B",
|
|
127
|
+
url: login.url,
|
|
128
|
+
callback: login.grant,
|
|
129
|
+
exchange: grantFromUrl,
|
|
130
|
+
});
|
|
131
|
+
}));
|
|
132
|
+
const team = yield* defaultTeam(grant.access, domain);
|
|
133
|
+
yield* Interaction.success(`E2B: logged in as ${grant.email} (team ${team.name}).`);
|
|
134
|
+
return {
|
|
135
|
+
method: "oauth",
|
|
136
|
+
email: grant.email,
|
|
137
|
+
teamId: team.teamID,
|
|
138
|
+
teamName: team.name,
|
|
139
|
+
clientId: grant.clientId,
|
|
140
|
+
tokenEndpoint: grant.tokenEndpoint,
|
|
141
|
+
revokeEndpoint: grant.revokeEndpoint,
|
|
142
|
+
access: Redacted.value(grant.access),
|
|
143
|
+
refresh: Redacted.value(grant.refresh),
|
|
144
|
+
expires: grant.expires,
|
|
145
|
+
...(domain === DEFAULT_DOMAIN ? {} : { domain }),
|
|
146
|
+
};
|
|
147
|
+
});
|
|
148
|
+
const configure = (_profileName) => Interaction.select({
|
|
149
|
+
message: "E2B authentication method",
|
|
150
|
+
options: [
|
|
151
|
+
{
|
|
152
|
+
value: "oauth",
|
|
153
|
+
label: "Browser login",
|
|
154
|
+
description: "recommended — sign in to E2B; the token refreshes itself",
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
value: "stored",
|
|
158
|
+
label: "Access token or API key",
|
|
159
|
+
description: "paste a token and store it in the profile",
|
|
160
|
+
},
|
|
161
|
+
],
|
|
162
|
+
}).pipe(mapPromptCancellation, Effect.flatMap((method) => method === "oauth"
|
|
163
|
+
? browserLogin(DEFAULT_DOMAIN)
|
|
164
|
+
: collectFieldValues(storedFields).pipe(Effect.map(storedConfig), Effect.tap(() => Interaction.success("E2B: credentials saved.")))), Effect.mapError((cause) => cause._tag === "AuthError"
|
|
165
|
+
? cause
|
|
166
|
+
: AuthError.make({
|
|
167
|
+
message: `E2B: failed to configure credentials: ${cause.message}`,
|
|
168
|
+
cause,
|
|
169
|
+
})));
|
|
170
|
+
const configureMethods = [
|
|
171
|
+
{ method: "oauth", fields: [] },
|
|
172
|
+
{ method: "stored", fields: storedFields },
|
|
173
|
+
];
|
|
174
|
+
const configureWith = (_profileName, input) => input.method === "oauth"
|
|
175
|
+
? browserLogin(DEFAULT_DOMAIN).pipe(Effect.mapError((cause) => cause._tag === "AuthError"
|
|
176
|
+
? cause
|
|
177
|
+
: AuthError.make({ message: `E2B: browser login failed: ${cause.message}`, cause })))
|
|
178
|
+
: input.method === "stored"
|
|
179
|
+
? validateFieldValues(E2B_AUTH_PROVIDER_NAME, storedFields, input.values).pipe(Effect.map(storedConfig), Effect.tap(() => Interaction.success("E2B: credentials saved.")))
|
|
180
|
+
: Effect.fail(AuthError.make({
|
|
181
|
+
message: `E2B: unknown method '${input.method}'. Valid methods: oauth, stored.`,
|
|
182
|
+
}));
|
|
183
|
+
/** Refreshes an OAuth grant that is within a minute of expiring. */
|
|
184
|
+
const freshGrant = Effect.fn(function* (profileName, config) {
|
|
185
|
+
const now = yield* Clock.currentTimeMillis;
|
|
186
|
+
if (config.expires > now + 60_000)
|
|
187
|
+
return config;
|
|
188
|
+
return withGrant(config, yield* refreshGrant(grantOf(config)).pipe(Effect.mapError((cause) => NeedsReauth.make({
|
|
189
|
+
provider: E2B_AUTH_PROVIDER_NAME,
|
|
190
|
+
profile: profileName,
|
|
191
|
+
message: `E2B login expired. ${refreshHint(E2B_AUTH_PROVIDER_NAME, profileName)}`,
|
|
192
|
+
cause,
|
|
193
|
+
}))));
|
|
194
|
+
});
|
|
195
|
+
const read = (profileName, config, updateConfig) => Match.value(config).pipe(Match.when({ method: "stored" }, (stored) => Effect.succeed({
|
|
196
|
+
apiKey: storedSecret(stored.apiKey),
|
|
197
|
+
accessToken: storedSecret(stored.accessToken),
|
|
198
|
+
teamId: stored.teamId,
|
|
199
|
+
domain: stored.domain ?? DEFAULT_DOMAIN,
|
|
200
|
+
source: { type: "stored" },
|
|
201
|
+
})), Match.when({ method: "oauth" }, (oauth) => Effect.gen(function* () {
|
|
202
|
+
const fresh = yield* freshGrant(profileName, oauth);
|
|
203
|
+
if (fresh !== oauth)
|
|
204
|
+
yield* updateConfig?.(fresh) ?? Effect.void;
|
|
205
|
+
return {
|
|
206
|
+
apiKey: undefined,
|
|
207
|
+
accessToken: Redacted.make(fresh.access),
|
|
208
|
+
teamId: fresh.teamId,
|
|
209
|
+
domain: fresh.domain ?? DEFAULT_DOMAIN,
|
|
210
|
+
expires: fresh.expires,
|
|
211
|
+
source: { type: "oauth", details: fresh.email },
|
|
212
|
+
};
|
|
213
|
+
})), Match.exhaustive);
|
|
214
|
+
const login = (profileName, config, updateConfig, reload) => Match.value(config).pipe(Match.when({ method: "stored" }, (stored) => Effect.succeed(stored)), Match.when({ method: "oauth" }, (oauth) =>
|
|
215
|
+
// Refresh tokens can be single-use: refresh the one stored now,
|
|
216
|
+
// under the lock; a refused refresh falls back to the browser.
|
|
217
|
+
withProfileCredentialsLock(profileName, Effect.gen(function* () {
|
|
218
|
+
const current = yield* reload ?? Effect.succeed(oauth);
|
|
219
|
+
if (current.method !== "oauth")
|
|
220
|
+
return current;
|
|
221
|
+
const refreshed = withGrant(current, yield* refreshGrant(grantOf(current)));
|
|
222
|
+
if (updateConfig === undefined)
|
|
223
|
+
return refreshed;
|
|
224
|
+
yield* updateConfig(refreshed);
|
|
225
|
+
return undefined;
|
|
226
|
+
})).pipe(Effect.catchTag("E2BLoginError", () => browserLogin(oauth.domain ?? DEFAULT_DOMAIN)))), Match.exhaustive, Effect.mapError((cause) => cause._tag === "AuthError"
|
|
227
|
+
? cause
|
|
228
|
+
: AuthError.make({ message: `E2B: login failed: ${cause.message}`, cause })));
|
|
229
|
+
const logout = (_profileName, config) => config.method === "oauth" ? revokeGrant(grantOf(config)) : Effect.void;
|
|
230
|
+
const details = (profileName, config, updateConfig) => Effect.all([read(profileName, config, updateConfig), Clock.currentTimeMillis]).pipe(Effect.map(([creds, now]) => {
|
|
231
|
+
const lines = [];
|
|
232
|
+
if (config.method === "oauth")
|
|
233
|
+
lines.push({ key: "email", value: config.email });
|
|
234
|
+
if (creds.accessToken) {
|
|
235
|
+
lines.push({ key: "accessToken", value: displayRedacted(creds.accessToken) });
|
|
236
|
+
}
|
|
237
|
+
if (creds.expires !== undefined) {
|
|
238
|
+
const remaining = creds.expires - now;
|
|
239
|
+
lines.push({
|
|
240
|
+
key: "expires",
|
|
241
|
+
value: remaining <= 0
|
|
242
|
+
? "expired"
|
|
243
|
+
: `in ${Duration.format(Duration.millis(remaining))} (refreshes itself)`,
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
if (creds.apiKey)
|
|
247
|
+
lines.push({ key: "apiKey", value: displayRedacted(creds.apiKey) });
|
|
248
|
+
lines.push({
|
|
249
|
+
key: "team",
|
|
250
|
+
value: config.method === "oauth"
|
|
251
|
+
? `${config.teamName} (${config.teamId})`
|
|
252
|
+
: (creds.teamId ?? "default"),
|
|
253
|
+
});
|
|
254
|
+
lines.push({ key: "source", value: creds.source.type });
|
|
255
|
+
return { lines };
|
|
256
|
+
}));
|
|
257
|
+
return {
|
|
258
|
+
configSchema: E2BAuthConfigSchema,
|
|
259
|
+
configure,
|
|
260
|
+
configureWith,
|
|
261
|
+
configureMethods,
|
|
262
|
+
login,
|
|
263
|
+
logout,
|
|
264
|
+
details,
|
|
265
|
+
read,
|
|
266
|
+
readEnvironment,
|
|
267
|
+
environment: [
|
|
268
|
+
{
|
|
269
|
+
name: "E2B_ACCESS_TOKEN",
|
|
270
|
+
required: false,
|
|
271
|
+
secret: true,
|
|
272
|
+
description: "Access token. Reaches every endpoint and mints the API keys bindings and E2B.ApiKey need.",
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
name: "E2B_TEAM_ID",
|
|
276
|
+
required: false,
|
|
277
|
+
description: "Team id sent with the access token. Defaults to the token's default team.",
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
name: "E2B_API_KEY",
|
|
281
|
+
required: false,
|
|
282
|
+
secret: true,
|
|
283
|
+
description: "Team API key, sent as X-API-Key. Enough for resources; bindings need the access token.",
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
name: "E2B_DOMAIN",
|
|
287
|
+
required: false,
|
|
288
|
+
description: "E2B domain for self-hosted deployments.",
|
|
289
|
+
},
|
|
290
|
+
],
|
|
291
|
+
};
|
|
292
|
+
}));
|
|
293
|
+
//# sourceMappingURL=AuthProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthProvider.js","sources":["../src/AuthProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the bundled program (the runners registered via `host.run` /
|
|
3
|
+
* serve) and run it with a Bun HTTP server bound to `PORT`, so the returned
|
|
4
|
+
* `{ fetch }` handler is actually served and `host.run` loops stay alive.
|
|
5
|
+
*/
|
|
6
|
+
export declare const bootstrap: (entrypoint: unknown) => Promise<void>;
|
|
7
|
+
//# sourceMappingURL=Bootstrap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Bootstrap.d.ts","sources":["../src/Bootstrap.ts"],"names":[],"mappings":"AAoBA;;;;GAIG;AACH,eAAO,MAAM,SAAS,eAAgB,OAAO,KAAG,OAAO,CAAC,IAAI,CAyB3D,CAAC"}
|
package/lib/Bootstrap.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process bootstrap for `E2B.Template` programs (a Bun process serving the
|
|
3
|
+
* bundled program). The generated entry imports this module and the user's
|
|
4
|
+
* `main`, nothing else — see `alchemy/Runtime/Bootstrap` for why.
|
|
5
|
+
*/
|
|
6
|
+
import { BunServices } from "@effect/platform-bun";
|
|
7
|
+
import { BunHttpServer } from "alchemy/Http";
|
|
8
|
+
import { reifyBoundConfigProvider } from "alchemy/Runtime";
|
|
9
|
+
import { entrypointLayer, resolveProgram, runProcess, stackFromEnv, } from "alchemy/Runtime/Bootstrap";
|
|
10
|
+
import * as ConfigProvider from "effect/ConfigProvider";
|
|
11
|
+
import * as Effect from "effect/Effect";
|
|
12
|
+
import * as FetchHttpClient from "effect/http/FetchHttpClient";
|
|
13
|
+
import * as Layer from "effect/Layer";
|
|
14
|
+
import * as Logger from "effect/Logger";
|
|
15
|
+
/**
|
|
16
|
+
* Resolve the bundled program (the runners registered via `host.run` /
|
|
17
|
+
* serve) and run it with a Bun HTTP server bound to `PORT`, so the returned
|
|
18
|
+
* `{ fetch }` handler is actually served and `host.run` loops stay alive.
|
|
19
|
+
*/
|
|
20
|
+
export const bootstrap = (entrypoint) => {
|
|
21
|
+
const platform = Layer.mergeAll(BunServices.layer, FetchHttpClient.layer, Logger.layer([Logger.consolePretty()]));
|
|
22
|
+
const program = resolveProgram("program").pipe(Effect.provide(entrypointLayer(entrypoint).pipe(Layer.provideMerge(stackFromEnv), Layer.provideMerge(BunHttpServer()), Layer.provideMerge(platform), Layer.provideMerge(Layer.succeed(ConfigProvider.ConfigProvider, reifyBoundConfigProvider(ConfigProvider.fromEnv(), process.env))))), Effect.scoped);
|
|
23
|
+
return runProcess("Docker service", program);
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=Bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Bootstrap.js","sources":["../src/Bootstrap.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EACL,eAAe,EACf,cAAc,EACd,UAAU,EACV,YAAY,GACb,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,eAAe,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,UAAmB,EAAiB,EAAE;IAC9D,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAC7B,WAAW,CAAC,KAAK,EACjB,eAAe,CAAC,KAAK,EACrB,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CACvC,CAAC;IAEF,MAAM,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,IAAI,CAC5C,MAAM,CAAC,OAAO,CACZ,eAAe,CAAC,UAAU,CAAC,CAAC,IAAI,CAC9B,KAAK,CAAC,YAAY,CAAC,YAAY,CAAC,EAChC,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC,EACnC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,EAC5B,KAAK,CAAC,YAAY,CAChB,KAAK,CAAC,OAAO,CACX,cAAc,CAAC,cAAc,EAC7B,wBAAwB,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,CAChE,CACF,CACF,CACF,EACD,MAAM,CAAC,MAAM,CACd,CAAC;IAEF,OAAO,UAAU,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import * as Binding from "alchemy/Binding";
|
|
2
|
+
import type * as Effect from "effect/Effect";
|
|
3
|
+
import type { Sandbox } from "./Sandbox.ts";
|
|
4
|
+
import type { ConnectedSandbox } from "./SandboxClient.ts";
|
|
5
|
+
/**
|
|
6
|
+
* Work with one {@link Sandbox} declared in the stack, from a Worker,
|
|
7
|
+
* Function or any other host: run commands, read and write files, open
|
|
8
|
+
* terminals, call its ports, snapshot or fork it. The handle has the same
|
|
9
|
+
* operations as the sandboxes `CreateSandbox` returns; its `sandboxId` and
|
|
10
|
+
* `url(port)` are Effects, read at runtime.
|
|
11
|
+
*
|
|
12
|
+
* A declared sandbox pauses when it is idle. With `autoResume` (the
|
|
13
|
+
* default), E2B resumes it on the next request, to one of its ports or from
|
|
14
|
+
* any call here. With `autoResume: false`, calls inside it (`exec`,
|
|
15
|
+
* `start`, `files`, `pty`) fail with `SandboxNotRunning` until you call
|
|
16
|
+
* `resume()`.
|
|
17
|
+
*
|
|
18
|
+
* The host gets its own E2B API key, minted at deploy and revoked when the
|
|
19
|
+
* host is destroyed. E2B keys are not scoped, so the key reaches the whole
|
|
20
|
+
* team; it is never the deployer's own.
|
|
21
|
+
*
|
|
22
|
+
* ### Running commands in a dev box
|
|
23
|
+
* **Example:** Pull and test on request
|
|
24
|
+
* ```typescript
|
|
25
|
+
* const devBox = yield* E2B.ConnectSandbox(DevBox);
|
|
26
|
+
* return {
|
|
27
|
+
* fetch: Effect.gen(function* () {
|
|
28
|
+
* yield* devBox.resume({ timeout: "10 minutes" });
|
|
29
|
+
* const test = yield* devBox.exec("git pull && npm test", { cwd: "/home/user/repo" });
|
|
30
|
+
* return yield* HttpServerResponse.json(test);
|
|
31
|
+
* }),
|
|
32
|
+
* };
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* ### Streaming a process
|
|
36
|
+
* **Example:** Stream a build's output
|
|
37
|
+
* ```typescript
|
|
38
|
+
* const build = yield* devBox.start("npm run build", { cwd: "/home/user/repo" });
|
|
39
|
+
* const output = build.output.pipe(Stream.map((chunk) => chunk.data));
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* ### Calling a program in the sandbox
|
|
43
|
+
* **Example:** Call port 3000
|
|
44
|
+
* ```typescript
|
|
45
|
+
* const port = yield* api.getTcpPort(3000);
|
|
46
|
+
* const response = yield* port.fetch(HttpClientRequest.get("/health"));
|
|
47
|
+
* ```
|
|
48
|
+
*
|
|
49
|
+
* **Example:** Proxy the Worker's request to port 3000
|
|
50
|
+
* ```typescript
|
|
51
|
+
* const port = yield* api.getTcpPort(3000);
|
|
52
|
+
* return yield* port.fetch(yield* HttpServerRequest);
|
|
53
|
+
* ```
|
|
54
|
+
*
|
|
55
|
+
* ### Pausing it early
|
|
56
|
+
* **Example:** Pause when the work is done
|
|
57
|
+
* ```typescript
|
|
58
|
+
* yield* devBox.pause();
|
|
59
|
+
* ```
|
|
60
|
+
*
|
|
61
|
+
* @binding
|
|
62
|
+
* @product Sandbox
|
|
63
|
+
*/
|
|
64
|
+
export interface ConnectSandbox extends Binding.Service<ConnectSandbox, "E2B.ConnectSandbox", (sandbox: Sandbox) => Effect.Effect<ConnectedSandbox>> {
|
|
65
|
+
}
|
|
66
|
+
export declare const ConnectSandbox: ConnectSandbox;
|
|
67
|
+
//# sourceMappingURL=ConnectSandbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConnectSandbox.d.ts","sources":["../src/ConnectSandbox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;AACH,MAAM,WAAW,cAAe,SAAQ,OAAO,CAAC,OAAO,CACrD,cAAc,EACd,oBAAoB,EACpB,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CACtD;CAAG;AAEJ,eAAO,MAAM,cAAc,gBAAwD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConnectSandbox.js","sources":["../src/ConnectSandbox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAsE3C,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAiB,oBAAoB,CAAC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as Layer from "effect/Layer";
|
|
2
|
+
import { ConnectSandbox } from "./ConnectSandbox.ts";
|
|
3
|
+
/**
|
|
4
|
+
* HTTP implementation of {@link ConnectSandbox}: E2B's control plane with
|
|
5
|
+
* the host's key, and envd inside the sandbox with the sandbox's own token.
|
|
6
|
+
* Works on any host.
|
|
7
|
+
*
|
|
8
|
+
* ### Provide the layer
|
|
9
|
+
* **Example:** On a Cloudflare Worker
|
|
10
|
+
* ```typescript
|
|
11
|
+
* Effect.gen(function* () {
|
|
12
|
+
* const devBox = yield* E2B.ConnectSandbox(DevBox);
|
|
13
|
+
* // ...
|
|
14
|
+
* }).pipe(Effect.provide(E2B.ConnectSandboxHttp))
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* @layer
|
|
18
|
+
* @product Sandbox
|
|
19
|
+
* @provides E2B.ConnectSandbox
|
|
20
|
+
*/
|
|
21
|
+
export declare const ConnectSandboxHttp: Layer.Layer<ConnectSandbox, never, never>;
|
|
22
|
+
//# sourceMappingURL=ConnectSandboxHttp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConnectSandboxHttp.d.ts","sources":["../src/ConnectSandboxHttp.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAKrD;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,kBAAkB,2CAU9B,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as Layer from "effect/Layer";
|
|
3
|
+
import { ConnectSandbox } from "./ConnectSandbox.js";
|
|
4
|
+
import { bindE2B } from "./E2BBindings.js";
|
|
5
|
+
import { makeConnectedSandbox } from "./internal/SandboxHandle.js";
|
|
6
|
+
/**
|
|
7
|
+
* HTTP implementation of {@link ConnectSandbox}: E2B's control plane with
|
|
8
|
+
* the host's key, and envd inside the sandbox with the sandbox's own token.
|
|
9
|
+
* Works on any host.
|
|
10
|
+
*
|
|
11
|
+
* ### Provide the layer
|
|
12
|
+
* **Example:** On a Cloudflare Worker
|
|
13
|
+
* ```typescript
|
|
14
|
+
* Effect.gen(function* () {
|
|
15
|
+
* const devBox = yield* E2B.ConnectSandbox(DevBox);
|
|
16
|
+
* // ...
|
|
17
|
+
* }).pipe(Effect.provide(E2B.ConnectSandboxHttp))
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* @layer
|
|
21
|
+
* @product Sandbox
|
|
22
|
+
* @provides E2B.ConnectSandbox
|
|
23
|
+
*/
|
|
24
|
+
export const ConnectSandboxHttp = Layer.succeed(ConnectSandbox, Effect.fn("E2B.ConnectSandbox")(function* (sandbox) {
|
|
25
|
+
const auth = yield* bindE2B;
|
|
26
|
+
const sandboxId = yield* sandbox.sandboxId.asEffect();
|
|
27
|
+
const trafficToken = yield* sandbox.trafficAccessToken.asEffect();
|
|
28
|
+
return makeConnectedSandbox(auth, sandboxId, trafficToken);
|
|
29
|
+
}));
|
|
30
|
+
//# sourceMappingURL=ConnectSandboxHttp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConnectSandboxHttp.js","sources":["../src/ConnectSandboxHttp.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAGnE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAC7C,cAAc,EACd,MAAM,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAgB;IACzD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC;IAC5B,MAAM,SAAS,GAAG,KAAK,CAAC,CAAE,OAAO,CAAC,SAA0C,CAAC,QAAQ,EAAE,CAAC;IACxF,MAAM,YAAY,GAAG,KAAK,CAAC,CACzB,OAAO,CAAC,kBACT,CAAC,QAAQ,EAAE,CAAC;IACb,OAAO,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;AAC7D,CAAC,CAAC,CACH,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as Contributions from "alchemy/Contributions";
|
|
2
|
+
declare const _default: {
|
|
3
|
+
readonly name: "e2b";
|
|
4
|
+
readonly auth: Contributions.Lazy<import("effect/Layer").Layer<never, never, import("alchemy/Auth/Registry").AuthProviders | import("effect/process/ChildProcessSpawner").ChildProcessSpawner | import("effect/FileSystem").FileSystem | import("effect/Path").Path | import("effect/crypto/SecureRandom").SecureRandom>>;
|
|
5
|
+
};
|
|
6
|
+
export default _default;
|
|
7
|
+
//# sourceMappingURL=Contributions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Contributions.d.ts","sources":["../src/Contributions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,uBAAuB,CAAC;;;;;AAEvD,wBAMG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Contributions.js","sources":["../src/Contributions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,uBAAuB,CAAC;AAEvD,eAAe,aAAa,CAAC,IAAI,CAAC;IAChC,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,aAAa,CAAC,IAAI,CACtB,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,EACjC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAC3B;CACF,CAAC,CAAC"}
|