@openora/core 0.4.1-canary.169 → 0.4.1-canary.170

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 (81) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/audit/__tests__/map-event.test.js +53 -0
  3. package/dist/audit/__tests__/map-event.test.js.map +1 -1
  4. package/dist/audit/plugin.d.ts.map +1 -1
  5. package/dist/audit/plugin.js +23 -3
  6. package/dist/audit/plugin.js.map +1 -1
  7. package/dist/compliance/service/rg-self-service.service.js +2 -2
  8. package/dist/compliance/service/rg-self-service.service.js.map +1 -1
  9. package/dist/compliance/service/rg.service.d.ts +1 -1
  10. package/dist/compliance/service/rg.service.d.ts.map +1 -1
  11. package/dist/compliance/service/rg.service.js +11 -5
  12. package/dist/compliance/service/rg.service.js.map +1 -1
  13. package/dist/contracts/adapters/mail.d.ts +2 -0
  14. package/dist/contracts/adapters/mail.d.ts.map +1 -1
  15. package/dist/contracts/adapters/mail.js.map +1 -1
  16. package/dist/contracts/schemas/events.d.ts +9 -1
  17. package/dist/contracts/schemas/events.d.ts.map +1 -1
  18. package/dist/contracts/schemas/events.js +14 -3
  19. package/dist/contracts/schemas/events.js.map +1 -1
  20. package/dist/contracts/schemas/identity.d.ts +9 -2
  21. package/dist/contracts/schemas/identity.d.ts.map +1 -1
  22. package/dist/contracts/schemas/identity.js +10 -1
  23. package/dist/contracts/schemas/identity.js.map +1 -1
  24. package/dist/contracts/schemas/mail.d.ts +115 -5
  25. package/dist/contracts/schemas/mail.d.ts.map +1 -1
  26. package/dist/contracts/schemas/mail.js +32 -3
  27. package/dist/contracts/schemas/mail.js.map +1 -1
  28. package/dist/engagement/notifications/__tests__/notification-event-map.test.js +21 -3
  29. package/dist/engagement/notifications/__tests__/notification-event-map.test.js.map +1 -1
  30. package/dist/engagement/notifications/plugin.d.ts.map +1 -1
  31. package/dist/engagement/notifications/plugin.js +38 -2
  32. package/dist/engagement/notifications/plugin.js.map +1 -1
  33. package/dist/fx/exchange-rate/adapters/exchange-rate-reader.service.d.ts +2 -0
  34. package/dist/fx/exchange-rate/adapters/exchange-rate-reader.service.d.ts.map +1 -1
  35. package/dist/fx/exchange-rate/adapters/exchange-rate-reader.service.js +17 -2
  36. package/dist/fx/exchange-rate/adapters/exchange-rate-reader.service.js.map +1 -1
  37. package/dist/mail/__tests__/default-email-template-renderer.test.js +89 -8
  38. package/dist/mail/__tests__/default-email-template-renderer.test.js.map +1 -1
  39. package/dist/mail/__tests__/mail.service.test.js +24 -1
  40. package/dist/mail/__tests__/mail.service.test.js.map +1 -1
  41. package/dist/mail/adapters/default-email-template-renderer.d.ts.map +1 -1
  42. package/dist/mail/adapters/default-email-template-renderer.js +26 -0
  43. package/dist/mail/adapters/default-email-template-renderer.js.map +1 -1
  44. package/dist/mail/contract/index.d.ts +66 -2
  45. package/dist/mail/contract/index.d.ts.map +1 -1
  46. package/dist/mail/contract/index.js +7 -1
  47. package/dist/mail/contract/index.js.map +1 -1
  48. package/dist/mail/service/mail.service.d.ts +1 -1
  49. package/dist/mail/service/mail.service.d.ts.map +1 -1
  50. package/dist/mail/service/mail.service.js +10 -5
  51. package/dist/mail/service/mail.service.js.map +1 -1
  52. package/dist/pam/identity/__tests__/identity.rate-limit.int.test.js +74 -1
  53. package/dist/pam/identity/__tests__/identity.rate-limit.int.test.js.map +1 -1
  54. package/dist/pam/identity/__tests__/identity.service.int.test.js +115 -17
  55. package/dist/pam/identity/__tests__/identity.service.int.test.js.map +1 -1
  56. package/dist/pam/identity/admin-user-directory.js +1 -1
  57. package/dist/pam/identity/admin-user-directory.js.map +1 -1
  58. package/dist/pam/identity/contract/index.d.ts +9 -1
  59. package/dist/pam/identity/contract/index.d.ts.map +1 -1
  60. package/dist/pam/identity/contract/index.js +10 -4
  61. package/dist/pam/identity/contract/index.js.map +1 -1
  62. package/dist/pam/identity/router/index.d.ts +9 -1
  63. package/dist/pam/identity/router/index.d.ts.map +1 -1
  64. package/dist/pam/identity/router/index.js +2 -1
  65. package/dist/pam/identity/router/index.js.map +1 -1
  66. package/dist/pam/identity/service/identity.service.d.ts +18 -2
  67. package/dist/pam/identity/service/identity.service.d.ts.map +1 -1
  68. package/dist/pam/identity/service/identity.service.js +154 -19
  69. package/dist/pam/identity/service/identity.service.js.map +1 -1
  70. package/dist/server/auth/__tests__/auth.test.js +28 -0
  71. package/dist/server/auth/__tests__/auth.test.js.map +1 -1
  72. package/dist/server/auth/auth.d.ts +2 -0
  73. package/dist/server/auth/auth.d.ts.map +1 -1
  74. package/dist/server/auth/auth.js +39 -5
  75. package/dist/server/auth/auth.js.map +1 -1
  76. package/dist/wallet/__tests__/wallet.service.int.test.js +13 -3
  77. package/dist/wallet/__tests__/wallet.service.int.test.js.map +1 -1
  78. package/dist/wallet/service/wallet.service.d.ts.map +1 -1
  79. package/dist/wallet/service/wallet.service.js +17 -3
  80. package/dist/wallet/service/wallet.service.js.map +1 -1
  81. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"mail.service.js","sourceRoot":"","sources":["../../../src/mail/service/mail.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mail.service.js","sourceRoot":"","sources":["../../../src/mail/service/mail.service.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,13 @@ function withTemplateRenderer(deps) {
18
18
  }),
