@commonpub/server 2.54.3 → 2.56.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/federation/backfill.d.ts.map +1 -1
- package/dist/federation/backfill.js +21 -15
- package/dist/federation/backfill.js.map +1 -1
- package/dist/federation/delivery.js +21 -22
- package/dist/federation/delivery.js.map +1 -1
- package/dist/federation/federation.d.ts.map +1 -1
- package/dist/federation/federation.js +9 -4
- package/dist/federation/federation.js.map +1 -1
- package/dist/federation/hubMirroring.d.ts.map +1 -1
- package/dist/federation/hubMirroring.js +25 -11
- package/dist/federation/hubMirroring.js.map +1 -1
- package/dist/federation/messaging.d.ts.map +1 -1
- package/dist/federation/messaging.js +3 -2
- package/dist/federation/messaging.js.map +1 -1
- package/dist/federation/oauth.d.ts.map +1 -1
- package/dist/federation/oauth.js +12 -4
- package/dist/federation/oauth.js.map +1 -1
- package/dist/federation/safeFetchFn.d.ts +9 -0
- package/dist/federation/safeFetchFn.d.ts.map +1 -0
- package/dist/federation/safeFetchFn.js +56 -0
- package/dist/federation/safeFetchFn.js.map +1 -0
- package/dist/import/ssrf.d.ts +2 -2
- package/dist/import/ssrf.d.ts.map +1 -1
- package/dist/import/ssrf.js +1 -1
- package/dist/import/ssrf.js.map +1 -1
- package/dist/index.d.ts +6 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/security.d.ts +2 -2
- package/dist/security.d.ts.map +1 -1
- package/dist/security.js +1 -1
- package/dist/security.js.map +1 -1
- package/dist/theme.d.ts +39 -1
- package/dist/theme.d.ts.map +1 -1
- package/dist/theme.js +135 -9
- package/dist/theme.js.map +1 -1
- package/package.json +7 -7
package/dist/index.js
CHANGED
|
@@ -24,13 +24,13 @@ export { createAuditEntry, listAuditLogs, getPlatformStats, listUsers, updateUse
|
|
|
24
24
|
// Profile
|
|
25
25
|
export { getUserByUsername, getUserContent, updateUserProfile, exportUserData } from './profile/index.js';
|
|
26
26
|
// Security
|
|
27
|
-
export { buildCspDirectives, buildCspHeader, getSecurityHeaders, getStaticCacheHeaders, generateNonce, MemoryRateLimitStore, RateLimitStore, DEFAULT_TIERS, getTierForPath, shouldSkipRateLimit, checkRateLimit, } from './security.js';
|
|
27
|
+
export { buildCspDirectives, buildCspHeader, getSecurityHeaders, getStaticCacheHeaders, generateNonce, MemoryRateLimitStore, RateLimitStore, DEFAULT_TIERS, getTierForPath, shouldSkipRateLimit, checkRateLimit, getClientIp, } from './security.js';
|
|
28
28
|
// Redis-backed scaling helpers (opt-in via NUXT_REDIS_URL)
|
|
29
29
|
export { createRateLimitStore, createRedisClient, createRealtimePubSub, createRedisFailOpenLogger, } from '@commonpub/infra';
|
|
30
30
|
// Realtime pub/sub singleton for SSE fanout
|
|
31
31
|
export { publishSseEvent, subscribeSseEvents, realtimeChannel, resetRealtimeForTests } from './realtime/index.js';
|
|
32
32
|
// Theme
|
|
33
|
-
export { resolveTheme, getCustomTokenOverrides, setUserTheme } from './theme.js';
|
|
33
|
+
export { resolveTheme, getCustomTokenOverrides, setUserTheme, listCustomThemes, getCustomTheme, saveCustomTheme, deleteCustomTheme, customThemeDataAttr, parseCustomThemeId, CUSTOM_THEME_PREFIX, } from './theme.js';
|
|
34
34
|
// Federation
|
|
35
35
|
export { getOrCreateActorKeypair, getOrCreateInstanceKeypair, buildInstanceActor, resolveRemoteActor, searchRemoteActor, getRemoteActorProfile, sendFollow, acceptFollow, rejectFollow, unfollowRemote, federateContent, federateUpdate, federateDelete, federateLike, federateUnlike, buildContentUri, resolveContentObjectUri, getContentSlugById, getFollowers, getFollowing, listFederationActivity, createInboxHandlers, deliverPendingActivities, listFederatedTimeline, getFederatedContent, likeRemoteContent, boostRemoteContent, federateReply, listRemoteReplies, incrementFederatedViewCount, searchFederatedContent, getHubActorUri, getOrCreateHubKeypair, buildHubGroupActor, handleHubFollow, handleHubUnfollow, getHubFederatedFollowers, federateHubActor, federateHubPost, federateHubShare, federateHubPostDelete, federateHubPostUpdate, federateHubPostLike, federateHubPostUnlike, federateHubPostReply, federateHubUpdate, sendPostToRemoteHub, getHubPostNoteUri, createMirror, activateMirror, pauseMirror, resumeMirror, cancelMirror, listMirrors, getMirror, processAuthorize, processTokenExchange, registerOAuthClient, linkFederatedAccount, findUserByFederatedAccount, listOAuthClients, resolveRemoteHandle, federateDirectMessage, isFederatedHandle, processDynamicRegistration, storeOAuthState, consumeOAuthState, exchangeCodeForToken, createFederatedSession, storePendingLink, consumePendingLink, getStoredTrustedInstances, addTrustedInstance, removeTrustedInstance, isDomainTrusted, repairFederatedContentTypes, cleanupDeliveredActivities, backfillFromOutbox, countOutboxItems, countInstanceOutboxItems, getOutboxPage, getInstanceOutboxPage, countHubOutboxItems, getHubOutboxPage, isCircuitOpen, recordDeliverySuccess, recordDeliveryFailure, getDeliveryHealth,
|
|
36
36
|
// Hub mirroring
|
|
@@ -64,7 +64,7 @@ export { getNavItems, setNavItems, resetNavItems, DEFAULT_NAV_ITEMS, } from './n
|
|
|
64
64
|
export { searchContent, searchWithMeilisearch, searchWithPostgres, indexContent, removeFromIndex, configureContentIndex, } from './search/contentSearch.js';
|
|
65
65
|
// Import
|
|
66
66
|
export { importFromUrl } from './import/index.js';
|
|
67
|
-
export { isPrivateUrl, safeFetch, safeFetchBinary } from './import/ssrf.js';
|
|
67
|
+
export { isPrivateUrl, safeFetch, safeFetchBinary, safeFetchResponse, safeFetchSigned } from './import/ssrf.js';
|
|
68
68
|
// Email
|
|
69
69
|
export { SmtpEmailAdapter, ResendEmailAdapter, ConsoleEmailAdapter, emailTemplates, } from './email.js';
|
|
70
70
|
// Public API (admin-scoped Bearer keys for external consumers)
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/security.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { buildCspDirectives, buildCspHeader, getSecurityHeaders, getStaticCacheHeaders, generateNonce, MemoryRateLimitStore, RateLimitStore, DEFAULT_TIERS, getTierForPath, shouldSkipRateLimit, checkRateLimit, } from '@commonpub/infra/security';
|
|
2
|
-
export type { RateLimitTier, RateLimitResult } from '@commonpub/infra/security';
|
|
1
|
+
export { buildCspDirectives, buildCspHeader, getSecurityHeaders, getStaticCacheHeaders, generateNonce, MemoryRateLimitStore, RateLimitStore, DEFAULT_TIERS, getTierForPath, shouldSkipRateLimit, checkRateLimit, getClientIp, } from '@commonpub/infra/security';
|
|
2
|
+
export type { RateLimitTier, RateLimitResult, GetClientIpOptions } from '@commonpub/infra/security';
|
|
3
3
|
//# sourceMappingURL=security.d.ts.map
|
package/dist/security.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,aAAa,EACb,oBAAoB,EACpB,cAAc,EACd,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,cAAc,
|
|
1
|
+
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,aAAa,EACb,oBAAoB,EACpB,cAAc,EACd,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,WAAW,GACZ,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC"}
|
package/dist/security.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// Re-export from @commonpub/infra for backward compatibility
|
|
2
|
-
export { buildCspDirectives, buildCspHeader, getSecurityHeaders, getStaticCacheHeaders, generateNonce, MemoryRateLimitStore, RateLimitStore, DEFAULT_TIERS, getTierForPath, shouldSkipRateLimit, checkRateLimit, } from '@commonpub/infra/security';
|
|
2
|
+
export { buildCspDirectives, buildCspHeader, getSecurityHeaders, getStaticCacheHeaders, generateNonce, MemoryRateLimitStore, RateLimitStore, DEFAULT_TIERS, getTierForPath, shouldSkipRateLimit, checkRateLimit, getClientIp, } from '@commonpub/infra/security';
|
|
3
3
|
//# sourceMappingURL=security.js.map
|
package/dist/security.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security.js","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,aAAa,EACb,oBAAoB,EACpB,cAAc,EACd,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,cAAc,
|
|
1
|
+
{"version":3,"file":"security.js","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,aAAa,EACb,oBAAoB,EACpB,cAAc,EACd,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,WAAW,GACZ,MAAM,2BAA2B,CAAC"}
|
package/dist/theme.d.ts
CHANGED
|
@@ -1,12 +1,50 @@
|
|
|
1
1
|
import type { DB } from './types.js';
|
|
2
|
+
/** Custom-theme ID prefix used in `data-theme` attribute + DB lookup. */
|
|
3
|
+
export declare const CUSTOM_THEME_PREFIX = "cpub-custom-";
|
|
4
|
+
/**
|
|
5
|
+
* A custom theme record persisted in `instance_settings.theme.custom`.
|
|
6
|
+
* Mirrors `customThemeSchema` in @commonpub/schema validators.
|
|
7
|
+
*/
|
|
8
|
+
export interface CustomThemeRecord {
|
|
9
|
+
id: string;
|
|
10
|
+
name: string;
|
|
11
|
+
description?: string;
|
|
12
|
+
family: string;
|
|
13
|
+
isDark: boolean;
|
|
14
|
+
pairId?: string;
|
|
15
|
+
parentTheme: string;
|
|
16
|
+
tokens: Record<string, string>;
|
|
17
|
+
createdAt: string;
|
|
18
|
+
updatedAt: string;
|
|
19
|
+
}
|
|
20
|
+
/** Slug used in `data-theme` for a DB-stored custom theme. */
|
|
21
|
+
export declare function customThemeDataAttr(id: string): string;
|
|
22
|
+
/** Reverse of customThemeDataAttr — returns the raw custom theme ID or null. */
|
|
23
|
+
export declare function parseCustomThemeId(themeId: string): string | null;
|
|
2
24
|
/**
|
|
3
25
|
* Resolve the active theme for a request.
|
|
4
26
|
* Priority: user preference > instance default > 'base' fallback.
|
|
5
27
|
* Framework-agnostic — cookie checking should be done by the caller.
|
|
6
28
|
*/
|
|
7
29
|
export declare function resolveTheme(db: DB, userId?: string): Promise<string>;
|
|
8
|
-
/** Get custom CSS token overrides configured at the instance level
|
|
30
|
+
/** Get custom CSS token overrides configured at the instance level. These
|
|
31
|
+
* apply on top of whatever theme is active (built-in, custom, or code). */
|
|
9
32
|
export declare function getCustomTokenOverrides(db: DB): Promise<Record<string, string>>;
|
|
10
33
|
/** Update a user's theme preference */
|
|
11
34
|
export declare function setUserTheme(db: DB, userId: string, themeId: string): Promise<void>;
|
|
35
|
+
/** List all DB-stored custom themes. Returns an empty array if none exist. */
|
|
36
|
+
export declare function listCustomThemes(db: DB): Promise<CustomThemeRecord[]>;
|
|
37
|
+
/** Fetch a single custom theme by ID. */
|
|
38
|
+
export declare function getCustomTheme(db: DB, id: string): Promise<CustomThemeRecord | null>;
|
|
39
|
+
/**
|
|
40
|
+
* Upsert a custom theme. The whole `theme.custom` array is rewritten on each
|
|
41
|
+
* save — fine because the array is small (admins manage a handful of themes)
|
|
42
|
+
* and gives us atomic consistency without a separate table.
|
|
43
|
+
*/
|
|
44
|
+
export declare function saveCustomTheme(db: DB, theme: Omit<CustomThemeRecord, 'createdAt' | 'updatedAt'> & {
|
|
45
|
+
createdAt?: string;
|
|
46
|
+
updatedAt?: string;
|
|
47
|
+
}, adminId: string): Promise<CustomThemeRecord>;
|
|
48
|
+
/** Delete a custom theme. No-op if not found. */
|
|
49
|
+
export declare function deleteCustomTheme(db: DB, id: string, adminId: string): Promise<void>;
|
|
12
50
|
//# sourceMappingURL=theme.d.ts.map
|
package/dist/theme.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAIrC,yEAAyE;AACzE,eAAO,MAAM,mBAAmB,iBAAiB,CAAC;AAKlD;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,8DAA8D;AAC9D,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,gFAAgF;AAChF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKjE;AA0BD;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAuB3E;AAED;4EAC4E;AAC5E,wBAAsB,uBAAuB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAgBrF;AAED,uCAAuC;AACvC,wBAAsB,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASzF;AAID,8EAA8E;AAC9E,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAsB3E;AAED,yCAAyC;AACzC,wBAAsB,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAG1F;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,WAAW,GAAG,WAAW,CAAC,GAAG;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,EACD,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,CAAC,CAuB5B;AAED,iDAAiD;AACjD,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK1F"}
|
package/dist/theme.js
CHANGED
|
@@ -1,8 +1,44 @@
|
|
|
1
1
|
import { eq } from 'drizzle-orm';
|
|
2
2
|
import { users, instanceSettings } from '@commonpub/schema';
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
const BUILT_IN_THEME_IDS = new Set(['base', 'dark', 'generics', 'agora', 'agora-dark']);
|
|
4
|
+
/** Custom-theme ID prefix used in `data-theme` attribute + DB lookup. */
|
|
5
|
+
export const CUSTOM_THEME_PREFIX = 'cpub-custom-';
|
|
6
|
+
/** Storage key in `instance_settings` holding the custom-themes array. */
|
|
7
|
+
const CUSTOM_THEMES_KEY = 'theme.custom';
|
|
8
|
+
/** Slug used in `data-theme` for a DB-stored custom theme. */
|
|
9
|
+
export function customThemeDataAttr(id) {
|
|
10
|
+
return `${CUSTOM_THEME_PREFIX}${id}`;
|
|
11
|
+
}
|
|
12
|
+
/** Reverse of customThemeDataAttr — returns the raw custom theme ID or null. */
|
|
13
|
+
export function parseCustomThemeId(themeId) {
|
|
14
|
+
if (themeId.startsWith(CUSTOM_THEME_PREFIX)) {
|
|
15
|
+
return themeId.slice(CUSTOM_THEME_PREFIX.length);
|
|
16
|
+
}
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
function isBuiltInThemeId(id) {
|
|
20
|
+
return BUILT_IN_THEME_IDS.has(id);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Whether a theme ID is structurally valid (sanity check only — defends
|
|
24
|
+
* against path traversal / injection in the data attribute). Accepts:
|
|
25
|
+
* - built-in IDs
|
|
26
|
+
* - DB custom IDs (`cpub-custom-*`)
|
|
27
|
+
* - any slug-shaped string (covers code-registered themes from the
|
|
28
|
+
* thin layer app's `commonpub.config.ts`)
|
|
29
|
+
*
|
|
30
|
+
* Cross-checking against the actual list of available themes happens at
|
|
31
|
+
* the route-handler layer (`api/admin/themes/*` and the SSR middleware,
|
|
32
|
+
* which both see the runtime config). On read, unknown values fall back
|
|
33
|
+
* to `base` silently rather than throwing — the user shouldn't see a
|
|
34
|
+
* broken theme just because an admin deleted a custom one.
|
|
35
|
+
*/
|
|
36
|
+
function isAcceptableThemeId(id) {
|
|
37
|
+
if (isBuiltInThemeId(id))
|
|
38
|
+
return true;
|
|
39
|
+
if (parseCustomThemeId(id) !== null)
|
|
40
|
+
return true;
|
|
41
|
+
return /^[a-z0-9][a-z0-9_-]{0,63}$/i.test(id);
|
|
6
42
|
}
|
|
7
43
|
/**
|
|
8
44
|
* Resolve the active theme for a request.
|
|
@@ -16,7 +52,7 @@ export async function resolveTheme(db, userId) {
|
|
|
16
52
|
.select({ theme: users.theme })
|
|
17
53
|
.from(users)
|
|
18
54
|
.where(eq(users.id, userId));
|
|
19
|
-
if (user?.theme &&
|
|
55
|
+
if (user?.theme && isAcceptableThemeId(user.theme)) {
|
|
20
56
|
return user.theme;
|
|
21
57
|
}
|
|
22
58
|
}
|
|
@@ -25,26 +61,33 @@ export async function resolveTheme(db, userId) {
|
|
|
25
61
|
.select({ value: instanceSettings.value })
|
|
26
62
|
.from(instanceSettings)
|
|
27
63
|
.where(eq(instanceSettings.key, 'theme.default'));
|
|
28
|
-
if (setting?.value && typeof setting.value === 'string' &&
|
|
64
|
+
if (setting?.value && typeof setting.value === 'string' && isAcceptableThemeId(setting.value)) {
|
|
29
65
|
return setting.value;
|
|
30
66
|
}
|
|
31
67
|
// 3. Fallback
|
|
32
68
|
return 'base';
|
|
33
69
|
}
|
|
34
|
-
/** Get custom CSS token overrides configured at the instance level
|
|
70
|
+
/** Get custom CSS token overrides configured at the instance level. These
|
|
71
|
+
* apply on top of whatever theme is active (built-in, custom, or code). */
|
|
35
72
|
export async function getCustomTokenOverrides(db) {
|
|
36
73
|
const [setting] = await db
|
|
37
74
|
.select({ value: instanceSettings.value })
|
|
38
75
|
.from(instanceSettings)
|
|
39
76
|
.where(eq(instanceSettings.key, 'theme.token_overrides'));
|
|
40
|
-
if (setting?.value && typeof setting.value === 'object' && setting.value !== null) {
|
|
41
|
-
|
|
77
|
+
if (setting?.value && typeof setting.value === 'object' && setting.value !== null && !Array.isArray(setting.value)) {
|
|
78
|
+
// Filter only string values so malformed rows can't break SSR
|
|
79
|
+
const out = {};
|
|
80
|
+
for (const [k, v] of Object.entries(setting.value)) {
|
|
81
|
+
if (typeof v === 'string')
|
|
82
|
+
out[k] = v;
|
|
83
|
+
}
|
|
84
|
+
return out;
|
|
42
85
|
}
|
|
43
86
|
return {};
|
|
44
87
|
}
|
|
45
88
|
/** Update a user's theme preference */
|
|
46
89
|
export async function setUserTheme(db, userId, themeId) {
|
|
47
|
-
if (!
|
|
90
|
+
if (!isAcceptableThemeId(themeId)) {
|
|
48
91
|
throw new Error(`Invalid theme ID: ${themeId}`);
|
|
49
92
|
}
|
|
50
93
|
await db
|
|
@@ -52,4 +95,87 @@ export async function setUserTheme(db, userId, themeId) {
|
|
|
52
95
|
.set({ theme: themeId, updatedAt: new Date() })
|
|
53
96
|
.where(eq(users.id, userId));
|
|
54
97
|
}
|
|
98
|
+
// --- Custom (DB-stored) themes -------------------------------------------
|
|
99
|
+
/** List all DB-stored custom themes. Returns an empty array if none exist. */
|
|
100
|
+
export async function listCustomThemes(db) {
|
|
101
|
+
const [setting] = await db
|
|
102
|
+
.select({ value: instanceSettings.value })
|
|
103
|
+
.from(instanceSettings)
|
|
104
|
+
.where(eq(instanceSettings.key, CUSTOM_THEMES_KEY));
|
|
105
|
+
if (!setting?.value || !Array.isArray(setting.value))
|
|
106
|
+
return [];
|
|
107
|
+
// Defensive: filter to records that have the required shape so a partial
|
|
108
|
+
// write (or future schema change) can't crash SSR.
|
|
109
|
+
return setting.value.filter((row) => {
|
|
110
|
+
if (!row || typeof row !== 'object')
|
|
111
|
+
return false;
|
|
112
|
+
const r = row;
|
|
113
|
+
return (typeof r.id === 'string' &&
|
|
114
|
+
typeof r.name === 'string' &&
|
|
115
|
+
typeof r.family === 'string' &&
|
|
116
|
+
typeof r.isDark === 'boolean' &&
|
|
117
|
+
typeof r.tokens === 'object' &&
|
|
118
|
+
r.tokens !== null);
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
/** Fetch a single custom theme by ID. */
|
|
122
|
+
export async function getCustomTheme(db, id) {
|
|
123
|
+
const all = await listCustomThemes(db);
|
|
124
|
+
return all.find((t) => t.id === id) ?? null;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Upsert a custom theme. The whole `theme.custom` array is rewritten on each
|
|
128
|
+
* save — fine because the array is small (admins manage a handful of themes)
|
|
129
|
+
* and gives us atomic consistency without a separate table.
|
|
130
|
+
*/
|
|
131
|
+
export async function saveCustomTheme(db, theme, adminId) {
|
|
132
|
+
const all = await listCustomThemes(db);
|
|
133
|
+
const now = new Date().toISOString();
|
|
134
|
+
const existing = all.find((t) => t.id === theme.id);
|
|
135
|
+
const next = {
|
|
136
|
+
id: theme.id,
|
|
137
|
+
name: theme.name,
|
|
138
|
+
description: theme.description ?? '',
|
|
139
|
+
family: theme.family,
|
|
140
|
+
isDark: theme.isDark,
|
|
141
|
+
pairId: theme.pairId,
|
|
142
|
+
parentTheme: theme.parentTheme,
|
|
143
|
+
tokens: theme.tokens,
|
|
144
|
+
createdAt: existing?.createdAt ?? theme.createdAt ?? now,
|
|
145
|
+
updatedAt: now,
|
|
146
|
+
};
|
|
147
|
+
const newList = existing
|
|
148
|
+
? all.map((t) => (t.id === theme.id ? next : t))
|
|
149
|
+
: [...all, next];
|
|
150
|
+
await writeCustomThemes(db, newList, adminId);
|
|
151
|
+
return next;
|
|
152
|
+
}
|
|
153
|
+
/** Delete a custom theme. No-op if not found. */
|
|
154
|
+
export async function deleteCustomTheme(db, id, adminId) {
|
|
155
|
+
const all = await listCustomThemes(db);
|
|
156
|
+
if (!all.some((t) => t.id === id))
|
|
157
|
+
return;
|
|
158
|
+
const next = all.filter((t) => t.id !== id);
|
|
159
|
+
await writeCustomThemes(db, next, adminId);
|
|
160
|
+
}
|
|
161
|
+
async function writeCustomThemes(db, next, adminId) {
|
|
162
|
+
const existing = await db
|
|
163
|
+
.select({ id: instanceSettings.id })
|
|
164
|
+
.from(instanceSettings)
|
|
165
|
+
.where(eq(instanceSettings.key, CUSTOM_THEMES_KEY));
|
|
166
|
+
if (existing.length > 0) {
|
|
167
|
+
await db
|
|
168
|
+
.update(instanceSettings)
|
|
169
|
+
.set({ value: next, updatedBy: adminId, updatedAt: new Date() })
|
|
170
|
+
.where(eq(instanceSettings.key, CUSTOM_THEMES_KEY));
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
await db.insert(instanceSettings).values({
|
|
174
|
+
key: CUSTOM_THEMES_KEY,
|
|
175
|
+
value: next,
|
|
176
|
+
updatedBy: adminId,
|
|
177
|
+
updatedAt: new Date(),
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}
|
|
55
181
|
//# sourceMappingURL=theme.js.map
|
package/dist/theme.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAG5D,MAAM,
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@commonpub/server",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.56.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Framework-agnostic business logic for CommonPub instances",
|
|
6
6
|
"license": "AGPL-3.0-or-later",
|
|
@@ -110,14 +110,14 @@
|
|
|
110
110
|
"linkedom": "^0.18.12",
|
|
111
111
|
"megalodon": "^10.3.0",
|
|
112
112
|
"turndown": "^7.2.4",
|
|
113
|
+
"@commonpub/config": "0.14.0",
|
|
113
114
|
"@commonpub/docs": "0.6.3",
|
|
114
|
-
"@commonpub/
|
|
115
|
-
"@commonpub/infra": "0.
|
|
116
|
-
"@commonpub/
|
|
115
|
+
"@commonpub/auth": "0.6.0",
|
|
116
|
+
"@commonpub/infra": "0.8.0",
|
|
117
|
+
"@commonpub/protocol": "0.12.0",
|
|
118
|
+
"@commonpub/schema": "0.17.0",
|
|
117
119
|
"@commonpub/learning": "0.5.2",
|
|
118
|
-
"@commonpub/
|
|
119
|
-
"@commonpub/protocol": "0.11.0",
|
|
120
|
-
"@commonpub/auth": "0.6.0"
|
|
120
|
+
"@commonpub/editor": "0.7.11"
|
|
121
121
|
},
|
|
122
122
|
"peerDependencies": {
|
|
123
123
|
"drizzle-orm": "^0.45.1"
|