@arcblock/did-connect-service 4.1.11 → 4.1.13

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 (121) hide show
  1. package/dist/_generated/asset-bytes.js +1 -1
  2. package/dist/_generated/asset-manifest.js +3 -3
  3. package/dist/_generated/login-bundle-string.d.ts +1 -1
  4. package/dist/_generated/login-bundle-string.d.ts.map +1 -1
  5. package/dist/_generated/login-bundle-string.js +1 -1
  6. package/dist/_generated/login-bundle-string.js.map +1 -1
  7. package/dist/access/change-role.d.ts +48 -0
  8. package/dist/access/change-role.d.ts.map +1 -0
  9. package/dist/access/change-role.js +52 -0
  10. package/dist/access/change-role.js.map +1 -0
  11. package/dist/assets/admin-core.a63bbc69.js +1464 -0
  12. package/dist/assets/admin-extra.143b5774.js +2543 -0
  13. package/dist/assets/admin-extra.5b309e5e.js +2547 -0
  14. package/dist/assets/login.4404e695.js +720 -0
  15. package/dist/assets/login.76c483c2.js +720 -0
  16. package/dist/assets/login.bb9f8b03.js +720 -0
  17. package/dist/assets/login.fa25f37a.js +720 -0
  18. package/dist/handler-errors.d.ts +118 -0
  19. package/dist/handler-errors.d.ts.map +1 -0
  20. package/dist/handler-errors.js +38 -0
  21. package/dist/handler-errors.js.map +1 -0
  22. package/dist/handlers/access-key-connect-handler.d.ts.map +1 -1
  23. package/dist/handlers/access-key-connect-handler.js +2 -1
  24. package/dist/handlers/access-key-connect-handler.js.map +1 -1
  25. package/dist/handlers/admin-instance-handler.d.ts.map +1 -1
  26. package/dist/handlers/admin-instance-handler.js +2 -1
  27. package/dist/handlers/admin-instance-handler.js.map +1 -1
  28. package/dist/handlers/auth-handler.d.ts.map +1 -1
  29. package/dist/handlers/auth-handler.js +32 -9
  30. package/dist/handlers/auth-handler.js.map +1 -1
  31. package/dist/handlers/branding-handler.d.ts.map +1 -1
  32. package/dist/handlers/branding-handler.js +12 -9
  33. package/dist/handlers/branding-handler.js.map +1 -1
  34. package/dist/handlers/did-connect-handler.d.ts.map +1 -1
  35. package/dist/handlers/did-connect-handler.js +6 -5
  36. package/dist/handlers/did-connect-handler.js.map +1 -1
  37. package/dist/handlers/email-login-handler.d.ts +1 -1
  38. package/dist/handlers/email-login-handler.d.ts.map +1 -1
  39. package/dist/handlers/email-login-handler.js +63 -12
  40. package/dist/handlers/email-login-handler.js.map +1 -1
  41. package/dist/handlers/federation-admin-handler.d.ts.map +1 -1
  42. package/dist/handlers/federation-admin-handler.js +48 -45
  43. package/dist/handlers/federation-admin-handler.js.map +1 -1
  44. package/dist/handlers/oauth-handler.d.ts.map +1 -1
  45. package/dist/handlers/oauth-handler.js +23 -12
  46. package/dist/handlers/oauth-handler.js.map +1 -1
  47. package/dist/handlers/passkey-handler.d.ts.map +1 -1
  48. package/dist/handlers/passkey-handler.js +5 -4
  49. package/dist/handlers/passkey-handler.js.map +1 -1
  50. package/dist/handlers/team-handler.d.ts.map +1 -1
  51. package/dist/handlers/team-handler.js +19 -19
  52. package/dist/handlers/team-handler.js.map +1 -1
  53. package/dist/http/security-headers.d.ts +38 -0
  54. package/dist/http/security-headers.d.ts.map +1 -0
  55. package/dist/http/security-headers.js +67 -0
  56. package/dist/http/security-headers.js.map +1 -0
  57. package/dist/identity/refresh-tokens.d.ts +21 -0
  58. package/dist/identity/refresh-tokens.d.ts.map +1 -0
  59. package/dist/identity/refresh-tokens.js +45 -0
  60. package/dist/identity/refresh-tokens.js.map +1 -0
  61. package/dist/identity/session-context.d.ts +12 -0
  62. package/dist/identity/session-context.d.ts.map +1 -1
  63. package/dist/identity/session-context.js +12 -0
  64. package/dist/identity/session-context.js.map +1 -1
  65. package/dist/identity/session-tokens.d.ts +15 -0
  66. package/dist/identity/session-tokens.d.ts.map +1 -0
  67. package/dist/identity/session-tokens.js +15 -0
  68. package/dist/identity/session-tokens.js.map +1 -0
  69. package/dist/locale.d.ts +1 -1
  70. package/dist/locale.d.ts.map +1 -1
  71. package/dist/og/ssrf-guard.d.ts.map +1 -1
  72. package/dist/og/ssrf-guard.js +21 -3
  73. package/dist/og/ssrf-guard.js.map +1 -1
  74. package/dist/og/templates.d.ts.map +1 -1
  75. package/dist/og/templates.js +33 -4
  76. package/dist/og/templates.js.map +1 -1
  77. package/dist/pages/admin/i18n.d.ts.map +1 -1
  78. package/dist/pages/admin/i18n.js +33 -9
  79. package/dist/pages/admin/i18n.js.map +1 -1
  80. package/dist/pages/admin/scripts/api-client.d.ts +1 -1
  81. package/dist/pages/admin/scripts/api-client.d.ts.map +1 -1
  82. package/dist/pages/admin/scripts/api-client.js +4 -4
  83. package/dist/pages/admin/scripts/utils.d.ts +1 -1
  84. package/dist/pages/admin/scripts/utils.d.ts.map +1 -1
  85. package/dist/pages/admin/scripts/utils.js +7 -8
  86. package/dist/pages/admin/scripts/utils.js.map +1 -1
  87. package/dist/pages/admin/tab-access-keys.d.ts +1 -1
  88. package/dist/pages/admin/tab-access-keys.d.ts.map +1 -1
  89. package/dist/pages/admin/tab-access-keys.js +4 -4
  90. package/dist/pages/admin/tab-invitations.d.ts +1 -1
  91. package/dist/pages/admin/tab-invitations.d.ts.map +1 -1
  92. package/dist/pages/admin/tab-invitations.js +2 -2
  93. package/dist/pages/admin/tab-members.d.ts +1 -1
  94. package/dist/pages/admin/tab-members.d.ts.map +1 -1
  95. package/dist/pages/admin/tab-members.js +7 -3
  96. package/dist/pages/admin/tab-members.js.map +1 -1
  97. package/dist/pages/admin/tab-profile-accounts.js +1 -1
  98. package/dist/pages/admin-instances-page.d.ts +1 -1
  99. package/dist/pages/admin-instances-page.d.ts.map +1 -1
  100. package/dist/pages/admin-instances-page.js +195 -65
  101. package/dist/pages/admin-instances-page.js.map +1 -1
  102. package/dist/pages/gen-access-key-page.d.ts +1 -1
  103. package/dist/pages/gen-access-key-page.d.ts.map +1 -1
  104. package/dist/pages/gen-access-key-page.js +163 -35
  105. package/dist/pages/gen-access-key-page.js.map +1 -1
  106. package/dist/pages/homepage.d.ts.map +1 -1
  107. package/dist/pages/homepage.js +0 -4
  108. package/dist/pages/homepage.js.map +1 -1
  109. package/dist/pages/invite-page.d.ts +1 -1
  110. package/dist/pages/invite-page.d.ts.map +1 -1
  111. package/dist/pages/invite-page.js +91 -21
  112. package/dist/pages/invite-page.js.map +1 -1
  113. package/dist/pages/oauth-callback-page.d.ts.map +1 -1
  114. package/dist/pages/oauth-callback-page.js +7 -3
  115. package/dist/pages/oauth-callback-page.js.map +1 -1
  116. package/dist/store/d1-store.d.ts +55 -1
  117. package/dist/store/d1-store.d.ts.map +1 -1
  118. package/dist/store/d1-store.js +162 -9
  119. package/dist/store/d1-store.js.map +1 -1
  120. package/migrations/0011_refresh_tokens.sql +23 -0
  121. package/package.json +5 -5
