Skip to content

Commit

Permalink
fix: expose EdgeRuntime only to main worker
Browse files Browse the repository at this point in the history
  • Loading branch information
laktek committed Apr 8, 2023
1 parent 15bbc42 commit d7eb441
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 14 deletions.
6 changes: 3 additions & 3 deletions crates/base/src/js_worker.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ use sb_core::http_start::sb_core_http;
use sb_core::net::sb_core_net;
use sb_core::permissions::{sb_core_permissions, Permissions};
use sb_core::runtime::sb_core_runtime;
use sb_core::sb_core_main;
use sb_core::{sb_core_main_js, sb_core_user_js};
use sb_env::sb_env;
use sb_worker_context::essentials::UserWorkerMsgs;
use sb_workers::sb_user_workers;
Expand Down Expand Up @@ -124,7 +124,7 @@ impl MainWorker {
deno_tls::deno_tls::init_ops_and_esm(),
sb_env::init_ops_and_esm(),
sb_user_workers::init_ops_and_esm(),
sb_core_main::init_ops_and_esm(),
sb_core_main_js::init_ops_and_esm(),
sb_core_net::init_ops_and_esm(),
sb_core_http::init_ops_and_esm(),
sb_core_runtime::init_ops_and_esm(Some(main_module_url.clone())),
Expand Down Expand Up @@ -264,7 +264,7 @@ impl UserWorker {
deno_tls::deno_tls::init_ops_and_esm(),
sb_env::init_ops_and_esm(),
sb_user_workers::init_ops_and_esm(),
sb_core_main::init_ops_and_esm(),
sb_core_user_js::init_ops_and_esm(),
sb_core_net::init_ops_and_esm(),
sb_core_http::init_ops_and_esm(),
sb_core_runtime::init_ops_and_esm(Some(main_module_url.clone())),
Expand Down
32 changes: 23 additions & 9 deletions crates/sb_core/js/bootstrap.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import * as abortSignal from "ext:deno_web/03_abort_signal.js";
import * as base64 from "ext:deno_web/05_base64.js";
import * as console from "ext:deno_console/02_console.js";
import * as crypto from "ext:deno_crypto/00_crypto.js";
import * as errors from "ext:runtime/01_errors.js";
import DOMException from "ext:deno_web/01_dom_exception.js";
import * as encoding from "ext:deno_web/08_text_encoding.js";
import * as event from "ext:deno_web/02_event.js";
Expand All @@ -24,7 +23,6 @@ import * as net from "ext:deno_net/01_net.js";
import * as response from "ext:deno_fetch/23_response.js";
import * as request from "ext:deno_fetch/23_request.js";
import * as globalInterfaces from "ext:deno_web/04_global_interfaces.js";
import { SUPABASE_USER_WORKERS } from "ext:sb_user_workers/user_workers.js";
import { SUPABASE_ENV } from "ext:sb_env/env.js";


Expand Down Expand Up @@ -391,6 +389,28 @@ class NotSupported extends Error {
}
}

const errors = {
NotFound,
PermissionDenied,
ConnectionRefused,
ConnectionReset,
ConnectionAborted,
NotConnected,
AddrInUse,
AddrNotAvailable,
BrokenPipe,
AlreadyExists,
InvalidData,
TimedOut,
Interrupted: core.Interrupted,
WriteZero,
UnexpectedEof,
BadResource: core.BadResource,
Http,
Busy,
NotSupported,
}

function registerErrors() {
core.registerErrorClass("NotFound", NotFound);
core.registerErrorClass("PermissionDenied", PermissionDenied);
Expand Down Expand Up @@ -527,12 +547,6 @@ Deno.startTls = tls.startTls;
Deno.resolveDns = net.resolveDns;
Deno.serveHttp = serveHttp;

// EdgeRuntime namespace
// FIXME: Make the object read-only
globalThis.EdgeRuntime = {
userWorkers: SUPABASE_USER_WORKERS
};

const __bootstrap = globalThis.__bootstrap;
delete globalThis.__bootstrap;
delete globalThis.bootstrap;
Expand Down Expand Up @@ -577,7 +591,7 @@ ObjectDefineProperties(Deno, {
pid: readOnly(globalThis.__pid),
args: readOnly([]), // args are set to be empty
mainModule: getterOnly(opMainModule),
errors: errors.errors,
errors,

});

Expand Down
7 changes: 7 additions & 0 deletions crates/sb_core/js/main_worker.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { SUPABASE_USER_WORKERS } from "ext:sb_user_workers/user_workers.js";

// EdgeRuntime namespace
// FIXME: Make the object read-only
globalThis.EdgeRuntime = {
userWorkers: SUPABASE_USER_WORKERS
};
8 changes: 7 additions & 1 deletion crates/sb_core/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,10 @@ pub mod http_start;
pub mod net;
pub mod permissions;
pub mod runtime;
deno_core::extension!(sb_core_main, esm = ["js/bootstrap.js"]);

deno_core::extension!(
sb_core_main_js,
esm = ["js/bootstrap.js", "js/main_worker.js"]
);

deno_core::extension!(sb_core_user_js, esm = ["js/bootstrap.js"]);
5 changes: 4 additions & 1 deletion examples/main/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,10 @@ serve(async (req: Request) => {
const workerTimeoutMs = 5 * 60 * 1000;
const noModuleCache = false;
const importMapPath = null;
const envVars = [];
const envVars = [
["STRIPE_API_KEY", Deno.env.get("STRIPE_API_KEY")]
];

try {
const worker = await EdgeRuntime.userWorkers.create({
servicePath,
Expand Down

0 comments on commit d7eb441

Please sign in to comment.