@sonicjs-cms/core 3.0.0-beta.11 → 3.0.0-beta.12
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-ZUEIQFE5.js → chunk-ALNODOY4.js} +3 -3
- package/dist/{chunk-ZUEIQFE5.js.map → chunk-ALNODOY4.js.map} +1 -1
- package/dist/{chunk-YJEBDJDV.cjs → chunk-BYLQOBO6.cjs} +13 -13
- package/dist/{chunk-YJEBDJDV.cjs.map → chunk-BYLQOBO6.cjs.map} +1 -1
- package/dist/{chunk-3PU4WVU6.js → chunk-DMXDQ5YI.js} +4 -4
- package/dist/{chunk-3PU4WVU6.js.map → chunk-DMXDQ5YI.js.map} +1 -1
- package/dist/{chunk-6H66MSSL.js → chunk-INKP2WNU.js} +2 -2
- package/dist/{chunk-6H66MSSL.js.map → chunk-INKP2WNU.js.map} +1 -1
- package/dist/{chunk-ORF4CT74.cjs → chunk-KI5KMJH2.cjs} +2 -2
- package/dist/{chunk-ORF4CT74.cjs.map → chunk-KI5KMJH2.cjs.map} +1 -1
- package/dist/{chunk-QJNKSFDJ.cjs → chunk-LLWLHFTD.cjs} +2 -2
- package/dist/{chunk-QJNKSFDJ.cjs.map → chunk-LLWLHFTD.cjs.map} +1 -1
- package/dist/{chunk-UHRHZXVR.cjs → chunk-NYLWNR6T.cjs} +4 -4
- package/dist/{chunk-UHRHZXVR.cjs.map → chunk-NYLWNR6T.cjs.map} +1 -1
- package/dist/{chunk-PDYRDYXI.js → chunk-Q3P7Y5VO.js} +4 -4
- package/dist/{chunk-PDYRDYXI.js.map → chunk-Q3P7Y5VO.js.map} +1 -1
- package/dist/{chunk-SXLVXD2X.js → chunk-R2O6TTQS.js} +9 -20
- package/dist/{chunk-K342JMA3.cjs.map → chunk-R2O6TTQS.js.map} +1 -1
- package/dist/{chunk-QLFTG3QJ.js → chunk-SUHGXAII.js} +2 -2
- package/dist/{chunk-QLFTG3QJ.js.map → chunk-SUHGXAII.js.map} +1 -1
- package/dist/{chunk-MKKGA3C4.cjs → chunk-SY7CBACS.cjs} +10 -10
- package/dist/{chunk-MKKGA3C4.cjs.map → chunk-SY7CBACS.cjs.map} +1 -1
- package/dist/{chunk-K342JMA3.cjs → chunk-TV7LRFXH.cjs} +200 -211
- package/dist/{chunk-SXLVXD2X.js.map → chunk-TV7LRFXH.cjs.map} +1 -1
- package/dist/{chunk-KV3CM5RK.cjs → chunk-XGH2FVVR.cjs} +3 -3
- package/dist/{chunk-KV3CM5RK.cjs.map → chunk-XGH2FVVR.cjs.map} +1 -1
- package/dist/{chunk-HPAJKZAQ.js → chunk-XHBEFQJ3.js} +3 -3
- package/dist/{chunk-HPAJKZAQ.js.map → chunk-XHBEFQJ3.js.map} +1 -1
- package/dist/index.cjs +283 -252
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +44 -13
- package/dist/index.js.map +1 -1
- package/dist/middleware.cjs +32 -32
- package/dist/middleware.js +3 -3
- package/dist/migrations-AFSCRO56.cjs +13 -0
- package/dist/{migrations-ZXJEUTFA.cjs.map → migrations-AFSCRO56.cjs.map} +1 -1
- package/dist/migrations-MLBACCPF.js +4 -0
- package/dist/{migrations-XQLBY7E5.js.map → migrations-MLBACCPF.js.map} +1 -1
- package/dist/plugins.cjs +40 -40
- package/dist/plugins.js +3 -3
- package/dist/routes.cjs +26 -26
- package/dist/routes.js +6 -6
- package/dist/services.cjs +18 -18
- package/dist/services.js +2 -2
- package/dist/utils.cjs +3 -3
- package/dist/utils.js +1 -1
- package/package.json +1 -1
- package/dist/migrations-XQLBY7E5.js +0 -4
- package/dist/migrations-ZXJEUTFA.cjs +0 -13
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createAuth } from './chunk-IVPRUGTY.js';
|
|
2
|
-
import { getEmailService, hasEmailService, setEmailService, invalidateVariablesCache, resolveVariablesInObject, resolveDocScope, denyIfNotAllowed, DocumentRepository, dispatchHookEvent, getCustomData, renderTable, getVariablesCached, setVariablesCache, TenantService, isValidMemberRole, renderConfirmationDialog, getConfirmationDialogScript, VALID_MEMBER_ROLES, userProfilesPlugin, lexicalEditorPlugin, api_media_default, api_system_default, apiDocumentsRoutes, api_default, adminDocumentsRoutes, admin_api_default, adminCollectionsRoutes, adminSettingsRoutes, router2, admin_content_default, adminMediaRoutes, router, adminPluginRoutes, adminLogsRoutes, userRoutes, auth_default, test_cleanup_default } from './chunk-
|
|
3
|
-
export { ROUTES_INFO, admin_api_default as adminApiRoutes, adminCheckboxRoutes, adminCollectionsRoutes, admin_content_default as adminContentRoutes, router as adminDashboardRoutes, adminLogsRoutes, adminMediaRoutes, adminPluginRoutes, adminSettingsRoutes, userRoutes as adminUsersRoutes, api_content_crud_default as apiContentCrudRoutes, api_media_default as apiMediaRoutes, api_default as apiRoutes, api_system_default as apiSystemRoutes, auth_default as authRoutes, createUserProfilesPlugin, defineUserProfile, getUserProfileConfig, userProfilesPlugin } from './chunk-
|
|
2
|
+
import { getEmailService, hasEmailService, setEmailService, invalidateVariablesCache, resolveVariablesInObject, resolveDocScope, denyIfNotAllowed, DocumentRepository, dispatchHookEvent, getCustomData, renderTable, getVariablesCached, setVariablesCache, TenantService, isValidMemberRole, renderConfirmationDialog, getConfirmationDialogScript, VALID_MEMBER_ROLES, userProfilesPlugin, lexicalEditorPlugin, api_media_default, api_system_default, apiDocumentsRoutes, api_default, adminDocumentsRoutes, admin_api_default, adminCollectionsRoutes, adminSettingsRoutes, router2, admin_content_default, adminMediaRoutes, router, adminPluginRoutes, adminLogsRoutes, userRoutes, auth_default, test_cleanup_default } from './chunk-R2O6TTQS.js';
|
|
3
|
+
export { ROUTES_INFO, admin_api_default as adminApiRoutes, adminCheckboxRoutes, adminCollectionsRoutes, admin_content_default as adminContentRoutes, router as adminDashboardRoutes, adminLogsRoutes, adminMediaRoutes, adminPluginRoutes, adminSettingsRoutes, userRoutes as adminUsersRoutes, api_content_crud_default as apiContentCrudRoutes, api_media_default as apiMediaRoutes, api_default as apiRoutes, api_system_default as apiSystemRoutes, auth_default as authRoutes, createUserProfilesPlugin, defineUserProfile, getUserProfileConfig, userProfilesPlugin } from './chunk-R2O6TTQS.js';
|
|
4
4
|
import './chunk-IESEVHXL.js';
|
|
5
5
|
import './chunk-RMRJGMDE.js';
|
|
6
6
|
import { SettingsService, setAppInstance } from './chunk-RQ6N3FTV.js';
|
|
@@ -8,35 +8,36 @@ export { Logger, getLogger, initLogger } from './chunk-RQ6N3FTV.js';
|
|
|
8
8
|
import { getAllCacheStats, CACHE_CONFIGS, getCacheService, clearAllCaches, parseCacheKey } from './chunk-K25XHMM3.js';
|
|
9
9
|
import { schema_exports } from './chunk-AI663NBO.js';
|
|
10
10
|
export { apiTokens, content, contentVersions, insertContentSchema, insertLogConfigSchema, insertMediaSchema, insertPluginActivityLogSchema, insertPluginAssetSchema, insertPluginHookSchema, insertPluginRouteSchema, insertPluginSchema, insertSystemLogSchema, insertUserSchema, insertWorkflowHistorySchema, logConfig, media, pluginActivityLog, pluginAssets, pluginHooks, pluginRoutes, plugins, selectContentSchema, selectLogConfigSchema, selectMediaSchema, selectPluginActivityLogSchema, selectPluginAssetSchema, selectPluginHookSchema, selectPluginRouteSchema, selectPluginSchema, selectSystemLogSchema, selectUserSchema, selectWorkflowHistorySchema, systemLogs, users, workflowHistory } from './chunk-AI663NBO.js';
|
|
11
|
-
import { requireAuth, DocumentTypeRegistry, requireRbac, requireRole, getJwtExpirySecondsFromDb, AuthManager, metricsMiddleware, bootstrapMiddleware, securityHeadersMiddleware, csrfProtection } from './chunk-
|
|
12
|
-
export { AuthManager, PermissionManager, bootstrapDocumentTypes, bootstrapMiddleware, cacheHeaders, compressionMiddleware, detailedLoggingMiddleware, getActivePlugins, isPluginActive, logActivity, loggingMiddleware, optionalAuth, performanceLoggingMiddleware, requireActivePlugin, requireActivePlugins, requireAnyPermission, requireAuth, requirePermission, requireRole, securityHeadersMiddleware as securityHeaders, securityLoggingMiddleware } from './chunk-
|
|
11
|
+
import { requireAuth, DocumentTypeRegistry, requireRbac, requireRole, getJwtExpirySecondsFromDb, AuthManager, metricsMiddleware, bootstrapMiddleware, securityHeadersMiddleware, csrfProtection } from './chunk-DMXDQ5YI.js';
|
|
12
|
+
export { AuthManager, PermissionManager, bootstrapDocumentTypes, bootstrapMiddleware, cacheHeaders, compressionMiddleware, detailedLoggingMiddleware, getActivePlugins, isPluginActive, logActivity, loggingMiddleware, optionalAuth, performanceLoggingMiddleware, requireActivePlugin, requireActivePlugins, requireAnyPermission, requireAuth, requirePermission, requireRole, securityHeadersMiddleware as securityHeaders, securityLoggingMiddleware } from './chunk-DMXDQ5YI.js';
|
|
13
13
|
import { RbacService, DocumentsService } from './chunk-BLMTL57B.js';
|
|
14
14
|
export { RbacService } from './chunk-BLMTL57B.js';
|
|
15
15
|
import { nanoid } from './chunk-GCDZZNIN.js';
|
|
16
|
-
import { PluginService, PLUGIN_REGISTRY, invalidateTenantCache, getCollectionRegistry, TENANT_COOKIE, MULTI_TENANT_PLUGIN_ID, collectionRecordToRow, tenantMiddleware } from './chunk-
|
|
17
|
-
export { PluginBootstrapService, PluginService as PluginServiceClass, getAvailableCollectionNames, loadCollectionConfig, loadCollectionConfigs, registerCollections, validateCollectionConfig } from './chunk-
|
|
18
|
-
export { MigrationService } from './chunk-
|
|
16
|
+
import { PluginService, PLUGIN_REGISTRY, invalidateTenantCache, getCollectionRegistry, TENANT_COOKIE, MULTI_TENANT_PLUGIN_ID, collectionRecordToRow, tenantMiddleware } from './chunk-SUHGXAII.js';
|
|
17
|
+
export { PluginBootstrapService, PluginService as PluginServiceClass, getAvailableCollectionNames, loadCollectionConfig, loadCollectionConfigs, registerCollections, validateCollectionConfig } from './chunk-SUHGXAII.js';
|
|
18
|
+
export { MigrationService } from './chunk-INKP2WNU.js';
|
|
19
19
|
export { renderFilterBar } from './chunk-JQISFW6U.js';
|
|
20
20
|
import { renderAdminLayout } from './chunk-OBA2RYZN.js';
|
|
21
21
|
export { getConfirmationDialogScript, renderAlert, renderConfirmationDialog, renderForm, renderFormField, renderPagination, renderTable } from './chunk-OBA2RYZN.js';
|
|
22
22
|
import { init_admin_layout_catalyst_template, renderAdminLayoutCatalyst } from './chunk-5V62WT6M.js';
|
|
23
23
|
export { renderAdminLayoutCatalyst } from './chunk-5V62WT6M.js';
|
|
24
|
-
import { TurnstileService, HookSystemImpl, createPluginWirer, registerPluginRoutes, setPluginMenu } from './chunk-
|
|
25
|
-
export { HookSystemImpl, HookUtils, PluginDependencyCycleError, PluginManager as PluginManagerClass, PluginRegistryImpl, PluginValidator as PluginValidatorClass, RegisterPluginsError, ScopedHookSystem as ScopedHookSystemClass, collectCronSchedules, collectCrons, createScheduledHandler, dispatchCronTick, getPluginMenu, registerPlugins, resetPluginMenu, resolvePluginMenuItems, setPluginMenu, topoSort } from './chunk-
|
|
26
|
-
import { definePlugin, setPluginDefinitions } from './chunk-
|
|
27
|
-
export { applySchemaDefaults, definePlugin, isDefinedPlugin, parseConfigSchema, parseFormDataToSettings, renderSchemaFields } from './chunk-
|
|
24
|
+
import { TurnstileService, HookSystemImpl, createPluginWirer, registerPluginRoutes, setPluginMenu } from './chunk-Q3P7Y5VO.js';
|
|
25
|
+
export { HookSystemImpl, HookUtils, PluginDependencyCycleError, PluginManager as PluginManagerClass, PluginRegistryImpl, PluginValidator as PluginValidatorClass, RegisterPluginsError, ScopedHookSystem as ScopedHookSystemClass, collectCronSchedules, collectCrons, createScheduledHandler, dispatchCronTick, getPluginMenu, registerPlugins, resetPluginMenu, resolvePluginMenuItems, setPluginMenu, topoSort } from './chunk-Q3P7Y5VO.js';
|
|
26
|
+
import { definePlugin, setPluginDefinitions } from './chunk-XHBEFQJ3.js';
|
|
27
|
+
export { applySchemaDefaults, definePlugin, isDefinedPlugin, parseConfigSchema, parseFormDataToSettings, renderSchemaFields } from './chunk-XHBEFQJ3.js';
|
|
28
28
|
import { setHookSystem } from './chunk-RNZFGN4R.js';
|
|
29
29
|
export { getHookSystem, getTypedHooks, hasHookSystem, resetHookSystem, setHookSystem } from './chunk-RNZFGN4R.js';
|
|
30
30
|
export { QueryFilterBuilder, TemplateRenderer, buildQuery, renderTemplate, templateRenderer } from './chunk-QZGABF2M.js';
|
|
31
31
|
export { metricsTracker } from './chunk-FICTAGD4.js';
|
|
32
32
|
import './chunk-X7ZAEI5S.js';
|
|
33
|
-
import { getCoreVersion, package_default } from './chunk-
|
|
34
|
-
export { SONICJS_VERSION, getCoreVersion } from './chunk-
|
|
33
|
+
import { getCoreVersion, package_default } from './chunk-ALNODOY4.js';
|
|
34
|
+
export { SONICJS_VERSION, getCoreVersion } from './chunk-ALNODOY4.js';
|
|
35
35
|
import { escapeHtml, sanitizeInput } from './chunk-TQABQWOP.js';
|
|
36
36
|
export { escapeHtml, sanitizeInput, sanitizeObject } from './chunk-TQABQWOP.js';
|
|
37
37
|
export { HOOKS } from './chunk-QXOZI5Q2.js';
|
|
38
38
|
import './chunk-V4OQ3NZ2.js';
|
|
39
39
|
import { Hono } from 'hono';
|
|
40
|
+
import { cors } from 'hono/cors';
|
|
40
41
|
import { z } from 'zod';
|
|
41
42
|
import { setCookie, getCookie } from 'hono/cookie';
|
|
42
43
|
import { html } from 'hono/html';
|
|
@@ -9715,6 +9716,7 @@ function renderFormCreatePage(data) {
|
|
|
9715
9716
|
}
|
|
9716
9717
|
|
|
9717
9718
|
// src/routes/admin-forms.ts
|
|
9719
|
+
var isTableMissing = (err) => String(err?.message ?? err?.cause?.message ?? "").includes("no such table: forms");
|
|
9718
9720
|
var adminFormsRoutes = new Hono();
|
|
9719
9721
|
adminFormsRoutes.use("*", requireAuth());
|
|
9720
9722
|
adminFormsRoutes.get("/", async (c) => {
|
|
@@ -9756,6 +9758,14 @@ adminFormsRoutes.get("/", async (c) => {
|
|
|
9756
9758
|
};
|
|
9757
9759
|
return c.html(renderFormsListPage(pageData));
|
|
9758
9760
|
} catch (error) {
|
|
9761
|
+
if (isTableMissing(error)) {
|
|
9762
|
+
const user = c.get("user");
|
|
9763
|
+
return c.html(renderFormsListPage({
|
|
9764
|
+
forms: [],
|
|
9765
|
+
user: user ? { name: user.email, email: user.email, role: user.role } : void 0,
|
|
9766
|
+
version: c.get("appVersion")
|
|
9767
|
+
}));
|
|
9768
|
+
}
|
|
9759
9769
|
console.error("Error listing forms:", error);
|
|
9760
9770
|
return c.html("<p>Error loading forms</p>", 500);
|
|
9761
9771
|
}
|
|
@@ -9866,6 +9876,7 @@ adminFormsRoutes.post("/", async (c) => {
|
|
|
9866
9876
|
).run();
|
|
9867
9877
|
return c.redirect(`/admin/forms/${formId}/builder`);
|
|
9868
9878
|
} catch (error) {
|
|
9879
|
+
if (isTableMissing(error)) return c.json({ error: "Forms storage not configured \u2014 run database migrations" }, 503);
|
|
9869
9880
|
console.error("Error creating form:", error);
|
|
9870
9881
|
return c.json({ error: "Failed to create form" }, 500);
|
|
9871
9882
|
}
|
|
@@ -9903,6 +9914,7 @@ adminFormsRoutes.get("/:id/builder", async (c) => {
|
|
|
9903
9914
|
};
|
|
9904
9915
|
return c.html(renderFormBuilderPage(pageData));
|
|
9905
9916
|
} catch (error) {
|
|
9917
|
+
if (isTableMissing(error)) return c.html("<p>Forms storage not configured \u2014 run database migrations</p>", 503);
|
|
9906
9918
|
console.error("Error showing form builder:", error);
|
|
9907
9919
|
return c.html("<p>Error loading form builder</p>", 500);
|
|
9908
9920
|
}
|
|
@@ -9932,6 +9944,7 @@ adminFormsRoutes.put("/:id", async (c) => {
|
|
|
9932
9944
|
).run();
|
|
9933
9945
|
return c.json({ success: true, message: "Form saved successfully" });
|
|
9934
9946
|
} catch (error) {
|
|
9947
|
+
if (isTableMissing(error)) return c.json({ error: "Forms storage not configured \u2014 run database migrations" }, 503);
|
|
9935
9948
|
console.error("Error updating form:", error);
|
|
9936
9949
|
return c.json({ error: "Failed to save form" }, 500);
|
|
9937
9950
|
}
|
|
@@ -9953,6 +9966,7 @@ adminFormsRoutes.delete("/:id", async (c) => {
|
|
|
9953
9966
|
await db.prepare("DELETE FROM forms WHERE id = ?").bind(formId).run();
|
|
9954
9967
|
return c.json({ success: true, message: "Form deleted successfully" });
|
|
9955
9968
|
} catch (error) {
|
|
9969
|
+
if (isTableMissing(error)) return c.json({ error: "Forms storage not configured \u2014 run database migrations" }, 503);
|
|
9956
9970
|
console.error("Error deleting form:", error);
|
|
9957
9971
|
return c.json({ error: "Failed to delete form" }, 500);
|
|
9958
9972
|
}
|
|
@@ -10013,6 +10027,7 @@ adminFormsRoutes.get("/:id/submissions", async (c) => {
|
|
|
10013
10027
|
`;
|
|
10014
10028
|
return c.html(html4);
|
|
10015
10029
|
} catch (error) {
|
|
10030
|
+
if (isTableMissing(error)) return c.html("<p>Forms storage not configured \u2014 run database migrations</p>", 503);
|
|
10016
10031
|
console.error("Error loading submissions:", error);
|
|
10017
10032
|
return c.html("<p>Error loading submissions</p>", 500);
|
|
10018
10033
|
}
|
|
@@ -10033,6 +10048,7 @@ function sanitizeDeep(value) {
|
|
|
10033
10048
|
}
|
|
10034
10049
|
return value;
|
|
10035
10050
|
}
|
|
10051
|
+
var isTableMissing2 = (err) => String(err?.message ?? err?.cause?.message ?? "").includes("no such table: form");
|
|
10036
10052
|
var publicFormsRoutes = new Hono();
|
|
10037
10053
|
publicFormsRoutes.get("/:identifier/turnstile-config", async (c) => {
|
|
10038
10054
|
try {
|
|
@@ -10060,6 +10076,7 @@ publicFormsRoutes.get("/:identifier/turnstile-config", async (c) => {
|
|
|
10060
10076
|
appearance: formSettings.appearance || globalSettings.appearance || "always"
|
|
10061
10077
|
});
|
|
10062
10078
|
} catch (error) {
|
|
10079
|
+
if (isTableMissing2(error)) return c.json({ enabled: false });
|
|
10063
10080
|
console.error("Error fetching Turnstile config:", error);
|
|
10064
10081
|
return c.json({ error: "Failed to fetch config" }, 500);
|
|
10065
10082
|
}
|
|
@@ -10087,6 +10104,7 @@ publicFormsRoutes.get("/:identifier/schema", async (c) => {
|
|
|
10087
10104
|
submitUrl: `/api/forms/${form.id}/submit`
|
|
10088
10105
|
});
|
|
10089
10106
|
} catch (error) {
|
|
10107
|
+
if (isTableMissing2(error)) return c.json({ error: "Form not found" }, 404);
|
|
10090
10108
|
console.error("Error fetching form schema:", error);
|
|
10091
10109
|
return c.json({ error: "Failed to fetch form schema" }, 500);
|
|
10092
10110
|
}
|
|
@@ -10453,6 +10471,7 @@ publicFormsRoutes.get("/:name", async (c) => {
|
|
|
10453
10471
|
`;
|
|
10454
10472
|
return c.html(html4);
|
|
10455
10473
|
} catch (error) {
|
|
10474
|
+
if (isTableMissing2(error)) return c.html("<h1>Form not found</h1><p>This form does not exist or is not publicly available.</p>", 404);
|
|
10456
10475
|
console.error("Error rendering form:", error);
|
|
10457
10476
|
return c.html("<p>Error loading form</p>", 500);
|
|
10458
10477
|
}
|
|
@@ -10526,6 +10545,7 @@ publicFormsRoutes.post("/:identifier/submit", async (c) => {
|
|
|
10526
10545
|
message: "Form submitted successfully"
|
|
10527
10546
|
});
|
|
10528
10547
|
} catch (error) {
|
|
10548
|
+
if (isTableMissing2(error)) return c.json({ error: "Form not found" }, 404);
|
|
10529
10549
|
console.error("Error submitting form:", error);
|
|
10530
10550
|
return c.json({ error: "Failed to submit form" }, 500);
|
|
10531
10551
|
}
|
|
@@ -16156,6 +16176,17 @@ function createSonicJSApp(config = {}) {
|
|
|
16156
16176
|
app2.use("*", async (_c, next) => {
|
|
16157
16177
|
await next();
|
|
16158
16178
|
});
|
|
16179
|
+
app2.use("*", cors({
|
|
16180
|
+
origin: (origin, c) => {
|
|
16181
|
+
const allowed = c.env?.CORS_ORIGINS;
|
|
16182
|
+
if (!allowed) return null;
|
|
16183
|
+
const list = allowed.split(",").map((s) => s.trim());
|
|
16184
|
+
return list.includes(origin) ? origin : null;
|
|
16185
|
+
},
|
|
16186
|
+
allowMethods: ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
|
|
16187
|
+
allowHeaders: ["Content-Type", "Authorization", "X-API-Key"],
|
|
16188
|
+
credentials: true
|
|
16189
|
+
}));
|
|
16159
16190
|
app2.use("*", securityHeadersMiddleware());
|
|
16160
16191
|
app2.use("*", csrfProtection());
|
|
16161
16192
|
app2.use("*", async (c, next) => {
|