@nauth-toolkit/core 0.1.18 → 0.1.22

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 (103) hide show
  1. package/dist/adapters/storage.factory.d.ts.map +1 -1
  2. package/dist/adapters/storage.factory.js +250 -18
  3. package/dist/adapters/storage.factory.js.map +1 -1
  4. package/dist/bootstrap.d.ts.map +1 -1
  5. package/dist/bootstrap.js +3 -2
  6. package/dist/bootstrap.js.map +1 -1
  7. package/dist/dto/admin-signup.dto.d.ts +196 -0
  8. package/dist/dto/admin-signup.dto.d.ts.map +1 -0
  9. package/dist/dto/admin-signup.dto.js +317 -0
  10. package/dist/dto/admin-signup.dto.js.map +1 -0
  11. package/dist/dto/auth-response.dto.d.ts +14 -0
  12. package/dist/dto/auth-response.dto.d.ts.map +1 -1
  13. package/dist/dto/auth-response.dto.js +14 -0
  14. package/dist/dto/auth-response.dto.js.map +1 -1
  15. package/dist/dto/index.d.ts +1 -0
  16. package/dist/dto/index.d.ts.map +1 -1
  17. package/dist/dto/index.js +1 -0
  18. package/dist/dto/index.js.map +1 -1
  19. package/dist/dto/social-auth.dto.d.ts +24 -0
  20. package/dist/dto/social-auth.dto.d.ts.map +1 -1
  21. package/dist/dto/social-auth.dto.js +37 -1
  22. package/dist/dto/social-auth.dto.js.map +1 -1
  23. package/dist/entities/user.entity.d.ts +8 -0
  24. package/dist/entities/user.entity.d.ts.map +1 -1
  25. package/dist/entities/user.entity.js +8 -0
  26. package/dist/entities/user.entity.js.map +1 -1
  27. package/dist/handlers/auth.handler.d.ts +3 -8
  28. package/dist/handlers/auth.handler.d.ts.map +1 -1
  29. package/dist/handlers/auth.handler.js +10 -55
  30. package/dist/handlers/auth.handler.js.map +1 -1
  31. package/dist/handlers/csrf.handler.d.ts.map +1 -1
  32. package/dist/handlers/csrf.handler.js +7 -2
  33. package/dist/handlers/csrf.handler.js.map +1 -1
  34. package/dist/handlers/social-redirect.handler.d.ts +136 -0
  35. package/dist/handlers/social-redirect.handler.d.ts.map +1 -0
  36. package/dist/handlers/social-redirect.handler.js +364 -0
  37. package/dist/handlers/social-redirect.handler.js.map +1 -0
  38. package/dist/index.d.ts +1 -0
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +4 -0
  41. package/dist/index.js.map +1 -1
  42. package/dist/interfaces/config.interface.d.ts +43 -0
  43. package/dist/interfaces/config.interface.d.ts.map +1 -1
  44. package/dist/interfaces/entities.interface.d.ts +6 -0
  45. package/dist/interfaces/entities.interface.d.ts.map +1 -1
  46. package/dist/interfaces/index.d.ts +1 -0
  47. package/dist/interfaces/index.d.ts.map +1 -1
  48. package/dist/interfaces/index.js +1 -0
  49. package/dist/interfaces/index.js.map +1 -1
  50. package/dist/interfaces/social-auth-state-store.interface.d.ts +100 -0
  51. package/dist/interfaces/social-auth-state-store.interface.d.ts.map +1 -0
  52. package/dist/interfaces/social-auth-state-store.interface.js +3 -0
  53. package/dist/interfaces/social-auth-state-store.interface.js.map +1 -0
  54. package/dist/interfaces/storage-adapter.interface.d.ts +2 -2
  55. package/dist/interfaces/storage-adapter.interface.d.ts.map +1 -1
  56. package/dist/internal.d.ts +5 -0
  57. package/dist/internal.d.ts.map +1 -1
  58. package/dist/internal.js +7 -1
  59. package/dist/internal.js.map +1 -1
  60. package/dist/schemas/auth-config.schema.d.ts +107 -28
  61. package/dist/schemas/auth-config.schema.d.ts.map +1 -1
  62. package/dist/schemas/auth-config.schema.js +20 -1
  63. package/dist/schemas/auth-config.schema.js.map +1 -1
  64. package/dist/services/auth-challenge-helper.service.d.ts +1 -1
  65. package/dist/services/auth-challenge-helper.service.d.ts.map +1 -1
  66. package/dist/services/auth-challenge-helper.service.js +9 -4
  67. package/dist/services/auth-challenge-helper.service.js.map +1 -1
  68. package/dist/services/auth.service.d.ts +59 -3
  69. package/dist/services/auth.service.d.ts.map +1 -1
  70. package/dist/services/auth.service.js +276 -50
  71. package/dist/services/auth.service.js.map +1 -1
  72. package/dist/services/geo-location.service.js +2 -2
  73. package/dist/services/geo-location.service.js.map +1 -1
  74. package/dist/services/password-reset.service.d.ts.map +1 -1
  75. package/dist/services/password-reset.service.js.map +1 -1
  76. package/dist/services/phone-verification.service.js.map +1 -1
  77. package/dist/services/social-auth-base.service.d.ts +5 -10
  78. package/dist/services/social-auth-base.service.d.ts.map +1 -1
  79. package/dist/services/social-auth-base.service.js +30 -61
  80. package/dist/services/social-auth-base.service.js.map +1 -1
  81. package/dist/services/social-auth-state-store.service.d.ts +58 -0
  82. package/dist/services/social-auth-state-store.service.d.ts.map +1 -0
  83. package/dist/services/social-auth-state-store.service.js +261 -0
  84. package/dist/services/social-auth-state-store.service.js.map +1 -0
  85. package/dist/storage/account-lockout-storage.service.d.ts +2 -2
  86. package/dist/storage/account-lockout-storage.service.d.ts.map +1 -1
  87. package/dist/storage/account-lockout-storage.service.js +2 -2
  88. package/dist/storage/account-lockout-storage.service.js.map +1 -1
  89. package/dist/templates/sms-template.engine.d.ts.map +1 -1
  90. package/dist/templates/sms-template.engine.js +1 -2
  91. package/dist/templates/sms-template.engine.js.map +1 -1
  92. package/dist/utils/index.d.ts +1 -0
  93. package/dist/utils/index.d.ts.map +1 -1
  94. package/dist/utils/index.js +1 -0
  95. package/dist/utils/index.js.map +1 -1
  96. package/dist/utils/password-generator.d.ts +29 -0
  97. package/dist/utils/password-generator.d.ts.map +1 -0
  98. package/dist/utils/password-generator.js +98 -0
  99. package/dist/utils/password-generator.js.map +1 -0
  100. package/dist/utils/setup/init-social.d.ts +2 -5
  101. package/dist/utils/setup/init-social.d.ts.map +1 -1
  102. package/dist/utils/setup/init-social.js.map +1 -1
  103. package/package.json +1 -1