@@ -9,6 +9,52 @@
9
9
  * Uses same LoginPage bundle and design system as login-page.ts.
10
10
  */
11
11
  import { assetUrl } from "../asset-registry.js";
12
+ /**
13
+ * Authorize-page copy, localized. `en` is the default fallback for any unknown
14
+ * locale and reproduces the page's original (pre-i18n) strings byte-for-byte.
15
+ */
16
+ const GEN_ACCESS_KEY_I18N = {
17
+ en: {
18
+ title: "Authorize Access",
19
+ defaultDesc: "An application is requesting access to your account",
20
+ requestingAccessSuffix: " is requesting access to your account",
21
+ appLabel: "App",
22
+ thisService: "This service",
23
+ accessLevel: "Access level",
24
+ cancel: "Cancel",
25
+ authorize: "Authorize",
26
+ accessGranted: "Access Granted",
27
+ autoClose: "This window will close automatically.",
28
+ securedBy: "Secured by DID Connect",
29
+ defaultAppName: "Access Key Authorization",
30
+ sessionExpiresInPrefix: "Session expires in ",
31
+ sessionExpiresInSuffix: "s",
32
+ sessionExpired: "Session expired — please start over.",
33
+ closeTabManually: "You can close this tab manually.",
34
+ authorizationFailed: "Authorization failed",
35
+ networkError: "Network error",
36
+ },
37
+ zh: {
38
+ title: "授权访问",
39
+ defaultDesc: "一个应用正在请求访问您的账户",
40
+ requestingAccessSuffix: " 正在请求访问您的账户",
41
+ appLabel: "应用",
42
+ thisService: "本服务",
43
+ accessLevel: "访问级别",
44
+ cancel: "取消",
45
+ authorize: "授权",
46
+ accessGranted: "已授权",
47
+ autoClose: "此窗口将自动关闭。",
48
+ securedBy: "由 DID Connect 保护",
49
+ defaultAppName: "访问密钥授权",
50
+ sessionExpiresInPrefix: "会话将在 ",
51
+ sessionExpiresInSuffix: " 秒后过期",
52
+ sessionExpired: "会话已过期,请重新开始。",
53
+ closeTabManually: "您可以手动关闭此标签页。",
54
+ authorizationFailed: "授权失败",
55
+ networkError: "网络错误",
56
+ },
57
+ };
12
58
  /** Escape string for safe embedding inside <script> — prevents XSS. */
