@se-studio/contentful-cms 3.4.5 → 3.4.7

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.
Files changed (31) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/generated/version.d.ts +1 -1
  3. package/dist/generated/version.js +1 -1
  4. package/dist/hosted/next/HostedPageShell.d.ts +18 -0
  5. package/dist/hosted/next/HostedPageShell.d.ts.map +1 -0
  6. package/dist/hosted/next/HostedPageShell.js +12 -0
  7. package/dist/hosted/next/HostedPageShell.js.map +1 -0
  8. package/dist/hosted/next/page-styles.d.ts +25 -0
  9. package/dist/hosted/next/page-styles.d.ts.map +1 -1
  10. package/dist/hosted/next/page-styles.js +136 -7
  11. package/dist/hosted/next/page-styles.js.map +1 -1
  12. package/dist/hosted/next/pages/CmsEditPage.d.ts.map +1 -1
  13. package/dist/hosted/next/pages/CmsEditPage.js +5 -3
  14. package/dist/hosted/next/pages/CmsEditPage.js.map +1 -1
  15. package/dist/hosted/next/pages/ContentfulCallbackPage.d.ts.map +1 -1
  16. package/dist/hosted/next/pages/ContentfulCallbackPage.js +3 -1
  17. package/dist/hosted/next/pages/ContentfulCallbackPage.js.map +1 -1
  18. package/dist/hosted/next/pages/CustomerPlaybookPage.d.ts.map +1 -1
  19. package/dist/hosted/next/pages/CustomerPlaybookPage.js +14 -3
  20. package/dist/hosted/next/pages/CustomerPlaybookPage.js.map +1 -1
  21. package/dist/hosted/next/pages/CustomerPlaybooksPage.d.ts.map +1 -1
  22. package/dist/hosted/next/pages/CustomerPlaybooksPage.js +8 -4
  23. package/dist/hosted/next/pages/CustomerPlaybooksPage.js.map +1 -1
  24. package/dist/hosted/next/pages/HomePage.d.ts.map +1 -1
  25. package/dist/hosted/next/pages/HomePage.js +3 -2
  26. package/dist/hosted/next/pages/HomePage.js.map +1 -1
  27. package/dist/hosted/oauth/store.d.ts +4 -1
  28. package/dist/hosted/oauth/store.d.ts.map +1 -1
  29. package/dist/hosted/oauth/store.js +17 -2
  30. package/dist/hosted/oauth/store.js.map +1 -1
  31. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @se-studio/contentful-cms Changelog
2
2
 
3
+ ## 3.4.7
4
+
5
+ ### Patch Changes
6
+
7
+ - Style hosted cms-edit HTML pages with subtle Something Else branding (masthead, cream surface, accent CTA, footer) shared across all customer hosts.
8
+
9
+ ## 3.4.6
10
+
11
+ ### Patch Changes
12
+
13
+ - Soft-migrate pre-3.4.5 Contentful OAuth tokens into space-scoped Redis keys so MCP auth does not fail with missing_contentful_token after the multi-tenant Redis cutover.
14
+
3
15
  ## 3.4.5
4
16
 
5
17
  ### Patch Changes
@@ -1,3 +1,3 @@
1
1
  export declare const CMS_EDIT_PACKAGE_NAME = "@se-studio/contentful-cms";
2
- export declare const CMS_EDIT_VERSION = "3.4.5";
2
+ export declare const CMS_EDIT_VERSION = "3.4.7";
3
3
  //# sourceMappingURL=version.d.ts.map
@@ -1,4 +1,4 @@
1
1
  // Generated by scripts/generate-embedded-assets.mjs — do not edit manually.
2
2
  export const CMS_EDIT_PACKAGE_NAME = "@se-studio/contentful-cms";
3
- export const CMS_EDIT_VERSION = "3.4.5";
3
+ export const CMS_EDIT_VERSION = "3.4.7";
4
4
  //# sourceMappingURL=version.js.map
@@ -0,0 +1,18 @@
1
+ import type { CSSProperties, ReactNode } from 'react';
2
+ export type HostedPageShellProps = {
3
+ /** Site display name (e.g. Brightlife Kids). */
4
+ displayName?: string;
5
+ /** Optional cms-edit package version shown in the footer. */
6
+ version?: string;
7
+ /** When false, omit the product line under the brand (minimal pages). */
8
+ showProductLine?: boolean;
9
+ children: ReactNode;
10
+ /** Override main content styles (e.g. narrower callback). */
11
+ mainStyle?: CSSProperties;
12
+ };
13
+ /**
14
+ * Shared chrome for hosted cms-edit HTML pages — Something Else branding.
15
+ * Works in server and client components (no async / next/headers).
16
+ */
17
+ export declare function HostedPageShell({ displayName, version, showProductLine, children, mainStyle, }: HostedPageShellProps): import("react").JSX.Element;
18
+ //# sourceMappingURL=HostedPageShell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HostedPageShell.d.ts","sourceRoot":"","sources":["../../../src/hosted/next/HostedPageShell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAetD,MAAM,MAAM,oBAAoB,GAAG;IACjC,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAC9B,WAAW,EACX,OAAO,EACP,eAAsB,EACtB,QAAQ,EACR,SAAS,GACV,EAAE,oBAAoB,+BA8BtB"}
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { accentRuleStyle, brandDotStyle, brandMarkStyle, footerLinkStyle, footerStyle, mastheadInnerStyle, mastheadStyle, pageStyle, productLineStyle, se, shellRootStyle, } from './page-styles.js';
3
+ /**
4
+ * Shared chrome for hosted cms-edit HTML pages — Something Else branding.
5
+ * Works in server and client components (no async / next/headers).
6
+ */
7
+ export function HostedPageShell({ displayName, version, showProductLine = true, children, mainStyle, }) {
8
+ const year = new Date().getFullYear();
9
+ const product = displayName && displayName.trim().length > 0 ? `cms-edit · ${displayName}` : 'cms-edit';
10
+ return (_jsxs("div", { style: shellRootStyle, children: [_jsx("style", { children: `html,body{margin:0;background:${se.bg};color:${se.text}}a{color:inherit}` }), _jsxs("header", { style: mastheadStyle, children: [_jsxs("div", { style: mastheadInnerStyle, children: [_jsxs("a", { href: "https://www.se.studio", style: brandMarkStyle, children: [_jsx("span", { style: brandDotStyle, "aria-hidden": true }), "Something Else"] }), showProductLine ? _jsx("p", { style: productLineStyle, children: product }) : null] }), _jsx("div", { style: accentRuleStyle, "aria-hidden": true })] }), _jsx("main", { style: { ...pageStyle, ...mainStyle }, children: children }), _jsxs("footer", { style: footerStyle, children: [_jsxs("span", { children: ["\u00A9 ", year, ' ', _jsx("a", { href: "https://www.se.studio", style: footerLinkStyle, children: "Something Else Studio" })] }), _jsx("span", { children: version ? `cms-edit v${version}` : 'Hosted MCP for Contentful' })] })] }));
11
+ }
12
+ //# sourceMappingURL=HostedPageShell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HostedPageShell.js","sourceRoot":"","sources":["../../../src/hosted/next/HostedPageShell.tsx"],"names":[],"mappings":";AACA,OAAO,EACL,eAAe,EACf,aAAa,EACb,cAAc,EACd,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,EAAE,EACF,cAAc,GACf,MAAM,kBAAkB,CAAC;AAc1B;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,WAAW,EACX,OAAO,EACP,eAAe,GAAG,IAAI,EACtB,QAAQ,EACR,SAAS,GACY;IACrB,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACtC,MAAM,OAAO,GACX,WAAW,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,WAAW,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;IAE1F,OAAO,CACL,eAAK,KAAK,EAAE,cAAc,aACxB,0BAAQ,iCAAiC,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,IAAI,mBAAmB,GAAS,EAC3F,kBAAQ,KAAK,EAAE,aAAa,aAC1B,eAAK,KAAK,EAAE,kBAAkB,aAC5B,aAAG,IAAI,EAAC,uBAAuB,EAAC,KAAK,EAAE,cAAc,aACnD,eAAM,KAAK,EAAE,aAAa,wBAAgB,sBAExC,EACH,eAAe,CAAC,CAAC,CAAC,YAAG,KAAK,EAAE,gBAAgB,YAAG,OAAO,GAAK,CAAC,CAAC,CAAC,IAAI,IAC/D,EACN,cAAK,KAAK,EAAE,eAAe,wBAAgB,IACpC,EACT,eAAM,KAAK,EAAE,EAAE,GAAG,SAAS,EAAE,GAAG,SAAS,EAAE,YAAG,QAAQ,GAAQ,EAC9D,kBAAQ,KAAK,EAAE,WAAW,aACxB,sCACK,IAAI,EAAE,GAAG,EACZ,YAAG,IAAI,EAAC,uBAAuB,EAAC,KAAK,EAAE,eAAe,sCAElD,IACC,EACP,yBAAO,OAAO,CAAC,CAAC,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC,CAAC,2BAA2B,GAAQ,IACtE,IACL,CACP,CAAC;AACJ,CAAC"}
@@ -1,6 +1,31 @@
1
1
  import type { CSSProperties } from 'react';