19
19
  });
20
20
  }
21
+ const { getSessionMock } = vi.hoisted(() => ({
22
+ getSessionMock: vi.fn().mockResolvedValue(null),
23
+ }));
24
+ const rejectedOtpResponse = () => new Response(JSON.stringify({ message: 'Invalid or expired verification code' }), {
25
+ status: 400,
26
+ headers: { 'content-type': 'application/json' },
27
+ });
21
28
  // Keep the real @openora/core/server (so assertRateLimit + RedisRateLimiter are real); only
22
29
  // stub createAuth so the constructor doesn't touch a real DB.
23
30
  vi.mock('@openora/core/server', async (importOriginal) => {
@@ -25,7 +32,12 @@ vi.mock('@openora/core/server', async (importOriginal) => {
25
32
  return {
26
33
  ...actual,
27
34
  createAuth: vi.fn(() => ({
28
- api: { getSession: vi.fn().mockResolvedValue(null), signUpEmail: vi.fn() },
35
+ api: {
36
+ getSession: getSessionMock,
37
+ signUpEmail: vi.fn(),
38
+ requestEmailChangeEmailOTP: vi.fn().mockResolvedValue(rejectedOtpResponse()),
39
+ changeEmailEmailOTP: vi.fn().mockResolvedValue(rejectedOtpResponse()),
40
+ },
29
41
  })),
30
42
  };
31
43
  });
@@ -45,6 +57,8 @@ afterAll(async () => {
45
57
  });
46
58
  beforeEach(async () => {
47
59
  await redis.flush();
60
+ getSessionMock.mockReset();
61
+ getSessionMock.mockResolvedValue(null);
48
62
  });
49
63
  describe('IdentityService - rate limiting (real Redis)', () => {
50
64
  it('rejects register with a 429 once the per-email limit is exhausted', async () => {
@@ -149,6 +163,65 @@ describe('IdentityService - rate limiting on secret-guessing routes (ABC-208 fin
149
163
  await expect(svc.disableTwoFactor({ password: 'currentpw1', code: '123456' }, {}, new Headers())).rejects.toMatchObject({ code: 'TOO_MANY_REQUESTS' });
150
164
  });
151
165
  });
166
+ describe('IdentityService - email-change rate limits do not spend the target/IP budget for an anonymous caller', () => {
167
+ it('requestEmailChange rejects UNAUTHORIZED before touching the target or IP bucket', async () => {
168
+ const limiter = makeLimiter();
169
+ const svc = withTemplateRenderer({ drizzle, events, limiter });
170
+ const newEmail = 'victim-request@e2e.test';
171
+ await expect(svc.requestEmailChange({ newEmail, currentPassword: 'whatever1' }, { 'x-real-ip': '203.0.113.20' }, new Headers())).rejects.toMatchObject({ code: 'UNAUTHORIZED' });
172
+ // The real owner's budget for this address and IP must still be fully intact.
173
+ for (let i = 0; i < 3; i++) {
174
+ await expect(limiter.consume(`change-email-target:${newEmail}`, { limit: 3, windowMs: 15 * 60 * 1000 })).resolves.toMatchObject({ allowed: true });
175
+ }
176
+ for (let i = 0; i < 3; i++) {
177
+ await expect(limiter.consume('change-email-ip:203.0.113.20', { limit: 3, windowMs: 15 * 60 * 1000 })).resolves.toMatchObject({ allowed: true });
178
+ }
179
+ });
180
+ it('confirmEmailChange rejects UNAUTHORIZED before touching the target or IP bucket', async () => {
181
+ const limiter = makeLimiter();
182
+ const svc = withTemplateRenderer({ drizzle, events, limiter });
183
+ const newEmail = 'victim-confirm@e2e.test';
184
+ await expect(svc.confirmEmailChange({ newEmail, otp: '000000' }, { 'x-real-ip': '203.0.113.21' }, new Headers())).rejects.toMatchObject({ code: 'UNAUTHORIZED' });
185
+ for (let i = 0; i < 5; i++) {
186
+ await expect(limiter.consume(`confirm-email-change-target:${newEmail}`, {
187
+ limit: 5,
188
+ windowMs: 15 * 60 * 1000,
189
+ })).resolves.toMatchObject({ allowed: true });
190
+ }
191
+ for (let i = 0; i < 5; i++) {
192
+ await expect(limiter.consume('confirm-email-change-ip:203.0.113.21', {
193
+ limit: 5,
194
+ windowMs: 15 * 60 * 1000,
195
+ })).resolves.toMatchObject({ allowed: true });
196
+ }
197
+ });
198
+ });
199
+ describe('IdentityService - email-change target rate limit is bound to the caller, not just the target', () => {
200
+ const attackerId = '00000000-0000-4000-8000-0000000000a1';
201
+ const victimId = '00000000-0000-4000-8000-0000000000b2';
202
+ it('a different signed-in caller spamming a known target does not spend the real requester budget', async () => {
203
+ const limiter = makeLimiter();
204
+ const svc = withTemplateRenderer({ drizzle, events, limiter });
205
+ const targetEmail = 'coveted-request@e2e.test';
206
+ getSessionMock.mockResolvedValue({ user: { id: attackerId } });
207
+ for (let i = 0; i < 3; i++) {
208
+ await expect(svc.requestEmailChange({ newEmail: targetEmail, currentPassword: 'whatever' }, {}, new Headers())).rejects.toMatchObject({ code: 'UNAUTHORIZED' });
209
+ }
210
+ getSessionMock.mockResolvedValue({ user: { id: victimId } });
211
+ await expect(svc.requestEmailChange({ newEmail: targetEmail, currentPassword: 'whatever' }, {}, new Headers())).rejects.not.toMatchObject({ code: 'TOO_MANY_REQUESTS' });
212
+ });
213
+ it('a different signed-in caller spamming a known confirm target does not spend the real requester budget', async () => {
214
+ const limiter = makeLimiter();
215
+ const svc = withTemplateRenderer({ drizzle, events, limiter });
216
+ const targetEmail = 'coveted-confirm@e2e.test';
217
+ getSessionMock.mockResolvedValue({ user: { id: attackerId } });
218
+ for (let i = 0; i < 5; i++) {
219
+ await expect(svc.confirmEmailChange({ newEmail: targetEmail, otp: '000000' }, {}, new Headers())).rejects.not.toMatchObject({ code: 'TOO_MANY_REQUESTS' });
220
+ }
221
+ getSessionMock.mockResolvedValue({ user: { id: victimId } });
222
+ await expect(svc.confirmEmailChange({ newEmail: targetEmail, otp: '000000' }, {}, new Headers())).rejects.not.toMatchObject({ code: 'TOO_MANY_REQUESTS' });
223
+ });
224
+ });
152
225
  describe('IdentityService - fail-closed limiter policy for credential-guessing keys', () => {
153
226
  // A spy limiter that always denies: consume is the first await on each of these
154
227
  // paths, so the 429 short-circuits before any auth/DB work and we can assert the
@@ -1 +1 @@
1
- {"version":3,"file":"identity.rate-limit.int.test.js","sourceRoot":"","sources":["../../../../src/pam/identity/__tests__/identity.rate-limit.int.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"identity.rate-limit.int.test.js","sourceRoot":"","sources":["../../../../src/pam/identity/__tests__/identity.rate-limit.int.test.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,7 @@ import { TrustedDeviceService } from '../service/trusted-device.service.js';
13
13
  import { SessionService } from '../service/session.service.js';
14
14
  import { TwoFactorDeliveryService } from '../service/two-factor-delivery.service.js';
15
15
  import { makeIdentityReader, mock, makeEventBus } from '../../../testing/mock.js';
16
- const { signInEmailMock, verifyTotpMock, verifyBackupCodeMock, generateBackupCodesMock, disableTwoFactorMock, enableTwoFactorMock, verifyTwoFactorOtpMock, getSessionMock, updateUserMock, requestPasswordResetEmailOTPMock, checkVerificationOTPMock, resetPasswordEmailOTPMock, changeEmailMock, changePasswordMock, capturedAuthOptions, } = vi.hoisted(() => ({
16
+ const { signInEmailMock, verifyTotpMock, verifyBackupCodeMock, generateBackupCodesMock, disableTwoFactorMock, enableTwoFactorMock, verifyTwoFactorOtpMock, getSessionMock, updateUserMock, requestPasswordResetEmailOTPMock, checkVerificationOTPMock, resetPasswordEmailOTPMock, requestEmailChangeMock, confirmEmailChangeMock, changePasswordMock, capturedAuthOptions, } = vi.hoisted(() => ({
17
17
  signInEmailMock: vi.fn(),
18
18
  verifyTotpMock: vi.fn(),
19
19
  verifyBackupCodeMock: vi.fn(),
@@ -26,7 +26,8 @@ const { signInEmailMock, verifyTotpMock, verifyBackupCodeMock, generateBackupCod
26
26
  requestPasswordResetEmailOTPMock: vi.fn(),
27
27
  checkVerificationOTPMock: vi.fn(),
28
28
  resetPasswordEmailOTPMock: vi.fn(),
29
- changeEmailMock: vi.fn(),
29
+ requestEmailChangeMock: vi.fn(),
30
+ confirmEmailChangeMock: vi.fn(),
30
31
  changePasswordMock: vi.fn(),
31
32
  capturedAuthOptions: {
32
33
  current: undefined,
@@ -57,7 +58,8 @@ vi.mock('@openora/core/server', async (importOriginal) => ({
57
58
  requestPasswordResetEmailOTP: requestPasswordResetEmailOTPMock,
58
59
  checkVerificationOTP: checkVerificationOTPMock,
59
60
  resetPasswordEmailOTP: resetPasswordEmailOTPMock,
60
- changeEmail: changeEmailMock,
61
+ requestEmailChangeEmailOTP: requestEmailChangeMock,
62
+ changeEmailEmailOTP: confirmEmailChangeMock,
61
63
  changePassword: changePasswordMock,
62
64
  },
63
65
  };
@@ -119,7 +121,8 @@ afterAll(async () => {
119
121
  beforeEach(async () => {
120
122
  vi.clearAllMocks();
121
123
  getSessionMock.mockResolvedValue(null);
122
- changeEmailMock.mockReset();
124
+ requestEmailChangeMock.mockReset();
125
+ confirmEmailChangeMock.mockReset();
123
126
  changePasswordMock.mockReset();
124
127
  await db.drizzle.db.execute(sql `TRUNCATE ${user}, ${session}, ${player} RESTART IDENTITY CASCADE`);
125
128
  await redis.flush();
@@ -1052,48 +1055,143 @@ describe('IdentityService security controls', () => {
1052
1055
  await expect(buildService().setLoginWithdrawalAlerts({ enabled: true }, {})).rejects.toMatchObject({ code: 'UNPROCESSABLE_CONTENT' });
1053
1056
  expect((await readUser(account.id))?.loginWithdrawalAlertsEnabled).toBe(false);
1054
1057
  });
1055
- it('auditable alert preference is reset when the player changes email', async () => {
1058
+ it('resets the alert preference and emits the change event once the new address is confirmed', async () => {
1056
1059
  const account = await seedUser({
1057
1060
  emailVerified: true,
1058
1061
  loginWithdrawalAlertsEnabled: true,
1059
1062
  });
1060
1063
  getSessionMock.mockResolvedValue({ user: { ...betterAuthUser, id: account.id } });
1061
- // better-auth's `/change-email` returns the same `{ status: true }` shape whether or
1062
- // not it actually touched the row (see the identity.service.ts `changeEmail` comment),
1063
- // so the service keys the alert-disable off the row's own email column - update it the
1064
- // way the real endpoint's synchronous-update branch would, before the mock resolves.
1065
- changeEmailMock.mockImplementation(async () => {
1064
+ // Mirror better-auth's row swap before the mock resolves.
1065
+ confirmEmailChangeMock.mockImplementation(async () => {
1066
1066
  await db.drizzle.db
1067
1067
  .update(user)
1068
1068
  .set({ email: 'new-address@test.dev' })
1069
1069
  .where(eq(user.id, account.id));
1070
- return jsonResponse({ status: true }, 200);
1070
+ return jsonResponse({ success: true }, 200);
1071
1071
  });
1072
1072
  const events = makeEventBus();
1073
1073
  const svc = buildService({ events });
1074
- await svc.changeEmail({ newEmail: 'new-address@test.dev' }, {}, new Headers());
1074
+ await svc.confirmEmailChange({ newEmail: 'new-address@test.dev', otp: '123456' }, {}, new Headers());
1075
1075
  expect((await readUser(account.id))?.loginWithdrawalAlertsEnabled).toBe(false);
1076
+ expect(events.emit).toHaveBeenCalledWith('identity.email.changed', expect.objectContaining({
1077
+ userId: account.id,
1078
+ previousEmail: EMAIL,
1079
+ newEmail: 'new-address@test.dev',
1080
+ }));
1076
1081
  expect(events.emit).toHaveBeenCalledWith('identity.security.login_withdrawal_alerts.updated', expect.objectContaining({
1077
1082
  userId: account.id,
1078
1083
  previousEnabled: true,
1079
1084
  enabled: false,
1080
1085
  }));
1081
1086
  });
1082
- it('leaves the alert preference untouched when change-email does not actually update the row', async () => {
1083
- // Covers better-auth's anti-enumeration no-op and its deferred confirmation-email
1084
- // branch: both return `{ status: true }` without touching `user.email`.
1087
+ it('leaves the alert preference untouched when the confirmation code is rejected', async () => {
1085
1088
  const account = await seedUser({
1086
1089
  emailVerified: true,
1087
1090
  loginWithdrawalAlertsEnabled: true,
1088
1091
  });
1089
1092
  getSessionMock.mockResolvedValue({ user: { ...betterAuthUser, id: account.id } });
1090
- changeEmailMock.mockResolvedValue(jsonResponse({ status: true }, 200));
1093
+ confirmEmailChangeMock.mockResolvedValue(jsonResponse({ message: 'Invalid OTP' }, 400));
1091
1094
  const events = makeEventBus();
1092
1095
  const svc = buildService({ events });
1093
- await svc.changeEmail({ newEmail: 'new-address@test.dev' }, {}, new Headers());
1096
+ await expect(svc.confirmEmailChange({ newEmail: 'new-address@test.dev', otp: '000000' }, {}, new Headers())).rejects.toMatchObject({ code: 'BAD_REQUEST' });
1094
1097
  expect((await readUser(account.id))?.loginWithdrawalAlertsEnabled).toBe(true);
1095
1098
  expect(events.emit).not.toHaveBeenCalledWith('identity.security.login_withdrawal_alerts.updated', expect.anything());
1096
1099
  });
1100
+ it('carries the caller anti-phishing code on the emailChanged notice to the old address', async () => {
1101
+ const account = await seedUser({ emailVerified: true, antiPhishingCode: 'Sunny Meadow' });
1102
+ getSessionMock.mockResolvedValue({ user: { ...betterAuthUser, id: account.id } });
1103
+ confirmEmailChangeMock.mockImplementation(async () => {
1104
+ await db.drizzle.db
1105
+ .update(user)
1106
+ .set({ email: 'new-address-2@test.dev' })
1107
+ .where(eq(user.id, account.id));
1108
+ return jsonResponse({ success: true }, 200);
1109
+ });
1110
+ const mailDispatch = mock({
1111
+ toAddress: vi.fn(async () => undefined),
1112
+ toUser: vi.fn(async () => undefined),
1113
+ });
1114
+ const svc = buildService({ mailDispatch });
1115
+ await svc.confirmEmailChange({ newEmail: 'new-address-2@test.dev', otp: '123456' }, {}, new Headers());
1116
+ expect(mailDispatch.toAddress).toHaveBeenCalledWith(expect.objectContaining({
1117
+ email: EMAIL,
1118
+ antiPhishingCode: 'Sunny Meadow',
1119
+ template: {
1120
+ key: 'emailChanged',
1121
+ data: {
1122
+ newEmail: 'new-address-2@test.dev',
1123
+ occurredAt: expect.any(String),
1124
+ isNewAddress: false,
1125
+ },
1126
+ },
1127
+ }));
1128
+ });
1129
+ it('sends a plain, warning-free confirmation to the new address, with fields captured at swap time rather than looked up live', async () => {
1130
+ const account = await seedUser({ emailVerified: true, antiPhishingCode: 'Sunny Meadow' });
1131
+ getSessionMock.mockResolvedValue({ user: { ...betterAuthUser, id: account.id } });
1132
+ confirmEmailChangeMock.mockImplementation(async () => {
1133
+ await db.drizzle.db
1134
+ .update(user)
1135
+ .set({ email: 'new-address-4@test.dev' })
1136
+ .where(eq(user.id, account.id));
1137
+ return jsonResponse({ success: true }, 200);
1138
+ });
1139
+ const mailDispatch = mock({
1140
+ toAddress: vi.fn(async () => undefined),
1141
+ toUser: vi.fn(async () => undefined),
1142
+ });
1143
+ const svc = buildService({ mailDispatch });
1144
+ await svc.confirmEmailChange({ newEmail: 'new-address-4@test.dev', otp: '123456' }, {}, new Headers());
1145
+ expect(mailDispatch.toAddress).toHaveBeenCalledWith(expect.objectContaining({
1146
+ email: 'new-address-4@test.dev',
1147
+ antiPhishingCode: 'Sunny Meadow',
1148
+ template: {
1149
+ key: 'emailChanged',
1150
+ data: {
1151
+ newEmail: 'new-address-4@test.dev',
1152
+ occurredAt: expect.any(String),
1153
+ isNewAddress: true,
1154
+ },
1155
+ },
1156
+ }));
1157
+ expect(mailDispatch.toUser).not.toHaveBeenCalled();
1158
+ });
1159
+ it('still enqueues the emailChanged notice even when session revocation later throws', async () => {
1160
+ const account = await seedUser({ emailVerified: true });
1161
+ getSessionMock.mockResolvedValue({ user: { ...betterAuthUser, id: account.id } });
1162
+ confirmEmailChangeMock.mockImplementation(async () => {
1163
+ await db.drizzle.db
1164
+ .update(user)
1165
+ .set({ email: 'new-address-3@test.dev' })
1166
+ .where(eq(user.id, account.id));
1167
+ return jsonResponse({ success: true }, 200);
1168
+ });
1169
+ const mailDispatch = mock({
1170
+ toAddress: vi.fn(async () => undefined),
1171
+ toUser: vi.fn(async () => undefined),
1172
+ });
1173
+ const sessions = new SessionService({
1174
+ drizzle: db.drizzle,
1175
+ events: makeEventBus(),
1176
+ identityReader: makeIdentityReader(),
1177
+ });
1178
+ vi.spyOn(sessions, 'revokeAllSessions').mockRejectedValue(new Error('redis down'));
1179
+ const svc = buildService({ mailDispatch, sessions });
1180
+ await expect(svc.confirmEmailChange({ newEmail: 'new-address-3@test.dev', otp: '123456' }, {}, new Headers())).rejects.toThrow('redis down');
1181
+ // The swap already committed by the time revocation blew up - the owner still
1182
+ // needs the notice, so it must have gone out before the throw propagated.
1183
+ expect(mailDispatch.toAddress).toHaveBeenCalledWith(expect.objectContaining({
1184
+ email: EMAIL,
1185
+ template: {
1186
+ key: 'emailChanged',
1187
+ data: {
1188
+ newEmail: 'new-address-3@test.dev',
1189
+ occurredAt: expect.any(String),
1190
+ isNewAddress: false,
1191
+ },
1192
+ },
1193
+ }));
1194
+ });
1097
1195
  });
1098
1196
  describe('IdentityService.setAntiPhishingCode', () => {
1099
1197
  it('refuses to set the code for a non-player (admin) account', async () => {