@@ -20,13 +20,13 @@ const index_1 = require("../index");
20
20
  class AuthHandler {
21
21
  jwtService;
22
22
  sessionService;
23
- userRepository;
23
+ authService;
24
24
  config;
25
25
  logger;
26
- constructor(jwtService, sessionService, userRepository, config, logger) {
26
+ constructor(jwtService, sessionService, authService, config, logger) {
27
27
  this.jwtService = jwtService;
28
28
  this.sessionService = sessionService;
29
- this.userRepository = userRepository;
29
+ this.authService = authService;
30
30
  this.config = config;
31
31
  this.logger = logger;
32
32
  }
@@ -74,21 +74,13 @@ class AuthHandler {
74
74
  await next();
75
75
  return;
76
76
  }
77
- // Load user
78
- const user = await this.userRepository.findOne({
79
- select: this.getUserSelectFields(),
80
- where: { sub: validation.payload.sub },
81
- });
82
- if (!user) {
83
- this.logger?.warn?.('User not found:', validation.payload.sub);
84
- await next();
85
- return;
86
- }
87
- if (!user.isActive) {
88
- this.logger?.warn?.('Account is not active:', user.sub);
89
- await next();
90
- return;
91
- }
77
+ // Load user via AuthService (service-first architecture)
78
+ // AuthService.getUserForAuthContext handles:
79
+ // - User lookup by sub
80
+ // - Active status check
81
+ // - Computing hasPasswordHash from passwordHash
82
+ // - Removing sensitive fields (passwordHash, totpSecret, backupCodes, passwordHistory)
83
+ const user = await this.authService.getUserForAuthContext(validation.payload.sub);
92
84
  // Optimistic locking check - ensure session wasn't modified during request
93
85
  const revalidated = await this.sessionService.findByIdLight(sessionId);
94
86
  if (!revalidated || revalidated.version !== initialVersion || revalidated.isRevoked) {
@@ -177,43 +169,6 @@ class AuthHandler {
177
169
  }
178
170
  }
179
171
  }
180
- /**
181
- * Get fields to select when loading user
182
- */
183
- getUserSelectFields() {
184
- return [
185
- 'id',
186
- 'sub',
187
- 'username',
188
- 'firstName',
189
- 'lastName',
190
- 'email',
191
- 'phone',
192
- 'isEmailVerified',
193
- 'isPhoneVerified',
194
- 'isActive',
195
- 'mustChangePassword',
196
- 'isLocked',
197
- 'lockReason',
198
- 'lockedAt',
199
- 'lockedUntil',
200
- 'failedLoginAttempts',
201
- 'lastFailedLoginAt',
202
- 'lastLoginAt',
203
- 'lastLoginIp',
204
- 'hasSocialAuth',
205
- 'socialProviders',
206
- 'mfaEnabled',
207
- 'mfaMethods',
208
- 'preferredMfaMethod',
209
- 'mfaExempt',
210
- 'mfaExemptReason',
211
- 'mfaExemptGrantedAt',
212
- 'metadata',
213
- 'createdAt',
214
- 'updatedAt',
215
- ];
216
- }
217
172
  }
