UNPKG

@oberoncms/core

Version:

OberonCMS is a cloud deployable CMS written in typescript based on the Puck visual editor

425 lines 14.4 kB
import { z } from "zod"; import { Data } from "@measured/puck"; import { Route } from "next"; import type { ComponentConfig, Config, DefaultComponentProps } from "@measured/puck"; import type { AdapterUser, Adapter as AuthAdapter } from "@auth/core/adapters"; import type { StreamResponseChunk } from "@tohuhono/utils"; import type { Awaitable } from "@auth/core/types"; import type { NextRequest } from "next/server"; export declare class OberonError extends Error { } export declare class ResponseError extends Error { } type Transforms = Array<(props: any) => any>; export type PageData = Data; export type OberonConfig = Config & { version: 1; components: Record<string, { transforms?: Transforms; }>; }; export type OberonComponent<ComponentProps extends DefaultComponentProps = DefaultComponentProps, Transforms extends Array<(props: Record<string, unknown>) => Record<string, unknown>> = Array<(props: Record<string, unknown>) => Record<string, unknown>>> = ComponentConfig<ComponentProps> & { transforms?: Transforms; }; export declare const clientActions: readonly ["edit", "preview", "users", "images", "pages", "site", "login"]; export declare const actionPaths: { path: ("edit" | "preview" | "users" | "images" | "pages" | "site" | "login")[]; }[]; export type ClientAction = (typeof clientActions)[number]; export type AdapterActionGroup = "all" | "users" | "images" | "pages" | "site"; export type AdapterPermission = "unauthenticated" | "read" | "write"; export type OberonRole = "user" | "admin"; export type OberonPermissions = Record<"unauthenticated" | "user", Partial<Record<AdapterActionGroup, AdapterPermission>>>; export declare const INITIAL_DATA: { content: never[]; root: { props: { title: string; }; }; }; export type MaybeOptimistic<T> = T & { pending?: boolean; }; export declare const PageSchema: z.ZodObject<{ key: z.ZodString; data: z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>; updatedAt: z.ZodDate; updatedBy: z.ZodString; }, "strip", z.ZodTypeAny, { key: string; data: {} & { [k: string]: unknown; }; updatedAt: Date; updatedBy: string; }, { key: string; data: {} & { [k: string]: unknown; }; updatedAt: Date; updatedBy: string; }>; export declare const AddPageSchema: z.ZodObject<Pick<{ key: z.ZodString; data: z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>; updatedAt: z.ZodDate; updatedBy: z.ZodString; }, "key">, "strip", z.ZodTypeAny, { key: string; }, { key: string; }>; export declare const DeletePageSchema: z.ZodObject<Pick<{ key: z.ZodString; data: z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>; updatedAt: z.ZodDate; updatedBy: z.ZodString; }, "key">, "strip", z.ZodTypeAny, { key: string; }, { key: string; }>; export declare const PublishPageSchema: z.ZodObject<Pick<{ key: z.ZodString; data: z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>; updatedAt: z.ZodDate; updatedBy: z.ZodString; }, "key" | "data">, "strip", z.ZodTypeAny, { key: string; data: {} & { [k: string]: unknown; }; }, { key: string; data: {} & { [k: string]: unknown; }; }>; export declare const PageMetaSchema: z.ZodObject<Pick<{ key: z.ZodString; data: z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>; updatedAt: z.ZodDate; updatedBy: z.ZodString; }, "key" | "updatedAt" | "updatedBy">, "strip", z.ZodTypeAny, { key: string; updatedAt: Date; updatedBy: string; }, { key: string; updatedAt: Date; updatedBy: string; }>; export type OberonPage = z.infer<typeof PageSchema> & { data: PageData; key: Route; }; export type OberonPageMeta = MaybeOptimistic<z.infer<typeof PageMetaSchema> & { key: Route; }>; export declare const ImageSchema: z.ZodObject<{ key: z.ZodString; url: z.ZodString; size: z.ZodNumber; width: z.ZodNumber; height: z.ZodNumber; alt: z.ZodString; updatedAt: z.ZodDate; updatedBy: z.ZodString; }, "strip", z.ZodTypeAny, { key: string; updatedAt: Date; updatedBy: string; url: string; size: number; width: number; height: number; alt: string; }, { key: string; updatedAt: Date; updatedBy: string; url: string; size: number; width: number; height: number; alt: string; }>; export declare const AddImageSchema: z.ZodObject<{ key: z.ZodString; url: z.ZodString; size: z.ZodNumber; width: z.ZodNumber; height: z.ZodNumber; alt: z.ZodString; updatedAt: z.ZodDate; updatedBy: z.ZodString; }, "strip", z.ZodTypeAny, { key: string; updatedAt: Date; updatedBy: string; url: string; size: number; width: number; height: number; alt: string; }, { key: string; updatedAt: Date; updatedBy: string; url: string; size: number; width: number; height: number; alt: string; }>; export declare const DeleteImageSchema: z.ZodObject<Pick<{ key: z.ZodString; url: z.ZodString; size: z.ZodNumber; width: z.ZodNumber; height: z.ZodNumber; alt: z.ZodString; updatedAt: z.ZodDate; updatedBy: z.ZodString; }, "key">, "strip", z.ZodTypeAny, { key: string; }, { key: string; }>; export type OberonImage = MaybeOptimistic<z.infer<typeof ImageSchema>>; export declare const UserSchema: z.ZodObject<{ id: z.ZodString; email: z.ZodString; role: z.ZodEnum<["user", "admin"]>; }, "strip", z.ZodTypeAny, { id: string; email: string; role: "user" | "admin"; }, { id: string; email: string; role: "user" | "admin"; }>; export declare const AddUserSchema: z.ZodObject<Pick<{ id: z.ZodString; email: z.ZodString; role: z.ZodEnum<["user", "admin"]>; }, "email" | "role">, "strip", z.ZodTypeAny, { email: string; role: "user" | "admin"; }, { email: string; role: "user" | "admin"; }>; export declare const ChangeRoleSchema: z.ZodObject<Pick<{ id: z.ZodString; email: z.ZodString; role: z.ZodEnum<["user", "admin"]>; }, "id" | "role">, "strip", z.ZodTypeAny, { id: string; role: "user" | "admin"; }, { id: string; role: "user" | "admin"; }>; export declare const DeleteUserSchema: z.ZodObject<Pick<{ id: z.ZodString; email: z.ZodString; role: z.ZodEnum<["user", "admin"]>; }, "id">, "strip", z.ZodTypeAny, { id: string; }, { id: string; }>; export type OberonUser = MaybeOptimistic<z.infer<typeof UserSchema>>; export declare const roles: OberonRole[]; type DescriminatedContext = { action: "edit" | "preview"; data: Data | null; } | { action: "users"; data: OberonUser[]; } | { action: "images"; data: OberonImage[]; } | { action: "pages"; data: OberonPageMeta[]; } | { action: "site"; data: OberonSiteConfig; } | { action: "login"; data: { callbackUrl: string; email: string; token: string; }; }; export type OberonClientContext = DescriminatedContext & { slug: string; }; type TransformStatus = "error" | "success"; export type TransformResult = { type: "transform"; key: string; status: "success" | "error"; }; export type MigrationResult = { type: "summary"; total: number; } & { [key in TransformStatus]: string[]; }; export type TransformVersions = Record<string, number>; export type PluginVersion = Pick<ReturnType<OberonPlugin>, "name" | "version" | "disabled">; export type OberonSiteConfig = MaybeOptimistic<{ version: string; plugins: PluginVersion[]; components: TransformVersions; pendingMigrations: string[] | false; }>; export declare const SiteSchema: z.ZodObject<{ version: z.ZodNumber; components: z.ZodRecord<z.ZodString, z.ZodNumber>; updatedAt: z.ZodDate; updatedBy: z.ZodString; }, "strip", z.ZodTypeAny, { updatedAt: Date; updatedBy: string; version: number; components: Record<string, number>; }, { updatedAt: Date; updatedBy: string; version: number; components: Record<string, number>; }>; export type OberonSite = z.infer<typeof SiteSchema>; export type OberonCanAdapter = { getCurrentUser: () => Promise<OberonUser | null>; hasPermission: (props: { user?: OberonUser | null; action: AdapterActionGroup; permission: AdapterPermission; }) => boolean; signIn: (data: { email: string; }) => Promise<void>; signOut: () => Promise<void>; }; 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>; }; export type OberonBaseAdapter = { 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>; 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>; }; export type OberonSendAdapter = { sendVerificationRequest: (props: { email: string; token: string; url: string; }) => Promise<void>; }; export type OberonInitAdapter = { prebuild: () => Promise<void>; }; export type OberonDatabaseAdapter = OberonBaseAdapter & OberonAuthAdapter; export type OberonPluginAdapter = OberonInitAdapter & OberonDatabaseAdapter & OberonCanAdapter & OberonSendAdapter; export type OberonMethod = "GET" | "POST" | "PUT" | "PATCH" | "DELETE"; export type OberonHandler<Params = undefined> = Params extends undefined ? { [key in OberonMethod]?: (req: NextRequest) => Promise<Response> | Response; } : { [key in OberonMethod]: (req: NextRequest, context: { params: Promise<Params>; }) => Promise<Response>; }; export type OberonAdapter = { prebuild: () => Promise<void>; addPage: (page: z.infer<typeof AddPageSchema>) => Promise<void>; addImage: (data: OberonImage) => Promise<OberonImage[]>; addUser: (data: z.infer<typeof AddUserSchema>) => Promise<OberonUser | null>; deletePage: (data: z.infer<typeof DeletePageSchema>) => Promise<void>; deleteImage: (key: OberonImage["key"]) => Promise<void>; deleteUser: (data: z.infer<typeof DeleteUserSchema>) => Promise<Pick<OberonUser, "id"> | null>; can: (action: AdapterActionGroup, permission?: AdapterPermission) => Promise<boolean>; changeRole: (data: z.infer<typeof ChangeRoleSchema>) => Promise<Pick<OberonUser, "role" | "id"> | null>; getAllImages: () => Promise<OberonImage[]>; getAllPages: () => Promise<OberonPageMeta[]>; getAllPaths: () => Promise<Array<{ path: string[]; }>>; getAllUsers: () => Promise<OberonUser[]>; getConfig: () => Promise<OberonSiteConfig>; getPageData: (key: OberonPageMeta["key"]) => Promise<Data | null>; migrateData: () => Promise<StreamResponseChunk<TransformResult | MigrationResult>>; publishPageData: (data: z.infer<typeof PublishPageSchema>) => Promise<{ message: string; }>; signOut: () => Promise<void>; signIn: (data: { email: string; }) => Promise<void>; }; export type OberonPlugin = (adapter: OberonPluginAdapter) => { name: string; version?: string; disabled?: boolean; handlers?: Record<string, (adapter: OberonAdapter) => OberonHandler>; adapter?: Partial<OberonPluginAdapter>; }; export type OberonResponse<T = unknown> = Promise<{ status: "success"; result: T; message?: string; } | { status: "error"; result?: T; message?: string; }>; export type OberonServerActions = { addPage: (page: z.infer<typeof AddPageSchema>) => OberonResponse<void>; addImage: (data: OberonImage) => OberonResponse<OberonImage[]>; addUser: (data: z.infer<typeof AddUserSchema>) => OberonResponse<OberonUser | null>; deletePage: (data: z.infer<typeof DeletePageSchema>) => OberonResponse; deleteImage: (key: OberonImage["key"]) => OberonResponse; deleteUser: (data: z.infer<typeof DeleteUserSchema>) => OberonResponse<Pick<OberonUser, "id"> | null>; can: (action: AdapterActionGroup, permission?: AdapterPermission) => OberonResponse<boolean>; changeRole: (data: z.infer<typeof ChangeRoleSchema>) => OberonResponse<Pick<OberonUser, "role" | "id"> | null>; getAllImages: () => OberonResponse<OberonImage[]>; getAllPages: () => OberonResponse<OberonPageMeta[]>; getAllPaths: () => OberonResponse<Array<{ path: string[]; }>>; getAllUsers: () => OberonResponse<OberonUser[]>; getConfig: () => OberonResponse<OberonSiteConfig>; getPageData: (key: OberonPageMeta["key"]) => OberonResponse<Data | null>; migrateData: () => OberonResponse<StreamResponseChunk<TransformResult | MigrationResult>>; publishPageData: (data: z.infer<typeof PublishPageSchema>) => OberonResponse; signIn: (data: { email: string; }) => OberonResponse; signOut: () => OberonResponse; }; export {}; //# sourceMappingURL=dtd.d.ts.map