feat: setup globals (Footer), sqlite migration, seed update and access rules

This commit is contained in:
MichalC
2026-08-31 22:37:06 +02:00
parent 5f2eaa0b37
commit 5a9128e2f5
31 changed files with 2281 additions and 362 deletions
+509 -64
View File
@@ -64,13 +64,14 @@ export type SupportedTimezones =
export interface Config {
auth: {
users: UserAuthOperations;
'payload-mcp-api-keys': PayloadMcpApiKeyAuthOperations;
};
blocks: {};
collections: {
users: User;
media: Media;
folders: Folder;
tags: Tag;
pages: Page;
'payload-mcp-api-keys': PayloadMcpApiKey;
'payload-kv': PayloadKv;
'payload-locked-documents': PayloadLockedDocument;
'payload-preferences': PayloadPreference;
@@ -80,24 +81,40 @@ export interface Config {
collectionsSelect: {
users: UsersSelect<false> | UsersSelect<true>;
media: MediaSelect<false> | MediaSelect<true>;
folders: FoldersSelect<false> | FoldersSelect<true>;
tags: TagsSelect<false> | TagsSelect<true>;
pages: PagesSelect<false> | PagesSelect<true>;
'payload-mcp-api-keys': PayloadMcpApiKeysSelect<false> | PayloadMcpApiKeysSelect<true>;
'payload-kv': PayloadKvSelect<false> | PayloadKvSelect<true>;
'payload-locked-documents': PayloadLockedDocumentsSelect<false> | PayloadLockedDocumentsSelect<true>;
'payload-preferences': PayloadPreferencesSelect<false> | PayloadPreferencesSelect<true>;
'payload-migrations': PayloadMigrationsSelect<false> | PayloadMigrationsSelect<true>;
};
db: {
defaultIDType: string;
defaultIDType: number;
};
fallbackLocale: ('false' | 'none' | 'null') | false | null | 'en' | 'en'[];
globals: {};
globalsSelect: {};
locale: 'en';
fallbackLocale: ('false' | 'none' | 'null') | false | null | ('pl' | 'de') | ('pl' | 'de')[];
globals: {
company: Company;
header: Header;
footer: Footer;
'site-settings': SiteSetting;
'site-integrations': SiteIntegration;
'cookie-settings': CookieSetting;
notifications: Notification;
};
globalsSelect: {
company: CompanySelect<false> | CompanySelect<true>;
header: HeaderSelect<false> | HeaderSelect<true>;
footer: FooterSelect<false> | FooterSelect<true>;
'site-settings': SiteSettingsSelect<false> | SiteSettingsSelect<true>;
'site-integrations': SiteIntegrationsSelect<false> | SiteIntegrationsSelect<true>;
'cookie-settings': CookieSettingsSelect<false> | CookieSettingsSelect<true>;
notifications: NotificationsSelect<false> | NotificationsSelect<true>;
};
locale: 'pl' | 'de';
widgets: {
collections: CollectionsWidget;
};
user: User;
user: User | PayloadMcpApiKey;
jobs: {
tasks: unknown;
workflows: unknown;
@@ -121,8 +138,30 @@ export interface UserAuthOperations {
password: string;
};
}
export interface PayloadMcpApiKeyAuthOperations {
forgotPassword: {
email: string;
password: string;
};
login: {
email: string;
password: string;
};
registerFirstUser: {
email: string;
password: string;
};
unlock: {
email: string;
password: string;
};
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "users".
*/
export interface User {
id: string;
id: number;
updatedAt: string;
createdAt: string;
email: string;
@@ -147,10 +186,8 @@ export interface User {
* via the `definition` "media".
*/
export interface Media {
id: string;
id: number;
alt: string;
_h_folders?: (string | null) | Folder;
_h_tags?: (string | Tag)[] | null;
updatedAt: string;
createdAt: string;
url?: string | null;
@@ -165,32 +202,59 @@ export interface Media {
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "folders".
* via the `definition` "pages".
*/
export interface Folder {
id: string;
_h_folders?: (string | null) | Folder;
name: string;
export interface Page {
id: number;
title: string;
/**
* Auto-generated from the title when left empty. You can override it.
*/
slug: string;
layout?:
| {
text?: string | null;
id?: string | null;
blockName?: string | null;
blockType: 'TextSection';
}[]
| null;
updatedAt: string;
createdAt: string;
_h_slugPath?: string | null;
_h_titlePath?: string | null;
}
/**
* API keys control which collections, resources, tools, and prompts MCP clients can access
*
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "payload-mcp-api-keys".
*/
export interface PayloadMcpApiKey {
id: number;
/**
* The user that the API key is associated with.
*/
user: number | User;
/**
* A useful label for the API key.
*/
label?: string | null;
/**
* The purpose of the API key.
*/
description?: string | null;
updatedAt: string;
createdAt: string;
enableAPIKey?: boolean | null;
apiKey?: string | null;
apiKeyIndex?: string | null;
collection: 'payload-mcp-api-keys';
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "tags".
* via the `definition` "payload-kv".
*/
export interface Tag {
id: string;
_h_tags?: (string | null) | Tag;
name: string;
updatedAt: string;
createdAt: string;
_h_slugPath?: string | null;
_h_titlePath?: string | null;
}
export interface PayloadKv {
id: string;
id: number;
key: string;
data:
| {
@@ -207,29 +271,34 @@ export interface PayloadKv {
* via the `definition` "payload-locked-documents".
*/
export interface PayloadLockedDocument {
id: string;
id: number;
document?:
| ({
relationTo: 'users';
value: string | User;
value: number | User;
} | null)
| ({
relationTo: 'media';
value: string | Media;
value: number | Media;
} | null)
| ({
relationTo: 'folders';
value: string | Folder;
relationTo: 'pages';
value: number | Page;
} | null)
| ({
relationTo: 'tags';
value: string | Tag;
relationTo: 'payload-mcp-api-keys';
value: number | PayloadMcpApiKey;
} | null);
globalSlug?: string | null;
user: {
relationTo: 'users';
value: string | User;
};
user:
| {
relationTo: 'users';
value: number | User;
}
| {
relationTo: 'payload-mcp-api-keys';
value: number | PayloadMcpApiKey;
};
updatedAt: string;
createdAt: string;
}
@@ -238,11 +307,16 @@ export interface PayloadLockedDocument {
* via the `definition` "payload-preferences".
*/
export interface PayloadPreference {
id: string;
user: {
relationTo: 'users';
value: string | User;
};
id: number;
user:
| {
relationTo: 'users';
value: number | User;
}
| {
relationTo: 'payload-mcp-api-keys';
value: number | PayloadMcpApiKey;
};
key?: string | null;
value?:
| {
@@ -261,7 +335,7 @@ export interface PayloadPreference {
* via the `definition` "payload-migrations".
*/
export interface PayloadMigration {
id: string;
id: number;
name?: string | null;
batch?: number | null;
updatedAt: string;
@@ -295,8 +369,6 @@ export interface UsersSelect<T extends boolean = true> {
*/
export interface MediaSelect<T extends boolean = true> {
alt?: T;
_h_folders?: T;
_h_tags?: T;
updatedAt?: T;
createdAt?: T;
url?: T;
@@ -311,28 +383,43 @@ export interface MediaSelect<T extends boolean = true> {
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "folders_select".
* via the `definition` "pages_select".
*/
export interface FoldersSelect<T extends boolean = true> {
_h_folders?: T;
name?: T;
export interface PagesSelect<T extends boolean = true> {
title?: T;
slug?: T;
layout?:
| T
| {
TextSection?:
| T
| {
text?: T;
id?: T;
blockName?: T;
};
};
updatedAt?: T;
createdAt?: T;
_h_slugPath?: T;
_h_titlePath?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "tags_select".
* via the `definition` "payload-mcp-api-keys_select".
*/
export interface TagsSelect<T extends boolean = true> {
_h_tags?: T;
name?: T;
export interface PayloadMcpApiKeysSelect<T extends boolean = true> {
user?: T;
label?: T;
description?: T;
updatedAt?: T;
createdAt?: T;
_h_slugPath?: T;
_h_titlePath?: T;
enableAPIKey?: T;
apiKey?: T;
apiKeyIndex?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "payload-kv_select".
*/
export interface PayloadKvSelect<T extends boolean = true> {
key?: T;
data?: T;
@@ -369,6 +456,364 @@ export interface PayloadMigrationsSelect<T extends boolean = true> {
updatedAt?: T;
createdAt?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "company".
*/
export interface Company {
id: number;
address?: string | null;
phone?: string | null;
email?: string | null;
hours?: string | null;
whatsappNumber?: string | null;
updatedAt?: string | null;
createdAt?: string | null;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "header".
*/
export interface Header {
id: number;
navigation?:
| {
page: number | Page;
id?: string | null;
}[]
| null;
updatedAt?: string | null;
createdAt?: string | null;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "footer".
*/
export interface Footer {
id: number;
navigation?:
| {
page: number | Page;
id?: string | null;
}[]
| null;
association?: {
title?: string | null;
logo?: (number | null) | Media;
link?: string | null;
};
updatedAt?: string | null;
createdAt?: string | null;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "site-settings".
*/
export interface SiteSetting {
id: number;
/**
* Used in page titles and Open Graph metadata.
*/
siteName: string;
/**
* Which comes first in browser tabs.
*/
titleOrder?: ('page-first' | 'site-first') | null;
/**
* Separates the page title from the site name in browser tabs.
*/
titleSeparator?: ('|' | '–' | '-' | '·' | '/') | null;
/**
* Primary site logo. Also used for Organization structured data (buildOrganizationJsonLd).
*/
logo?: (number | null) | Media;
/**
* Fallback Open Graph image when a page has none.
*/
defaultShareImage?: (number | null) | Media;
/**
* Square icon, PNG or SVG, min. 48×48px (Google requires this to show it in search). Rendered via buildIconsMetadata.
*/
favicon?: (number | null) | Media;
/**
* Theme applied on a visitor’s first visit.
*/
defaultTheme: 'light' | 'dark';
/**
* Show a light/dark switch on the site.
*/
allowThemeToggle?: boolean | null;
/**
* Page served at the locale root (e.g. /pl, /en).
*/
homepage?: (number | null) | Page;
/**
* Page linked as the privacy policy.
*/
privacyPolicy?: (number | null) | Page;
/**
* Page linked from the cookie consent banner.
*/
cookiePolicy?: (number | null) | Page;
/**
* Page linked as the terms of service / site regulations.
*/
termsOfService?: (number | null) | Page;
updatedAt?: string | null;
createdAt?: string | null;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "site-integrations".
*/
export interface SiteIntegration {
id: number;
/**
* Google Analytics 4 Measurement ID.
*/
ga4MeasurementId?: string | null;
/**
* Google Tag Manager container ID.
*/
gtmContainerId?: string | null;
/**
* Public site key rendered in the Turnstile widget.
*/
turnstileSiteKey?: string | null;
/**
* Secret key used for server-side verification.
*/
turnstileSecretKey?: string | null;
/**
* How outbound email is sent. "Microsoft Graph" is only available when configured by the administrator (Intecion).
*/
emailTransport?: ('smtp' | 'graph') | null;
smtpHost?: string | null;
smtpPort?: number | null;
/**
* SMTP account username.
*/
smtpUser?: string | null;
/**
* SMTP account password.
*/
smtpPassword?: string | null;
/**
* Default "from" address for outgoing mail.
*/
smtpFromAddress?: string | null;
/**
* Default "from" display name.
*/
smtpFromName?: string | null;
updatedAt?: string | null;
createdAt?: string | null;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "cookie-settings".
*/
export interface CookieSetting {
id: number;
/**
* Main consent message shown in the banner.
*/
message?: string | null;
/**
* Heading for the detailed settings panel.
*/
settingsTitle?: string | null;
/**
* Button labels.
*/
buttons?: {
acceptAll?: string | null;
reject?: string | null;
settings?: string | null;
save?: string | null;
back?: string | null;
};
/**
* Per-category titles and descriptions.
*/
categories?:
| {
key: 'necessary' | 'functional' | 'analytics' | 'marketing';
title?: string | null;
description?: string | null;
id?: string | null;
}[]
| null;
updatedAt?: string | null;
createdAt?: string | null;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "notifications".
*/
export interface Notification {
id: number;
/**
* Messages shown after a form is submitted. Leave a field empty to use the built-in default.
*/
form?: {
success?: string | null;
error?: string | null;
rateLimited?: string | null;
turnstile?: string | null;
/**
* Shown on a validation error. Use {field} to insert the offending field name.
*/
validation?: string | null;
/**
* Shown when the GDPR consent checkbox is left unchecked.
*/
consent?: string | null;
notFound?: string | null;
};
updatedAt?: string | null;
createdAt?: string | null;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "company_select".
*/
export interface CompanySelect<T extends boolean = true> {
address?: T;
phone?: T;
email?: T;
hours?: T;
whatsappNumber?: T;
updatedAt?: T;
createdAt?: T;
globalType?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "header_select".
*/
export interface HeaderSelect<T extends boolean = true> {
navigation?:
| T
| {
page?: T;
id?: T;
};
updatedAt?: T;
createdAt?: T;
globalType?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "footer_select".
*/
export interface FooterSelect<T extends boolean = true> {
navigation?:
| T
| {
page?: T;
id?: T;
};
association?:
| T
| {
title?: T;
logo?: T;
link?: T;
};
updatedAt?: T;
createdAt?: T;
globalType?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "site-settings_select".
*/
export interface SiteSettingsSelect<T extends boolean = true> {
siteName?: T;
titleOrder?: T;
titleSeparator?: T;
logo?: T;
defaultShareImage?: T;
favicon?: T;
defaultTheme?: T;
allowThemeToggle?: T;
homepage?: T;
privacyPolicy?: T;
cookiePolicy?: T;
termsOfService?: T;
updatedAt?: T;
createdAt?: T;
globalType?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "site-integrations_select".
*/
export interface SiteIntegrationsSelect<T extends boolean = true> {
ga4MeasurementId?: T;
gtmContainerId?: T;
turnstileSiteKey?: T;
turnstileSecretKey?: T;
emailTransport?: T;
smtpHost?: T;
smtpPort?: T;
smtpUser?: T;
smtpPassword?: T;
smtpFromAddress?: T;
smtpFromName?: T;
updatedAt?: T;
createdAt?: T;
globalType?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "cookie-settings_select".
*/
export interface CookieSettingsSelect<T extends boolean = true> {
message?: T;
settingsTitle?: T;
buttons?:
| T
| {
acceptAll?: T;
reject?: T;
settings?: T;
save?: T;
back?: T;
};
categories?:
| T
| {
key?: T;
title?: T;
description?: T;
id?: T;
};
updatedAt?: T;
createdAt?: T;
globalType?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "notifications_select".
*/
export interface NotificationsSelect<T extends boolean = true> {
form?:
| T
| {
success?: T;
error?: T;
rateLimited?: T;
turnstile?: T;
validation?: T;
consent?: T;
notFound?: T;
};
updatedAt?: T;
createdAt?: T;
globalType?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "collections_widget".
@@ -390,4 +835,4 @@ export interface Auth {
declare module 'payload' {
export interface GeneratedTypes extends Config {}
}
}