@easy-cms/core 0.38.0 → 0.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/dist/index.d.ts +151 -9
  2. package/dist/index.js +635 -129
  3. package/package.json +1 -1
package/dist/index.d.ts CHANGED
@@ -538,6 +538,40 @@ interface BuiltinApiKeysCollection {
538
538
  }
539
539
  ];
540
540
  }
541
+ /** The built-in media folders (`upload.folders: true`). */
542
+ interface BuiltinMediaFoldersCollection {
543
+ readonly slug: 'media-folders';
544
+ readonly fields: readonly [
545
+ {
546
+ readonly name: 'name';
547
+ readonly type: 'text';
548
+ readonly required: true;
549
+ },
550
+ {
551
+ readonly name: 'parent';
552
+ readonly type: 'relationship';
553
+ readonly to: 'media-folders';
554
+ },
555
+ {
556
+ readonly name: 'key';
557
+ readonly type: 'text';
558
+ },
559
+ {
560
+ readonly name: 'private';
561
+ readonly type: 'boolean';
562
+ },
563
+ {
564
+ readonly name: 'permissions';
565
+ readonly type: 'json';
566
+ }
567
+ ];
568
+ }
569
+ /** `media-folders` when the config turns folders on. */
570
+ type FoldersOf<C extends Config> = C extends {
571
+ readonly upload: {
572
+ readonly folders: true;
573
+ };
574
+ } ? BuiltinMediaFoldersCollection : never;
541
575
  /** `api-keys` when the config turns API keys on. */
