@arcblock/did-connect-service 4.1.61 → 4.1.62

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 (72) hide show
  1. package/dist/_generated/asset-bytes.js +1 -1
  2. package/dist/_generated/asset-manifest.js +2 -2
  3. package/dist/assets/{admin-core.bcfa7ce2.js → admin-core.bbd8d53c.js} +963 -194
  4. package/dist/assets/{admin.bd6c819b.css → admin.7b66e78d.css} +160 -7
  5. package/dist/blocklet-service-rpc.js +4 -4
  6. package/dist/blocklet-service-rpc.js.map +1 -1
  7. package/dist/handler-errors.d.ts +14 -8
  8. package/dist/handler-errors.d.ts.map +1 -1
  9. package/dist/handler-errors.js +15 -8
  10. package/dist/handler-errors.js.map +1 -1
  11. package/dist/handlers/account-merge-handler.d.ts +32 -5
  12. package/dist/handlers/account-merge-handler.d.ts.map +1 -1
  13. package/dist/handlers/account-merge-handler.js +155 -19
  14. package/dist/handlers/account-merge-handler.js.map +1 -1
  15. package/dist/handlers/auth-handler.d.ts.map +1 -1
  16. package/dist/handlers/auth-handler.js +11 -6
  17. package/dist/handlers/auth-handler.js.map +1 -1
  18. package/dist/handlers/did-connect-handler.d.ts +2 -2
  19. package/dist/handlers/did-connect-handler.d.ts.map +1 -1
  20. package/dist/handlers/did-connect-handler.js +9 -14
  21. package/dist/handlers/did-connect-handler.js.map +1 -1
  22. package/dist/handlers/email-login-handler.d.ts.map +1 -1
  23. package/dist/handlers/email-login-handler.js +15 -10
  24. package/dist/handlers/email-login-handler.js.map +1 -1
  25. package/dist/handlers/oauth-handler.d.ts +2 -0
  26. package/dist/handlers/oauth-handler.d.ts.map +1 -1
  27. package/dist/handlers/oauth-handler.js +71 -22
  28. package/dist/handlers/oauth-handler.js.map +1 -1
  29. package/dist/handlers/passkey-handler.d.ts +8 -2
  30. package/dist/handlers/passkey-handler.d.ts.map +1 -1
  31. package/dist/handlers/passkey-handler.js +27 -18
  32. package/dist/handlers/passkey-handler.js.map +1 -1
  33. package/dist/handlers/team-handler.js +2 -2
  34. package/dist/handlers/team-handler.js.map +1 -1
  35. package/dist/http/security-headers.d.ts +38 -0
  36. package/dist/http/security-headers.d.ts.map +1 -0
  37. package/dist/http/security-headers.js +67 -0
  38. package/dist/http/security-headers.js.map +1 -0
  39. package/dist/identity/session-epoch.d.ts +11 -0
  40. package/dist/identity/session-epoch.d.ts.map +1 -1
  41. package/dist/identity/session-epoch.js +12 -0
  42. package/dist/identity/session-epoch.js.map +1 -1
  43. package/dist/pages/admin/i18n.d.ts.map +1 -1
  44. package/dist/pages/admin/i18n.js +271 -47
  45. package/dist/pages/admin/i18n.js.map +1 -1
  46. package/dist/pages/admin/merge-confirm-view.d.ts +75 -18
  47. package/dist/pages/admin/merge-confirm-view.d.ts.map +1 -1
  48. package/dist/pages/admin/merge-confirm-view.js +304 -72
  49. package/dist/pages/admin/merge-confirm-view.js.map +1 -1
  50. package/dist/pages/admin/merge-method-picker.d.ts +34 -3
  51. package/dist/pages/admin/merge-method-picker.d.ts.map +1 -1
  52. package/dist/pages/admin/merge-method-picker.js +188 -14
  53. package/dist/pages/admin/merge-method-picker.js.map +1 -1
  54. package/dist/pages/admin/styles.d.ts.map +1 -1
  55. package/dist/pages/admin/styles.js +160 -7
  56. package/dist/pages/admin/styles.js.map +1 -1
  57. package/dist/pages/admin/tab-profile-accounts.d.ts.map +1 -1
  58. package/dist/pages/admin/tab-profile-accounts.js +490 -114
  59. package/dist/pages/admin/tab-profile-accounts.js.map +1 -1
  60. package/dist/pages/oauth-callback-page.d.ts +5 -0
  61. package/dist/pages/oauth-callback-page.d.ts.map +1 -1
  62. package/dist/pages/oauth-callback-page.js +19 -0
  63. package/dist/pages/oauth-callback-page.js.map +1 -1
  64. package/dist/store/account-merge.d.ts +139 -3
  65. package/dist/store/account-merge.d.ts.map +1 -1
  66. package/dist/store/account-merge.js +381 -11
  67. package/dist/store/account-merge.js.map +1 -1
  68. package/dist/store/d1-store.d.ts +20 -3
  69. package/dist/store/d1-store.d.ts.map +1 -1
  70. package/dist/store/d1-store.js +37 -26
  71. package/dist/store/d1-store.js.map +1 -1
  72. package/package.json +3 -3
