roder_ext_runner_e2b/
lib.rs1use std::sync::Arc;
2
3use roder_api::capabilities::CapabilityRequest;
4use roder_api::extension::{
5 ExtensionManifest, ExtensionRegistryBuilder, ProvidedService, RoderExtension,
6};
7use roder_ext_runner_hosted_common::{HostedRunnerProvider, HostedRunnerSpec};
8use semver::Version;
9
10pub const PROVIDER_ID: &str = "e2b";
11pub const TOKEN_ENV: &str = "E2B_API_KEY";
12pub const BASE_URL_ENV: &str = "E2B_RUNNER_BASE_URL";
13pub const LIVE_ENV: &str = "RODER_LIVE_E2B_RUNNER";
14
15pub fn e2b_runner_spec() -> HostedRunnerSpec {
16 HostedRunnerSpec {
17 provider_id: PROVIDER_ID,
18 token_env: TOKEN_ENV,
19 base_url_env: BASE_URL_ENV,
20 default_base_url: "https://api.e2b.dev/roder/runner",
21 live_env: LIVE_ENV,
22 }
23}
24
25#[derive(Debug, Default)]
26pub struct E2bRunnerExtension;
27
28impl RoderExtension for E2bRunnerExtension {
29 fn manifest(&self) -> ExtensionManifest {
30 ExtensionManifest {
31 id: "roder-ext-runner-e2b".to_string(),
32 name: "E2B Runner".to_string(),
33 version: Version::new(0, 1, 0),
34 api_version: "0.1.0".to_string(),
35 description: Some("Runs remote-runner sessions through E2B.".to_string()),
36 provides: vec![ProvidedService::RemoteRunnerProvider(
37 PROVIDER_ID.to_string(),
38 )],
39 required_capabilities: vec![
40 CapabilityRequest::new("network.http"),
41 CapabilityRequest::new(format!("secret.read.{TOKEN_ENV}")),
42 ],
43 }
44 }
45
46 fn install(&self, registry: &mut ExtensionRegistryBuilder) -> anyhow::Result<()> {
47 registry.remote_runner_provider(Arc::new(HostedRunnerProvider::new(e2b_runner_spec())));
48 Ok(())
49 }
50}