@easy-cms/core 0.39.0 → 0.41.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.
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,35 @@ 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 privacy each folder of a subtree would have after a change to its top folder: made
1052
+ * private or public, moved, or (as `private: false`) deleted with its contents moving up.
1053
+ */
1054
+ privacyAfter(id: ID, change: {
1055
+ private?: boolean;
1056
+ parent?: ID | null;
1057
+ }): Promise<{
1058
+ id: ID;
1059
+ private: boolean;
1060
+ }[]>;
1061
+ /**
1062
+ * The folder with this key (`folder: 'banners'` on upload fields), made at the top level when
1063
+ * there is none yet.
1064
+ */
1065
+ keyed(key: string): Promise<ID>;
1066
+ /** Whether a file in `folder` is in the folder with this key, or below it. */
1067
+ inKeyed(key: string, folder: ID | null): Promise<boolean>;
1001
1068
  /** The user's level in a folder (`null`: the top level). */
1002
1069
  level(user: AuthUser | null, id: ID | null): Promise<FolderLevel | 'none'>;
1003
1070
  /**
@@ -1047,6 +1114,28 @@ interface StorageAdapter {
1047
1114
  * (`<api>/media/file/<key>`), as the local adapter does.
1048
1115
  */
1049
1116
  url?(key: string): string | undefined;
1117
+ /**
1118
+ * Lets a browser send a file straight to the storage (large files, past a host's request
1119
+ * limit): where to send it and how. The URL must work for `expiresIn` seconds and accept at
1120
+ * most `size` bytes. Without it, files are uploaded through the server.
1121
+ */
1122
+ uploadURL?(key: string, options: {
1123
+ contentType: string;
1124
+ size: number;
1125
+ expiresIn: number;
1126
+ }): Promise<DirectUpload>;
1127
+ /**
1128
+ * The first `bytes` of a file and its whole size, without reading it all (to check a file
1129
+ * uploaded straight to the storage); `null` when there is no such file. Default: `get`.
1130
+ */
1131
+ getStart?(key: string, bytes: number): Promise<StoredFile | null>;
1132
+ }
1133
+ /** Where and how a browser sends a file straight to the storage (`StorageAdapter.uploadURL`). */
1134
+ interface DirectUpload {
1135
+ readonly url: string;
1136
+ readonly method: 'PUT' | 'POST';
1137
+ /** Headers to send with the file. */
1138
+ readonly headers: Readonly<Record<string, string>>;
1050
1139
  }
