@convex-dev/better-auth
Version:
A Better Auth component for Convex.
82 lines • 2.82 kB
JavaScript
import { convexAdapter, BetterAuth, } from "../client/index.js";
import { api, internal } from "./_generated/api.js";
import { mutation, query } from "./_generated/server.js";
// @ts-expect-error - this is a test
const authFunctions = internal.adapterTest;
const publicAuthFunctions = api.adapterTest;
export const betterAuthComponent = new BetterAuth(api, {
authFunctions,
publicAuthFunctions,
verbose: false,
});
export const createAdapter = (ctx) => convexAdapter(ctx, betterAuthComponent, {
debugLogs: {
isRunningAdapterTests: true,
},
});
export const { createUser, deleteUser, updateUser, createSession, isAuthenticated, } = betterAuthComponent.createAuthFunctions({
onCreateUser: async () => {
// noop
// not required for the adapter test
},
});
export const deserialize = (data) => {
const dateStringRegex = /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/;
return Object.fromEntries(Object.entries(data).map(([key, value]) => [
key,
dateStringRegex.test(value) ? new Date(value) : value,
]));
};
export const serialize = (data) => {
if (!data) {
return data;
}
return Object.fromEntries(Object.entries(data).map(([key, value]) => [
key,
value instanceof Date ? value.toISOString() : value,
]));
};
export const create = mutation(async (ctx, args) => {
const adapter = createAdapter(ctx);
const result = await adapter({}).create({
...args,
data: deserialize(args.data),
});
return serialize(result);
});
export const findOne = query(async (ctx, args) => {
const adapter = createAdapter(ctx);
const result = await adapter({}).findOne(args);
return serialize(result);
});
export const findMany = query(async (ctx, args) => {
const adapter = createAdapter(ctx);
const result = await adapter({}).findMany(args);
return result.map(serialize);
});
export const count = query(async (ctx, args) => {
const adapter = createAdapter(ctx);
return adapter({}).count(args);
});
export const update = mutation(async (ctx, args) => {
const adapter = createAdapter(ctx);
const result = await adapter({}).update({
...args,
update: deserialize(args.update),
});
return serialize(result);
});
export const updateMany = mutation(async (ctx, args) => {
const adapter = createAdapter(ctx);
return adapter({}).updateMany(args);
});
const deleteMutation = mutation(async (ctx, args) => {
const adapter = createAdapter(ctx);
await adapter({}).delete(args);
});
export { deleteMutation as delete };
export const deleteMany = mutation(async (ctx, args) => {
const adapter = createAdapter(ctx);
return adapter({}).deleteMany(args);
});
//# sourceMappingURL=adapterTest.js.map