@easy-cms/core 0.63.0 → 0.64.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/{chunk-LN4M4BUP.js → chunk-JZW6G6XI.js} +47 -27
- package/dist/{chunk-FPFWLQB5.js → chunk-RTKWMVAC.js} +7 -0
- package/dist/{handler-CcQjkj5Q.d.ts → handler-CcmsrLs8.d.ts} +6 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/internal.d.ts +1 -1
- package/dist/internal.js +2 -2
- package/dist/plugin.js +1 -1
- package/package.json +1 -1
|
@@ -33,8 +33,9 @@ import {
|
|
|
33
33
|
typeFromName,
|
|
34
34
|
uniqueWithinOf,
|
|
35
35
|
warnDeprecated,
|
|
36
|
+
withCharset,
|
|
36
37
|
withPrivacy
|
|
37
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-RTKWMVAC.js";
|
|
38
39
|
|
|
39
40
|
// src/access.ts
|
|
40
41
|
var isSystemAdmin = (user) => user?.role === "admin" && !user.apiKey && user.scoped !== true;
|
|
@@ -1015,6 +1016,21 @@ async function verifyTurnstile(secretKey, response, ip, fetcher = fetch) {
|
|
|
1015
1016
|
|
|
1016
1017
|
// src/auth/cookie.ts
|
|
1017
1018
|
var SESSION_COOKIE = "ecms-session";
|
|
1019
|
+
var hostCookie = (name) => `__Host-${name}`;
|
|
1020
|
+
function cookieValue(header, name) {
|
|
1021
|
+
if (!header) return void 0;
|
|
1022
|
+
let plain;
|
|
1023
|
+
for (const part of header.split(";")) {
|
|
1024
|
+
const eq = part.indexOf("=");
|
|
1025
|
+
if (eq <= 0) continue;
|
|
1026
|
+
const key = part.slice(0, eq).trim();
|
|
1027
|
+
if (key !== name && key !== hostCookie(name)) continue;
|
|
1028
|
+
const value = decodeURIComponent(part.slice(eq + 1).trim());
|
|
1029
|
+
if (key !== name) return value;
|
|
1030
|
+
plain ??= value;
|
|
1031
|
+
}
|
|
1032
|
+
return plain;
|
|
1033
|
+
}
|
|
1018
1034
|
|
|
1019
1035
|
// src/auth/emails.ts
|
|
1020
1036
|
var esc = (value) => value.replace(
|
|
@@ -1911,12 +1927,8 @@ var Auth = class {
|
|
|
1911
1927
|
async userFromHeaders(headers) {
|
|
1912
1928
|
const authorization = headers.get("authorization");
|
|
1913
1929
|
if (authorization?.startsWith("Bearer ")) return this.verify(authorization.slice(7).trim());
|
|
1914
|
-
|
|
1915
|
-
|
|
1916
|
-
if (eq > 0 && part.slice(0, eq).trim() === SESSION_COOKIE)
|
|
1917
|
-
return this.verify(decodeURIComponent(part.slice(eq + 1).trim()));
|
|
1918
|
-
}
|
|
1919
|
-
return null;
|
|
1930
|
+
const cookie2 = cookieValue(headers.get("cookie"), SESSION_COOKIE);
|
|
1931
|
+
return cookie2 ? this.verify(cookie2) : null;
|
|
1920
1932
|
}
|
|
1921
1933
|
/**
|
|
1922
1934
|
* Returns the user for a signed session token, or for an API key (`ecms_…`, with `apiKey` set
|
|
@@ -6827,7 +6839,7 @@ var EasyCMS = class {
|
|
|
6827
6839
|
const filename = withPrivacy(storageKey(file.name, mimeType, random2), isPrivate);
|
|
6828
6840
|
const stored = [];
|
|
6829
6841
|
try {
|
|
6830
|
-
await storage.put(filename, file.data, { contentType: mimeType });
|
|
6842
|
+
await storage.put(filename, file.data, { contentType: withCharset(mimeType) });
|
|
6831
6843
|
stored.push(filename);
|
|
6832
6844
|
const dimensions = imageDimensions(file.data, mimeType);
|
|
6833
6845
|
const sizes = await this.resizeImage(
|
|
@@ -7173,7 +7185,7 @@ var EasyCMS = class {
|
|
|
7173
7185
|
const old = [String(doc.filename)];
|
|
7174
7186
|
const copy = async (source, target) => {
|
|
7175
7187
|
const file = await from.get(source);
|
|
7176
|
-
if (file) await to.put(target, file.body, { contentType });
|
|
7188
|
+
if (file) await to.put(target, file.body, { contentType: withCharset(contentType) });
|
|
7177
7189
|
};
|
|
7178
7190
|
await copy(String(doc.filename), filename);
|
|
7179
7191
|
const sizes = {};
|
|
@@ -9093,7 +9105,7 @@ async function readAdminModule(cms, index) {
|
|
|
9093
9105
|
}
|
|
9094
9106
|
|
|
9095
9107
|
// src/version.ts
|
|
9096
|
-
var VERSION = true ? "0.
|
|
9108
|
+
var VERSION = true ? "0.64.0" : "0.0.0-dev";
|
|
9097
9109
|
|
|
9098
9110
|
// src/rest/admin-deliveries.ts
|
|
9099
9111
|
var PER_PAGE = 50;
|
|
@@ -10029,7 +10041,8 @@ async function respond(cms, request, url, path, root, options, production) {
|
|
|
10029
10041
|
const headers = new Headers({
|
|
10030
10042
|
"content-type": "application/json; charset=utf-8",
|
|
10031
10043
|
"cache-control": "no-store",
|
|
10032
|
-
"x-content-type-options": "nosniff"
|
|
10044
|
+
"x-content-type-options": "nosniff",
|
|
10045
|
+
...production ? { "strict-transport-security": "max-age=31536000" } : {}
|
|
10033
10046
|
});
|
|
10034
10047
|
try {
|
|
10035
10048
|
if (path === null) throw new HttpError("Not found", 404);
|
|
@@ -10046,7 +10059,8 @@ async function respond(cms, request, url, path, root, options, production) {
|
|
|
10046
10059
|
context,
|
|
10047
10060
|
via: signedIn ? via : null,
|
|
10048
10061
|
token,
|
|
10049
|
-
headers
|
|
10062
|
+
headers,
|
|
10063
|
+
trustProxy: options.trustProxy === true
|
|
10050
10064
|
};
|
|
10051
10065
|
const method = request.method.toUpperCase();
|
|
10052
10066
|
if (method !== "GET" && method !== "HEAD") checkCsrf(cms, ctx);
|
|
@@ -10222,6 +10236,7 @@ async function route(cms, ctx, method, path, options) {
|
|
|
10222
10236
|
case "POST logout": {
|
|
10223
10237
|
if (ctx.token) await cms.auth.logout(ctx.token);
|
|
10224
10238
|
clearSessionCookies(ctx);
|
|
10239
|
+
ctx.headers.set("clear-site-data", '"cache"');
|
|
10225
10240
|
return { body: { message: "Logged out" } };
|
|
10226
10241
|
}
|
|
10227
10242
|
case "GET me": {
|
|
@@ -10916,23 +10931,17 @@ function readToken(request) {
|
|
|
10916
10931
|
return { token, via: token ? "cookie" : null };
|
|
10917
10932
|
}
|
|
10918
10933
|
function readCookie(request, name) {
|
|
10919
|
-
|
|
10920
|
-
if (!header) return void 0;
|
|
10921
|
-
for (const part of header.split(";")) {
|
|
10922
|
-
const eq = part.indexOf("=");
|
|
10923
|
-
if (eq > 0 && part.slice(0, eq).trim() === name)
|
|
10924
|
-
return decodeURIComponent(part.slice(eq + 1).trim());
|
|
10925
|
-
}
|
|
10926
|
-
return void 0;
|
|
10934
|
+
return cookieValue(request.headers.get("cookie"), name);
|
|
10927
10935
|
}
|
|
10928
|
-
function sameHost(origin, request) {
|
|
10936
|
+
function sameHost(origin, request, trustProxy) {
|
|
10929
10937
|
let host;
|
|
10930
10938
|
try {
|
|
10931
10939
|
host = new URL(origin).host;
|
|
10932
10940
|
} catch {
|
|
10933
10941
|
return false;
|
|
10934
10942
|
}
|
|
10935
|
-
const
|
|
10943
|
+
const trusted = trustProxy || !!process.env.VERCEL || !!process.env.NETLIFY;
|
|
10944
|
+
const forwarded = trusted ? request.headers.get("x-forwarded-host")?.split(",")[0]?.trim() : void 0;
|
|
10936
10945
|
return host === (forwarded || request.headers.get("host"));
|
|
10937
10946
|
}
|
|
10938
10947
|
function checkCsrf(cms, ctx) {
|
|
@@ -10940,7 +10949,7 @@ function checkCsrf(cms, ctx) {
|
|
|
10940
10949
|
const fetchSite = ctx.request.headers.get("sec-fetch-site");
|
|
10941
10950
|
const cookie2 = ctx.via === "cookie" && ctx.token !== void 0;
|
|
10942
10951
|
const { cors } = cms.config;
|
|
10943
|
-
const trusted = origin !== null && (origin === ctx.url.origin || sameHost(origin, ctx.request) || cms.config.auth.trustedOrigins.includes(origin) || !cookie2 && (cors === "*" || cors.includes(origin)));
|
|
10952
|
+
const trusted = origin !== null && (origin === ctx.url.origin || sameHost(origin, ctx.request, ctx.trustProxy) || cms.config.auth.trustedOrigins.includes(origin) || !cookie2 && (cors === "*" || cors.includes(origin)));
|
|
10944
10953
|
if (origin !== null && !trusted) throw new ForbiddenError("CSRF check failed: untrusted origin");
|
|
10945
10954
|
if (origin === null && fetchSite === "cross-site")
|
|
10946
10955
|
throw new ForbiddenError("CSRF check failed: cross-site request");
|
|
@@ -10962,7 +10971,7 @@ async function serveFile(cms, key, head) {
|
|
|
10962
10971
|
const file = await cms.storage.get(key);
|
|
10963
10972
|
if (!file) throw new HttpError("Not found", 404);
|
|
10964
10973
|
const extension = key.slice(key.lastIndexOf(".") + 1);
|
|
10965
|
-
const type = TYPE_BY_EXTENSION[extension] ?? "application/octet-stream";
|
|
10974
|
+
const type = withCharset(TYPE_BY_EXTENSION[extension] ?? "application/octet-stream");
|
|
10966
10975
|
return new Response(
|
|
10967
10976
|
head ? null : file.body,
|
|
10968
10977
|
{
|
|
@@ -11005,7 +11014,9 @@ async function servePrivateFile(cms, ctx, key, head) {
|
|
|
11005
11014
|
}
|
|
11006
11015
|
const file = await cms.privateStorage.get(key);
|
|
11007
11016
|
if (!file) throw new HttpError("Not found", 404);
|
|
11008
|
-
const type =
|
|
11017
|
+
const type = withCharset(
|
|
11018
|
+
TYPE_BY_EXTENSION[key.slice(key.lastIndexOf(".") + 1)] ?? "application/octet-stream"
|
|
11019
|
+
);
|
|
11009
11020
|
return new Response(
|
|
11010
11021
|
head ? null : file.body,
|
|
11011
11022
|
{
|
|
@@ -11116,9 +11127,14 @@ function isSecure(ctx) {
|
|
|
11116
11127
|
return ctx.url.protocol === "https:" || process.env.NODE_ENV === "production";
|
|
11117
11128
|
}
|
|
11118
11129
|
function cookie(ctx, name, value, opts) {
|
|
11119
|
-
const
|
|
11130
|
+
const secure = isSecure(ctx);
|
|
11131
|
+
const parts = [
|
|
11132
|
+
`${secure ? hostCookie(name) : name}=${encodeURIComponent(value)}`,
|
|
11133
|
+
"Path=/",
|
|
11134
|
+
"SameSite=Lax"
|
|
11135
|
+
];
|
|
11120
11136
|
if (opts.httpOnly) parts.push("HttpOnly");
|
|
11121
|
-
if (
|
|
11137
|
+
if (secure) parts.push("Secure");
|
|
11122
11138
|
if (opts.maxAge !== void 0) parts.push(`Max-Age=${opts.maxAge}`);
|
|
11123
11139
|
return parts.join("; ");
|
|
11124
11140
|
}
|
|
@@ -11197,6 +11213,9 @@ function setSessionCookies(cms, ctx, session) {
|
|
|
11197
11213
|
function clearSessionCookies(ctx) {
|
|
11198
11214
|
ctx.headers.append("set-cookie", cookie(ctx, SESSION_COOKIE, "", { httpOnly: true, maxAge: 0 }));
|
|
11199
11215
|
ctx.headers.append("set-cookie", cookie(ctx, CSRF_COOKIE, "", { httpOnly: false, maxAge: 0 }));
|
|
11216
|
+
if (isSecure(ctx))
|
|
11217
|
+
for (const name of [SESSION_COOKIE, CSRF_COOKIE])
|
|
11218
|
+
ctx.headers.append("set-cookie", `${name}=; Path=/; Max-Age=0; Secure; SameSite=Lax`);
|
|
11200
11219
|
}
|
|
11201
11220
|
function errorResponse(cms, error, headers, production) {
|
|
11202
11221
|
if (error instanceof EasyCMSError) {
|
|
@@ -11262,6 +11281,7 @@ function createApiHandler(config, options = {}) {
|
|
|
11262
11281
|
if (!handler) {
|
|
11263
11282
|
handler = createRestHandler(cms, {
|
|
11264
11283
|
getClientIp,
|
|
11284
|
+
trustProxy: options.trustProxy === true,
|
|
11265
11285
|
...options.basePath ? { basePath: options.basePath } : {}
|
|
11266
11286
|
});
|
|
11267
11287
|
handlers.set(cms, handler);
|
|
@@ -271,6 +271,12 @@ function sizeKey(filename, size) {
|
|
|
271
271
|
return filename.replace(/\.([^.]+)$/, `-${size}.$1`);
|
|
272
272
|
}
|
|
273
273
|
var PRIVATE_KEY = /^[\p{L}\p{M}\p{N}-]+\.private(-[\p{L}\p{N}_-]+)?\.[a-z0-9]+$/u;
|
|
274
|
+
function withCharset(type) {
|
|
275
|
+
if (/;\s*charset=/i.test(type)) return type;
|
|
276
|
+
const base = type.split(";")[0]?.trim().toLowerCase() ?? "";
|
|
277
|
+
const text = base.startsWith("text/") || /^application\/(json|xml|javascript|ecmascript)$/.test(base) || /\+(json|xml)$/.test(base);
|
|
278
|
+
return text ? `${type}; charset=utf-8` : type;
|
|
279
|
+
}
|
|
274
280
|
|
|
275
281
|
// src/fields.ts
|
|
276
282
|
var uniqueWithinOf = (field) => field.uniqueWithin === void 0 ? [] : [field.uniqueWithin].flat();
|
|
@@ -534,6 +540,7 @@ export {
|
|
|
534
540
|
withPrivacy,
|
|
535
541
|
sizeKey,
|
|
536
542
|
PRIVATE_KEY,
|
|
543
|
+
withCharset,
|
|
537
544
|
uniqueWithinOf,
|
|
538
545
|
isHasMany,
|
|
539
546
|
mimeAllowedBy,
|
|
@@ -172,6 +172,11 @@ interface RestHandlerOptions {
|
|
|
172
172
|
readonly basePath?: string;
|
|
173
173
|
/** Client IP, used with the email to rate-limit logins. Adapters provide it. */
|
|
174
174
|
readonly getClientIp?: (request: Request) => string | undefined;
|
|
175
|
+
/**
|
|
176
|
+
* Behind a reverse proxy you control: its `X-Forwarded-Host` names the public host (for the
|
|
177
|
+
* CSRF check of a request's Origin). Vercel and Netlify are recognized without it.
|
|
178
|
+
*/
|
|
179
|
+
readonly trustProxy?: boolean;
|
|
175
180
|
}
|
|
176
181
|
type RestHandler = (request: Request) => Promise<Response>;
|
|
177
182
|
/** Creates the REST API as a Web-standard `(Request) => Response` handler. */
|
|
@@ -183,6 +188,7 @@ declare function createRestHandler<C extends Config>(instance: EasyCMS<C>, optio
|
|
|
183
188
|
* use it; the standalone server does.
|
|
184
189
|
*/
|
|
185
190
|
declare function createRootEndpointHandler<C extends Config>(instance: EasyCMS<C>, options?: Pick<RestHandlerOptions, 'getClientIp'>): (request: Request) => Promise<Response | undefined>;
|
|
191
|
+
/** A cookie of the request; the `__Host-` one (set over HTTPS) first. */
|
|
186
192
|
declare function readCookie(request: Request, name: string): string | undefined;
|
|
187
193
|
|
|
188
194
|
export { type AdminBackup as A, type BackupState as B, CONFIG_FILE_NAMES as C, DEFAULT_ADMIN_PATH as D, validateFields as E, writeBackupFile as F, type LoadConfigOptions as L, type RestHandler as R, type AdminBackups as a, type ApiHandlerOptions as b, type RestHandlerOptions as c, createApiHandler as d, createRestHandler as e, slugify as f, CSRF_COOKIE as g, CSRF_HEADER as h, DEFAULT_API_PATH as i, DEFAULT_MAX_FILE_SIZE as j, DEFAULT_TOKEN_EXPIRATION as k, loadConfig as l, applyDefaults as m, applyPlugins as n, createRootEndpointHandler as o, fillMissing as p, findConfigFile as q, resolveConfig as r, sharedEasyCMS as s, forwardedClientIp as t, generateSlugs as u, importConfig as v, mergeForUpdate as w, parseId as x, platformClientIp as y, readCookie as z };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { P as PaginatedDocs, I as ID, E as EmailSetting } from './config-Dgs6FE0S.js';
|
|
2
2
|
export { A as ADAPTER_API_VERSION, a as ADMIN_ICONS, b as Access, c as AccessArgs, d as AccessOptions, e as AdminBrand, f as AdminCommand, g as AdminComponent, h as AdminConfig, i as AdminFieldArgs, j as AdminIcon, k as AdminLocale, l as AdminPage, m as AdminRole, n as AdminRoleChange, o as AdminRoleField, p as AdminRoleTarget, q as AdminRoleView, r as AdminRoles, s as AdminSso, t as AdminSwitcher, u as AdminViewAccess, v as AfterChangeHook, w as AfterDeleteHook, x as AfterReadHook, y as ApiKeyContext, z as ApiKeyGlobalOperation, B as ApiKeyOperation, C as ApiKeyPermissions, D as ArrayField, F as AuditChange, G as AuditConfig, H as AuditEntry, J as AuditLog, K as AuditPage, L as AuditVerification, M as Auth, N as AuthConfig, O as AuthProvider, Q as AuthProviderProfile, R as AuthProviderRequest, S as AuthUser, T as BackupsConfig, U as BeforeChangeHook, V as BeforeDeleteHook, W as BeforeValidateHook, X as Block, Y as BlocksField, Z as BooleanField, _ as BuiltinApiKeysCollection, $ as BuiltinMediaCollection, a0 as BuiltinMediaFoldersCollection, a1 as BuiltinUsersCollection, a2 as BundleHints, a3 as CliCommand, a4 as CollectionAccess, a5 as CollectionAdmin, a6 as CollectionConfig, a7 as CollectionDocument, a8 as CollectionHooks, a9 as CollectionListAdmin, aa as CollectionSlug, ab as Config, ac as ConfigError, ad as ConfigIssue, ae as ContainerAdmin, af as CreateEasyCMSOptions, ag as CreateInput, ah as CreateMigrationResult, ai as CustomField, aj as CustomFieldTypes, ak as DashboardWidget, al as Database, am as DatabaseAdapter, an as DatabaseInitArgs, ao as DatabaseTransfer, ap as DateField, aq as DepthOptions, ar as DirectUpload, as as DiskStorageOptions, at as DocumentOf, au as EasyCMS, av as EasyCMSError, aw as EmailAdapter, ax as EmailField, ay as EmailMessage, az as Endpoint, aA as EndpointRequest, aB as ErrorCode, aC as FIELD_TYPES, aD as Field, aE as FieldAccess, aF as FieldAccessFn, aG as FieldAdmin, aH as FieldError, aI as FieldRule, aJ as FieldType, aK as FieldTypeBase, aL as FieldTypeDefinition, aM as FieldTypeValidateContext, aN as FieldValidate, aO as FieldValidateContext, aP as FieldValue, aQ as FieldsInput, aR as FieldsValue, aS as FilterOptions, aT as FilterOptionsArgs, aU as FindArgs, aV as FindOptions, aW as FolderLevel, aX as FolderPermissions, aY as ForbiddenError, aZ as GlobalAccess, a_ as GlobalConfig, a$ as GlobalDocument, b0 as GlobalHooks, b1 as GlobalInput, b2 as GlobalSlug, b3 as GroupField, b4 as ImageSize, b5 as IncrementOptions, b6 as InferCollection, b7 as InferGlobal, b8 as JobConfig, b9 as JsonField, ba as Label, bb as LayoutNode, bc as LivePreview, bd as LocalizationConfig, be as Logger, bf as LoginArgs, bg as MediaDocument, bh as MediaSize, bi as MembersConfig, bj as MembersSignup, bk as MigrationInfo, bl as NavGroup, bm as NotFoundError, bn as NumberField, bo as OnRequest, bp as OnRequestArgs, bq as Operation, br as PLUGIN_API_VERSION, bs as PasswordEmail, bt as PasswordEmailArgs, bu as PasswordEmailFn, bv as PasswordLinkOptions, bw as PayloadTooLargeError, bx as Plugin, by as PluginInfo, bz as PluginTypes, bA as PreviewTarget, bB as PreviewURL, bC as QueryError, bD as ROLE_OPERATIONS, bE as RawDocument, bF as ReadOptions, bG as RelationshipField, bH as RequestContext, bI as ResolvedConfig, bJ as RichTextDocument, bK as RichTextField, bL as Role, bM as RoleOperation, bN as RolePermissions, bO as Roles, bP as RoutesConfig, bQ as ScheduledPublish, bR as SchemaError, bS as SchemaMode, bT as SelectField, bU as SelectOption, bV as Session, bW as SidebarPanel, bX as SignupArgs, bY as SignupResult, bZ as SingleSignOn, b_ as SlugField, b$ as SlugOf, c0 as SsoOutcome, c1 as SsoProviderRef, c2 as StorageAdapter, c3 as StoredFile, c4 as TextField, c5 as TextareaField, c6 as TooManyRequestsError, c7 as TypedPlugin, c8 as UnauthorizedError, c9 as UpdateInput, ca as UpdateOptions, cb as UploadConfig, cc as UploadField, cd as UploadFromURLConfig, ce as UserIdentity, cf as ValidationError, cg as Version, ch as VersionSummary, ci as VersionsConfig, cj as WEBHOOK_EVENTS, ck as WebhookConfig, cl as WebhookEvent, cm as WebhookPayload, cn as Where, co as WhereOperators, cp as anyone, cq as consoleEmail, cr as consoleLogger, cs as createEasyCMS, ct as defineConfig, cu as defineFieldType, cv as definePlugin, cw as diskStorage, cx as hasRows, cy as isAdmin, cz as isHasMany, cA as isSignedIn, cB as isStaff, cC as isSystemAdmin, cD as mimeAllowedBy, cE as rowFields, cF as silentLogger, cG as uniqueWithinOf } from './config-Dgs6FE0S.js';
|
|
3
3
|
export { A as ADMIN_API_VERSION, a as AdminCollection, b as AdminComponentRef, c as AdminElementProps, d as AdminField, e as AdminGlobal, f as AdminLayoutNode, g as AdminNavGroup, h as AdminNavItem, i as AdminNavNode, j as AdminPageRef, k as AdminPageRoute, l as AdminSchema, m as AdminWidgetRef, S as SetFieldDetail, w as warnDeprecated } from './plugin-8hrkYMuR.js';
|
|
4
|
-
export { A as AdminBackup, a as AdminBackups, b as ApiHandlerOptions, B as BackupState, L as LoadConfigOptions, R as RestHandler, c as RestHandlerOptions, d as createApiHandler, e as createRestHandler, l as loadConfig, r as resolveConfig, s as sharedEasyCMS, f as slugify } from './handler-
|
|
4
|
+
export { A as AdminBackup, a as AdminBackups, b as ApiHandlerOptions, B as BackupState, L as LoadConfigOptions, R as RestHandler, c as RestHandlerOptions, d as createApiHandler, e as createRestHandler, l as loadConfig, r as resolveConfig, s as sharedEasyCMS, f as slugify } from './handler-CcmsrLs8.js';
|
|
5
5
|
export { FieldCondition, matchesCondition } from './conditions.js';
|
|
6
6
|
|
|
7
7
|
type DeliveryKind = 'webhook' | 'email';
|
package/dist/index.js
CHANGED
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
sharedEasyCMS,
|
|
24
24
|
silentLogger,
|
|
25
25
|
slugify
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-JZW6G6XI.js";
|
|
27
27
|
import {
|
|
28
28
|
matchesCondition
|
|
29
29
|
} from "./chunk-U266LV4M.js";
|
|
@@ -48,7 +48,7 @@ import {
|
|
|
48
48
|
defineFieldType,
|
|
49
49
|
definePlugin,
|
|
50
50
|
warnDeprecated
|
|
51
|
-
} from "./chunk-
|
|
51
|
+
} from "./chunk-RTKWMVAC.js";
|
|
52
52
|
export {
|
|
53
53
|
ADAPTER_API_VERSION,
|
|
54
54
|
ADMIN_API_VERSION,
|
package/dist/internal.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ab as Config, al as Database, bl as NavGroup, a6 as CollectionConfig, I as ID, bE as RawDocument, aD as Field, bI as ResolvedConfig, ad as ConfigIssue } from './config-Dgs6FE0S.js';
|
|
2
2
|
export { cH as API_KEYS, cI as API_KEY_GLOBAL_OPERATIONS, cJ as API_KEY_OPERATIONS, cK as DEFAULT_MAX_VERSIONS, cL as DEFAULT_PASSWORD_EMAILS, cM as FIELD_TYPE_BASES, cN as FOLDER_LEVELS, cO as MediaFolders, cP as SSO_COOKIE, cQ as codeOfStatus, cx as hasRows, cz as isHasMany, cR as keyAllows, cD as mimeAllowedBy, cE as rowFields, cG as uniqueWithinOf } from './config-Dgs6FE0S.js';
|
|
3
|
-
export { C as CONFIG_FILE_NAMES, g as CSRF_COOKIE, h as CSRF_HEADER, D as DEFAULT_ADMIN_PATH, i as DEFAULT_API_PATH, j as DEFAULT_MAX_FILE_SIZE, k as DEFAULT_TOKEN_EXPIRATION, m as applyDefaults, n as applyPlugins, o as createRootEndpointHandler, p as fillMissing, q as findConfigFile, t as forwardedClientIp, u as generateSlugs, v as importConfig, w as mergeForUpdate, x as parseId, y as platformClientIp, z as readCookie, E as validateFields, F as writeBackupFile } from './handler-
|
|
3
|
+
export { C as CONFIG_FILE_NAMES, g as CSRF_COOKIE, h as CSRF_HEADER, D as DEFAULT_ADMIN_PATH, i as DEFAULT_API_PATH, j as DEFAULT_MAX_FILE_SIZE, k as DEFAULT_TOKEN_EXPIRATION, m as applyDefaults, n as applyPlugins, o as createRootEndpointHandler, p as fillMissing, q as findConfigFile, t as forwardedClientIp, u as generateSlugs, v as importConfig, w as mergeForUpdate, x as parseId, y as platformClientIp, z as readCookie, E as validateFields, F as writeBackupFile } from './handler-CcmsrLs8.js';
|
|
4
4
|
export { conditionIssues } from './conditions.js';
|
|
5
5
|
|
|
6
6
|
/** The session cookie the REST API sets at login. */
|
package/dist/internal.js
CHANGED
|
@@ -52,7 +52,7 @@ import {
|
|
|
52
52
|
verifyPassword,
|
|
53
53
|
verifyTurnstile,
|
|
54
54
|
writeBackupFile
|
|
55
|
-
} from "./chunk-
|
|
55
|
+
} from "./chunk-JZW6G6XI.js";
|
|
56
56
|
import {
|
|
57
57
|
conditionIssues
|
|
58
58
|
} from "./chunk-U266LV4M.js";
|
|
@@ -70,7 +70,7 @@ import {
|
|
|
70
70
|
rowFields,
|
|
71
71
|
sniffMimeType,
|
|
72
72
|
uniqueWithinOf
|
|
73
|
-
} from "./chunk-
|
|
73
|
+
} from "./chunk-RTKWMVAC.js";
|
|
74
74
|
|
|
75
75
|
// src/typegen.ts
|
|
76
76
|
var pascal = (name) => name.split(/[^A-Za-z0-9]+/).filter(Boolean).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join("");
|
package/dist/plugin.js
CHANGED