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:
However, if I want to call Worker B directly via an RPC-style binding (like
await c.env.WORKER_EMAIL.send(email, firstName)
await c.env.WORKER_EMAIL.send(email, firstName)
), I run into issues with accessing the environment variable
env.RESEND_API
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!