export const passwordlessPlugin = () => {
return {
id: 'passwordless',
endpoints: {
signIn: createAuthEndpoint(
'/passwordless/sign-in',
{
method: 'POST',
body: SignInSchema,
},
async (ctx) => {
const body = ctx.body;
const { data, error } = await authVerifyOtp(
{
deliveryMethod: body.email ? 'email' : 'sms',
code: body.code,
destination: body.email ?? body.phoneNumber,
},
{ isPublic: true }
);
if (error) {
throw new APIError('UNAUTHORIZED', {
message: error.message ?? 'Unknown error',
});
}
const tokens = {
idToken: data.idToken,
accessToken: data.accessToken,
refreshToken: data.refreshToken,
accessTokenExpires: data.accessTokenExpires,
};
const userId = tokens.idToken;
const session = await ctx.context.internalAdapter.createSession(
userId
);
return ctx.json({
ok: true,
session,
tokens,
});
}
),
} satisfies BetterAuthPlugin;
};
export const passwordlessPlugin = () => {
return {
id: 'passwordless',
endpoints: {
signIn: createAuthEndpoint(
'/passwordless/sign-in',
{
method: 'POST',
body: SignInSchema,
},
async (ctx) => {
const body = ctx.body;
const { data, error } = await authVerifyOtp(
{
deliveryMethod: body.email ? 'email' : 'sms',
code: body.code,
destination: body.email ?? body.phoneNumber,
},
{ isPublic: true }
);
if (error) {
throw new APIError('UNAUTHORIZED', {
message: error.message ?? 'Unknown error',
});
}
const tokens = {
idToken: data.idToken,
accessToken: data.accessToken,
refreshToken: data.refreshToken,
accessTokenExpires: data.accessTokenExpires,
};
const userId = tokens.idToken;
const session = await ctx.context.internalAdapter.createSession(
userId
);
return ctx.json({
ok: true,
session,
tokens,
});
}
),
} satisfies BetterAuthPlugin;
};