542
576
  type ApiKeysOf<C extends Config> = C extends {
543
577
  readonly apiKeys: true;
@@ -565,7 +599,7 @@ type WithPluginFields<C extends Config, T extends {
565
599
  readonly fields: readonly (T['fields'][number] | PluginFields<C, T['slug'], Key>)[];
566
600
  };
567
601
  /** Every collection of a config, including the built-in ones and those plugins add. */
568
- type AllCollections<C extends Config> = NonNullable<C['collections']>[number] | BuiltinUsersCollection | BuiltinMediaCollection | ApiKeysOf<C> | PluginCollections<C>;
602
+ type AllCollections<C extends Config> = NonNullable<C['collections']>[number] | BuiltinUsersCollection | BuiltinMediaCollection | ApiKeysOf<C> | FoldersOf<C> | PluginCollections<C>;
569
603
  /** The built-in media collection; its documents are typed as `MediaDocument`. */
570
604
  interface BuiltinMediaCollection {
571
605
  readonly slug: 'media';
@@ -596,7 +630,11 @@ interface MediaDocument {
596
630
  width?: number | null;
597
631
  height?: number | null;
598
632
  alt?: string | null;
599
- /** Public URL of the file. */
633
+ /** Its media folder (`upload.folders`), when it is in one. */
634
+ folder?: ID | null;
635
+ /** In a private folder: `url` needs a signed-in user who may see it, or `cms.signedMediaURL()`. */
636
+ private?: boolean | null;
637
+ /** URL of the file: public, or for private files the API's, which checks who asks. */
600
638
  url: string;
601
639
  /** Resized copies, when `upload.imageSizes` is set and sharp is installed. */
602
640
  sizes: Record<string, MediaSize>;
@@ -703,7 +741,7 @@ type InferGlobal<T extends FieldsOwner, C extends Config = Config> = Simplify<
703
741
  } ? {
704
742
  status: 'draft' | 'published';
705
743
  } : unknown) & FieldsValue<T['fields'], C>>;
706
- type CollectionSlug<C extends Config> = NonNullable<C['collections']>[number]['slug'] | 'users' | 'media' | ApiKeysOf<C>['slug'] | PluginCollections<C>['slug'];
744
+ type CollectionSlug<C extends Config> = NonNullable<C['collections']>[number]['slug'] | 'users' | 'media' | ApiKeysOf<C>['slug'] | FoldersOf<C>['slug'] | PluginCollections<C>['slug'];
707
745
  type GlobalSlug<C extends Config> = NonNullable<C['globals']>[number]['slug'];
708
746
  /** Document type of a collection, e.g. `CollectionDocument<typeof config, 'posts'>`. */
709
747
  type CollectionDocument<C extends Config, S extends CollectionSlug<C>> = S extends 'media' ? MediaDocument : InferCollection<CollectionBySlug<C, S>, C>;
@@ -998,6 +1036,24 @@ declare class MediaFolders {
998
1036
  private rows;
999
1037
  /** A role's level in a folder (`null`: the top level): the nearest permissions up the tree. */
1000
1038
  private levelIn;
1039
+ /** Whether files in a folder (`null`: the top level) are private: it or a folder above is. */
1040
+ private privateIn;
1041
+ /** Whether files put in this folder are private. */
1042
+ isPrivate(id: ID | null): Promise<boolean>;
1043
+ /** The folder and every folder inside it. */
1044
+ private within;
1045
+ /** Folders whose privacy follows this one: it and those inside, with their privacy now. */
1046
+ subtree(id: ID): Promise<{
1047
+ id: ID;
1048
+ private: boolean;
1049
+ }[]>;
1050
+ /**
1051
+ * The folder with this key (`folder: 'banners'` on upload fields), made at the top level when
1052
+ * there is none yet.
1053
+ */
1054
+ keyed(key: string): Promise<ID>;
1055
+ /** Whether a file in `folder` is in the folder with this key, or below it. */
1056
+ inKeyed(key: string, folder: ID | null): Promise<boolean>;
1001
1057
  /** The user's level in a folder (`null`: the top level). */
1002
1058
  level(user: AuthUser | null, id: ID | null): Promise<FolderLevel | 'none'>;
1003
1059
  /**
@@ -1165,6 +1221,11 @@ declare class EasyCMS<C extends Config = Config> {
1165
1221
  readonly auth: Auth;
1166
1222
  /** Where uploaded files are stored. */
1167
1223
  readonly storage: StorageAdapter;
1224
+ /**
1225
+ * Where files in private folders are stored (`upload.privateStorage`, else `storage` when it has
1226
+ * no public URLs); `null` when private folders can't be used.
1227
+ */
1228
+ readonly privateStorage: StorageAdapter | null;
1168
1229
  /** Project root: relative paths in the config (e.g. `admin.modules`) start here. */
1169
1230
  readonly cwd: string;
1170
1231
  /** Roles and their permissions (`auth.rbac`, Settings → Roles). */
@@ -1176,7 +1237,7 @@ declare class EasyCMS<C extends Config = Config> {
1176
1237
  private readonly versions;
1177
1238
  private readonly webhooks;
1178
1239
  private readonly mailer;
1179
- constructor(config: ResolvedConfig, db: Database, logger?: Logger, storage?: StorageAdapter, cwd?: string);
1240
+ constructor(config: ResolvedConfig, db: Database, logger?: Logger, storage?: StorageAdapter, cwd?: string, privateStorage?: StorageAdapter | null);
1180
1241
  find<S extends Slug<C>>(collection: S, options?: FindOptions): Promise<PaginatedDocs<Doc<C, S>>>;
1181
1242
  findById<S extends Slug<C>>(collection: S, id: ID, options?: ReadOptions): Promise<Doc<C, S> | null>;
1182
1243
  count<S extends Slug<C>>(collection: S, options?: {
@@ -1214,6 +1275,43 @@ declare class EasyCMS<C extends Config = Config> {
1214
1275
  }>;
1215
1276
  /** Public URL of a stored file. */
1216
1277
  mediaURL(key: string): string;
1278
+ /**
1279
+ * A link to a private file that works without signing in until it expires: `expiresIn` in
1280
+ * seconds or as `'30m'`, `'1h'` (the default), `'7d'` (the most). Public files get their usual
1281
+ * URL. `size`: one of the file's resized copies. Links stop working when `secret` changes or
1282
+ * the file stops being private.
1283
+ */
1284
+ signedMediaURL(doc: {
1285
+ filename?: unknown;
1286
+ private?: unknown;
1287
+ sizes?: unknown;
1288
+ }, options?: {
1289
+ expiresIn?: number | string;
1290
+ size?: string;
1291
+ }): string;
1292
+ /** Whether a signed link to a private file is genuine and not expired. */
1293
+ verifyMediaSignature(key: string, expires: string | null, signature: string | null): boolean;
1294
+ private mediaSignature;
1295
+ /**
1296
+ * How many documents use any of these files in a top-level upload field (rich text and fields
1297
+ * inside groups, arrays and blocks are not counted). Drafts count too.
1298
+ */
1299
+ mediaUsage(ids: readonly ID[]): Promise<number>;
1300
+ /** The storage for public files, or for private ones. */
1301
+ storageFor(isPrivate: boolean): StorageAdapter;
1302
+ /**
1303
+ * Copies a file and its resized copies to the other storage under their new names (`.private`
1304
+ * added or removed). Returns the fields to save, and `cleanUp` to delete the old copies once
1305
+ * the document points to the new ones.
1306
+ */
1307
+ private relocate;
1308
+ /** A folder's name, parent and permissions; private only with somewhere private to keep files. */
1309
+ private validateFolder;
1310
+ /** After a folder became private or public (or moved): its files follow, in every subfolder. */
1311
+ private settlePrivacy;
1312
+ /** Files at the top level are public. */
1313
+ private settleTopLevel;
1314
+ private settleFiles;
1217
1315
  update<S extends Slug<C>>(collection: S, id: ID, data: Update<C, S>, options?: UpdateOptions): Promise<Doc<C, S>>;
1218
1316
  /**
1219
1317
  * Takes a document off the site: its status becomes `draft`. With versions and drafts, a plain
@@ -1600,6 +1698,14 @@ interface UploadField extends BaseField<'upload', never> {
1600
1698
  * offers only these, and saving refuses others.
1601
1699
  */
1602
1700
  readonly mimeTypes?: readonly string[];
1701
+ /**
1702
+ * With `upload.folders`: the `key` of the media folder this field's files go in, e.g.
1703
+ * `'banners'`. Its picker opens there and its uploads land there; the folder is made when it
1704
+ * is first needed.
1705
+ */
1706
+ readonly folder?: string;
1707
+ /** With `folder`: only files in that folder (and its subfolders) may be chosen. */
1708
+ readonly folderOnly?: boolean;
1603
1709
  }
1604
1710
  interface FilterOptionsArgs {
1605
1711
  /** The document being edited; `undefined` while it is being created. */
@@ -2248,6 +2354,13 @@ interface UploadConfig {
2248
2354
  * `auth.rbac`, admins can also choose which roles see and change each folder. Off by default.
2249
2355
  */
2250
2356
  readonly folders?: boolean;
2357
+ /**
2358
+ * Where files in private folders are kept: never served publicly, only through the API to
2359
+ * users who may see them or with `cms.signedMediaURL()`. Default: `storage`, when it has no
2360
+ * public URL (the local disk, Netlify Blobs); a storage with public URLs (S3 with `publicUrl`,
2361
+ * a public Vercel Blob store) needs one, e.g. `vercelBlobStorage({ access: 'private' })`.
2362
+ */
2363
+ readonly privateStorage?: StorageAdapter;
2251
2364
  }
2252
2365
  interface RoutesConfig {
2253
2366
  /** Where the REST API is served. Default `/api/cms`. */
@@ -2507,7 +2620,7 @@ interface ResolvedConfig extends Omit<Config, 'cors' | 'localization' | 'routes'
2507
2620
  readonly localization: Required<LocalizationConfig> | null;
2508
2621
  readonly routes: Required<RoutesConfig>;
2509
2622
  readonly admin: Required<AdminConfig>;
2510
- readonly upload: Required<Omit<UploadConfig, 'storage' | 'fromURL'>> & Pick<UploadConfig, 'storage' | 'fromURL'>;
2623
+ readonly upload: Required<Omit<UploadConfig, 'storage' | 'fromURL' | 'privateStorage'>> & Pick<UploadConfig, 'storage' | 'fromURL' | 'privateStorage'>;
2511
2624
  readonly auth: Required<AuthConfig>;
2512
2625
  /** `false` without an audit log. */
2513
2626
  readonly audit: Required<AuditConfig> | false;
@@ -2536,6 +2649,11 @@ type ApiKeyGlobalOperation = (typeof API_KEY_GLOBAL_OPERATIONS)[number];
2536
2649
  interface ApiKeyPermissions {
2537
2650
  readonly collections?: Readonly<Record<string, readonly ApiKeyOperation[]>>;
2538
2651
  readonly globals?: Readonly<Record<string, readonly ApiKeyGlobalOperation[]>>;
2652
+ /**
2653
+ * With `upload.folders`: the media folders (ids) the key may use, with their subfolders. Empty
2654
+ * or missing: every folder.
2655
+ */
2656
+ readonly folders?: readonly (string | number)[];
2539
2657
  }
2540
2658
  /** Set on `AuthUser.apiKey` when a request authenticated with an API key. */
2541
2659
  interface ApiKeyContext {
@@ -2662,6 +2780,8 @@ interface Reference {
2662
2780
  readonly filterOptions?: FilterOptions;
2663
2781
  /** The upload's `mimeTypes`, checked when saving. */
2664
2782
  readonly mimeTypes?: readonly string[];
2783
+ /** The upload's `folder` with `folderOnly`: the file must be in it, checked when saving. */
2784
+ readonly folderOnly?: string;
2665
2785
  }
2666
2786
  interface ValidateOptions {
2667
2787
  readonly operation: 'create' | 'update';
@@ -2705,9 +2825,20 @@ declare function loadConfig(options?: LoadConfigOptions): Promise<ResolvedConfig
2705
2825
 
2706
2826
  /** File types Easy CMS recognizes from their contents (FR-UPL-03). */
2707
2827
  declare const EXTENSIONS: Readonly<Record<string, string>>;
2708
- /** Detects the MIME type from file contents, ignoring the name the client sent. */
2709
- declare function sniffMimeType(data: Uint8Array): string | undefined;
2710
- /** `image/*` style matching. */
2828
+ /**
2829
+ * Names for several types at once, usable in `upload.mimeTypes` and an upload field's
2830
+ * `mimeTypes`: `documents` (PDF, Word, Excel, PowerPoint, OpenDocument, CSV, text), `office`
2831
+ * (docx, xlsx, pptx) and `archives` (zip).
2832
+ */
2833
+ declare const MIME_GROUPS: Readonly<Record<string, readonly string[]>>;
2834
+ /** Patterns with group names (`documents`…) replaced by their types. */
2835
+ declare function expandMimeTypes(patterns: readonly string[]): string[];
2836
+ /**
2837
+ * Detects the MIME type from file contents, ignoring the type the client sent. The name only
2838
+ * tells CSV from plain text, which have the same contents.
2839
+ */
2840
+ declare function sniffMimeType(data: Uint8Array, name?: string): string | undefined;
2841
+ /** `image/*` style matching; group names (`documents`…) stand for their types. */
2711
2842
  declare function mimeAllowed(type: string, allowed: readonly string[]): boolean;
2712
2843
  /** Width and height of PNG, GIF, JPEG and WebP images without decoding them. */
2713
2844
  declare function imageDimensions(data: Uint8Array, type: string): {
@@ -2834,6 +2965,11 @@ interface AdminField {
2834
2965
  to?: string;
2835
2966
  /** An upload's allowed file types, e.g. `image/*`. */
2836
2967
  mimeTypes?: string[];
2968
+ /** An upload's media folder (`folder`): where its picker opens; `only`: nowhere else. */
2969
+ folder?: {
2970
+ id: ID;
2971
+ only: boolean;
2972
+ };
2837
2973
  /** A relationship with `filterOptions`: the picker asks the server which documents fit. */
2838
2974
  filtered?: boolean;
2839
2975
  from?: string;
@@ -2949,12 +3085,18 @@ interface AdminSchema {
2949
3085
  modules: string[];
2950
3086
  /** Files can be uploaded from links (`upload.fromURL`). */
2951
3087
  uploadFromURL: boolean;
3088
+ /** What the media library takes (`upload.maxFileSize`, `upload.mimeTypes` with groups expanded). */
3089
+ upload: {
3090
+ maxFileSize: number;
3091
+ mimeTypes: string[];
3092
+ };
2952
3093
  /**
2953
3094
  * The media library has folders (`upload.folders`); `permissions`: this user may choose which
2954
3095
  * roles use each folder (admins, with `auth.rbac`).
2955
3096
  */
2956
3097
  folders?: {
2957
3098
  permissions: boolean;
3099
+ private: boolean;
2958
3100
  };
2959
3101
  /** Which saved deliveries the admin can show (webhooks, emails), for users who may see them. */
2960
3102
  deliveries?: {
@@ -3089,4 +3231,4 @@ declare function validateConfig(config: Config): ConfigIssue[];
3089
3231
  /** The version of `@easy-cms/core`, set when the package is built. */
3090
3232
  declare const VERSION: string;
3091
3233
 
3092
- export { ADMIN_ICONS, API_KEYS, API_KEY_GLOBAL_OPERATIONS, API_KEY_OPERATIONS, type Access, type AccessArgs, type AccessOptions, type AdminAttention, type AdminBackup, type AdminBackups, type AdminBrand, type AdminCollection, type AdminComponent, type AdminComponentRef, type AdminConfig, type AdminDeliveries, type AdminDelivery, type AdminEmail, type AdminEmailDelivery, type AdminField, type AdminGlobal, type AdminIcon, type AdminLocale, type AdminPage, type AdminPageRef, type AdminRole, type AdminRoleChange, type AdminRoleField, type AdminRoleTarget, type AdminRoleView, type AdminRoles, type AdminSchema, type AdminSso, type AdminStatus, type AdminViewAccess, type AdminWebhookDelivery, type AdminWidgetRef, type AfterChangeHook, type AfterDeleteHook, type AfterReadHook, type ApiKeyContext, type ApiKeyGlobalOperation, type ApiKeyOperation, type ApiKeyPermissions, type ArrayField, type AuditChange, type AuditConfig, type AuditEntry, AuditLog, type AuditPage, type AuditVerification, Auth, type AuthConfig, type AuthProvider, type AuthProviderProfile, type AuthProviderRequest, type AuthUser, BUILTIN_COLLECTIONS, type BackupState, type BackupsConfig, type BeforeChangeHook, type BeforeDeleteHook, type BeforeValidateHook, type Block, type BlocksField, type BooleanField, type BuiltinApiKeysCollection, type BuiltinMediaCollection, type BuiltinUsersCollection, type BundleHints, CONFIG_FILE_NAMES, CSRF_COOKIE, CSRF_HEADER, type CliCommand, type CollectionAccess, type CollectionAdmin, type CollectionConfig, type CollectionDocument, type CollectionHooks, type CollectionListAdmin, type CollectionSlug, type Config, ConfigError, type ConfigIssue, type ContainerAdmin, type CopyProgress, type CopyResult, type CreateEasyCMSOptions, type CreateInput, type CreateMigrationResult, type CustomField, type CustomFieldTypes, DEFAULT_ADMIN_PATH, DEFAULT_API_PATH, DEFAULT_DEPTH, DEFAULT_MAX_FILE_SIZE, DEFAULT_MAX_VERSIONS, DEFAULT_PASSWORD_EMAILS, DEFAULT_TOKEN_EXPIRATION, type DashboardWidget, type Database, type DatabaseAdapter, type DatabaseInitArgs, type DatabaseTransfer, type DateField, type DeliveryKind, type DeliveryState, type DepthOptions, type DocumentOf, EXTENSIONS, EasyCMS, EasyCMSError, type EmailAdapter, type EmailCheck, type EmailField, type EmailMessage, type EmailSetting, type Endpoint, type EndpointRequest, FIELD_TYPES, FIELD_TYPE_BASES, FOLDER_LEVELS, type Field, type FieldAccess, type FieldAccessFn, type FieldAdmin, type FieldError, type FieldRule, type FieldType, type FieldTypeBase, type FieldTypeDefinition, type FieldTypeValidateContext, type FieldValidate, type FieldValidateContext, type FieldValue, type FieldsInput, type FieldsValue, type FilterOptions, type FilterOptionsArgs, type FindArgs, type FindOptions, type FolderLevel, type FolderPermissions, ForbiddenError, type GlobalAccess, type GlobalConfig, type GlobalDocument, type GlobalHooks, type GlobalInput, type GlobalSlug, type GroupField, type ID, INTERNAL_COLLECTIONS, type ImageSize, type InferCollection, type InferGlobal, type JsonField, type Label, type LivePreview, type LoadConfigOptions, type LocalStorageOptions, type LocalizationConfig, type Logger, type LoginArgs, MAX_DEPTH, MEDIA, MEDIA_FOLDERS, MIN_PASSWORD_LENGTH, MIN_SECRET_LENGTH, type MediaDocument, MediaFolders, type MediaSize, type MigrationInfo, NotFoundError, type NumberField, type Operation, type PaginatedDocs, type PasswordEmail, type PasswordEmailArgs, type PasswordEmailFn, type PasswordLinkOptions, PayloadTooLargeError, type Plugin, type PluginInfo, type PluginTypes, type PreviewTarget, type PreviewURL, QueryError, ROLE_OPERATIONS, type RawDocument, type ReadOptions, type RelationshipField, type ResolvedConfig, type RestHandler, type RestHandlerOptions, type RichTextDocument, type RichTextField, type Role, type RoleOperation, type RolePermissions, Roles, type RoutesConfig, SESSION_COOKIE, SSO_COOKIE, type ScheduledJob, SchemaError, type SchemaMode, type SelectField, type SelectOption, type Session, type SlugField, type SlugOf, type SsoOutcome, type SsoProviderRef, type StorageAdapter, type StoredFile, type TextField, type TextareaField, TooManyRequestsError, type TypedPlugin, UnauthorizedError, type UpdateInput, type UpdateOptions, type UploadConfig, type UploadField, type UploadFromURLConfig, type UserIdentity, VERSION, ValidationError, type Version, type VersionSummary, type VersionsConfig, WEBHOOK_EVENTS, type WebhookConfig, type WebhookEvent, type WebhookPayload, type Where, type WhereOperators, anyone, applyDefaults, applyPlugins, configSignature, consoleEmail, consoleLogger, copyDatabase, createEasyCMS, createRestHandler, createRootEndpointHandler, defineConfig, defineFieldType, definePlugin, fillMissing, findConfigFile, generateSlugs, generateTypes, hasRows, hashPassword, imageDimensions, importConfig, isAdmin, isHasMany, isLoggedIn, keyAllows, loadConfig, localStorage, mergeForUpdate, mimeAllowed, mimeAllowedBy, parseId, populate, readCookie, resolveAdminModule, resolveConfig, rowFields, silentLogger, singularize, slugify, sniffMimeType, validateConfig, validateFields, verifyPassword, writeBackupFile };
3234
+ export { ADMIN_ICONS, API_KEYS, API_KEY_GLOBAL_OPERATIONS, API_KEY_OPERATIONS, type Access, type AccessArgs, type AccessOptions, type AdminAttention, type AdminBackup, type AdminBackups, type AdminBrand, type AdminCollection, type AdminComponent, type AdminComponentRef, type AdminConfig, type AdminDeliveries, type AdminDelivery, type AdminEmail, type AdminEmailDelivery, type AdminField, type AdminGlobal, type AdminIcon, type AdminLocale, type AdminPage, type AdminPageRef, type AdminRole, type AdminRoleChange, type AdminRoleField, type AdminRoleTarget, type AdminRoleView, type AdminRoles, type AdminSchema, type AdminSso, type AdminStatus, type AdminViewAccess, type AdminWebhookDelivery, type AdminWidgetRef, type AfterChangeHook, type AfterDeleteHook, type AfterReadHook, type ApiKeyContext, type ApiKeyGlobalOperation, type ApiKeyOperation, type ApiKeyPermissions, type ArrayField, type AuditChange, type AuditConfig, type AuditEntry, AuditLog, type AuditPage, type AuditVerification, Auth, type AuthConfig, type AuthProvider, type AuthProviderProfile, type AuthProviderRequest, type AuthUser, BUILTIN_COLLECTIONS, type BackupState, type BackupsConfig, type BeforeChangeHook, type BeforeDeleteHook, type BeforeValidateHook, type Block, type BlocksField, type BooleanField, type BuiltinApiKeysCollection, type BuiltinMediaCollection, type BuiltinMediaFoldersCollection, type BuiltinUsersCollection, type BundleHints, CONFIG_FILE_NAMES, CSRF_COOKIE, CSRF_HEADER, type CliCommand, type CollectionAccess, type CollectionAdmin, type CollectionConfig, type CollectionDocument, type CollectionHooks, type CollectionListAdmin, type CollectionSlug, type Config, ConfigError, type ConfigIssue, type ContainerAdmin, type CopyProgress, type CopyResult, type CreateEasyCMSOptions, type CreateInput, type CreateMigrationResult, type CustomField, type CustomFieldTypes, DEFAULT_ADMIN_PATH, DEFAULT_API_PATH, DEFAULT_DEPTH, DEFAULT_MAX_FILE_SIZE, DEFAULT_MAX_VERSIONS, DEFAULT_PASSWORD_EMAILS, DEFAULT_TOKEN_EXPIRATION, type DashboardWidget, type Database, type DatabaseAdapter, type DatabaseInitArgs, type DatabaseTransfer, type DateField, type DeliveryKind, type DeliveryState, type DepthOptions, type DocumentOf, EXTENSIONS, EasyCMS, EasyCMSError, type EmailAdapter, type EmailCheck, type EmailField, type EmailMessage, type EmailSetting, type Endpoint, type EndpointRequest, FIELD_TYPES, FIELD_TYPE_BASES, FOLDER_LEVELS, type Field, type FieldAccess, type FieldAccessFn, type FieldAdmin, type FieldError, type FieldRule, type FieldType, type FieldTypeBase, type FieldTypeDefinition, type FieldTypeValidateContext, type FieldValidate, type FieldValidateContext, type FieldValue, type FieldsInput, type FieldsValue, type FilterOptions, type FilterOptionsArgs, type FindArgs, type FindOptions, type FolderLevel, type FolderPermissions, ForbiddenError, type GlobalAccess, type GlobalConfig, type GlobalDocument, type GlobalHooks, type GlobalInput, type GlobalSlug, type GroupField, type ID, INTERNAL_COLLECTIONS, type ImageSize, type InferCollection, type InferGlobal, type JsonField, type Label, type LivePreview, type LoadConfigOptions, type LocalStorageOptions, type LocalizationConfig, type Logger, type LoginArgs, MAX_DEPTH, MEDIA, MEDIA_FOLDERS, MIME_GROUPS, MIN_PASSWORD_LENGTH, MIN_SECRET_LENGTH, type MediaDocument, MediaFolders, type MediaSize, type MigrationInfo, NotFoundError, type NumberField, type Operation, type PaginatedDocs, type PasswordEmail, type PasswordEmailArgs, type PasswordEmailFn, type PasswordLinkOptions, PayloadTooLargeError, type Plugin, type PluginInfo, type PluginTypes, type PreviewTarget, type PreviewURL, QueryError, ROLE_OPERATIONS, type RawDocument, type ReadOptions, type RelationshipField, type ResolvedConfig, type RestHandler, type RestHandlerOptions, type RichTextDocument, type RichTextField, type Role, type RoleOperation, type RolePermissions, Roles, type RoutesConfig, SESSION_COOKIE, SSO_COOKIE, type ScheduledJob, SchemaError, type SchemaMode, type SelectField, type SelectOption, type Session, type SlugField, type SlugOf, type SsoOutcome, type SsoProviderRef, type StorageAdapter, type StoredFile, type TextField, type TextareaField, TooManyRequestsError, type TypedPlugin, UnauthorizedError, type UpdateInput, type UpdateOptions, type UploadConfig, type UploadField, type UploadFromURLConfig, type UserIdentity, VERSION, ValidationError, type Version, type VersionSummary, type VersionsConfig, WEBHOOK_EVENTS, type WebhookConfig, type WebhookEvent, type WebhookPayload, type Where, type WhereOperators, anyone, applyDefaults, applyPlugins, configSignature, consoleEmail, consoleLogger, copyDatabase, createEasyCMS, createRestHandler, createRootEndpointHandler, defineConfig, defineFieldType, definePlugin, expandMimeTypes, fillMissing, findConfigFile, generateSlugs, generateTypes, hasRows, hashPassword, imageDimensions, importConfig, isAdmin, isHasMany, isLoggedIn, keyAllows, loadConfig, localStorage, mergeForUpdate, mimeAllowed, mimeAllowedBy, parseId, populate, readCookie, resolveAdminModule, resolveConfig, rowFields, silentLogger, singularize, slugify, sniffMimeType, validateConfig, validateFields, verifyPassword, writeBackupFile };