Silvan
Silvan
Explore posts from servers
BABetter Auth
Created by Silvan on 4/29/2025 in #help
Does crossSubDomainCookies not work on localhost?
well this seems like a known thing lol https://stackoverflow.com/questions/1134290/cookies-on-localhost-with-explicit-domain maybe it would make sense to add something to the docs or a workaround?
3 replies
CDCloudflare Developers
Created by Silvan on 4/28/2025 in #workers-help
An RPC stub was not disposed properly using meta frameworks
but even then its super weird. i think for me it happens the most often when i do an rpc call and refresh my page but even then happens like 1 out of 15 times
29 replies
CDCloudflare Developers
Created by Silvan on 4/28/2025 in #workers-help
An RPC stub was not disposed properly using meta frameworks
yea must be something like that
29 replies
CDCloudflare Developers
Created by Silvan on 4/28/2025 in #workers-help
An RPC stub was not disposed properly using meta frameworks
oh well i will keep digging because even if the error is rare and random, it dosent make sense that it never pops up in my minimal code base
29 replies
CDCloudflare Developers
Created by Silvan on 4/28/2025 in #workers-help
An RPC stub was not disposed properly using meta frameworks
i see. well with meta frameworks using breaks everything thats why i am not using it
29 replies
CDCloudflare Developers
Created by Silvan on 4/28/2025 in #workers-help
An RPC stub was not disposed properly using meta frameworks
29 replies
CDCloudflare Developers
Created by Silvan on 4/28/2025 in #workers-help
An RPC stub was not disposed properly using meta frameworks
No description
29 replies
CDCloudflare Developers
Created by Silvan on 4/28/2025 in #workers-help
An RPC stub was not disposed properly using meta frameworks
no afaik wrangler 4 is polyfilling or w/e automatically
29 replies
CDCloudflare Developers
Created by Silvan on 4/28/2025 in #workers-help
An RPC stub was not disposed properly using meta frameworks
but in a worker to worker context couldnt you just use using?
29 replies
CDCloudflare Developers
Created by Silvan on 4/28/2025 in #workers-help
An RPC stub was not disposed properly using meta frameworks
with this minimal setup i dont ever get the stub error weirdly
29 replies
CDCloudflare Developers
Created by Silvan on 4/28/2025 in #workers-help
An RPC stub was not disposed properly using meta frameworks
it looks something like this index.ts
import { WorkerEntrypoint } from 'cloudflare:workers';
import { WorkerDO } from './worker-do';

export { WorkerDO };

export default class Worker extends WorkerEntrypoint<Env> {
async fetch(request: Request) {
return new Response('Hello');
}
async getWorkerRPC(doId: string) {
const id = this.env.WORKER_DO.idFromName(doId);
const stub = this.env.WORKER_DO.get(id);
return stub.getRpcTarget();
}
}
import { WorkerEntrypoint } from 'cloudflare:workers';
import { WorkerDO } from './worker-do';

export { WorkerDO };

export default class Worker extends WorkerEntrypoint<Env> {
async fetch(request: Request) {
return new Response('Hello');
}
async getWorkerRPC(doId: string) {
const id = this.env.WORKER_DO.idFromName(doId);
const stub = this.env.WORKER_DO.get(id);
return stub.getRpcTarget();
}
}
do.ts
import { DurableObject, RpcTarget } from 'cloudflare:workers';

type Product = { id: string; name: string };

export class WorkerDO extends DurableObject<Env> {
products: Product[] = [];

constructor(ctx: DurableObjectState, env: Env) {
super(ctx, env);

ctx.blockConcurrencyWhile(async () => {
this.products = (await ctx.storage.get('products')) || [];
});
}

async getProducts() {
return this.products;
}

async getProductById(id: string) {
return this.products.find((product) => product.id === id);
}

async addProduct(productData: Omit<Product, 'id'>) {
const newProduct: Product = { ...productData, id: crypto.randomUUID() };
this.products.push(newProduct);
await this.ctx.storage.put('products', this.products);
return newProduct;
}

async deleteProduct(productId: string): Promise<boolean> {
const initialLength = this.products.length;
this.products = this.products.filter((p) => p.id !== productId);
if (this.products.length === initialLength) return false; // Not found
await this.ctx.storage.put('products', this.products);
return true;
}

private rpcTarget = class extends RpcTarget {
private stub: WorkerDO;

constructor(stub: WorkerDO) {
super();
this.stub = stub;
}
async getProducts() {
return this.stub.getProducts();
}
async getProductById(id: string) {
return this.stub.getProductById(id);
}
async addProduct(productData: Omit<Product, 'id'>) {
return this.stub.addProduct(productData);
}
async deleteProduct(productId: string) {
return this.stub.deleteProduct(productId);
}
};

async getRpcTarget() {
return new this.rpcTarget(this);
}
}
import { DurableObject, RpcTarget } from 'cloudflare:workers';

type Product = { id: string; name: string };

export class WorkerDO extends DurableObject<Env> {
products: Product[] = [];

constructor(ctx: DurableObjectState, env: Env) {
super(ctx, env);

ctx.blockConcurrencyWhile(async () => {
this.products = (await ctx.storage.get('products')) || [];
});
}

async getProducts() {
return this.products;
}

async getProductById(id: string) {
return this.products.find((product) => product.id === id);
}

async addProduct(productData: Omit<Product, 'id'>) {
const newProduct: Product = { ...productData, id: crypto.randomUUID() };
this.products.push(newProduct);
await this.ctx.storage.put('products', this.products);
return newProduct;
}

async deleteProduct(productId: string): Promise<boolean> {
const initialLength = this.products.length;
this.products = this.products.filter((p) => p.id !== productId);
if (this.products.length === initialLength) return false; // Not found
await this.ctx.storage.put('products', this.products);
return true;
}

private rpcTarget = class extends RpcTarget {
private stub: WorkerDO;

constructor(stub: WorkerDO) {
super();
this.stub = stub;
}
async getProducts() {
return this.stub.getProducts();
}
async getProductById(id: string) {
return this.stub.getProductById(id);
}
async addProduct(productData: Omit<Product, 'id'>) {
return this.stub.addProduct(productData);
}
async deleteProduct(productId: string) {
return this.stub.deleteProduct(productId);
}
};

async getRpcTarget() {
return new this.rpcTarget(this);
}
}
29 replies
CDCloudflare Developers
Created by Silvan on 4/28/2025 in #workers-help
An RPC stub was not disposed properly using meta frameworks
yes im using WorkerEntrypoint. i played around with them being async and not but it dosent seem to make any difference but i might be wrong here
29 replies
CDCloudflare Developers
Created by Silvan on 4/28/2025 in #workers-help
An RPC stub was not disposed properly using meta frameworks
but its weird i made a minimal reproduction repo with that setup and i just dont get the error in there
29 replies
CDCloudflare Developers
Created by Silvan on 4/28/2025 in #workers-help
An RPC stub was not disposed properly using meta frameworks
well curretly i have the silly setup where my do has a rpcTarget and my worker returns that so i can basically use DO RPCs in local dev but yea i also ran into the issue with a more normal setup
29 replies
CDCloudflare Developers
Created by Silvan on 4/28/2025 in #workers-help
An RPC stub was not disposed properly using meta frameworks
yep sadly as expected. i still get the error. Symbol.dispose seems to never exist. at least in sveltekit
29 replies
CDCloudflare Developers
Created by Silvan on 4/28/2025 in #workers-help
An RPC stub was not disposed properly using meta frameworks
thanks i will check it out!
29 replies