218
173
  exports.AuthHandler = AuthHandler;
219
174
  //# sourceMappingURL=auth.handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.handler.js","sourceRoot":"","sources":["../../src/handlers/auth.handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.handler.js","sourceRoot":"","sources":["../../src/handlers/auth.handler.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"csrf.handler.d.ts","sourceRoot":"","sources":["../../src/handlers/csrf.handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,WAAW,EAAiC,WAAW,EAAE,MAAM,UAAU,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAKrE;;;;GAIG;AACH,qBAAa,WAAW;IAEpB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAFP,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,WAAW,EACnB,MAAM,CAAC,EAAE,WAAW,YAAA;IAGvC;;;;OAIG;IACU,MAAM,CAAC,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAkC3G;;OAEG;YACW,sBAAsB;IAgCpC;;;;;OAKG;YACW,aAAa;CA0C5B"}
1
+ {"version":3,"file":"csrf.handler.d.ts","sourceRoot":"","sources":["../../src/handlers/csrf.handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,WAAW,EAAiC,WAAW,EAAE,MAAM,UAAU,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAKrE;;;;GAIG;AACH,qBAAa,WAAW;IAEpB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAFP,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,WAAW,EACnB,MAAM,CAAC,EAAE,WAAW,YAAA;IAGvC;;;;OAIG;IACU,MAAM,CAAC,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAkC3G;;OAEG;YACW,sBAAsB;IAsCpC;;;;;OAKG;YACW,aAAa;CA0C5B"}
@@ -77,14 +77,19 @@ class CsrfHandler {
77
77
  }
78
78
  // Generate new token
79
79
  const token = this.csrfService.generateToken();
80
+ // Allow per-app override, but default to readable cookie (NOT httpOnly)
81
+ // so browser clients can send the value back in the CSRF header.
82
+ const csrfCookieOptions = this.csrfService.getCookieOptions();
80
83
  // Build cookie options
81
84
  const cookieOptions = {
82
- httpOnly: true, // Prevents XSS access to token
85
+ // CSRF token is not a secret; it must be readable by JS to be sent as a header.
86
+ // If an app wants httpOnly CSRF (header-based acquisition), they can override via config.
87
+ httpOnly: csrfCookieOptions.httpOnly ?? false,
83
88
  secure: this.config.tokenDelivery?.cookieOptions?.secure ?? true,
84
89
  sameSite: (this.config.tokenDelivery?.cookieOptions?.sameSite || 'strict'),
85
90
  domain: this.config.tokenDelivery?.cookieOptions?.domain,
86
91
  path: '/',
87
- ...this.csrfService.getCookieOptions(),
92
+ ...csrfCookieOptions,
88
93
  };
89
94
  // Set cookie
90
95
  res.setCookie(cookieName, token, cookieOptions);
@@ -1 +1 @@
1
- {"version":3,"file":"csrf.handler.js","sourceRoot":"","sources":["../../src/handlers/csrf.handler.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;AAEH,oCAAmF;AAInF,sDAAsD;AACtD,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;AAEhD;;;;GAIG;AACH,MAAa,WAAW;IAEH;IACA;IACA;IAHnB,YACmB,WAAwB,EACxB,MAAmB,EACnB,MAAoB;QAFpB,gBAAW,GAAX,WAAW,CAAa;QACxB,WAAM,GAAN,MAAM,CAAa;QACnB,WAAM,GAAN,MAAM,CAAc;IACpC,CAAC;IAEJ;;;;OAIG;IACI,KAAK,CAAC,MAAM,CAAC,GAAiB,EAAE,GAAkB,EAAE,IAAgC;QACzF,kDAAkD;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,IAAI,MAAM,CAAC;QAC3D,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YAChD,MAAM,IAAI,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,0CAA0C;QAC1C,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,CAAC,sBAAsB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC5C,MAAM,IAAI,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,yCAAyC;QACzC,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;YAC/B,MAAM,IAAI,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,sBAAsB;QACtB,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,aAAa,IAAI,EAAE,CAAC;QACtE,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,MAAM,IAAI,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,mEAAmE;QACnE,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAE9B,MAAM,IAAI,EAAE,CAAC;IACf,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,sBAAsB,CAAC,GAAiB,EAAE,GAAkB;QACxE,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;QACpD,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAE9C,IAAI,aAAa,EAAE,CAAC;YAClB,+CAA+C;YAC/C,OAAO,GAAG,CAAC,UAAU,CAAC,cAAc,CAAC;YACrC,OAAO;QACT,CAAC;QAED,qBAAqB;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;QAE/C,uBAAuB;QACvB,MAAM,aAAa,GAAG;YACpB,QAAQ,EAAE,IAAI,EAAE,+BAA+B;YAC/C,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,MAAM,IAAI,IAAI;YAChE,QAAQ,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,QAAQ,IAAI,QAAQ,CAA8B;YACvG,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,MAAM;YACxD,IAAI,EAAE,GAAG;YACT,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE;SACvC,CAAC;QAEF,aAAa;QACb,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;QAEhD,kEAAkE;QAClE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,KAAK,CAAC,CAAC;QAEpD,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,8BAA8B,CAAC,CAAC;IACvD,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,aAAa,CAAC,GAAiB;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;QACpD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;QAEpD,gCAAgC;QAChC,IAAI,gBAAgB,GAAG,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACjD,IAAI,CAAC,gBAAgB,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YAClC,2BAA2B;YAC3B,MAAM,IAAI,GAAG,GAAG,CAAC,IAA+B,CAAC;YACjD,gBAAgB,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,CAAuB,CAAC;QACpG,CAAC;QAED,wBAAwB;QACxB,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAE5C,iCAAiC;QACjC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,GAAG,CAAC,UAAU,CAAC,cAAc,GAAG,IAAI,sBAAc,CAChD,qBAAa,CAAC,kBAAkB,EAChC,gCAAgC,UAAU,0DAA0D,UAAU,UAAU,CACzH,CAAC;YACF,OAAO;QACT,CAAC;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,GAAG,CAAC,UAAU,CAAC,cAAc,GAAG,IAAI,sBAAc,CAChD,qBAAa,CAAC,kBAAkB,EAChC,kEAAkE,CACnE,CAAC;YACF,OAAO;QACT,CAAC;QAED,yBAAyB;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,WAAW,CAAC,CAAC;QAEtF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,GAAG,CAAC,UAAU,CAAC,cAAc,GAAG,IAAI,sBAAc,CAAC,qBAAa,CAAC,kBAAkB,EAAE,sBAAsB,CAAC,CAAC;YAC7G,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,mCAAmC,CAAC,CAAC;IAC5D,CAAC;CACF;AAjID,kCAiIC"}
1
+ {"version":3,"file":"csrf.handler.js","sourceRoot":"","sources":["../../src/handlers/csrf.handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,136 @@
1
+ import { AuthResponseDTO } from '../dto/auth-response.dto';
2
+ import { NAuthConfig } from '../interfaces/config.interface';
3
+ import { ISocialAuthStateStore } from '../interfaces/social-auth-state-store.interface';
4
+ import { StorageAdapter } from '../interfaces/storage-adapter.interface';
5
+ import { NAuthCookieOptions } from '../platform/interfaces';
6
+ import { SocialAuthService } from '../services/social-auth.service';
7
+ import { NAuthLogger } from '../utils/nauth-logger';
8
+ /**
9
+ * Social Redirect Handler (framework-neutral)
10
+ *
11
+ * Consumer backends should implement their own HTTP controllers/routes and delegate to this handler.
12
+ * The handler returns a small "response recipe" that the consumer applies to their framework response.
13
+ *
14
+ * Key properties:
15
+ * - Backend-first redirect (provider -> backend callback -> frontend)
16
+ * - Cluster-safe CSRF `state` storage via `ISocialAuthStateStore` (StorageAdapter-backed)
17
+ * - Optional `appState` round-trip (opaque string, URL-encoded)
18
+ * - Supports `cookies`, `json`, and `hybrid` (origin-based) delivery modes
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * // NestJS controller pseudocode
23
+ * const start = await socialRedirect.start({ provider: 'google', returnTo: '/auth/callback', appState: '12345', req });
24
+ * return res.redirect(start.redirectUrl);
25
+ *
26
+ * const cb = await socialRedirect.callback({ provider: 'google', code, state, req });
27
+ * cb.cookies?.forEach((c) => res.setCookie(c.name, c.value, c.options));
28
+ * return res.redirect(cb.redirectUrl);
29
+ *
30
+ * const auth = await socialRedirect.exchange(exchangeToken);
31
+ * return auth;
32
+ * ```
33
+ */
34
+ export declare class SocialRedirectHandler {
35
+ private readonly config;
36
+ private readonly socialAuthService;
37
+ private readonly socialStateStore;
38
+ private readonly storage;
39
+ private readonly logger?;
40
+ private readonly csrfService;
41
+ private readonly exchangeTtlSeconds;
42
+ constructor(config: NAuthConfig, socialAuthService: SocialAuthService, socialStateStore: ISocialAuthStateStore, storage: StorageAdapter, logger?: NAuthLogger | undefined, exchangeTtlSeconds?: number);
43
+ /**
44
+ * Start redirect-first social login.
45
+ *
46
+ * @param input - Start parameters
47
+ * @returns Redirect recipe to send user to the provider authorization URL
48
+ * @throws {NAuthException} When provider/returnTo are invalid or config is missing
49
+ */
50
+ start(input: SocialRedirectStartInput): Promise<SocialRedirectStartResult>;
51
+ /**
52
+ * Handle provider callback and produce a frontend redirect recipe.
53
+ *
54
+ * @param input - Callback parameters from provider (GET query or POST form_post)
55
+ * @returns Redirect recipe to send user back to frontend with `appState` (and optional `exchangeToken`)
56
+ * @throws {NAuthException} When required params are missing/invalid
57
+ */
58
+ callback(input: SocialRedirectCallbackInput): Promise<SocialRedirectCallbackResult>;
59
+ /**
60
+ * Exchange a short-lived exchange token for an AuthResponse.
61
+ *
62
+ * @param exchangeToken - One-time token from callback redirect URL
63
+ * @returns AuthResponse payload (tokens or challenge)
64
+ * @throws {NAuthException} When exchangeToken is invalid/expired
65
+ */
66
+ exchange(exchangeToken: string): Promise<AuthResponseDTO>;
67
+ private buildAuthCookies;
68
+ private buildCsrfCookie;
69
+ private getFrontendBaseUrl;
70
+ private buildFrontendRedirectUrl;
71
+ private appendQuery;
72
+ private resolveEffectiveDelivery;
73
+ private getRouteDeliveryOverrideFromRequest;
74
+ private normalizeProvider;
75
+ private getExchangeKey;
76
+ private safeParseExchangePayload;
77
+ }
78
+ /**
79
+ * Start input for redirect-first social login.
80
+ */
81
+ export interface SocialRedirectStartInput {
82
+ /** OAuth provider (google|apple|facebook) */
83
+ provider: string;
84
+ /** Frontend path or URL to return to (default: `/auth/callback`) */
85
+ returnTo?: string;
86
+ /** Optional application state to round-trip back to frontend */
87
+ appState?: string;
88
+ /** Optional action (default: `login`) */
89
+ action?: 'login' | 'link';
90
+ /** Request object for hybrid origin-based delivery */
91
+ req?: unknown;
92
+ }
93
+ /**
94
+ * Callback input for redirect-first social login.
95
+ */
96
+ export interface SocialRedirectCallbackInput {
97
+ provider: string;
98
+ code?: string;
99
+ state?: string;
100
+ error?: string;
101
+ errorDescription?: string;
102
+ req?: unknown;
103
+ }
104
+ /**
105
+ * Cookie instruction returned by SocialRedirectHandler.
106
+ */
107
+ export interface SocialRedirectCookie {
108
+ name: string;
109
+ value: string;
110
+ options?: NAuthCookieOptions;
111
+ }
112
+ /**
113
+ * Start redirect result.
114
+ */
115
+ export interface SocialRedirectStartResult {
116
+ redirectUrl: string;
117
+ }
118
+ /**
119
+ * Callback redirect result.
120
+ */
121
+ export interface SocialRedirectCallbackResult {
122
+ redirectUrl: string;
123
+ cookies?: SocialRedirectCookie[];
124
+ /**
125
+ * AuthResponse payload, only populated when:
126
+ * - effective delivery is `cookies`, AND
127
+ * - the social callback produced tokens
128
+ *
129
+ * This enables frameworks with automatic cookie delivery (e.g., NestJS interceptor + `@TokenDelivery()`)
130
+ * to set cookies without consumer code manually iterating over `cookies`.
131
+ *
132
+ * ⚠️ WARNING: Do not log this value (contains tokens).
133
+ */
134
+ authResponse?: AuthResponseDTO;
135
+ }
136
+ //# sourceMappingURL=social-redirect.handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"social-redirect.handler.d.ts","sourceRoot":"","sources":["../../src/handlers/social-redirect.handler.ts"],"names":[],"mappings":"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"}