2
+ /** Something Else light theme tokens (hosted cms-edit pages). */
3
+ export declare const se: {
4
+ readonly bg: "#FFFDFA";
5
+ readonly text: "#1F2E32";
6
+ readonly muted: "#5A6A6E";
7
+ readonly soft: "#E0DBCF";
8
+ readonly softAlt: "#F5F2EA";
9
+ readonly yellow: "#E5FF46";
10
+ readonly white: "#FFFFFF";
11
+ };
2
12
  export declare const pageStyle: CSSProperties;
13
+ export declare const shellRootStyle: CSSProperties;
14
+ export declare const mastheadStyle: CSSProperties;
15
+ export declare const mastheadInnerStyle: CSSProperties;
16
+ export declare const brandMarkStyle: CSSProperties;
17
+ export declare const brandDotStyle: CSSProperties;
18
+ export declare const productLineStyle: CSSProperties;
19
+ export declare const accentRuleStyle: CSSProperties;
20
+ export declare const footerStyle: CSSProperties;
21
+ export declare const footerLinkStyle: CSSProperties;
22
+ export declare const sectionStyle: CSSProperties;
23
+ export declare const h1Style: CSSProperties;
24
+ export declare const h2Style: CSSProperties;
25
+ export declare const mutedStyle: CSSProperties;
26
+ export declare const linkStyle: CSSProperties;
3
27
  export declare const codeStyle: CSSProperties;
4
28
  export declare const buttonStyle: CSSProperties;
29
+ export declare const calloutStyle: CSSProperties;
5
30
  export declare function resolveRequestOrigin(): Promise<string>;
6
31
  //# sourceMappingURL=page-styles.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"page-styles.d.ts","sourceRoot":"","sources":["../../../src/hosted/next/page-styles.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,eAAO,MAAM,SAAS,EAAE,aAKvB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,aASvB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,aASzB,CAAC;AAEF,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,CAQ5D"}
