@ambushsoftworks/nestjs-auth-graphql 0.1.3

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 (279) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +711 -0
  3. package/dist/auth.module.d.ts +61 -0
  4. package/dist/auth.module.d.ts.map +1 -0
  5. package/dist/auth.module.js +190 -0
  6. package/dist/auth.module.js.map +1 -0
  7. package/dist/decorators/current-user.decorator.d.ts +2 -0
  8. package/dist/decorators/current-user.decorator.d.ts.map +1 -0
  9. package/dist/decorators/current-user.decorator.js +10 -0
  10. package/dist/decorators/current-user.decorator.js.map +1 -0
  11. package/dist/dto/account-lock-status.dto.d.ts +5 -0
  12. package/dist/dto/account-lock-status.dto.d.ts.map +1 -0
  13. package/dist/dto/account-lock-status.dto.js +32 -0
  14. package/dist/dto/account-lock-status.dto.js.map +1 -0
  15. package/dist/dto/auth-response.dto.d.ts +7 -0
  16. package/dist/dto/auth-response.dto.d.ts.map +1 -0
  17. package/dist/dto/auth-response.dto.js +33 -0
  18. package/dist/dto/auth-response.dto.js.map +1 -0
  19. package/dist/dto/biometric-challenge.dto.d.ts +6 -0
  20. package/dist/dto/biometric-challenge.dto.d.ts.map +1 -0
  21. package/dist/dto/biometric-challenge.dto.js +32 -0
  22. package/dist/dto/biometric-challenge.dto.js.map +1 -0
  23. package/dist/dto/biometric-credential.dto.d.ts +10 -0
  24. package/dist/dto/biometric-credential.dto.d.ts.map +1 -0
  25. package/dist/dto/biometric-credential.dto.js +48 -0
  26. package/dist/dto/biometric-credential.dto.js.map +1 -0
  27. package/dist/dto/biometric-login.input.d.ts +5 -0
  28. package/dist/dto/biometric-login.input.d.ts.map +1 -0
  29. package/dist/dto/biometric-login.input.js +33 -0
  30. package/dist/dto/biometric-login.input.js.map +1 -0
  31. package/dist/dto/biometric-status.dto.d.ts +5 -0
  32. package/dist/dto/biometric-status.dto.d.ts.map +1 -0
  33. package/dist/dto/biometric-status.dto.js +28 -0
  34. package/dist/dto/biometric-status.dto.js.map +1 -0
  35. package/dist/dto/complete-facebook-signup.input.d.ts +6 -0
  36. package/dist/dto/complete-facebook-signup.input.d.ts.map +1 -0
  37. package/dist/dto/complete-facebook-signup.input.js +45 -0
  38. package/dist/dto/complete-facebook-signup.input.js.map +1 -0
  39. package/dist/dto/enable-biometric.input.d.ts +5 -0
  40. package/dist/dto/enable-biometric.input.d.ts.map +1 -0
  41. package/dist/dto/enable-biometric.input.js +33 -0
  42. package/dist/dto/enable-biometric.input.js.map +1 -0
  43. package/dist/dto/enroll-biometric.input.d.ts +6 -0
  44. package/dist/dto/enroll-biometric.input.d.ts.map +1 -0
  45. package/dist/dto/enroll-biometric.input.js +41 -0
  46. package/dist/dto/enroll-biometric.input.js.map +1 -0
  47. package/dist/dto/jwt-payload.interface.d.ts +5 -0
  48. package/dist/dto/jwt-payload.interface.d.ts.map +1 -0
  49. package/dist/dto/jwt-payload.interface.js +3 -0
  50. package/dist/dto/jwt-payload.interface.js.map +1 -0
  51. package/dist/dto/link-google-account.input.d.ts +5 -0
  52. package/dist/dto/link-google-account.input.d.ts.map +1 -0
  53. package/dist/dto/link-google-account.input.js +38 -0
  54. package/dist/dto/link-google-account.input.js.map +1 -0
  55. package/dist/dto/login.input.d.ts +5 -0
  56. package/dist/dto/login.input.d.ts.map +1 -0
  57. package/dist/dto/login.input.js +31 -0
  58. package/dist/dto/login.input.js.map +1 -0
  59. package/dist/dto/logout-response.dto.d.ts +9 -0
  60. package/dist/dto/logout-response.dto.d.ts.map +1 -0
  61. package/dist/dto/logout-response.dto.js +42 -0
  62. package/dist/dto/logout-response.dto.js.map +1 -0
  63. package/dist/dto/logout.input.d.ts +4 -0
  64. package/dist/dto/logout.input.d.ts.map +1 -0
  65. package/dist/dto/logout.input.js +27 -0
  66. package/dist/dto/logout.input.js.map +1 -0
  67. package/dist/dto/phone-verification-response.dto.d.ts +24 -0
  68. package/dist/dto/phone-verification-response.dto.d.ts.map +1 -0
  69. package/dist/dto/phone-verification-response.dto.js +98 -0
  70. package/dist/dto/phone-verification-response.dto.js.map +1 -0
  71. package/dist/dto/phone-verification-status.dto.d.ts +9 -0
  72. package/dist/dto/phone-verification-status.dto.d.ts.map +1 -0
  73. package/dist/dto/phone-verification-status.dto.js +44 -0
  74. package/dist/dto/phone-verification-status.dto.js.map +1 -0
  75. package/dist/dto/refresh-token.input.d.ts +4 -0
  76. package/dist/dto/refresh-token.input.d.ts.map +1 -0
  77. package/dist/dto/refresh-token.input.js +27 -0
  78. package/dist/dto/refresh-token.input.js.map +1 -0
  79. package/dist/dto/remove-biometric-device-response.dto.d.ts +5 -0
  80. package/dist/dto/remove-biometric-device-response.dto.d.ts.map +1 -0
  81. package/dist/dto/remove-biometric-device-response.dto.js +28 -0
  82. package/dist/dto/remove-biometric-device-response.dto.js.map +1 -0
  83. package/dist/dto/send-phone-verification.input.d.ts +5 -0
  84. package/dist/dto/send-phone-verification.input.d.ts.map +1 -0
  85. package/dist/dto/send-phone-verification.input.js +36 -0
  86. package/dist/dto/send-phone-verification.input.js.map +1 -0
  87. package/dist/dto/signup.input.d.ts +5 -0
  88. package/dist/dto/signup.input.d.ts.map +1 -0
  89. package/dist/dto/signup.input.js +36 -0
  90. package/dist/dto/signup.input.js.map +1 -0
  91. package/dist/dto/unlink-social-account-response.dto.d.ts +8 -0
  92. package/dist/dto/unlink-social-account-response.dto.d.ts.map +1 -0
  93. package/dist/dto/unlink-social-account-response.dto.js +37 -0
  94. package/dist/dto/unlink-social-account-response.dto.js.map +1 -0
  95. package/dist/dto/unlink-social-account.input.d.ts +4 -0
  96. package/dist/dto/unlink-social-account.input.d.ts.map +1 -0
  97. package/dist/dto/unlink-social-account.input.js +28 -0
  98. package/dist/dto/unlink-social-account.input.js.map +1 -0
  99. package/dist/dto/verify-biometric-signature.input.d.ts +6 -0
  100. package/dist/dto/verify-biometric-signature.input.d.ts.map +1 -0
  101. package/dist/dto/verify-biometric-signature.input.js +39 -0
  102. package/dist/dto/verify-biometric-signature.input.js.map +1 -0
  103. package/dist/dto/verify-email-response.dto.d.ts +5 -0
  104. package/dist/dto/verify-email-response.dto.d.ts.map +1 -0
  105. package/dist/dto/verify-email-response.dto.js +28 -0
  106. package/dist/dto/verify-email-response.dto.js.map +1 -0
  107. package/dist/dto/verify-email.input.d.ts +5 -0
  108. package/dist/dto/verify-email.input.d.ts.map +1 -0
  109. package/dist/dto/verify-email.input.js +33 -0
  110. package/dist/dto/verify-email.input.js.map +1 -0
  111. package/dist/dto/verify-phone.input.d.ts +5 -0
  112. package/dist/dto/verify-phone.input.d.ts.map +1 -0
  113. package/dist/dto/verify-phone.input.js +36 -0
  114. package/dist/dto/verify-phone.input.js.map +1 -0
  115. package/dist/entities/auth-user.entity.d.ts +23 -0
  116. package/dist/entities/auth-user.entity.d.ts.map +1 -0
  117. package/dist/entities/auth-user.entity.js +87 -0
  118. package/dist/entities/auth-user.entity.js.map +1 -0
  119. package/dist/exceptions/account-locked.exception.d.ts +5 -0
  120. package/dist/exceptions/account-locked.exception.d.ts.map +1 -0
  121. package/dist/exceptions/account-locked.exception.js +18 -0
  122. package/dist/exceptions/account-locked.exception.js.map +1 -0
  123. package/dist/exceptions/oauth.exceptions.d.ts +23 -0
  124. package/dist/exceptions/oauth.exceptions.d.ts.map +1 -0
  125. package/dist/exceptions/oauth.exceptions.js +84 -0
  126. package/dist/exceptions/oauth.exceptions.js.map +1 -0
  127. package/dist/exceptions/verification.exceptions.d.ts +14 -0
  128. package/dist/exceptions/verification.exceptions.d.ts.map +1 -0
  129. package/dist/exceptions/verification.exceptions.js +43 -0
  130. package/dist/exceptions/verification.exceptions.js.map +1 -0
  131. package/dist/guards/jwt-auth.guard.d.ts +7 -0
  132. package/dist/guards/jwt-auth.guard.d.ts.map +1 -0
  133. package/dist/guards/jwt-auth.guard.js +23 -0
  134. package/dist/guards/jwt-auth.guard.js.map +1 -0
  135. package/dist/index.d.ts +66 -0
  136. package/dist/index.d.ts.map +1 -0
  137. package/dist/index.js +82 -0
  138. package/dist/index.js.map +1 -0
  139. package/dist/interfaces/auth-lifecycle-hooks.interface.d.ts +11 -0
  140. package/dist/interfaces/auth-lifecycle-hooks.interface.d.ts.map +1 -0
  141. package/dist/interfaces/auth-lifecycle-hooks.interface.js +3 -0
  142. package/dist/interfaces/auth-lifecycle-hooks.interface.js.map +1 -0
  143. package/dist/interfaces/auth-logger.interface.d.ts +45 -0
  144. package/dist/interfaces/auth-logger.interface.d.ts.map +1 -0
  145. package/dist/interfaces/auth-logger.interface.js +42 -0
  146. package/dist/interfaces/auth-logger.interface.js.map +1 -0
  147. package/dist/interfaces/auth-user.interface.d.ts +32 -0
  148. package/dist/interfaces/auth-user.interface.d.ts.map +1 -0
  149. package/dist/interfaces/auth-user.interface.js +17 -0
  150. package/dist/interfaces/auth-user.interface.js.map +1 -0
  151. package/dist/interfaces/biometric-repository.interface.d.ts +22 -0
  152. package/dist/interfaces/biometric-repository.interface.d.ts.map +1 -0
  153. package/dist/interfaces/biometric-repository.interface.js +3 -0
  154. package/dist/interfaces/biometric-repository.interface.js.map +1 -0
  155. package/dist/interfaces/brute-force-repository.interface.d.ts +11 -0
  156. package/dist/interfaces/brute-force-repository.interface.d.ts.map +1 -0
  157. package/dist/interfaces/brute-force-repository.interface.js +3 -0
  158. package/dist/interfaces/brute-force-repository.interface.js.map +1 -0
  159. package/dist/interfaces/email-service.interface.d.ts +10 -0
  160. package/dist/interfaces/email-service.interface.d.ts.map +1 -0
  161. package/dist/interfaces/email-service.interface.js +3 -0
  162. package/dist/interfaces/email-service.interface.js.map +1 -0
  163. package/dist/interfaces/index.d.ts +12 -0
  164. package/dist/interfaces/index.d.ts.map +1 -0
  165. package/dist/interfaces/index.js +28 -0
  166. package/dist/interfaces/index.js.map +1 -0
  167. package/dist/interfaces/refresh-token-repository.interface.d.ts +18 -0
  168. package/dist/interfaces/refresh-token-repository.interface.d.ts.map +1 -0
  169. package/dist/interfaces/refresh-token-repository.interface.js +3 -0
  170. package/dist/interfaces/refresh-token-repository.interface.js.map +1 -0
  171. package/dist/interfaces/sms-service.interface.d.ts +8 -0
  172. package/dist/interfaces/sms-service.interface.d.ts.map +1 -0
  173. package/dist/interfaces/sms-service.interface.js +3 -0
  174. package/dist/interfaces/sms-service.interface.js.map +1 -0
  175. package/dist/interfaces/storage-service.interface.d.ts +5 -0
  176. package/dist/interfaces/storage-service.interface.d.ts.map +1 -0
  177. package/dist/interfaces/storage-service.interface.js +3 -0
  178. package/dist/interfaces/storage-service.interface.js.map +1 -0
  179. package/dist/interfaces/user-repository.interface.d.ts +42 -0
  180. package/dist/interfaces/user-repository.interface.d.ts.map +1 -0
  181. package/dist/interfaces/user-repository.interface.js +3 -0
  182. package/dist/interfaces/user-repository.interface.js.map +1 -0
  183. package/dist/interfaces/verification-repository.interface.d.ts +11 -0
  184. package/dist/interfaces/verification-repository.interface.d.ts.map +1 -0
  185. package/dist/interfaces/verification-repository.interface.js +3 -0
  186. package/dist/interfaces/verification-repository.interface.js.map +1 -0
  187. package/dist/repositories/noop-biometric.repository.d.ts +23 -0
  188. package/dist/repositories/noop-biometric.repository.d.ts.map +1 -0
  189. package/dist/repositories/noop-biometric.repository.js +42 -0
  190. package/dist/repositories/noop-biometric.repository.js.map +1 -0
  191. package/dist/repositories/noop-brute-force.repository.d.ts +12 -0
  192. package/dist/repositories/noop-brute-force.repository.d.ts.map +1 -0
  193. package/dist/repositories/noop-brute-force.repository.js +34 -0
  194. package/dist/repositories/noop-brute-force.repository.js.map +1 -0
  195. package/dist/repositories/noop-verification.repository.d.ts +12 -0
  196. package/dist/repositories/noop-verification.repository.d.ts.map +1 -0
  197. package/dist/repositories/noop-verification.repository.js +30 -0
  198. package/dist/repositories/noop-verification.repository.js.map +1 -0
  199. package/dist/resolvers/auth.resolver.d.ts +66 -0
  200. package/dist/resolvers/auth.resolver.d.ts.map +1 -0
  201. package/dist/resolvers/auth.resolver.js +455 -0
  202. package/dist/resolvers/auth.resolver.js.map +1 -0
  203. package/dist/resolvers/oauth.controller.d.ts +32 -0
  204. package/dist/resolvers/oauth.controller.d.ts.map +1 -0
  205. package/dist/resolvers/oauth.controller.js +216 -0
  206. package/dist/resolvers/oauth.controller.js.map +1 -0
  207. package/dist/services/auth.service.d.ts +104 -0
  208. package/dist/services/auth.service.d.ts.map +1 -0
  209. package/dist/services/auth.service.js +720 -0
  210. package/dist/services/auth.service.js.map +1 -0
  211. package/dist/services/biometric-auth.service.d.ts +26 -0
  212. package/dist/services/biometric-auth.service.d.ts.map +1 -0
  213. package/dist/services/biometric-auth.service.js +108 -0
  214. package/dist/services/biometric-auth.service.js.map +1 -0
  215. package/dist/services/biometric-verification.service.d.ts +9 -0
  216. package/dist/services/biometric-verification.service.d.ts.map +1 -0
  217. package/dist/services/biometric-verification.service.js +78 -0
  218. package/dist/services/biometric-verification.service.js.map +1 -0
  219. package/dist/services/brute-force-protection.service.d.ts +23 -0
  220. package/dist/services/brute-force-protection.service.d.ts.map +1 -0
  221. package/dist/services/brute-force-protection.service.js +105 -0
  222. package/dist/services/brute-force-protection.service.js.map +1 -0
  223. package/dist/services/console-logger.service.d.ts +9 -0
  224. package/dist/services/console-logger.service.d.ts.map +1 -0
  225. package/dist/services/console-logger.service.js +46 -0
  226. package/dist/services/console-logger.service.js.map +1 -0
  227. package/dist/services/encryption.service.d.ts +14 -0
  228. package/dist/services/encryption.service.d.ts.map +1 -0
  229. package/dist/services/encryption.service.js +98 -0
  230. package/dist/services/encryption.service.js.map +1 -0
  231. package/dist/services/noop-email.service.d.ts +12 -0
  232. package/dist/services/noop-email.service.d.ts.map +1 -0
  233. package/dist/services/noop-email.service.js +42 -0
  234. package/dist/services/noop-email.service.js.map +1 -0
  235. package/dist/services/noop-sms.service.d.ts +8 -0
  236. package/dist/services/noop-sms.service.d.ts.map +1 -0
  237. package/dist/services/noop-sms.service.js +38 -0
  238. package/dist/services/noop-sms.service.js.map +1 -0
  239. package/dist/services/oauth-linking-token.service.d.ts +24 -0
  240. package/dist/services/oauth-linking-token.service.d.ts.map +1 -0
  241. package/dist/services/oauth-linking-token.service.js +79 -0
  242. package/dist/services/oauth-linking-token.service.js.map +1 -0
  243. package/dist/services/oauth-state.service.d.ts +19 -0
  244. package/dist/services/oauth-state.service.d.ts.map +1 -0
  245. package/dist/services/oauth-state.service.js +91 -0
  246. package/dist/services/oauth-state.service.js.map +1 -0
  247. package/dist/services/refresh-token.service.d.ts +29 -0
  248. package/dist/services/refresh-token.service.d.ts.map +1 -0
  249. package/dist/services/refresh-token.service.js +106 -0
  250. package/dist/services/refresh-token.service.js.map +1 -0
  251. package/dist/services/sendgrid-email.service.d.ts +33 -0
  252. package/dist/services/sendgrid-email.service.d.ts.map +1 -0
  253. package/dist/services/sendgrid-email.service.js +1002 -0
  254. package/dist/services/sendgrid-email.service.js.map +1 -0
  255. package/dist/services/twilio-sms.service.d.ts +13 -0
  256. package/dist/services/twilio-sms.service.d.ts.map +1 -0
  257. package/dist/services/twilio-sms.service.js +84 -0
  258. package/dist/services/twilio-sms.service.js.map +1 -0
  259. package/dist/services/verification.service.d.ts +27 -0
  260. package/dist/services/verification.service.d.ts.map +1 -0
  261. package/dist/services/verification.service.js +179 -0
  262. package/dist/services/verification.service.js.map +1 -0
  263. package/dist/strategies/facebook.strategy.d.ts +18 -0
  264. package/dist/strategies/facebook.strategy.d.ts.map +1 -0
  265. package/dist/strategies/facebook.strategy.js +96 -0
  266. package/dist/strategies/facebook.strategy.js.map +1 -0
  267. package/dist/strategies/google.strategy.d.ts +17 -0
  268. package/dist/strategies/google.strategy.d.ts.map +1 -0
  269. package/dist/strategies/google.strategy.js +73 -0
  270. package/dist/strategies/google.strategy.js.map +1 -0
  271. package/dist/strategies/jwt.strategy.d.ts +14 -0
  272. package/dist/strategies/jwt.strategy.d.ts.map +1 -0
  273. package/dist/strategies/jwt.strategy.js +45 -0
  274. package/dist/strategies/jwt.strategy.js.map +1 -0
  275. package/dist/utils/provider-helpers.d.ts +12 -0
  276. package/dist/utils/provider-helpers.d.ts.map +1 -0
  277. package/dist/utils/provider-helpers.js +33 -0
  278. package/dist/utils/provider-helpers.js.map +1 -0
  279. package/package.json +109 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryption.service.js","sourceRoot":"","sources":["../../src/services/encryption.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { IEmailService } from '../interfaces/email-service.interface';