@@ -1,85 +1,317 @@
1
1
  /**
2
- * Pure mapping from a redacted dry-run plan to the confirm-dialog view (#189).
2
+ * Pure mapping from a dry-run plan to the merge preview (#322).
3
3
  * Injected into CONNECTED_ACCOUNTS_SCRIPT via Function#toString — keep these
4
- * functions free of module-level closures.
4
+ * functions free of module-level helpers. Every dependency is a parameter,
5
+ * and nested helpers stay inside the function that uses them.
5
6
  */
6
7
  export function toMergeConfirmViewModel(plan) {
7
- const membershipChanges = plan?.membershipChanges ?? [];
8
- const credentials = plan?.credentialsByProvider ?? [];
9
- const skipped = plan?.skippedConflicts ?? [];
10
- const hostCodes = plan?.hostWarningCodes ?? [];
8
+ const raw = plan ?? {};
9
+ function textOrEmpty(value) {
10
+ return typeof value === "string" ? value : "";
11
+ }
12
+ function normalizeProvider(provider) {
13
+ const name = textOrEmpty(provider).trim();
14
+ if (name === "did-connect")
15
+ return "wallet";
16
+ return name;
17
+ }
18
+ function readSide(value) {
19
+ const methods = [];
20
+ const seen = new Set();
21
+ const listed = Array.isArray(value?.methods) ? value.methods : [];
22
+ for (const provider of listed) {
23
+ const name = normalizeProvider(provider);
24
+ if (!name || seen.has(name))
25
+ continue;
26
+ seen.add(name);
27
+ methods.push(name);
28
+ }
29
+ return {
30
+ did: textOrEmpty(value?.did),
31
+ methods,
32
+ createdAt: textOrEmpty(value?.createdAt),
33
+ globalRole: textOrEmpty(value?.globalRole),
34
+ fullName: textOrEmpty(value?.fullName),
35
+ handle: textOrEmpty(value?.handle),
36
+ };
37
+ }
38
+ const movedMethods = [];
39
+ const seenMethods = new Set();
40
+ const credentials = Array.isArray(raw.credentialsByProvider) ? raw.credentialsByProvider : [];
41
+ for (const row of credentials) {
42
+ const name = normalizeProvider(row?.provider);
43
+ if (!name || seenMethods.has(name))
44
+ continue;
45
+ seenMethods.add(name);
46
+ movedMethods.push(name);
47
+ }
48
+ const roleChanges = [];
49
+ const membershipChanges = Array.isArray(raw.membershipChanges) ? raw.membershipChanges : [];
50
+ for (const row of membershipChanges) {
51
+ const intoRoleBefore = textOrEmpty(row?.intoRoleBefore);
52
+ const keptRole = textOrEmpty(row?.keptRole);
53
+ if (!keptRole || keptRole === intoRoleBefore)
54
+ continue;
55
+ roleChanges.push({
56
+ fromRole: textOrEmpty(row?.fromRole),
57
+ intoRoleBefore,
58
+ keptRole,
59
+ instanceName: textOrEmpty(row?.instanceName),
60
+ });
61
+ }
62
+ const movedMemberships = [];
63
+ const moved = Array.isArray(raw.movedMemberships) ? raw.movedMemberships : [];
64
+ for (const row of moved) {
65
+ const instanceName = textOrEmpty(row?.instanceName);
66
+ const role = textOrEmpty(row?.role);
67
+ if (!instanceName && !role)
68
+ continue;
69
+ movedMemberships.push({ instanceName, role });
70
+ }
71
+ const change = raw.globalRoleChange;
72
+ const before = textOrEmpty(change?.before);
73
+ const after = textOrEmpty(change?.after);
74
+ const globalRoleChange = before && after && before !== after ? { before, after } : null;
75
+ const count = raw.accessKeyCount;
76
+ const accessKeyCount = typeof count === "number" && Number.isFinite(count) && count > 0 ? count : 0;
77
+ const recommendedKeep = raw.recommendedKeep === "proved" ? "proved" : "session";
78
+ const reasons = Array.isArray(raw.recommendReasons) ? raw.recommendReasons : [];
11
79
  return {
12
- tooLarge: Boolean(plan?.tooLarge),
13
- survivingDid: plan?.intoDid ?? "",
14
- mergedDid: plan?.fromDid ?? "",
15
- credentialsByProvider: credentials.map((row) => row.provider),
16
- skippedConflicts: skipped,
17
- roleChanges: membershipChanges.filter((row) => row.keptRole !== row.intoRoleBefore),
18
- accessKeyCount: plan?.accessKeyCount ?? 0,
19
- didSpacePointer: plan?.didSpace?.pointer ?? "",
20
- hostWarningCodes: hostCodes,
80
+ tooLarge: raw.tooLarge === true,
81
+ recommendedKeep,
82
+ fromDid: textOrEmpty(raw.fromDid),
83
+ intoDid: textOrEmpty(raw.intoDid),
84
+ session: readSide(raw.accounts?.session),
85
+ proved: readSide(raw.accounts?.proved),
86
+ recommendReasons: reasons.filter((code) => typeof code === "string"),
87
+ movedMethods,
88
+ roleChanges,
89
+ movedMemberships,
90
+ globalRoleChange,
91
+ accessKeyCount,
92
+ mergedHandle: textOrEmpty(raw.mergedHandle),
93
+ matchesCandidate: raw.matchesCandidate === true,
21
94
  };
22
95
  }