13
59
  function escapeForScript(s) {
14
60
  return s.replace(/<\/(script)/gi, "<\\/$1");
@@ -26,16 +72,33 @@ const AUTH_STYLES = /* css */ `
26
72
 
27
73
  /* ── Source header ── */
28
74
  .source-header { margin-bottom: 28px; text-align: center; }
29
- .source-icon {
75
+ .source-header h1 { margin-bottom: 4px; }
76
+
77
+ /* ── A → B connector: requesting app on the left, this service on the right ── */
78
+ .connector {
79
+ display: flex; align-items: center; justify-content: center; gap: 12px;
80
+ margin-bottom: 16px;
81
+ }
82
+ .connector-node { display: flex; flex-direction: column; align-items: center; gap: 6px; min-width: 0; }
83
+ .logo-box {
30
84
  width: 56px; height: 56px; border-radius: var(--radius-lg);
31
85
  background: var(--blue-light); color: var(--blue-muted);
32
86
  display: inline-flex; align-items: center; justify-content: center;
33
- margin-bottom: 16px;
87
+ overflow: hidden; flex-shrink: 0;
34
88
  }
35
- .source-icon img {
89
+ .logo-box img {
36
90
  width: 56px; height: 56px; border-radius: var(--radius-lg); object-fit: cover;
37
91
  }
38
- .source-header h1 { margin-bottom: 4px; }
92
+ .connector-label {
93
+ font-size: 11px; color: var(--text-tertiary);
94
+ max-width: 96px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
95
+ }
96
+ .connector-track {
97
+ display: flex; align-items: center; justify-content: center;
98
+ width: 26px; height: 26px; border-radius: 50%;
99
+ background: var(--bg-elevated); color: var(--text-tertiary);
100
+ flex-shrink: 0;
101
+ }
39
102
 
40
103
  /* ── User identity card ── */
41
104
  .user-identity {
@@ -83,8 +146,9 @@ const AUTH_STYLES = /* css */ `
83
146
  text-transform: capitalize;
84
147
  }
85
148
 
86
- /* ── Actions: full-width stacked buttons ── */
87
- .auth-actions { display: flex; flex-direction: column; gap: 8px; }
149
+ /* ── Actions: equal-width side-by-side buttons (Cancel left, Authorize right) ── */
150
+ .auth-actions { display: flex; flex-direction: row; gap: 8px; }
151
+ .auth-actions .btn { flex: 1 1 0; min-width: 0; }
88
152
 
89
153
  /* ── Success view ── */
90
154
  .success-view { text-align: center; padding: 20px 0 8px; }
@@ -138,19 +202,32 @@ const AUTH_STYLES = /* css */ `
138
202
  .phase-authorize .auth-card-inner,
139
203
  .phase-success .auth-card-inner { display: block; }
140
204
  `;
