mirror of
https://github.com/complexcaresolutions/cms.c2sgmbh.git
synced 2026-03-17 23:14:12 +00:00
- Remove obsolete instruction documents (PROMPT_*.md, SECURITY_FIXES.md) - Update CLAUDE.md with security features, test suite, audit logs - Merge Techstack_Dokumentation into INFRASTRUCTURE.md - Update SECURITY.md with custom login route documentation - Add changelog to TODO.md - Update email service and data masking for SMTP error handling - Extend test coverage for CSRF and data masking 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
3011 lines
No EOL
72 KiB
TypeScript
3011 lines
No EOL
72 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;
|
|
'audit-logs': AuditLog;
|
|
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>;
|
|
'audit-logs': AuditLogsSelect<false> | AuditLogsSelect<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?: {
|
|
/**
|
|
* Tipp: Verwenden Sie eine E-Mail-Adresse der Domain, für die SPF/DKIM konfiguriert ist.
|
|
*/
|
|
fromAddress?: string | null;
|
|
fromName?: string | null;
|
|
replyTo?: string | null;
|
|
/**
|
|
* Aktivieren Sie diese Option, um einen eigenen SMTP-Server statt der globalen Einstellungen zu verwenden.
|
|
*/
|
|
useCustomSmtp?: boolean | null;
|
|
/**
|
|
* Hinweis: Stellen Sie sicher, dass SPF- und DKIM-Einträge für Ihre Domain konfiguriert sind, um eine optimale E-Mail-Zustellung zu gewährleisten.
|
|
*/
|
|
smtp?: {
|
|
/**
|
|
* Hostname ohne Protokoll (z.B. smtp.gmail.com)
|
|
*/
|
|
host: string;
|
|
/**
|
|
* 587 (STARTTLS) oder 465 (SSL)
|
|
*/
|
|
port?: number | null;
|
|
/**
|
|
* Für Port 465 aktivieren
|
|
*/
|
|
secure?: boolean | null;
|
|
/**
|
|
* Meist die E-Mail-Adresse
|
|
*/
|
|
user: string;
|
|
/**
|
|
* Leer lassen um bestehendes Passwort zu behalten
|
|
*/
|
|
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;
|
|
}
|
|
/**
|
|
* Protokoll wichtiger System-Aktionen
|
|
*
|
|
* This interface was referenced by `Config`'s JSON-Schema
|
|
* via the `definition` "audit-logs".
|
|
*/
|
|
export interface AuditLog {
|
|
id: number;
|
|
action:
|
|
| 'login_success'
|
|
| 'login_failed'
|
|
| 'logout'
|
|
| 'password_changed'
|
|
| 'password_reset'
|
|
| 'create'
|
|
| 'update'
|
|
| 'delete'
|
|
| 'config_changed'
|
|
| 'email_failed'
|
|
| 'access_denied'
|
|
| 'rate_limit';
|
|
severity: 'info' | 'warning' | 'error' | 'critical';
|
|
entityType?: ('users' | 'tenants' | 'pages' | 'posts' | 'media' | 'forms' | 'email' | 'global' | 'system') | null;
|
|
/**
|
|
* ID des betroffenen Dokuments
|
|
*/
|
|
entityId?: string | null;
|
|
/**
|
|
* Benutzer, der die Aktion ausgeführt hat
|
|
*/
|
|
user?: (number | null) | User;
|
|
/**
|
|
* E-Mail zum Zeitpunkt der Aktion (für gelöschte User)
|
|
*/
|
|
userEmail?: string | null;
|
|
/**
|
|
* Betroffener Tenant (falls zutreffend)
|
|
*/
|
|
tenant?: (number | null) | Tenant;
|
|
ipAddress?: string | null;
|
|
userAgent?: string | null;
|
|
/**
|
|
* Detaillierte Beschreibung der Aktion
|
|
*/
|
|
description?: string | null;
|
|
/**
|
|
* Zustand vor der Änderung
|
|
*/
|
|
previousValue?:
|
|
| {
|
|
[k: string]: unknown;
|
|
}
|
|
| unknown[]
|
|
| string
|
|
| number
|
|
| boolean
|
|
| null;
|
|
/**
|
|
* Zustand nach der Änderung
|
|
*/
|
|
newValue?:
|
|
| {
|
|
[k: string]: unknown;
|
|
}
|
|
| unknown[]
|
|
| string
|
|
| number
|
|
| boolean
|
|
| null;
|
|
/**
|
|
* Weitere Kontextinformationen
|
|
*/
|
|
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: 'audit-logs';
|
|
value: number | AuditLog;
|
|
} | 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` "audit-logs_select".
|
|
*/
|
|
export interface AuditLogsSelect<T extends boolean = true> {
|
|
action?: T;
|
|
severity?: T;
|
|
entityType?: T;
|
|
entityId?: T;
|
|
user?: T;
|
|
userEmail?: T;
|
|
tenant?: T;
|
|
ipAddress?: T;
|
|
userAgent?: T;
|
|
description?: T;
|
|
previousValue?: T;
|
|
newValue?: 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 {}
|
|
} |