Import the Node standard library module "node:module" in expo after upgrade to v1.4.6
Original message was deleted
auth-client.ts setup for your Expo app using Better Auth looks really solid. You're combining several plugins to extend client functionality, which is great! Here are a few points you might find useful:expoPasskeyClient, which is perfect if you're leveraging passkey authentication. Make sure that the rpId matches your domain settings on the server side (see our Passkey documentation details [7]).expoClient with expo-secure-store for managing your sessions and cookies securely. This setup is in line with our best practices for securing session data on native devices [2].1 | import { createRequire } from "node:module";| ^
auth-client.tsexpoPasskeyClientrpIdexpoClientexpo-secure-storeimport { expo } from "@better-auth/expo";
import type { BetterAuthOptions } from "better-auth";
import { betterAuth } from "better-auth";
import { prismaAdapter } from "better-auth/adapters/prisma";
import { admin, bearer, openAPI, phoneNumber } from "better-auth/plugins";
import { expoPasskey } from "expo-passkey/server";
import { prisma } from "./prisma";
export const auth = betterAuth<BetterAuthOptions>({
appName: 'Example',
database: prismaAdapter(prisma, {
provider: "postgresql",
}),
trustedOrigins: [
"example://",
"http://localhost:3000",
"http://localhost:3001",
"https://example.com"
],
emailAndPassword: {
enabled: true,
autoSignIn: false,
},
telemetry: {
enabled: false,
},
user: {
additionalFields: {
blurhash: {
type: "string",
required: false,
},
kycVerified: {
type: "boolean",
required: false,
},
}
},
advanced: {
useSecureCookies: true,
defaultCookieAttributes: {
sameSite: "none",
secure: true,
httpOnly: true,
},
},
plugins: [
admin(),
bearer(),
expo(),
openAPI(),
phoneNumber({
sendOTP: async ({ phoneNumber, code }, _ctx) => {
// TODO: replace this with your SMS provider integration
console.log("Sending OTP to phone number", phoneNumber, "with code", code);
},
signUpOnVerification: {
getTempEmail: (phoneNumber) => {
return `${phoneNumber}@example.com`
},
getTempName: (phoneNumber) => {
return phoneNumber
}
},
}),
expoPasskey({
rpId: "example.com",
rpName: "Example",
origin: [
"https://example.com",
"android:apk-key-hash:*****",
"android:apk-key-hash:****"
],
logger: {
enabled: true,
level: "debug",
},
})
],
});import { expoClient } from '@better-auth/expo/client';
import { logger } from '@better-fetch/logger';
import { admin,phoneNumber } from 'better-auth/plugins';
import { createAuthClient } from 'better-auth/react';
import Constants from 'expo-constants';
import { expoPasskeyClient } from 'expo-passkey/native';
import { getItem, setItem } from 'expo-secure-store';
export const authClient = createAuthClient({
baseURL:
process.env.EXPO_PUBLIC_SERVER_URL || 'http://192.168.29.29:3001',
disableDefaultFetchPlugins: true,
fetchOptions: { plugins: [logger()] },
plugins: [
admin(),
phoneNumber(),
expoPasskeyClient({
rpId: 'example.com',
}),
expoClient({
scheme: Constants.expoConfig?.scheme as string,
storagePrefix: Constants.expoConfig?.scheme as string,
storage: { getItem, setItem },
}),
],
});