@caretcms/core 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/README.md +81 -3
  2. package/dist/index.d.ts +13 -2
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +37 -9
  5. package/dist/index.js.map +1 -1
  6. package/dist/loader.d.ts.map +1 -1
  7. package/dist/loader.js +27 -3
  8. package/dist/loader.js.map +1 -1
  9. package/dist/markdown/satteri.d.ts.map +1 -1
  10. package/dist/markdown/satteri.js +32 -8
  11. package/dist/markdown/satteri.js.map +1 -1
  12. package/dist/runtime/auth/session.d.ts +1 -0
  13. package/dist/runtime/auth/session.d.ts.map +1 -1
  14. package/dist/runtime/auth/session.js +16 -0
  15. package/dist/runtime/auth/session.js.map +1 -1
  16. package/dist/runtime/config.d.ts +3 -0
  17. package/dist/runtime/config.d.ts.map +1 -1
  18. package/dist/runtime/config.js +4 -1
  19. package/dist/runtime/config.js.map +1 -1
  20. package/dist/runtime/i18n.d.ts +86 -0
  21. package/dist/runtime/i18n.d.ts.map +1 -0
  22. package/dist/runtime/i18n.js +168 -0
  23. package/dist/runtime/i18n.js.map +1 -0
  24. package/dist/runtime/middleware.d.ts.map +1 -1
  25. package/dist/runtime/middleware.js +40 -2
  26. package/dist/runtime/middleware.js.map +1 -1
  27. package/dist/runtime/mutations/contracts.d.ts +3 -0
  28. package/dist/runtime/mutations/contracts.d.ts.map +1 -1
  29. package/dist/runtime/mutations/contracts.js +9 -0
  30. package/dist/runtime/mutations/contracts.js.map +1 -1
  31. package/dist/runtime/mutations/engine.d.ts.map +1 -1
  32. package/dist/runtime/mutations/engine.js +121 -10
  33. package/dist/runtime/mutations/engine.js.map +1 -1
  34. package/dist/runtime/providers.d.ts +2 -1
  35. package/dist/runtime/providers.d.ts.map +1 -1
  36. package/dist/runtime/providers.js +7 -1
  37. package/dist/runtime/providers.js.map +1 -1
  38. package/dist/runtime/publish.d.ts.map +1 -1
  39. package/dist/runtime/publish.js +5 -0
  40. package/dist/runtime/publish.js.map +1 -1
  41. package/dist/runtime/request-context.d.ts +5 -1
  42. package/dist/runtime/request-context.d.ts.map +1 -1
  43. package/dist/runtime/request-context.js +7 -1
  44. package/dist/runtime/request-context.js.map +1 -1
  45. package/dist/runtime/routes/admin-entry.d.ts.map +1 -1
  46. package/dist/runtime/routes/admin-entry.js +114 -18
  47. package/dist/runtime/routes/admin-entry.js.map +1 -1
  48. package/dist/runtime/routes/admin.d.ts.map +1 -1
  49. package/dist/runtime/routes/admin.js +28 -14
  50. package/dist/runtime/routes/admin.js.map +1 -1
  51. package/dist/runtime/routes/auth-login.d.ts.map +1 -1
  52. package/dist/runtime/routes/auth-login.js +4 -0
  53. package/dist/runtime/routes/auth-login.js.map +1 -1
  54. package/dist/runtime/routes/auth-logout.d.ts.map +1 -1
  55. package/dist/runtime/routes/auth-logout.js +7 -2
  56. package/dist/runtime/routes/auth-logout.js.map +1 -1
  57. package/dist/runtime/routes/auth-session.d.ts.map +1 -1
  58. package/dist/runtime/routes/auth-session.js +4 -2
  59. package/dist/runtime/routes/auth-session.js.map +1 -1
  60. package/dist/runtime/routes/collection-list.d.ts.map +1 -1
  61. package/dist/runtime/routes/collection-list.js +64 -41
  62. package/dist/runtime/routes/collection-list.js.map +1 -1
  63. package/dist/runtime/routes/entries.d.ts.map +1 -1
  64. package/dist/runtime/routes/entries.js +15 -6
  65. package/dist/runtime/routes/entries.js.map +1 -1
  66. package/dist/runtime/routes/history.d.ts.map +1 -1
  67. package/dist/runtime/routes/history.js +4 -1
  68. package/dist/runtime/routes/history.js.map +1 -1
  69. package/dist/runtime/routes/schema.d.ts.map +1 -1
  70. package/dist/runtime/routes/schema.js +7 -2
  71. package/dist/runtime/routes/schema.js.map +1 -1
  72. package/dist/runtime/routes/studio-home.d.ts.map +1 -1
  73. package/dist/runtime/routes/studio-home.js +38 -19
  74. package/dist/runtime/routes/studio-home.js.map +1 -1
  75. package/dist/runtime/schema-registry.d.ts +8 -1
  76. package/dist/runtime/schema-registry.d.ts.map +1 -1
  77. package/dist/runtime/schema-registry.js +47 -3
  78. package/dist/runtime/schema-registry.js.map +1 -1
  79. package/dist/runtime/themes/preset-tokens.js +4 -4
  80. package/dist/runtime/themes/preset-tokens.js.map +1 -1
  81. package/dist/runtime/views/studio-layout.d.ts +3 -0
  82. package/dist/runtime/views/studio-layout.d.ts.map +1 -1
  83. package/dist/runtime/views/studio-layout.js +36 -13
  84. package/dist/runtime/views/studio-layout.js.map +1 -1
  85. package/dist/schema-utils.d.ts +7 -0
  86. package/dist/schema-utils.d.ts.map +1 -1
  87. package/dist/schema-utils.js +143 -0
  88. package/dist/schema-utils.js.map +1 -1
  89. package/dist/types.d.ts +43 -1
  90. package/dist/types.d.ts.map +1 -1
  91. package/package.json +1 -1
  92. package/static/cms/admin-entry.css +135 -13
  93. package/static/cms/admin-entry.js +506 -117
  94. package/static/cms/editor/image-edit.js +1 -0
  95. package/static/cms/editor/panel.js +19 -1
  96. package/static/cms/editor/sync.js +277 -56
  97. package/static/cms/editor/tokens-and-text.css +9 -0
  98. package/static/cms/editor.css +1 -1
  99. package/static/cms/editor.js +1 -1
  100. package/static/cms/studio-tokens.css +4 -4
  101. package/static/cms/studio.css +24 -0