2
+ export declare class NoOpEmailService implements IEmailService {
3
+ private readonly logger;
4
+ sendVerificationEmail(email: string, code: string, expiresInMinutes: number): Promise<void>;
5
+ sendPasswordResetEmail(email: string, resetToken: string, resetUrl: string): Promise<void>;
6
+ sendAccountLockedEmail(email: string, lockDurationMinutes: number): Promise<void>;
7
+ sendWelcomeEmail(email: string, name?: string): Promise<void>;
8
+ sendAccountLinkedEmail(email: string, provider: 'google' | 'facebook', linkedAt: Date): Promise<void>;
9
+ sendAccountUnlinkedEmail(email: string, provider: 'google' | 'facebook', unlinkedAt: Date): Promise<void>;
10
+ sendPasswordChangedEmail(email: string, changedAt: Date, ipAddress?: string): Promise<void>;
11
+ }
12
+ //# sourceMappingURL=noop-email.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noop-email.service.d.ts","sourceRoot":"","sources":["../../src/services/noop-email.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAOtE,qBACa,gBAAiB,YAAW,aAAa;IACpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;IAEtD,qBAAqB,CACzB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,IAAI,CAAC;IAMV,sBAAsB,CAC1B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;IAMV,sBAAsB,CAC1B,KAAK,EAAE,MAAM,EACb,mBAAmB,EAAE,MAAM,GAC1B,OAAO,CAAC,IAAI,CAAC;IAMV,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM7D,sBAAsB,CAC1B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,QAAQ,GAAG,UAAU,EAC/B,QAAQ,EAAE,IAAI,GACb,OAAO,CAAC,IAAI,CAAC;IAMV,wBAAwB,CAC5B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,QAAQ,GAAG,UAAU,EAC/B,UAAU,EAAE,IAAI,GACf,OAAO,CAAC,IAAI,CAAC;IAMV,wBAAwB,CAC5B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,IAAI,EACf,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;CAKjB"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var NoOpEmailService_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.NoOpEmailService = void 0;
11
+ const common_1 = require("@nestjs/common");
12
+ let NoOpEmailService = NoOpEmailService_1 = class NoOpEmailService {
13
+ constructor() {
14
+ this.logger = new common_1.Logger(NoOpEmailService_1.name);
15
+ }
16
+ async sendVerificationEmail(email, code, expiresInMinutes) {
17
+ this.logger.log(`[NoOp] Would send verification email to ${email} with code ${code}, expires in ${expiresInMinutes} minutes`);
18
+ }
19
+ async sendPasswordResetEmail(email, resetToken, resetUrl) {
20
+ this.logger.log(`[NoOp] Would send password reset email to ${email} with token ${resetToken}, URL: ${resetUrl}`);
21
+ }
22
+ async sendAccountLockedEmail(email, lockDurationMinutes) {
23
+ this.logger.log(`[NoOp] Would send account locked email to ${email}, locked for ${lockDurationMinutes} minutes`);
24
+ }
25
+ async sendWelcomeEmail(email, name) {
26
+ this.logger.log(`[NoOp] Would send welcome email to ${email} for user ${name || 'unknown'}`);
27
+ }
28
+ async sendAccountLinkedEmail(email, provider, linkedAt) {
29
+ this.logger.log(`[NoOp] Would send account linked email to ${email}, provider: ${provider}, linked at: ${linkedAt}`);
30
+ }
31
+ async sendAccountUnlinkedEmail(email, provider, unlinkedAt) {
32
+ this.logger.log(`[NoOp] Would send account unlinked email to ${email}, provider: ${provider}, unlinked at: ${unlinkedAt}`);
33
+ }
34
+ async sendPasswordChangedEmail(email, changedAt, ipAddress) {
35
+ this.logger.log(`[NoOp] Would send password changed email to ${email}, changed at: ${changedAt}, IP: ${ipAddress || 'unknown'}`);
36
+ }
37
+ };
38
+ exports.NoOpEmailService = NoOpEmailService;
39
+ exports.NoOpEmailService = NoOpEmailService = NoOpEmailService_1 = __decorate([
40
+ (0, common_1.Injectable)()
41
+ ], NoOpEmailService);
42
+ //# sourceMappingURL=noop-email.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noop-email.service.js","sourceRoot":"","sources":["../../src/services/noop-email.service.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAoD;AAS7C,IAAM,gBAAgB,wBAAtB,MAAM,gBAAgB;IAAtB;QACY,WAAM,GAAG,IAAI,eAAM,CAAC,kBAAgB,CAAC,IAAI,CAAC,CAAC;IAkE9D,CAAC;IAhEC,KAAK,CAAC,qBAAqB,CACzB,KAAa,EACb,IAAY,EACZ,gBAAwB;QAExB,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,2CAA2C,KAAK,cAAc,IAAI,gBAAgB,gBAAgB,UAAU,CAC7G,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,sBAAsB,CAC1B,KAAa,EACb,UAAkB,EAClB,QAAgB;QAEhB,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,6CAA6C,KAAK,eAAe,UAAU,UAAU,QAAQ,EAAE,CAChG,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,sBAAsB,CAC1B,KAAa,EACb,mBAA2B;QAE3B,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,6CAA6C,KAAK,gBAAgB,mBAAmB,UAAU,CAChG,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,KAAa,EAAE,IAAa;QACjD,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,sCAAsC,KAAK,aAAa,IAAI,IAAI,SAAS,EAAE,CAC5E,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,sBAAsB,CAC1B,KAAa,EACb,QAA+B,EAC/B,QAAc;QAEd,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,6CAA6C,KAAK,eAAe,QAAQ,gBAAgB,QAAQ,EAAE,CACpG,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,wBAAwB,CAC5B,KAAa,EACb,QAA+B,EAC/B,UAAgB;QAEhB,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,+CAA+C,KAAK,eAAe,QAAQ,kBAAkB,UAAU,EAAE,CAC1G,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,wBAAwB,CAC5B,KAAa,EACb,SAAe,EACf,SAAkB;QAElB,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,+CAA+C,KAAK,iBAAiB,SAAS,SAAS,SAAS,IAAI,SAAS,EAAE,CAChH,CAAC;IACJ,CAAC;CACF,CAAA;AAnEY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,mBAAU,GAAE;GACA,gBAAgB,CAmE5B"}
@@ -0,0 +1,8 @@
1
+ import { ISmsService } from '../interfaces/sms-service.interface';
2
+ export declare class NoOpSmsService implements ISmsService {
3
+ private readonly logger;
4
+ sendVerificationSms(phoneNumber: string, code: string, expiresInMinutes: number): Promise<void>;
5
+ normalizePhoneNumber(phoneNumber: string, countryCode?: string): string | null;
6
+ maskPhoneNumber(phoneNumber: string): string;
7
+ }
8
+ //# sourceMappingURL=noop-sms.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noop-sms.service.d.ts","sourceRoot":"","sources":["../../src/services/noop-sms.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAOlE,qBACa,cAAe,YAAW,WAAW;IAChD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;IAEpD,mBAAmB,CACvB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,IAAI,CAAC;IAMhB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAU9E,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;CAS7C"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var NoOpSmsService_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.NoOpSmsService = void 0;
11
+ const common_1 = require("@nestjs/common");
12
+ let NoOpSmsService = NoOpSmsService_1 = class NoOpSmsService {
13
+ constructor() {
14
+ this.logger = new common_1.Logger(NoOpSmsService_1.name);
15
+ }
16
+ async sendVerificationSms(phoneNumber, code, expiresInMinutes) {
17
+ this.logger.log(`[NoOp] Would send verification SMS to ${phoneNumber} with code ${code}, expires in ${expiresInMinutes} minutes`);
18
+ }
19
+ normalizePhoneNumber(phoneNumber, countryCode) {
20
+ const normalized = phoneNumber.replace(/\D/g, '');
21
+ const result = normalized.length > 0 ? (countryCode ? `+${normalized}` : normalized) : null;
22
+ this.logger.log(`[NoOp] Normalized phone number ${phoneNumber} (${countryCode || 'no country code'}) → ${result}`);
23
+ return result;
24
+ }
25
+ maskPhoneNumber(phoneNumber) {
26
+ const normalized = this.normalizePhoneNumber(phoneNumber);
27
+ if (!normalized)
28
+ return '***-***-****';
29
+ const masked = `***-***-${normalized.slice(-4)}`;
30
+ this.logger.log(`[NoOp] Masked phone number ${phoneNumber} → ${masked}`);
31
+ return masked;
32
+ }
33
+ };
34
+ exports.NoOpSmsService = NoOpSmsService;
35
+ exports.NoOpSmsService = NoOpSmsService = NoOpSmsService_1 = __decorate([
36
+ (0, common_1.Injectable)()
37
+ ], NoOpSmsService);
38
+ //# sourceMappingURL=noop-sms.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noop-sms.service.js","sourceRoot":"","sources":["../../src/services/noop-sms.service.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAoD;AAS7C,IAAM,cAAc,sBAApB,MAAM,cAAc;IAApB;QACY,WAAM,GAAG,IAAI,eAAM,CAAC,gBAAc,CAAC,IAAI,CAAC,CAAC;IA+B5D,CAAC;IA7BC,KAAK,CAAC,mBAAmB,CACvB,WAAmB,EACnB,IAAY,EACZ,gBAAwB;QAExB,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,yCAAyC,WAAW,cAAc,IAAI,gBAAgB,gBAAgB,UAAU,CACjH,CAAC;IACJ,CAAC;IAED,oBAAoB,CAAC,WAAmB,EAAE,WAAoB;QAE5D,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5F,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,kCAAkC,WAAW,KAAK,WAAW,IAAI,iBAAiB,OAAO,MAAM,EAAE,CAClG,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,eAAe,CAAC,WAAmB;QACjC,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAC1D,IAAI,CAAC,UAAU;YAAE,OAAO,cAAc,CAAC;QACvC,MAAM,MAAM,GAAG,WAAW,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,8BAA8B,WAAW,MAAM,MAAM,EAAE,CACxD,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAA;AAhCY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;GACA,cAAc,CAgC1B"}
@@ -0,0 +1,24 @@
1
+ import { JwtService } from '@nestjs/jwt';
2
+ import { ConfigService } from '@nestjs/config';
3
+ export interface OAuthLinkingTokenPayload {
4
+ googleId: string;
5
+ email: string;
6
+ iat: number;
7
+ exp: number;
8
+ }
9
+ export interface FacebookEmailFallbackTokenPayload {
10
+ facebookId: string;
11
+ purpose: 'facebook_email_fallback';
12
+ iat: number;
13
+ exp: number;
14
+ }
15
+ export declare class OAuthLinkingTokenService {
16
+ private jwtService;
17
+ private configService;
18
+ constructor(jwtService: JwtService, configService: ConfigService);
19
+ generateLinkingToken(googleId: string, email: string): string;
20
+ validateLinkingToken(token: string): OAuthLinkingTokenPayload;
21
+ generateFacebookEmailFallbackToken(facebookId: string): string;
22
+ validateFacebookEmailFallbackToken(token: string): FacebookEmailFallbackTokenPayload;
23
+ }
24
+ //# sourceMappingURL=oauth-linking-token.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-linking-token.service.d.ts","sourceRoot":"","sources":["../../src/services/oauth-linking-token.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAM/C,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAWD,MAAM,WAAW,iCAAiC;IAChD,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,yBAAyB,CAAC;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAqBD,qBACa,wBAAwB;IAEjC,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,aAAa;gBADb,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,aAAa;IAUtC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAoB7D,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,wBAAwB;IA6B7D,kCAAkC,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAsB9D,kCAAkC,CAChC,KAAK,EAAE,MAAM,GACZ,iCAAiC;CAuBrC"}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.OAuthLinkingTokenService = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const jwt_1 = require("@nestjs/jwt");
15
+ const config_1 = require("@nestjs/config");
16
+ let OAuthLinkingTokenService = class OAuthLinkingTokenService {
17
+ constructor(jwtService, configService) {
18
+ this.jwtService = jwtService;
19
+ this.configService = configService;
20
+ }
21
+ generateLinkingToken(googleId, email) {
22
+ const payload = {
23
+ googleId,
24
+ email,
25
+ };
26
+ return this.jwtService.sign(payload, {
27
+ secret: this.configService.get('JWT_SECRET'),
28
+ expiresIn: '5m',
29
+ });
30
+ }
31
+ validateLinkingToken(token) {
32
+ try {
33
+ const payload = this.jwtService.verify(token, {
34
+ secret: this.configService.get('JWT_SECRET'),
35
+ });
36
+ return payload;
37
+ }
38
+ catch (error) {
39
+ if (error.name === 'TokenExpiredError') {
40
+ throw new Error('Linking session expired. Please sign in with Google again.');
41
+ }
42
+ throw new Error('Invalid linking token');
43
+ }
44
+ }
45
+ generateFacebookEmailFallbackToken(facebookId) {
46
+ const payload = {
47
+ facebookId,
48
+ purpose: 'facebook_email_fallback',
49
+ };
50
+ return this.jwtService.sign(payload, {
51
+ secret: this.configService.get('JWT_SECRET'),
52
+ expiresIn: '10m',
53
+ });
54
+ }
55
+ validateFacebookEmailFallbackToken(token) {
56
+ try {
57
+ const payload = this.jwtService.verify(token, {
58
+ secret: this.configService.get('JWT_SECRET'),
59
+ });
60
+ if (payload.purpose !== 'facebook_email_fallback') {
61
+ throw new Error('Invalid token purpose');
62
+ }
63
+ return payload;
64
+ }
65
+ catch (error) {
66
+ if (error.name === 'TokenExpiredError') {
67
+ throw new Error('Email entry session expired. Please sign in with Facebook again.');
68
+ }
69
+ throw new Error('Invalid email fallback token');
70
+ }
71
+ }
72
+ };
73
+ exports.OAuthLinkingTokenService = OAuthLinkingTokenService;
74
+ exports.OAuthLinkingTokenService = OAuthLinkingTokenService = __decorate([
75
+ (0, common_1.Injectable)(),
76
+ __metadata("design:paramtypes", [jwt_1.JwtService,
77
+ config_1.ConfigService])
78
+ ], OAuthLinkingTokenService);
79
+ //# sourceMappingURL=oauth-linking-token.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-linking-token.service.js","sourceRoot":"","sources":["../../src/services/oauth-linking-token.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,qCAAyC;AACzC,2CAA+C;AAiDxC,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IACnC,YACU,UAAsB,EACtB,aAA4B;QAD5B,eAAU,GAAV,UAAU,CAAY;QACtB,kBAAa,GAAb,aAAa,CAAe;IACnC,CAAC;IASJ,oBAAoB,CAAC,QAAgB,EAAE,KAAa;QAClD,MAAM,OAAO,GAAG;YACd,QAAQ;YACR,KAAK;SACN,CAAC;QAGF,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE;YACnC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,YAAY,CAAC;YACpD,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;IACL,CAAC;IASD,oBAAoB,CAAC,KAAa;QAChC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAA2B,KAAK,EAAE;gBACtE,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,YAAY,CAAC;aACrD,CAAC,CAAC;YAEH,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;gBACvC,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAaD,kCAAkC,CAAC,UAAkB;QACnD,MAAM,OAAO,GAAG;YACd,UAAU;YACV,OAAO,EAAE,yBAAyB;SACnC,CAAC;QAGF,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE;YACnC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,YAAY,CAAC;YACpD,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;IACL,CAAC;IAWD,kCAAkC,CAChC,KAAa;QAEb,IAAI,CAAC;YACH,MAAM,OAAO,GACX,IAAI,CAAC,UAAU,CAAC,MAAM,CAAoC,KAAK,EAAE;gBAC/D,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,YAAY,CAAC;aACrD,CAAC,CAAC;YAGL,IAAI,OAAO,CAAC,OAAO,KAAK,yBAAyB,EAAE,CAAC;gBAClD,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;YAC3C,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;gBACvC,MAAM,IAAI,KAAK,CACb,kEAAkE,CACnE,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;CACF,CAAA;AA7GY,4DAAwB;mCAAxB,wBAAwB;IADpC,IAAA,mBAAU,GAAE;qCAGW,gBAAU;QACP,sBAAa;GAH3B,wBAAwB,CA6GpC"}
@@ -0,0 +1,19 @@
1
+ import { ConfigService } from '@nestjs/config';
2
+ import { JwtService } from '@nestjs/jwt';
3
+ export interface OAuthStatePayload {
4
+ provider: 'google' | 'facebook' | 'apple';
5
+ redirectUrl: string;
6
+ nonce: string;
7
+ iat: number;
8
+ exp: number;
9
+ }
10
+ export declare class OAuthStateService {
11
+ private configService;
12
+ private jwtService;
13
+ private readonly expirySeconds;
14
+ constructor(configService: ConfigService, jwtService: JwtService);
15
+ generateState(provider: 'google' | 'facebook' | 'apple', redirectUrl: string): string;
16
+ validateState(state: string): OAuthStatePayload;
17
+ private validateRedirectUrl;
18
+ }
19
+ //# sourceMappingURL=oauth-state.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-state.service.d.ts","sourceRoot":"","sources":["../../src/services/oauth-state.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAOzC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAyBD,qBACa,iBAAiB;IAI1B,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,UAAU;IAJpB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAO;gBAG3B,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,UAAU;IAUhC,aAAa,CACX,QAAQ,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,EACzC,WAAW,EAAE,MAAM,GAClB,MAAM;IA+BT,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB;IA+C/C,OAAO,CAAC,mBAAmB;CA6B5B"}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.OAuthStateService = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const config_1 = require("@nestjs/config");
15
+ const jwt_1 = require("@nestjs/jwt");
16
+ const crypto_1 = require("crypto");
17
+ let OAuthStateService = class OAuthStateService {
18
+ constructor(configService, jwtService) {
19
+ this.configService = configService;
20
+ this.jwtService = jwtService;
21
+ this.expirySeconds = 600;
22
+ }
23
+ generateState(provider, redirectUrl) {
24
+ const nonce = (0, crypto_1.randomBytes)(16).toString('base64url');
25
+ const now = Math.floor(Date.now() / 1000);
26
+ const payload = {
27
+ provider,
28
+ redirectUrl,
29
+ nonce,
30
+ iat: now,
31
+ exp: now + this.expirySeconds,
32
+ };
33
+ const secret = this.configService.getOrThrow('OAUTH_STATE_SECRET');
34
+ const state = this.jwtService.sign(payload, {
35
+ secret,
36
+ expiresIn: this.expirySeconds,
37
+ });
38
+ return state;
39
+ }
40
+ validateState(state) {
41
+ try {
42
+ const secret = this.configService.getOrThrow('OAUTH_STATE_SECRET');
43
+ const payload = this.jwtService.verify(state, {
44
+ secret,
45
+ });
46
+ if (!payload.provider ||
47
+ !payload.redirectUrl ||
48
+ !payload.nonce ||
49
+ !payload.iat ||
50
+ !payload.exp) {
51
+ throw new common_1.UnauthorizedException('Invalid OAuth state: missing fields');
52
+ }
53
+ if (!['google', 'facebook', 'apple'].includes(payload.provider)) {
54
+ throw new common_1.UnauthorizedException('Invalid OAuth state: unknown provider');
55
+ }
56
+ this.validateRedirectUrl(payload.redirectUrl);
57
+ return payload;
58
+ }
59
+ catch (error) {
60
+ if (error instanceof common_1.UnauthorizedException) {
61
+ throw error;
62
+ }
63
+ throw new common_1.UnauthorizedException('Invalid OAuth state parameter');
64
+ }
65
+ }
66
+ validateRedirectUrl(redirectUrl) {
67
+ const whitelistRaw = this.configService.get('OAUTH_REDIRECT_WHITELIST', '');
68
+ const whitelist = whitelistRaw.split(',').map((url) => url.trim());
69
+ const defaultWhitelist = [
70
+ 'http://localhost:3000',
71
+ 'http://localhost:8080',
72
+ 'exp://localhost:8081',
73
+ ];
74
+ const allowedUrls = [...whitelist, ...defaultWhitelist];
75
+ const isAllowed = allowedUrls.some((allowed) => {
76
+ if (!allowed)
77
+ return false;
78
+ return redirectUrl.startsWith(allowed);
79
+ });
80
+ if (!isAllowed) {
81
+ throw new common_1.UnauthorizedException('Invalid OAuth state: redirect URL not whitelisted');
82
+ }
83
+ }
84
+ };
85
+ exports.OAuthStateService = OAuthStateService;
86
+ exports.OAuthStateService = OAuthStateService = __decorate([
87
+ (0, common_1.Injectable)(),
88
+ __metadata("design:paramtypes", [config_1.ConfigService,
89
+ jwt_1.JwtService])
90
+ ], OAuthStateService);
91
+ //# sourceMappingURL=oauth-state.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-state.service.js","sourceRoot":"","sources":["../../src/services/oauth-state.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { ConfigService } from '@nestjs/config';
2
+ interface RefreshCacheEntry {
3
+ accessToken: string;
4
+ refreshToken: string;
5
+ refreshTokenHash: string;
6
+ expiresAt: Date;
7
+ }
8
+ export declare class RefreshTokenService {
9
+ private configService;
10
+ private readonly tokenLength;
11
+ private readonly expiryDays;
12
+ private readonly gracePeriodSeconds;
13
+ private readonly refreshCache;
14
+ constructor(configService: ConfigService);
15
+ generateToken(): {
16
+ token: string;
17
+ hash: string;
18
+ };
19
+ hashToken(token: string): string;
20
+ validateToken(token: string, storedHash: string): boolean;
21
+ isTokenExpired(createdAt: Date): boolean;
22
+ getExpiryDate(): Date;
23
+ cacheRefreshResult(oldTokenHash: string, accessToken: string, refreshToken: string, refreshTokenHash: string): void;
24
+ getCachedRefreshResult(tokenHash: string): RefreshCacheEntry | null;
25
+ invalidateCachedRefresh(tokenHash: string): void;
26
+ private cleanupExpiredCache;
27
+ }
28
+ export {};
29
+ //# sourceMappingURL=refresh-token.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh-token.service.d.ts","sourceRoot":"","sources":["../../src/services/refresh-token.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAM/C,UAAU,iBAAiB;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,IAAI,CAAC;CACjB;AAyBD,qBACa,mBAAmB;IAQlB,OAAO,CAAC,aAAa;IAPjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAM;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAM;IACjC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAM;IAGzC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAwC;gBAEjD,aAAa,EAAE,aAAa;IAShD,aAAa,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;IAgBhD,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAgBhC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO;IAoCzD,cAAc,CAAC,SAAS,EAAE,IAAI,GAAG,OAAO;IAWxC,aAAa,IAAI,IAAI;IAerB,kBAAkB,CAChB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,gBAAgB,EAAE,MAAM,GACvB,IAAI;IAkBP,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAsBnE,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAQhD,OAAO,CAAC,mBAAmB;CAQ5B"}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.RefreshTokenService = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const config_1 = require("@nestjs/config");
15
+ const crypto_1 = require("crypto");
16
+ let RefreshTokenService = class RefreshTokenService {
17
+ constructor(configService) {
18
+ this.configService = configService;
19
+ this.tokenLength = 32;
20
+ this.expiryDays = 30;
21
+ this.gracePeriodSeconds = 10;
22
+ this.refreshCache = new Map();
23
+ setInterval(() => this.cleanupExpiredCache(), 60 * 1000);
24
+ }
25
+ generateToken() {
26
+ const tokenBuffer = (0, crypto_1.randomBytes)(this.tokenLength);
27
+ const token = tokenBuffer.toString('base64url');
28
+ const hash = this.hashToken(token);
29
+ return { token, hash };
30
+ }
31
+ hashToken(token) {
32
+ const secret = this.configService.getOrThrow('REFRESH_TOKEN_SECRET');
33
+ const hmac = (0, crypto_1.createHmac)('sha256', secret);
34
+ hmac.update(token);
35
+ return hmac.digest('hex');
36
+ }
37
+ validateToken(token, storedHash) {
38
+ try {
39
+ const computedHash = this.hashToken(token);
40
+ const computedBuffer = Buffer.from(computedHash, 'hex');
41
+ const storedBuffer = Buffer.from(storedHash, 'hex');
42
+ if (computedBuffer.length !== 32 || storedBuffer.length !== 32) {
43
+ throw new common_1.UnauthorizedException('Invalid token format');
44
+ }
45
+ const isValid = (0, crypto_1.timingSafeEqual)(computedBuffer, storedBuffer);
46
+ if (!isValid) {
47
+ throw new common_1.UnauthorizedException('Invalid refresh token');
48
+ }
49
+ return true;
50
+ }
51
+ catch (error) {
52
+ if (error instanceof common_1.UnauthorizedException) {
53
+ throw error;
54
+ }
55
+ throw new common_1.UnauthorizedException('Invalid refresh token');
56
+ }
57
+ }
58
+ isTokenExpired(createdAt) {
59
+ const now = new Date();
60
+ const expiryMs = this.expiryDays * 24 * 60 * 60 * 1000;
61
+ const tokenAge = now.getTime() - createdAt.getTime();
62
+ return tokenAge > expiryMs;
63
+ }
64
+ getExpiryDate() {
65
+ const now = new Date();
66
+ const expiryMs = this.expiryDays * 24 * 60 * 60 * 1000;
67
+ return new Date(now.getTime() + expiryMs);
68
+ }
69
+ cacheRefreshResult(oldTokenHash, accessToken, refreshToken, refreshTokenHash) {
70
+ const expiresAt = new Date(Date.now() + this.gracePeriodSeconds * 1000);
71
+ this.refreshCache.set(oldTokenHash, {
72
+ accessToken,
73
+ refreshToken,
74
+ refreshTokenHash,
75
+ expiresAt,
76
+ });
77
+ }
78
+ getCachedRefreshResult(tokenHash) {
79
+ const entry = this.refreshCache.get(tokenHash);
80
+ if (!entry) {
81
+ return null;
82
+ }
83
+ if (new Date() > entry.expiresAt) {
84
+ this.refreshCache.delete(tokenHash);
85
+ return null;
86
+ }
87
+ return entry;
88
+ }
89
+ invalidateCachedRefresh(tokenHash) {
90
+ this.refreshCache.delete(tokenHash);
91
+ }
92
+ cleanupExpiredCache() {
93
+ const now = new Date();
94
+ for (const [key, entry] of this.refreshCache.entries()) {
95
+ if (now > entry.expiresAt) {
96
+ this.refreshCache.delete(key);
97
+ }
98
+ }
99
+ }
100
+ };
101
+ exports.RefreshTokenService = RefreshTokenService;
102
+ exports.RefreshTokenService = RefreshTokenService = __decorate([
103
+ (0, common_1.Injectable)(),
104
+ __metadata("design:paramtypes", [config_1.ConfigService])
105
+ ], RefreshTokenService);
106
+ //# sourceMappingURL=refresh-token.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh-token.service.js","sourceRoot":"","sources":["../../src/services/refresh-token.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { ConfigService } from '@nestjs/config';
2
+ import { IEmailService } from '../interfaces/email-service.interface';
3
+ export declare class EmailService implements IEmailService {
4
+ private configService;
5
+ private readonly logger;
6
+ private readonly fromEmail;
7
+ private readonly fromName;
8
+ constructor(configService: ConfigService);
9
+ sendVerificationEmail(email: string, code: string, expiresInMinutes: number): Promise<void>;
10
+ sendPasswordResetEmail(email: string, resetToken: string, resetUrl: string): Promise<void>;
11
+ sendAccountLockedEmail(email: string, lockDurationMinutes: number): Promise<void>;
12
+ sendWelcomeEmail(email: string, name?: string): Promise<void>;
13
+ sendAccountLinkedEmail(email: string, provider: 'google' | 'facebook', linkedAt: Date): Promise<void>;
14
+ sendAccountUnlinkedEmail(email: string, provider: 'google' | 'facebook', unlinkedAt: Date): Promise<void>;
15
+ sendPasswordChangedEmail(email: string, changedAt: Date, ipAddress?: string): Promise<void>;
16
+ private renderVerificationHtmlTemplate;
17
+ private renderPasswordResetHtmlTemplate;
18
+ private renderAccountLockedHtmlTemplate;
19
+ private renderWelcomeHtmlTemplate;
20
+ private renderAccountLinkedHtmlTemplate;
21
+ private renderAccountUnlinkedHtmlTemplate;
22
+ private renderPasswordChangedHtmlTemplate;
23
+ private renderVerificationTextTemplate;
24
+ private renderPasswordResetTextTemplate;
25
+ private renderAccountLockedTextTemplate;
26
+ private renderWelcomeTextTemplate;
27
+ private renderAccountLinkedTextTemplate;
28
+ private renderAccountUnlinkedTextTemplate;
29
+ private renderPasswordChangedTextTemplate;
30
+ private capitalize;
31
+ private formatDate;
32
+ }
33
+ //# sourceMappingURL=sendgrid-email.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sendgrid-email.service.d.ts","sourceRoot":"","sources":["../../src/services/sendgrid-email.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAMtE,qBACa,YAAa,YAAW,aAAa;IAKpC,OAAO,CAAC,aAAa;IAJjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;IACxD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEd,aAAa,EAAE,aAAa;IAe1C,qBAAqB,CACzB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,IAAI,CAAC;IAwBV,sBAAsB,CAC1B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;IAwBV,sBAAsB,CAC1B,KAAK,EAAE,MAAM,EACb,mBAAmB,EAAE,MAAM,GAC1B,OAAO,CAAC,IAAI,CAAC;IAwBV,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB7D,sBAAsB,CAC1B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,QAAQ,GAAG,UAAU,EAC/B,QAAQ,EAAE,IAAI,GACb,OAAO,CAAC,IAAI,CAAC;IA4BV,wBAAwB,CAC5B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,QAAQ,GAAG,UAAU,EAC/B,UAAU,EAAE,IAAI,GACf,OAAO,CAAC,IAAI,CAAC;IA4BV,wBAAwB,CAC5B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,IAAI,EACf,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IA6BhB,OAAO,CAAC,8BAA8B;IA8GtC,OAAO,CAAC,+BAA+B;IAmGvC,OAAO,CAAC,+BAA+B;IAyFvC,OAAO,CAAC,yBAAyB;IAyFjC,OAAO,CAAC,+BAA+B;IAkGvC,OAAO,CAAC,iCAAiC;IAmGzC,OAAO,CAAC,iCAAiC;IA8GzC,OAAO,CAAC,8BAA8B;IAgBtC,OAAO,CAAC,+BAA+B;IAevC,OAAO,CAAC,+BAA+B;IAgBvC,OAAO,CAAC,yBAAyB;IAkBjC,OAAO,CAAC,+BAA+B;IAsBvC,OAAO,CAAC,iCAAiC;IAsBzC,OAAO,CAAC,iCAAiC;IA0BzC,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,UAAU;CAMnB"}