@sonicjs-cms/core 3.0.0-beta.21 → 3.0.0-beta.22
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-5U75XP74.js → chunk-2FCKKOA5.js} +2 -2
- package/dist/{chunk-5U75XP74.js.map → chunk-2FCKKOA5.js.map} +1 -1
- package/dist/{chunk-OJC4G5JE.cjs → chunk-3CT3SUR4.cjs} +2 -2
- package/dist/{chunk-OJC4G5JE.cjs.map → chunk-3CT3SUR4.cjs.map} +1 -1
- package/dist/{chunk-ZP77LTN4.js → chunk-6KNTZ67K.js} +106 -11
- package/dist/chunk-6KNTZ67K.js.map +1 -0
- package/dist/{chunk-JEX3UPZL.js → chunk-73O4GPJ6.js} +3 -3
- package/dist/{chunk-JEX3UPZL.js.map → chunk-73O4GPJ6.js.map} +1 -1
- package/dist/{chunk-4UYJPHSV.js → chunk-CHWT5KBK.js} +5 -5
- package/dist/{chunk-4UYJPHSV.js.map → chunk-CHWT5KBK.js.map} +1 -1
- package/dist/{chunk-4LVVMVQI.js → chunk-DOMXI5PM.js} +2 -2
- package/dist/{chunk-4LVVMVQI.js.map → chunk-DOMXI5PM.js.map} +1 -1
- package/dist/{chunk-A4KUJ3LD.cjs → chunk-EUJAEB6W.cjs} +4 -4
- package/dist/{chunk-A4KUJ3LD.cjs.map → chunk-EUJAEB6W.cjs.map} +1 -1
- package/dist/{chunk-FCLKX2OS.cjs → chunk-FTXGZ3BF.cjs} +15 -15
- package/dist/{chunk-FCLKX2OS.cjs.map → chunk-FTXGZ3BF.cjs.map} +1 -1
- package/dist/{chunk-GICS5AIO.js → chunk-GB2Q2DNK.js} +4 -4
- package/dist/{chunk-GICS5AIO.js.map → chunk-GB2Q2DNK.js.map} +1 -1
- package/dist/{chunk-7OTOXWEB.js → chunk-I2DM27HP.js} +3 -3
- package/dist/{chunk-7OTOXWEB.js.map → chunk-I2DM27HP.js.map} +1 -1
- package/dist/{chunk-7RUW244J.cjs → chunk-JFLZHOQP.cjs} +299 -204
- package/dist/chunk-JFLZHOQP.cjs.map +1 -0
- package/dist/{chunk-5UXU3LP4.cjs → chunk-MGHHPNJN.cjs} +10 -10
- package/dist/{chunk-5UXU3LP4.cjs.map → chunk-MGHHPNJN.cjs.map} +1 -1
- package/dist/{chunk-KVBHB7QP.cjs → chunk-PYZYU7EK.cjs} +2 -2
- package/dist/{chunk-KVBHB7QP.cjs.map → chunk-PYZYU7EK.cjs.map} +1 -1
- package/dist/{chunk-AOUVUF32.cjs → chunk-QWSR4THH.cjs} +3 -3
- package/dist/{chunk-AOUVUF32.cjs.map → chunk-QWSR4THH.cjs.map} +1 -1
- package/dist/index.cjs +308 -265
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +62 -19
- package/dist/index.js.map +1 -1
- package/dist/middleware.cjs +33 -33
- package/dist/middleware.js +4 -4
- package/dist/migrations-HLK2QF4T.js +4 -0
- package/dist/{migrations-HMX5SPN2.js.map → migrations-HLK2QF4T.js.map} +1 -1
- package/dist/migrations-UIMA6ZL6.cjs +13 -0
- package/dist/{migrations-V73ARYV5.cjs.map → migrations-UIMA6ZL6.cjs.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/chunk-7RUW244J.cjs.map +0 -1
- package/dist/chunk-ZP77LTN4.js.map +0 -1
- package/dist/migrations-HMX5SPN2.js +0 -4
- package/dist/migrations-V73ARYV5.cjs +0 -13
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createAuth } from './chunk-SOZUG52O.js';
|
|
2
|
-
import { getEmailService, hasEmailService, setEmailService, invalidateVariablesCache, resolveVariablesInObject, resolveDocScope, denyIfNotAllowed, DocumentRepository, dispatchHookEvent, getCustomData, createDocumentSchema, 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 { DocumentRepository, 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, createDocumentSchema, 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-6KNTZ67K.js';
|
|
3
|
+
export { DocumentRepository, 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-6KNTZ67K.js';
|
|
4
4
|
import './chunk-VVYVFCML.js';
|
|
5
5
|
import './chunk-RMRJGMDE.js';
|
|
6
6
|
import { SettingsService, setAppInstance } from './chunk-2XAQTPAE.js';
|
|
@@ -8,30 +8,30 @@ export { Logger, getLogger, initLogger } from './chunk-2XAQTPAE.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-CHWT5KBK.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-CHWT5KBK.js';
|
|
13
13
|
import { RbacService, DocumentsService } from './chunk-3TMTYJAJ.js';
|
|
14
14
|
export { DocumentsService, RbacService } from './chunk-3TMTYJAJ.js';
|
|
15
15
|
import { nanoid } from './chunk-UWUP2VMT.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-DOMXI5PM.js';
|
|
17
|
+
export { PluginBootstrapService, PluginService as PluginServiceClass, getAvailableCollectionNames, loadCollectionConfig, loadCollectionConfigs, registerCollections, validateCollectionConfig } from './chunk-DOMXI5PM.js';
|
|
18
|
+
export { MigrationService } from './chunk-2FCKKOA5.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, resolvePluginMenuItems } 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, resolvePluginMenuItems } from './chunk-GB2Q2DNK.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-GB2Q2DNK.js';
|
|
26
|
+
import { definePlugin, setPluginDefinitions } from './chunk-I2DM27HP.js';
|
|
27
|
+
export { applySchemaDefaults, definePlugin, isDefinedPlugin, parseConfigSchema, parseFormDataToSettings, renderSchemaFields } from './chunk-I2DM27HP.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-73O4GPJ6.js';
|
|
34
|
+
export { SONICJS_VERSION, getCoreVersion } from './chunk-73O4GPJ6.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';
|
|
@@ -7006,14 +7006,18 @@ function renderApiKeysPage(data) {
|
|
|
7006
7006
|
|
|
7007
7007
|
<!-- Newly-created secret banner (populated by JS, shown once) -->
|
|
7008
7008
|
<div id="new-key-banner" class="hidden mb-6 rounded-xl bg-emerald-50 dark:bg-emerald-900/20 p-4 ring-1 ring-emerald-200 dark:ring-emerald-800">
|
|
7009
|
-
<
|
|
7010
|
-
|
|
7011
|
-
|
|
7009
|
+
<div class="flex items-start justify-between mb-2">
|
|
7010
|
+
<p class="text-sm font-medium text-emerald-800 dark:text-emerald-300">
|
|
7011
|
+
Copy your new key now \u2014 it will not be shown again.
|
|
7012
|
+
</p>
|
|
7013
|
+
<button type="button" onclick="document.getElementById('new-key-banner').classList.add('hidden')"
|
|
7014
|
+
class="ml-4 text-emerald-600 dark:text-emerald-400 hover:text-emerald-800 dark:hover:text-emerald-200 text-lg leading-none">×</button>
|
|
7015
|
+
</div>
|
|
7012
7016
|
<div class="flex items-center gap-2">
|
|
7013
7017
|
<code id="new-key-value" class="flex-1 rounded-lg bg-white dark:bg-zinc-900 px-3 py-2 text-sm font-mono text-zinc-950 dark:text-white ring-1 ring-zinc-950/10 dark:ring-white/10 break-all"></code>
|
|
7014
7018
|
<button type="button" onclick="copyNewKey()"
|
|
7015
7019
|
class="rounded-lg bg-emerald-600 px-3 py-2 text-sm font-semibold text-white hover:bg-emerald-500 transition-colors">
|
|
7016
|
-
Copy
|
|
7020
|
+
Copy & dismiss
|
|
7017
7021
|
</button>
|
|
7018
7022
|
</div>
|
|
7019
7023
|
</div>
|
|
@@ -7085,11 +7089,50 @@ function renderApiKeysPage(data) {
|
|
|
7085
7089
|
document.getElementById('create-key-modal').classList.add('hidden')
|
|
7086
7090
|
document.getElementById('new-key-value').textContent = apiKey.key
|
|
7087
7091
|
document.getElementById('new-key-banner').classList.remove('hidden')
|
|
7088
|
-
|
|
7092
|
+
// Add new key row to table immediately so user can see it without reloading
|
|
7093
|
+
const tbody = document.getElementById('keys-tbody')
|
|
7094
|
+
const emptyRow = tbody.querySelector('td[colspan]')
|
|
7095
|
+
if (emptyRow) emptyRow.closest('tr').remove()
|
|
7096
|
+
const tr = document.createElement('tr')
|
|
7097
|
+
tr.className = 'border-t border-zinc-950/5 dark:border-white/10'
|
|
7098
|
+
tr.setAttribute('data-key-id', apiKey.id)
|
|
7099
|
+
const prefix = apiKey.prefix
|
|
7100
|
+
const today = new Date().toISOString().slice(0, 10)
|
|
7101
|
+
const expires = apiKey.expiresAt ? new Date(apiKey.expiresAt).toISOString().slice(0, 10) : 'Never'
|
|
7102
|
+
// Build row using DOM methods to avoid nested template-literal escaping issues
|
|
7103
|
+
const nameTd = document.createElement('td')
|
|
7104
|
+
nameTd.className = 'py-3 pr-4 text-sm font-medium text-zinc-950 dark:text-white'
|
|
7105
|
+
nameTd.textContent = apiKey.name
|
|
7106
|
+
const prefixTd = document.createElement('td')
|
|
7107
|
+
prefixTd.className = 'py-3 pr-4 text-sm font-mono text-zinc-500 dark:text-zinc-400'
|
|
7108
|
+
prefixTd.textContent = prefix + '\u2026'
|
|
7109
|
+
const createdTd = document.createElement('td')
|
|
7110
|
+
createdTd.className = 'py-3 pr-4 text-sm text-zinc-500 dark:text-zinc-400'
|
|
7111
|
+
createdTd.textContent = today
|
|
7112
|
+
const lastUsedTd = document.createElement('td')
|
|
7113
|
+
lastUsedTd.className = 'py-3 pr-4 text-sm text-zinc-500 dark:text-zinc-400'
|
|
7114
|
+
lastUsedTd.textContent = 'Never'
|
|
7115
|
+
const expiresTd = document.createElement('td')
|
|
7116
|
+
expiresTd.className = 'py-3 pr-4 text-sm text-zinc-500 dark:text-zinc-400'
|
|
7117
|
+
expiresTd.textContent = expires
|
|
7118
|
+
const actionsTd = document.createElement('td')
|
|
7119
|
+
actionsTd.className = 'py-3 text-right'
|
|
7120
|
+
const revokeBtn = document.createElement('button')
|
|
7121
|
+
revokeBtn.type = 'button'
|
|
7122
|
+
revokeBtn.className = 'rounded-lg bg-red-50 dark:bg-red-900/20 px-3 py-1.5 text-sm font-medium text-red-700 dark:text-red-400 hover:bg-red-100 dark:hover:bg-red-900/40 ring-1 ring-red-200 dark:ring-red-800 transition-colors'
|
|
7123
|
+
revokeBtn.textContent = 'Revoke'
|
|
7124
|
+
revokeBtn.addEventListener('click', () => revokeApiKey(apiKey.id, apiKey.name))
|
|
7125
|
+
actionsTd.appendChild(revokeBtn)
|
|
7126
|
+
tr.appendChild(nameTd); tr.appendChild(prefixTd); tr.appendChild(createdTd)
|
|
7127
|
+
tr.appendChild(lastUsedTd); tr.appendChild(expiresTd); tr.appendChild(actionsTd)
|
|
7128
|
+
tbody.appendChild(tr)
|
|
7089
7129
|
}
|
|
7090
7130
|
function copyNewKey() {
|
|
7091
7131
|
const v = document.getElementById('new-key-value').textContent
|
|
7092
|
-
navigator.clipboard.writeText(v).then(() =>
|
|
7132
|
+
navigator.clipboard.writeText(v).then(() => {
|
|
7133
|
+
window.showNotification && window.showNotification('Copied to clipboard', 'success')
|
|
7134
|
+
document.getElementById('new-key-banner').classList.add('hidden')
|
|
7135
|
+
})
|
|
7093
7136
|
}
|
|
7094
7137
|
async function revokeApiKey(id, name) {
|
|
7095
7138
|
if (!confirm('Revoke "' + name + '"? This cannot be undone and will break any client using it.')) return
|