@@ -2,6 +2,8 @@ export const prerender = false;
2
2
  import { isEditorAuthenticated } from "../auth/session.js";
3
3
  import { getRuntimeConfig } from "../config.js";
4
4
  import { resolveAdapter } from "./_helpers.js";
5
+ import { isKnownStudioCollection, resolveCollectionStudioConfig, } from "../schema-registry.js";
6
+ import { getRequestContext } from "../request-context.js";
5
7
  import { escapeHtml, htmlResponse, redirectResponse, renderStudioPage, } from "../views/studio-layout.js";
6
8
  function humanize(name) {
7
9
  return name.replace(/[-_]+/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
@@ -18,27 +20,49 @@ export async function GET(context) {
18
20
  return redirectResponse(`${runtime.mountPath}/cms`);
19
21
  }
20
22
  const adapter = await resolveAdapter();
21
- const known = await adapter.discoverCollections();
22
- if (!known.includes(collection)) {
23
+ if (!(await isKnownStudioCollection(adapter, collection))) {
23
24
  return redirectResponse(`${runtime.mountPath}/cms`);
24
25
  }
25
- const label = humanize(collection);
26
+ const collectionConfig = await resolveCollectionStudioConfig(adapter, collection);
27
+ if (collectionConfig.singletonId && id !== collectionConfig.singletonId) {
28
+ return redirectResponse(`${runtime.mountPath}/cms/${encodeURIComponent(collection)}/${encodeURIComponent(collectionConfig.singletonId)}`);
29
+ }
30
+ const label = collectionConfig.label || humanize(collection);
31
+ const deletable = collectionConfig.deletable !== false && !collectionConfig.singletonId;
32
+ const savingToPreview = getRequestContext()?.overlayActive === true;
33
+ const messages = runtime.messages;
26
34
  const config = {
27
35
  apiBasePath: runtime.apiBasePath,
28
36
  mountPath: runtime.mountPath,
29
37
  collection,
30
38
  id,
39
+ isNew: context.url.searchParams.get("new") === "1",
40
+ initializeIfMissing: collectionConfig.singletonId === id,
41
+ deletable,
42
+ saveTarget: savingToPreview ? "preview" : "live",
43
+ messages,
31
44
  };
32
- const extraStyles = `@import "/__caret/admin-entry.css";
45
+ const extraStyles = `@import "/__caret/admin-entry.css?v=studio-upstream-20260819";
33
46
  .editor-action-bar {
34
47
  display: flex;
35
48
  align-items: center;
36
49
  justify-content: space-between;
37
50
  gap: 1rem;
38
51
  flex-wrap: wrap;
52
+ position: sticky;
53
+ top: 0;
54
+ z-index: 8;
55
+ padding: 0.875rem 1rem;
56
+ margin: -0.875rem -1rem 1.5rem;
39
57
  margin-bottom: 1.5rem;
58
+ border: 1px solid var(--studio-border);
59
+ border-radius: var(--radius-theme-sm);
60
+ background: var(--studio-bg);
61
+ background: color-mix(in srgb, var(--studio-bg) 92%, transparent);
62
+ box-shadow: 0 10px 28px rgba(0, 0, 0, 0.16);
63
+ backdrop-filter: blur(14px);
40
64
  }
41
- .editor-action-bar h2 {
65
+ .editor-action-bar h1 {
42
66
  font-family: var(--studio-font-heading);
43
67
  font-size: 1.25rem;
44
68
  font-weight: 500;
@@ -55,6 +79,33 @@ export async function GET(context) {
55
79
  display: flex;
56
80
  align-items: center;
57
81
  gap: 0.75rem;
82
+ flex-wrap: wrap;
83
+ justify-content: flex-end;
84
+ }
85
+ #btn-save {
86
+ min-width: 7.5rem;
87
+ min-height: 2.5rem;
88
+ }
89
+ #btn-save.studio-save-dirty {
90
+ box-shadow: 0 8px 24px var(--studio-accent-soft);
91
+ }
92
+ @media (max-width: 640px) {
93
+ .editor-action-bar {
94
+ align-items: flex-start;
95
+ padding: 0.75rem;
96
+ margin-inline: -0.5rem;
97
+ }
98
+ .editor-actions {
99
+ width: 100%;
100
+ justify-content: flex-start;
101
+ gap: 0.5rem;
102
+ }
103
+ #status-msg {
104
+ width: 100%;
105
+ }
106
+ #btn-save {
107
+ margin-left: auto;
108
+ }
58
109
  }
59
110
  .modal-backdrop {
60
111
  position: fixed;
@@ -100,6 +151,39 @@ export async function GET(context) {
100
151
  border-bottom: 1px solid var(--studio-border);
101
152
  }
102
153
  .history-panel-body { padding: 1rem; }
154
+ .editor-guide {
155
+ display: grid;
156
+ grid-template-columns: auto minmax(0, 1fr);
157
+ gap: 0.75rem;
158
+ margin-bottom: 1.5rem;
159
+ padding: 1rem;
160
+ border: 1px solid var(--studio-border);
161
+ border-radius: var(--radius-theme-sm);
162
+ background: var(--studio-accent-soft);
163
+ }
164
+ .editor-guide-icon {
165
+ display: grid;
166
+ place-items: center;
167
+ width: 1.75rem;
168
+ height: 1.75rem;
169
+ border-radius: 50%;
170
+ background: var(--studio-accent);
171
+ color: var(--studio-bg);
172
+ font-size: 0.75rem;
173
+ font-weight: 700;
174
+ }
175
+ .editor-guide strong {
176
+ display: block;
177
+ margin-bottom: 0.25rem;
178
+ color: var(--studio-text);
179
+ font-size: 0.8rem;
180
+ }
181
+ .editor-guide p {
182
+ margin: 0;
183
+ color: var(--studio-text-muted);
184
+ font-size: 0.72rem;
185
+ line-height: 1.6;
186
+ }
103
187
  `;
104
188
  const body = `<div class="studio-fade-in" style="max-width:48rem;margin:0 auto;" id="cms-entry-page" data-collection="${escapeHtml(collection)}" data-id="${escapeHtml(id)}">
105
189
  <div id="loading" style="display:flex;justify-content:center;padding:5rem 0;">
@@ -107,28 +191,40 @@ export async function GET(context) {
107
191
  </div>
108
192
 
109
193
  <div id="not-found" hidden style="text-align:center;padding:5rem 0;color:var(--studio-text-dim);">
110
- <p>Entry not found.</p>
111
- <a href="${escapeHtml(`${runtime.mountPath}/cms/${collection}`)}" style="margin-top:1rem;display:inline-block;font-size:0.75rem;color:var(--studio-accent);text-decoration:underline;">Go back</a>
194
+ <p>${escapeHtml(messages["entry.notFound"])}</p>
195
+ <a href="${escapeHtml(`${runtime.mountPath}/cms/${collection}`)}" style="margin-top:1rem;display:inline-block;font-size:0.75rem;color:var(--studio-accent);text-decoration:underline;">${escapeHtml(messages["entry.goBack"])}</a>
112
196
  </div>
113
197
 
114
198
  <div id="editor" hidden>
115
199
  <div class="editor-action-bar">
116
200
  <div>
117
- <h2 id="entry-title">…</h2>
201
+ <h1 id="entry-title">…</h1>
118
202
  <p class="meta">${escapeHtml(collection)} / ${escapeHtml(id)}</p>
119
203
  </div>
120
204
  <div class="editor-actions">
205
+ <span id="save-target" style="font-size:0.68rem;color:var(--studio-text-dim);">${escapeHtml(savingToPreview ? messages["entry.savingPreview"] : messages["entry.savingLive"])}</span>
121
206
  <span id="status-msg" hidden style="font-size:0.75rem;"></span>
122
- <button id="btn-history" type="button" class="studio-btn-ghost">History</button>
123
- <button id="btn-delete" type="button" class="studio-btn-danger">Delete</button>
124
- <button id="btn-save" type="button" class="studio-save-clean" disabled style="padding:8px 18px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:0.1em;border:none;border-radius:var(--radius-theme-xs);font-family:var(--studio-font);">Save</button>
207
+ <a id="btn-preview" class="studio-btn-ghost" href="${escapeHtml(runtime.editorHome)}" target="_blank" rel="noopener">${escapeHtml(messages["entry.preview"])}</a>
208
+ <button id="btn-history" type="button" class="studio-btn-ghost">${escapeHtml(messages["entry.history"])}</button>
209
+ ${deletable ? `<button id="btn-delete" type="button" class="studio-btn-danger">${escapeHtml(messages["entry.delete"])}</button>` : ""}
210
+ <button id="btn-save" type="button" class="studio-save-clean" disabled style="padding:8px 18px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:0.1em;border:none;border-radius:var(--radius-theme-xs);font-family:var(--studio-font);">${escapeHtml(savingToPreview ? messages["entry.saveDraft"] : messages["entry.saveLive"])}</button>
125
211
  </div>
126
212
  </div>
127
213
 
214
+ <div class="editor-guide" id="editor-guide">
215
+ <span class="editor-guide-icon">i</span>
216
+ <div>
217
+ <strong id="editor-guide-title">${escapeHtml(messages["entry.guideTitle"])}</strong>
218
+ <p id="editor-guide-copy">${escapeHtml(messages["entry.guideCopy"])}</p>
219
+ </div>
220
+ </div>
221
+
222
+ <div id="validation-warning" role="alert" hidden style="margin-bottom:1.5rem;padding:1rem;border:1px solid var(--studio-red);background:rgba(239,68,68,0.08);color:var(--studio-text);font-size:0.75rem;"></div>
223
+
128
224
  <div id="history-panel" class="history-panel" hidden>
129
225
  <div class="history-panel-header">
130
- <span class="studio-label" style="margin:0;">Version History</span>
131
- <button id="btn-history-close" type="button" class="studio-btn-ghost">Close</button>
226
+ <span class="studio-label" style="margin:0;">${escapeHtml(messages["entry.versionHistory"])}</span>
227
+ <button id="btn-history-close" type="button" class="studio-btn-ghost">${escapeHtml(messages["common.close"])}</button>
132
228
  </div>
133
229
  <div id="history-list" class="history-panel-body">
134
230
  <p style="font-size:0.75rem;color:var(--studio-text-dim);margin:0;">Loading…</p>
@@ -146,17 +242,17 @@ export async function GET(context) {
146
242
  <path stroke-linecap="round" stroke-linejoin="round" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"/>
147
243
  </svg>
148
244
  </div>
149
- <h3>Delete Entry</h3>
150
- <p>Permanently delete <strong id="delete-entry-name" style="color:var(--studio-text);"></strong>? A snapshot will be saved to history for recovery.</p>
245
+ <h3>${escapeHtml(messages["entry.deleteTitle"])}</h3>
246
+ <p>${escapeHtml(messages["entry.deleteCopy"])} <strong id="delete-entry-name" style="color:var(--studio-text);"></strong></p>
151
247
  <div style="display:flex;justify-content:center;gap:0.75rem;">
152
- <button id="btn-delete-cancel" type="button" class="studio-btn-ghost">Cancel</button>
153
- <button id="btn-delete-confirm" type="button" class="studio-btn-danger" style="background:var(--studio-red);color:white;">Delete</button>
248
+ <button id="btn-delete-cancel" type="button" class="studio-btn-ghost">${escapeHtml(messages["common.cancel"])}</button>
249
+ <button id="btn-delete-confirm" type="button" class="studio-btn-danger" style="background:var(--studio-red);color:white;">${escapeHtml(messages["entry.delete"])}</button>
154
250
  </div>
155
251
  </div>
156
252
  </div>
157
253
 
158
254
  <script type="application/json" id="caret-entry-config">${JSON.stringify(config).replace(/</g, "\\u003c")}</script>
159
- <script src="/__caret/admin-entry.js" defer></script>`;
255
+ <script src="/__caret/admin-entry.js?v=studio-upstream-20260819" defer></script>`;
160
256
  return htmlResponse(renderStudioPage({
161
257
  runtime,
162
258
  title: `Edit ${id}`,
@@ -1 +1 @@
1
- {"version":3,"file":"admin-entry.js","sourceRoot":"","sources":["../../../src/runtime/routes/admin-entry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"admin-entry.js","sourceRoot":"","sources":["../../../src/runtime/routes/admin-entry.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../../src/runtime/routes/admin.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,QAAQ,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AA4PxC,wBAAsB,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAoChE"}
1
+ {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../../src/runtime/routes/admin.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,QAAQ,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAqQxC,wBAAsB,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CA+ChE"}
@@ -2,6 +2,7 @@ export const prerender = false;
2
2
  import { hasConfiguredEditorPassword, isDevEditorPasswordActive, isEditorAuthenticated, } from "../auth/session.js";
3
3
  import { sanitizeRedirect } from "../auth/cookie-utils.js";
4
4
  import { getRuntimeConfig } from "../config.js";
5
+ import { getRuntimeServices } from "../providers.js";
5
6
  function escapeHtml(value) {
6
7
  return value
7
8
  .replace(/&/g, "&amp;")
@@ -10,6 +11,9 @@ function escapeHtml(value) {
10
11
  .replace(/"/g, "&quot;")
11
12
  .replace(/'/g, "&#39;");
12
13
  }
14
+ function serializeJsonForScript(value) {
15
+ return JSON.stringify(value).replace(/</g, "\\u003c");
16
+ }
13
17
  function renderBrandMark(logoUrl) {
14
18
  if (logoUrl) {
15
19
  return `<img src="${escapeHtml(logoUrl)}" alt="" class="studio-login-mark" style="object-fit: contain;" />`;
@@ -21,15 +25,15 @@ function renderBrandMark(logoUrl) {
21
25
  </div>`;
22
26
  }
23
27
  function renderLogin(opts) {
24
- const { hasPassword, devActive, apiBasePath, redirectTo, editorHome, brandName, brandLogo, faviconUrl, themeCssHref, studioCssHref, loginCssHref, showError, } = opts;
28
+ const { hasPassword, devActive, apiBasePath, redirectTo, editorHome, brandName, brandLogo, faviconUrl, themeCssHref, studioCssHref, loginCssHref, showError, locale, messages, } = opts;
25
29
  const safeBrand = escapeHtml(brandName);
26
30
  const safeRedirect = escapeHtml(redirectTo);
27
31
  const safeEditorHome = escapeHtml(editorHome);
28
32
  const statusNote = !hasPassword
29
- ? "Caret needs an editor password before you can sign in."
33
+ ? messages["login.noPassword"]
30
34
  : devActive
31
- ? "Temporary dev password active — check your terminal to sign in."
32
- : "Sign in to manage content.";
35
+ ? messages["login.devPassword"]
36
+ : messages["login.status"];
33
37
  // When no password is configured the form is disabled, so give the developer
34
38
  // an actionable setup guide instead of a dead end. When a dev fallback is
35
39
  // active the form works — just nudge them toward a permanent password.
@@ -63,11 +67,11 @@ function renderLogin(opts) {
63
67
  ? `<link rel="icon" href="${escapeHtml(faviconUrl)}" />`
64
68
  : "";
65
69
  return `<!doctype html>
66
- <html lang="en">
70
+ <html lang="${escapeHtml(locale)}">
67
71
  <head>
68
72
  <meta charset="utf-8" />
69
73
  <meta name="viewport" content="width=device-width,initial-scale=1" />
70
- <title>${safeBrand} — Sign in</title>
74
+ <title>${safeBrand} — ${escapeHtml(messages["login.title"])}</title>
71
75
  ${favicon}
72
76
  <link rel="stylesheet" href="${themeCssHref}" />
73
77
  <link rel="stylesheet" href="${studioCssHref}" />
@@ -78,7 +82,7 @@ function renderLogin(opts) {
78
82
  <div class="studio-login-grid"></div>
79
83
  <div class="studio-login-accent-top"></div>
80
84
 
81
- <div class="studio-login-card">
85
+ <main class="studio-login-card">
82
86
  <div class="studio-login-card-glow"></div>
83
87
 
84
88
  <div class="studio-login-card-body">
@@ -101,14 +105,14 @@ function renderLogin(opts) {
101
105
  <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" aria-hidden="true">
102
106
  <path stroke-linecap="round" stroke-linejoin="round" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"/>
103
107
  </svg>
104
- <span id="login-error-text">Invalid password.</span>
108
+ <span id="login-error-text">${escapeHtml(messages["login.invalid"])}</span>
105
109
  </div>
106
110
 
107
111
  <form id="login-form" class="studio-login-form" method="POST" action="${escapeHtml(`${apiBasePath}/auth/login`)}">
108
112
  <input type="hidden" name="redirect" value="${safeRedirect}" />
109
113
 
110
114
  <div class="studio-login-field">
111
- <label for="password">Password</label>
115
+ <label for="password">${escapeHtml(messages["login.password"])}</label>
112
116
  <div class="studio-login-input-wrap">
113
117
  <input
114
118
  type="password"
@@ -117,7 +121,7 @@ function renderLogin(opts) {
117
121
  required
118
122
  autocomplete="current-password"
119
123
  class="studio-login-input"
120
- placeholder="Enter editor password"
124
+ placeholder="${escapeHtml(messages["login.placeholder"])}"
121
125
  ${hasPassword ? "" : "disabled"}
122
126
  />
123
127
  <svg class="studio-login-input-icon" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5" aria-hidden="true">
@@ -128,7 +132,7 @@ function renderLogin(opts) {
128
132
 
129
133
  <button type="submit" class="studio-login-submit" ${hasPassword ? "" : "disabled"}>
130
134
  <span class="studio-login-submit-content">
131
- <span>Sign in</span>
135
+ <span>${escapeHtml(messages["login.submit"])}</span>
132
136
  <svg class="studio-login-submit-arrow" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" aria-hidden="true">
133
137
  <path stroke-linecap="round" stroke-linejoin="round" d="M14 5l7 7m0 0l-7 7m7-7H3"/>
134
138
  </svg>
@@ -138,10 +142,10 @@ function renderLogin(opts) {
138
142
  ${helperBlock}
139
143
 
140
144
  <div class="studio-login-footer">
141
- <a href="${safeEditorHome}">&larr; Back to site</a>
145
+ <a href="${safeEditorHome}">${escapeHtml(messages["login.back"])}</a>
142
146
  </div>
143
147
  </div>
144
- </div>
148
+ </main>
145
149
 
146
150
  <script>
147
151
  (function () {
@@ -179,7 +183,7 @@ function renderLogin(opts) {
179
183
  credentials: 'same-origin'
180
184
  })
181
185
  .then(function (res) {
182
- return res.json().catch(function () { return { error: 'Login failed' }; })
186
+ return res.json().catch(function () { return { error: ${serializeJsonForScript(messages["login.failed"])} }; })
183
187
  .then(function (data) { return { ok: res.ok, data: data }; });
184
188
  })
185
189
  .then(function (result) {
@@ -224,6 +228,14 @@ export async function GET(context) {
224
228
  headers: { Location: redirectTarget },
225
229
  });
226
230
  }
231
+ const identityAdapter = (await getRuntimeServices()).identityAdapter;
232
+ if (identityAdapter) {
233
+ const location = await identityAdapter.loginUrl({
234
+ request: context.request,
235
+ redirectTo: redirectTarget,
236
+ });
237
+ return new Response(null, { status: 302, headers: { Location: location } });
238
+ }
227
239
  return html(renderLogin({
228
240
  hasPassword: hasConfiguredEditorPassword(),
229
241
  devActive: isDevEditorPasswordActive(),
@@ -240,6 +252,8 @@ export async function GET(context) {
240
252
  // form login redirects here with ?error=invalid, and without this the JS
241
253
  // handler is the only thing that would ever reveal the banner.
242
254
  showError: context.url.searchParams.get("error") === "invalid",
255
+ locale: runtime.locale,
256
+ messages: runtime.messages,
243
257
  }));
244
258
  }
245
259
  //# sourceMappingURL=admin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"admin.js","sourceRoot":"","sources":["../../../src/runtime/routes/admin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"admin.js","sourceRoot":"","sources":["../../../src/runtime/routes/admin.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth-login.d.ts","sourceRoot":"","sources":["../../../src/runtime/routes/auth-login.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,QAAQ,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAkCxC,wBAAsB,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAyEjE;AAED,wBAAsB,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAQ7C"}
1
+ {"version":3,"file":"auth-login.d.ts","sourceRoot":"","sources":["../../../src/runtime/routes/auth-login.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,QAAQ,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAmCxC,wBAAsB,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CA6EjE;AAED,wBAAsB,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAQ7C"}
@@ -4,6 +4,7 @@ import { sanitizeRedirect } from "../auth/cookie-utils.js";
4
4
  import { checkLoginRateLimit, clearLoginAttempts, extractRateLimitKey, recordLoginFailure, } from "../auth/rate-limiter.js";
5
5
  import { getRuntimeConfig } from "../config.js";
6
6
  import { enforceContentLength, MAX_JSON_BODY_BYTES } from "./_helpers.js";
7
+ import { getRuntimeServices } from "../providers.js";
7
8
  function redirect(pathname, setCookie) {
8
9
  const headers = { Location: pathname };
9
10
  if (setCookie)
@@ -19,6 +20,9 @@ function json(body, status = 200, extraHeaders) {
19
20
  }
20
21
  export async function POST(context) {
21
22
  const runtime = getRuntimeConfig();
23
+ if ((await getRuntimeServices()).identityAdapter) {
24
+ return json({ error: "Password login is disabled by the configured identity adapter." }, 409);
25
+ }
22
26
  if (!hasConfiguredEditorPassword()) {
23
27
  return json({ error: "Editor password is not configured." }, 500);
24
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"auth-login.js","sourceRoot":"","sources":["../../../src/runtime/routes/auth-login.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC;AAG/B,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAE1E,SAAS,QAAQ,CAAC,QAAgB,EAAE,SAAkB;IACpD,MAAM,OAAO,GAA2B,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IAC/D,IAAI,SAAS;QAAE,OAAO,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC;IACjD,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,IAAI,CACX,IAA6B,EAC7B,MAAM,GAAG,GAAG,EACZ,YAAqC;IAErC,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,iCAAiC;QACjD,GAAG,YAAY;KAChB,CAAC;IACF,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAAmB;IAC5C,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IAEnC,IAAI,CAAC,2BAA2B,EAAE,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,oCAAoC,EAAE,EAAE,GAAG,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;IAC5E,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,MAAM,YAAY,GAAG,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;IACpD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACvB,OAAO,IAAI,CACT,EAAE,KAAK,EAAE,qDAAqD,EAAE,EAChE,GAAG,EACH,EAAE,aAAa,EAAE,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE,CACvD,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IACtE,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC3D,MAAM,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC5D,MAAM,iBAAiB,GAAG,UAAU,IAAI,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAE5E,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,UAAU,GAAkB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAEzE,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAEpD,CAAC;QACT,QAAQ,GAAG,OAAO,IAAI,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,UAAU;YACR,OAAO,IAAI,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;IACpE,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACpE,QAAQ;YACN,OAAO,QAAQ,EAAE,GAAG,CAAC,UAAU,CAAC,KAAK,QAAQ;gBAC3C,CAAC,CAAE,QAAQ,EAAE,GAAG,CAAC,UAAU,CAAY;gBACvC,CAAC,CAAC,EAAE,CAAC;QACT,UAAU;YACR,OAAO,QAAQ,EAAE,GAAG,CAAC,UAAU,CAAC,KAAK,QAAQ;gBAC3C,CAAC,CAAE,QAAQ,EAAE,GAAG,CAAC,UAAU,CAAY;gBACvC,CAAC,CAAC,UAAU,CAAC;IACnB,CAAC;IAED,+EAA+E;IAC/E,mEAAmE;IACnE,MAAM,YAAY,GAAG,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAEtE,sEAAsE;IACtE,yEAAyE;IACzE,qEAAqE;IACrE,IAAI,aAAsB,CAAC;IAC3B,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,aAAa,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,kBAAkB,CAAC,YAAY,CAAC,CAAC;YACjC,IAAI,iBAAiB;gBAAE,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAE,GAAG,CAAC,CAAC;YACvE,OAAO,QAAQ,CAAC,GAAG,OAAO,CAAC,SAAS,gBAAgB,CAAC,CAAC;QACxD,CAAC;QACD,kBAAkB,CAAC,YAAY,CAAC,CAAC;QACjC,MAAM,GAAG,wBAAwB,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,IAAI,CAAC,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,iBAAiB,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,GAAG;IACvB,OAAO,IAAI,CACT;QACE,KAAK,EAAE,oBAAoB;QAC3B,cAAc,EAAE,CAAC,MAAM,CAAC;KACzB,EACD,GAAG,CACJ,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"auth-login.js","sourceRoot":"","sources":["../../../src/runtime/routes/auth-login.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth-logout.d.ts","sourceRoot":"","sources":["../../../src/runtime/routes/auth-logout.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,QAAQ,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAwBxC,wBAAsB,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CA4BjE;AAED,wBAAsB,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAQ7C"}
1
+ {"version":3,"file":"auth-logout.d.ts","sourceRoot":"","sources":["../../../src/runtime/routes/auth-logout.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,QAAQ,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAyBxC,wBAAsB,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAgCjE;AAED,wBAAsB,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAQ7C"}
@@ -3,6 +3,7 @@ import { clearEditorSessionCookie } from "../auth/session.js";
3
3
  import { sanitizeRedirect } from "../auth/cookie-utils.js";
4
4
  import { getRuntimeConfig } from "../config.js";
5
5
  import { enforceContentLength, MAX_JSON_BODY_BYTES } from "./_helpers.js";
6
+ import { getRuntimeServices } from "../providers.js";
6
7
  function redirect(pathname, setCookie) {
7
8
  const headers = { Location: pathname };
8
9
  if (setCookie)
@@ -39,9 +40,13 @@ export async function POST(context) {
39
40
  : redirectTo;
40
41
  }
41
42
  const safeRedirect = sanitizeRedirect(redirectTo, runtime.mountPath);
43
+ const identityAdapter = (await getRuntimeServices()).identityAdapter;
44
+ const finalRedirect = identityAdapter?.logoutUrl
45
+ ? await identityAdapter.logoutUrl({ request: context.request, redirectTo: safeRedirect })
46
+ : safeRedirect;
42
47
  if (isJson)
43
- return json({ ok: true, redirect: safeRedirect }, 200, cookie);
44
- return redirect(safeRedirect, cookie);
48
+ return json({ ok: true, redirect: finalRedirect }, 200, cookie);
49
+ return redirect(finalRedirect, cookie);
45
50
  }
46
51
  export async function GET() {
47
52
  return json({
@@ -1 +1 @@
1
- {"version":3,"file":"auth-logout.js","sourceRoot":"","sources":["../../../src/runtime/routes/auth-logout.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth-logout.js","sourceRoot":"","sources":["../../../src/runtime/routes/auth-logout.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth-session.d.ts","sourceRoot":"","sources":["../../../src/runtime/routes/auth-session.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,QAAQ,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAIxC,wBAAsB,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAIhE"}
1
+ {"version":3,"file":"auth-session.d.ts","sourceRoot":"","sources":["../../../src/runtime/routes/auth-session.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,QAAQ,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAIxC,wBAAsB,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAMhE"}
@@ -1,9 +1,11 @@
1
1
  export const prerender = false;
2
- import { isEditorAuthenticated } from "../auth/session.js";
2
+ import { getEditorIdentity, isEditorAuthenticated } from "../auth/session.js";
3
3
  import { json } from "./_helpers.js";
4
4
  export async function GET(context) {
5
+ const authenticated = isEditorAuthenticated(context);
5
6
  return json({
6
- authenticated: isEditorAuthenticated(context),
7
+ authenticated,
8
+ identity: authenticated ? getEditorIdentity(context) : null,
7
9
  });
8
10
  }
9
11
  //# sourceMappingURL=auth-session.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth-session.js","sourceRoot":"","sources":["../../../src/runtime/routes/auth-session.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC;AAG/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAmB;IAC3C,OAAO,IAAI,CAAC;QACV,aAAa,EAAE,qBAAqB,CAAC,OAAO,CAAC;KAC9C,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"auth-session.js","sourceRoot":"","sources":["../../../src/runtime/routes/auth-session.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC;AAG/B,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAmB;IAC3C,MAAM,aAAa,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC;QACV,aAAa;QACb,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI;KAC5D,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"collection-list.d.ts","sourceRoot":"","sources":["../../../src/runtime/routes/collection-list.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,QAAQ,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAexC,wBAAsB,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAqahE"}
1
+ {"version":3,"file":"collection-list.d.ts","sourceRoot":"","sources":["../../../src/runtime/routes/collection-list.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,QAAQ,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAoBxC,wBAAsB,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CA6bhE"}