Skip to Content
Nextra 4.0 is released šŸŽ‰
DevelopersPluginsDatabaseDatabase Adapters

Database Adapters

A database adapter must implement the following interface:

export type OberonDatabaseAdapter = { addPage: (page: OberonPage) => Promise<void> addImage: (data: z.infer<typeof ImageSchema>) => Promise<void> addUser: (data: z.infer<typeof AddUserSchema>) => Promise<OberonUser> deletePage: (key: OberonPageMeta["key"]) => Promise<void> deleteImage: (key: OberonImage["key"]) => Promise<void> // TODO uploadthing deleteUser: (id: OberonUser["id"]) => Promise<void> changeRole: (data: z.infer<typeof ChangeRoleSchema>) => Promise<void> getAllImages: () => Promise<OberonImage[]> getAllPages: () => Promise<OberonPageMeta[]> getAllUsers: () => Promise<OberonUser[]> getPageData: (key: OberonPageMeta["key"]) => Promise<Data | null> getSite: () => Promise<OberonSite | undefined> updatePageData: (data: OberonPage) => Promise<void> updateSite: (data: z.infer<typeof SiteSchema>) => Promise<void> }

Additionally, if you are using the recommended Auth.js implemenation you should implement the following. See Auth.js adaptersĀ  for more details.

export type OberonAuthAdapter = Required< Pick< AuthAdapter, | "createSession" | "createUser" | "createVerificationToken" | "deleteSession" | "deleteUser" | "getSessionAndUser" | "getUser" | "getUserByAccount" | "getUserByEmail" | "linkAccount" | "unlinkAccount" | "updateSession" | "updateUser" | "useVerificationToken" > > & { createUser( user: Omit<AdapterUser & { role: OberonRole }, "id">, ): Awaitable<AdapterUser & { role: OberonRole }> deleteUser: (id: OberonUser["id"]) => Promise<void> }

Finally, you can make use of the prebuild hook to run migrations or other databse updates before building your site.

export type OberonInitAdapter = { prebuild: () => Promise<void> }
Last updated on