How to access environment variables in Cloudflare Workers when using RPC binding

I'm working with two separate Cloudflare Workers, where Worker A calls a function in Worker B via a binding (RPC). Worker B requires an environment variable to send an email, and this variable should be scoped to Worker B itself, so it doesn't depend on Worker A's environment. Here's the relevant code for Worker B:
export class WorkerEmail extends WorkerEntrypoint {
// Currently, entrypoints without a named handler are not supported

async fetch(request: Request): Promise<Response> {
const url = new URL(request.url);
if (url.pathname === "/send" && request.method === "POST") {
const { email, firstName }: { email: string; firstName: string } =
await request.json();
return this.send(email, firstName, this.env as Env); // Attempting to pass env here
}
return new Response(null, { status: 404 });
}


async send(email: string, firstName: string, env: Env): Promise<Response> {
const resend = new Resend(env.RESEND_API); // env.RESEND_API should come from Worker B's environment

}
}
export class WorkerEmail extends WorkerEntrypoint {
// Currently, entrypoints without a named handler are not supported

async fetch(request: Request): Promise<Response> {
const url = new URL(request.url);
if (url.pathname === "/send" && request.method === "POST") {
const { email, firstName }: { email: string; firstName: string } =
await request.json();
return this.send(email, firstName, this.env as Env); // Attempting to pass env here
}
return new Response(null, { status: 404 });
}


async send(email: string, firstName: string, env: Env): Promise<Response> {
const resend = new Resend(env.RESEND_API); // env.RESEND_API should come from Worker B's environment

}
}
When I use HTTP with fetch in Worker A, it works fine:
await c.env.WORKER_EMAIL.fetch(
new Request("https://worker-email/send", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ email, firstName }),
})
);
await c.env.WORKER_EMAIL.fetch(
new Request("https://worker-email/send", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ email, firstName }),
})
);
However, if I want to call Worker B directly via an RPC-style binding (like await c.env.WORKER_EMAIL.send(email, firstName)), I run into issues with accessing the environment variable env.RESEND_API directly in Worker B. It seems the environment is not properly scoped when using RPC and it stays undefined Question: How can I pass the correct environment to Worker B's send function when using RPC? Or is there a better way to structure this to ensure Worker B can access its own environment variables independently of Worker A? What am I missing here? Any guidance would be greatly appreciated!
1 Reply
Nlea
NleaOP3w ago
@Skye, thanks for pointing that out! While I used this.env within the fetch function to pass the env parameter to the send function, it didn’t occur to me that I don’t actually need the env parameter—I can simply declare it within the send function 🤦‍♀️ . I think I had a big mental block there. Thanks for helping me untangle it!
Want results from more Discord servers?
Add your server