1051
1140
  interface LocalStorageOptions {
1052
1141
  /** Directory, relative to the project root. Default `uploads`. */
@@ -1165,6 +1254,11 @@ declare class EasyCMS<C extends Config = Config> {
1165
1254
  readonly auth: Auth;
1166
1255
  /** Where uploaded files are stored. */
1167
1256
  readonly storage: StorageAdapter;
1257
+ /**
1258
+ * Where files in private folders are stored (`upload.privateStorage`, else `storage` when it has
1259
+ * no public URLs); `null` when private folders can't be used.
1260
+ */
1261
+ readonly privateStorage: StorageAdapter | null;
1168
1262
  /** Project root: relative paths in the config (e.g. `admin.modules`) start here. */
1169
1263
  readonly cwd: string;
1170
1264
  /** Roles and their permissions (`auth.rbac`, Settings → Roles). */
@@ -1176,7 +1270,7 @@ declare class EasyCMS<C extends Config = Config> {
1176
1270
  private readonly versions;
1177
1271
  private readonly webhooks;
1178
1272
  private readonly mailer;
1179
- constructor(config: ResolvedConfig, db: Database, logger?: Logger, storage?: StorageAdapter, cwd?: string);
1273
+ constructor(config: ResolvedConfig, db: Database, logger?: Logger, storage?: StorageAdapter, cwd?: string, privateStorage?: StorageAdapter | null);
1180
1274
  find<S extends Slug<C>>(collection: S, options?: FindOptions): Promise<PaginatedDocs<Doc<C, S>>>;
1181
1275
  findById<S extends Slug<C>>(collection: S, id: ID, options?: ReadOptions): Promise<Doc<C, S> | null>;
1182
1276
  count<S extends Slug<C>>(collection: S, options?: {
@@ -1193,6 +1287,32 @@ declare class EasyCMS<C extends Config = Config> {
1193
1287
  data: Uint8Array;
1194
1288
  name: string;
1195
1289
  }, data?: Record<string, unknown>, options?: DepthOptions): Promise<MediaDocument>;
1290
+ /**
1291
+ * Starts an upload straight to the storage, for files too large to send through the server
1292
+ * (`POST <api>/media/uploads`): checks who uploads what where, as `upload()` does, and returns
1293
+ * a signed ticket and where to send the file. `upload` is `null` when the storage can't take
1294
+ * files directly: send it to `upload()` instead. Then `completeUpload(ticket)`.
1295
+ */
1296
+ createUpload(file: {
1297
+ name: string;
1298
+ size: number;
1299
+ type?: string;
1300
+ }, data?: Record<string, unknown>, options?: AccessOptions): Promise<{
1301
+ ticket: string;
1302
+ upload: DirectUpload | null;
1303
+ }>;
1304
+ /**
1305
+ * Finishes an upload made with `createUpload()` (`POST <api>/media/uploads/complete`): checks
1306
+ * the file in the storage like any upload (its size, and its type from its contents), then
1307
+ * makes its media document. A file that fails is deleted.
1308
+ */
1309
+ completeUpload(ticket: string, options?: DepthOptions): Promise<MediaDocument>;
1310
+ /** Who may upload, and into which folder: `upload()` and direct uploads. */
1311
+ private checkUpload;
1312
+ /** A value with its HMAC (`secret`), for `purpose` only: `<base64url JSON>.<signature>`. */
1313
+ private sign;
1314
+ /** The value of a token made by `sign`, or `undefined` when it isn't genuine. */
1315
+ private verify;
1196
1316
  /**
1197
1317
  * Downloads a file from an `http(s)` link and uploads it like `upload()`. Private network
1198
1318
  * addresses are refused unless `upload.fromURL.allowPrivate`. Calls on behalf of a user (the
@@ -1214,6 +1334,48 @@ declare class EasyCMS<C extends Config = Config> {
1214
1334
  }>;
1215
1335
  /** Public URL of a stored file. */
1216
1336
  mediaURL(key: string): string;
1337
+ /**
1338
+ * A link to a private file that works without signing in until it expires: `expiresIn` in
1339
+ * seconds or as `'30m'`, `'1h'` (the default), `'7d'` (the most). Public files get their usual
1340
+ * URL. `size`: one of the file's resized copies. Links stop working when `secret` changes or
1341
+ * the file stops being private.
1342
+ */
1343
+ signedMediaURL(doc: {
1344
+ filename?: unknown;
1345
+ private?: unknown;
1346
+ sizes?: unknown;
1347
+ }, options?: {
1348
+ expiresIn?: number | string;
1349
+ size?: string;
1350
+ }): string;
1351
+ /** Whether a signed link to a private file is genuine and not expired. */
1352
+ verifyMediaSignature(key: string, expires: string | null, signature: string | null): boolean;
1353
+ private mediaSignature;
1354
+ /**
1355
+ * How many documents use any of these files in a top-level upload field (rich text and fields
1356
+ * inside groups, arrays and blocks are not counted). Drafts count too.
1357
+ */
1358
+ mediaUsage(ids: readonly ID[]): Promise<number>;
1359
+ /** The storage for public files, or for private ones. */
1360
+ storageFor(isPrivate: boolean): StorageAdapter;
1361
+ /**
1362
+ * Copies a file and its resized copies to the other storage under their new names (`.private`
1363
+ * added or removed). Returns the fields to save, and `cleanUp` to delete the old copies once
1364
+ * the document points to the new ones.
1365
+ */
1366
+ private relocate;
1367
+ /** A folder's name, parent and permissions; private only with somewhere private to keep files. */
1368
+ private validateFolder;
1369
+ /**
1370
+ * Refuses a change that would move more than 200 files between storages in one request: they
1371
+ * are copied one by one, which could outlast a serverless function.
1372
+ */
1373
+ private checkMoveLimit;
1374
+ /** After a folder became private or public (or moved): its files follow, in every subfolder. */
1375
+ private settlePrivacy;
1376
+ /** Files at the top level are public. */
1377
+ private settleTopLevel;
1378
+ private settleFiles;
1217
1379
  update<S extends Slug<C>>(collection: S, id: ID, data: Update<C, S>, options?: UpdateOptions): Promise<Doc<C, S>>;
1218
1380
  /**
1219
1381
  * Takes a document off the site: its status becomes `draft`. With versions and drafts, a plain
@@ -1600,6 +1762,14 @@ interface UploadField extends BaseField<'upload', never> {
1600
1762
  * offers only these, and saving refuses others.
1601
1763
  */
1602
1764
  readonly mimeTypes?: readonly string[];
1765
+ /**
1766
+ * With `upload.folders`: the `key` of the media folder this field's files go in, e.g.
1767
+ * `'banners'`. Its picker opens there and its uploads land there; the folder is made when it
1768
+ * is first needed.
1769
+ */
1770
+ readonly folder?: string;
1771
+ /** With `folder`: only files in that folder (and its subfolders) may be chosen. */
1772
+ readonly folderOnly?: boolean;
1603
1773
  }
1604
1774
  interface FilterOptionsArgs {
1605
1775
  /** The document being edited; `undefined` while it is being created. */
@@ -2248,6 +2418,13 @@ interface UploadConfig {
2248
2418
  * `auth.rbac`, admins can also choose which roles see and change each folder. Off by default.
2249
2419
  */
2250
2420
  readonly folders?: boolean;
2421
+ /**
2422
+ * Where files in private folders are kept: never served publicly, only through the API to
2423
+ * users who may see them or with `cms.signedMediaURL()`. Default: `storage`, when it has no
2424
+ * public URL (the local disk, Netlify Blobs); a storage with public URLs (S3 with `publicUrl`,
2425
+ * a public Vercel Blob store) needs one, e.g. `vercelBlobStorage({ access: 'private' })`.
2426
+ */
2427
+ readonly privateStorage?: StorageAdapter;
2251
2428
  }
2252
2429
  interface RoutesConfig {
2253
2430
  /** Where the REST API is served. Default `/api/cms`. */
@@ -2507,7 +2684,7 @@ interface ResolvedConfig extends Omit<Config, 'cors' | 'localization' | 'routes'
2507
2684
  readonly localization: Required<LocalizationConfig> | null;
2508
2685
  readonly routes: Required<RoutesConfig>;
2509
2686
  readonly admin: Required<AdminConfig>;
2510
- readonly upload: Required<Omit<UploadConfig, 'storage' | 'fromURL'>> & Pick<UploadConfig, 'storage' | 'fromURL'>;
2687
+ readonly upload: Required<Omit<UploadConfig, 'storage' | 'fromURL' | 'privateStorage'>> & Pick<UploadConfig, 'storage' | 'fromURL' | 'privateStorage'>;
2511
2688
  readonly auth: Required<AuthConfig>;
2512
2689
  /** `false` without an audit log. */
2513
2690
  readonly audit: Required<AuditConfig> | false;
@@ -2536,6 +2713,11 @@ type ApiKeyGlobalOperation = (typeof API_KEY_GLOBAL_OPERATIONS)[number];
2536
2713
  interface ApiKeyPermissions {
2537
2714
  readonly collections?: Readonly<Record<string, readonly ApiKeyOperation[]>>;
2538
2715
  readonly globals?: Readonly<Record<string, readonly ApiKeyGlobalOperation[]>>;
2716
+ /**
2717
+ * With `upload.folders`: the media folders (ids) the key may use, with their subfolders. Empty
2718
+ * or missing: every folder.
2719
+ */
2720
+ readonly folders?: readonly (string | number)[];
2539
2721
  }
2540
2722
  /** Set on `AuthUser.apiKey` when a request authenticated with an API key. */
2541
2723
  interface ApiKeyContext {
@@ -2662,6 +2844,8 @@ interface Reference {
2662
2844
  readonly filterOptions?: FilterOptions;
2663
2845
  /** The upload's `mimeTypes`, checked when saving. */
2664
2846
  readonly mimeTypes?: readonly string[];
2847
+ /** The upload's `folder` with `folderOnly`: the file must be in it, checked when saving. */
2848
+ readonly folderOnly?: string;
2665
2849
  }
2666
2850
  interface ValidateOptions {
2667
2851
  readonly operation: 'create' | 'update';
@@ -2845,6 +3029,11 @@ interface AdminField {
2845
3029
  to?: string;
2846
3030
  /** An upload's allowed file types, e.g. `image/*`. */
2847
3031
  mimeTypes?: string[];
3032
+ /** An upload's media folder (`folder`): where its picker opens; `only`: nowhere else. */
3033
+ folder?: {
3034
+ id: ID;
3035
+ only: boolean;
3036
+ };
2848
3037
  /** A relationship with `filterOptions`: the picker asks the server which documents fit. */
2849
3038
  filtered?: boolean;
2850
3039
  from?: string;
@@ -2971,6 +3160,7 @@ interface AdminSchema {
2971
3160
  */
2972
3161
  folders?: {
2973
3162
  permissions: boolean;
3163
+ private: boolean;
2974
3164
  };
2975
3165
  /** Which saved deliveries the admin can show (webhooks, emails), for users who may see them. */
2976
3166
  deliveries?: {
@@ -3105,4 +3295,4 @@ declare function validateConfig(config: Config): ConfigIssue[];
3105
3295
  /** The version of `@easy-cms/core`, set when the package is built. */
3106
3296
  declare const VERSION: string;
3107
3297
 
3108
- 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, 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 };
3298
+ 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 DirectUpload, 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 };