141
- export function buildGenAccessKeyPageHTML(options) {
205
+ export function buildGenAccessKeyPageHTML(options, locale = "en") {
142
206
  const optionsJSON = escapeForScript(JSON.stringify({
143
207
  methods: options?.methods || ["passkey", "oauth", "email"],
144
208
  oauthProviders: options?.oauthProviders || [],
145
209
  appName: options?.appName || "",
146
210
  }));
147
211
  const apiPrefix = options?.apiPrefix || "/.well-known/service/api/did";
212
+ const lang = locale === "zh" ? "zh" : "en";
213
+ const t = GEN_ACCESS_KEY_I18N[lang];
214
+ const clientI18n = escapeForScript(JSON.stringify({
215
+ requestingAccessSuffix: t.requestingAccessSuffix,
216
+ defaultAppName: t.defaultAppName,
217
+ authorize: t.authorize,
218
+ sessionExpiresInPrefix: t.sessionExpiresInPrefix,
219
+ sessionExpiresInSuffix: t.sessionExpiresInSuffix,
220
+ sessionExpired: t.sessionExpired,
221
+ closeTabManually: t.closeTabManually,
222
+ authorizationFailed: t.authorizationFailed,
223
+ networkError: t.networkError,
224
+ }));
148
225
  return /* html */ `<!DOCTYPE html>
149
- <html lang="en">
226
+ <html lang="${lang}">
150
227
  <head>
151
228
  <meta charset="utf-8" />
152
229
  <meta name="viewport" content="width=device-width, initial-scale=1" />
153
- <title>Authorize Access</title>
230
+ <title>${t.title}</title>
154
231
  <link rel="stylesheet" href="${assetUrl("login.css")}" />
155
232
  <style>
156
233
  ${AUTH_STYLES}
@@ -162,9 +239,22 @@ export function buildGenAccessKeyPageHTML(options) {
162
239
  <!-- Source preamble: transparent header above LoginPage card during login -->
163
240
  <div class="source-preamble">
164
241
  <div class="source-header">
165
- <div class="source-icon" id="source-icon">${ICONS.key}</div>
166
- <h1 id="source-name">Authorize Access</h1>
167
- <p class="subtitle" id="source-desc">An application is requesting access to your account</p>
242
+ <!-- A → B connector: requesting app (A, fetched/untrusted logo) on the
243
+ left, this service (B, same-origin logo — always resolvable, see
244
+ branding-handler's defaultLogoResponse fallback) on the right. -->
245
+ <div class="connector">
246
+ <div class="connector-node">
247
+ <div class="logo-box" id="source-icon">${ICONS.key}</div>
248
+ <span class="connector-label" id="source-label">${t.appLabel}</span>
249
+ </div>
250
+ <div class="connector-track">${ICONS.shield}</div>
251
+ <div class="connector-node">
252
+ <div class="logo-box"><img src="/.well-known/service/blocklet/logo" alt="" /></div>
253
+ <span class="connector-label" id="target-label">${t.thisService}</span>
254
+ </div>
255
+ </div>
256
+ <h1 id="source-name">${t.title}</h1>
257
+ <p class="subtitle" id="source-desc">${t.defaultDesc}</p>
168
258
  </div>
169
259
  </div>
170
260
 
@@ -176,9 +266,19 @@ export function buildGenAccessKeyPageHTML(options) {
176
266
 
177
267
  <!-- Duplicate source header inside card (shown when preamble is hidden) -->
178
268
  <div class="source-header">
179
- <div class="source-icon" id="source-icon-inner">${ICONS.key}</div>
180
- <h1 id="source-name-inner">Authorize Access</h1>
181
- <p class="subtitle" id="source-desc-inner">An application is requesting access to your account</p>
269
+ <div class="connector">
270
+ <div class="connector-node">
271
+ <div class="logo-box" id="source-icon-inner">${ICONS.key}</div>
272
+ <span class="connector-label" id="source-label-inner">${t.appLabel}</span>
273
+ </div>
274
+ <div class="connector-track">${ICONS.shield}</div>
275
+ <div class="connector-node">
276
+ <div class="logo-box"><img src="/.well-known/service/blocklet/logo" alt="" /></div>
277
+ <span class="connector-label" id="target-label-inner">${t.thisService}</span>
278
+ </div>
279
+ </div>
280
+ <h1 id="source-name-inner">${t.title}</h1>
281
+ <p class="subtitle" id="source-desc-inner">${t.defaultDesc}</p>
182
282
  </div>
183
283
 
184
284
  <!-- Phase 2: Authorize -->
@@ -191,12 +291,12 @@ export function buildGenAccessKeyPageHTML(options) {
191
291
  </div>
192
292
  </div>
193
293
  <div class="permission-row">
194
- <span class="permission-label">Access level</span>
294
+ <span class="permission-label">${t.accessLevel}</span>
195
295
  <span class="role-badge" id="grant-role">member</span>
196
296
  </div>
197
297
  <div class="auth-actions">
198
- <button class="btn" id="auth-btn" onclick="doAuthorize()">Authorize</button>
199
- <button class="btn btn-secondary" id="cancel-btn" onclick="cancelAuth()">Cancel</button>
298
+ <button class="btn btn-secondary" id="cancel-btn" onclick="cancelAuth()">${t.cancel}</button>
299
+ <button class="btn" id="auth-btn" onclick="doAuthorize()">${t.authorize}</button>
200
300
  </div>
201
301
  <div id="timeout-bar" class="timeout-bar hidden"></div>
202
302
  <div id="status" class="status"></div>
@@ -206,15 +306,15 @@ export function buildGenAccessKeyPageHTML(options) {
206
306
  <div id="success-section" class="hidden">
207
307
  <div class="success-view">
208
308
  <div class="success-icon">${ICONS.check}</div>
209
- <div class="success-title">Access Granted</div>
210
- <p class="success-subtitle">This window will close automatically.</p>
309
+ <div class="success-title">${t.accessGranted}</div>
310
+ <p class="success-subtitle">${t.autoClose}</p>
211
311
  </div>
212
312
  </div>
213
313
 
214
314
  <div class="login-footer">
215
315
  <div class="secured-badge">
216
316
  ${ICONS.shield}
217
- <span>Secured by DID Connect</span>
317
+ <span>${t.securedBy}</span>
218
318
  </div>
219
319
  </div>
220
320
  </div>
@@ -226,6 +326,7 @@ export function buildGenAccessKeyPageHTML(options) {
226
326
  ;(function() {
227
327
  var LB = __LoginBundle;
228
328
  var pageOpts = ${optionsJSON};
329
+ var I18N = ${clientI18n};
229
330
  var params = new URLSearchParams(location.search);
230
331
  var token = params.get('__token__');
231
332
  var source = params.get('source') || '';
@@ -233,25 +334,36 @@ export function buildGenAccessKeyPageHTML(options) {
233
334
  var apiPrefix = '${escapeForScript(apiPrefix)}';
234
335
 
235
336
  // Sync both source headers (preamble + inner card)
236
- function setSource(name, desc, logoHtml) {
337
+ function setSource(name, desc, logoUrl) {
237
338
  ['', '-inner'].forEach(function(suffix) {
238
339
  if (name) {
239
340
  var el = document.getElementById('source-name' + suffix);
240
341
  if (el) el.textContent = name;
342
+ var labelEl = document.getElementById('source-label' + suffix);
343
+ if (labelEl) labelEl.textContent = name;
241
344
  }
242
345
  if (desc) {
243
346
  var el2 = document.getElementById('source-desc' + suffix);
244
347
  if (el2) el2.textContent = desc;
245
348
  }
246
- if (logoHtml) {
349
+ if (logoUrl) {
247
350
  var el3 = document.getElementById('source-icon' + suffix);
248
- if (el3) el3.innerHTML = logoHtml;
351
+ if (el3) {
352
+ // Assign via property, never innerHTML: logoUrl comes from an
353
+ // untrusted third-party appUrl response and must never be parsed
354
+ // as HTML (that would let an attacker inject live attributes/script).
355
+ var img = document.createElement('img');
356
+ img.alt = '';
357
+ img.src = logoUrl;
358
+ el3.innerHTML = '';
359
+ el3.appendChild(img);
360
+ }
249
361
  }
250
362
  });
251
363
  }
252
364
 
253
365
  if (source) {
254
- setSource(source, source + ' is requesting access to your account');
366
+ setSource(source, source + I18N.requestingAccessSuffix);
255
367
  }
256
368
 
257
369
  // Source info enhancement: fetch app details from appUrl/__blocklet__.js
@@ -260,19 +372,35 @@ export function buildGenAccessKeyPageHTML(options) {
260
372
  .then(function(r) { return r.json(); })
261
373
  .then(function(info) {
262
374
  if (info.appName) {
263
- setSource(info.appName, info.appName + ' is requesting access to your account');
375
+ setSource(info.appName, info.appName + I18N.requestingAccessSuffix);
264
376
  }
265
377
  if (info.appLogo) {
266
- setSource(null, null, '<img src="' + info.appLogo + '" alt="" />');
378
+ setSource(null, null, info.appLogo);
267
379
  }
268
380
  })
269
381
  .catch(function() { /* degrade to icon */ });
270
382
  }
271
383
 
384
+ // Target (B) info: this service's own name, for the connector label.
385
+ // Same-origin (unlike appUrl above, which is attacker-controlled), and the
386
+ // logo image itself is already server-rendered directly via a static
387
+ // same-origin <img src>, so only the display name needs fetching here.
388
+ function setTarget(name) {
389
+ if (!name) return;
390
+ ['', '-inner'].forEach(function(suffix) {
391
+ var el = document.getElementById('target-label' + suffix);
392
+ if (el) el.textContent = name;
393
+ });
394
+ }
395
+ fetch(location.origin + '/__blocklet__.js?type=json')
396
+ .then(function(r) { return r.json(); })
397
+ .then(function(info) { setTarget(info.appName); })
398
+ .catch(function() { /* keep default label */ });
399
+
272
400
  // ConnectConfig for LoginPage
273
401
  var config = {
274
402
  appPid: '',
275
- appName: pageOpts.appName || 'Access Key Authorization',
403
+ appName: pageOpts.appName || I18N.defaultAppName,
276
404
  apiPrefix: apiPrefix,
277
405
  };
278
406
  var http = new LB.FetchHttpAdapter({ prefix: apiPrefix });
@@ -341,12 +469,12 @@ export function buildGenAccessKeyPageHTML(options) {
341
469
  var remaining = SESSION_TTL - (Date.now() - startTime);
342
470
  var bar = document.getElementById('timeout-bar');
343
471
  if (remaining <= 60000 && remaining > 0) {
344
- bar.textContent = 'Session expires in ' + Math.ceil(remaining / 1000) + 's';
472
+ bar.textContent = I18N.sessionExpiresInPrefix + Math.ceil(remaining / 1000) + I18N.sessionExpiresInSuffix;
345
473
  bar.className = 'timeout-bar';
346
474
  }
347
475
  if (remaining <= 0) {
348
476
  document.getElementById('auth-btn').disabled = true;
349
- bar.textContent = 'Session expired — please start over.';
477
+ bar.textContent = I18N.sessionExpired;
350
478
  bar.className = 'timeout-bar expired';
351
479
  }
352
480
  }, 1000);
@@ -356,7 +484,7 @@ export function buildGenAccessKeyPageHTML(options) {
356
484
  window.cancelAuth = function() {
357
485
  try { window.close(); } catch(e) {}
358
486
  setTimeout(function() {
359
- document.getElementById('status').textContent = 'You can close this tab manually.';
487
+ document.getElementById('status').textContent = I18N.closeTabManually;
360
488
  document.getElementById('status').className = 'status';
361
489
  }, 500);
362
490
  };
@@ -384,17 +512,17 @@ export function buildGenAccessKeyPageHTML(options) {
384
512
  }
385
513
  setTimeout(function() { window.close(); }, 2000);
386
514
  } else {
387
- document.getElementById('status').textContent = data.error || 'Authorization failed';
515
+ document.getElementById('status').textContent = data.error || I18N.authorizationFailed;
388
516
  document.getElementById('status').className = 'status error';
389
517
  btn.disabled = false;
390
- btn.textContent = 'Authorize';
518
+ btn.textContent = I18N.authorize;
391
519
  }
392
520
  })
393
521
  .catch(function(err) {
394
- document.getElementById('status').textContent = err.message || 'Network error';
522
+ document.getElementById('status').textContent = err.message || I18N.networkError;
395
523
  document.getElementById('status').className = 'status error';
396
524
  btn.disabled = false;
397
- btn.textContent = 'Authorize';
525
+ btn.textContent = I18N.authorize;
398
526
  });
399
527
  };
400
528
  })();
@@ -1 +1 @@
1
- {"version":3,"file":"gen-access-key-page.js","sourceRoot":"","sources":["../../src/pages/gen-access-key-page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAahD,uEAAuE;AACvE,SAAS,eAAe,CAAC,CAAS;IAChC,OAAO,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;AAC9C,CAAC;AAED,uEAAuE;AACvE,MAAM,KAAK,GAAG;IACZ,GAAG,EAAE,oWAAoW;IACzW,MAAM,EAAE,iNAAiN;IACzN,KAAK,EAAE,uLAAuL;CAC/L,CAAC;AAEF,wEAAwE;AACxE,MAAM,WAAW,GAAG,SAAS,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqH7B,CAAC;AAEF,MAAM,UAAU,yBAAyB,CAAC,OAAiC;IACzE,MAAM,WAAW,GAAG,eAAe,CACjC,IAAI,CAAC,SAAS,CAAC;QACb,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC;QAC1D,cAAc,EAAE,OAAO,EAAE,cAAc,IAAI,EAAE;QAC7C,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE;KAChC,CAAC,CACH,CAAC;IAEF,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,8BAA8B,CAAC;IAEvE,OAAO,UAAU,CAAC;;;;;;iCAMa,QAAQ,CAAC,WAAW,CAAC;;MAEhD,WAAW;;;;;;;;;oDASmC,KAAK,CAAC,GAAG;;;;;;;;;;;;;;0DAcH,KAAK,CAAC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sCA6B7B,KAAK,CAAC,KAAK;;;;;;;;YAQrC,KAAK,CAAC,MAAM;;;;;;;;eAQT,QAAQ,CAAC,UAAU,CAAC;;;;mBAIhB,WAAW;;;;;qBAKT,eAAe,CAAC,SAAS,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA0KvC,CAAC;AACT,CAAC"}
1
+ {"version":3,"file":"gen-access-key-page.js","sourceRoot":"","sources":["../../src/pages/gen-access-key-page.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"homepage.d.ts","sourceRoot":"","sources":["../../src/pages/homepage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA0QD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CA+J5D"}
1
+ {"version":3,"file":"homepage.d.ts","sourceRoot":"","sources":["../../src/pages/homepage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAsQD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CA+J5D"}
@@ -20,8 +20,6 @@ const EN = {
20
20
  teamDesc: "Manage members, invitations, and team settings",
21
21
  instancesTitle: "Instances",
22
22
  instancesDesc: "Register and manage app instances",
23
- accessKeysTitle: "Access Keys",
24
- accessKeysDesc: "Manage API access tokens",
25
23
  brandingTitle: "Branding",
26
24
  brandingDesc: "Customize app appearance and theme",
27
25
  statusTitle: "Service Status",
@@ -46,8 +44,6 @@ const ZH = {
46
44
  teamDesc: "管理成员、邀请和团队设置",
47
45
  instancesTitle: "实例管理",
48
46
  instancesDesc: "注册和管理应用实例",
49
- accessKeysTitle: "访问密钥",
50
- accessKeysDesc: "管理 API 访问令牌",
51
47
  brandingTitle: "品牌",
52
48
  brandingDesc: "自定义应用外观和主题",
53
49
  statusTitle: "服务状态",
@@ -1 +1 @@
1
- {"version":3,"file":"homepage.js","sourceRoot":"","sources":["../../src/pages/homepage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"homepage.js","sourceRoot":"","sources":["../../src/pages/homepage.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@
10
10
  * 4. If not: Embed full LoginPage (all configured methods) → on success → accept
11
11
  * 5. POST /invitations/:id/accept → redirect to "/"
12
12
  */
13
- export declare function buildInvitePageHTML(apiBase: string, options?: {
13
+ export declare function buildInvitePageHTML(apiBase: string, locale?: string, options?: {
14
14
  masterOAuthOrigin?: string;
15
15
  }): string;
16
16
  //# sourceMappingURL=invite-page.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"invite-page.d.ts","sourceRoot":"","sources":["../../src/pages/invite-page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAkOrG"}
1
+ {"version":3,"file":"invite-page.d.ts","sourceRoot":"","sources":["../../src/pages/invite-page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA2DH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,MAAM,SAAO,EACb,OAAO,CAAC,EAAE;IAAE,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAAE,GACvC,MAAM,CAkPR"}
@@ -11,14 +11,83 @@
11
11
  * 5. POST /invitations/:id/accept → redirect to "/"
12
12
  */
13
13
  import { assetUrl } from "../asset-registry.js";
14
- export function buildInvitePageHTML(apiBase, options) {
14
+ /**
15
+ * Invite-page copy, localized. `en` is the default fallback for any unknown locale.
16
+ * `invitedPrefix`/`invitedSuffix` wrap the dynamic role badge so the sentence reads
17
+ * naturally in each language (the role sits in the middle).
18
+ */
19
+ const INVITE_I18N = {
20
+ en: {
21
+ title: "You're Invited",
22
+ verifying: "Verifying invitation...",
23
+ pleaseWait: "Please wait",
24
+ invitedPrefix: "You've been invited to join as a ",
25
+ invitedSuffix: "",
26
+ confirmJoin: "Confirm & Join",
27
+ errorTitle: "Invalid Invitation",
28
+ goHome: "Go to homepage",
29
+ welcome: "Welcome!",
30
+ joinedRedirect: "You've joined successfully. Redirecting...",
31
+ // client-side (serialized into the page script)
32
+ noIdTitle: "Invalid Link",
33
+ noIdMsg: "No invitation ID provided.",
34
+ unavailableTitle: "Invitation Unavailable",
35
+ notFound: "This invitation link is invalid.",
36
+ expired: "This invitation has expired.",
37
+ closed: "This invitation is no longer available.",
38
+ invalidFallback: "This invitation is not valid.",
39
+ verifyErrorTitle: "Error",
40
+ verifyErrorMsg: "Failed to verify invitation. Please try again.",
41
+ joining: "Joining...",
42
+ acceptFailed: "Failed to accept invitation",
43
+ },
44
+ zh: {
45
+ title: "您收到一份邀请",
46
+ verifying: "正在验证邀请…",
47
+ pleaseWait: "请稍候",
48
+ invitedPrefix: "您被邀请以 ",
49
+ invitedSuffix: " 的身份加入",
50
+ confirmJoin: "确认并加入",
51
+ errorTitle: "无效的邀请",
52
+ goHome: "返回首页",
53
+ welcome: "欢迎!",
54
+ joinedRedirect: "您已成功加入,正在跳转…",
55
+ noIdTitle: "无效链接",
56
+ noIdMsg: "未提供邀请 ID。",
57
+ unavailableTitle: "邀请不可用",
58
+ notFound: "此邀请链接无效。",
59
+ expired: "此邀请已过期。",
60
+ closed: "此邀请已不再可用。",
61
+ invalidFallback: "此邀请无效。",
62
+ verifyErrorTitle: "出错了",
63
+ verifyErrorMsg: "验证邀请失败,请重试。",
64
+ joining: "正在加入…",
65
+ acceptFailed: "接受邀请失败",
66
+ },
67
+ };
68
+ export function buildInvitePageHTML(apiBase, locale = "en", options) {
15
69
  const masterOAuthOriginJson = JSON.stringify(options?.masterOAuthOrigin ?? null);
70
+ const lang = locale === "zh" ? "zh" : "en";
71
+ const t = INVITE_I18N[lang];
72
+ const clientI18n = JSON.stringify({
73
+ noIdTitle: t.noIdTitle,
74
+ noIdMsg: t.noIdMsg,
75
+ unavailableTitle: t.unavailableTitle,
76
+ notFound: t.notFound,
77
+ expired: t.expired,
78
+ closed: t.closed,
79
+ invalidFallback: t.invalidFallback,
80
+ verifyErrorTitle: t.verifyErrorTitle,
81
+ verifyErrorMsg: t.verifyErrorMsg,
82
+ joining: t.joining,
83
+ acceptFailed: t.acceptFailed,
84
+ });
16
85
  return /* html */ `<!DOCTYPE html>
17
- <html lang="en">
86
+ <html lang="${lang}">
18
87
  <head>
19
88
  <meta charset="utf-8" />
20
89
  <meta name="viewport" content="width=device-width, initial-scale=1" />
21
- <title>You're Invited</title>
90
+ <title>${t.title}</title>
22
91
  <link rel="stylesheet" href="${assetUrl("login.css")}" />
23
92
  <style>
24
93
  .invite-role {
@@ -51,14 +120,14 @@ export function buildInvitePageHTML(apiBase, options) {
51
120
  <body>
52
121
  <div class="card" id="card">
53
122
  <div id="loading-state">
54
- <h1>Verifying invitation...</h1>
55
- <div class="status">Please wait</div>
123
+ <h1>${t.verifying}</h1>
124
+ <div class="status">${t.pleaseWait}</div>
56
125
  </div>
57
126
 
58
127
  <div id="valid-state" class="hidden">
59
- <h1>You're Invited</h1>
128
+ <h1>${t.title}</h1>
60
129
  <div class="invite-info">
61
- <p class="subtitle">You've been invited to join as a <span class="invite-role" id="invite-role"></span></p>
130
+ <p class="subtitle">${t.invitedPrefix}<span class="invite-role" id="invite-role"></span>${t.invitedSuffix}</p>
62
131
  <p class="invite-remark hidden" id="invite-remark"></p>
63
132
  </div>
64
133
  <!-- Authenticated: show confirm button -->
@@ -69,20 +138,20 @@ export function buildInvitePageHTML(apiBase, options) {
69
138
  <line x1="20" y1="8" x2="20" y2="14"/>
70
139
  <line x1="23" y1="11" x2="17" y2="11"/>
71
140
  </svg>
72
- <span>Confirm & Join</span>
141
+ <span>${t.confirmJoin}</span>
73
142
  </button>
74
143
  <div class="status" id="status"></div>
75
144
  </div>
76
145
 
77
146
  <div id="error-state" class="hidden error-state">
78
- <h1 id="error-title">Invalid Invitation</h1>
147
+ <h1 id="error-title">${t.errorTitle}</h1>
79
148
  <p class="subtitle" id="error-message"></p>
80
- <a href="/" class="home-link">Go to homepage</a>
149
+ <a href="/" class="home-link">${t.goHome}</a>
81
150
  </div>
82
151
 
83
152
  <div id="success-state" class="hidden">
84
- <h1>Welcome!</h1>
85
- <p class="subtitle">You've joined successfully. Redirecting...</p>
153
+ <h1>${t.welcome}</h1>
154
+ <p class="subtitle">${t.joinedRedirect}</p>
86
155
  </div>
87
156
  </div>
88
157
  <!-- LoginPage mounts here (outside the card — it renders its own card) -->
@@ -93,6 +162,7 @@ export function buildInvitePageHTML(apiBase, options) {
93
162
  var LoginPage = __LoginBundle.LoginPage;
94
163
  var FetchHttpAdapter = __LoginBundle.FetchHttpAdapter;
95
164
 
165
+ var I18N = ${clientI18n};
96
166
  var API_BASE = ${JSON.stringify(apiBase)};
97
167
  var MASTER_OAUTH_ORIGIN = ${masterOAuthOriginJson};
98
168
  var invitationId = new URLSearchParams(location.search).get("id");
@@ -122,7 +192,7 @@ async function acceptInvitation() {
122
192
  });
123
193
  if (!res.ok) {
124
194
  var err = await res.json().catch(function() { return {}; });
125
- throw new Error(err.error || "Failed to accept invitation");
195
+ throw new Error(err.error || I18N.acceptFailed);
126
196
  }
127
197
  return res.json();
128
198
  }
@@ -131,19 +201,19 @@ async function handleConfirm() {
131
201
  var btn = document.getElementById("confirm-btn");
132
202
  btn.disabled = true;
133
203
  try {
134
- setStatus("Joining...", false);
204
+ setStatus(I18N.joining, false);
135
205
  await acceptInvitation();
136
206
  show("success-state");
137
207
  setTimeout(function() { location.href = "/"; }, 1000);
138
208
  } catch (err) {
139
- setStatus(err.message || "Failed to accept invitation", true);
209
+ setStatus(err.message || I18N.acceptFailed, true);
140
210
  btn.disabled = false;
141
211
  }
142
212
  }
143
213
 
144
214
  async function init() {
145
215
  if (!invitationId) {
146
- showError("Invalid Link", "No invitation ID provided.");
216
+ showError(I18N.noIdTitle, I18N.noIdMsg);
147
217
  return;
148
218
  }
149
219
 
@@ -158,11 +228,11 @@ async function init() {
158
228
 
159
229
  if (!invInfo.valid) {
160
230
  var messages = {
161
- not_found: "This invitation link is invalid.",
162
- expired: "This invitation has expired.",
163
- closed: "This invitation is no longer available.",
231
+ not_found: I18N.notFound,
232
+ expired: I18N.expired,
233
+ closed: I18N.closed,
164
234
  };
165
- showError("Invitation Unavailable", messages[invInfo.error] || "This invitation is not valid.");
235
+ showError(I18N.unavailableTitle, messages[invInfo.error] || I18N.invalidFallback);
166
236
  return;
167
237
  }
168
238
 
@@ -174,7 +244,7 @@ async function init() {
174
244
  remarkEl.classList.remove("hidden");
175
245
  }
176
246
  } catch (err) {
177
- showError("Error", "Failed to verify invitation. Please try again.");
247
+ showError(I18N.verifyErrorTitle, I18N.verifyErrorMsg);
178
248
  return;
179
249
  }
180
250
 
@@ -1 +1 @@
1
- {"version":3,"file":"invite-page.js","sourceRoot":"","sources":["../../src/pages/invite-page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,MAAM,UAAU,mBAAmB,CAAC,OAAe,EAAE,OAAwC;IAC3F,MAAM,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,iBAAiB,IAAI,IAAI,CAAC,CAAC;IACjF,OAAO,UAAU,CAAC;;;;;;iCAMa,QAAQ,CAAC,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAqEvC,QAAQ,CAAC,UAAU,CAAC;;;;;iBAKlB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;4BACZ,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA8IzC,CAAC;AACT,CAAC"}
1
+ {"version":3,"file":"invite-page.js","sourceRoot":"","sources":["../../src/pages/invite-page.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-callback-page.d.ts","sourceRoot":"","sources":["../../src/pages/oauth-callback-page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACvD,MAAM,CAwER"}
1
+ {"version":3,"file":"oauth-callback-page.d.ts","sourceRoot":"","sources":["../../src/pages/oauth-callback-page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACvD,MAAM,CAwER"}