@arcblock/did-connect-service 4.1.61 → 4.1.63

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 +14 -0
  61. package/dist/pages/oauth-callback-page.d.ts.map +1 -1
  62. package/dist/pages/oauth-callback-page.js +35 -3
  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
@@ -140,6 +140,11 @@ const en = {
140
140
  mergeAccount: "Merge another account",
141
141
  mergeAccountHint: "Sign in as the other account to move its login methods here. DID Space is not copied.",
142
142
  mergeChooseMethod: "Prove the other account",
143
+ mergeStart: "Merge another account…",
144
+ mergeEmailSwitchMethod: "Try another method",
145
+ mergeEmailRequestNewCode: "To try again, request a new code.",
146
+ mergeEmailResend: "Request a new code",
147
+ mergeEmailResendWait: "Request a new code ({seconds}s)",
143
148
  mergeProveWallet: "Prove the other account with DID Wallet",
144
149
  mergeProvePasskey: "Prove the other account with a passkey",
145
150
  mergeProveOAuth: "Prove the other account with {provider}",
@@ -150,18 +155,49 @@ const en = {
150
155
  mergePasskeyUnavailable: "Passkeys are not available in this browser",
151
156
  mergePopupClosed: "Sign-in window closed",
152
157
  mergeConfirmTitle: "Confirm account merge",
153
- mergeConfirmMsg: "Credentials will move to this account. DID Space stays at /user/.archive/{did}/ (not copied).",
158
+ mergeConfirmMsg: "Credentials move to the kept account. DID Space is not copied.",
159
+ mergeConfirmChoose: "Which account's DID do you want to keep?",
160
+ mergeConfirmMatch: "This is the account that shares {email}.",
161
+ mergeConfirmNotMatch: "This is not the prompted account, but it can still be merged.",
162
+ mergeConfirmRecommended: "Recommended",
163
+ mergeConfirmCurrent: "Signed-in account",
164
+ mergeConfirmCreated: "Created {date}",
165
+ mergeConfirmReasonLead: "Recommended: keep {did}. {reason}",
166
+ mergeConfirmReasonHigher: "It has a higher permission.",
167
+ mergeConfirmReasonHandle: "It has the handle @{handle}.",
168
+ mergeConfirmReasonWallet: "Its DID comes from your DID Wallet.",
169
+ mergeConfirmReasonOlder: "It was created earlier.",
170
+ mergeConfirmReasonSimilar: "The two accounts are similar, so the signed-in account stays.",
171
+ mergeConfirmAlias: "The other DID becomes an alias. Its original login methods still sign in to the kept account.",
172
+ mergeConfirmChanges: "After the merge",
173
+ mergeConfirmMovedMethods: "Login methods moved to the kept account: {methods}",
174
+ mergeConfirmGlobalRole: "Global role: {before} → {after}",
175
+ mergeConfirmSpaceRole: "{space}: {before} → {after}",
176
+ mergeConfirmSpaceRoleUnnamed: "{before} → {after}",
177
+ mergeConfirmJoinedSpaces: "Newly joined spaces: {spaces}",
178
+ mergeConfirmJoinedSpace: "{space} ({role})",
179
+ mergeConfirmJoinedSpaceUnnamed: "{role}",
180
+ mergeConfirmHandleStays: "The handle @{handle} stays on {did} and will not appear on the kept account.",
181
+ mergeConfirmNameAvatar: "{did}'s name and avatar are not kept.",
182
+ mergeConfirmDidSpaceNotCopied: "DID Space: {did}'s data is not copied to the kept account.",
183
+ mergeConfirmHostMaybe: "If other apps used {did} (for example a published blocklet, or Slack or X authorization), they may need to be linked again.",
184
+ mergeConfirmSubmitKeep: "Merge accounts",
185
+ mergeConfirmSubmitSwitch: "Merge and switch to {did}",
186
+ mergeConfirmLoading: "Updating the change list…",
187
+ mergeDoneTitle: "Merged",
188
+ mergeDoneDid: "Your DID is {did}.",
189
+ mergeDoneMethods: "You can now sign in with {methods}.",
190
+ mergeDoneFinish: "Finish",
154
191
  mergeConfirmSurviving: "After merge you will keep {intoDid}. {fromDid} will be merged in and will no longer work on its own.",
155
- mergeConfirmKeepOther: "Want to keep the other account instead? Sign out, sign in as that account, then start merge again.",
156
192
  mergeConfirmCredentials: "Login methods that will move",
157
193
  mergeConfirmSkipped: "Login methods that will not move",
158
194
  mergeConfirmSkippedReason: "This login method exists on both accounts, so it stays on the original account.",
159
195
  mergeConfirmRoles: "Permission changes",
160
196
  mergeConfirmRoleChange: "{fromRole} on the other account becomes {keptRole} (this account is currently {intoRoleBefore}).",
161
197
  mergeConfirmAccessKeysTitle: "Access keys",
162
- mergeConfirmAccessKeys: "{count} access key(s) will move to this account.",
198
+ mergeConfirmAccessKeys: "{count} access key(s) will move to the kept account.",
163
199
  mergeConfirmDidSpaceTitle: "DID Space",
164
- mergeDidSpace: "DID Space is not copied. After merge it is available read-only at {pointer}.",
200
+ mergeDidSpace: "DID Space is not copied to the kept account.",
165
201
  mergeConfirmHostWarnings: "Other effects",
166
202
  mergeHostBlockletOwnerClash: "Published blocklets or domains owned by the other account may conflict after merge.",
167
203
  mergeHostExternalTokenRebind: "External authorizations such as Slack or X stay bound to the original account and need to be reconnected.",
@@ -170,10 +206,30 @@ const en = {
170
206
  mergeSuccess: "Accounts merged",
171
207
  mergeFailed: "Account merge failed",
172
208
  mergeCancelled: "Merge cancelled",
173
- mergePromptTitle: "Another account shares this email",
174
- mergePromptBody: "Another account uses the same verified email. You can merge it into this account — this is the one that will survive.",
175
- mergePromptAction: "Merge now",
176
- mergePromptDismiss: "Dismiss",
209
+ mergePromptTitle: "Another account also verified this email",
210
+ mergePromptBody: "If this is also yours, you can merge it into the current account. You will preview the merge before anything changes.",
211
+ mergePromptAction: "Merge this account",
212
+ mergePromptDismiss: "Not now",
213
+ mergePromptTitleOne: "Your email {email} is also verified on another account",
214
+ mergePromptTitleMany: "Your email {email} is also verified on {count} other accounts",
215
+ mergePromptBodyOne: "If this is also yours, you can merge it into the current account. You will preview it first. Nothing changes until you confirm.",
216
+ mergePromptBodyMany: "If these are also yours, you can merge them into the current account. You will preview each one first. Nothing changes until you confirm.",
217
+ mergePromptMergeThis: "Merge this account",
218
+ mergePromptNotMine: "Not mine",
219
+ mergePromptLater: "Not now",
220
+ mergePromptCreated: "Created {when}",
221
+ mergePromptLastLogin: "Last sign-in {when}",
222
+ mergePromptToday: "today",
223
+ mergePromptDayAgo: "1 day ago",
224
+ mergePromptDaysAgo: "{count} days ago",
225
+ mergePromptMonthAgo: "1 month ago",
226
+ mergePromptMonthsAgo: "{count} months ago",
227
+ mergePromptMethodSep: ", ",
228
+ mergePromptMethodsDisabled: "This account's sign-in methods are turned off on this site and can't be used directly. Contact an administrator.",
229
+ mergeCandidateProveHint: "Sign in with one of this account's methods to prove it is yours. This does not switch your current login.",
230
+ mergeProveEmailAddress: "Sign in with {email}",
231
+ mergePromptMethodsLabel: "Sign-in methods this account uses",
232
+ mergePromptOtherMethods: "Other methods",
177
233
  },
178
234
  members: {
179
235
  title: "Members",
@@ -855,6 +911,11 @@ const zh = {
855
911
  mergeAccount: "\u5408\u5E76\u53E6\u4E00\u4E2A\u8D26\u53F7",
856
912
  mergeAccountHint: "\u8BF7\u7528\u53E6\u4E00\u4E2A\u8D26\u53F7\u767B\u5F55\u4EE5\u5C06\u5176\u767B\u5F55\u65B9\u5F0F\u8FC1\u5230\u6B64\u5904\u3002DID Space \u4E0D\u4F1A\u88AB\u590D\u5236\u3002",
857
913
  mergeChooseMethod: "\u8BC1\u660E\u53E6\u4E00\u4E2A\u8D26\u53F7",
914
+ mergeStart: "\u5408\u5E76\u53E6\u4E00\u4E2A\u8D26\u53F7\u2026",
915
+ mergeEmailSwitchMethod: "\u6362\u4E00\u79CD\u65B9\u5F0F",
916
+ mergeEmailRequestNewCode: "\u5982\u9700\u91CD\u8BD5\uFF0C\u8BF7\u91CD\u65B0\u83B7\u53D6\u9A8C\u8BC1\u7801\u3002",
917
+ mergeEmailResend: "\u91CD\u65B0\u83B7\u53D6\u9A8C\u8BC1\u7801",
918
+ mergeEmailResendWait: "\u91CD\u65B0\u83B7\u53D6\u9A8C\u8BC1\u7801 ({seconds}s)",
858
919
  mergeProveWallet: "\u7528 DID Wallet \u8BC1\u660E\u53E6\u4E00\u4E2A\u8D26\u53F7",
859
920
  mergeProvePasskey: "\u7528\u901A\u884C\u5BC6\u94A5\u8BC1\u660E\u53E6\u4E00\u4E2A\u8D26\u53F7",
860
921
  mergeProveOAuth: "\u7528 {provider} \u8BC1\u660E\u53E6\u4E00\u4E2A\u8D26\u53F7",
@@ -864,31 +925,82 @@ const zh = {
864
925
  mergeEmailCodePlaceholder: "00000000",
865
926
  mergePasskeyUnavailable: "\u5F53\u524D\u6D4F\u89C8\u5668\u4E0D\u652F\u6301\u901A\u884C\u5BC6\u94A5",
866
927
  mergePopupClosed: "\u767B\u5F55\u7A97\u53E3\u5DF2\u5173\u95ED",
867
- mergeConfirmTitle: "\u786E\u8BA4\u5408\u5E76\u8D26\u53F7",
868
- mergeConfirmMsg: "\u51ED\u8BC1\u4F1A\u8FC1\u5230\u5F53\u524D\u8D26\u53F7\u3002DID Space \u4ECD\u5728 /user/.archive/{did}/\uff08\u4E0D\u590D\u5236\uff09\u3002",
869
- mergeConfirmSurviving: "\u5408\u5E76\u540E\u4F60\u5C06\u4FDD\u7559 {intoDid}\u3002{fromDid} \u4F1A\u88AB\u5E76\u5165\u5E76\u505C\u6B62\u72EC\u7ACB\u4F7F\u7528\u3002",
870
- mergeConfirmKeepOther: "\u60F3\u4FDD\u7559\u53E6\u4E00\u4E2A\u8D26\u53F7\uFF1F\u8BF7\u5148\u9000\u51FA\uFF0C\u7528\u90A3\u4E2A\u8D26\u53F7\u767B\u5F55\uFF0C\u518D\u53D1\u8D77\u5408\u5E76\u3002",
871
- mergeConfirmCredentials: "\u5C06\u8981\u8FC1\u79FB\u7684\u767B\u5F55\u65B9\u5F0F",
872
- mergeConfirmSkipped: "\u4E0D\u4F1A\u8FC1\u79FB\u7684\u767B\u5F55\u65B9\u5F0F",
873
- mergeConfirmSkippedReason: "\u8FD9\u4E2A\u767B\u5F55\u65B9\u5F0F\u5728\u4E24\u4E2A\u8D26\u53F7\u4E0A\u90FD\u6709\uFF0C\u56E0\u6B64\u4ECD\u4F1A\u7559\u5728\u539F\u8D26\u53F7\u4E0A\u3002",
874
- mergeConfirmRoles: "\u6743\u9650\u53D8\u66F4",
875
- mergeConfirmRoleChange: "\u53E6\u4E00\u8D26\u53F7\u7684 {fromRole} \u5C06\u53D8\u4E3A {keptRole}\uff08\u5F53\u524D\u8D26\u53F7\u73B0\u4E3A {intoRoleBefore}\uff09\u3002",
876
- mergeConfirmAccessKeysTitle: "\u8BBF\u95EE\u5BC6\u94A5",
877
- mergeConfirmAccessKeys: "{count} \u4E2A\u8BBF\u95EE\u5BC6\u94A5\u5C06\u8FC1\u5230\u5F53\u524D\u8D26\u53F7\u3002",
928
+ mergeConfirmTitle: "确认合并账户",
929
+ mergeConfirmMsg: "凭证会迁到保留的账户。DID Space 不会被复制。",
930
+ mergeConfirmChoose: "保留哪个账户的 DID?",
931
+ mergeConfirmMatch: "这就是和你共用 {email} 的账户。",
932
+ mergeConfirmNotMatch: "这不是提示中的那个账户,但同样可以合并。",
933
+ mergeConfirmRecommended: "推荐",
934
+ mergeConfirmCurrent: "当前登录的账户",
935
+ mergeConfirmCreated: "创建于 {date}",
936
+ mergeConfirmReasonLead: "推荐保留 {did}:{reason}",
937
+ mergeConfirmReasonHigher: "它的权限更高。",
938
+ mergeConfirmReasonHandle: "它有 handle @{handle}。",
939
+ mergeConfirmReasonWallet: "它的 DID 来自你的 DID Wallet。",
940
+ mergeConfirmReasonOlder: "它创建得更早。",
941
+ mergeConfirmReasonSimilar: "两个账户情况相近,默认保留当前登录的账户。",
942
+ mergeConfirmAlias: "另一个 DID 会变成别名,用它原来的登录方式仍能登录,进入的是保留的账户。",
943
+ mergeConfirmChanges: "合并后",
944
+ mergeConfirmMovedMethods: "迁移到保留账户的登录方式:{methods}",
945
+ mergeConfirmGlobalRole: "全局角色:{before} → {after}",
946
+ mergeConfirmSpaceRole: "{space}:{before} → {after}",
947
+ mergeConfirmSpaceRoleUnnamed: "{before} → {after}",
948
+ mergeConfirmJoinedSpaces: "新加入的空间:{spaces}",
949
+ mergeConfirmJoinedSpace: "{space}({role})",
950
+ mergeConfirmJoinedSpaceUnnamed: "{role}",
951
+ mergeConfirmHandleStays: "handle @{handle} 留在 {did} 上,不会出现在保留的账户里。",
952
+ mergeConfirmNameAvatar: "{did} 的名字和头像不会保留。",
953
+ mergeConfirmDidSpaceNotCopied: "DID Space:{did} 的数据不会复制到保留的账户。",
954
+ mergeConfirmHostMaybe: "如果在其他应用里用过 {did}(例如发布的 blocklet、Slack/X 授权),这些可能需要重新绑定。",
955
+ mergeConfirmSubmitKeep: "合并账户",
956
+ mergeConfirmSubmitSwitch: "合并并切换到 {did}",
957
+ mergeConfirmLoading: "正在更新变更列表…",
958
+ mergeDoneTitle: "已合并",
959
+ mergeDoneDid: "你的 DID 是 {did}。",
960
+ mergeDoneMethods: "现在可以用 {methods} 登录。",
961
+ mergeDoneFinish: "完成",
962
+ mergeConfirmSurviving: "合并后你将保留 {intoDid}。{fromDid} 会被并入并停止独立使用。",
963
+ mergeConfirmCredentials: "将要迁移的登录方式",
964
+ mergeConfirmSkipped: "不会迁移的登录方式",
965
+ mergeConfirmSkippedReason: "这个登录方式在两个账户上都有,因此仍会留在原账户上。",
966
+ mergeConfirmRoles: "权限变更",
967
+ mergeConfirmRoleChange: "另一账户的 {fromRole} 将变为 {keptRole}(当前账户现为 {intoRoleBefore})。",
968
+ mergeConfirmAccessKeysTitle: "访问密钥",
969
+ mergeConfirmAccessKeys: "{count} 个访问密钥将迁到保留的账户。",
878
970
  mergeConfirmDidSpaceTitle: "DID Space",
879
- mergeDidSpace: "DID Space \u4E0D\u4F1A\u88AB\u590D\u5236\u3002\u5408\u5E76\u540E\u53EA\u8BFB\u53EF\u7528\u4E8E {pointer}\u3002",
880
- mergeConfirmHostWarnings: "\u5176\u4ED6\u5F71\u54CD",
881
- mergeHostBlockletOwnerClash: "\u53E6\u4E00\u8D26\u53F7\u5DF2\u53D1\u5E03\u7684 blocklet \u6216\u57DF\u540D\u5728\u5408\u5E76\u540E\u53EF\u80FD\u51B2\u7A81\u3002",
882
- mergeHostExternalTokenRebind: "Slack\u3001X \u7B49\u5916\u90E8\u6388\u6743\u4ECD\u7ED1\u5728\u539F DID \u4E0A\uFF0C\u9700\u8981\u91CD\u65B0\u6388\u6743\u3002",
883
- mergeConfirmIrreversible: "\u6B64\u64CD\u4F5C\u4E0D\u53EF\u64A4\u9500\u3002",
884
- mergeConfirmTooLarge: "\u6B64\u6B21\u5408\u5E76\u89C4\u6A21\u8FC7\u5927\uFF0C\u65E0\u6CD5\u81EA\u52A8\u5B8C\u6210\u3002\u8BF7\u62C6\u5206\u8D26\u53F7\u6216\u6539\u4E3A\u624B\u52A8\u5904\u7406\u3002",
971
+ mergeDidSpace: "DID Space 不会复制到保留的账户。",
972
+ mergeConfirmHostWarnings: "其他影响",
973
+ mergeHostBlockletOwnerClash: "另一账户已发布的 blocklet 或域名在合并后可能冲突。",
974
+ mergeHostExternalTokenRebind: "Slack、X 等外部授权仍绑在原 DID 上,需要重新授权。",
975
+ mergeConfirmIrreversible: "此操作不可撤销。",
976
+ mergeConfirmTooLarge: "此次合并规模过大,无法自动完成。请拆分账户或改为手动处理。",
885
977
  mergeSuccess: "\u8D26\u53F7\u5DF2\u5408\u5E76",
886
978
  mergeFailed: "\u8D26\u53F7\u5408\u5E76\u5931\u8D25",
887
979
  mergeCancelled: "\u5DF2\u53D6\u6D88\u5408\u5E76",
888
- mergePromptTitle: "\u53E6\u4E00\u4E2A\u8D26\u53F7\u4F7F\u7528\u4E86\u6B64\u90AE\u7BB1",
889
- mergePromptBody: "\u53E6\u4E00\u4E2A\u8D26\u53F7\u4E0E\u5F53\u524D\u8D26\u53F7\u5171\u4EAB\u540C\u4E00\u5DF2\u9A8C\u8BC1\u90AE\u7BB1\u3002\u4F60\u53EF\u4EE5\u628A\u5B83\u5408\u5E76\u5230\u5F53\u524D\u8D26\u53F7\u2014\u2014\u5F53\u524D\u767B\u5F55\u7684\u8D26\u53F7\u4F1A\u4FDD\u7559\u3002",
890
- mergePromptAction: "\u7ACB\u5373\u5408\u5E76",
891
- mergePromptDismiss: "\u6682\u4E0D\u5904\u7406",
980
+ mergePromptTitle: "\u53E6\u4E00\u4E2A\u8D26\u53F7\u4E5F\u9A8C\u8BC1\u8FC7\u8FD9\u4E2A\u90AE\u7BB1",
981
+ mergePromptBody: "\u5982\u679C\u8FD9\u4E5F\u662F\u4F60\u7684\uFF0C\u53EF\u4EE5\u628A\u5B83\u5408\u5E76\u5230\u5F53\u524D\u8D26\u6237\u3002\u5408\u5E76\u524D\u4F1A\u5148\u8BA9\u4F60\u9884\u89C8\uFF0C\u786E\u8BA4\u4E4B\u524D\u4E0D\u4F1A\u505A\u4EFB\u4F55\u6539\u52A8\u3002",
982
+ mergePromptAction: "\u5408\u5E76\u8FD9\u4E2A\u8D26\u6237",
983
+ mergePromptDismiss: "\u4EE5\u540E\u518D\u8BF4",
984
+ mergePromptTitleOne: "\u4F60\u7684\u90AE\u7BB1 {email} \u8FD8\u9A8C\u8BC1\u8FC7\u53E6\u4E00\u4E2A\u8D26\u6237",
985
+ mergePromptTitleMany: "\u4F60\u7684\u90AE\u7BB1 {email} \u8FD8\u9A8C\u8BC1\u8FC7 {count} \u4E2A\u8D26\u6237",
986
+ mergePromptBodyOne: "\u5982\u679C\u8FD9\u4E5F\u662F\u4F60\u7684\uFF0C\u53EF\u4EE5\u628A\u5B83\u5408\u5E76\u5230\u5F53\u524D\u8D26\u6237\u3002\u5408\u5E76\u524D\u4F1A\u5148\u8BA9\u4F60\u9884\u89C8\uFF0C\u786E\u8BA4\u4E4B\u524D\u4E0D\u4F1A\u505A\u4EFB\u4F55\u6539\u52A8\u3002",
987
+ mergePromptBodyMany: "\u5982\u679C\u5B83\u4EEC\u4E5F\u662F\u4F60\u7684\uFF0C\u53EF\u4EE5\u5408\u5E76\u5230\u5F53\u524D\u8D26\u6237\u3002\u5408\u5E76\u524D\u4F1A\u5148\u8BA9\u4F60\u9884\u89C8\uFF0C\u786E\u8BA4\u4E4B\u524D\u4E0D\u4F1A\u505A\u4EFB\u4F55\u6539\u52A8\u3002",
988
+ mergePromptMergeThis: "\u5408\u5E76\u8FD9\u4E2A\u8D26\u6237",
989
+ mergePromptNotMine: "\u4E0D\u662F\u6211\u7684",
990
+ mergePromptLater: "\u4EE5\u540E\u518D\u8BF4",
991
+ mergePromptCreated: "\u521B\u5EFA\u4E8E {when}",
992
+ mergePromptLastLogin: "\u6700\u8FD1\u767B\u5F55 {when}",
993
+ mergePromptToday: "\u4ECA\u5929",
994
+ mergePromptDayAgo: "1 \u5929\u524D",
995
+ mergePromptDaysAgo: "{count} \u5929\u524D",
996
+ mergePromptMonthAgo: "1 \u4E2A\u6708\u524D",
997
+ mergePromptMonthsAgo: "{count} \u4E2A\u6708\u524D",
998
+ mergePromptMethodSep: "\u3001",
999
+ mergePromptMethodsDisabled: "\u8FD9\u4E2A\u8D26\u6237\u7684\u767B\u5F55\u65B9\u5F0F\u5728\u672C\u7AD9\u5DF2\u505C\u7528\uFF0C\u65E0\u6CD5\u76F4\u63A5\u8BC1\u660E\u3002\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u3002",
1000
+ mergeCandidateProveHint: "\u7528\u8FD9\u4E2A\u8D26\u6237\u7684\u767B\u5F55\u65B9\u5F0F\u767B\u5F55\uFF0C\u8BC1\u660E\u5B83\u662F\u4F60\u7684\u3002\u8FD9\u4E0D\u4F1A\u5207\u6362\u4F60\u5F53\u524D\u7684\u767B\u5F55\u3002",
1001
+ mergeProveEmailAddress: "\u7528 {email} \u767B\u5F55",
1002
+ mergePromptMethodsLabel: "\u8FD9\u4E2A\u8D26\u6237\u4F7F\u7528\u7684\u767B\u5F55\u65B9\u5F0F",
1003
+ mergePromptOtherMethods: "\u5176\u4ED6\u65B9\u5F0F",
892
1004
  },
893
1005
  members: {
894
1006
  title: "\u6210\u5458",
@@ -1573,6 +1685,11 @@ const zhTW = {
1573
1685
  mergeAccount: "合併另一個帳號",
1574
1686
  mergeAccountHint: "請用另一個帳號登入以將其登入方式遷到此處。DID Space 不會被複製。",
1575
1687
  mergeChooseMethod: "證明另一個帳號",
1688
+ mergeStart: "合併另一個帳號…",
1689
+ mergeEmailSwitchMethod: "換一種方式",
1690
+ mergeEmailRequestNewCode: "若要再試一次,請重新取得驗證碼。",
1691
+ mergeEmailResend: "重新取得驗證碼",
1692
+ mergeEmailResendWait: "重新取得驗證碼({seconds} 秒)",
1576
1693
  mergeProveWallet: "用 DID Wallet 證明另一個帳號",
1577
1694
  mergeProvePasskey: "用Passkey證明另一個帳號",
1578
1695
  mergeProveOAuth: "用 {provider} 證明另一個帳號",
@@ -1583,18 +1700,49 @@ const zhTW = {
1583
1700
  mergePasskeyUnavailable: "當前瀏覽器不支援Passkey",
1584
1701
  mergePopupClosed: "登入視窗已關閉",
1585
1702
  mergeConfirmTitle: "確認合併帳號",
1586
- mergeConfirmMsg: "憑證會遷到當前帳號。DID Space 仍在 /user/.archive/{did}/(不複製)。",
1703
+ mergeConfirmMsg: "憑證會遷到保留的帳號。DID Space 不會被複製。",
1704
+ mergeConfirmChoose: "要保留哪個帳號的 DID?",
1705
+ mergeConfirmMatch: "這就是和你共用 {email} 的帳號。",
1706
+ mergeConfirmNotMatch: "這不是提示中的那個帳號,但同樣可以合併。",
1707
+ mergeConfirmRecommended: "建議",
1708
+ mergeConfirmCurrent: "目前登入的帳號",
1709
+ mergeConfirmCreated: "建立於 {date}",
1710
+ mergeConfirmReasonLead: "建議保留 {did}:{reason}",
1711
+ mergeConfirmReasonHigher: "它的權限較高。",
1712
+ mergeConfirmReasonHandle: "它有 handle @{handle}。",
1713
+ mergeConfirmReasonWallet: "它的 DID 來自你的 DID Wallet。",
1714
+ mergeConfirmReasonOlder: "它建立得較早。",
1715
+ mergeConfirmReasonSimilar: "兩個帳號情況相近,預設保留目前登入的帳號。",
1716
+ mergeConfirmAlias: "另一個 DID 會變成別名,用它原來的登入方式仍能登入,進入的是保留的帳號。",
1717
+ mergeConfirmChanges: "合併後",
1718
+ mergeConfirmMovedMethods: "遷移到保留帳號的登入方式:{methods}",
1719
+ mergeConfirmGlobalRole: "全域角色:{before} → {after}",
1720
+ mergeConfirmSpaceRole: "{space}:{before} → {after}",
1721
+ mergeConfirmSpaceRoleUnnamed: "{before} → {after}",
1722
+ mergeConfirmJoinedSpaces: "新加入的空間:{spaces}",
1723
+ mergeConfirmJoinedSpace: "{space}({role})",
1724
+ mergeConfirmJoinedSpaceUnnamed: "{role}",
1725
+ mergeConfirmHandleStays: "handle @{handle} 留在 {did} 上,不會出現在保留的帳號裡。",
1726
+ mergeConfirmNameAvatar: "{did} 的名稱和頭像不會保留。",
1727
+ mergeConfirmDidSpaceNotCopied: "DID Space:{did} 的資料不會複製到保留的帳號。",
1728
+ mergeConfirmHostMaybe: "如果在其他應用程式用過 {did}(例如發布的 blocklet、Slack/X 授權),這些可能需要重新綁定。",
1729
+ mergeConfirmSubmitKeep: "合併帳號",
1730
+ mergeConfirmSubmitSwitch: "合併並切換到 {did}",
1731
+ mergeConfirmLoading: "正在更新變更清單…",
1732
+ mergeDoneTitle: "已合併",
1733
+ mergeDoneDid: "你的 DID 是 {did}。",
1734
+ mergeDoneMethods: "現在可以用 {methods} 登入。",
1735
+ mergeDoneFinish: "完成",
1587
1736
  mergeConfirmSurviving: "合併後您將保留 {intoDid}。{fromDid} 會被併入並停止獨立使用。",
1588
- mergeConfirmKeepOther: "想保留另一個帳號?請先登出,用那個帳號登入,再發起合併。",
1589
1737
  mergeConfirmCredentials: "將要遷移的登入方式",
1590
1738
  mergeConfirmSkipped: "不會遷移的登入方式",
1591
1739
  mergeConfirmSkippedReason: "這個登入方式在兩個帳號上都有,因此仍會留在原帳號上。",
1592
1740
  mergeConfirmRoles: "權限變更",
1593
- mergeConfirmRoleChange: "另一帳號的 {fromRole} 將變為 {keptRole}(當前帳號現為 {intoRoleBefore})。",
1741
+ mergeConfirmRoleChange: "另一帳號的 {fromRole} 將變為 {keptRole}(保留的帳號目前為 {intoRoleBefore})。",
1594
1742
  mergeConfirmAccessKeysTitle: "存取金鑰",
1595
- mergeConfirmAccessKeys: "{count} 個存取金鑰將遷到當前帳號。",
1743
+ mergeConfirmAccessKeys: "{count} 個存取金鑰將遷到保留的帳號。",
1596
1744
  mergeConfirmDidSpaceTitle: "DID Space",
1597
- mergeDidSpace: "DID Space 不會被複製。合併後只讀可用於 {pointer}。",
1745
+ mergeDidSpace: "DID Space 不會複製到保留的帳號。",
1598
1746
  mergeConfirmHostWarnings: "其他影響",
1599
1747
  mergeHostBlockletOwnerClash: "另一帳號已發布的 blocklet 或域名在合併後可能衝突。",
1600
1748
  mergeHostExternalTokenRebind: "Slack、X 等外部授權仍綁在原 DID 上,需要重新授權。",
@@ -1603,10 +1751,30 @@ const zhTW = {
1603
1751
  mergeSuccess: "帳號已合併",
1604
1752
  mergeFailed: "帳號合併失敗",
1605
1753
  mergeCancelled: "已取消合併",
1606
- mergePromptTitle: "另一個帳號使用了此電子郵件",
1607
- mergePromptBody: "另一個帳號與當前帳號共享同一已驗證電子郵件。您可以把它合併到當前帳號——當前登入的帳號會保留。",
1608
- mergePromptAction: "立即合併",
1609
- mergePromptDismiss: "暫不處理",
1754
+ mergePromptTitle: "另一個帳號也驗證過這個電子郵件",
1755
+ mergePromptBody: "如果這也是你的,可以把它合併到當前帳號。合併前會先讓你預覽,確認之前不會做任何改動。",
1756
+ mergePromptAction: "合併這個帳號",
1757
+ mergePromptDismiss: "以後再說",
1758
+ mergePromptTitleOne: "你的電子郵件 {email} 也驗證過另一個帳號",
1759
+ mergePromptTitleMany: "你的電子郵件 {email} 也驗證過 {count} 個帳號",
1760
+ mergePromptBodyOne: "如果這也是你的,可以把它合併到當前帳號。合併前會先讓你預覽,確認之前不會做任何改動。",
1761
+ mergePromptBodyMany: "如果它們也是你的,可以合併到當前帳號。合併前會先讓你預覽,確認之前不會做任何改動。",
1762
+ mergePromptMergeThis: "合併這個帳號",
1763
+ mergePromptNotMine: "不是我的",
1764
+ mergePromptLater: "以後再說",
1765
+ mergePromptCreated: "建立於 {when}",
1766
+ mergePromptLastLogin: "最近登入 {when}",
1767
+ mergePromptToday: "今天",
1768
+ mergePromptDayAgo: "1 天前",
1769
+ mergePromptDaysAgo: "{count} 天前",
1770
+ mergePromptMonthAgo: "1 個月前",
1771
+ mergePromptMonthsAgo: "{count} 個月前",
1772
+ mergePromptMethodSep: "、",
1773
+ mergePromptMethodsDisabled: "這個帳號的登入方式在本站已停用,無法直接證明。請聯絡管理員。",
1774
+ mergeCandidateProveHint: "用這個帳號的登入方式登入,證明它是你的。這不會切換你目前的登入。",
1775
+ mergeProveEmailAddress: "用 {email} 登入",
1776
+ mergePromptMethodsLabel: "這個帳號使用的登入方式",
1777
+ mergePromptOtherMethods: "其他方式",
1610
1778
  },
1611
1779
  members: {
1612
1780
  title: "成員",
@@ -2288,6 +2456,11 @@ const ja = {
2288
2456
  mergeAccount: "別のアカウントを統合",
2289
2457
  mergeAccountHint: "もう一方のアカウントでログインし、そのログイン方法をこちらへ移します。DID Space はコピーされません。",
2290
2458
  mergeChooseMethod: "もう一方のアカウントを証明します",
2459
+ mergeStart: "別のアカウントを統合…",
2460
+ mergeEmailSwitchMethod: "別の方法を試す",
2461
+ mergeEmailRequestNewCode: "再試行するには、確認コードを再取得してください。",
2462
+ mergeEmailResend: "確認コードを再取得",
2463
+ mergeEmailResendWait: "確認コードを再取得({seconds}秒)",
2291
2464
  mergeProveWallet: "DID Wallet でもう一方のアカウントを証明します",
2292
2465
  mergeProvePasskey: "Passkey でもう一方のアカウントを証明します",
2293
2466
  mergeProveOAuth: "{provider} でもう一方のアカウントを証明します",
@@ -2298,18 +2471,49 @@ const ja = {
2298
2471
  mergePasskeyUnavailable: "このブラウザでは Passkey を利用できません",
2299
2472
  mergePopupClosed: "ログインウィンドウが閉じられました",
2300
2473
  mergeConfirmTitle: "アカウント統合の確認",
2301
- mergeConfirmMsg: "資格情報はこのアカウントへ移ります。DID Space は /user/.archive/{did}/ に残り、コピーされません。",
2474
+ mergeConfirmMsg: "資格情報は残すアカウントへ移ります。DID Space はコピーされません。",
2475
+ mergeConfirmChoose: "どちらのアカウントの DID を残しますか?",
2476
+ mergeConfirmMatch: "これは {email} を共有しているアカウントです。",
2477
+ mergeConfirmNotMatch: "これは案内されたアカウントではありませんが、同じように統合できます。",
2478
+ mergeConfirmRecommended: "推奨",
2479
+ mergeConfirmCurrent: "現在ログイン中のアカウント",
2480
+ mergeConfirmCreated: "作成日 {date}",
2481
+ mergeConfirmReasonLead: "{did} を残すことを推奨します。{reason}",
2482
+ mergeConfirmReasonHigher: "権限がより高いです。",
2483
+ mergeConfirmReasonHandle: "handle @{handle} があります。",
2484
+ mergeConfirmReasonWallet: "DID は DID Wallet のものです。",
2485
+ mergeConfirmReasonOlder: "作成日がより早いです。",
2486
+ mergeConfirmReasonSimilar: "2つのアカウントは近いので、ログイン中のアカウントを残します。",
2487
+ mergeConfirmAlias: "もう一方の DID は別名になります。元のログイン方法でも、残したアカウントにサインインできます。",
2488
+ mergeConfirmChanges: "統合後",
2489
+ mergeConfirmMovedMethods: "残すアカウントへ移るログイン方法:{methods}",
2490
+ mergeConfirmGlobalRole: "グローバルロール:{before} → {after}",
2491
+ mergeConfirmSpaceRole: "{space}:{before} → {after}",
2492
+ mergeConfirmSpaceRoleUnnamed: "{before} → {after}",
2493
+ mergeConfirmJoinedSpaces: "新しく参加するスペース:{spaces}",
2494
+ mergeConfirmJoinedSpace: "{space}({role})",
2495
+ mergeConfirmJoinedSpaceUnnamed: "{role}",
2496
+ mergeConfirmHandleStays: "handle @{handle} は {did} に残り、残すアカウントには表示されません。",
2497
+ mergeConfirmNameAvatar: "{did} の名前とアバターは残りません。",
2498
+ mergeConfirmDidSpaceNotCopied: "DID Space:{did} のデータは残すアカウントへコピーされません。",
2499
+ mergeConfirmHostMaybe: "他のアプリで {did} を使っていた場合(公開した blocklet、Slack/X の認可など)、結び直しが必要になることがあります。",
2500
+ mergeConfirmSubmitKeep: "アカウントを統合",
2501
+ mergeConfirmSubmitSwitch: "{did} に統合して切り替える",
2502
+ mergeConfirmLoading: "変更一覧を更新しています…",
2503
+ mergeDoneTitle: "統合しました",
2504
+ mergeDoneDid: "あなたの DID は {did} です。",
2505
+ mergeDoneMethods: "今後は {methods} でサインインできます。",
2506
+ mergeDoneFinish: "完了",
2302
2507
  mergeConfirmSurviving: "統合後は {intoDid} が残ります。{fromDid} は統合され、単独では使えなくなります。",
2303
- mergeConfirmKeepOther: "もう一方のアカウントを残しますか?一度ログアウトし、そのアカウントでログインしてから、統合をやり直してください。",
2304
2508
  mergeConfirmCredentials: "移動するログイン方法",
2305
2509
  mergeConfirmSkipped: "移動しないログイン方法",
2306
2510
  mergeConfirmSkippedReason: "このログイン方法は両方のアカウントにあるため、元のアカウントに残ります。",
2307
2511
  mergeConfirmRoles: "権限の変更",
2308
- mergeConfirmRoleChange: "もう一方のアカウントの {fromRole} は {keptRole} になります(このアカウントは現在 {intoRoleBefore} です)。",
2512
+ mergeConfirmRoleChange: "もう一方のアカウントの {fromRole} は {keptRole} になります(残すアカウントは現在 {intoRoleBefore} です)。",
2309
2513
  mergeConfirmAccessKeysTitle: "アクセスキー",
2310
- mergeConfirmAccessKeys: "{count} 件のアクセスキーがこのアカウントへ移ります。",
2514
+ mergeConfirmAccessKeys: "{count} 件のアクセスキーが残すアカウントへ移ります。",
2311
2515
  mergeConfirmDidSpaceTitle: "DID Space",
2312
- mergeDidSpace: "DID Space はコピーされません。統合後は {pointer} で読み取り専用になります。",
2516
+ mergeDidSpace: "DID Space は残すアカウントへコピーされません。",
2313
2517
  mergeConfirmHostWarnings: "その他の影響",
2314
2518
  mergeHostBlockletOwnerClash: "もう一方のアカウントが公開した blocklet やドメインは、統合後に競合することがあります。",
2315
2519
  mergeHostExternalTokenRebind: "Slack や X などの外部認可は元のアカウントに紐づいたままなので、再連携が必要です。",
@@ -2318,10 +2522,30 @@ const ja = {
2318
2522
  mergeSuccess: "アカウントを統合しました",
2319
2523
  mergeFailed: "アカウントを統合できませんでした",
2320
2524
  mergeCancelled: "統合をキャンセルしました",
2321
- mergePromptTitle: "同じメールの別アカウントがあります",
2322
- mergePromptBody: "別のアカウントが同じ確認済みメールを使っています。このアカウントへ統合できます。残るのは現在のアカウントです。",
2323
- mergePromptAction: "今すぐ統合",
2324
- mergePromptDismiss: "後で",
2525
+ mergePromptTitle: "同じメールを確認済みの別アカウントがあります",
2526
+ mergePromptBody: "これもあなたのものなら、現在のアカウントへ統合できます。確認するまで何も変更されません。先にプレビューします。",
2527
+ mergePromptAction: "このアカウントを統合",
2528
+ mergePromptDismiss: "あとで",
2529
+ mergePromptTitleOne: "メール {email} は別のアカウントでも確認済みです",
2530
+ mergePromptTitleMany: "メール {email} は他 {count} 件のアカウントでも確認済みです",
2531
+ mergePromptBodyOne: "これもあなたのものなら、現在のアカウントへ統合できます。確認するまで何も変更されません。先にプレビューします。",
2532
+ mergePromptBodyMany: "これらもあなたのものなら、現在のアカウントへ統合できます。確認するまで何も変更されません。先にプレビューします。",
2533
+ mergePromptMergeThis: "このアカウントを統合",
2534
+ mergePromptNotMine: "自分のではない",
2535
+ mergePromptLater: "あとで",
2536
+ mergePromptCreated: "作成 {when}",
2537
+ mergePromptLastLogin: "最終ログイン {when}",
2538
+ mergePromptToday: "今日",
2539
+ mergePromptDayAgo: "1日前",
2540
+ mergePromptDaysAgo: "{count}日前",
2541
+ mergePromptMonthAgo: "1か月前",
2542
+ mergePromptMonthsAgo: "{count}か月前",
2543
+ mergePromptMethodSep: "、",
2544
+ mergePromptMethodsDisabled: "このアカウントのログイン方法はこのサイトで停止されているため、直接証明できません。管理者に連絡してください。",
2545
+ mergeCandidateProveHint: "このアカウントのログイン方法でサインインして、本人であることを証明します。現在のログインは切り替わりません。",
2546
+ mergeProveEmailAddress: "{email} でログイン",
2547
+ mergePromptMethodsLabel: "このアカウントが使っているログイン方法",
2548
+ mergePromptOtherMethods: "その他の方法",
2325
2549
  },
2326
2550
  members: {
2327
2551
  title: "メンバー",