23
- export function renderMergeConfirmBodyHtml(plan, t, escapeHtml, providerLabel) {
96
+ export function renderMergeConfirmBodyHtml(plan, t, escapeHtml, providerLabel, options) {
24
97
  const view = toMergeConfirmViewModel(plan);
25
- const roleLabel = (role) => {
98
+ const requested = options?.selectedKeep;
99
+ const picked = requested === "session" || requested === "proved" ? requested : view.recommendedKeep;
100
+ function plain(value) {
101
+ return String(value ?? "").replace(/[{}]/g, "");
102
+ }
103
+ function text(key, params) {
104
+ let safe;
105
+ if (params) {
106
+ safe = {};
107
+ for (const name of Object.keys(params))
108
+ safe[name] = plain(params[name]);
109
+ }
110
+ return escapeHtml(t(key, safe));
111
+ }
112
+ function shortOf(did) {
113
+ if (typeof options?.shortDid === "function")
114
+ return options.shortDid(did);
115
+ if (!did)
116
+ return "";
117
+ if (did.length <= 17)
118
+ return did;
119
+ return `${did.slice(0, 8)}...${did.slice(-6)}`;
120
+ }
121
+ function roleLabel(role) {
26
122
  const key = `common.${role}`;
27
123
  const translated = t(key);
28
124
  return translated === key ? role : translated;
29
- };
30
- const labelFor = (provider) => (providerLabel ? providerLabel(provider) : provider);
31
- const skippedReason = (reason) => reason === "UNIQUE(provider,id)" ? t("profile.mergeConfirmSkippedReason") : reason;
32
- const hostWarning = (code) => {
33
- if (code === "blocklet-owner-clash")
34
- return t("profile.mergeHostBlockletOwnerClash");
35
- if (code === "external-token-rebind")
36
- return t("profile.mergeHostExternalTokenRebind");
37
- return code;
38
- };
39
- const wrapDid = (did) => `<code class="merge-confirm-did">${escapeHtml(did)}</code>`;
40
- const credentialItems = view.credentialsByProvider
41
- .map((provider) => `<li>${escapeHtml(labelFor(provider))}</li>`)
42
- .join("");
43
- const skippedItems = view.skippedConflicts
44
- .map((row) => `<li>${escapeHtml(labelFor(row.provider))} — ${escapeHtml(skippedReason(row.reason))}</li>`)
45
- .join("");
46
- const roleItems = view.roleChanges
47
- .map((row) => `<li>${escapeHtml(t("profile.mergeConfirmRoleChange", {
48
- fromRole: roleLabel(row.fromRole),
49
- intoRoleBefore: roleLabel(row.intoRoleBefore),
50
- keptRole: roleLabel(row.keptRole),
51
- }))}</li>`)
52
- .join("");
53
- const hostItems = view.hostWarningCodes
54
- .map((code) => `<li>${escapeHtml(hostWarning(code))}</li>`)
55
- .join("");
56
- let html = `<p class="dialog-desc">${t("profile.mergeConfirmSurviving", {
57
- intoDid: wrapDid(view.survivingDid),
58
- fromDid: wrapDid(view.mergedDid),
59
- })}</p>`;
60
- html += `<p class="merge-confirm-keep-other">${t("profile.mergeConfirmKeepOther")}</p>`;
61
- if (credentialItems) {
62
- html += `<div class="merge-confirm-section"><h4>${escapeHtml(t("profile.mergeConfirmCredentials"))}</h4><ul class="merge-confirm-list">${credentialItems}</ul></div>`;
63
- }
64
- if (skippedItems) {
65
- html += `<div class="merge-confirm-section"><h4>${escapeHtml(t("profile.mergeConfirmSkipped"))}</h4><ul class="merge-confirm-list">${skippedItems}</ul></div>`;
66
- }
67
- if (roleItems) {
68
- html += `<div class="merge-confirm-section"><h4>${escapeHtml(t("profile.mergeConfirmRoles"))}</h4><ul class="merge-confirm-list">${roleItems}</ul></div>`;
69
- }
70
- if (view.accessKeyCount > 0) {
71
- html += `<div class="merge-confirm-section"><h4>${escapeHtml(t("profile.mergeConfirmAccessKeysTitle"))}</h4><p class="merge-confirm-note">${escapeHtml(t("profile.mergeConfirmAccessKeys", { count: String(view.accessKeyCount) }))}</p></div>`;
72
- }
73
- html += `<div class="merge-confirm-section"><h4>${escapeHtml(t("profile.mergeConfirmDidSpaceTitle"))}</h4><p class="merge-confirm-note">${t("profile.mergeDidSpace", {
74
- pointer: wrapDid(view.didSpacePointer),
75
- })}</p></div>`;
76
- if (hostItems) {
77
- html += `<div class="merge-confirm-section"><h4>${escapeHtml(t("profile.mergeConfirmHostWarnings"))}</h4><ul class="merge-confirm-list">${hostItems}</ul></div>`;
78
- }
79
- html += `<p class="merge-confirm-irreversible">${escapeHtml(t("profile.mergeConfirmIrreversible"))}</p>`;
80
- if (view.tooLarge) {
81
- html += `<p class="merge-confirm-too-large">${escapeHtml(t("profile.mergeConfirmTooLarge"))}</p>`;
82
- }
83
- return html;
125
+ }
126
+ function methodLabels(methods) {
127
+ const labels = [];
128
+ for (const provider of methods) {
129
+ labels.push(typeof providerLabel === "function" ? providerLabel(provider) : provider);
130
+ }
131
+ return labels.join(t("profile.mergePromptMethodSep"));
132
+ }
133
+ function createdOn(iso) {
134
+ const match = /^(\d{4}-\d{2}-\d{2})/.exec(iso);
135
+ return match?.[1] ?? iso;
136
+ }
137
+ function accountCard(keep) {
138
+ const account = keep === "session" ? view.session : view.proved;
139
+ const lines = [];
140
+ const nameBits = [];
141
+ if (account.fullName)
142
+ nameBits.push(account.fullName);
143
+ if (account.handle)
144
+ nameBits.push(`@${account.handle}`);
145
+ if (nameBits.length > 0) {
146
+ lines.push(`<span class="merge-confirm-line">${escapeHtml(nameBits.join(" · "))}</span>`);
147
+ }
148
+ if (account.methods.length > 0) {
149
+ lines.push(`<span class="merge-confirm-line">${escapeHtml(methodLabels(account.methods))}</span>`);
150
+ }
151
+ const meta = [];
152
+ if (account.globalRole)
153
+ meta.push(roleLabel(account.globalRole));
154
+ if (account.createdAt)
155
+ meta.push(t("profile.mergeConfirmCreated", { date: plain(createdOn(account.createdAt)) }));
156
+ if (meta.length > 0)
157
+ lines.push(`<span class="merge-confirm-line">${escapeHtml(meta.join(" · "))}</span>`);
158
+ if (keep === "session") {
159
+ lines.push(`<span class="merge-confirm-current">${text("profile.mergeConfirmCurrent")}</span>`);
160
+ }
161
+ const copy = account.did
162
+ ? `<button type="button" class="merge-confirm-copy" data-copy-did="${escapeHtml(account.did)}">${text("common.copy")}</button>`
163
+ : "";
164
+ const badge = view.recommendedKeep === keep
165
+ ? `<span class="merge-confirm-badge">${text("profile.mergeConfirmRecommended")}</span>`
166
+ : "";
167
+ const selected = picked === keep ? " checked" : "";
168
+ const selectedClass = picked === keep ? " is-selected" : "";
169
+ return (`<label class="merge-confirm-card${selectedClass}" data-keep="${keep}">` +
170
+ `<input type="radio" name="merge-keep" value="${keep}"${selected}>` +
171
+ `<span class="merge-confirm-card-main">` +
172
+ `<span class="merge-confirm-card-head"><span class="merge-confirm-did">${escapeHtml(shortOf(account.did))}</span>${copy}${badge}</span>` +
173
+ lines.join("") +
174
+ `</span></label>`);
175
+ }
176
+ let banner = "";
177
+ if (options?.hasCandidate === true && view.matchesCandidate && options.candidateEmail) {
178
+ banner = `<p class="merge-confirm-match">${text("profile.mergeConfirmMatch", { email: options.candidateEmail })}</p>`;
179
+ }
180
+ else if (options?.hasCandidate === true && !view.matchesCandidate) {
181
+ banner = `<p class="merge-confirm-not-match">${text("profile.mergeConfirmNotMatch")}</p>`;
182
+ }
183
+ const primary = view.recommendedKeep === "proved" ? "proved" : "session";
184
+ const secondary = primary === "session" ? "proved" : "session";
185
+ const recommendedAccount = view.recommendedKeep === "proved" ? view.proved : view.session;
186
+ const reasonBits = [];
187
+ for (const code of view.recommendReasons) {
188
+ if (code === "global-role" || code === "instance-role")
189
+ reasonBits.push(t("profile.mergeConfirmReasonHigher"));
190
+ else if (code === "handle") {
191
+ reasonBits.push(t("profile.mergeConfirmReasonHandle", { handle: plain(recommendedAccount.handle) }));
192
+ }
193
+ else if (code === "wallet-did")
194
+ reasonBits.push(t("profile.mergeConfirmReasonWallet"));
195
+ else if (code === "older")
196
+ reasonBits.push(t("profile.mergeConfirmReasonOlder"));
197
+ }
198
+ const reason = reasonBits.length
199
+ ? text("profile.mergeConfirmReasonLead", {
200
+ did: shortOf(recommendedAccount.did),
201
+ reason: reasonBits.join(" "),
202
+ })
203
+ : text("profile.mergeConfirmReasonSimilar");
204
+ let changes = "";
205
+ if (options?.loading === true) {
206
+ changes =
207
+ `<div id="merge-confirm-changes" class="merge-confirm-section">` +
208
+ `<h4>${text("profile.mergeConfirmChanges")}</h4>` +
209
+ `<p class="merge-confirm-loading">${text("profile.mergeConfirmLoading")}</p>` +
210
+ `</div>`;
211
+ }
212
+ else {
213
+ const rows = [];
214
+ if (view.movedMethods.length > 0) {
215
+ rows.push(`<li>${text("profile.mergeConfirmMovedMethods", { methods: methodLabels(view.movedMethods) })}</li>`);
216
+ }
217
+ if (view.globalRoleChange) {
218
+ rows.push(`<li>${text("profile.mergeConfirmGlobalRole", {
219
+ before: roleLabel(view.globalRoleChange.before),
220
+ after: roleLabel(view.globalRoleChange.after),
221
+ })}</li>`);
222
+ }
223
+ for (const row of view.roleChanges) {
224
+ const before = roleLabel(row.intoRoleBefore);
225
+ const after = roleLabel(row.keptRole);
226
+ const line = row.instanceName
227
+ ? text("profile.mergeConfirmSpaceRole", { space: row.instanceName, before, after })
228
+ : text("profile.mergeConfirmSpaceRoleUnnamed", { before, after });
229
+ rows.push(`<li>${line}</li>`);
230
+ }
231
+ if (view.movedMemberships.length > 0) {
232
+ const parts = [];
233
+ for (const row of view.movedMemberships) {
234
+ const role = roleLabel(row.role);
235
+ parts.push(row.instanceName
236
+ ? t("profile.mergeConfirmJoinedSpace", { space: plain(row.instanceName), role: plain(role) })
237
+ : t("profile.mergeConfirmJoinedSpaceUnnamed", { role: plain(role) }));
238
+ }
239
+ rows.push(`<li>${text("profile.mergeConfirmJoinedSpaces", {
240
+ spaces: parts.join(t("profile.mergePromptMethodSep")),
241
+ })}</li>`);
242
+ }
243
+ if (view.accessKeyCount > 0) {
244
+ rows.push(`<li>${text("profile.mergeConfirmAccessKeys", { count: String(view.accessKeyCount) })}</li>`);
245
+ }
246
+ if (view.mergedHandle) {
247
+ rows.push(`<li>${text("profile.mergeConfirmHandleStays", {
248
+ handle: view.mergedHandle,
249
+ did: shortOf(view.fromDid),
250
+ })}</li>`);
251
+ }
252
+ rows.push(`<li>${text("profile.mergeConfirmNameAvatar", { did: shortOf(view.fromDid) })}</li>`);
253
+ rows.push(`<li>${text("profile.mergeConfirmDidSpaceNotCopied", { did: shortOf(view.fromDid) })}</li>`);
254
+ const tooLarge = view.tooLarge
255
+ ? `<p class="merge-confirm-too-large">${text("profile.mergeConfirmTooLarge")}</p>`
256
+ : "";
257
+ changes =
258
+ `<div id="merge-confirm-changes" class="merge-confirm-section">` +
259
+ `<h4>${text("profile.mergeConfirmChanges")}</h4>` +
260
+ `<ul class="merge-confirm-list">${rows.join("")}</ul>` +
261
+ `<p class="merge-confirm-host">${text("profile.mergeConfirmHostMaybe", { did: shortOf(view.fromDid) })}</p>` +
262
+ `<p class="merge-confirm-irreversible">${text("profile.mergeConfirmIrreversible")}</p>` +
263
+ tooLarge +
264
+ `</div>`;
265
+ }
266
+ return (banner +
267
+ `<p class="merge-confirm-choose">${text("profile.mergeConfirmChoose")}</p>` +
268
+ `<div class="merge-confirm-cards">${accountCard(primary)}${accountCard(secondary)}</div>` +
269
+ `<p class="merge-confirm-reason">${reason}</p>` +
270
+ `<p class="merge-confirm-alias">${text("profile.mergeConfirmAlias")}</p>` +
271
+ changes);
272
+ }
273
+ export function renderMergeDoneBodyHtml(input, t, escapeHtml, providerLabel, shortDid) {
274
+ const data = input ?? {};
275
+ const did = typeof data.survivorDid === "string" ? data.survivorDid : "";
276
+ function plain(value) {
277
+ return String(value ?? "").replace(/[{}]/g, "");
278
+ }
279
+ function text(key, params) {
280
+ let safe;
281
+ if (params) {
282
+ safe = {};
283
+ for (const name of Object.keys(params))
284
+ safe[name] = plain(params[name]);
285
+ }
286
+ return escapeHtml(t(key, safe));
287
+ }
288
+ function shortOf(value) {
289
+ if (typeof shortDid === "function")
290
+ return shortDid(value);
291
+ if (!value)
292
+ return "";
293
+ if (value.length <= 17)
294
+ return value;
295
+ return `${value.slice(0, 8)}...${value.slice(-6)}`;
296
+ }
297
+ const seen = new Set();
298
+ const labels = [];
299
+ const methods = Array.isArray(data.survivorMethods) ? data.survivorMethods : [];
300
+ for (const provider of methods) {
301
+ if (typeof provider !== "string")
302
+ continue;
303
+ const name = provider.trim() === "did-connect" ? "wallet" : provider.trim();
304
+ if (!name || seen.has(name))
305
+ continue;
306
+ seen.add(name);
307
+ labels.push(typeof providerLabel === "function" ? providerLabel(name) : name);
308
+ }
309
+ const didLine = `<p class="merge-confirm-done-did">${text("profile.mergeDoneDid", { did: shortOf(did) })}</p>`;
310
+ if (labels.length === 0)
311
+ return didLine;
312
+ return (didLine +
313
+ `<p class="merge-confirm-done-methods">${text("profile.mergeDoneMethods", {
314
+ methods: labels.join(t("profile.mergePromptMethodSep")),
315
+ })}</p>`);
84
316
  }
85
317
  //# sourceMappingURL=merge-confirm-view.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"merge-confirm-view.js","sourceRoot":"","sources":["../../../src/pages/admin/merge-confirm-view.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA0BH,MAAM,UAAU,uBAAuB,CAAC,IAA0B;IAChE,MAAM,iBAAiB,GAAG,IAAI,EAAE,iBAAiB,IAAI,EAAE,CAAC;IACxD,MAAM,WAAW,GAAG,IAAI,EAAE,qBAAqB,IAAI,EAAE,CAAC;IACtD,MAAM,OAAO,GAAG,IAAI,EAAE,gBAAgB,IAAI,EAAE,CAAC;IAC7C,MAAM,SAAS,GAAG,IAAI,EAAE,gBAAgB,IAAI,EAAE,CAAC;IAC/C,OAAO;QACL,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;QACjC,YAAY,EAAE,IAAI,EAAE,OAAO,IAAI,EAAE;QACjC,SAAS,EAAE,IAAI,EAAE,OAAO,IAAI,EAAE;QAC9B,qBAAqB,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC7D,gBAAgB,EAAE,OAAO;QACzB,WAAW,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,cAAc,CAAC;QACnF,cAAc,EAAE,IAAI,EAAE,cAAc,IAAI,CAAC;QACzC,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,IAAI,EAAE;QAC9C,gBAAgB,EAAE,SAAS;KAC5B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,IAA0B,EAC1B,CAA2D,EAC3D,UAAiC,EACjC,aAA4C;IAE5C,MAAM,IAAI,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,EAAE;QACjC,MAAM,GAAG,GAAG,UAAU,IAAI,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAC1B,OAAO,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;IAChD,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,CAAC,QAAgB,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC5F,MAAM,aAAa,GAAG,CAAC,MAAc,EAAE,EAAE,CACvC,MAAM,KAAK,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACrF,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,EAAE;QACnC,IAAI,IAAI,KAAK,sBAAsB;YAAE,OAAO,CAAC,CAAC,qCAAqC,CAAC,CAAC;QACrF,IAAI,IAAI,KAAK,uBAAuB;YAAE,OAAO,CAAC,CAAC,sCAAsC,CAAC,CAAC;QACvF,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,mCAAmC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;IAE7F,MAAM,eAAe,GAAG,IAAI,CAAC,qBAAqB;SAC/C,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;SAC/D,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB;SACvC,GAAG,CACF,CAAC,GAAG,EAAE,EAAE,CACN,OAAO,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAC9F;SACA,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW;SAC/B,GAAG,CACF,CAAC,GAAG,EAAE,EAAE,CACN,OAAO,UAAU,CACf,CAAC,CAAC,gCAAgC,EAAE;QAClC,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;QACjC,cAAc,EAAE,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC;QAC7C,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;KAClC,CAAC,CACH,OAAO,CACX;SACA,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB;SACpC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;SAC1D,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,IAAI,IAAI,GAAG,0BAA0B,CAAC,CAAC,+BAA+B,EAAE;QACtE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;QACnC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;KACjC,CAAC,MAAM,CAAC;IACT,IAAI,IAAI,uCAAuC,CAAC,CAAC,+BAA+B,CAAC,MAAM,CAAC;IAExF,IAAI,eAAe,EAAE,CAAC;QACpB,IAAI,IAAI,0CAA0C,UAAU,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,uCAAuC,eAAe,aAAa,CAAC;IACxK,CAAC;IACD,IAAI,YAAY,EAAE,CAAC;QACjB,IAAI,IAAI,0CAA0C,UAAU,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,uCAAuC,YAAY,aAAa,CAAC;IACjK,CAAC;IACD,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,IAAI,0CAA0C,UAAU,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,uCAAuC,SAAS,aAAa,CAAC;IAC5J,CAAC;IACD,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;QAC5B,IAAI,IAAI,0CAA0C,UAAU,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC,sCAAsC,UAAU,CAAC,CAAC,CAAC,gCAAgC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC;IAClP,CAAC;IAED,IAAI,IAAI,0CAA0C,UAAU,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,sCAAsC,CAAC,CAAC,uBAAuB,EAAE;QACnK,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC;KACvC,CAAC,YAAY,CAAC;IAEf,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,IAAI,0CAA0C,UAAU,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,uCAAuC,SAAS,aAAa,CAAC;IACnK,CAAC;IAED,IAAI,IAAI,yCAAyC,UAAU,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,MAAM,CAAC;IACzG,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,IAAI,IAAI,sCAAsC,UAAU,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,MAAM,CAAC;IACpG,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"merge-confirm-view.js","sourceRoot":"","sources":["../../../src/pages/admin/merge-confirm-view.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,43 @@
1
1
  /**
2
- * Merge prove-A method picker (#191). Injected into CONNECTED_ACCOUNTS_SCRIPT
3
- * via Function#toString — keep these functions free of module-level closures.
2
+ * Merge prove-A method picker (#191) and candidate guidance (#320).
3
+ * Injected into CONNECTED_ACCOUNTS_SCRIPT via Function#toString — keep these
4
+ * functions free of module-level closures. Pass every dependency as a parameter.
4
5
  */
5
6
  export type MergeProveMethod = "wallet" | "passkey" | "oauth" | "email";
6
7
  export interface MergeMethodOption {
7
8
  method: MergeProveMethod;
8
9
  /** OAuth provider name only — never clientId / secrets. */
9
10
  provider?: string;
11
+ /** Shared verified email. Present only on the guided email button. */
12
+ email?: string;
10
13
  }
11
- export declare function renderMergeMethodPickerHtml(options: MergeMethodOption[], t: (key: string, params?: Record<string, string>) => string, escapeHtml: (s: string) => string, iconFor: (provider: string) => string, labelFor: (provider: string) => string): string;
14
+ export interface MergeMethodGuide {
15
+ recommended: MergeMethodOption[];
16
+ others: MergeMethodOption[];
17
+ othersOpen: boolean;
18
+ unavailable: boolean;
19
+ }
20
+ export interface MergePromptCandidate {
21
+ ref: string;
22
+ methods?: readonly string[] | null;
23
+ createdAt?: string | null;
24
+ lastLoginAt?: string | null;
25
+ }
26
+ type TFn = (key: string, params?: Record<string, string>) => string;
27
+ /** Relative within a year; year + month after that. Empty when `iso` is missing. */
28
+ export declare function formatMergeCandidateWhen(iso: string | null | undefined, nowMs: number, lang: string, t: TFn): string;
29
+ /**
30
+ * Split site-enabled prove methods into the candidate's methods and the rest.
31
+ * Email prove is included only when `emailLogin` is true, the shared email is
32
+ * present, and the site has email login. Hidden providers are dropped here;
33
+ * the server still returns them.
34
+ */
35
+ export declare function partitionMergeMethods(candidate: {
36
+ methods?: readonly string[] | null;
37
+ emailLogin?: boolean;
38
+ email?: string | null;
39
+ } | null | undefined, enabled: readonly MergeMethodOption[] | null | undefined, hiddenProviders: readonly string[] | null | undefined): MergeMethodGuide;
40
+ export declare function renderMergeMethodPickerHtml(options: MergeMethodOption[] | null | undefined, t: TFn, escapeHtml: (s: string) => string, iconFor: (provider: string) => string, labelFor: (provider: string) => string, errorText?: string, guide?: MergeMethodGuide | null): string;
41
+ export declare function renderMergePromptHtml(email: string, candidates: readonly MergePromptCandidate[] | null | undefined, t: TFn, escapeHtml: (s: string) => string, iconFor: (provider: string) => string, labelFor: (provider: string) => string, formatWhen: (iso: string) => string, hiddenProviders: readonly string[] | null | undefined): string;
42
+ export {};
12
43
  //# sourceMappingURL=merge-method-picker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"merge-method-picker.d.ts","sourceRoot":"","sources":["../../../src/pages/admin/merge-method-picker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAExE,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,gBAAgB,CAAC;IACzB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,iBAAiB,EAAE,EAC5B,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,MAAM,EAC3D,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EACjC,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,EACrC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,GACrC,MAAM,CAuCR"}
1
+ {"version":3,"file":"merge-method-picker.d.ts","sourceRoot":"","sources":["../../../src/pages/admin/merge-method-picker.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAExE,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,gBAAgB,CAAC;IACzB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,KAAK,GAAG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC;AAEpE,oFAAoF;AACpF,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,GAAG,MAAM,CAsBpH;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE;IAAE,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,EACjH,OAAO,EAAE,SAAS,iBAAiB,EAAE,GAAG,IAAI,GAAG,SAAS,EACxD,eAAe,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,GACpD,gBAAgB,CAmDlB;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,iBAAiB,EAAE,GAAG,IAAI,GAAG,SAAS,EAC/C,CAAC,EAAE,GAAG,EACN,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EACjC,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,EACrC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,EACtC,SAAS,CAAC,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,gBAAgB,GAAG,IAAI,GAC9B,MAAM,CAqER;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,SAAS,oBAAoB,EAAE,GAAG,IAAI,GAAG,SAAS,EAC9D,CAAC,EAAE,GAAG,EACN,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EACjC,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,EACrC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,EACtC,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,EACnC,eAAe,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,GACpD,MAAM,CAkDR"}