canopycms 0.0.61 → 0.0.63
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/ai/index.d.ts +9 -0
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +9 -0
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/json-to-markdown.js +1 -2
- package/dist/ai/json-to-markdown.js.map +1 -1
- package/dist/ai/to-plain-text.d.ts +57 -0
- package/dist/ai/to-plain-text.d.ts.map +1 -0
- package/dist/ai/to-plain-text.js +255 -0
- package/dist/ai/to-plain-text.js.map +1 -0
- package/dist/ai/transform-components.d.ts.map +1 -1
- package/dist/ai/transform-components.js +70 -5
- package/dist/ai/transform-components.js.map +1 -1
- package/dist/api/__test__/mock-client.d.ts +5 -1
- package/dist/api/__test__/mock-client.d.ts.map +1 -1
- package/dist/api/__test__/mock-client.js +9 -2
- package/dist/api/__test__/mock-client.js.map +1 -1
- package/dist/api/admin-branch-health.d.ts +36 -1
- package/dist/api/admin-branch-health.d.ts.map +1 -1
- package/dist/api/admin-branch-health.js +176 -2
- package/dist/api/admin-branch-health.js.map +1 -1
- package/dist/api/admin.d.ts +8 -1
- package/dist/api/admin.d.ts.map +1 -1
- package/dist/api/admin.js.map +1 -1
- package/dist/api/branch.d.ts.map +1 -1
- package/dist/api/branch.js +16 -2
- package/dist/api/branch.js.map +1 -1
- package/dist/api/client.d.ts +5 -1
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +6 -0
- package/dist/api/client.js.map +1 -1
- package/dist/api/content.d.ts +11 -5
- package/dist/api/content.d.ts.map +1 -1
- package/dist/api/content.js +79 -6
- package/dist/api/content.js.map +1 -1
- package/dist/api/entries.d.ts +10 -0
- package/dist/api/entries.d.ts.map +1 -1
- package/dist/api/entries.js +40 -15
- package/dist/api/entries.js.map +1 -1
- package/dist/api/schema.d.ts +4 -4
- package/dist/api/schema.d.ts.map +1 -1
- package/dist/api/schema.js +13 -13
- package/dist/api/schema.js.map +1 -1
- package/dist/assets/transform.d.ts.map +1 -1
- package/dist/assets/transform.js +19 -6
- package/dist/assets/transform.js.map +1 -1
- package/dist/authorization/branch.d.ts +55 -3
- package/dist/authorization/branch.d.ts.map +1 -1
- package/dist/authorization/branch.js +55 -9
- package/dist/authorization/branch.js.map +1 -1
- package/dist/authorization/types.d.ts +1 -1
- package/dist/authorization/types.d.ts.map +1 -1
- package/dist/branch-health.d.ts +13 -0
- package/dist/branch-health.d.ts.map +1 -1
- package/dist/branch-health.js +23 -0
- package/dist/branch-health.js.map +1 -1
- package/dist/build-canopy.d.ts +49 -0
- package/dist/build-canopy.d.ts.map +1 -0
- package/dist/build-canopy.js +51 -0
- package/dist/build-canopy.js.map +1 -0
- package/dist/cli/cli.js +935 -562
- package/dist/cli/generate-ai-content.js +837 -480
- package/dist/cli/init.js +25 -7
- package/dist/cli/template-files/Dockerfile.cms.template +19 -1
- package/dist/cli/template-files/canopycms.config.ts.template +25 -1
- package/dist/cli/template-files/cms-stack.ts.template +7 -1
- package/dist/client.d.ts +1 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js.map +1 -1
- package/dist/config/schemas/field.d.ts +15 -15
- package/dist/config/types.d.ts +2 -2
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +0 -1
- package/dist/config/types.js.map +1 -1
- package/dist/config/validation.d.ts +9 -0
- package/dist/config/validation.d.ts.map +1 -1
- package/dist/config/validation.js +14 -0
- package/dist/config/validation.js.map +1 -1
- package/dist/content-id-index.d.ts +97 -5
- package/dist/content-id-index.d.ts.map +1 -1
- package/dist/content-id-index.js +170 -18
- package/dist/content-id-index.js.map +1 -1
- package/dist/content-listing.d.ts +110 -5
- package/dist/content-listing.d.ts.map +1 -1
- package/dist/content-listing.js +164 -23
- package/dist/content-listing.js.map +1 -1
- package/dist/content-reader.d.ts +41 -4
- package/dist/content-reader.d.ts.map +1 -1
- package/dist/content-reader.js +17 -4
- package/dist/content-reader.js.map +1 -1
- package/dist/content-store.d.ts +91 -8
- package/dist/content-store.d.ts.map +1 -1
- package/dist/content-store.js +443 -258
- package/dist/content-store.js.map +1 -1
- package/dist/content-tree.d.ts +31 -2
- package/dist/content-tree.d.ts.map +1 -1
- package/dist/content-tree.js +22 -5
- package/dist/content-tree.js.map +1 -1
- package/dist/context.d.ts +30 -10
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +55 -4
- package/dist/context.js.map +1 -1
- package/dist/editor/BranchManager.d.ts.map +1 -1
- package/dist/editor/BranchManager.js +18 -6
- package/dist/editor/BranchManager.js.map +1 -1
- package/dist/editor/CanopyEditor.d.ts.map +1 -1
- package/dist/editor/CanopyEditor.js +2 -2
- package/dist/editor/CanopyEditor.js.map +1 -1
- package/dist/editor/CanopyEditorPage.d.ts +9 -1
- package/dist/editor/CanopyEditorPage.d.ts.map +1 -1
- package/dist/editor/CanopyEditorPage.js +9 -2
- package/dist/editor/CanopyEditorPage.js.map +1 -1
- package/dist/editor/Editor.d.ts +9 -1
- package/dist/editor/Editor.d.ts.map +1 -1
- package/dist/editor/Editor.js +58 -24
- package/dist/editor/Editor.js.map +1 -1
- package/dist/editor/FormRenderer.d.ts.map +1 -1
- package/dist/editor/FormRenderer.js +12 -0
- package/dist/editor/FormRenderer.js.map +1 -1
- package/dist/editor/admin/SystemHealthPanel.js +6 -2
- package/dist/editor/admin/SystemHealthPanel.js.map +1 -1
- package/dist/editor/components/EntryCreateModal.d.ts +9 -1
- package/dist/editor/components/EntryCreateModal.d.ts.map +1 -1
- package/dist/editor/components/EntryCreateModal.js +4 -1
- package/dist/editor/components/EntryCreateModal.js.map +1 -1
- package/dist/editor/fields/DateTimeField.d.ts +46 -0
- package/dist/editor/fields/DateTimeField.d.ts.map +1 -0
- package/dist/editor/fields/DateTimeField.js +66 -0
- package/dist/editor/fields/DateTimeField.js.map +1 -0
- package/dist/editor/fields/NumberField.d.ts +34 -0
- package/dist/editor/fields/NumberField.d.ts.map +1 -0
- package/dist/editor/fields/NumberField.js +53 -0
- package/dist/editor/fields/NumberField.js.map +1 -0
- package/dist/editor/fields/NumberListField.d.ts +25 -0
- package/dist/editor/fields/NumberListField.d.ts.map +1 -0
- package/dist/editor/fields/NumberListField.js +53 -0
- package/dist/editor/fields/NumberListField.js.map +1 -0
- package/dist/editor/hooks/useBranchManager.d.ts.map +1 -1
- package/dist/editor/hooks/useBranchManager.js +115 -26
- package/dist/editor/hooks/useBranchManager.js.map +1 -1
- package/dist/editor/hooks/useDraftManager.d.ts +8 -0
- package/dist/editor/hooks/useDraftManager.d.ts.map +1 -1
- package/dist/editor/hooks/useDraftManager.js +261 -21
- package/dist/editor/hooks/useDraftManager.js.map +1 -1
- package/dist/editor/hooks/useEntryManager.d.ts +21 -0
- package/dist/editor/hooks/useEntryManager.d.ts.map +1 -1
- package/dist/editor/hooks/useEntryManager.js +25 -2
- package/dist/editor/hooks/useEntryManager.js.map +1 -1
- package/dist/editor/theme.d.ts +8 -8
- package/dist/entry-schema.d.ts +228 -8
- package/dist/entry-schema.d.ts.map +1 -1
- package/dist/entry-schema.js +124 -0
- package/dist/entry-schema.js.map +1 -1
- package/dist/git-manager.d.ts +51 -7
- package/dist/git-manager.d.ts.map +1 -1
- package/dist/git-manager.js +105 -14
- package/dist/git-manager.js.map +1 -1
- package/dist/http/handler.d.ts.map +1 -1
- package/dist/http/handler.js +70 -27
- package/dist/http/handler.js.map +1 -1
- package/dist/http/router.d.ts.map +1 -1
- package/dist/http/router.js +40 -3
- package/dist/http/router.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/operating-mode/deployment-name-fixtures.d.ts +29 -0
- package/dist/operating-mode/deployment-name-fixtures.d.ts.map +1 -0
- package/dist/operating-mode/deployment-name-fixtures.js +55 -0
- package/dist/operating-mode/deployment-name-fixtures.js.map +1 -0
- package/dist/operating-mode/deployment-name.d.ts +9 -0
- package/dist/operating-mode/deployment-name.d.ts.map +1 -1
- package/dist/operating-mode/deployment-name.js +9 -1
- package/dist/operating-mode/deployment-name.js.map +1 -1
- package/dist/operating-mode/index.d.ts +2 -1
- package/dist/operating-mode/index.d.ts.map +1 -1
- package/dist/operating-mode/index.js +4 -1
- package/dist/operating-mode/index.js.map +1 -1
- package/dist/operating-mode/mode-env.d.ts +58 -0
- package/dist/operating-mode/mode-env.d.ts.map +1 -0
- package/dist/operating-mode/mode-env.js +97 -0
- package/dist/operating-mode/mode-env.js.map +1 -0
- package/dist/resolve-canopy-user.d.ts +34 -0
- package/dist/resolve-canopy-user.d.ts.map +1 -0
- package/dist/resolve-canopy-user.js +55 -0
- package/dist/resolve-canopy-user.js.map +1 -0
- package/dist/schema/schema-store.d.ts +53 -2
- package/dist/schema/schema-store.d.ts.map +1 -1
- package/dist/schema/schema-store.js +92 -21
- package/dist/schema/schema-store.js.map +1 -1
- package/dist/server.d.ts +60 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +58 -0
- package/dist/server.js.map +1 -1
- package/dist/services.d.ts +1 -2
- package/dist/services.d.ts.map +1 -1
- package/dist/services.js +42 -12
- package/dist/services.js.map +1 -1
- package/dist/settings-workspace.d.ts +40 -0
- package/dist/settings-workspace.d.ts.map +1 -1
- package/dist/settings-workspace.js +139 -151
- package/dist/settings-workspace.js.map +1 -1
- package/dist/static/index.d.ts +65 -5
- package/dist/static/index.d.ts.map +1 -1
- package/dist/static/index.js +65 -12
- package/dist/static/index.js.map +1 -1
- package/dist/static/seo.d.ts +150 -0
- package/dist/static/seo.d.ts.map +1 -0
- package/dist/static/seo.js +189 -0
- package/dist/static/seo.js.map +1 -0
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/content-write-lock.d.ts +127 -0
- package/dist/utils/content-write-lock.d.ts.map +1 -0
- package/dist/utils/content-write-lock.js +170 -0
- package/dist/utils/content-write-lock.js.map +1 -0
- package/dist/utils/error.d.ts +1 -1
- package/dist/utils/error.js +1 -1
- package/dist/utils/git.d.ts +16 -0
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +22 -0
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/sanitize-href.d.ts +74 -3
- package/dist/utils/sanitize-href.d.ts.map +1 -1
- package/dist/utils/sanitize-href.js +125 -6
- package/dist/utils/sanitize-href.js.map +1 -1
- package/dist/validation/entry-link-validator.d.ts +1 -1
- package/dist/validation/entry-link-validator.js +3 -3
- package/dist/validation/entry-link-validator.js.map +1 -1
- package/dist/validation/entry-validator.js +1 -1
- package/dist/validation/entry-validator.js.map +1 -1
- package/dist/worker/cms-worker.d.ts +13 -0
- package/dist/worker/cms-worker.d.ts.map +1 -1
- package/dist/worker/cms-worker.js +326 -264
- package/dist/worker/cms-worker.js.map +1 -1
- package/package.json +2 -2
package/dist/http/handler.js
CHANGED
|
@@ -4,11 +4,15 @@ import { assertAuthPluginAllowedForMode } from '../auth/plugin.js';
|
|
|
4
4
|
import { createCanopyServices } from '../services.js';
|
|
5
5
|
import { loadBranchContext, BranchWorkspaceManager } from '../branch-workspace.js';
|
|
6
6
|
import { BranchMetadataCorruptError } from '../branch-metadata.js';
|
|
7
|
+
import { resolveCanopyUser } from '../resolve-canopy-user.js';
|
|
7
8
|
import { authResultToCanopyUser } from '../user.js';
|
|
8
|
-
import {
|
|
9
|
+
import { isAdmin } from '../authorization/index.js';
|
|
9
10
|
import { clientOperatingStrategy, operatingStrategy } from '../operating-mode/index.js';
|
|
10
11
|
import { getErrorMessage, redactCredentials, sanitizeErrorMessage } from '../utils/error.js';
|
|
11
|
-
|
|
12
|
+
// canopyLogError, not console.error: http/handler.ts is shared code and not
|
|
13
|
+
// guaranteed to stay out of the worker's runtime import closure (see
|
|
14
|
+
// utils/logger.ts) — new log lines here should go through the indirection.
|
|
15
|
+
import { canopyLogError } from '../utils/logger.js';
|
|
12
16
|
/**
|
|
13
17
|
* Build API context from options.
|
|
14
18
|
*/
|
|
@@ -155,24 +159,25 @@ export function createCanopyRequestHandler(options) {
|
|
|
155
159
|
if (!authResult.success || !authResult.user) {
|
|
156
160
|
return jsonResponse({ ok: false, status: 401, error: authResult.error ?? 'Unauthorized' }, 401);
|
|
157
161
|
}
|
|
158
|
-
//
|
|
159
|
-
//
|
|
160
|
-
//
|
|
161
|
-
//
|
|
162
|
+
// Ensure the base/active branch workspace is provisioned on first
|
|
163
|
+
// request. Internal groups no longer come from this branch (see
|
|
164
|
+
// resolveCanopyUser below) — this call is purely so many endpoints that
|
|
165
|
+
// assume the base/active workspace already exists (registry reads, etc.)
|
|
166
|
+
// don't return confusing empty results on a cold start, so fail loudly
|
|
167
|
+
// on a real provisioning error rather than let that surprise a later
|
|
168
|
+
// handler.
|
|
162
169
|
const baseBranch = apiCtx.services.config.defaultBaseBranch ?? 'main';
|
|
163
|
-
let mainBranchContext;
|
|
164
170
|
try {
|
|
165
|
-
|
|
171
|
+
await apiCtx.getBranchContext(baseBranch);
|
|
166
172
|
}
|
|
167
173
|
catch (err) {
|
|
168
174
|
const message = getErrorMessage(err);
|
|
169
175
|
if (err instanceof BranchMetadataCorruptError) {
|
|
170
176
|
// Corrupt BASE branch metadata must not take down every endpoint —
|
|
171
177
|
// the /admin recovery surface is how it gets fixed. Degrade instead:
|
|
172
|
-
//
|
|
173
|
-
//
|
|
174
|
-
console.error(`CanopyCMS: Base branch '${baseBranch}' has corrupt metadata; serving without
|
|
175
|
-
mainBranchContext = null;
|
|
178
|
+
// keep routing (internal groups come from the settings workspace
|
|
179
|
+
// below, independent of this branch's health).
|
|
180
|
+
console.error(`CanopyCMS: Base branch '${baseBranch}' has corrupt metadata; serving without base-branch provisioning until repaired: ${redactCredentials(message)}`);
|
|
176
181
|
}
|
|
177
182
|
else {
|
|
178
183
|
// Full path detail to server logs; sanitized detail to the
|
|
@@ -186,23 +191,61 @@ export function createCanopyRequestHandler(options) {
|
|
|
186
191
|
}, 503);
|
|
187
192
|
}
|
|
188
193
|
}
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
194
|
+
// Resolve the CanopyUser: internal groups are the single source of
|
|
195
|
+
// truth for group-based privileges and MUST be loaded from the settings
|
|
196
|
+
// workspace (see authorization/content.ts's createContentAccessChecker,
|
|
197
|
+
// the pattern this follows) — never from a content branch clone, which
|
|
198
|
+
// nothing in the product ever writes groups.json into. Fails loudly
|
|
199
|
+
// (throws, mapped to a 503 below) rather than degrading to an empty
|
|
200
|
+
// group list: "no groups" reads as "no privileges", so a silent
|
|
201
|
+
// fallback would be a silent authorization change.
|
|
202
|
+
let user;
|
|
203
|
+
try {
|
|
204
|
+
user = await resolveCanopyUser(authResult, {
|
|
205
|
+
getSettingsBranchRoot: apiCtx.services.getSettingsBranchRoot,
|
|
206
|
+
mode: apiCtx.services.config.mode,
|
|
207
|
+
bootstrapAdminIds: apiCtx.services.bootstrapAdminIds,
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
catch (err) {
|
|
211
|
+
const message = getErrorMessage(err);
|
|
212
|
+
canopyLogError(`CanopyCMS: Failed to resolve internal groups from the settings workspace: ${redactCredentials(message)}`);
|
|
213
|
+
// Same trade as the base-branch degradation above, for the same
|
|
214
|
+
// reason: /admin is the recovery surface for exactly this failure
|
|
215
|
+
// (a renamed settings branch trips assertSettingsWorkspaceIdentity
|
|
216
|
+
// permanently until a human intervenes), so 503ing it too leaves an
|
|
217
|
+
// operator with no in-product way to see why anything is down.
|
|
218
|
+
//
|
|
219
|
+
// Safe because it can only REMOVE privilege, never grant it.
|
|
220
|
+
// `authResultToCanopyUser` merges internal groups ADDITIVELY, and
|
|
221
|
+
// path rules select on the user matching a target (never on the user
|
|
222
|
+
// LACKING a group), so dropping them can flip allowed -> denied and
|
|
223
|
+
// not the reverse. The one privilege that survives is bootstrap
|
|
224
|
+
// admin, which comes from CANOPY_BOOTSTRAP_ADMIN_IDS in the
|
|
225
|
+
// environment and does not touch the settings workspace at all.
|
|
226
|
+
//
|
|
227
|
+
// A non-bootstrap admin still gets the 503, deliberately: the admin
|
|
228
|
+
// guard would answer them 403, and "settings workspace unavailable"
|
|
229
|
+
// is the more actionable of the two.
|
|
230
|
+
const degradedUser = authResultToCanopyUser(authResult, apiCtx.services.bootstrapAdminIds);
|
|
231
|
+
if (pathSegments[0] === 'admin' && isAdmin(degradedUser.groups)) {
|
|
232
|
+
canopyLogError(`CanopyCMS: Serving ${req.method} /admin for a bootstrap admin with group-based privileges UNRESOLVED (settings workspace unavailable) so the recovery endpoints stay reachable.`);
|
|
233
|
+
user = degradedUser;
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
// Name the settings branch: the failure this most often means is a
|
|
237
|
+
// changed deploymentName pointing the deployment at a branch that
|
|
238
|
+
// isn't the one its workspace was cloned for, and the branch name
|
|
239
|
+
// is the part of that an operator can act on without CloudWatch
|
|
240
|
+
// (paths are redacted out of client-facing messages).
|
|
241
|
+
const settingsBranch = operatingStrategy(apiCtx.services.config.mode).getSettingsBranchName(apiCtx.services.config);
|
|
242
|
+
return jsonResponse({
|
|
243
|
+
ok: false,
|
|
244
|
+
status: 503,
|
|
245
|
+
error: `Settings workspace unavailable (settings branch '${settingsBranch}'): ${sanitizeErrorMessage(message)}`,
|
|
246
|
+
}, 503);
|
|
202
247
|
}
|
|
203
|
-
warnedNoAdmins = true;
|
|
204
248
|
}
|
|
205
|
-
const user = authResultToCanopyUser(authResult, apiCtx.services.bootstrapAdminIds, internalGroups);
|
|
206
249
|
// API routes require authentication - reject anonymous users
|
|
207
250
|
if (user.type === 'anonymous') {
|
|
208
251
|
return jsonResponse({ ok: false, status: 401, error: authResult.error ?? 'Unauthorized' }, 401);
|
package/dist/http/handler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/http/handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAE7C,OAAO,EAAE,8BAA8B,EAAmB,MAAM,gBAAgB,CAAA;AAChF,OAAO,EAAE,oBAAoB,EAAuB,MAAM,aAAa,CAAA;AAGvE,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAC/E,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAChD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/http/handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/http/router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAenD;;;;;;;;GAQG;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,oBAAoB,CAAC,CAAA;AAEhG;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAA;IACnD,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;IAC1B,OAAO,EAAE,aAAa,CAAA;IAEtB,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,KACtE;QACE,EAAE,EAAE,IAAI,CAAA;QACR,MAAM,CAAC,EAAE,OAAO,CAAA;QAChB,IAAI,CAAC,EAAE,OAAO,CAAA;KACf,GACD;QACE,EAAE,EAAE,KAAK,CAAA;QACT,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;IACL;;;;;OAKG;IACH,UAAU,CAAC,EAAE,WAAW,CAAA;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,aAAa,CAAA;IACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAE9B,QAAQ,CAAC,EAAE,eAAe,CAAC,UAAU,CAAC,CAAA;IACtC,UAAU,CAAC,EAAE,eAAe,CAAC,YAAY,CAAC,CAAA;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,4BAA4B;IAC5B,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,CAAA;IAElC,mEAAmE;IACnE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,UAAU,GAAG,IAAI,CAAA;CAC7D;
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/http/router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAenD;;;;;;;;GAQG;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,oBAAoB,CAAC,CAAA;AAEhG;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAA;IACnD,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;IAC1B,OAAO,EAAE,aAAa,CAAA;IAEtB,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,KACtE;QACE,EAAE,EAAE,IAAI,CAAA;QACR,MAAM,CAAC,EAAE,OAAO,CAAA;QAChB,IAAI,CAAC,EAAE,OAAO,CAAA;KACf,GACD;QACE,EAAE,EAAE,KAAK,CAAA;QACT,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;IACL;;;;;OAKG;IACH,UAAU,CAAC,EAAE,WAAW,CAAA;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,aAAa,CAAA;IACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAE9B,QAAQ,CAAC,EAAE,eAAe,CAAC,UAAU,CAAC,CAAA;IACtC,UAAU,CAAC,EAAE,eAAe,CAAC,YAAY,CAAC,CAAA;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,4BAA4B;IAC5B,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,CAAA;IAElC,mEAAmE;IACnE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,UAAU,GAAG,IAAI,CAAA;CAC7D;AA+ID;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,SAAS,eAAe,EAAE,EAClC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAAE,GACjB,UAAU,GAAG,IAAI,CA6CnB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,CAOjD"}
|
package/dist/http/router.js
CHANGED
|
@@ -47,6 +47,15 @@ function buildCanopyRoutes() {
|
|
|
47
47
|
/**
|
|
48
48
|
* Match a route pattern against actual path segments.
|
|
49
49
|
* Supports :param for single-segment params and ...slug for catch-all.
|
|
50
|
+
*
|
|
51
|
+
* Params are returned RAW (undecoded) here on purpose (C5): matching is
|
|
52
|
+
* purely structural (segment counts, static-segment equality) and must never
|
|
53
|
+
* throw. Decoding happens exactly once, uniformly for :param and catch-all
|
|
54
|
+
* alike, in matchRoute() below - after the winning route has been picked, so
|
|
55
|
+
* a malformed `%` escape is handled in a single place instead of aborting
|
|
56
|
+
* mid-match (which previously let a URIError from a bad :param escape to
|
|
57
|
+
* `decodeURIComponent` bubble all the way to http/handler.ts's top-level
|
|
58
|
+
* catch and surface as a 500).
|
|
50
59
|
*/
|
|
51
60
|
const matchPattern = (pattern, actual) => {
|
|
52
61
|
const params = {};
|
|
@@ -63,8 +72,8 @@ const matchPattern = (pattern, actual) => {
|
|
|
63
72
|
if (!next)
|
|
64
73
|
return null;
|
|
65
74
|
if (part.startsWith(':')) {
|
|
66
|
-
// Dynamic segment - extract param
|
|
67
|
-
params[part.slice(1)] =
|
|
75
|
+
// Dynamic segment - extract param (still raw; see decode note above)
|
|
76
|
+
params[part.slice(1)] = next;
|
|
68
77
|
}
|
|
69
78
|
else if (part !== next) {
|
|
70
79
|
// Static segment - must match exactly
|
|
@@ -76,6 +85,17 @@ const matchPattern = (pattern, actual) => {
|
|
|
76
85
|
return null;
|
|
77
86
|
return { params };
|
|
78
87
|
};
|
|
88
|
+
/**
|
|
89
|
+
* Synthetic handler for a request whose matched route params contain a
|
|
90
|
+
* malformed `%` escape sequence (C5) - e.g. a lone `%` or `%zz`. Reported as
|
|
91
|
+
* a 400 (the request is malformed), never registered in the real route
|
|
92
|
+
* table, and only ever reachable via matchRoute()'s decode step below.
|
|
93
|
+
*/
|
|
94
|
+
const malformedPathHandler = async () => ({
|
|
95
|
+
ok: false,
|
|
96
|
+
status: 400,
|
|
97
|
+
error: 'Malformed URL-encoded path segment',
|
|
98
|
+
});
|
|
79
99
|
/**
|
|
80
100
|
* Specificity rank of a pattern segment. Higher wins.
|
|
81
101
|
* A literal ("static") segment is more specific than a `:param`, which is
|
|
@@ -149,9 +169,26 @@ export function matchRoute(routes, method, segments) {
|
|
|
149
169
|
}
|
|
150
170
|
if (!best)
|
|
151
171
|
return null;
|
|
172
|
+
// Decode every matched param exactly once, here - uniformly for :param and
|
|
173
|
+
// catch-all values alike (C5). A malformed escape must produce a 400, not
|
|
174
|
+
// an uncaught URIError that would otherwise reach http/handler.ts's
|
|
175
|
+
// top-level catch and get reported as a 500. Downstream consumers
|
|
176
|
+
// (Zod's logicalPathSchema/branchNameSchema etc. in each route's
|
|
177
|
+
// `validate`, and any handler-local re-check such as entries.ts's
|
|
178
|
+
// parseLogicalPath call) still run their own traversal validation against
|
|
179
|
+
// this same final decoded value - decoding centrally here does not skip
|
|
180
|
+
// that, it just removes the redundant second decode that used to run
|
|
181
|
+
// alongside it in a few handlers.
|
|
182
|
+
let decodedParams;
|
|
183
|
+
try {
|
|
184
|
+
decodedParams = Object.fromEntries(Object.entries(best.params).map(([key, value]) => [key, decodeURIComponent(value)]));
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
return { handler: malformedPathHandler, params: {} };
|
|
188
|
+
}
|
|
152
189
|
return {
|
|
153
190
|
handler: best.route.handler,
|
|
154
|
-
params:
|
|
191
|
+
params: decodedParams,
|
|
155
192
|
validate: best.route.validate, // Include validation function if present
|
|
156
193
|
bodyFormat: best.route.bodyFormat,
|
|
157
194
|
};
|
package/dist/http/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/http/router.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAA;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAgE3C;;;;;;;GAOG;AACH,SAAS,iBAAiB;IACxB,OAAO;QACL,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;QAC/B,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC;QACjC,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;QAChC,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;QAChC,GAAG,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAAC;QAC1C,GAAG,MAAM,CAAC,MAAM,CAAC,yBAAyB,CAAC;QAC3C,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;QAC9B,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;QAC9B,aAAa;QACb,GAAG,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC;QACnC,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;QAC9B,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;QAC7B,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;QAC/B,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;KAC/B,CAAC,GAAG,CACH,CAAC,KAAK,EAAmB,EAAE,CAAC,CAAC;QAC3B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,gFAAgF;QAChF,QAAQ,EAAE,UAAU,IAAI,KAAK,CAAC,CAAC,CAAE,KAAK,CAAC,QAAwC,CAAC,CAAC,CAAC,SAAS;QAC3F,UAAU,EACR,YAAY,IAAI,KAAK,CAAC,CAAC,CAAE,KAAK,CAAC,UAA4C,CAAC,CAAC,CAAC,SAAS;KAC1F,CAAC,CACH,CAAA;AACH,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/http/router.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export * from './config';
|
|
|
3
3
|
export * from './entry-schema';
|
|
4
4
|
export * from './types';
|
|
5
5
|
export * from './user';
|
|
6
|
+
export { resolveEntryTitle } from './utils/title-field';
|
|
6
7
|
export { defineAIContentConfig } from './ai/types';
|
|
7
8
|
export type { AIContentConfig, ExcludeConfig, BundleConfig, BundleFilter, FieldTransformFn, FieldTransforms, } from './ai/types';
|
|
8
9
|
export type { AuthPlugin, AuthPluginFactory } from './auth/plugin';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,cAAc,UAAU,CAAA;AACxB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,cAAc,UAAU,CAAA;AACxB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA;AAOtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAGvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAClD,YAAY,EACV,eAAe,EACf,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,eAAe,GAChB,MAAM,YAAY,CAAA;AAGnB,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAClE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACzF,OAAO,EACL,eAAe,EACf,aAAa,EACb,cAAc,EACd,mBAAmB,GACpB,MAAM,wBAAwB,CAAA;AAC/B,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACzD,YAAY,EACV,eAAe,EACf,uBAAuB,EACvB,sBAAsB,EACtB,YAAY,EACZ,iBAAiB,GAClB,MAAM,gBAAgB,CAAA;AACvB,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAI5E,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAC1D,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACnE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -3,6 +3,13 @@ export * from './config/index.js';
|
|
|
3
3
|
export * from './entry-schema.js';
|
|
4
4
|
export * from './types.js';
|
|
5
5
|
export * from './user.js';
|
|
6
|
+
// Title-derivation fallback chain (schema isTitle field -> data.title/name ->
|
|
7
|
+
// entry-type label -> humanized slug -> "Untitled"). Client-safe (its only
|
|
8
|
+
// import is `FieldConfig`/`InlineGroupFieldConfig` types, erased at compile
|
|
9
|
+
// time, so no runtime dependency at all) — re-exported here as well as from
|
|
10
|
+
// 'canopycms/server' so client-side list/preview UI can compute the same
|
|
11
|
+
// display title as build scripts without a second implementation.
|
|
12
|
+
export { resolveEntryTitle } from './utils/title-field.js';
|
|
6
13
|
// AI content config helper — client-safe (no node: imports).
|
|
7
14
|
// Server-only AI features (handler, generator) are in 'canopycms/ai'.
|
|
8
15
|
export { defineAIContentConfig } from './ai/types.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,cAAc,UAAU,CAAA;AACxB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA;AACtB,6DAA6D;AAC7D,sEAAsE;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAalD,OAAO,EACL,eAAe,EACf,aAAa,EACb,cAAc,EACd,mBAAmB,GACpB,MAAM,wBAAwB,CAAA;AAU/B,6EAA6E;AAC7E,sEAAsE;AACtE,yEAAyE;AACzE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,cAAc,UAAU,CAAA;AACxB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA;AACtB,8EAA8E;AAC9E,2EAA2E;AAC3E,4EAA4E;AAC5E,4EAA4E;AAC5E,yEAAyE;AACzE,kEAAkE;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,6DAA6D;AAC7D,sEAAsE;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAalD,OAAO,EACL,eAAe,EACf,aAAa,EACb,cAAc,EACd,mBAAmB,GACpB,MAAM,wBAAwB,CAAA;AAU/B,6EAA6E;AAC7E,sEAAsE;AACtE,yEAAyE;AACzE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared deployment-name test fixture.
|
|
3
|
+
*
|
|
4
|
+
* The rule that decides whether a `deploymentName` is usable exists TWICE, by
|
|
5
|
+
* necessity: once at runtime (`deployment-name.ts`'s `isValidDeploymentName`)
|
|
6
|
+
* and once at synth time (`canopycms-cdk`'s `constructs/cms-service.ts`).
|
|
7
|
+
* `canopycms-cdk` publishes without a runtime dependency on `canopycms`, so
|
|
8
|
+
* the construct cannot import the real thing.
|
|
9
|
+
*
|
|
10
|
+
* The dangerous drift is asymmetric: a rule TIGHTENED at runtime but not at
|
|
11
|
+
* synth produces a stack that synths clean and then crash-loops the Lambda at
|
|
12
|
+
* boot — precisely what the synth guard exists to prevent. So both packages'
|
|
13
|
+
* suites assert against this one list, and `canopycms-cdk`'s suite additionally
|
|
14
|
+
* asserts that the construct's verdict matches this package's predicate for
|
|
15
|
+
* every name here. Add a case here when you change either copy of the rule.
|
|
16
|
+
*
|
|
17
|
+
* Deliberately dependency-free (plain arrays, no vitest import) so the CDK
|
|
18
|
+
* suite can import it across the package boundary without dragging anything
|
|
19
|
+
* along.
|
|
20
|
+
*/
|
|
21
|
+
/** Names both copies of the rule must ACCEPT. */
|
|
22
|
+
export declare const VALID_DEPLOYMENT_NAMES: readonly ["prod", "staging", "acme-prod_2.1", "a", "9lives", "team.prod", "PROD", "x.locked"];
|
|
23
|
+
/**
|
|
24
|
+
* Names both copies of the rule must REJECT, each with the reason it exists —
|
|
25
|
+
* every entry is a value git itself would refuse as a ref component, or one
|
|
26
|
+
* that would corrupt the worker's `.env` heredoc.
|
|
27
|
+
*/
|
|
28
|
+
export declare const INVALID_DEPLOYMENT_NAMES: readonly [readonly ["a slash (would add a ref hierarchy level)", "team/prod"], readonly ["whitespace", "my prod"], readonly ["a leading dash (parses as a git option)", "-prod"], readonly ["a git-forbidden character", "prod:1"], readonly ["dot-dot", "a..b"], readonly ["a leading dot", ".prod"], readonly ["a trailing dot", "prod."], readonly ["a .lock suffix", "prod.lock"], readonly ["a tilde", "prod~1"], readonly ["a caret", "prod^1"], readonly ["a question mark", "prod?"], readonly ["an asterisk", "prod*"], readonly ["an open bracket", "prod["], readonly ["a backslash", "prod\\1"], readonly ["the empty string", ""], readonly ["a newline (would inject a line into the worker .env)", "prod\nEVIL=1"]];
|
|
29
|
+
//# sourceMappingURL=deployment-name-fixtures.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment-name-fixtures.d.ts","sourceRoot":"","sources":["../../src/operating-mode/deployment-name-fixtures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,iDAAiD;AACjD,eAAO,MAAM,sBAAsB,+FASzB,CAAA;AAEV;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,osBAiB3B,CAAA"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared deployment-name test fixture.
|
|
3
|
+
*
|
|
4
|
+
* The rule that decides whether a `deploymentName` is usable exists TWICE, by
|
|
5
|
+
* necessity: once at runtime (`deployment-name.ts`'s `isValidDeploymentName`)
|
|
6
|
+
* and once at synth time (`canopycms-cdk`'s `constructs/cms-service.ts`).
|
|
7
|
+
* `canopycms-cdk` publishes without a runtime dependency on `canopycms`, so
|
|
8
|
+
* the construct cannot import the real thing.
|
|
9
|
+
*
|
|
10
|
+
* The dangerous drift is asymmetric: a rule TIGHTENED at runtime but not at
|
|
11
|
+
* synth produces a stack that synths clean and then crash-loops the Lambda at
|
|
12
|
+
* boot — precisely what the synth guard exists to prevent. So both packages'
|
|
13
|
+
* suites assert against this one list, and `canopycms-cdk`'s suite additionally
|
|
14
|
+
* asserts that the construct's verdict matches this package's predicate for
|
|
15
|
+
* every name here. Add a case here when you change either copy of the rule.
|
|
16
|
+
*
|
|
17
|
+
* Deliberately dependency-free (plain arrays, no vitest import) so the CDK
|
|
18
|
+
* suite can import it across the package boundary without dragging anything
|
|
19
|
+
* along.
|
|
20
|
+
*/
|
|
21
|
+
/** Names both copies of the rule must ACCEPT. */
|
|
22
|
+
export const VALID_DEPLOYMENT_NAMES = [
|
|
23
|
+
'prod',
|
|
24
|
+
'staging',
|
|
25
|
+
'acme-prod_2.1',
|
|
26
|
+
'a',
|
|
27
|
+
'9lives',
|
|
28
|
+
'team.prod',
|
|
29
|
+
'PROD',
|
|
30
|
+
'x.locked',
|
|
31
|
+
];
|
|
32
|
+
/**
|
|
33
|
+
* Names both copies of the rule must REJECT, each with the reason it exists —
|
|
34
|
+
* every entry is a value git itself would refuse as a ref component, or one
|
|
35
|
+
* that would corrupt the worker's `.env` heredoc.
|
|
36
|
+
*/
|
|
37
|
+
export const INVALID_DEPLOYMENT_NAMES = [
|
|
38
|
+
['a slash (would add a ref hierarchy level)', 'team/prod'],
|
|
39
|
+
['whitespace', 'my prod'],
|
|
40
|
+
['a leading dash (parses as a git option)', '-prod'],
|
|
41
|
+
['a git-forbidden character', 'prod:1'],
|
|
42
|
+
['dot-dot', 'a..b'],
|
|
43
|
+
['a leading dot', '.prod'],
|
|
44
|
+
['a trailing dot', 'prod.'],
|
|
45
|
+
['a .lock suffix', 'prod.lock'],
|
|
46
|
+
['a tilde', 'prod~1'],
|
|
47
|
+
['a caret', 'prod^1'],
|
|
48
|
+
['a question mark', 'prod?'],
|
|
49
|
+
['an asterisk', 'prod*'],
|
|
50
|
+
['an open bracket', 'prod['],
|
|
51
|
+
['a backslash', 'prod\\1'],
|
|
52
|
+
['the empty string', ''],
|
|
53
|
+
['a newline (would inject a line into the worker .env)', 'prod\nEVIL=1'],
|
|
54
|
+
];
|
|
55
|
+
//# sourceMappingURL=deployment-name-fixtures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment-name-fixtures.js","sourceRoot":"","sources":["../../src/operating-mode/deployment-name-fixtures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,iDAAiD;AACjD,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,MAAM;IACN,SAAS;IACT,eAAe;IACf,GAAG;IACH,QAAQ;IACR,WAAW;IACX,MAAM;IACN,UAAU;CACF,CAAA;AAEV;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,CAAC,2CAA2C,EAAE,WAAW,CAAC;IAC1D,CAAC,YAAY,EAAE,SAAS,CAAC;IACzB,CAAC,yCAAyC,EAAE,OAAO,CAAC;IACpD,CAAC,2BAA2B,EAAE,QAAQ,CAAC;IACvC,CAAC,SAAS,EAAE,MAAM,CAAC;IACnB,CAAC,eAAe,EAAE,OAAO,CAAC;IAC1B,CAAC,gBAAgB,EAAE,OAAO,CAAC;IAC3B,CAAC,gBAAgB,EAAE,WAAW,CAAC;IAC/B,CAAC,SAAS,EAAE,QAAQ,CAAC;IACrB,CAAC,SAAS,EAAE,QAAQ,CAAC;IACrB,CAAC,iBAAiB,EAAE,OAAO,CAAC;IAC5B,CAAC,aAAa,EAAE,OAAO,CAAC;IACxB,CAAC,iBAAiB,EAAE,OAAO,CAAC;IAC5B,CAAC,aAAa,EAAE,SAAS,CAAC;IAC1B,CAAC,kBAAkB,EAAE,EAAE,CAAC;IACxB,CAAC,sDAAsD,EAAE,cAAc,CAAC;CAChE,CAAA"}
|
|
@@ -22,6 +22,15 @@
|
|
|
22
22
|
* `deploymentName` prop silently doing nothing — exactly the two-stacks-one-repo
|
|
23
23
|
* case this feature exists to fix.
|
|
24
24
|
*/
|
|
25
|
+
/**
|
|
26
|
+
* Exported so `canopycms-cdk`'s suite can assert that its own synth-time copy
|
|
27
|
+
* of this rule (constructs/cms-service.ts) still agrees with this one. The
|
|
28
|
+
* construct itself must NOT import this: `canopycms-cdk` publishes without a
|
|
29
|
+
* runtime dependency on `canopycms`, so a source-level import would break the
|
|
30
|
+
* published construct. The drift check is therefore test-only — see
|
|
31
|
+
* `deployment-name-fixtures.ts`.
|
|
32
|
+
*/
|
|
33
|
+
export declare const isValidDeploymentName: (name: string) => boolean;
|
|
25
34
|
export declare function resolveDeploymentName(config: {
|
|
26
35
|
deploymentName?: string;
|
|
27
36
|
}, modeDefault: string): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deployment-name.d.ts","sourceRoot":"","sources":["../../src/operating-mode/deployment-name.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;
|
|
1
|
+
{"version":3,"file":"deployment-name.d.ts","sourceRoot":"","sources":["../../src/operating-mode/deployment-name.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAsBH;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,GAAI,MAAM,MAAM,KAAG,OAI5B,CAAA;AAEzB,wBAAgB,qBAAqB,CACnC,MAAM,EAAE;IAAE,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,EACnC,WAAW,EAAE,MAAM,GAClB,MAAM,CAqCR"}
|
|
@@ -39,7 +39,15 @@ let warned = false;
|
|
|
39
39
|
* git's own ref rules (git-check-ref-format), so they are excluded separately.
|
|
40
40
|
*/
|
|
41
41
|
const VALID_DEPLOYMENT_NAME = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
|
|
42
|
-
|
|
42
|
+
/**
|
|
43
|
+
* Exported so `canopycms-cdk`'s suite can assert that its own synth-time copy
|
|
44
|
+
* of this rule (constructs/cms-service.ts) still agrees with this one. The
|
|
45
|
+
* construct itself must NOT import this: `canopycms-cdk` publishes without a
|
|
46
|
+
* runtime dependency on `canopycms`, so a source-level import would break the
|
|
47
|
+
* published construct. The drift check is therefore test-only — see
|
|
48
|
+
* `deployment-name-fixtures.ts`.
|
|
49
|
+
*/
|
|
50
|
+
export const isValidDeploymentName = (name) => VALID_DEPLOYMENT_NAME.test(name) &&
|
|
43
51
|
!name.includes('..') &&
|
|
44
52
|
!name.endsWith('.') &&
|
|
45
53
|
!name.endsWith('.lock');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deployment-name.js","sourceRoot":"","sources":["../../src/operating-mode/deployment-name.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C,IAAI,MAAM,GAAG,KAAK,CAAA;AAElB;;;;;;;;;;;;;GAaG;AACH,MAAM,qBAAqB,GAAG,8BAA8B,CAAA;AAE5D,MAAM,qBAAqB,GAAG,CAAC,IAAY,EAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"deployment-name.js","sourceRoot":"","sources":["../../src/operating-mode/deployment-name.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C,IAAI,MAAM,GAAG,KAAK,CAAA;AAElB;;;;;;;;;;;;;GAaG;AACH,MAAM,qBAAqB,GAAG,8BAA8B,CAAA;AAE5D;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,IAAY,EAAW,EAAE,CAC7D,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;IAChC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IACpB,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;IACnB,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;AAEzB,MAAM,UAAU,qBAAqB,CACnC,MAAmC,EACnC,WAAmB;IAEnB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,IAAI,EAAE,CAAA;IAC9D,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,CAAA;IAEzC,IAAI,QAAQ,IAAI,WAAW,IAAI,QAAQ,KAAK,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC;QACnE,yEAAyE;QACzE,wEAAwE;QACxE,yEAAyE;QACzE,0EAA0E;QAC1E,+DAA+D;QAC/D,4EAA4E;QAC5E,yEAAyE;QACzE,sBAAsB;QACtB,aAAa,CACX,0CAA0C,QAAQ,wCAAwC;YACxF,KAAK,WAAW,yEAAyE;YACzF,uFAAuF;YACvF,2CAA2C,CAC9C,CAAA;QACD,MAAM,GAAG,IAAI,CAAA;IACf,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,IAAI,WAAW,IAAI,WAAW,CAAA;IACvD,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,QAAQ;YACrB,CAAC,CAAC,2BAA2B;YAC7B,CAAC,CAAC,WAAW;gBACX,CAAC,CAAC,uBAAuB;gBACzB,CAAC,CAAC,kBAAkB,CAAA;QACxB,MAAM,IAAI,KAAK,CACb,qCAAqC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,MAAM,KAAK;YAChF,0FAA0F;YAC1F,0FAA0F;YAC1F,uDAAuD,CAC1D,CAAA;IACH,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC"}
|
|
@@ -26,7 +26,8 @@
|
|
|
26
26
|
*/
|
|
27
27
|
export { clientOperatingStrategy, clearClientStrategyCache } from './client-safe-strategy';
|
|
28
28
|
export { operatingStrategy, clearStrategyCache } from './client-unsafe-strategy';
|
|
29
|
-
export { resolveDeploymentName } from './deployment-name';
|
|
29
|
+
export { resolveDeploymentName, isValidDeploymentName } from './deployment-name';
|
|
30
|
+
export { resolveOperatingMode, SERVER_MODE_ENV_VAR, BROWSER_MODE_ENV_VAR } from './mode-env';
|
|
30
31
|
export type OperatingMode = 'prod' | 'dev';
|
|
31
32
|
export type { ClientSafeStrategy, ClientUnsafeStrategy, ResolveRemoteUrlOptions } from './types';
|
|
32
33
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/operating-mode/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAGH,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAA;AAG1F,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAIhF,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/operating-mode/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAGH,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAA;AAG1F,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAIhF,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAIhF,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAE5F,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,KAAK,CAAA;AAG1C,YAAY,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAA"}
|
|
@@ -30,5 +30,8 @@ export { clientOperatingStrategy, clearClientStrategyCache } from './client-safe
|
|
|
30
30
|
export { operatingStrategy, clearStrategyCache } from './client-unsafe-strategy.js';
|
|
31
31
|
// Single resolution point for deploymentName (env > config > mode default) —
|
|
32
32
|
// server-only (reads process.env), used by the strategies' getSettingsBranchName.
|
|
33
|
-
export { resolveDeploymentName } from './deployment-name.js';
|
|
33
|
+
export { resolveDeploymentName, isValidDeploymentName } from './deployment-name.js';
|
|
34
|
+
// Single resolution point for `mode` (env > config.mode) — isomorphic, applied
|
|
35
|
+
// inside validateCanopyConfig so every config-authoring path gets it.
|
|
36
|
+
export { resolveOperatingMode, SERVER_MODE_ENV_VAR, BROWSER_MODE_ENV_VAR } from './mode-env.js';
|
|
34
37
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/operating-mode/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,6DAA6D;AAC7D,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAA;AAE1F,wDAAwD;AACxD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAEhF,6EAA6E;AAC7E,kFAAkF;AAClF,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/operating-mode/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,6DAA6D;AAC7D,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAA;AAE1F,wDAAwD;AACxD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAEhF,6EAA6E;AAC7E,kFAAkF;AAClF,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAEhF,+EAA+E;AAC/E,sEAAsE;AACtE,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single resolution point for the operating `mode`.
|
|
3
|
+
*
|
|
4
|
+
* `mode` is required in `canopycms.config.ts` (SEC-C1) and that file lives in
|
|
5
|
+
* the adopter's repo — the SAME file is loaded by `next dev` locally, by
|
|
6
|
+
* `next build` inside the image builder, and by the deployed Lambda. Those
|
|
7
|
+
* three want different answers, so a literal in the config file cannot be
|
|
8
|
+
* right for all of them:
|
|
9
|
+
*
|
|
10
|
+
* - `next dev` must be `dev` (workspace at `<cwd>/.canopy-dev`).
|
|
11
|
+
* - `next build` must be `dev` too: prod-mode build reads would try to open
|
|
12
|
+
* a branch workspace on EFS that cannot exist in an image builder (see
|
|
13
|
+
* the note in `cli/template-files/Dockerfile.cms.template`).
|
|
14
|
+
* - The deployed Lambda must be `prod`: dev mode resolves the workspace to
|
|
15
|
+
* `<cwd>/.canopy-dev`, and Lambda's filesystem is read-only outside /tmp,
|
|
16
|
+
* so the first write fails with EROFS.
|
|
17
|
+
*
|
|
18
|
+
* Only a value resolved at RUN time can satisfy all three, which is why this
|
|
19
|
+
* is an environment override rather than a flag baked into the generated
|
|
20
|
+
* config file. `CANOPY_MODE` is the name the deployment templates already
|
|
21
|
+
* referred to; before this module existed nothing read it.
|
|
22
|
+
*
|
|
23
|
+
* Precedence (highest wins):
|
|
24
|
+
* 1. the environment value for the current runtime (see `readModeEnv`)
|
|
25
|
+
* 2. `config.mode` (the literal in `canopycms.config.ts`)
|
|
26
|
+
*
|
|
27
|
+
* ## Two variable names, on purpose
|
|
28
|
+
*
|
|
29
|
+
* Server code reads `CANOPY_MODE`, which the CDK construct stamps onto the
|
|
30
|
+
* Lambda (`CanopyCmsService` sets `CANOPY_MODE=prod`). It is deliberately NOT
|
|
31
|
+
* set during `next build`, so build-time content reads stay in dev mode.
|
|
32
|
+
*
|
|
33
|
+
* Browser code cannot read a runtime environment at all — the editor page
|
|
34
|
+
* imports `canopycms.config.ts` directly (`config.client()`), so the browser's
|
|
35
|
+
* copy of `mode` is whatever was inlined when the bundle was built. Next.js
|
|
36
|
+
* only inlines `NEXT_PUBLIC_*`, so the browser reads
|
|
37
|
+
* `NEXT_PUBLIC_CANOPY_MODE`, which the generated CDK stack passes as a Docker
|
|
38
|
+
* build arg. Both names must be spelled as literal `process.env.X` member
|
|
39
|
+
* expressions here or the bundler cannot substitute them.
|
|
40
|
+
*
|
|
41
|
+
* An unrecognized value throws rather than falling back. Falling back would
|
|
42
|
+
* turn a typo (`CANOPY_MODE=production`) into a silent dev-mode deployment
|
|
43
|
+
* running header-trusting dev auth semantics — the exact failure SEC-C1 made
|
|
44
|
+
* `mode` required to prevent.
|
|
45
|
+
*/
|
|
46
|
+
import type { OperatingMode } from './types';
|
|
47
|
+
export declare const SERVER_MODE_ENV_VAR = "CANOPY_MODE";
|
|
48
|
+
export declare const BROWSER_MODE_ENV_VAR = "NEXT_PUBLIC_CANOPY_MODE";
|
|
49
|
+
/** Reset the once-per-process warning latch. Test-only. */
|
|
50
|
+
export declare function resetModeWarning(): void;
|
|
51
|
+
/**
|
|
52
|
+
* Resolve the effective operating mode from the environment and the config
|
|
53
|
+
* literal. Called from `validateCanopyConfig`, the one point every documented
|
|
54
|
+
* config-authoring path (`defineCanopyConfig`, `composeCanopyConfig`) funnels
|
|
55
|
+
* through.
|
|
56
|
+
*/
|
|
57
|
+
export declare function resolveOperatingMode(configMode: OperatingMode): OperatingMode;
|
|
58
|
+
//# sourceMappingURL=mode-env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mode-env.d.ts","sourceRoot":"","sources":["../../src/operating-mode/mode-env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C,eAAO,MAAM,mBAAmB,gBAAgB,CAAA;AAChD,eAAO,MAAM,oBAAoB,4BAA4B,CAAA;AAI7D,2DAA2D;AAC3D,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAkBD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,aAAa,GAAG,aAAa,CA0B7E"}
|