canopycms 0.0.55 → 0.0.56
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/api/github-sync.d.ts.map +1 -1
- package/dist/api/github-sync.js +28 -7
- package/dist/api/github-sync.js.map +1 -1
- package/dist/auth/caching-auth-plugin.d.ts +8 -1
- package/dist/auth/caching-auth-plugin.d.ts.map +1 -1
- package/dist/auth/caching-auth-plugin.js +6 -1
- package/dist/auth/caching-auth-plugin.js.map +1 -1
- package/dist/auth/plugin.d.ts +19 -10
- package/dist/auth/plugin.d.ts.map +1 -1
- package/dist/auth/plugin.js +12 -10
- package/dist/auth/plugin.js.map +1 -1
- package/dist/build/generate-ai-content.d.ts.map +1 -1
- package/dist/build/generate-ai-content.js +7 -0
- package/dist/build/generate-ai-content.js.map +1 -1
- package/dist/cli/generate-ai-content.js +438 -38
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +16 -8
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/templates.d.ts.map +1 -1
- package/dist/cli/templates.js +6 -3
- package/dist/cli/templates.js.map +1 -1
- package/dist/config/helpers.d.ts.map +1 -1
- package/dist/config/helpers.js +3 -0
- package/dist/config/helpers.js.map +1 -1
- package/dist/config/schemas/config.d.ts +3 -4
- package/dist/config/schemas/config.d.ts.map +1 -1
- package/dist/config/schemas/config.js +6 -3
- package/dist/config/schemas/config.js.map +1 -1
- package/dist/config/types.d.ts +6 -1
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config-test.d.ts +5 -3
- package/dist/config-test.d.ts.map +1 -1
- package/dist/config-test.js +9 -1
- package/dist/config-test.js.map +1 -1
- package/dist/content-listing.d.ts +3 -1
- package/dist/content-listing.d.ts.map +1 -1
- package/dist/content-listing.js +1 -0
- package/dist/content-listing.js.map +1 -1
- package/dist/content-store.d.ts.map +1 -1
- package/dist/content-store.js +11 -1
- package/dist/content-store.js.map +1 -1
- package/dist/editor/Editor.d.ts.map +1 -1
- package/dist/editor/Editor.js +19 -15
- package/dist/editor/Editor.js.map +1 -1
- package/dist/editor/hooks/useDraftManager.d.ts +7 -0
- package/dist/editor/hooks/useDraftManager.d.ts.map +1 -1
- package/dist/editor/hooks/useDraftManager.js +69 -31
- package/dist/editor/hooks/useDraftManager.js.map +1 -1
- package/dist/editor/hooks/useSchemaManager.d.ts +34 -10
- package/dist/editor/hooks/useSchemaManager.d.ts.map +1 -1
- package/dist/editor/hooks/useSchemaManager.js +20 -24
- package/dist/editor/hooks/useSchemaManager.js.map +1 -1
- package/dist/editor/schema-editor/CollectionEditor.d.ts +6 -5
- package/dist/editor/schema-editor/CollectionEditor.d.ts.map +1 -1
- package/dist/editor/schema-editor/CollectionEditor.js +9 -4
- package/dist/editor/schema-editor/CollectionEditor.js.map +1 -1
- package/dist/github-service.d.ts +63 -7
- package/dist/github-service.d.ts.map +1 -1
- package/dist/github-service.js +147 -39
- package/dist/github-service.js.map +1 -1
- package/dist/services.js +4 -0
- package/dist/services.js.map +1 -1
- package/dist/static/index.d.ts +32 -0
- package/dist/static/index.d.ts.map +1 -1
- package/dist/static/index.js +90 -0
- package/dist/static/index.js.map +1 -1
- package/dist/worker/cms-worker.d.ts +6 -3
- package/dist/worker/cms-worker.d.ts.map +1 -1
- package/dist/worker/cms-worker.js +21 -38
- package/dist/worker/cms-worker.js.map +1 -1
- package/package.json +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-sync.d.ts","sourceRoot":"","sources":["../../src/api/github-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"github-sync.d.ts","sourceRoot":"","sources":["../../src/api/github-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAOzD;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,UAAU,CAAA;CACxB;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,gBAAgB,CAAC,CAsG3B;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA0B/F"}
|
package/dist/api/github-sync.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { enqueueTask } from '../worker/task-queue.js';
|
|
2
2
|
import { getTaskQueueDir } from '../worker/task-queue-config.js';
|
|
3
3
|
import { clientOperatingStrategy } from '../operating-mode/index.js';
|
|
4
|
+
import { getErrorMessage } from '../utils/error.js';
|
|
4
5
|
/**
|
|
5
6
|
* Submit a branch: create or update a PR.
|
|
6
7
|
* Uses githubService directly if available, otherwise queues a task for the worker.
|
|
@@ -21,9 +22,22 @@ export async function syncSubmitPr(ctx, context) {
|
|
|
21
22
|
title: prTitle,
|
|
22
23
|
body: prBody,
|
|
23
24
|
});
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
// Best-effort draft->ready conversion. This branch updates a known
|
|
26
|
+
// PR number directly (not through createOrUpdatePR), so it doesn't
|
|
27
|
+
// get the shared helper's built-in markReadyIfDraft handling and
|
|
28
|
+
// does its own here. Wrapped separately so a conversion failure
|
|
29
|
+
// (e.g. a fine-grained token that can update PRs but lacks this
|
|
30
|
+
// mutation's scope) can't sink the update that already succeeded —
|
|
31
|
+
// consistent with createOrUpdatePullRequest's best-effort handling
|
|
32
|
+
// in github-service.ts.
|
|
33
|
+
try {
|
|
34
|
+
const pr = await githubService.getPullRequest(context.branch.pullRequestNumber);
|
|
35
|
+
if (pr.draft) {
|
|
36
|
+
await githubService.convertToReady(context.branch.pullRequestNumber);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
console.warn(`CanopyCMS: Failed to convert PR #${context.branch.pullRequestNumber} to ready for review for ${context.branch.name} (the PR update itself succeeded; continuing):`, getErrorMessage(err));
|
|
27
41
|
}
|
|
28
42
|
return {
|
|
29
43
|
prUrl: context.branch.pullRequestUrl,
|
|
@@ -39,16 +53,18 @@ export async function syncSubmitPr(ctx, context) {
|
|
|
39
53
|
// updates it instead of calling the non-idempotent create (which
|
|
40
54
|
// 422s on a duplicate and would leave the branch wedged in
|
|
41
55
|
// 'sync-failed' forever with no way to recover).
|
|
56
|
+
//
|
|
57
|
+
// markReadyIfDraft: true delegates draft->ready conversion to the
|
|
58
|
+
// shared createOrUpdatePullRequest helper (github-service.ts), which
|
|
59
|
+
// treats conversion as best-effort so a permissions-limited token
|
|
60
|
+
// can't fail this submit.
|
|
42
61
|
const result = await githubService.createOrUpdatePR({
|
|
43
62
|
head: context.branch.name,
|
|
44
63
|
base: context.branch.baseBranch ?? ctx.services.config.defaultBaseBranch ?? 'main',
|
|
45
64
|
title: prTitle,
|
|
46
65
|
body: prBody,
|
|
66
|
+
markReadyIfDraft: true,
|
|
47
67
|
});
|
|
48
|
-
const pr = await githubService.getPullRequest(result.number);
|
|
49
|
-
if (pr.draft) {
|
|
50
|
-
await githubService.convertToReady(result.number);
|
|
51
|
-
}
|
|
52
68
|
return {
|
|
53
69
|
prUrl: result.url,
|
|
54
70
|
prNumber: result.number,
|
|
@@ -82,6 +98,11 @@ export async function syncSubmitPr(ctx, context) {
|
|
|
82
98
|
// Target the fork point recorded at branch creation when available
|
|
83
99
|
baseBranch: context.branch.baseBranch ?? ctx.services.config.defaultBaseBranch ?? 'main',
|
|
84
100
|
pullRequestNumber: context.branch.pullRequestNumber,
|
|
101
|
+
// Content submits are an explicit "ready for review" action — convert
|
|
102
|
+
// a pre-existing draft PR to ready, unlike the settings-branch sync
|
|
103
|
+
// path (services.ts commitToSettingsBranch), which enqueues the same
|
|
104
|
+
// action without this flag.
|
|
105
|
+
markReadyIfDraft: true,
|
|
85
106
|
},
|
|
86
107
|
});
|
|
87
108
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-sync.js","sourceRoot":"","sources":["../../src/api/github-sync.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"github-sync.js","sourceRoot":"","sources":["../../src/api/github-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,13 +31,20 @@ export type TokenVerifier = (context: unknown) => Promise<{
|
|
|
31
31
|
*
|
|
32
32
|
* In dev mode, an optional `lazyRefresher` can be provided to auto-populate
|
|
33
33
|
* the cache on first request, eliminating the need to run `worker run-once` manually.
|
|
34
|
+
*
|
|
35
|
+
* This wrapper only forwards the inner plugin's `verifiesCredentials` affirmation via the
|
|
36
|
+
* `options` constructor param — it cannot launder an insecure plugin, because
|
|
37
|
+
* createNextCanopyContext asserts the INNER plugin (before wrapping) in context-wrapper.ts.
|
|
34
38
|
*/
|
|
35
39
|
export declare class CachingAuthPlugin implements AuthPlugin {
|
|
36
40
|
private readonly verifyToken;
|
|
37
41
|
private readonly cache;
|
|
38
42
|
private readonly lazyRefresher?;
|
|
39
43
|
private refreshPromise;
|
|
40
|
-
|
|
44
|
+
readonly verifiesCredentials: boolean;
|
|
45
|
+
constructor(verifyToken: TokenVerifier, cache: AuthCacheProvider, lazyRefresher?: (() => Promise<unknown>) | undefined, options?: {
|
|
46
|
+
verifiesCredentials?: boolean;
|
|
47
|
+
});
|
|
41
48
|
private ensureCachePopulated;
|
|
42
49
|
authenticate(context: unknown): Promise<AuthenticationResult>;
|
|
43
50
|
searchUsers(query: string, limit?: number): Promise<UserSearchResult[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"caching-auth-plugin.d.ts","sourceRoot":"","sources":["../../src/auth/caching-auth-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAK3D;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAA;IAC/D,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IAC/D,WAAW,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAA;IAC1C,YAAY,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;IACxC,qBAAqB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;CACtE;AAED;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,GAAG,IAAI,CAAC,CAAA;AAE1F
|
|
1
|
+
{"version":3,"file":"caching-auth-plugin.d.ts","sourceRoot":"","sources":["../../src/auth/caching-auth-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAK3D;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAA;IAC/D,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IAC/D,WAAW,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAA;IAC1C,YAAY,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;IACxC,qBAAqB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;CACtE;AAED;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,GAAG,IAAI,CAAC,CAAA;AAE1F;;;;;;;;;;;;;;GAcG;AACH,qBAAa,iBAAkB,YAAW,UAAU;IAKhD,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;IANjC,OAAO,CAAC,cAAc,CAA6B;IACnD,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAA;gBAGlB,WAAW,EAAE,aAAa,EAC1B,KAAK,EAAE,iBAAiB,EACxB,aAAa,CAAC,GAAE,MAAM,OAAO,CAAC,OAAO,CAAC,aAAA,EACvD,OAAO,CAAC,EAAE;QAAE,mBAAmB,CAAC,EAAE,OAAO,CAAA;KAAE;YAK/B,oBAAoB;IAY5B,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAsC7D,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAenE,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAQvE,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAQvE,UAAU,CAAC,KAAK,SAAK,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAQvD"}
|
|
@@ -10,13 +10,18 @@ const log = createDebugLogger({ prefix: 'CachingAuthPlugin' });
|
|
|
10
10
|
*
|
|
11
11
|
* In dev mode, an optional `lazyRefresher` can be provided to auto-populate
|
|
12
12
|
* the cache on first request, eliminating the need to run `worker run-once` manually.
|
|
13
|
+
*
|
|
14
|
+
* This wrapper only forwards the inner plugin's `verifiesCredentials` affirmation via the
|
|
15
|
+
* `options` constructor param — it cannot launder an insecure plugin, because
|
|
16
|
+
* createNextCanopyContext asserts the INNER plugin (before wrapping) in context-wrapper.ts.
|
|
13
17
|
*/
|
|
14
18
|
export class CachingAuthPlugin {
|
|
15
|
-
constructor(verifyToken, cache, lazyRefresher) {
|
|
19
|
+
constructor(verifyToken, cache, lazyRefresher, options) {
|
|
16
20
|
this.verifyToken = verifyToken;
|
|
17
21
|
this.cache = cache;
|
|
18
22
|
this.lazyRefresher = lazyRefresher;
|
|
19
23
|
this.refreshPromise = null;
|
|
24
|
+
this.verifiesCredentials = options?.verifiesCredentials === true;
|
|
20
25
|
}
|
|
21
26
|
async ensureCachePopulated() {
|
|
22
27
|
if (!this.lazyRefresher)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"caching-auth-plugin.js","sourceRoot":"","sources":["../../src/auth/caching-auth-plugin.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAElD,MAAM,GAAG,GAAG,iBAAiB,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAA;AAsB9D
|
|
1
|
+
{"version":3,"file":"caching-auth-plugin.js","sourceRoot":"","sources":["../../src/auth/caching-auth-plugin.ts"],"names":[],"mappings":"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"}
|
package/dist/auth/plugin.d.ts
CHANGED
|
@@ -7,17 +7,24 @@ import type { OperatingMode } from '../operating-mode/types';
|
|
|
7
7
|
*/
|
|
8
8
|
export interface AuthPlugin {
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
10
|
+
* Affirmative allowlist marker: set to true ONLY on plugins that
|
|
11
|
+
* cryptographically verify credentials (e.g. Clerk JWT verification).
|
|
12
|
+
* assertAuthPluginAllowedForMode() rejects any plugin without this marker
|
|
13
|
+
* whenever the operating mode is 'prod' — absence fails closed, so a
|
|
14
|
+
* third-party plugin that forgets the marker is rejected, not accepted.
|
|
15
15
|
*/
|
|
16
|
-
readonly
|
|
16
|
+
readonly verifiesCredentials?: boolean;
|
|
17
17
|
/**
|
|
18
18
|
* Authenticate user from request context.
|
|
19
19
|
* Returns user identity (without final groups) - core will apply bootstrap admins.
|
|
20
20
|
*
|
|
21
|
+
* Contract: CREDENTIAL failures (missing/invalid/expired token) resolve to
|
|
22
|
+
* `{ success: false }` — they map to 401s. CONFIGURATION errors (e.g. a
|
|
23
|
+
* required secret like CLERK_SECRET_KEY is absent) may THROW instead: they
|
|
24
|
+
* are operator mistakes, not user mistakes, and should surface as loud 500s
|
|
25
|
+
* rather than quiet auth denials. Callers invoking authenticate() directly
|
|
26
|
+
* (custom adapters) should be prepared for a rejection on misconfiguration.
|
|
27
|
+
*
|
|
21
28
|
* @param context - Framework-specific context (CanopyRequest, headers, etc.)
|
|
22
29
|
* @returns AuthenticationResult with user identity or error
|
|
23
30
|
*/
|
|
@@ -72,10 +79,12 @@ export interface AuthPlugin {
|
|
|
72
79
|
*/
|
|
73
80
|
export type AuthPluginFactory<TConfig = unknown> = (config: TConfig) => AuthPlugin;
|
|
74
81
|
/**
|
|
75
|
-
* Fail closed:
|
|
76
|
-
* CMS runs in production.
|
|
82
|
+
* Fail closed: only allow auth plugins that affirmatively declare real
|
|
83
|
+
* credential verification when the CMS runs in production.
|
|
77
84
|
*
|
|
78
|
-
*
|
|
85
|
+
* This is an allowlist, not a denylist: a plugin must set
|
|
86
|
+
* `verifiesCredentials: true` to pass this guard in prod. DevAuthPlugin (and
|
|
87
|
+
* any third-party plugin that forgets to set the marker) trusts request
|
|
79
88
|
* headers/cookies without cryptographic verification, so accepting it with
|
|
80
89
|
* mode 'prod' would let any caller impersonate any user — including admins —
|
|
81
90
|
* by sending a header like `X-Test-User: admin`. Call this wherever an
|
|
@@ -85,7 +94,7 @@ export type AuthPluginFactory<TConfig = unknown> = (config: TConfig) => AuthPlug
|
|
|
85
94
|
* Note: checking for the absence of verifyTokenOnly is NOT a substitute for
|
|
86
95
|
* this marker — the dev plugin implements verifyTokenOnly too.
|
|
87
96
|
*
|
|
88
|
-
* @throws Error when mode is 'prod' and the plugin
|
|
97
|
+
* @throws Error when mode is 'prod' and the plugin does not set `verifiesCredentials: true`
|
|
89
98
|
*/
|
|
90
99
|
export declare function assertAuthPluginAllowedForMode(plugin: AuthPlugin, mode: OperatingMode | undefined): void;
|
|
91
100
|
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/auth/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAE5D;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB;;;;;;OAMG;IACH,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/auth/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAE5D;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB;;;;;;OAMG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAEtC;;;;;;;;;;;;;OAaG;IACH,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAE7D;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAA;IAEvE;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAA;IAEvE;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IAEvE;;OAEG;IACH,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;IAEpD;;;;OAIG;IACH,oBAAoB,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,aAAa,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAA;IAEzF;;;;OAIG;IACH,eAAe,CAAC,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,YAAY,CAAA;KAAE,GAAG,IAAI,CAAC,CAAA;IAE5E;;;;OAIG;IACH,oBAAoB,CAAC,CACnB,SAAS,EAAE,MAAM,GAChB,CAAC,MAAM,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,GAAG,SAAS,CAAA;CAC1E;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,OAAO,GAAG,OAAO,IAAI,CAAC,MAAM,EAAE,OAAO,KAAK,UAAU,CAAA;AAElF;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,aAAa,GAAG,SAAS,GAC9B,IAAI,CAUN"}
|
package/dist/auth/plugin.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Fail closed:
|
|
3
|
-
* CMS runs in production.
|
|
2
|
+
* Fail closed: only allow auth plugins that affirmatively declare real
|
|
3
|
+
* credential verification when the CMS runs in production.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
5
|
+
* This is an allowlist, not a denylist: a plugin must set
|
|
6
|
+
* `verifiesCredentials: true` to pass this guard in prod. DevAuthPlugin (and
|
|
7
|
+
* any third-party plugin that forgets to set the marker) trusts request
|
|
6
8
|
* headers/cookies without cryptographic verification, so accepting it with
|
|
7
9
|
* mode 'prod' would let any caller impersonate any user — including admins —
|
|
8
10
|
* by sending a header like `X-Test-User: admin`. Call this wherever an
|
|
@@ -12,15 +14,15 @@
|
|
|
12
14
|
* Note: checking for the absence of verifyTokenOnly is NOT a substitute for
|
|
13
15
|
* this marker — the dev plugin implements verifyTokenOnly too.
|
|
14
16
|
*
|
|
15
|
-
* @throws Error when mode is 'prod' and the plugin
|
|
17
|
+
* @throws Error when mode is 'prod' and the plugin does not set `verifiesCredentials: true`
|
|
16
18
|
*/
|
|
17
19
|
export function assertAuthPluginAllowedForMode(plugin, mode) {
|
|
18
|
-
if (mode === 'prod' && plugin.
|
|
19
|
-
throw new Error("CanopyCMS:
|
|
20
|
-
'This plugin performs no real credential verification,
|
|
21
|
-
'any user (including admins). Configure a verifying auth
|
|
22
|
-
"(e.g. createClerkAuthPlugin from 'canopycms-auth-clerk' with
|
|
23
|
-
"or run with mode: 'dev' for local development.");
|
|
20
|
+
if (mode === 'prod' && plugin.verifiesCredentials !== true) {
|
|
21
|
+
throw new Error("CanopyCMS: an auth plugin was configured with mode: 'prod' but does not affirm " +
|
|
22
|
+
'`verifiesCredentials: true`. This plugin performs no real credential verification, ' +
|
|
23
|
+
'so anyone could impersonate any user (including admins). Configure a verifying auth ' +
|
|
24
|
+
"plugin for production (e.g. createClerkAuthPlugin from 'canopycms-auth-clerk' with " +
|
|
25
|
+
"CLERK_SECRET_KEY set), or run with mode: 'dev' for local development.");
|
|
24
26
|
}
|
|
25
27
|
}
|
|
26
28
|
//# sourceMappingURL=plugin.js.map
|
package/dist/auth/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/auth/plugin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/auth/plugin.ts"],"names":[],"mappings":"AAqFA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,8BAA8B,CAC5C,MAAkB,EAClB,IAA+B;IAE/B,IAAI,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,mBAAmB,KAAK,IAAI,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CACb,iFAAiF;YAC/E,qFAAqF;YACrF,sFAAsF;YACtF,qFAAqF;YACrF,uEAAuE,CAC1E,CAAA;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-ai-content.d.ts","sourceRoot":"","sources":["../../src/build/generate-ai-content.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAG1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"generate-ai-content.d.ts","sourceRoot":"","sources":["../../src/build/generate-ai-content.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAG1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAIlD,MAAM,WAAW,6BAA6B;IAC5C,MAAM,EAAE,YAAY,CAAA;IACpB,mBAAmB,EAAE,mBAAmB,CAAA;IACxC,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,eAAe,CAAA;IAC1B,2EAA2E;IAC3E,eAAe,CAAC,EAAE,cAAc,EAAE,CAAA;CACnC;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAiDnD"}
|
|
@@ -10,6 +10,8 @@ import { ContentStore } from '../content-store.js';
|
|
|
10
10
|
import { BranchSchemaCache } from '../branch-schema-cache.js';
|
|
11
11
|
import { generateAIContent } from '../ai/generate.js';
|
|
12
12
|
import { resolveBranchRoot } from '../ai/resolve-branch.js';
|
|
13
|
+
import { listEntries } from '../content-listing.js';
|
|
14
|
+
import { assertBuildEntriesValid } from '../static/index.js';
|
|
13
15
|
/**
|
|
14
16
|
* Generate AI content files and write them to disk.
|
|
15
17
|
*
|
|
@@ -30,6 +32,11 @@ export async function generateAIContentFiles(options) {
|
|
|
30
32
|
const cached = await schemaCache.getSchema(branchRoot, entrySchemaRegistry, contentRootName);
|
|
31
33
|
flatSchema = cached.flatSchema;
|
|
32
34
|
}
|
|
35
|
+
// Fail the build on abandoned create-scaffolds (schema-invalid entries) rather than baking them
|
|
36
|
+
// into generated AI content. Unconditional (no isBuildMode gate): this is an explicit build
|
|
37
|
+
// command, not something `next dev` runs incidentally.
|
|
38
|
+
const entriesForValidation = await listEntries(branchRoot, flatSchema, contentRootName);
|
|
39
|
+
assertBuildEntriesValid(entriesForValidation, 'AI content generation');
|
|
33
40
|
// Create store and generate
|
|
34
41
|
const store = new ContentStore(branchRoot, flatSchema);
|
|
35
42
|
const result = await generateAIContent({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-ai-content.js","sourceRoot":"","sources":["../../src/build/generate-ai-content.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACjC,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAG1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"generate-ai-content.js","sourceRoot":"","sources":["../../src/build/generate-ai-content.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACjC,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAG1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAA;AAYnD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAsC;IAEtC,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,OAAO,CAAA;IACrF,MAAM,eAAe,GAAG,MAAM,CAAC,WAAW,IAAI,SAAS,CAAA;IAEvD,sBAAsB;IACtB,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAElD,cAAc;IACd,IAAI,UAA4B,CAAA;IAChC,IAAI,eAAe,EAAE,CAAC;QACpB,UAAU,GAAG,eAAe,CAAA;IAC9B,CAAC;SAAM,CAAC;QACN,MAAM,WAAW,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACtD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC,UAAU,EAAE,mBAAmB,EAAE,eAAe,CAAC,CAAA;QAC5F,UAAU,GAAG,MAAM,CAAC,UAAU,CAAA;IAChC,CAAC;IAED,gGAAgG;IAChG,4FAA4F;IAC5F,uDAAuD;IACvD,MAAM,oBAAoB,GAAG,MAAM,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,eAAe,CAAC,CAAA;IACvF,uBAAuB,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,CAAA;IAEtE,4BAA4B;IAC5B,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;IACtD,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC;QACrC,KAAK;QACL,UAAU;QACV,WAAW,EAAE,eAAe;QAC5B,MAAM,EAAE,QAAQ;QAChB,YAAY,EAAE,MAAM,CAAC,YAAY;KAClC,CAAC,CAAA;IAEF,sBAAsB;IACtB,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,CAAA;IAC5D,IAAI,SAAS,GAAG,CAAC,CAAA;IAEjB,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC,CAAA;QACzE,4EAA4E;QAC5E,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,iDAAiD,QAAQ,EAAE,CAAC,CAAA;QAC9E,CAAC;QACD,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC/D,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;QAClD,SAAS,EAAE,CAAA;IACb,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAA;AACpD,CAAC"}
|