Typescript - database hook type inference for additional fields

This is my current
auth.ts
:
export const auth = betterAuth({
  user: {
    additionalFields: {
      role: {
        fieldName: 'role',
        type: 'string',
        required: true,
        input: false,
      },
    },
  },
  hooks: {
    before: createAuthMiddleware(async (ctx) => {
      if (ctx.path !== '/sign-up/email') {
        return;
      }
      if (ctx.body?.registrationToken !== REGISTRATION_TOKEN) {
        throw new APIError('UNAUTHORIZED', {
          message: 'Incorrect registration token provided. Please contact your server admin',
        });
      }
    }),
  },
  databaseHooks: {
    user: {
      create: {
        before: async (user) => {
          const adminUserExists = await db.query.usersTable.findFirst({
            where: (t, { eq }) => eq(t.role, 'ADMIN'),
          });
          return {
            data: {
              ...user,
              role: adminUserExists ? 'USER' : 'ADMIN',
            },
          };
        },
      },
    },
  },
  emailAndPassword: {
    enabled: true,
    minPasswordLength: 4,
    maxPasswordLength: 100,
    autoSignIn: true,
  },
  database: drizzleAdapter(db, {
    provider: 'pg',
    schema: {
      user: schema.usersTable,
      session: schema.sessionsTable,
      account: schema.accountsTable,
      verification: schema.verificationsTable,
    },
  }),
});


In the database -> user -> create -> before hook, despite setting the "role" additional field as required, there is no issue if I were to remove the "role" field, i.e.

  databaseHooks: {
    user: {
      create: {
        before: async (user) => {
          return {
            data: {
              ...user,
            }
        }
      }
  }


i.e. the role "type" is not picked up at all.
I'm also facing a separate type issue client-side, which I've posted here:
Typescript - how to infer additional, non-database fields during registration

Am I doing something wrong or is this an issue with the type system?
Was this page helpful?