canopycms 0.0.49 → 0.0.51
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/branch.d.ts +6 -0
- package/dist/api/branch.d.ts.map +1 -1
- package/dist/api/branch.js +12 -7
- package/dist/api/branch.js.map +1 -1
- package/dist/api/github-sync.d.ts.map +1 -1
- package/dist/api/github-sync.js +2 -1
- package/dist/api/github-sync.js.map +1 -1
- package/dist/branch-metadata.d.ts.map +1 -1
- package/dist/branch-metadata.js +2 -0
- package/dist/branch-metadata.js.map +1 -1
- package/dist/branch-workspace.d.ts.map +1 -1
- package/dist/branch-workspace.js +13 -1
- package/dist/branch-workspace.js.map +1 -1
- package/dist/cli/generate-ai-content.js +133 -65
- package/dist/cli/init.js +3 -0
- package/dist/config/schemas/config.d.ts.map +1 -1
- package/dist/config/schemas/config.js +3 -0
- package/dist/config/schemas/config.js.map +1 -1
- package/dist/editor/CanopyEditor.d.ts.map +1 -1
- package/dist/editor/CanopyEditor.js +3 -1
- package/dist/editor/CanopyEditor.js.map +1 -1
- package/dist/editor/CanopyEditorPage.d.ts.map +1 -1
- package/dist/editor/CanopyEditorPage.js +4 -1
- package/dist/editor/CanopyEditorPage.js.map +1 -1
- package/dist/editor/Editor.d.ts.map +1 -1
- package/dist/editor/Editor.js +14 -3
- package/dist/editor/Editor.js.map +1 -1
- package/dist/editor/components/EditorHeader.js +1 -1
- package/dist/editor/components/EditorHeader.js.map +1 -1
- package/dist/editor/hooks/useBranchManager.d.ts.map +1 -1
- package/dist/editor/hooks/useBranchManager.js +25 -4
- package/dist/editor/hooks/useBranchManager.js.map +1 -1
- package/dist/git-manager.d.ts +30 -2
- package/dist/git-manager.d.ts.map +1 -1
- package/dist/git-manager.js +145 -87
- package/dist/git-manager.js.map +1 -1
- package/dist/http/handler.d.ts.map +1 -1
- package/dist/http/handler.js +26 -2
- package/dist/http/handler.js.map +1 -1
- package/dist/services.d.ts.map +1 -1
- package/dist/services.js +53 -26
- package/dist/services.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/error.d.ts +16 -0
- package/dist/utils/error.d.ts.map +1 -1
- package/dist/utils/error.js +46 -0
- package/dist/utils/error.js.map +1 -1
- package/dist/utils/git.d.ts +21 -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/package.json +1 -1
package/dist/services.js
CHANGED
|
@@ -32,16 +32,13 @@ function createActiveBranchDetector() {
|
|
|
32
32
|
if (cache && now < cache.expiresAt) {
|
|
33
33
|
return cache.value;
|
|
34
34
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
catch {
|
|
43
|
-
// Detached HEAD or no git repo — fall through to base branch
|
|
44
|
-
}
|
|
35
|
+
// Always use cwd for branch detection — git walks up to find .git.
|
|
36
|
+
// sourceRoot is about content location, not the repo root.
|
|
37
|
+
// On detached HEAD or no git repo, detectHeadBranch returns the
|
|
38
|
+
// base-branch fallback instead of throwing.
|
|
39
|
+
const branch = await detectHeadBranch(process.cwd(), config.defaultBaseBranch ?? 'main');
|
|
40
|
+
cache = { value: branch, expiresAt: now + 5000 };
|
|
41
|
+
return branch;
|
|
45
42
|
}
|
|
46
43
|
return config.defaultBaseBranch ?? 'main';
|
|
47
44
|
};
|
|
@@ -80,10 +77,11 @@ export const createCanopyServices = async (config, options = {}) => {
|
|
|
80
77
|
* @param options - Optional settings including entry schema registry
|
|
81
78
|
*/
|
|
82
79
|
export const createTestCanopyServices = async (config, options = {}) => {
|
|
83
|
-
// In tests,
|
|
84
|
-
//
|
|
80
|
+
// In tests, pin both branch identity fields to avoid auto-detecting from
|
|
81
|
+
// git HEAD (which varies depending on the developer's working branch).
|
|
85
82
|
const testConfig = {
|
|
86
83
|
...config,
|
|
84
|
+
defaultBaseBranch: config.defaultBaseBranch ?? 'main',
|
|
87
85
|
defaultActiveBranch: config.defaultActiveBranch ?? config.defaultBaseBranch ?? 'main',
|
|
88
86
|
};
|
|
89
87
|
return _createCanopyServicesInternal(testConfig, options);
|
|
@@ -96,14 +94,24 @@ async function _createCanopyServicesInternal(config, options) {
|
|
|
96
94
|
// Validate mode-specific requirements (e.g., prod requires git bot credentials for GitHub)
|
|
97
95
|
const strategy = operatingStrategy(config.mode);
|
|
98
96
|
strategy.validateConfig(config);
|
|
99
|
-
//
|
|
100
|
-
//
|
|
101
|
-
//
|
|
97
|
+
// Resolve branch identity once (see ARCHITECTURE.md "Branch Identity"):
|
|
98
|
+
// - active branch: which workspace to serve from (dev: git HEAD, prod: base)
|
|
99
|
+
// - base branch: fork point for new editing branches (dev: git HEAD when
|
|
100
|
+
// unset, otherwise the configured value; prod: configured value or 'main')
|
|
101
|
+
// Bake both into config so all downstream code reads one consistent value.
|
|
102
102
|
// The detector has its own per-instance 5s TTL cache for git HEAD checks.
|
|
103
103
|
const detectActiveBranch = createActiveBranchDetector();
|
|
104
104
|
const explicitActiveBranch = config.defaultActiveBranch;
|
|
105
|
+
const explicitBaseBranch = config.defaultBaseBranch;
|
|
105
106
|
const defaultActiveBranch = await detectActiveBranch(config);
|
|
106
|
-
|
|
107
|
+
// When unset, the base branch follows the same dev-mode HEAD detection
|
|
108
|
+
// (matching resolveBaseBranch in utils/git.ts, the canonical definition used
|
|
109
|
+
// by workspace provisioning). Reuses the detector's 5s TTL cache.
|
|
110
|
+
const defaultBaseBranch = explicitBaseBranch ??
|
|
111
|
+
(config.mode === 'dev' && !isDeployedStatic(config)
|
|
112
|
+
? await detectActiveBranch({ ...config, defaultActiveBranch: undefined })
|
|
113
|
+
: 'main');
|
|
114
|
+
config = { ...config, defaultActiveBranch, defaultBaseBranch };
|
|
107
115
|
// Load bootstrap admin IDs from environment
|
|
108
116
|
const bootstrapAdminIds = getBootstrapAdminIds();
|
|
109
117
|
// Create per-branch schema cache (or use provided one for testing)
|
|
@@ -143,7 +151,11 @@ async function _createCanopyServicesInternal(config, options) {
|
|
|
143
151
|
remote: opts?.remote ?? config.defaultRemoteName ?? configDefaults.remoteName,
|
|
144
152
|
});
|
|
145
153
|
const commitFiles = async (options) => {
|
|
146
|
-
|
|
154
|
+
// Prefer the fork point recorded at branch creation over the (possibly
|
|
155
|
+
// re-detected) config value, so operations stay pinned to the branch's base.
|
|
156
|
+
const git = createGitManagerFor(options.context.branchRoot, {
|
|
157
|
+
baseBranch: options.context.branch.baseBranch,
|
|
158
|
+
});
|
|
147
159
|
await git.ensureAuthor({
|
|
148
160
|
name: config.gitBotAuthorName,
|
|
149
161
|
email: config.gitBotAuthorEmail,
|
|
@@ -152,7 +164,9 @@ async function _createCanopyServicesInternal(config, options) {
|
|
|
152
164
|
await git.commit(options.message);
|
|
153
165
|
};
|
|
154
166
|
const submitBranch = async (options) => {
|
|
155
|
-
const git = createGitManagerFor(options.context.branchRoot
|
|
167
|
+
const git = createGitManagerFor(options.context.branchRoot, {
|
|
168
|
+
baseBranch: options.context.branch.baseBranch,
|
|
169
|
+
});
|
|
156
170
|
await git.ensureAuthor({
|
|
157
171
|
name: config.gitBotAuthorName,
|
|
158
172
|
email: config.gitBotAuthorEmail,
|
|
@@ -298,24 +312,37 @@ async function _createCanopyServicesInternal(config, options) {
|
|
|
298
312
|
// Static deployments serve from the checkout — no git HEAD to track
|
|
299
313
|
if (isDeployedStatic(services.config))
|
|
300
314
|
return;
|
|
301
|
-
//
|
|
302
|
-
//
|
|
303
|
-
if (explicitActiveBranch)
|
|
315
|
+
// Explicitly configured values are respected — never overridden by
|
|
316
|
+
// git HEAD detection. Only re-detect what the adopter left unset.
|
|
317
|
+
if (explicitActiveBranch && explicitBaseBranch)
|
|
304
318
|
return;
|
|
305
319
|
// Re-detect from git HEAD (5s TTL cache prevents excessive shell-outs).
|
|
306
320
|
// Silently switch — the public dev site should reflect the current branch
|
|
307
321
|
// just like code hot-reloads. The editor is pinned to its own branch via
|
|
308
|
-
// URL params, so this only affects non-editor content serving.
|
|
322
|
+
// URL params, so this only affects non-editor content serving. The base
|
|
323
|
+
// branch (fork point) follows HEAD too when unset, so workspaces
|
|
324
|
+
// provisioned mid-session fork from the developer's current branch.
|
|
309
325
|
const fresh = await detectActiveBranch({
|
|
310
326
|
...services.config,
|
|
311
327
|
defaultActiveBranch: undefined,
|
|
312
328
|
});
|
|
313
|
-
|
|
329
|
+
const next = { ...services.config };
|
|
330
|
+
let changed = false;
|
|
331
|
+
if (!explicitActiveBranch && fresh !== next.defaultActiveBranch) {
|
|
332
|
+
next.defaultActiveBranch = fresh;
|
|
333
|
+
changed = true;
|
|
334
|
+
}
|
|
335
|
+
if (!explicitBaseBranch && fresh !== next.defaultBaseBranch) {
|
|
336
|
+
next.defaultBaseBranch = fresh;
|
|
337
|
+
changed = true;
|
|
338
|
+
}
|
|
339
|
+
if (changed) {
|
|
314
340
|
// Note: closures in this function (getSettingsBranchRoot, checkContentAccess,
|
|
315
341
|
// createGitManagerFor, etc.) capture the original `config` local variable.
|
|
316
|
-
// Only
|
|
317
|
-
//
|
|
318
|
-
|
|
342
|
+
// Only the branch identity fields change here — git operations on existing
|
|
343
|
+
// branches use the fork point recorded in branch metadata, and consumers
|
|
344
|
+
// that need the fresh values must read services.config.
|
|
345
|
+
services.config = next;
|
|
319
346
|
}
|
|
320
347
|
},
|
|
321
348
|
};
|
package/dist/services.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services.js","sourceRoot":"","sources":["../src/services.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAG5C,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAC9C,OAAO,EAAE,mBAAmB,EAAsB,MAAM,kBAAkB,CAAA;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAE/C;;;;;;;GAOG;AACH,SAAS,0BAA0B;IACjC,IAAI,KAAK,GAAgD,IAAI,CAAA;IAE7D,OAAO,KAAK,EAAE,MAAoB,EAAmB,EAAE;QACrD,IAAI,MAAM,CAAC,mBAAmB;YAAE,OAAO,MAAM,CAAC,mBAAmB,CAAA;QACjE,6EAA6E;QAC7E,IAAI,gBAAgB,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC,iBAAiB,IAAI,MAAM,CAAA;QACvE,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YACtB,IAAI,KAAK,IAAI,GAAG,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;gBACnC,OAAO,KAAK,CAAC,KAAK,CAAA;YACpB,CAAC;YACD,
|
|
1
|
+
{"version":3,"file":"services.js","sourceRoot":"","sources":["../src/services.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -19,6 +19,8 @@ export interface BranchMetadata {
|
|
|
19
19
|
createdBy: CanopyUserId;
|
|
20
20
|
createdAt: string;
|
|
21
21
|
updatedAt: string;
|
|
22
|
+
/** Fork point this branch was created from; recorded at creation, immutable. */
|
|
23
|
+
baseBranch?: string;
|
|
22
24
|
pullRequestUrl?: string;
|
|
23
25
|
pullRequestNumber?: number;
|
|
24
26
|
/** Sync status for async GitHub operations (used when Lambda has no internet) */
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAE9C,MAAM,MAAM,YAAY,GAAG,MAAM,CAAA;AACjC,MAAM,MAAM,aAAa,GAAG,MAAM,CAAA;AAElC,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAA;AACvF,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,cAAc,GAAG,aAAa,CAAA;AAClE,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,oBAAoB,CAAA;AAE3D,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,EAAE,YAAY,EAAE,CAAA;IAC7B,aAAa,CAAC,EAAE,aAAa,EAAE,CAAA;IAC/B,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,mBAAmB,CAAA;IAC3B,SAAS,EAAE,YAAY,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,iFAAiF;IACjF,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,8EAA8E;IAC9E,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,8FAA8F;IAC9F,aAAa,CAAC,EAAE,SAAS,EAAE,CAAA;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,gFAAgF;IAChF,QAAQ,EAAE,MAAM,CAAA;IAEhB,4FAA4F;IAC5F,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,aAAc,SAAQ,WAAW;IAChD,MAAM,EAAE,cAAc,CAAA;IAEtB,2FAA2F;IAC3F,UAAU,CAAC,EAAE,OAAO,UAAU,EAAE,cAAc,EAAE,CAAA;CACjD;AAED,6FAA6F;AAC7F,MAAM,WAAW,uBAAwB,SAAQ,aAAa;IAC5D,UAAU,EAAE,OAAO,UAAU,EAAE,cAAc,EAAE,CAAA;CAChD"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAE9C,MAAM,MAAM,YAAY,GAAG,MAAM,CAAA;AACjC,MAAM,MAAM,aAAa,GAAG,MAAM,CAAA;AAElC,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAA;AACvF,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,cAAc,GAAG,aAAa,CAAA;AAClE,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,oBAAoB,CAAA;AAE3D,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,EAAE,YAAY,EAAE,CAAA;IAC7B,aAAa,CAAC,EAAE,aAAa,EAAE,CAAA;IAC/B,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,mBAAmB,CAAA;IAC3B,SAAS,EAAE,YAAY,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,gFAAgF;IAChF,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,iFAAiF;IACjF,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,8EAA8E;IAC9E,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,8FAA8F;IAC9F,aAAa,CAAC,EAAE,SAAS,EAAE,CAAA;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,gFAAgF;IAChF,QAAQ,EAAE,MAAM,CAAA;IAEhB,4FAA4F;IAC5F,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,aAAc,SAAQ,WAAW;IAChD,MAAM,EAAE,cAAc,CAAA;IAEtB,2FAA2F;IAC3F,UAAU,CAAC,EAAE,OAAO,UAAU,EAAE,cAAc,EAAE,CAAA;CACjD;AAED,6FAA6F;AAC7F,MAAM,WAAW,uBAAwB,SAAQ,aAAa;IAC5D,UAAU,EAAE,OAAO,UAAU,EAAE,cAAc,EAAE,CAAA;CAChD"}
|
package/dist/utils/error.d.ts
CHANGED
|
@@ -20,6 +20,22 @@
|
|
|
20
20
|
* ```
|
|
21
21
|
*/
|
|
22
22
|
export declare function getErrorMessage(err: unknown): string;
|
|
23
|
+
/**
|
|
24
|
+
* Redact sensitive material from an error message before sending it to API
|
|
25
|
+
* clients. Log the ORIGINAL message server-side; send the sanitized one.
|
|
26
|
+
*
|
|
27
|
+
* Git/filesystem errors are unbounded (stderr varies by git version, locale,
|
|
28
|
+
* and hooks can print anything), so enumerating safe messages is not
|
|
29
|
+
* feasible. Instead, redact the known-sensitive SHAPES that can appear in
|
|
30
|
+
* any of them:
|
|
31
|
+
* - credentials embedded in URLs (`https://x-access-token:tok@github.com/…`)
|
|
32
|
+
* - absolute filesystem paths (workspace roots, EFS mounts, home directories)
|
|
33
|
+
*
|
|
34
|
+
* Paths under the current working directory are shortened to relative form
|
|
35
|
+
* (CMS-internal layout like `.canopy-dev/remote.git` is useful for debugging
|
|
36
|
+
* and not sensitive); absolute paths outside it are replaced with `<path>`.
|
|
37
|
+
*/
|
|
38
|
+
export declare function sanitizeErrorMessage(message: string): string;
|
|
23
39
|
/**
|
|
24
40
|
* Type guard to check if an error is a Node.js system error with a code property.
|
|
25
41
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/utils/error.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAQpD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,MAAM,CAAC,cAAc,CAEtE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAErD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEvD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEvD"}
|
|
1
|
+
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/utils/error.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAQpD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CA8B5D;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,MAAM,CAAC,cAAc,CAEtE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAErD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEvD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEvD"}
|
package/dist/utils/error.js
CHANGED
|
@@ -28,6 +28,52 @@ export function getErrorMessage(err) {
|
|
|
28
28
|
}
|
|
29
29
|
return String(err);
|
|
30
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* Redact sensitive material from an error message before sending it to API
|
|
33
|
+
* clients. Log the ORIGINAL message server-side; send the sanitized one.
|
|
34
|
+
*
|
|
35
|
+
* Git/filesystem errors are unbounded (stderr varies by git version, locale,
|
|
36
|
+
* and hooks can print anything), so enumerating safe messages is not
|
|
37
|
+
* feasible. Instead, redact the known-sensitive SHAPES that can appear in
|
|
38
|
+
* any of them:
|
|
39
|
+
* - credentials embedded in URLs (`https://x-access-token:tok@github.com/…`)
|
|
40
|
+
* - absolute filesystem paths (workspace roots, EFS mounts, home directories)
|
|
41
|
+
*
|
|
42
|
+
* Paths under the current working directory are shortened to relative form
|
|
43
|
+
* (CMS-internal layout like `.canopy-dev/remote.git` is useful for debugging
|
|
44
|
+
* and not sensitive); absolute paths outside it are replaced with `<path>`.
|
|
45
|
+
*/
|
|
46
|
+
export function sanitizeErrorMessage(message) {
|
|
47
|
+
let result = message;
|
|
48
|
+
// Credentials in URLs: scheme://user:token@host or scheme://token@host.
|
|
49
|
+
// Anchored on the literal `://` (leaving the scheme untouched) — a `\w+`
|
|
50
|
+
// scheme prefix would backtrack polynomially on long word-character runs
|
|
51
|
+
// (CodeQL js/polynomial-redos).
|
|
52
|
+
result = result.replace(/(:\/\/)[^/\s@]+@/g, '$1***@');
|
|
53
|
+
// Paths under the project root become relative (split/join avoids regex
|
|
54
|
+
// escaping issues with arbitrary cwd values). The bare-cwd replacement is
|
|
55
|
+
// anchored to a token boundary so sibling directories that merely share
|
|
56
|
+
// the cwd prefix (e.g. `${cwd}-other/…`) stay absolute and get fully
|
|
57
|
+
// redacted below instead of leaking a mangled remainder.
|
|
58
|
+
const cwd = process.cwd();
|
|
59
|
+
if (cwd !== '/') {
|
|
60
|
+
result = result.split(`${cwd}/`).join('');
|
|
61
|
+
const cwdPattern = cwd.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
62
|
+
result = result.replace(new RegExp(`${cwdPattern}(?=[\\s'"),:;]|$)`, 'g'), '.');
|
|
63
|
+
}
|
|
64
|
+
// Quoted absolute paths (git quotes most paths in its messages): redact
|
|
65
|
+
// the whole quoted span, spaces included.
|
|
66
|
+
result = result.replace(/'\/[^']*'/g, "'<path>'").replace(/"\/[^"]*"/g, '"<path>"');
|
|
67
|
+
// Remaining absolute POSIX paths (outside cwd, e.g. /mnt/efs/…). The
|
|
68
|
+
// leading boundary keeps URL slashes (`https://host/…`) untouched. Known
|
|
69
|
+
// limitation: an UNQUOTED path containing spaces is only redacted up to
|
|
70
|
+
// the first space — spaces are legal both inside paths and as message
|
|
71
|
+
// separators, so this is not generally solvable here.
|
|
72
|
+
result = result.replace(/(^|[\s'"(=])\/(?:[^/\s'")]+\/)+[^/\s'")]*/g, '$1<path>');
|
|
73
|
+
// Windows drive paths
|
|
74
|
+
result = result.replace(/[A-Za-z]:\\[^\s'")]+/g, '<path>');
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
31
77
|
/**
|
|
32
78
|
* Type guard to check if an error is a Node.js system error with a code property.
|
|
33
79
|
*
|
package/dist/utils/error.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/utils/error.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,eAAe,CAAC,GAAY;IAC1C,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACzB,OAAO,GAAG,CAAC,OAAO,CAAA;IACpB,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;AACpB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,OAAO,GAAG,YAAY,KAAK,IAAI,MAAM,IAAI,GAAG,CAAA;AAC9C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,GAAY;IAC1C,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAA;AAClD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC5C,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAA;AAClD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC5C,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAA;AAClD,CAAC"}
|
|
1
|
+
{"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/utils/error.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,eAAe,CAAC,GAAY;IAC1C,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACzB,OAAO,GAAG,CAAC,OAAO,CAAA;IACpB,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;AACpB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,IAAI,MAAM,GAAG,OAAO,CAAA;IACpB,wEAAwE;IACxE,yEAAyE;IACzE,yEAAyE;IACzE,gCAAgC;IAChC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAA;IACtD,wEAAwE;IACxE,0EAA0E;IAC1E,wEAAwE;IACxE,qEAAqE;IACrE,yDAAyD;IACzD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;IACzB,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;QAChB,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACzC,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAA;QAC7D,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,GAAG,UAAU,mBAAmB,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAA;IACjF,CAAC;IACD,wEAAwE;IACxE,0CAA0C;IAC1C,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC,CAAA;IACnF,qEAAqE;IACrE,yEAAyE;IACzE,wEAAwE;IACxE,sEAAsE;IACtE,sDAAsD;IACtD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,4CAA4C,EAAE,UAAU,CAAC,CAAA;IACjF,sBAAsB;IACtB,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAAA;IAC1D,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,OAAO,GAAG,YAAY,KAAK,IAAI,MAAM,IAAI,GAAG,CAAA;AAC9C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,GAAY;IAC1C,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAA;AAClD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC5C,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAA;AAClD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC5C,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAA;AAClD,CAAC"}
|
package/dist/utils/git.d.ts
CHANGED
|
@@ -1,7 +1,28 @@
|
|
|
1
|
+
import type { OperatingMode } from '../operating-mode';
|
|
1
2
|
/**
|
|
2
3
|
* Detect the current HEAD branch name for a given repository root.
|
|
3
4
|
* Returns the branch name, or the provided fallback (default 'main')
|
|
4
5
|
* if detection fails or HEAD is detached.
|
|
5
6
|
*/
|
|
6
7
|
export declare function detectHeadBranch(repoRoot: string, fallback?: string): Promise<string>;
|
|
8
|
+
/**
|
|
9
|
+
* Resolve the base branch — the fork point for CMS editing branches and the
|
|
10
|
+
* branch used to seed workspace clones.
|
|
11
|
+
*
|
|
12
|
+
* This is the single definition of base-branch behavior (see ARCHITECTURE.md
|
|
13
|
+
* "Branch Identity"):
|
|
14
|
+
* - An explicitly configured `defaultBaseBranch` always wins, in both modes.
|
|
15
|
+
* - In dev mode it is detected from the current git HEAD, so workspaces fork
|
|
16
|
+
* from the branch the developer has checked out.
|
|
17
|
+
* - Otherwise it is 'main'.
|
|
18
|
+
*
|
|
19
|
+
* Static deployments never reach git operations, so callers in static paths
|
|
20
|
+
* must short-circuit before calling this (see createCanopyServices).
|
|
21
|
+
*/
|
|
22
|
+
export declare function resolveBaseBranch(options: {
|
|
23
|
+
defaultBaseBranch?: string;
|
|
24
|
+
mode: OperatingMode;
|
|
25
|
+
/** Repo root used for dev-mode HEAD detection. Defaults to process.cwd(). */
|
|
26
|
+
detectFrom?: string;
|
|
27
|
+
}): Promise<string>;
|
|
7
28
|
//# sourceMappingURL=git.d.ts.map
|
package/dist/utils/git.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,MAAe,GACxB,OAAO,CAAC,MAAM,CAAC,CAQjB"}
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEtD;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,MAAe,GACxB,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE;IAC/C,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,IAAI,EAAE,aAAa,CAAA;IACnB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,GAAG,OAAO,CAAC,MAAM,CAAC,CAMlB"}
|
package/dist/utils/git.js
CHANGED
|
@@ -14,4 +14,26 @@ export async function detectHeadBranch(repoRoot, fallback = 'main') {
|
|
|
14
14
|
return fallback;
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Resolve the base branch — the fork point for CMS editing branches and the
|
|
19
|
+
* branch used to seed workspace clones.
|
|
20
|
+
*
|
|
21
|
+
* This is the single definition of base-branch behavior (see ARCHITECTURE.md
|
|
22
|
+
* "Branch Identity"):
|
|
23
|
+
* - An explicitly configured `defaultBaseBranch` always wins, in both modes.
|
|
24
|
+
* - In dev mode it is detected from the current git HEAD, so workspaces fork
|
|
25
|
+
* from the branch the developer has checked out.
|
|
26
|
+
* - Otherwise it is 'main'.
|
|
27
|
+
*
|
|
28
|
+
* Static deployments never reach git operations, so callers in static paths
|
|
29
|
+
* must short-circuit before calling this (see createCanopyServices).
|
|
30
|
+
*/
|
|
31
|
+
export async function resolveBaseBranch(options) {
|
|
32
|
+
if (options.defaultBaseBranch)
|
|
33
|
+
return options.defaultBaseBranch;
|
|
34
|
+
if (options.mode === 'dev') {
|
|
35
|
+
return detectHeadBranch(options.detectFrom ?? process.cwd());
|
|
36
|
+
}
|
|
37
|
+
return 'main';
|
|
38
|
+
}
|
|
17
39
|
//# sourceMappingURL=git.js.map
|
package/dist/utils/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAItC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAAgB,EAChB,WAAmB,MAAM;IAEzB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,SAAS,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAA;QAC5C,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAClE,OAAO,IAAI,IAAI,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAA;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAA;IACjB,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAKvC;IACC,IAAI,OAAO,CAAC,iBAAiB;QAAE,OAAO,OAAO,CAAC,iBAAiB,CAAA;IAC/D,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC3B,OAAO,gBAAgB,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;IAC9D,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"//": "@codemirror/language, @lezer/highlight: workaround — @mdxeditor/editor uses cm6-theme-basic-light which peer-requires these but mdxeditor doesn't declare them as dependencies",
|
|
3
3
|
"name": "canopycms",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.51",
|
|
5
5
|
"description": "CanopyCMS core package: schema-driven content, branch-aware editing, and editor UI for Next.js.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|