cms.c2sgmbh/src/payload-types.ts
Martin Porwoll 19fcb4d837 feat: implement multi-tenant email system with logging
- Add Payload email adapter for system emails (auth, password reset)
- Add EmailLogs collection for tracking all sent emails
- Extend Tenants collection with SMTP configuration fields
- Implement tenant-specific email service with transporter caching
- Add /api/send-email endpoint with:
  - Authentication required
  - Tenant access control (users can only send for their tenants)
  - Rate limiting (10 emails/minute per user)
- Add form submission notification hook with email logging
- Add cache invalidation hook for tenant email config changes

Security:
- SMTP passwords are never returned in API responses
- Passwords are preserved when field is left empty on update
- Only super admins can delete email logs

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-07 20:16:54 +00:00

2876 lines
No EOL
69 KiB
TypeScript

/* tslint:disable */
/* eslint-disable */
/**
* This file was automatically generated by Payload.
* DO NOT MODIFY IT BY HAND. Instead, modify your source Payload config,
* and re-run `payload generate:types` to regenerate this file.
*/
/**
* Supported timezones in IANA format.
*
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "supportedTimezones".
*/
export type SupportedTimezones =
| 'Pacific/Midway'
| 'Pacific/Niue'
| 'Pacific/Honolulu'
| 'Pacific/Rarotonga'
| 'America/Anchorage'
| 'Pacific/Gambier'
| 'America/Los_Angeles'
| 'America/Tijuana'
| 'America/Denver'
| 'America/Phoenix'
| 'America/Chicago'
| 'America/Guatemala'
| 'America/New_York'
| 'America/Bogota'
| 'America/Caracas'
| 'America/Santiago'
| 'America/Buenos_Aires'
| 'America/Sao_Paulo'
| 'Atlantic/South_Georgia'
| 'Atlantic/Azores'
| 'Atlantic/Cape_Verde'
| 'Europe/London'
| 'Europe/Berlin'
| 'Africa/Lagos'
| 'Europe/Athens'
| 'Africa/Cairo'
| 'Europe/Moscow'
| 'Asia/Riyadh'
| 'Asia/Dubai'
| 'Asia/Baku'
| 'Asia/Karachi'
| 'Asia/Tashkent'
| 'Asia/Calcutta'
| 'Asia/Dhaka'
| 'Asia/Almaty'
| 'Asia/Jakarta'
| 'Asia/Bangkok'
| 'Asia/Shanghai'
| 'Asia/Singapore'
| 'Asia/Tokyo'
| 'Asia/Seoul'
| 'Australia/Brisbane'
| 'Australia/Sydney'
| 'Pacific/Guam'
| 'Pacific/Noumea'
| 'Pacific/Auckland'
| 'Pacific/Fiji';
export interface Config {
auth: {
users: UserAuthOperations;
};
blocks: {};
collections: {
users: User;
media: Media;
tenants: Tenant;
pages: Page;
posts: Post;
categories: Category;
'social-links': SocialLink;
testimonials: Testimonial;
'newsletter-subscribers': NewsletterSubscriber;
'portfolio-categories': PortfolioCategory;
portfolios: Portfolio;
'cookie-configurations': CookieConfiguration;
'cookie-inventory': CookieInventory;
'consent-logs': ConsentLog;
'privacy-policy-settings': PrivacyPolicySetting;
'email-logs': EmailLog;
forms: Form;
'form-submissions': FormSubmission;
redirects: Redirect;
'payload-kv': PayloadKv;
'payload-locked-documents': PayloadLockedDocument;
'payload-preferences': PayloadPreference;
'payload-migrations': PayloadMigration;
};
collectionsJoins: {};
collectionsSelect: {
users: UsersSelect<false> | UsersSelect<true>;
media: MediaSelect<false> | MediaSelect<true>;
tenants: TenantsSelect<false> | TenantsSelect<true>;
pages: PagesSelect<false> | PagesSelect<true>;
posts: PostsSelect<false> | PostsSelect<true>;
categories: CategoriesSelect<false> | CategoriesSelect<true>;
'social-links': SocialLinksSelect<false> | SocialLinksSelect<true>;
testimonials: TestimonialsSelect<false> | TestimonialsSelect<true>;
'newsletter-subscribers': NewsletterSubscribersSelect<false> | NewsletterSubscribersSelect<true>;
'portfolio-categories': PortfolioCategoriesSelect<false> | PortfolioCategoriesSelect<true>;
portfolios: PortfoliosSelect<false> | PortfoliosSelect<true>;
'cookie-configurations': CookieConfigurationsSelect<false> | CookieConfigurationsSelect<true>;
'cookie-inventory': CookieInventorySelect<false> | CookieInventorySelect<true>;
'consent-logs': ConsentLogsSelect<false> | ConsentLogsSelect<true>;
'privacy-policy-settings': PrivacyPolicySettingsSelect<false> | PrivacyPolicySettingsSelect<true>;
'email-logs': EmailLogsSelect<false> | EmailLogsSelect<true>;
forms: FormsSelect<false> | FormsSelect<true>;
'form-submissions': FormSubmissionsSelect<false> | FormSubmissionsSelect<true>;
redirects: RedirectsSelect<false> | RedirectsSelect<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: number;
};
fallbackLocale: ('false' | 'none' | 'null') | false | null | ('de' | 'en') | ('de' | 'en')[];
globals: {
'site-settings': SiteSetting;
navigation: Navigation;
'seo-settings': SeoSetting;
};
globalsSelect: {
'site-settings': SiteSettingsSelect<false> | SiteSettingsSelect<true>;
navigation: NavigationSelect<false> | NavigationSelect<true>;
'seo-settings': SeoSettingsSelect<false> | SeoSettingsSelect<true>;
};
locale: 'de' | 'en';
user: User & {
collection: 'users';
};
jobs: {
tasks: unknown;
workflows: unknown;
};
}
export interface UserAuthOperations {
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: number;
/**
* Super Admins haben Zugriff auf alle Tenants und können neue Tenants erstellen.
*/
isSuperAdmin?: boolean | null;
tenants?:
| {
tenant: number | Tenant;
id?: string | null;
}[]
| null;
updatedAt: string;
createdAt: string;
email: string;
resetPasswordToken?: string | null;
resetPasswordExpiration?: string | null;
salt?: string | null;
hash?: string | null;
loginAttempts?: number | null;
lockUntil?: string | null;
sessions?:
| {
id: string;
createdAt?: string | null;
expiresAt: string;
}[]
| null;
password?: string | null;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "tenants".
*/
export interface Tenant {
id: number;
name: string;
slug: string;
domains?:
| {
domain: string;
id?: string | null;
}[]
| null;
/**
* SMTP-Einstellungen für diesen Tenant. Leer = globale Einstellungen.
*/
email?: {
fromAddress?: string | null;
fromName?: string | null;
replyTo?: string | null;
useCustomSmtp?: boolean | null;
smtp?: {
host?: string | null;
port?: number | null;
secure?: boolean | null;
user?: string | null;
pass?: string | null;
};
};
updatedAt: string;
createdAt: string;
}
/**
* Bilder und Dokumente mit automatischer Optimierung
*
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "media".
*/
export interface Media {
id: number;
tenant?: (number | null) | Tenant;
/**
* Beschreibung für Screenreader und SEO (Pflichtfeld)
*/
alt: string;
/**
* Optionale Bildunterschrift für Darstellung unter dem Bild
*/
caption?: string | null;
/**
* Fotograf, Agentur oder Quelle
*/
credit?: string | null;
/**
* Schlagwörter für die Suche und Filterung
*/
tags?: string[] | null;
updatedAt: string;
createdAt: string;
url?: string | null;
thumbnailURL?: string | null;
filename?: string | null;
mimeType?: string | null;
filesize?: number | null;
width?: number | null;
height?: number | null;
focalX?: number | null;
focalY?: number | null;
sizes?: {
thumbnail?: {
url?: string | null;
width?: number | null;
height?: number | null;
mimeType?: string | null;
filesize?: number | null;
filename?: string | null;
};
small?: {
url?: string | null;
width?: number | null;
height?: number | null;
mimeType?: string | null;
filesize?: number | null;
filename?: string | null;
};
medium?: {
url?: string | null;
width?: number | null;
height?: number | null;
mimeType?: string | null;
filesize?: number | null;
filename?: string | null;
};
large?: {
url?: string | null;
width?: number | null;
height?: number | null;
mimeType?: string | null;
filesize?: number | null;
filename?: string | null;
};
xlarge?: {
url?: string | null;
width?: number | null;
height?: number | null;
mimeType?: string | null;
filesize?: number | null;
filename?: string | null;
};
'2k'?: {
url?: string | null;
width?: number | null;
height?: number | null;
mimeType?: string | null;
filesize?: number | null;
filename?: string | null;
};
og?: {
url?: string | null;
width?: number | null;
height?: number | null;
mimeType?: string | null;
filesize?: number | null;
filename?: string | null;
};
medium_avif?: {
url?: string | null;
width?: number | null;
height?: number | null;
mimeType?: string | null;
filesize?: number | null;
filename?: string | null;
};
large_avif?: {
url?: string | null;
width?: number | null;
height?: number | null;
mimeType?: string | null;
filesize?: number | null;
filename?: string | null;
};
xlarge_avif?: {
url?: string | null;
width?: number | null;
height?: number | null;
mimeType?: string | null;
filesize?: number | null;
filename?: string | null;
};
};
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "pages".
*/
export interface Page {
id: number;
tenant?: (number | null) | Tenant;
title: string;
/**
* URL-Pfad (z.B. "ueber-uns" / "about-us")
*/
slug: string;
hero?: {
image?: (number | null) | Media;
headline?: string | null;
subline?: string | null;
};
layout?:
| (
| {
backgroundImage?: (number | null) | Media;
headline: string;
subline?: string | null;
alignment?: ('left' | 'center' | 'right') | null;
overlay?: boolean | null;
cta?: {
text?: string | null;
link?: string | null;
style?: ('primary' | 'secondary' | 'outline') | null;
};
id?: string | null;
blockName?: string | null;
blockType: 'hero-block';
}
| {
content: {
root: {
type: string;
children: {
type: any;
version: number;
[k: string]: unknown;
}[];
direction: ('ltr' | 'rtl') | null;
format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '';
indent: number;
version: number;
};
[k: string]: unknown;
};
width?: ('narrow' | 'medium' | 'full') | null;
id?: string | null;
blockName?: string | null;
blockType: 'text-block';
}
| {
image: number | Media;
imagePosition?: ('left' | 'right') | null;
headline?: string | null;
content?: {
root: {
type: string;
children: {
type: any;
version: number;
[k: string]: unknown;
}[];
direction: ('ltr' | 'rtl') | null;
format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '';
indent: number;
version: number;
};
[k: string]: unknown;
} | null;
cta?: {
text?: string | null;
link?: string | null;
};
id?: string | null;
blockName?: string | null;
blockType: 'image-text-block';
}
| {
headline?: string | null;
cards?:
| {
image?: (number | null) | Media;
title: string;
description?: string | null;
link?: string | null;
linkText?: string | null;
id?: string | null;
}[]
| null;
columns?: ('2' | '3' | '4') | null;
id?: string | null;
blockName?: string | null;
blockType: 'card-grid-block';
}
| {
quote: string;
author?: string | null;
role?: string | null;
image?: (number | null) | Media;
style?: ('simple' | 'highlighted' | 'with-image') | null;
id?: string | null;
blockName?: string | null;
blockType: 'quote-block';
}
| {
headline: string;
description?: string | null;
buttons?:
| {
text: string;
link: string;
style?: ('primary' | 'secondary' | 'outline') | null;
id?: string | null;
}[]
| null;
backgroundColor?: ('dark' | 'light' | 'accent') | null;
id?: string | null;
blockName?: string | null;
blockType: 'cta-block';
}
| {
headline?: string | null;
description?: string | null;
recipientEmail?: string | null;
showPhone?: boolean | null;
showAddress?: boolean | null;
showSocials?: boolean | null;
id?: string | null;
blockName?: string | null;
blockType: 'contact-form-block';
}
| {
title?: string | null;
subtitle?: string | null;
layout?: ('vertical' | 'alternating' | 'horizontal') | null;
showConnector?: boolean | null;
markerStyle?: ('dot' | 'number' | 'icon' | 'date') | null;
items?:
| {
/**
* z.B. "2024", "Januar 2024", "15.03.2024"
*/
year?: string | null;
title: string;
description?: string | null;
/**
* Emoji oder Icon-Name
*/
icon?: string | null;
image?: (number | null) | Media;
link?: {
label?: string | null;
href?: string | null;
};
id?: string | null;
}[]
| null;
backgroundColor?: ('white' | 'light' | 'dark') | null;
id?: string | null;
blockName?: string | null;
blockType: 'timeline-block';
}
| {
style?: ('line' | 'space' | 'dots') | null;
spacing?: ('small' | 'medium' | 'large') | null;
id?: string | null;
blockName?: string | null;
blockType: 'divider-block';
}
| {
/**
* YouTube oder Vimeo URL
*/
videoUrl: string;
caption?: string | null;
aspectRatio?: ('16:9' | '4:3' | '1:1') | null;
id?: string | null;
blockName?: string | null;
blockType: 'video-block';
}
| {
title?: string | null;
subtitle?: string | null;
postType: 'blog' | 'news' | 'press' | 'announcement' | 'all';
layout?: ('grid' | 'list' | 'featured' | 'compact' | 'masonry') | null;
columns?: ('2' | '3' | '4') | null;
limit?: number | null;
showFeaturedOnly?: boolean | null;
/**
* Leer = alle Kategorien
*/
filterByCategory?: (number | Category)[] | null;
showExcerpt?: boolean | null;
showDate?: boolean | null;
showAuthor?: boolean | null;
showCategory?: boolean | null;
showPagination?: boolean | null;
showReadMore?: boolean | null;
readMoreLabel?: string | null;
readMoreLink?: string | null;
backgroundColor?: ('white' | 'light' | 'dark') | null;
id?: string | null;
blockName?: string | null;
blockType: 'posts-list-block';
}
| {
title?: string | null;
subtitle?: string | null;
layout?: ('slider' | 'grid' | 'single' | 'masonry' | 'list') | null;
columns?: ('2' | '3' | '4') | null;
displayMode?: ('all' | 'selected') | null;
selectedTestimonials?: (number | Testimonial)[] | null;
limit?: number | null;
showRating?: boolean | null;
showImage?: boolean | null;
showCompany?: boolean | null;
showSource?: boolean | null;
autoplay?: boolean | null;
autoplaySpeed?: number | null;
backgroundColor?: ('white' | 'light' | 'dark' | 'accent') | null;
id?: string | null;
blockName?: string | null;
blockType: 'testimonials-block';
}
| {
title?: string | null;
subtitle?: string | null;
layout?: ('inline' | 'stacked' | 'with-image' | 'minimal' | 'card') | null;
image?: (number | null) | Media;
imagePosition?: ('left' | 'right') | null;
collectName?: boolean | null;
showInterests?: boolean | null;
availableInterests?: ('general' | 'blog' | 'products' | 'offers' | 'events')[] | null;
buttonText?: string | null;
placeholderEmail?: string | null;
successMessage?: string | null;
errorMessage?: string | null;
privacyText?: string | null;
privacyLink?: string | null;
/**
* Wird gespeichert um zu tracken, wo die Anmeldung erfolgte
*/
source?: string | null;
backgroundColor?: ('white' | 'light' | 'dark' | 'accent') | null;
id?: string | null;
blockName?: string | null;
blockType: 'newsletter-block';
}
| {
title?: string | null;
subtitle?: string | null;
layout?: ('horizontal' | 'vertical' | 'alternating' | 'connected' | 'timeline') | null;
showNumbers?: boolean | null;
showIcons?: boolean | null;
steps?:
| {
title: string;
description?: string | null;
/**
* Emoji oder Icon-Name (z.B. "📞", "✓", "1")
*/
icon?: string | null;
image?: (number | null) | Media;
id?: string | null;
}[]
| null;
cta?: {
show?: boolean | null;
label?: string | null;
href?: string | null;
variant?: ('default' | 'ghost' | 'light') | null;
};
backgroundColor?: ('white' | 'light' | 'dark') | null;
id?: string | null;
blockName?: string | null;
blockType: 'process-steps-block';
}
)[]
| null;
seo?: {
metaTitle?: string | null;
metaDescription?: string | null;
ogImage?: (number | null) | Media;
};
status?: ('draft' | 'published') | null;
publishedAt?: string | null;
updatedAt: string;
createdAt: string;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "categories".
*/
export interface Category {
id: number;
tenant?: (number | null) | Tenant;
name: string;
slug: string;
description?: string | null;
updatedAt: string;
createdAt: string;
}
/**
* Kundenstimmen und Bewertungen
*
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "testimonials".
*/
export interface Testimonial {
id: number;
tenant?: (number | null) | Tenant;
/**
* Die Aussage des Kunden
*/
quote: string;
author: string;
/**
* z.B. "Patient", "Geschäftsführer", "Marketing Manager"
*/
role?: string | null;
company?: string | null;
/**
* Portrait-Foto (empfohlen: quadratisch, min. 200x200px)
*/
image?: (number | null) | Media;
/**
* Optional: Sterne-Bewertung
*/
rating?: number | null;
/**
* z.B. "Google Reviews", "Trustpilot", "Persönlich"
*/
source?: string | null;
/**
* URL zur Original-Bewertung (falls öffentlich)
*/
sourceUrl?: string | null;
date?: string | null;
/**
* Inaktive Testimonials werden nicht angezeigt
*/
isActive?: boolean | null;
/**
* Niedrigere Zahlen werden zuerst angezeigt
*/
order?: number | null;
updatedAt: string;
createdAt: string;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "posts".
*/
export interface Post {
id: number;
tenant?: (number | null) | Tenant;
title: string;
/**
* URL-Pfad (z.B. "mein-beitrag" / "my-post")
*/
slug: string;
/**
* Art des Beitrags
*/
type: 'blog' | 'news' | 'press' | 'announcement';
/**
* Auf Startseite/oben anzeigen
*/
isFeatured?: boolean | null;
/**
* Für Übersichten und SEO (max. 300 Zeichen). Wird automatisch aus Content generiert, falls leer.
*/
excerpt?: string | null;
featuredImage?: (number | null) | Media;
content: {
root: {
type: string;
children: {
type: any;
version: number;
[k: string]: unknown;
}[];
direction: ('ltr' | 'rtl') | null;
format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '';
indent: number;
version: number;
};
[k: string]: unknown;
};
categories?: (number | Category)[] | null;
author?: string | null;
status?: ('draft' | 'published' | 'archived') | null;
publishedAt?: string | null;
seo?: {
metaTitle?: string | null;
metaDescription?: string | null;
ogImage?: (number | null) | Media;
};
updatedAt: string;
createdAt: string;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "social-links".
*/
export interface SocialLink {
id: number;
tenant?: (number | null) | Tenant;
platform: 'facebook' | 'x' | 'instagram' | 'youtube' | 'linkedin' | 'xing';
url: string;
isActive?: boolean | null;
updatedAt: string;
createdAt: string;
}
/**
* Newsletter-Abonnenten (DSGVO-konform)
*
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "newsletter-subscribers".
*/
export interface NewsletterSubscriber {
id: number;
tenant?: (number | null) | Tenant;
email: string;
firstName?: string | null;
lastName?: string | null;
status: 'pending' | 'confirmed' | 'unsubscribed' | 'bounced';
interests?: ('general' | 'blog' | 'products' | 'offers' | 'events')[] | null;
/**
* z.B. "Footer", "Popup", "Blog-Artikel", "Kontakt-Seite"
*/
source?: string | null;
subscribedAt?: string | null;
confirmedAt?: string | null;
unsubscribedAt?: string | null;
confirmationToken?: string | null;
/**
* DSGVO-Nachweis der Anmeldung
*/
ipAddress?: string | null;
userAgent?: string | null;
updatedAt: string;
createdAt: string;
}
/**
* Kategorien für Portfolio-Galerien (z.B. Hochzeit, Portrait, Landschaft)
*
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "portfolio-categories".
*/
export interface PortfolioCategory {
id: number;
tenant?: (number | null) | Tenant;
/**
* z.B. "Hochzeitsfotografie", "Portraits", "Landschaften"
*/
name: string;
/**
* URL-freundlicher Name (z.B. "hochzeit", "portrait")
*/
slug: string;
/**
* Kurzbeschreibung der Kategorie für SEO und Übersichten
*/
description?: string | null;
/**
* Repräsentatives Bild für die Kategorieübersicht
*/
coverImage?: (number | null) | Media;
/**
* Niedrigere Zahlen erscheinen zuerst
*/
order?: number | null;
/**
* Inaktive Kategorien werden nicht angezeigt
*/
isActive?: boolean | null;
updatedAt: string;
createdAt: string;
}
/**
* Portfolio-Galerien mit Fotografien
*
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "portfolios".
*/
export interface Portfolio {
id: number;
tenant?: (number | null) | Tenant;
/**
* Name der Galerie / des Projekts
*/
title: string;
/**
* URL-freundlicher Name (z.B. "hochzeit-maria-thomas")
*/
slug: string;
/**
* Ausführliche Beschreibung des Projekts/Shootings
*/
description?: {
root: {
type: string;
children: {
type: any;
version: number;
[k: string]: unknown;
}[];
direction: ('ltr' | 'rtl') | null;
format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '';
indent: number;
version: number;
};
[k: string]: unknown;
} | null;
/**
* Kurze Beschreibung für Übersichten und SEO (max. 300 Zeichen)
*/
excerpt?: string | null;
/**
* Hauptkategorie dieser Galerie
*/
category: number | PortfolioCategory;
/**
* Zusätzliche Schlagwörter für Filterung (z.B. "outdoor", "studio", "schwarz-weiß")
*/
tags?: string[] | null;
/**
* Hauptbild für Übersichten und Vorschauen
*/
coverImage: number | Media;
/**
* Alle Bilder dieser Galerie
*/
images: {
image: number | Media;
/**
* Optionale Beschreibung für dieses Bild
*/
caption?: string | null;
/**
* Als Highlight-Bild markieren
*/
isHighlight?: boolean | null;
id?: string | null;
}[];
/**
* Zusätzliche Informationen zum Shooting
*/
projectDetails?: {
/**
* Name des Kunden (optional, für Referenzen)
*/
client?: string | null;
/**
* Wo wurde das Shooting durchgeführt?
*/
location?: string | null;
shootingDate?: string | null;
/**
* Kamera, Objektive etc. (optional)
*/
equipment?: string[] | null;
};
/**
* Veröffentlichungsstatus
*/
status: 'draft' | 'published' | 'archived';
/**
* Auf der Startseite anzeigen
*/
isFeatured?: boolean | null;
/**
* Wann soll die Galerie veröffentlicht werden?
*/
publishedAt?: string | null;
/**
* Für manuelle Sortierung (niedrigere Zahlen zuerst)
*/
order?: number | null;
seo?: {
/**
* Überschreibt den Standardtitel für Suchmaschinen
*/
metaTitle?: string | null;
/**
* Beschreibung für Suchmaschinen (max. 160 Zeichen)
*/
metaDescription?: string | null;
/**
* Bild für Social Media Shares (verwendet Cover-Bild wenn leer)
*/
ogImage?: (number | null) | Media;
};
updatedAt: string;
createdAt: string;
}
/**
* Cookie-Banner Konfiguration pro Tenant
*
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "cookie-configurations".
*/
export interface CookieConfiguration {
id: number;
/**
* Jeder Tenant kann nur eine Konfiguration haben
*/
tenant: number | Tenant;
/**
* Interner Titel zur Identifikation
*/
title: string;
/**
* Bei inhaltlichen Änderungen erhöhen → erzwingt erneuten Consent bei allen Nutzern
*/
revision: number;
/**
* Welche Kategorien sollen im Banner angezeigt werden?
*/
enabledCategories: ('necessary' | 'functional' | 'analytics' | 'marketing')[];
translations?: {
de?: {
bannerTitle?: string | null;
bannerDescription?: string | null;
acceptAllButton?: string | null;
acceptNecessaryButton?: string | null;
settingsButton?: string | null;
saveButton?: string | null;
privacyPolicyUrl?: string | null;
categoryLabels?: {
necessary?: {
title?: string | null;
description?: string | null;
};
functional?: {
title?: string | null;
description?: string | null;
};
analytics?: {
title?: string | null;
description?: string | null;
};
marketing?: {
title?: string | null;
description?: string | null;
};
};
};
};
styling?: {
position?: ('bottom' | 'top' | 'middle') | null;
theme?: ('dark' | 'light' | 'auto') | null;
};
updatedAt: string;
createdAt: string;
}
/**
* Cookie-Dokumentation für die Datenschutzerklärung
*
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "cookie-inventory".
*/
export interface CookieInventory {
id: number;
tenant: number | Tenant;
/**
* Technischer Name des Cookies (z.B. "_ga")
*/
name: string;
/**
* Anbieter (z.B. "Google LLC")
*/
provider: string;
category: 'necessary' | 'functional' | 'analytics' | 'marketing';
/**
* Speicherdauer (z.B. "2 Jahre")
*/
duration: string;
/**
* Verständliche Erklärung für Endnutzer
*/
description: string;
isActive?: boolean | null;
updatedAt: string;
createdAt: string;
}
/**
* WORM Audit-Trail für Cookie-Einwilligungen (unveränderbar)
*
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "consent-logs".
*/
export interface ConsentLog {
id: number;
/**
* Server-generierte eindeutige ID
*/
consentId: string;
/**
* Client-seitige Referenz (Cookie-UUID) für Traceability
*/
clientRef?: string | null;
tenant: number | Tenant;
/**
* Akzeptierte Kategorien zum Zeitpunkt der Einwilligung
*/
categories:
| {
[k: string]: unknown;
}
| unknown[]
| string
| number
| boolean
| null;
/**
* Version der Konfiguration zum Zeitpunkt der Zustimmung
*/
revision: number;
/**
* Browser/Device (für Forensik und Bot-Erkennung)
*/
userAgent?: string | null;
/**
* HMAC-Hash der IP (täglich rotierender, tenant-spezifischer Salt)
*/
anonymizedIp?: string | null;
/**
* Automatische Löschung nach 3 Jahren
*/
expiresAt: string;
updatedAt: string;
createdAt: string;
}
/**
* Externe Datenschutzerklärung Konfiguration (Alfright)
*
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "privacy-policy-settings".
*/
export interface PrivacyPolicySetting {
id: number;
/**
* Jeder Tenant kann nur eine Konfiguration haben
*/
tenant: number | Tenant;
/**
* Interner Titel zur Identifikation
*/
title: string;
/**
* Quelle der Datenschutzerklärung
*/
provider: 'alfright' | 'internal';
/**
* Einstellungen für die Alfright Integration
*/
alfright?: {
/**
* Alfright Tenant-ID (aus dem iframe-Code)
*/
tenantId: string;
/**
* Alfright API-Key / Dokument-ID (aus dem iframe-Code, z.B. "9f315103c43245bcb0806dd56c2be757")
*/
apiKey: string;
/**
* Sprache der Datenschutzerklärung
*/
language: 'de-de' | 'de-at' | 'de-ch' | 'en-gb' | 'en-us';
/**
* Höhe des iframes in Pixeln (empfohlen: 3000-5000)
*/
iframeHeight: number;
};
/**
* Farben und Schriften an das Website-Design anpassen
*/
styling?: {
/**
* Farbe der Überschriften (Hex-Code, z.B. #ca8a04 für Gold)
*/
headerColor: string;
/**
* Schriftart der Überschriften
*/
headerFont: string;
/**
* Schriftgröße der Hauptüberschriften
*/
headerSize: string;
/**
* Schriftgröße der Unterüberschriften
*/
subheaderSize: string;
/**
* Textfarbe (Hex-Code, z.B. #f3f4f6 für hellen Text)
*/
fontColor: string;
/**
* Schriftart für Fließtext
*/
textFont: string;
/**
* Schriftgröße für Fließtext
*/
textSize: string;
/**
* Linkfarbe (Hex-Code)
*/
linkColor: string;
/**
* Hintergrundfarbe (Hex-Code, z.B. #111827 für Dark Theme)
*/
backgroundColor: string;
};
/**
* Cookie-Tabelle aus CookieInventory unterhalb der Datenschutzerklärung anzeigen
*/
showCookieTable?: boolean | null;
/**
* Überschrift für die Cookie-Tabelle
*/
cookieTableTitle?: string | null;
/**
* Einleitungstext für die Cookie-Tabelle
*/
cookieTableDescription?: string | null;
seo?: {
/**
* Meta-Titel für die Seite
*/
metaTitle?: string | null;
/**
* Meta-Beschreibung für Suchmaschinen
*/
metaDescription?: string | null;
};
updatedAt: string;
createdAt: string;
}
/**
* Protokoll aller gesendeten E-Mails
*
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "email-logs".
*/
export interface EmailLog {
id: number;
tenant: number | Tenant;
to: string;
from: string;
subject: string;
status: 'pending' | 'sent' | 'failed';
/**
* SMTP Message-ID bei erfolgreichem Versand
*/
messageId?: string | null;
error?: string | null;
source: 'manual' | 'form' | 'system' | 'newsletter';
/**
* Zusätzliche Kontextinformationen (z.B. Form-ID)
*/
metadata?:
| {
[k: string]: unknown;
}
| unknown[]
| string
| number
| boolean
| null;
updatedAt: string;
createdAt: string;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "forms".
*/
export interface Form {
id: number;
title: string;
fields?:
| (
| {
name: string;
label?: string | null;
width?: number | null;
required?: boolean | null;
defaultValue?: boolean | null;
id?: string | null;
blockName?: string | null;
blockType: 'checkbox';
}
| {
name: string;
label?: string | null;
width?: number | null;
required?: boolean | null;
id?: string | null;
blockName?: string | null;
blockType: 'email';
}
| {
message?: {
root: {
type: string;
children: {
type: any;
version: number;
[k: string]: unknown;
}[];
direction: ('ltr' | 'rtl') | null;
format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '';
indent: number;
version: number;
};
[k: string]: unknown;
} | null;
id?: string | null;
blockName?: string | null;
blockType: 'message';
}
| {
name: string;
label?: string | null;
width?: number | null;
defaultValue?: number | null;
required?: boolean | null;
id?: string | null;
blockName?: string | null;
blockType: 'number';
}
| {
name: string;
label?: string | null;
width?: number | null;
defaultValue?: string | null;
placeholder?: string | null;
options?:
| {
label: string;
value: string;
id?: string | null;
}[]
| null;
required?: boolean | null;
id?: string | null;
blockName?: string | null;
blockType: 'select';
}
| {
name: string;
label?: string | null;
width?: number | null;
defaultValue?: string | null;
required?: boolean | null;
id?: string | null;
blockName?: string | null;
blockType: 'text';
}
| {
name: string;
label?: string | null;
width?: number | null;
defaultValue?: string | null;
required?: boolean | null;
id?: string | null;
blockName?: string | null;
blockType: 'textarea';
}
)[]
| null;
submitButtonLabel?: string | null;
/**
* Choose whether to display an on-page message or redirect to a different page after they submit the form.
*/
confirmationType?: ('message' | 'redirect') | null;
confirmationMessage?: {
root: {
type: string;
children: {
type: any;
version: number;
[k: string]: unknown;
}[];
direction: ('ltr' | 'rtl') | null;
format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '';
indent: number;
version: number;
};
[k: string]: unknown;
} | null;
redirect?: {
type?: ('reference' | 'custom') | null;
reference?: {
relationTo: 'pages';
value: number | Page;
} | null;
url?: string | null;
};
/**
* Send custom emails when the form submits. Use comma separated lists to send the same email to multiple recipients. To reference a value from this form, wrap that field's name with double curly brackets, i.e. {{firstName}}. You can use a wildcard {{*}} to output all data and {{*:table}} to format it as an HTML table in the email.
*/
emails?:
| {
emailTo?: string | null;
cc?: string | null;
bcc?: string | null;
replyTo?: string | null;
emailFrom?: string | null;
subject: string;
/**
* Enter the message that should be sent in this email.
*/
message?: {
root: {
type: string;
children: {
type: any;
version: number;
[k: string]: unknown;
}[];
direction: ('ltr' | 'rtl') | null;
format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '';
indent: number;
version: number;
};
[k: string]: unknown;
} | null;
id?: string | null;
}[]
| null;
updatedAt: string;
createdAt: string;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "form-submissions".
*/
export interface FormSubmission {
id: number;
form: number | Form;
submissionData?:
| {
field: string;
value: string;
id?: string | null;
}[]
| null;
updatedAt: string;
createdAt: string;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "redirects".
*/
export interface Redirect {
id: number;
from: string;
to?: {
type?: ('reference' | 'custom') | null;
reference?: {
relationTo: 'pages';
value: number | Page;
} | null;
url?: string | null;
};
updatedAt: string;
createdAt: string;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "payload-kv".
*/
export interface PayloadKv {
id: number;
key: string;
data:
| {
[k: string]: unknown;
}
| unknown[]
| string
| number
| boolean
| null;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "payload-locked-documents".
*/
export interface PayloadLockedDocument {
id: number;
document?:
| ({
relationTo: 'users';
value: number | User;
} | null)
| ({
relationTo: 'media';
value: number | Media;
} | null)
| ({
relationTo: 'tenants';
value: number | Tenant;
} | null)
| ({
relationTo: 'pages';
value: number | Page;
} | null)
| ({
relationTo: 'posts';
value: number | Post;
} | null)
| ({
relationTo: 'categories';
value: number | Category;
} | null)
| ({
relationTo: 'social-links';
value: number | SocialLink;
} | null)
| ({
relationTo: 'testimonials';
value: number | Testimonial;
} | null)
| ({
relationTo: 'newsletter-subscribers';
value: number | NewsletterSubscriber;
} | null)
| ({
relationTo: 'portfolio-categories';
value: number | PortfolioCategory;
} | null)
| ({
relationTo: 'portfolios';
value: number | Portfolio;
} | null)
| ({
relationTo: 'cookie-configurations';
value: number | CookieConfiguration;
} | null)
| ({
relationTo: 'cookie-inventory';
value: number | CookieInventory;
} | null)
| ({
relationTo: 'consent-logs';
value: number | ConsentLog;
} | null)
| ({
relationTo: 'privacy-policy-settings';
value: number | PrivacyPolicySetting;
} | null)
| ({
relationTo: 'email-logs';
value: number | EmailLog;
} | null)
| ({
relationTo: 'forms';
value: number | Form;
} | null)
| ({
relationTo: 'form-submissions';
value: number | FormSubmission;
} | null)
| ({
relationTo: 'redirects';
value: number | Redirect;
} | null);
globalSlug?: string | null;
user: {
relationTo: 'users';
value: number | User;
};
updatedAt: string;
createdAt: string;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "payload-preferences".
*/
export interface PayloadPreference {
id: number;
user: {
relationTo: 'users';
value: number | User;
};
key?: string | null;
value?:
| {
[k: string]: unknown;
}
| unknown[]
| string
| number
| boolean
| null;
updatedAt: string;
createdAt: string;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "payload-migrations".
*/
export interface PayloadMigration {
id: number;
name?: string | null;
batch?: number | null;
updatedAt: string;
createdAt: string;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "users_select".
*/
export interface UsersSelect<T extends boolean = true> {
isSuperAdmin?: T;
tenants?:
| T
| {
tenant?: T;
id?: T;
};
updatedAt?: T;
createdAt?: T;
email?: T;
resetPasswordToken?: T;
resetPasswordExpiration?: T;
salt?: T;
hash?: T;
loginAttempts?: T;
lockUntil?: T;
sessions?:
| T
| {
id?: T;
createdAt?: T;
expiresAt?: T;
};
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "media_select".
*/
export interface MediaSelect<T extends boolean = true> {
tenant?: T;
alt?: T;
caption?: T;
credit?: T;
tags?: T;
updatedAt?: T;
createdAt?: T;
url?: T;
thumbnailURL?: T;
filename?: T;
mimeType?: T;
filesize?: T;
width?: T;
height?: T;
focalX?: T;
focalY?: T;
sizes?:
| T
| {
thumbnail?:
| T
| {
url?: T;
width?: T;
height?: T;
mimeType?: T;
filesize?: T;
filename?: T;
};
small?:
| T
| {
url?: T;
width?: T;
height?: T;
mimeType?: T;
filesize?: T;
filename?: T;
};
medium?:
| T
| {
url?: T;
width?: T;
height?: T;
mimeType?: T;
filesize?: T;
filename?: T;
};
large?:
| T
| {
url?: T;
width?: T;
height?: T;
mimeType?: T;
filesize?: T;
filename?: T;
};
xlarge?:
| T
| {
url?: T;
width?: T;
height?: T;
mimeType?: T;
filesize?: T;
filename?: T;
};
'2k'?:
| T
| {
url?: T;
width?: T;
height?: T;
mimeType?: T;
filesize?: T;
filename?: T;
};
og?:
| T
| {
url?: T;
width?: T;
height?: T;
mimeType?: T;
filesize?: T;
filename?: T;
};
medium_avif?:
| T
| {
url?: T;
width?: T;
height?: T;
mimeType?: T;
filesize?: T;
filename?: T;
};
large_avif?:
| T
| {
url?: T;
width?: T;
height?: T;
mimeType?: T;
filesize?: T;
filename?: T;
};
xlarge_avif?:
| T
| {
url?: T;
width?: T;
height?: T;
mimeType?: T;
filesize?: T;
filename?: T;
};
};
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "tenants_select".
*/
export interface TenantsSelect<T extends boolean = true> {
name?: T;
slug?: T;
domains?:
| T
| {
domain?: T;
id?: T;
};
email?:
| T
| {
fromAddress?: T;
fromName?: T;
replyTo?: T;
useCustomSmtp?: T;
smtp?:
| T
| {
host?: T;
port?: T;
secure?: T;
user?: T;
pass?: T;
};
};
updatedAt?: T;
createdAt?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "pages_select".
*/
export interface PagesSelect<T extends boolean = true> {
tenant?: T;
title?: T;
slug?: T;
hero?:
| T
| {
image?: T;
headline?: T;
subline?: T;
};
layout?:
| T
| {
'hero-block'?:
| T
| {
backgroundImage?: T;
headline?: T;
subline?: T;
alignment?: T;
overlay?: T;
cta?:
| T
| {
text?: T;
link?: T;
style?: T;
};
id?: T;
blockName?: T;
};
'text-block'?:
| T
| {
content?: T;
width?: T;
id?: T;
blockName?: T;
};
'image-text-block'?:
| T
| {
image?: T;
imagePosition?: T;
headline?: T;
content?: T;
cta?:
| T
| {
text?: T;
link?: T;
};
id?: T;
blockName?: T;
};
'card-grid-block'?:
| T
| {
headline?: T;
cards?:
| T
| {
image?: T;
title?: T;
description?: T;
link?: T;
linkText?: T;
id?: T;
};
columns?: T;
id?: T;
blockName?: T;
};
'quote-block'?:
| T
| {
quote?: T;
author?: T;
role?: T;
image?: T;
style?: T;
id?: T;
blockName?: T;
};
'cta-block'?:
| T
| {
headline?: T;
description?: T;
buttons?:
| T
| {
text?: T;
link?: T;
style?: T;
id?: T;
};
backgroundColor?: T;
id?: T;
blockName?: T;
};
'contact-form-block'?:
| T
| {
headline?: T;
description?: T;
recipientEmail?: T;
showPhone?: T;
showAddress?: T;
showSocials?: T;
id?: T;
blockName?: T;
};
'timeline-block'?:
| T
| {
title?: T;
subtitle?: T;
layout?: T;
showConnector?: T;
markerStyle?: T;
items?:
| T
| {
year?: T;
title?: T;
description?: T;
icon?: T;
image?: T;
link?:
| T
| {
label?: T;
href?: T;
};
id?: T;
};
backgroundColor?: T;
id?: T;
blockName?: T;
};
'divider-block'?:
| T
| {
style?: T;
spacing?: T;
id?: T;
blockName?: T;
};
'video-block'?:
| T
| {
videoUrl?: T;
caption?: T;
aspectRatio?: T;
id?: T;
blockName?: T;
};
'posts-list-block'?:
| T
| {
title?: T;
subtitle?: T;
postType?: T;
layout?: T;
columns?: T;
limit?: T;
showFeaturedOnly?: T;
filterByCategory?: T;
showExcerpt?: T;
showDate?: T;
showAuthor?: T;
showCategory?: T;
showPagination?: T;
showReadMore?: T;
readMoreLabel?: T;
readMoreLink?: T;
backgroundColor?: T;
id?: T;
blockName?: T;
};
'testimonials-block'?:
| T
| {
title?: T;
subtitle?: T;
layout?: T;
columns?: T;
displayMode?: T;
selectedTestimonials?: T;
limit?: T;
showRating?: T;
showImage?: T;
showCompany?: T;
showSource?: T;
autoplay?: T;
autoplaySpeed?: T;
backgroundColor?: T;
id?: T;
blockName?: T;
};
'newsletter-block'?:
| T
| {
title?: T;
subtitle?: T;
layout?: T;
image?: T;
imagePosition?: T;
collectName?: T;
showInterests?: T;
availableInterests?: T;
buttonText?: T;
placeholderEmail?: T;
successMessage?: T;
errorMessage?: T;
privacyText?: T;
privacyLink?: T;
source?: T;
backgroundColor?: T;
id?: T;
blockName?: T;
};
'process-steps-block'?:
| T
| {
title?: T;
subtitle?: T;
layout?: T;
showNumbers?: T;
showIcons?: T;
steps?:
| T
| {
title?: T;
description?: T;
icon?: T;
image?: T;
id?: T;
};
cta?:
| T
| {
show?: T;
label?: T;
href?: T;
variant?: T;
};
backgroundColor?: T;
id?: T;
blockName?: T;
};
};
seo?:
| T
| {
metaTitle?: T;
metaDescription?: T;
ogImage?: T;
};
status?: T;
publishedAt?: T;
updatedAt?: T;
createdAt?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "posts_select".
*/
export interface PostsSelect<T extends boolean = true> {
tenant?: T;
title?: T;
slug?: T;
type?: T;
isFeatured?: T;
excerpt?: T;
featuredImage?: T;
content?: T;
categories?: T;
author?: T;
status?: T;
publishedAt?: T;
seo?:
| T
| {
metaTitle?: T;
metaDescription?: T;
ogImage?: T;
};
updatedAt?: T;
createdAt?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "categories_select".
*/
export interface CategoriesSelect<T extends boolean = true> {
tenant?: T;
name?: T;
slug?: T;
description?: T;
updatedAt?: T;
createdAt?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "social-links_select".
*/
export interface SocialLinksSelect<T extends boolean = true> {
tenant?: T;
platform?: T;
url?: T;
isActive?: T;
updatedAt?: T;
createdAt?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "testimonials_select".
*/
export interface TestimonialsSelect<T extends boolean = true> {
tenant?: T;
quote?: T;
author?: T;
role?: T;
company?: T;
image?: T;
rating?: T;
source?: T;
sourceUrl?: T;
date?: T;
isActive?: T;
order?: T;
updatedAt?: T;
createdAt?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "newsletter-subscribers_select".
*/
export interface NewsletterSubscribersSelect<T extends boolean = true> {
tenant?: T;
email?: T;
firstName?: T;
lastName?: T;
status?: T;
interests?: T;
source?: T;
subscribedAt?: T;
confirmedAt?: T;
unsubscribedAt?: T;
confirmationToken?: T;
ipAddress?: T;
userAgent?: T;
updatedAt?: T;
createdAt?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "portfolio-categories_select".
*/
export interface PortfolioCategoriesSelect<T extends boolean = true> {
tenant?: T;
name?: T;
slug?: T;
description?: T;
coverImage?: T;
order?: T;
isActive?: T;
updatedAt?: T;
createdAt?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "portfolios_select".
*/
export interface PortfoliosSelect<T extends boolean = true> {
tenant?: T;
title?: T;
slug?: T;
description?: T;
excerpt?: T;
category?: T;
tags?: T;
coverImage?: T;
images?:
| T
| {
image?: T;
caption?: T;
isHighlight?: T;
id?: T;
};
projectDetails?:
| T
| {
client?: T;
location?: T;
shootingDate?: T;
equipment?: T;
};
status?: T;
isFeatured?: T;
publishedAt?: T;
order?: T;
seo?:
| T
| {
metaTitle?: T;
metaDescription?: T;
ogImage?: T;
};
updatedAt?: T;
createdAt?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "cookie-configurations_select".
*/
export interface CookieConfigurationsSelect<T extends boolean = true> {
tenant?: T;
title?: T;
revision?: T;
enabledCategories?: T;
translations?:
| T
| {
de?:
| T
| {
bannerTitle?: T;
bannerDescription?: T;
acceptAllButton?: T;
acceptNecessaryButton?: T;
settingsButton?: T;
saveButton?: T;
privacyPolicyUrl?: T;
categoryLabels?:
| T
| {
necessary?:
| T
| {
title?: T;
description?: T;
};
functional?:
| T
| {
title?: T;
description?: T;
};
analytics?:
| T
| {
title?: T;
description?: T;
};
marketing?:
| T
| {
title?: T;
description?: T;
};
};
};
};
styling?:
| T
| {
position?: T;
theme?: T;
};
updatedAt?: T;
createdAt?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "cookie-inventory_select".
*/
export interface CookieInventorySelect<T extends boolean = true> {
tenant?: T;
name?: T;
provider?: T;
category?: T;
duration?: T;
description?: T;
isActive?: T;
updatedAt?: T;
createdAt?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "consent-logs_select".
*/
export interface ConsentLogsSelect<T extends boolean = true> {
consentId?: T;
clientRef?: T;
tenant?: T;
categories?: T;
revision?: T;
userAgent?: T;
anonymizedIp?: T;
expiresAt?: T;
updatedAt?: T;
createdAt?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "privacy-policy-settings_select".
*/
export interface PrivacyPolicySettingsSelect<T extends boolean = true> {
tenant?: T;
title?: T;
provider?: T;
alfright?:
| T
| {
tenantId?: T;
apiKey?: T;
language?: T;
iframeHeight?: T;
};
styling?:
| T
| {
headerColor?: T;
headerFont?: T;
headerSize?: T;
subheaderSize?: T;
fontColor?: T;
textFont?: T;
textSize?: T;
linkColor?: T;
backgroundColor?: T;
};
showCookieTable?: T;
cookieTableTitle?: T;
cookieTableDescription?: T;
seo?:
| T
| {
metaTitle?: T;
metaDescription?: T;
};
updatedAt?: T;
createdAt?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "email-logs_select".
*/
export interface EmailLogsSelect<T extends boolean = true> {
tenant?: T;
to?: T;
from?: T;
subject?: T;
status?: T;
messageId?: T;
error?: T;
source?: T;
metadata?: T;
updatedAt?: T;
createdAt?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "forms_select".
*/
export interface FormsSelect<T extends boolean = true> {
title?: T;
fields?:
| T
| {
checkbox?:
| T
| {
name?: T;
label?: T;
width?: T;
required?: T;
defaultValue?: T;
id?: T;
blockName?: T;
};
email?:
| T
| {
name?: T;
label?: T;
width?: T;
required?: T;
id?: T;
blockName?: T;
};
message?:
| T
| {
message?: T;
id?: T;
blockName?: T;
};
number?:
| T
| {
name?: T;
label?: T;
width?: T;
defaultValue?: T;
required?: T;
id?: T;
blockName?: T;
};
select?:
| T
| {
name?: T;
label?: T;
width?: T;
defaultValue?: T;
placeholder?: T;
options?:
| T
| {
label?: T;
value?: T;
id?: T;
};
required?: T;
id?: T;
blockName?: T;
};
text?:
| T
| {
name?: T;
label?: T;
width?: T;
defaultValue?: T;
required?: T;
id?: T;
blockName?: T;
};
textarea?:
| T
| {
name?: T;
label?: T;
width?: T;
defaultValue?: T;
required?: T;
id?: T;
blockName?: T;
};
};
submitButtonLabel?: T;
confirmationType?: T;
confirmationMessage?: T;
redirect?:
| T
| {
type?: T;
reference?: T;
url?: T;
};
emails?:
| T
| {
emailTo?: T;
cc?: T;
bcc?: T;
replyTo?: T;
emailFrom?: T;
subject?: T;
message?: T;
id?: T;
};
updatedAt?: T;
createdAt?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "form-submissions_select".
*/
export interface FormSubmissionsSelect<T extends boolean = true> {
form?: T;
submissionData?:
| T
| {
field?: T;
value?: T;
id?: T;
};
updatedAt?: T;
createdAt?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "redirects_select".
*/
export interface RedirectsSelect<T extends boolean = true> {
from?: T;
to?:
| T
| {
type?: T;
reference?: T;
url?: T;
};
updatedAt?: T;
createdAt?: 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;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "payload-locked-documents_select".
*/
export interface PayloadLockedDocumentsSelect<T extends boolean = true> {
document?: T;
globalSlug?: T;
user?: T;
updatedAt?: T;
createdAt?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "payload-preferences_select".
*/
export interface PayloadPreferencesSelect<T extends boolean = true> {
user?: T;
key?: T;
value?: T;
updatedAt?: T;
createdAt?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "payload-migrations_select".
*/
export interface PayloadMigrationsSelect<T extends boolean = true> {
name?: T;
batch?: T;
updatedAt?: T;
createdAt?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "site-settings".
*/
export interface SiteSetting {
id: number;
siteName?: string | null;
siteTagline?: string | null;
logo?: (number | null) | Media;
favicon?: (number | null) | Media;
contact?: {
email?: string | null;
phone?: string | null;
address?: string | null;
};
footer?: {
copyrightText?: string | null;
showSocialLinks?: boolean | null;
};
seo?: {
defaultMetaTitle?: string | null;
defaultMetaDescription?: string | null;
defaultOgImage?: (number | null) | Media;
};
updatedAt?: string | null;
createdAt?: string | null;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "navigation".
*/
export interface Navigation {
id: number;
mainMenu?:
| {
label: string;
type?: ('page' | 'custom' | 'submenu') | null;
page?: (number | null) | Page;
url?: string | null;
openInNewTab?: boolean | null;
submenu?:
| {
label: string;
linkType?: ('page' | 'custom') | null;
page?: (number | null) | Page;
url?: string | null;
id?: string | null;
}[]
| null;
id?: string | null;
}[]
| null;
footerMenu?:
| {
label: string;
linkType?: ('page' | 'custom') | null;
page?: (number | null) | Page;
url?: string | null;
id?: string | null;
}[]
| null;
updatedAt?: string | null;
createdAt?: string | null;
}
/**
* Globale SEO-Konfiguration und Schema.org Daten
*
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "seo-settings".
*/
export interface SeoSetting {
id: number;
metaDefaults?: {
/**
* Wird an jeden Seitentitel angehängt (z.B. "Startseite | Firmenname")
*/
titleSuffix?: string | null;
/**
* Wird verwendet, wenn keine spezifische Beschreibung gesetzt ist
*/
defaultDescription?: string | null;
/**
* Fallback-Bild für Social Media Shares (empfohlen: 1200x630px)
*/
defaultOgImage?: (number | null) | Media;
/**
* Globale Keywords (optional, geringe SEO-Relevanz)
*/
keywords?: string[] | null;
};
/**
* Daten für das Organization Schema
*/
organization: {
name: string;
/**
* Vollständiger rechtlicher Firmenname (falls abweichend)
*/
legalName?: string | null;
description?: string | null;
/**
* Firmenlogo für Schema.org (min. 112x112px, empfohlen: 512x512px)
*/
logo?: (number | null) | Media;
foundingDate?: string | null;
};
contact?: {
email?: string | null;
/**
* Im Format +49 123 456789
*/
phone?: string | null;
fax?: string | null;
};
address?: {
street?: string | null;
postalCode?: string | null;
city?: string | null;
region?: string | null;
country?: string | null;
/**
* ISO 3166-1 Alpha-2 Code
*/
countryCode?: string | null;
};
/**
* Für Local Business Schema
*/
geo?: {
latitude?: number | null;
longitude?: number | null;
};
/**
* URLs zu Social Media Profilen (für sameAs Schema)
*/
socialProfiles?:
| {
platform?:
| ('facebook' | 'instagram' | 'twitter' | 'linkedin' | 'youtube' | 'tiktok' | 'pinterest' | 'xing' | 'other')
| null;
url: string;
id?: string | null;
}[]
| null;
/**
* Zusätzliche Daten für lokale Unternehmen
*/
localBusiness?: {
enabled?: boolean | null;
type?:
| (
| 'LocalBusiness'
| 'Physician'
| 'Dentist'
| 'Attorney'
| 'Restaurant'
| 'Hotel'
| 'Store'
| 'HealthClub'
| 'HairSalon'
| 'AutoRepair'
| 'RealEstateAgent'
| 'FinancialService'
| 'ProfessionalService'
| 'MedicalBusiness'
)
| null;
priceRange?: ('€' | '€€' | '€€€' | '€€€€') | null;
/**
* Im Format "Mo-Fr 09:00-17:00"
*/
openingHours?:
| {
specification?: string | null;
id?: string | null;
}[]
| null;
};
robots?: {
/**
* Wenn deaktiviert, wird die gesamte Website von Suchmaschinen ausgeschlossen
*/
allowIndexing?: boolean | null;
/**
* Pfade die nicht gecrawlt werden sollen (z.B. "/intern", "/preview")
*/
additionalDisallow?: string[] | null;
};
/**
* Codes für Suchmaschinen-Verifizierung
*/
verification?: {
/**
* Meta-Tag Content (nur der Code, nicht das gesamte Tag)
*/
google?: string | null;
bing?: string | null;
yandex?: string | null;
};
updatedAt?: string | null;
createdAt?: string | null;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "site-settings_select".
*/
export interface SiteSettingsSelect<T extends boolean = true> {
siteName?: T;
siteTagline?: T;
logo?: T;
favicon?: T;
contact?:
| T
| {
email?: T;
phone?: T;
address?: T;
};
footer?:
| T
| {
copyrightText?: T;
showSocialLinks?: T;
};
seo?:
| T
| {
defaultMetaTitle?: T;
defaultMetaDescription?: T;
defaultOgImage?: T;
};
updatedAt?: T;
createdAt?: T;
globalType?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "navigation_select".
*/
export interface NavigationSelect<T extends boolean = true> {
mainMenu?:
| T
| {
label?: T;
type?: T;
page?: T;
url?: T;
openInNewTab?: T;
submenu?:
| T
| {
label?: T;
linkType?: T;
page?: T;
url?: T;
id?: T;
};
id?: T;
};
footerMenu?:
| T
| {
label?: T;
linkType?: T;
page?: T;
url?: T;
id?: T;
};
updatedAt?: T;
createdAt?: T;
globalType?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "seo-settings_select".
*/
export interface SeoSettingsSelect<T extends boolean = true> {
metaDefaults?:
| T
| {
titleSuffix?: T;
defaultDescription?: T;
defaultOgImage?: T;
keywords?: T;
};
organization?:
| T
| {
name?: T;
legalName?: T;
description?: T;
logo?: T;
foundingDate?: T;
};
contact?:
| T
| {
email?: T;
phone?: T;
fax?: T;
};
address?:
| T
| {
street?: T;
postalCode?: T;
city?: T;
region?: T;
country?: T;
countryCode?: T;
};
geo?:
| T
| {
latitude?: T;
longitude?: T;
};
socialProfiles?:
| T
| {
platform?: T;
url?: T;
id?: T;
};
localBusiness?:
| T
| {
enabled?: T;
type?: T;
priceRange?: T;
openingHours?:
| T
| {
specification?: T;
id?: T;
};
};
robots?:
| T
| {
allowIndexing?: T;
additionalDisallow?: T;
};
verification?:
| T
| {
google?: T;
bing?: T;
yandex?: T;
};
updatedAt?: T;
createdAt?: T;
globalType?: T;
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "auth".
*/
export interface Auth {
[k: string]: unknown;
}
declare module 'payload' {
export interface GeneratedTypes extends Config {}
}