type OmitDbToken<T extends FunctionReference<any>> = Omit<T, '_args'> & { _args: Omit<T['_args'], 'dbToken'> };
type HasDbToken<Fn extends FunctionReference<any>, T> = 'dbToken' extends keyof Fn['_args'] ? T : never;
class ConvexHttpClientAsServer extends ConvexHttpClient {
constructor(url: string) {
super(url);
}
public serverMutation<Mutation extends FunctionReference<"mutation">>(
ctx: Mutation,
...args: HasDbToken<Mutation, OptionalRestArgs<OmitDbToken<Mutation>>>
) {
return super.mutation(
ctx,
Object.assign({}, { dbToken: process.env.CONVEX_DB_TOKEN! }, ...args)
);
}
public serverQuery<Query extends FunctionReference<"query">>(
ctx: Query,
...args: HasDbToken<Query, OptionalRestArgs<OmitDbToken<Query>>>
) {
return super.query(
ctx,
Object.assign({}, { dbToken: process.env.CONVEX_DB_TOKEN! }, ...args)
);
}
// the rest (like actions) isn't implemented cause I don't use em yet
// but it's all pretty similar, just gotta copypaste
}
export const convex = new ConvexHttpClientAsServer(process.env.NEXT_PUBLIC_CONVEX_URL!);
type OmitDbToken<T extends FunctionReference<any>> = Omit<T, '_args'> & { _args: Omit<T['_args'], 'dbToken'> };
type HasDbToken<Fn extends FunctionReference<any>, T> = 'dbToken' extends keyof Fn['_args'] ? T : never;
class ConvexHttpClientAsServer extends ConvexHttpClient {
constructor(url: string) {
super(url);
}
public serverMutation<Mutation extends FunctionReference<"mutation">>(
ctx: Mutation,
...args: HasDbToken<Mutation, OptionalRestArgs<OmitDbToken<Mutation>>>
) {
return super.mutation(
ctx,
Object.assign({}, { dbToken: process.env.CONVEX_DB_TOKEN! }, ...args)
);
}
public serverQuery<Query extends FunctionReference<"query">>(
ctx: Query,
...args: HasDbToken<Query, OptionalRestArgs<OmitDbToken<Query>>>
) {
return super.query(
ctx,
Object.assign({}, { dbToken: process.env.CONVEX_DB_TOKEN! }, ...args)
);
}
// the rest (like actions) isn't implemented cause I don't use em yet
// but it's all pretty similar, just gotta copypaste
}
export const convex = new ConvexHttpClientAsServer(process.env.NEXT_PUBLIC_CONVEX_URL!);