1
+ {"version":3,"file":"page-styles.d.ts","sourceRoot":"","sources":["../../../src/hosted/next/page-styles.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,iEAAiE;AACjE,eAAO,MAAM,EAAE;;;;;;;;CAQL,CAAC;AAEX,eAAO,MAAM,SAAS,EAAE,aAOvB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,aAK5B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,aAI3B,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,aAIhC,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,aAU5B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,aAQ3B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,aAK9B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,aAM7B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,aAiBzB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,aAI7B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,aAO1B,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,aAOrB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,aAKrB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,aAGxB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,aAMvB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,aAWvB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,aAWzB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,aAO1B,CAAC;AAEF,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,CAQ5D"}
@@ -1,29 +1,158 @@
1
1
  import { headers } from 'next/headers';
2
+ /** Something Else light theme tokens (hosted cms-edit pages). */
3
+ export const se = {
4
+ bg: '#FFFDFA',
5
+ text: '#1F2E32',
6
+ muted: '#5A6A6E',
7
+ soft: '#E0DBCF',
8
+ softAlt: '#F5F2EA',
9
+ yellow: '#E5FF46',
10
+ white: '#FFFFFF',
11
+ };
2
12
  export const pageStyle = {
3
- fontFamily: 'system-ui, sans-serif',
4
- padding: '2rem',
13
+ fontFamily: 'system-ui, -apple-system, Segoe UI, Roboto, sans-serif',
14
+ color: se.text,
15
+ lineHeight: 1.55,
16
+ maxWidth: '42rem',
17
+ margin: '0 auto',
18
+ padding: '0 1.25rem 2.5rem',
19
+ };
20
+ export const shellRootStyle = {
21
+ minHeight: '100vh',
22
+ backgroundColor: se.bg,
23
+ color: se.text,
24
+ fontFamily: 'system-ui, -apple-system, Segoe UI, Roboto, sans-serif',
25
+ };
26
+ export const mastheadStyle = {
27
+ borderBottom: `1px solid ${se.soft}`,
28
+ backgroundColor: se.bg,
29
+ marginBottom: '1.75rem',
30
+ };
31
+ export const mastheadInnerStyle = {
32
+ maxWidth: '42rem',
33
+ margin: '0 auto',
34
+ padding: '1.1rem 1.25rem 1rem',
35
+ };
36
+ export const brandMarkStyle = {
37
+ display: 'inline-flex',
38
+ alignItems: 'center',
39
+ gap: '0.5rem',
40
+ fontSize: '0.75rem',
41
+ fontWeight: 600,
42
+ letterSpacing: '0.08em',
43
+ textTransform: 'uppercase',
44
+ color: se.muted,
45
+ textDecoration: 'none',
46
+ };
47
+ export const brandDotStyle = {
48
+ display: 'inline-block',
49
+ width: '0.55rem',
50
+ height: '0.55rem',
51
+ borderRadius: '999px',
52
+ backgroundColor: se.yellow,
53
+ border: `1px solid ${se.text}`,
54
+ flexShrink: 0,
55
+ };
56
+ export const productLineStyle = {
57
+ margin: '0.45rem 0 0',
58
+ fontSize: '0.9375rem',
59
+ fontWeight: 600,
60
+ color: se.text,
61
+ };
62
+ export const accentRuleStyle = {
63
+ height: '3px',
64
+ width: '100%',
65
+ maxWidth: '42rem',
66
+ margin: '0 auto',
67
+ background: `linear-gradient(90deg, ${se.yellow} 0%, ${se.yellow} 28%, transparent 100%)`,
68
+ };
69
+ export const footerStyle = {
70
+ borderTop: `1px solid ${se.soft}`,
71
+ marginTop: '2.5rem',
72
+ paddingTop: '1.25rem',
73
+ paddingBottom: '2rem',
5
74
  maxWidth: '42rem',
6
- lineHeight: 1.5,
75
+ marginLeft: 'auto',
76
+ marginRight: 'auto',
77
+ paddingLeft: '1.25rem',
78
+ paddingRight: '1.25rem',
79
+ fontSize: '0.8125rem',
80
+ color: se.muted,
81
+ display: 'flex',
82
+ flexWrap: 'wrap',
83
+ gap: '0.5rem 1rem',
84
+ justifyContent: 'space-between',
85
+ alignItems: 'center',
86
+ };
87
+ export const footerLinkStyle = {
88
+ color: se.text,
89
+ textDecoration: 'none',
90
+ fontWeight: 600,
91
+ };
92
+ export const sectionStyle = {
93
+ marginTop: '1.5rem',
94
+ padding: '1.1rem 1.15rem',
95
+ backgroundColor: se.white,
96
+ border: `1px solid ${se.soft}`,
97
+ borderRadius: '0.5rem',
98
+ boxShadow: '0 1px 0 rgba(31, 46, 50, 0.04)',
99
+ };
100
+ export const h1Style = {
101
+ fontSize: '1.75rem',
102
+ lineHeight: 1.25,
103
+ fontWeight: 700,
104
+ letterSpacing: '-0.02em',
105
+ margin: '0 0 0.75rem',
106
+ color: se.text,
107
+ };
108
+ export const h2Style = {
109
+ fontSize: '1.05rem',
110
+ fontWeight: 700,
111
+ margin: '0 0 0.6rem',
112
+ color: se.text,
113
+ };
114
+ export const mutedStyle = {
115
+ fontSize: '0.9375rem',
116
+ color: se.muted,
117
+ };
118
+ export const linkStyle = {
119
+ color: se.text,
120
+ textDecoration: 'underline',
121
+ textDecorationColor: se.yellow,
122
+ textDecorationThickness: '2px',
123
+ textUnderlineOffset: '0.18em',
7
124
  };
8
125
  export const codeStyle = {
9
126
  display: 'block',
10
127
  margin: '0.5rem 0',
11
128
  padding: '0.75rem 1rem',
12
- background: '#f4f4f5',
129
+ background: se.softAlt,
130
+ border: `1px solid ${se.soft}`,
13
131
  borderRadius: '0.375rem',
14
132
  fontSize: '0.875rem',
15
133
  wordBreak: 'break-all',
16
134
  whiteSpace: 'pre-wrap',
135
+ color: se.text,
17
136
  };
18
137
  export const buttonStyle = {
19
138
  display: 'inline-block',
20
139
  marginTop: '0.5rem',
21
- padding: '0.75rem 1.25rem',
22
- backgroundColor: '#111',
23
- color: '#fff',
140
+ padding: '0.8rem 1.35rem',
141
+ backgroundColor: se.text,
142
+ color: se.white,
24
143
  textDecoration: 'none',
25
144
  borderRadius: '0.375rem',
26
145
  fontWeight: 600,
146
+ border: `2px solid ${se.text}`,
147
+ boxShadow: `3px 3px 0 ${se.yellow}`,
148
+ };
149
+ export const calloutStyle = {
150
+ margin: '0.5rem 0 0',
151
+ padding: '0.75rem 1rem',
152
+ background: se.softAlt,
153
+ borderLeft: `3px solid ${se.yellow}`,
154
+ borderRadius: '0 0.375rem 0.375rem 0',
155
+ color: se.text,
27
156
  };
28
157
  export async function resolveRequestOrigin() {
29
158
  const headerList = await headers();
@@ -1 +1 @@
1
- {"version":3,"file":"page-styles.js","sourceRoot":"","sources":["../../../src/hosted/next/page-styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,MAAM,CAAC,MAAM,SAAS,GAAkB;IACtC,UAAU,EAAE,uBAAuB;IACnC,OAAO,EAAE,MAAM;IACf,QAAQ,EAAE,OAAO;IACjB,UAAU,EAAE,GAAG;CAChB,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAkB;IACtC,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,UAAU;IAClB,OAAO,EAAE,cAAc;IACvB,UAAU,EAAE,SAAS;IACrB,YAAY,EAAE,UAAU;IACxB,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;IACtB,UAAU,EAAE,UAAU;CACvB,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAkB;IACxC,OAAO,EAAE,cAAc;IACvB,SAAS,EAAE,QAAQ;IACnB,OAAO,EAAE,iBAAiB;IAC1B,eAAe,EAAE,MAAM;IACvB,KAAK,EAAE,MAAM;IACb,cAAc,EAAE,MAAM;IACtB,YAAY,EAAE,UAAU;IACxB,UAAU,EAAE,GAAG;CAChB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,MAAM,UAAU,GAAG,MAAM,OAAO,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,IAAI,uBAAuB,CAAC;IAC1E,CAAC;IACD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,MAAM,CAAC;IAC5D,OAAO,GAAG,KAAK,MAAM,IAAI,EAAE,CAAC;AAC9B,CAAC"}
1
+ {"version":3,"file":"page-styles.js","sourceRoot":"","sources":["../../../src/hosted/next/page-styles.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"CmsEditPage.d.ts","sourceRoot":"","sources":["../../../../src/hosted/next/pages/CmsEditPage.tsx"],"names":[],"mappings":"AAIA,wBAA8B,qBAAqB,yCAwJlD"}
1
+ {"version":3,"file":"CmsEditPage.d.ts","sourceRoot":"","sources":["../../../../src/hosted/next/pages/CmsEditPage.tsx"],"names":[],"mappings":"AAeA,wBAA8B,qBAAqB,yCAqLlD"}
@@ -1,9 +1,11 @@
1
1
  import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { getMcpResourceUrl, loadHostedDeploymentFromEnv } from '../../index.js';
2
+ import { getMcpResourceUrl, getVersionInfo, loadHostedDeploymentFromEnv } from '../../index.js';
3
3
  import { buildClaudeConnectorInstallUrl, isPublicHttpsMcpUrl } from '../claude-connect.js';
4
- import { buttonStyle, codeStyle, pageStyle, resolveRequestOrigin } from '../page-styles.js';
4
+ import { HostedPageShell } from '../HostedPageShell.js';
5
+ import { buttonStyle, calloutStyle, codeStyle, h1Style, h2Style, linkStyle, mutedStyle, resolveRequestOrigin, sectionStyle, } from '../page-styles.js';
5
6
  export default async function CmsEditOnboardingPage() {
6
7
  const origin = await resolveRequestOrigin();
8
+ const { version } = getVersionInfo();
7
9
  let displayName = 'your site';
8
10
  let mcpUrl = `${origin}/api/mcp`;
9
11
  try {
@@ -17,6 +19,6 @@ export default async function CmsEditOnboardingPage() {
17
19
  const connectorName = `cms-edit (${displayName})`;
18
20
  const installUrl = buildClaudeConnectorInstallUrl(mcpUrl, connectorName);
19
21
  const canUseInstallLink = isPublicHttpsMcpUrl(mcpUrl);
20
- return (_jsxs("main", { style: pageStyle, children: [_jsxs("h1", { children: ["cms-edit for ", displayName] }), _jsx("p", { children: "Edit Contentful draft content from Claude. Sign in with your Contentful account \u2014 no tokens or command line required." }), _jsxs("section", { children: [_jsx("h2", { children: "Quick connect (recommended)" }), canUseInstallLink ? (_jsxs(_Fragment, { children: [_jsx("p", { children: "Click the button below. It opens Claude with the connector name and URL prefilled \u2014 you just confirm and sign in with Contentful." }), _jsx("p", { children: _jsx("a", { href: installUrl, style: buttonStyle, children: "Connect to Claude" }) }), _jsxs("p", { style: { fontSize: '0.9375rem', color: '#52525b' }, children: ["Works in Claude Desktop and claude.ai (same account). Shortcut:", ' ', _jsx("a", { href: "/connect", children: "/connect" })] })] })) : (_jsx("p", { children: "The one-click link requires a public HTTPS URL. For local dev, add the connector manually below or use Claude Code." }))] }), _jsxs("section", { children: [_jsx("h2", { children: "Manual setup" }), _jsxs("ol", { children: [_jsxs("li", { children: ["Install ", _jsx("a", { href: "https://claude.ai/download", children: "Claude Desktop" }), " if needed"] }), _jsxs("li", { children: ["Open ", _jsx("strong", { children: "Customize \u2192 Connectors" }), " (or Settings \u2192 Integrations in some versions)"] }), _jsxs("li", { children: ["Click ", _jsx("strong", { children: "Add custom connector" })] }), _jsxs("li", { children: ["Paste this URL, then ", _jsx("strong", { children: "Connect" }), " and sign in with Contentful:"] })] }), _jsx("code", { style: codeStyle, children: mcpUrl })] }), _jsxs("section", { children: [_jsx("h2", { children: "Site playbooks" }), _jsxs("p", { children: ["Site-specific rules for ", displayName, " (articles, routing, components, and more). Claude Integrations cannot read ", _jsx("code", { children: "cms-edit://customer/*" }), " MCP resources \u2014 use the", ' ', _jsx("strong", { children: "cms_edit_customer" }), " tool or the URLs below."] }), _jsxs("ul", { children: [_jsxs("li", { children: [_jsx("strong", { children: "Start:" }), " ", _jsx("a", { href: "/cms-edit/playbooks/tasks-index", children: "tasks-index" }), " \u2014 intent \u2192 task playbooks"] }), _jsxs("li", { children: [_jsx("a", { href: "/cms-edit/playbooks/capabilities", children: "capabilities" }), " \u00B7", ' ', _jsx("a", { href: "/cms-edit/playbooks/checklist", children: "checklist" })] }), _jsxs("li", { children: [_jsx("a", { href: "/cms-edit/playbooks", children: "Browse all playbooks" }), " \u00B7", ' ', _jsx("a", { href: "/api/customer", children: "JSON index" })] }), _jsxs("li", { children: ["Examples: ", _jsx("a", { href: "/api/customer/overview", children: "overview" }), ",", ' ', _jsx("a", { href: "/api/customer/routing", children: "routing" }), ",", ' ', _jsx("a", { href: "/api/customer/articles", children: "articles" })] })] }), _jsx("blockquote", { style: { margin: '0.5rem 0', padding: '0.75rem 1rem', background: '#f4f4f5' }, children: "In Claude: read tasks-index first, then the matching task-* playbook. Use cms_edit_customer with resource \"tasks-index\" or cms_edit [\"customer\", \"tasks-index\"]." })] }), _jsxs("section", { children: [_jsx("h2", { children: "Verify" }), _jsx("p", { children: "Start a new conversation and ask:" }), _jsx("blockquote", { style: { margin: '0.5rem 0', padding: '0.75rem 1rem', background: '#f4f4f5' }, children: "Read the cms-edit guide, then tasks-index, and verify the connection." })] }), _jsxs("section", { children: [_jsx("h2", { children: "Common tasks" }), _jsx("p", { children: "Examples you can paste into Claude (or use the matching MCP prompts):" }), _jsxs("ul", { children: [_jsxs("li", { children: [_jsx("strong", { children: "Edit a page:" }), " \u201CUpdate the hero heading on /about-us\u201D"] }), _jsxs("li", { children: [_jsx("strong", { children: "Create an article:" }), " \u201CCreate a new blog article titled \u2026\u201D (Claude will ask for the article type)"] }), _jsxs("li", { children: [_jsx("strong", { children: "Go live:" }), " After Claude saves a draft, open Contentful and publish \u2014 cms-edit does not publish for you"] })] }), _jsx("p", { style: { fontSize: '0.9375rem', color: '#52525b' }, children: "Use Contentful only to publish and upload images. Do all copy editing in Claude." })] }), _jsxs("section", { children: [_jsx("h2", { children: "Troubleshooting" }), _jsxs("ul", { children: [_jsxs("li", { children: [_jsx("strong", { children: "Connection stopped working?" }), " Open Customize \u2192 Connectors and click", ' ', _jsx("strong", { children: "Connect" }), " again."] }), _jsxs("li", { children: [_jsx("strong", { children: "Wrong space?" }), " Your Contentful account must have access to this site's space."] }), _jsxs("li", { children: ["Health check: ", _jsx("code", { children: "/api/health" })] })] })] })] }));
22
+ return (_jsxs(HostedPageShell, { displayName: displayName, version: version, children: [_jsxs("h1", { style: h1Style, children: ["cms-edit for ", displayName] }), _jsx("p", { children: "Edit Contentful draft content from Claude. Sign in with your Contentful account \u2014 no tokens or command line required." }), _jsxs("section", { style: sectionStyle, children: [_jsx("h2", { style: h2Style, children: "Quick connect (recommended)" }), canUseInstallLink ? (_jsxs(_Fragment, { children: [_jsx("p", { children: "Click the button below. It opens Claude with the connector name and URL prefilled \u2014 you just confirm and sign in with Contentful." }), _jsx("p", { children: _jsx("a", { href: installUrl, style: buttonStyle, children: "Connect to Claude" }) }), _jsxs("p", { style: mutedStyle, children: ["Works in Claude Desktop and claude.ai (same account). Shortcut:", ' ', _jsx("a", { href: "/connect", style: linkStyle, children: "/connect" })] })] })) : (_jsx("p", { children: "The one-click link requires a public HTTPS URL. For local dev, add the connector manually below or use Claude Code." }))] }), _jsxs("section", { style: sectionStyle, children: [_jsx("h2", { style: h2Style, children: "Manual setup" }), _jsxs("ol", { children: [_jsxs("li", { children: ["Install", ' ', _jsx("a", { href: "https://claude.ai/download", style: linkStyle, children: "Claude Desktop" }), ' ', "if needed"] }), _jsxs("li", { children: ["Open ", _jsx("strong", { children: "Customize \u2192 Connectors" }), " (or Settings \u2192 Integrations in some versions)"] }), _jsxs("li", { children: ["Click ", _jsx("strong", { children: "Add custom connector" })] }), _jsxs("li", { children: ["Paste this URL, then ", _jsx("strong", { children: "Connect" }), " and sign in with Contentful:"] })] }), _jsx("code", { style: codeStyle, children: mcpUrl })] }), _jsxs("section", { style: sectionStyle, children: [_jsx("h2", { style: h2Style, children: "Site playbooks" }), _jsxs("p", { children: ["Site-specific rules for ", displayName, " (articles, routing, components, and more). Claude Integrations cannot read ", _jsx("code", { children: "cms-edit://customer/*" }), " MCP resources \u2014 use the", ' ', _jsx("strong", { children: "cms_edit_customer" }), " tool or the URLs below."] }), _jsxs("ul", { children: [_jsxs("li", { children: [_jsx("strong", { children: "Start:" }), ' ', _jsx("a", { href: "/cms-edit/playbooks/tasks-index", style: linkStyle, children: "tasks-index" }), ' ', "\u2014 intent \u2192 task playbooks"] }), _jsxs("li", { children: [_jsx("a", { href: "/cms-edit/playbooks/capabilities", style: linkStyle, children: "capabilities" }), ' ', "\u00B7", ' ', _jsx("a", { href: "/cms-edit/playbooks/checklist", style: linkStyle, children: "checklist" })] }), _jsxs("li", { children: [_jsx("a", { href: "/cms-edit/playbooks", style: linkStyle, children: "Browse all playbooks" }), ' ', "\u00B7", ' ', _jsx("a", { href: "/api/customer", style: linkStyle, children: "JSON index" })] }), _jsxs("li", { children: ["Examples:", ' ', _jsx("a", { href: "/api/customer/overview", style: linkStyle, children: "overview" }), ",", ' ', _jsx("a", { href: "/api/customer/routing", style: linkStyle, children: "routing" }), ",", ' ', _jsx("a", { href: "/api/customer/articles", style: linkStyle, children: "articles" })] })] }), _jsx("blockquote", { style: calloutStyle, children: "In Claude: read tasks-index first, then the matching task-* playbook. Use cms_edit_customer with resource \"tasks-index\" or cms_edit [\"customer\", \"tasks-index\"]." })] }), _jsxs("section", { style: sectionStyle, children: [_jsx("h2", { style: h2Style, children: "Verify" }), _jsx("p", { children: "Start a new conversation and ask:" }), _jsx("blockquote", { style: calloutStyle, children: "Read the cms-edit guide, then tasks-index, and verify the connection." })] }), _jsxs("section", { style: sectionStyle, children: [_jsx("h2", { style: h2Style, children: "Common tasks" }), _jsx("p", { children: "Examples you can paste into Claude (or use the matching MCP prompts):" }), _jsxs("ul", { children: [_jsxs("li", { children: [_jsx("strong", { children: "Edit a page:" }), " \u201CUpdate the hero heading on /about-us\u201D"] }), _jsxs("li", { children: [_jsx("strong", { children: "Create an article:" }), " \u201CCreate a new blog article titled \u2026\u201D (Claude will ask for the article type)"] }), _jsxs("li", { children: [_jsx("strong", { children: "Go live:" }), " After Claude saves a draft, open Contentful and publish \u2014 cms-edit does not publish for you"] })] }), _jsx("p", { style: mutedStyle, children: "Use Contentful only to publish and upload images. Do all copy editing in Claude." })] }), _jsxs("section", { style: sectionStyle, children: [_jsx("h2", { style: h2Style, children: "Troubleshooting" }), _jsxs("ul", { children: [_jsxs("li", { children: [_jsx("strong", { children: "Connection stopped working?" }), " Open Customize \u2192 Connectors and click", ' ', _jsx("strong", { children: "Connect" }), " again."] }), _jsxs("li", { children: [_jsx("strong", { children: "Wrong space?" }), " Your Contentful account must have access to this site's space."] }), _jsxs("li", { children: ["Health check: ", _jsx("code", { children: "/api/health" })] })] })] })] }));
21
23
  }
22
24
  //# sourceMappingURL=CmsEditPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CmsEditPage.js","sourceRoot":"","sources":["../../../../src/hosted/next/pages/CmsEditPage.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CmsEditPage.js","sourceRoot":"","sources":["../../../../src/hosted/next/pages/CmsEditPage.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ContentfulCallbackPage.d.ts","sourceRoot":"","sources":["../../../../src/hosted/next/pages/ContentfulCallbackPage.tsx"],"names":[],"mappings":"AASA,MAAM,CAAC,OAAO,UAAU,sBAAsB,gCA6C7C"}
1
+ {"version":3,"file":"ContentfulCallbackPage.d.ts","sourceRoot":"","sources":["../../../../src/hosted/next/pages/ContentfulCallbackPage.tsx"],"names":[],"mappings":"AAWA,MAAM,CAAC,OAAO,UAAU,sBAAsB,gCA6C7C"}
@@ -1,6 +1,8 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useEffect, useState } from 'react';
4
+ import { HostedPageShell } from '../HostedPageShell.js';
5
+ import { h1Style } from '../page-styles.js';
4
6
  function parseHashParams(hash) {
5
7
  const trimmed = hash.startsWith('#') ? hash.slice(1) : hash;
6
8
  return new URLSearchParams(trimmed);
@@ -40,6 +42,6 @@ export default function ContentfulCallbackPage() {
40
42
  }
41
43
  void completeLink();
42
44
  }, []);
43
- return (_jsxs("main", { style: { fontFamily: 'system-ui, sans-serif', padding: '2rem', maxWidth: '32rem' }, children: [_jsx("h1", { children: "Contentful sign-in" }), _jsx("p", { children: message })] }));
45
+ return (_jsxs(HostedPageShell, { showProductLine: false, mainStyle: { maxWidth: '32rem' }, children: [_jsx("h1", { style: h1Style, children: "Contentful sign-in" }), _jsx("p", { children: message })] }));
44
46
  }
45
47
  //# sourceMappingURL=ContentfulCallbackPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ContentfulCallbackPage.js","sourceRoot":"","sources":["../../../../src/hosted/next/pages/ContentfulCallbackPage.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5D,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,sBAAsB;IAC5C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,gCAAgC,CAAC,CAAC;IAEzE,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,UAAU,YAAY;YACzB,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACrD,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC/C,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAElC,IAAI,KAAK,EAAE,CAAC;gBACV,UAAU,CAAC,oCAAoC,KAAK,EAAE,CAAC,CAAC;gBACxD,OAAO;YACT,CAAC;YACD,IAAI,CAAC,WAAW,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnC,UAAU,CAAC,yDAAyD,CAAC,CAAC;gBACtE,OAAO;YACT,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,4BAA4B,EAAE;oBACpD,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;oBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;iBACtE,CAAC,CAAC;gBACH,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA6C,CAAC;gBAC5E,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjC,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,oCAAoC,CAAC,CAAC;oBAC/D,OAAO;gBACT,CAAC;gBACD,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;YAC1C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,UAAU,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QAED,KAAK,YAAY,EAAE,CAAC;IACtB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,gBAAM,KAAK,EAAE,EAAE,UAAU,EAAE,uBAAuB,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,aACtF,8CAA2B,EAC3B,sBAAI,OAAO,GAAK,IACX,CACR,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"ContentfulCallbackPage.js","sourceRoot":"","sources":["../../../../src/hosted/next/pages/ContentfulCallbackPage.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5D,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,sBAAsB;IAC5C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,gCAAgC,CAAC,CAAC;IAEzE,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,UAAU,YAAY;YACzB,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACrD,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC/C,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAElC,IAAI,KAAK,EAAE,CAAC;gBACV,UAAU,CAAC,oCAAoC,KAAK,EAAE,CAAC,CAAC;gBACxD,OAAO;YACT,CAAC;YACD,IAAI,CAAC,WAAW,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnC,UAAU,CAAC,yDAAyD,CAAC,CAAC;gBACtE,OAAO;YACT,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,4BAA4B,EAAE;oBACpD,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;oBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;iBACtE,CAAC,CAAC;gBACH,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA6C,CAAC;gBAC5E,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjC,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,oCAAoC,CAAC,CAAC;oBAC/D,OAAO;gBACT,CAAC;gBACD,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;YAC1C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,UAAU,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QAED,KAAK,YAAY,EAAE,CAAC;IACtB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,MAAC,eAAe,IAAC,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,aACvE,aAAI,KAAK,EAAE,OAAO,mCAAyB,EAC3C,sBAAI,OAAO,GAAK,IACA,CACnB,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"CustomerPlaybookPage.d.ts","sourceRoot":"","sources":["../../../../src/hosted/next/pages/CustomerPlaybookPage.tsx"],"names":[],"mappings":"AAIA,KAAK,yBAAyB,GAAG;IAC/B,MAAM,EAAE,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvC,CAAC;AAEF,wBAA8B,oBAAoB,CAAC,EAAE,MAAM,EAAE,EAAE,yBAAyB,wCA4BvF"}
1
+ {"version":3,"file":"CustomerPlaybookPage.d.ts","sourceRoot":"","sources":["../../../../src/hosted/next/pages/CustomerPlaybookPage.tsx"],"names":[],"mappings":"AAMA,KAAK,yBAAyB,GAAG;IAC/B,MAAM,EAAE,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvC,CAAC;AAEF,wBAA8B,oBAAoB,CAAC,EAAE,MAAM,EAAE,EAAE,yBAAyB,wCA4CvF"}
@@ -1,13 +1,24 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { readCustomerPlaybook } from '../../customer-playbooks.js';
3
+ import { getVersionInfo, loadHostedDeploymentFromEnv } from '../../index.js';
3
4
  import { getHostedEditorPackPath } from '../editor-pack-path.js';
4
- import { codeStyle, pageStyle } from '../page-styles.js';
5
+ import { HostedPageShell } from '../HostedPageShell.js';
6
+ import { codeStyle, h1Style, linkStyle } from '../page-styles.js';
5
7
  export default async function CustomerPlaybookPage({ params }) {
6
8
  const { resource } = await params;
9
+ const { version } = getVersionInfo();
7
10
  const playbook = readCustomerPlaybook(resource, getHostedEditorPackPath());
11
+ let displayName;
12
+ try {
13
+ const deployment = loadHostedDeploymentFromEnv();
14
+ displayName = process.env['CMS_EDIT_DISPLAY_NAME'] ?? deployment.projectKey;
15
+ }
16
+ catch {
17
+ // env not set
18
+ }
8
19
  if (!playbook) {
9
- return (_jsxs("main", { style: pageStyle, children: [_jsx("h1", { children: "Playbook not found" }), _jsxs("p", { children: ["No playbook named ", _jsx("code", { children: resource }), " on this deployment."] }), _jsx("p", { children: _jsx("a", { href: "/cms-edit/playbooks", children: "\u2190 All playbooks" }) })] }));
20
+ return (_jsxs(HostedPageShell, { displayName: displayName, version: version, children: [_jsx("h1", { style: h1Style, children: "Playbook not found" }), _jsxs("p", { children: ["No playbook named ", _jsx("code", { children: resource }), " on this deployment."] }), _jsx("p", { children: _jsx("a", { href: "/cms-edit/playbooks", style: linkStyle, children: "\u2190 All playbooks" }) })] }));
10
21
  }
11
- return (_jsxs("main", { style: pageStyle, children: [_jsxs("p", { children: [_jsx("a", { href: "/cms-edit/playbooks", children: "\u2190 All playbooks" }), " \u00B7", ' ', _jsx("a", { href: `/api/customer/${encodeURIComponent(playbook.name)}`, children: "Raw API" })] }), _jsx("h1", { children: playbook.name }), _jsx("pre", { style: codeStyle, children: playbook.text })] }));
22
+ return (_jsxs(HostedPageShell, { displayName: displayName, version: version, children: [_jsxs("p", { children: [_jsx("a", { href: "/cms-edit/playbooks", style: linkStyle, children: "\u2190 All playbooks" }), ' ', "\u00B7", ' ', _jsx("a", { href: `/api/customer/${encodeURIComponent(playbook.name)}`, style: linkStyle, children: "Raw API" })] }), _jsx("h1", { style: h1Style, children: playbook.name }), _jsx("pre", { style: codeStyle, children: playbook.text })] }));
12
23
  }
13
24
  //# sourceMappingURL=CustomerPlaybookPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CustomerPlaybookPage.js","sourceRoot":"","sources":["../../../../src/hosted/next/pages/CustomerPlaybookPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAMzD,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,oBAAoB,CAAC,EAAE,MAAM,EAA6B;IACtF,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC;IAClC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,QAAQ,EAAE,uBAAuB,EAAE,CAAC,CAAC;IAE3E,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CACL,gBAAM,KAAK,EAAE,SAAS,aACpB,8CAA2B,EAC3B,8CACoB,yBAAO,QAAQ,GAAQ,4BACvC,EACJ,sBACE,YAAG,IAAI,EAAC,qBAAqB,qCAAoB,GAC/C,IACC,CACR,CAAC;IACJ,CAAC;IAED,OAAO,CACL,gBAAM,KAAK,EAAE,SAAS,aACpB,wBACE,YAAG,IAAI,EAAC,qBAAqB,qCAAoB,aAAG,GAAG,EACvD,YAAG,IAAI,EAAE,iBAAiB,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,wBAAa,IACxE,EACJ,uBAAK,QAAQ,CAAC,IAAI,GAAM,EACxB,cAAK,KAAK,EAAE,SAAS,YAAG,QAAQ,CAAC,IAAI,GAAO,IACvC,CACR,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"CustomerPlaybookPage.js","sourceRoot":"","sources":["../../../../src/hosted/next/pages/CustomerPlaybookPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAMlE,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,oBAAoB,CAAC,EAAE,MAAM,EAA6B;IACtF,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC;IAClC,MAAM,EAAE,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,QAAQ,EAAE,uBAAuB,EAAE,CAAC,CAAC;IAE3E,IAAI,WAA+B,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,2BAA2B,EAAE,CAAC;QACjD,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC;IAC9E,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;IAED,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CACL,MAAC,eAAe,IAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,aACzD,aAAI,KAAK,EAAE,OAAO,mCAAyB,EAC3C,8CACoB,yBAAO,QAAQ,GAAQ,4BACvC,EACJ,sBACE,YAAG,IAAI,EAAC,qBAAqB,EAAC,KAAK,EAAE,SAAS,qCAE1C,GACF,IACY,CACnB,CAAC;IACJ,CAAC;IAED,OAAO,CACL,MAAC,eAAe,IAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,aACzD,wBACE,YAAG,IAAI,EAAC,qBAAqB,EAAC,KAAK,EAAE,SAAS,qCAE1C,EAAC,GAAG,YACN,GAAG,EACL,YAAG,IAAI,EAAE,iBAAiB,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,wBAE3E,IACF,EACJ,aAAI,KAAK,EAAE,OAAO,YAAG,QAAQ,CAAC,IAAI,GAAM,EACxC,cAAK,KAAK,EAAE,SAAS,YAAG,QAAQ,CAAC,IAAI,GAAO,IAC5B,CACnB,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"CustomerPlaybooksPage.d.ts","sourceRoot":"","sources":["../../../../src/hosted/next/pages/CustomerPlaybooksPage.tsx"],"names":[],"mappings":"AAIA,wBAA8B,qBAAqB,yCAwElD"}
1
+ {"version":3,"file":"CustomerPlaybooksPage.d.ts","sourceRoot":"","sources":["../../../../src/hosted/next/pages/CustomerPlaybooksPage.tsx"],"names":[],"mappings":"AAaA,wBAA8B,qBAAqB,yCA4FlD"}
@@ -1,13 +1,17 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { buildCustomerPlaybookIndex } from '../../customer-playbooks.js';
3
+ import { getVersionInfo } from '../../index.js';
3
4
  import { getHostedEditorPackPath } from '../editor-pack-path.js';
4
- import { pageStyle, resolveRequestOrigin } from '../page-styles.js';
5
+ import { HostedPageShell } from '../HostedPageShell.js';
6
+ import { h1Style, h2Style, linkStyle, mutedStyle, resolveRequestOrigin, sectionStyle, } from '../page-styles.js';
5
7
  export default async function CustomerPlaybooksPage() {
6
8
  const origin = await resolveRequestOrigin();
9
+ const { version } = getVersionInfo();
7
10
  const index = buildCustomerPlaybookIndex(origin, getHostedEditorPackPath());
8
11
  if (!index) {
9
- return (_jsxs("main", { style: pageStyle, children: [_jsx("h1", { children: "Site playbooks" }), _jsx("p", { children: "No editor pack is configured on this deployment." })] }));
12
+ return (_jsxs(HostedPageShell, { version: version, children: [_jsx("h1", { style: h1Style, children: "Site playbooks" }), _jsx("p", { children: "No editor pack is configured on this deployment." })] }));
10
13
  }
14
+ const displayName = index.displayName ?? index.projectKey;
11
15
  const highlighted = new Set([
12
16
  'tasks-index',
13
17
  'capabilities',
@@ -18,8 +22,8 @@ export default async function CustomerPlaybooksPage() {
18
22
  'blog-tag-matrix',
19
23
  'defaults',
20
24
  ]);
21
- return (_jsxs("main", { style: pageStyle, children: [_jsxs("h1", { children: ["Site playbooks \u2014 ", index.displayName ?? index.projectKey] }), _jsxs("p", { children: ["Site-specific guidance for Claude and editors. In Claude Integrations, use the", ' ', _jsx("strong", { children: "cms_edit_customer" }), " tool (recommended) or fetch the API URLs below."] }), _jsx("p", { children: _jsx("a", { href: "/cms-edit", children: "\u2190 Back to cms-edit connect" }) }), _jsxs("section", { children: [_jsx("h2", { children: "Start here" }), _jsxs("p", { children: ["Read ", _jsx("strong", { children: "tasks-index" }), " first \u2014 it maps common editing goals to step-by-step playbooks for this site."] }), _jsx("ul", { children: index.resources
25
+ return (_jsxs(HostedPageShell, { displayName: displayName, version: version, children: [_jsxs("h1", { style: h1Style, children: ["Site playbooks \u2014 ", displayName] }), _jsxs("p", { children: ["Site-specific guidance for Claude and editors. In Claude Integrations, use the", ' ', _jsx("strong", { children: "cms_edit_customer" }), " tool (recommended) or fetch the API URLs below."] }), _jsx("p", { children: _jsx("a", { href: "/cms-edit", style: linkStyle, children: "\u2190 Back to cms-edit connect" }) }), _jsxs("section", { style: sectionStyle, children: [_jsx("h2", { style: h2Style, children: "Start here" }), _jsxs("p", { children: ["Read ", _jsx("strong", { children: "tasks-index" }), " first \u2014 it maps common editing goals to step-by-step playbooks for this site."] }), _jsx("ul", { children: index.resources
22
26
  .filter((resource) => highlighted.has(resource.name))
23
- .map((resource) => (_jsxs("li", { children: [_jsx("a", { href: resource.pageUrl, children: resource.name }), " \u2014 ", _jsx("a", { href: resource.apiUrl, children: "API" })] }, resource.name))) }), index.requiredReading.length > 0 && (_jsxs("p", { style: { fontSize: '0.9375rem', color: '#52525b' }, children: ["Suggested order: ", index.requiredReading.map((uri) => uri.split('/').pop()).join(' → ')] }))] }), _jsxs("section", { children: [_jsx("h2", { children: "All playbooks" }), _jsxs("ul", { children: [_jsxs("li", { children: [_jsx("a", { href: `${origin}/api/customer`, children: "index" }), " (JSON list)"] }), index.resources.map((resource) => (_jsxs("li", { children: [_jsx("a", { href: resource.pageUrl, children: resource.name }), " \u2014 ", _jsx("a", { href: resource.apiUrl, children: "API" })] }, resource.name)))] })] })] }));
27
+ .map((resource) => (_jsxs("li", { children: [_jsx("a", { href: resource.pageUrl, style: linkStyle, children: resource.name }), ' ', "\u2014", ' ', _jsx("a", { href: resource.apiUrl, style: linkStyle, children: "API" })] }, resource.name))) }), index.requiredReading.length > 0 && (_jsxs("p", { style: mutedStyle, children: ["Suggested order: ", index.requiredReading.map((uri) => uri.split('/').pop()).join(' → ')] }))] }), _jsxs("section", { style: sectionStyle, children: [_jsx("h2", { style: h2Style, children: "All playbooks" }), _jsxs("ul", { children: [_jsxs("li", { children: [_jsx("a", { href: `${origin}/api/customer`, style: linkStyle, children: "index" }), ' ', "(JSON list)"] }), index.resources.map((resource) => (_jsxs("li", { children: [_jsx("a", { href: resource.pageUrl, style: linkStyle, children: resource.name }), ' ', "\u2014", ' ', _jsx("a", { href: resource.apiUrl, style: linkStyle, children: "API" })] }, resource.name)))] })] })] }));
24
28
  }
25
29
  //# sourceMappingURL=CustomerPlaybooksPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CustomerPlaybooksPage.js","sourceRoot":"","sources":["../../../../src/hosted/next/pages/CustomerPlaybooksPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEpE,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,qBAAqB;IACjD,MAAM,MAAM,GAAG,MAAM,oBAAoB,EAAE,CAAC;IAC5C,MAAM,KAAK,GAAG,0BAA0B,CAAC,MAAM,EAAE,uBAAuB,EAAE,CAAC,CAAC;IAE5E,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CACL,gBAAM,KAAK,EAAE,SAAS,aACpB,0CAAuB,EACvB,2EAAuD,IAClD,CACR,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;QAC1B,aAAa;QACb,cAAc;QACd,WAAW;QACX,UAAU;QACV,SAAS;QACT,UAAU;QACV,iBAAiB;QACjB,UAAU;KACX,CAAC,CAAC;IAEH,OAAO,CACL,gBAAM,KAAK,EAAE,SAAS,aACpB,mDAAsB,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,UAAU,IAAM,EACjE,0GACiF,GAAG,EAClF,iDAAkC,wDAChC,EACJ,sBACE,YAAG,IAAI,EAAC,WAAW,gDAA+B,GAChD,EAEJ,8BACE,sCAAmB,EACnB,iCACO,2CAA4B,2FAE/B,EACJ,uBACG,KAAK,CAAC,SAAS;6BACb,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;6BACpD,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CACjB,yBACE,YAAG,IAAI,EAAE,QAAQ,CAAC,OAAO,YAAG,QAAQ,CAAC,IAAI,GAAK,cAAG,YAAG,IAAI,EAAE,QAAQ,CAAC,MAAM,oBAAS,KAD3E,QAAQ,CAAC,IAAI,CAEjB,CACN,CAAC,GACD,EACJ,KAAK,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,CACnC,aAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,kCACjC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IACpF,CACL,IACO,EAEV,8BACE,yCAAsB,EACtB,yBACE,yBACE,YAAG,IAAI,EAAE,GAAG,MAAM,eAAe,sBAAW,oBACzC,EACJ,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CACjC,yBACE,YAAG,IAAI,EAAE,QAAQ,CAAC,OAAO,YAAG,QAAQ,CAAC,IAAI,GAAK,cAAG,YAAG,IAAI,EAAE,QAAQ,CAAC,MAAM,oBAAS,KAD3E,QAAQ,CAAC,IAAI,CAEjB,CACN,CAAC,IACC,IACG,IACL,CACR,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"CustomerPlaybooksPage.js","sourceRoot":"","sources":["../../../../src/hosted/next/pages/CustomerPlaybooksPage.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"HomePage.d.ts","sourceRoot":"","sources":["../../../../src/hosted/next/pages/HomePage.tsx"],"names":[],"mappings":"AAIA,wBAA8B,QAAQ,yCA8GrC"}
1
+ {"version":3,"file":"HomePage.d.ts","sourceRoot":"","sources":["../../../../src/hosted/next/pages/HomePage.tsx"],"names":[],"mappings":"AAeA,wBAA8B,QAAQ,yCA2HrC"}
@@ -1,7 +1,8 @@
1
1
  import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
2
  import { getMcpResourceUrl, getVersionInfo, loadHostedDeploymentFromEnv } from '../../index.js';
3
3
  import { buildClaudeConnectorInstallUrl, isPublicHttpsMcpUrl } from '../claude-connect.js';
4
- import { buttonStyle, codeStyle, pageStyle, resolveRequestOrigin } from '../page-styles.js';
4
+ import { HostedPageShell } from '../HostedPageShell.js';
5
+ import { buttonStyle, calloutStyle, codeStyle, h1Style, h2Style, linkStyle, mutedStyle, resolveRequestOrigin, sectionStyle, } from '../page-styles.js';
5
6
  export default async function HomePage() {
6
7
  const origin = await resolveRequestOrigin();
7
8
  const { version } = getVersionInfo();
@@ -31,6 +32,6 @@ export default async function HomePage() {
31
32
  },
32
33
  },
33
34
  }, null, 2);
34
- return (_jsxs("main", { style: pageStyle, children: [_jsxs("h1", { children: ["cms-edit for ", displayName] }), _jsx("p", { children: "Hosted MCP server for editing Contentful draft content. Sign in with your Contentful account via OAuth \u2014 no personal access token required." }), canUseInstallLink && (_jsxs("section", { children: [_jsx("h2", { children: "Connect to Claude" }), _jsx("p", { children: "One-click setup \u2014 opens Claude with the connector prefilled. Confirm, then sign in with Contentful." }), _jsx("p", { children: _jsx("a", { href: installUrl, style: buttonStyle, children: "Connect to Claude" }) }), _jsxs("p", { style: { fontSize: '0.9375rem', color: '#52525b' }, children: ["Or use ", _jsx("a", { href: "/connect", children: "/connect" }), " \u00B7 Editor guide: ", _jsx("a", { href: "/cms-edit", children: "/cms-edit" }), ' ', "\u00B7 Task playbooks: ", _jsx("a", { href: "/cms-edit/playbooks/tasks-index", children: "tasks-index" })] })] })), _jsxs("section", { children: [_jsx("h2", { children: "Deployment" }), _jsxs("ul", { children: [_jsxs("li", { children: [_jsx("strong", { children: "Project:" }), " ", projectKey] }), _jsxs("li", { children: [_jsx("strong", { children: "Space ID:" }), " ", spaceId] }), _jsxs("li", { children: [_jsx("strong", { children: "cms-edit version:" }), " ", version] }), _jsxs("li", { children: [_jsx("strong", { children: "MCP URL:" }), " ", _jsx("code", { children: mcpUrl })] }), _jsxs("li", { children: [_jsx("strong", { children: "Health:" }), " ", _jsx("a", { href: "/api/health", children: "/api/health" })] })] })] }), _jsxs("section", { children: [_jsx("h2", { children: "Claude Desktop (manual)" }), _jsxs("p", { children: [_jsx("strong", { children: "Customize \u2192 Connectors \u2192 Add custom connector" }), " \u2014 paste the MCP URL, then Connect and sign in with Contentful."] })] }), _jsxs("section", { children: [_jsx("h2", { children: "Claude Code" }), _jsx("p", { children: "Add the server from your terminal (local scope \u2014 this project only):" }), _jsx("code", { style: codeStyle, children: claudeCodeCommand }), _jsxs("p", { children: ["Then run ", _jsx("code", { children: "/mcp" }), " in Claude Code and complete OAuth + Contentful sign-in."] }), _jsx("code", { style: codeStyle, children: mcpJson })] }), _jsxs("section", { children: [_jsx("h2", { children: "Verify" }), _jsx("blockquote", { style: { margin: '0.5rem 0', padding: '0.75rem 1rem', background: '#f4f4f5' }, children: "Read the cms-edit guide and tasks-index, then verify the connection." })] })] }));
35
+ return (_jsxs(HostedPageShell, { displayName: displayName, version: version, children: [_jsxs("h1", { style: h1Style, children: ["cms-edit for ", displayName] }), _jsx("p", { children: "Hosted MCP server for editing Contentful draft content. Sign in with your Contentful account via OAuth \u2014 no personal access token required." }), canUseInstallLink && (_jsxs("section", { style: sectionStyle, children: [_jsx("h2", { style: h2Style, children: "Connect to Claude" }), _jsx("p", { children: "One-click setup \u2014 opens Claude with the connector prefilled. Confirm, then sign in with Contentful." }), _jsx("p", { children: _jsx("a", { href: installUrl, style: buttonStyle, children: "Connect to Claude" }) }), _jsxs("p", { style: mutedStyle, children: ["Or use", ' ', _jsx("a", { href: "/connect", style: linkStyle, children: "/connect" }), ' ', "\u00B7 Editor guide:", ' ', _jsx("a", { href: "/cms-edit", style: linkStyle, children: "/cms-edit" }), ' ', "\u00B7 Task playbooks:", ' ', _jsx("a", { href: "/cms-edit/playbooks/tasks-index", style: linkStyle, children: "tasks-index" })] })] })), _jsxs("section", { style: sectionStyle, children: [_jsx("h2", { style: h2Style, children: "Deployment" }), _jsxs("ul", { children: [_jsxs("li", { children: [_jsx("strong", { children: "Project:" }), " ", projectKey] }), _jsxs("li", { children: [_jsx("strong", { children: "Space ID:" }), " ", spaceId] }), _jsxs("li", { children: [_jsx("strong", { children: "cms-edit version:" }), " ", version] }), _jsxs("li", { children: [_jsx("strong", { children: "MCP URL:" }), " ", _jsx("code", { children: mcpUrl })] }), _jsxs("li", { children: [_jsx("strong", { children: "Health:" }), ' ', _jsx("a", { href: "/api/health", style: linkStyle, children: "/api/health" })] })] })] }), _jsxs("section", { style: sectionStyle, children: [_jsx("h2", { style: h2Style, children: "Claude Desktop (manual)" }), _jsxs("p", { children: [_jsx("strong", { children: "Customize \u2192 Connectors \u2192 Add custom connector" }), " \u2014 paste the MCP URL, then Connect and sign in with Contentful."] })] }), _jsxs("section", { style: sectionStyle, children: [_jsx("h2", { style: h2Style, children: "Claude Code" }), _jsx("p", { children: "Add the server from your terminal (local scope \u2014 this project only):" }), _jsx("code", { style: codeStyle, children: claudeCodeCommand }), _jsxs("p", { children: ["Then run ", _jsx("code", { children: "/mcp" }), " in Claude Code and complete OAuth + Contentful sign-in."] }), _jsx("code", { style: codeStyle, children: mcpJson })] }), _jsxs("section", { style: sectionStyle, children: [_jsx("h2", { style: h2Style, children: "Verify" }), _jsx("blockquote", { style: calloutStyle, children: "Read the cms-edit guide and tasks-index, then verify the connection." })] })] }));
35
36
  }
36
37
  //# sourceMappingURL=HomePage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"HomePage.js","sourceRoot":"","sources":["../../../../src/hosted/next/pages/HomePage.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HomePage.js","sourceRoot":"","sources":["../../../../src/hosted/next/pages/HomePage.tsx"],"names":[],"mappings":"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"}
@@ -22,9 +22,12 @@ export interface RefreshTokenRecord {
22
22
  }
23
23
  /**
24
24
  * Contentful CMA token cache key — space-scoped for shared Redis across hosts.
25
- * Hard cutover: unscoped keys are not read.
26
25
  */
27
26
  export declare function contentfulTokenKey(sub: string, spaceId: string): string;
27
+ /**
28
+ * Pre-3.4.5 key (not space-scoped). Read as fallback; migrate to space-scoped on hit.
29
+ */
30
+ export declare function legacyContentfulTokenKey(sub: string): string;
28
31
  /**
29
32
  * Host space for OAuth token isolation.
30
33
  * Prefer explicit spaceId (deployment); fall back to CONTENTFUL_SPACE_ID.
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/hosted/oauth/store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAOlE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEvE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKzE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,MAAM,WAAW,UAAU;IACzB,mBAAmB,CAAC,KAAK,EAAE;QACzB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACrC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAAC;IAC1E,sBAAsB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxF,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IACjF,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC9D,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClF,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC1E,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3E,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IACnE,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,UAAU,CAgG/D"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/hosted/oauth/store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAOlE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEvE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKzE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,MAAM,WAAW,UAAU;IACzB,mBAAmB,CAAC,KAAK,EAAE;QACzB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACrC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAAC;IAC1E,sBAAsB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxF,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IACjF,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC9D,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClF,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC1E,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3E,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IACnE,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,UAAU,CA2G/D"}
@@ -5,11 +5,16 @@ const CONTENTFUL_TOKEN_TTL_SECONDS = 7 * 24 * 60 * 60;
5
5
  const REFRESH_TOKEN_TTL_SECONDS = 30 * 24 * 60 * 60;
6
6
  /**
7
7
  * Contentful CMA token cache key — space-scoped for shared Redis across hosts.
8
- * Hard cutover: unscoped keys are not read.
9
8
  */
10
9
  export function contentfulTokenKey(sub, spaceId) {
11
10
  return `cms-edit:oauth:user:${sub}:${spaceId}:contentful_token`;
12
11
  }
12
+ /**
13
+ * Pre-3.4.5 key (not space-scoped). Read as fallback; migrate to space-scoped on hit.
14
+ */
15
+ export function legacyContentfulTokenKey(sub) {
16
+ return `cms-edit:oauth:user:${sub}:contentful_token`;
17
+ }
13
18
  /**
14
19
  * Host space for OAuth token isolation.
15
20
  * Prefer explicit spaceId (deployment); fall back to CONTENTFUL_SPACE_ID.
@@ -93,7 +98,17 @@ export function createOAuthStore(redis) {
93
98
  }
94
99
  const key = contentfulTokenKey(sub, resolved);
95
100
  const token = await redis.get(key);
96
- return typeof token === 'string' ? token : null;
101
+ if (typeof token === 'string' && token.length > 0) {
102
+ return token;
103
+ }
104
+ // Soft cutover: pre-3.4.5 unscoped tokens (same Redis / shared cmsedit-sessions).
105
+ // Migrate into the space-scoped key so subsequent hosts stay isolated.
106
+ const legacy = await redis.get(legacyContentfulTokenKey(sub));
107
+ if (typeof legacy === 'string' && legacy.length > 0) {
108
+ await redis.set(key, legacy, { ex: CONTENTFUL_TOKEN_TTL_SECONDS });
109
+ return legacy;
110
+ }
111
+ return null;
97
112
  },
98
113
  async saveRefreshToken(token, record) {
99
114
  await redis.set(refreshTokenKey(token), JSON.stringify(record), {
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/hosted/oauth/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/hosted/oauth/store.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@se-studio/contentful-cms",
3
- "version": "3.4.5",
3
+ "version": "3.4.7",
4
4
  "description": "CLI tool for AI agents to read and edit Contentful draft content without publish permissions",
5
5
  "repository": {
6
6
  "type": "git",