@techelusive/nest-auth 0.0.0-stage → 0.2.1

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 (340) hide show
  1. package/CHANGELOG.md +71 -0
  2. package/LICENSE +21 -0
  3. package/README.md +204 -2
  4. package/api/openapi.json +4399 -0
  5. package/api/techelusive-authentication.postman_collection.json +3178 -0
  6. package/dist/auth-options.d.ts +156 -0
  7. package/dist/auth-options.js +3 -0
  8. package/dist/auth-options.js.map +1 -0
  9. package/dist/auth-options.validation.d.ts +9 -0
  10. package/dist/auth-options.validation.js +74 -0
  11. package/dist/auth-options.validation.js.map +1 -0
  12. package/dist/auth.module.d.ts +38 -0
  13. package/dist/auth.module.js +173 -0
  14. package/dist/auth.module.js.map +1 -0
  15. package/dist/common/auth-error.d.ts +16 -0
  16. package/dist/common/auth-error.js +23 -0
  17. package/dist/common/auth-error.js.map +1 -0
  18. package/dist/common/auth-exception.filter.d.ts +24 -0
  19. package/dist/common/auth-exception.filter.js +66 -0
  20. package/dist/common/auth-exception.filter.js.map +1 -0
  21. package/dist/common/crypto/jwt.d.ts +89 -0
  22. package/dist/common/crypto/jwt.js +144 -0
  23. package/dist/common/crypto/jwt.js.map +1 -0
  24. package/dist/common/crypto/random-secrets.d.ts +78 -0
  25. package/dist/common/crypto/random-secrets.js +113 -0
  26. package/dist/common/crypto/random-secrets.js.map +1 -0
  27. package/dist/common/crypto/remote-public-keys.d.ts +49 -0
  28. package/dist/common/crypto/remote-public-keys.js +105 -0
  29. package/dist/common/crypto/remote-public-keys.js.map +1 -0
  30. package/dist/common/crypto/totp.d.ts +68 -0
  31. package/dist/common/crypto/totp.js +148 -0
  32. package/dist/common/crypto/totp.js.map +1 -0
  33. package/dist/common/encryption.service.d.ts +36 -0
  34. package/dist/common/encryption.service.js +111 -0
  35. package/dist/common/encryption.service.js.map +1 -0
  36. package/dist/common/identifiers.d.ts +48 -0
  37. package/dist/common/identifiers.js +89 -0
  38. package/dist/common/identifiers.js.map +1 -0
  39. package/dist/common/network-safety.d.ts +19 -0
  40. package/dist/common/network-safety.js +72 -0
  41. package/dist/common/network-safety.js.map +1 -0
  42. package/dist/common/rate-limiter.service.d.ts +63 -0
  43. package/dist/common/rate-limiter.service.js +158 -0
  44. package/dist/common/rate-limiter.service.js.map +1 -0
  45. package/dist/common/refresh-token-cookie.d.ts +78 -0
  46. package/dist/common/refresh-token-cookie.js +185 -0
  47. package/dist/common/refresh-token-cookie.js.map +1 -0
  48. package/dist/common/request-context.d.ts +14 -0
  49. package/dist/common/request-context.js +22 -0
  50. package/dist/common/request-context.js.map +1 -0
  51. package/dist/common/strict-validation.pipe.d.ts +8 -0
  52. package/dist/common/strict-validation.pipe.js +16 -0
  53. package/dist/common/strict-validation.pipe.js.map +1 -0
  54. package/dist/common/time.d.ts +15 -0
  55. package/dist/common/time.js +34 -0
  56. package/dist/common/time.js.map +1 -0
  57. package/dist/constants.d.ts +1326 -0
  58. package/dist/constants.js +1142 -0
  59. package/dist/constants.js.map +1 -0
  60. package/dist/database/create-auth-tables.migration.d.ts +26 -0
  61. package/dist/database/create-auth-tables.migration.js +291 -0
  62. package/dist/database/create-auth-tables.migration.js.map +1 -0
  63. package/dist/database/email-change-and-retention.migration.d.ts +25 -0
  64. package/dist/database/email-change-and-retention.migration.js +54 -0
  65. package/dist/database/email-change-and-retention.migration.js.map +1 -0
  66. package/dist/database/entities/api-key.entity.d.ts +17 -0
  67. package/dist/database/entities/api-key.entity.js +80 -0
  68. package/dist/database/entities/api-key.entity.js.map +1 -0
  69. package/dist/database/entities/audit-log.entity.d.ts +13 -0
  70. package/dist/database/entities/audit-log.entity.js +64 -0
  71. package/dist/database/entities/audit-log.entity.js.map +1 -0
  72. package/dist/database/entities/backup-code.entity.d.ts +9 -0
  73. package/dist/database/entities/backup-code.entity.js +52 -0
  74. package/dist/database/entities/backup-code.entity.js.map +1 -0
  75. package/dist/database/entities/index.d.ts +43 -0
  76. package/dist/database/entities/index.js +82 -0
  77. package/dist/database/entities/index.js.map +1 -0
  78. package/dist/database/entities/json-object.d.ts +12 -0
  79. package/dist/database/entities/json-object.js +3 -0
  80. package/dist/database/entities/json-object.js.map +1 -0
  81. package/dist/database/entities/link-token.entity.d.ts +15 -0
  82. package/dist/database/entities/link-token.entity.js +64 -0
  83. package/dist/database/entities/link-token.entity.js.map +1 -0
  84. package/dist/database/entities/one-time-code.entity.d.ts +16 -0
  85. package/dist/database/entities/one-time-code.entity.js +69 -0
  86. package/dist/database/entities/one-time-code.entity.js.map +1 -0
  87. package/dist/database/entities/organization-invitation.entity.d.ts +14 -0
  88. package/dist/database/entities/organization-invitation.entity.js +73 -0
  89. package/dist/database/entities/organization-invitation.entity.js.map +1 -0
  90. package/dist/database/entities/organization-member.entity.d.ts +9 -0
  91. package/dist/database/entities/organization-member.entity.js +48 -0
  92. package/dist/database/entities/organization-member.entity.js.map +1 -0
  93. package/dist/database/entities/organization.entity.d.ts +12 -0
  94. package/dist/database/entities/organization.entity.js +58 -0
  95. package/dist/database/entities/organization.entity.js.map +1 -0
  96. package/dist/database/entities/passkey.entity.d.ts +19 -0
  97. package/dist/database/entities/passkey.entity.js +78 -0
  98. package/dist/database/entities/passkey.entity.js.map +1 -0
  99. package/dist/database/entities/password.entity.d.ts +6 -0
  100. package/dist/database/entities/password.entity.js +36 -0
  101. package/dist/database/entities/password.entity.js.map +1 -0
  102. package/dist/database/entities/refresh-token.entity.d.ts +9 -0
  103. package/dist/database/entities/refresh-token.entity.js +53 -0
  104. package/dist/database/entities/refresh-token.entity.js.map +1 -0
  105. package/dist/database/entities/session.entity.d.ts +20 -0
  106. package/dist/database/entities/session.entity.js +87 -0
  107. package/dist/database/entities/session.entity.js.map +1 -0
  108. package/dist/database/entities/settings.entity.d.ts +7 -0
  109. package/dist/database/entities/settings.entity.js +41 -0
  110. package/dist/database/entities/settings.entity.js.map +1 -0
  111. package/dist/database/entities/sign-in-challenge.entity.d.ts +23 -0
  112. package/dist/database/entities/sign-in-challenge.entity.js +80 -0
  113. package/dist/database/entities/sign-in-challenge.entity.js.map +1 -0
  114. package/dist/database/entities/signing-key.entity.d.ts +11 -0
  115. package/dist/database/entities/signing-key.entity.js +54 -0
  116. package/dist/database/entities/signing-key.entity.js.map +1 -0
  117. package/dist/database/entities/social-account.entity.d.ts +13 -0
  118. package/dist/database/entities/social-account.entity.js +54 -0
  119. package/dist/database/entities/social-account.entity.js.map +1 -0
  120. package/dist/database/entities/two-factor-secret.entity.d.ts +10 -0
  121. package/dist/database/entities/two-factor-secret.entity.js +48 -0
  122. package/dist/database/entities/two-factor-secret.entity.js.map +1 -0
  123. package/dist/database/entities/user.entity.d.ts +34 -0
  124. package/dist/database/entities/user.entity.js +129 -0
  125. package/dist/database/entities/user.entity.js.map +1 -0
  126. package/dist/database/entities/webhook-delivery.entity.d.ts +17 -0
  127. package/dist/database/entities/webhook-delivery.entity.js +79 -0
  128. package/dist/database/entities/webhook-delivery.entity.js.map +1 -0
  129. package/dist/database/entities/webhook.entity.d.ts +12 -0
  130. package/dist/database/entities/webhook.entity.js +58 -0
  131. package/dist/database/entities/webhook.entity.js.map +1 -0
  132. package/dist/database/typeorm-row.d.ts +21 -0
  133. package/dist/database/typeorm-row.js +29 -0
  134. package/dist/database/typeorm-row.js.map +1 -0
  135. package/dist/features/account/account.controller.d.ts +259 -0
  136. package/dist/features/account/account.controller.js +372 -0
  137. package/dist/features/account/account.controller.js.map +1 -0
  138. package/dist/features/account/account.dto.d.ts +16 -0
  139. package/dist/features/account/account.dto.js +61 -0
  140. package/dist/features/account/account.dto.js.map +1 -0
  141. package/dist/features/account/data-export.service.d.ts +85 -0
  142. package/dist/features/account/data-export.service.js +125 -0
  143. package/dist/features/account/data-export.service.js.map +1 -0
  144. package/dist/features/account/health.service.d.ts +30 -0
  145. package/dist/features/account/health.service.js +59 -0
  146. package/dist/features/account/health.service.js.map +1 -0
  147. package/dist/features/admin/admin.controller.d.ts +382 -0
  148. package/dist/features/admin/admin.controller.js +623 -0
  149. package/dist/features/admin/admin.controller.js.map +1 -0
  150. package/dist/features/admin/admin.dto.d.ts +61 -0
  151. package/dist/features/admin/admin.dto.js +253 -0
  152. package/dist/features/admin/admin.dto.js.map +1 -0
  153. package/dist/features/admin/admin.service.d.ts +142 -0
  154. package/dist/features/admin/admin.service.js +227 -0
  155. package/dist/features/admin/admin.service.js.map +1 -0
  156. package/dist/features/api-keys/api-keys.service.d.ts +67 -0
  157. package/dist/features/api-keys/api-keys.service.js +144 -0
  158. package/dist/features/api-keys/api-keys.service.js.map +1 -0
  159. package/dist/features/email-change/email-change.controller.d.ts +38 -0
  160. package/dist/features/email-change/email-change.controller.js +85 -0
  161. package/dist/features/email-change/email-change.controller.js.map +1 -0
  162. package/dist/features/email-change/email-change.dto.d.ts +10 -0
  163. package/dist/features/email-change/email-change.dto.js +43 -0
  164. package/dist/features/email-change/email-change.dto.js.map +1 -0
  165. package/dist/features/email-change/email-change.service.d.ts +74 -0
  166. package/dist/features/email-change/email-change.service.js +179 -0
  167. package/dist/features/email-change/email-change.service.js.map +1 -0
  168. package/dist/features/email-links/email-verification.service.d.ts +46 -0
  169. package/dist/features/email-links/email-verification.service.js +94 -0
  170. package/dist/features/email-links/email-verification.service.js.map +1 -0
  171. package/dist/features/email-links/link-tokens.service.d.ts +44 -0
  172. package/dist/features/email-links/link-tokens.service.js +122 -0
  173. package/dist/features/email-links/link-tokens.service.js.map +1 -0
  174. package/dist/features/events/auth-events.service.d.ts +52 -0
  175. package/dist/features/events/auth-events.service.js +117 -0
  176. package/dist/features/events/auth-events.service.js.map +1 -0
  177. package/dist/features/maintenance/data-retention.service.d.ts +60 -0
  178. package/dist/features/maintenance/data-retention.service.js +182 -0
  179. package/dist/features/maintenance/data-retention.service.js.map +1 -0
  180. package/dist/features/notifications/notifications.service.d.ts +40 -0
  181. package/dist/features/notifications/notifications.service.js +94 -0
  182. package/dist/features/notifications/notifications.service.js.map +1 -0
  183. package/dist/features/one-time-codes/one-time-codes.service.d.ts +40 -0
  184. package/dist/features/one-time-codes/one-time-codes.service.js +102 -0
  185. package/dist/features/one-time-codes/one-time-codes.service.js.map +1 -0
  186. package/dist/features/organizations/organizations.controller.d.ts +220 -0
  187. package/dist/features/organizations/organizations.controller.js +337 -0
  188. package/dist/features/organizations/organizations.controller.js.map +1 -0
  189. package/dist/features/organizations/organizations.dto.d.ts +31 -0
  190. package/dist/features/organizations/organizations.dto.js +100 -0
  191. package/dist/features/organizations/organizations.dto.js.map +1 -0
  192. package/dist/features/organizations/organizations.service.d.ts +274 -0
  193. package/dist/features/organizations/organizations.service.js +481 -0
  194. package/dist/features/organizations/organizations.service.js.map +1 -0
  195. package/dist/features/passkeys/passkeys.controller.d.ts +92 -0
  196. package/dist/features/passkeys/passkeys.controller.js +183 -0
  197. package/dist/features/passkeys/passkeys.controller.js.map +1 -0
  198. package/dist/features/passkeys/passkeys.dto.d.ts +13 -0
  199. package/dist/features/passkeys/passkeys.dto.js +50 -0
  200. package/dist/features/passkeys/passkeys.dto.js.map +1 -0
  201. package/dist/features/passkeys/passkeys.service.d.ts +159 -0
  202. package/dist/features/passkeys/passkeys.service.js +350 -0
  203. package/dist/features/passkeys/passkeys.service.js.map +1 -0
  204. package/dist/features/passwordless/passwordless-auth.service.d.ts +152 -0
  205. package/dist/features/passwordless/passwordless-auth.service.js +304 -0
  206. package/dist/features/passwordless/passwordless-auth.service.js.map +1 -0
  207. package/dist/features/passwordless/passwordless.controller.d.ts +75 -0
  208. package/dist/features/passwordless/passwordless.controller.js +163 -0
  209. package/dist/features/passwordless/passwordless.controller.js.map +1 -0
  210. package/dist/features/passwordless/passwordless.dto.d.ts +29 -0
  211. package/dist/features/passwordless/passwordless.dto.js +101 -0
  212. package/dist/features/passwordless/passwordless.dto.js.map +1 -0
  213. package/dist/features/passwords/password-auth.service.d.ts +154 -0
  214. package/dist/features/passwords/password-auth.service.js +317 -0
  215. package/dist/features/passwords/password-auth.service.js.map +1 -0
  216. package/dist/features/passwords/password-policy.service.d.ts +63 -0
  217. package/dist/features/passwords/password-policy.service.js +175 -0
  218. package/dist/features/passwords/password-policy.service.js.map +1 -0
  219. package/dist/features/passwords/password.controller.d.ts +95 -0
  220. package/dist/features/passwords/password.controller.js +193 -0
  221. package/dist/features/passwords/password.controller.js.map +1 -0
  222. package/dist/features/passwords/password.dto.d.ts +36 -0
  223. package/dist/features/passwords/password.dto.js +140 -0
  224. package/dist/features/passwords/password.dto.js.map +1 -0
  225. package/dist/features/sessions/session.service.d.ts +132 -0
  226. package/dist/features/sessions/session.service.js +308 -0
  227. package/dist/features/sessions/session.service.js.map +1 -0
  228. package/dist/features/sessions/session.types.d.ts +34 -0
  229. package/dist/features/sessions/session.types.js +3 -0
  230. package/dist/features/sessions/session.types.js.map +1 -0
  231. package/dist/features/settings/settings.defaults.d.ts +2 -0
  232. package/dist/features/settings/settings.defaults.js +7 -0
  233. package/dist/features/settings/settings.defaults.js.map +1 -0
  234. package/dist/features/settings/settings.service.d.ts +44 -0
  235. package/dist/features/settings/settings.service.js +112 -0
  236. package/dist/features/settings/settings.service.js.map +1 -0
  237. package/dist/features/settings/settings.types.d.ts +133 -0
  238. package/dist/features/settings/settings.types.js +3 -0
  239. package/dist/features/settings/settings.types.js.map +1 -0
  240. package/dist/features/settings/settings.validation.d.ts +33 -0
  241. package/dist/features/settings/settings.validation.js +614 -0
  242. package/dist/features/settings/settings.validation.js.map +1 -0
  243. package/dist/features/sign-in/sign-in-challenges.service.d.ts +54 -0
  244. package/dist/features/sign-in/sign-in-challenges.service.js +104 -0
  245. package/dist/features/sign-in/sign-in-challenges.service.js.map +1 -0
  246. package/dist/features/sign-in/sign-in.service.d.ts +127 -0
  247. package/dist/features/sign-in/sign-in.service.js +248 -0
  248. package/dist/features/sign-in/sign-in.service.js.map +1 -0
  249. package/dist/features/sign-in/sign-in.types.d.ts +22 -0
  250. package/dist/features/sign-in/sign-in.types.js +3 -0
  251. package/dist/features/sign-in/sign-in.types.js.map +1 -0
  252. package/dist/features/signing-keys/jwks.controller.d.ts +17 -0
  253. package/dist/features/signing-keys/jwks.controller.js +51 -0
  254. package/dist/features/signing-keys/jwks.controller.js.map +1 -0
  255. package/dist/features/signing-keys/signing-keys.service.d.ts +67 -0
  256. package/dist/features/signing-keys/signing-keys.service.js +142 -0
  257. package/dist/features/signing-keys/signing-keys.service.js.map +1 -0
  258. package/dist/features/social/social-auth.service.d.ts +100 -0
  259. package/dist/features/social/social-auth.service.js +232 -0
  260. package/dist/features/social/social-auth.service.js.map +1 -0
  261. package/dist/features/social/social-providers.service.d.ts +97 -0
  262. package/dist/features/social/social-providers.service.js +214 -0
  263. package/dist/features/social/social-providers.service.js.map +1 -0
  264. package/dist/features/social/social.controller.d.ts +54 -0
  265. package/dist/features/social/social.controller.js +124 -0
  266. package/dist/features/social/social.controller.js.map +1 -0
  267. package/dist/features/social/social.dto.d.ts +11 -0
  268. package/dist/features/social/social.dto.js +38 -0
  269. package/dist/features/social/social.dto.js.map +1 -0
  270. package/dist/features/two-factor/two-factor.controller.d.ts +84 -0
  271. package/dist/features/two-factor/two-factor.controller.js +174 -0
  272. package/dist/features/two-factor/two-factor.controller.js.map +1 -0
  273. package/dist/features/two-factor/two-factor.dto.d.ts +10 -0
  274. package/dist/features/two-factor/two-factor.dto.js +37 -0
  275. package/dist/features/two-factor/two-factor.dto.js.map +1 -0
  276. package/dist/features/two-factor/two-factor.service.d.ts +171 -0
  277. package/dist/features/two-factor/two-factor.service.js +348 -0
  278. package/dist/features/two-factor/two-factor.service.js.map +1 -0
  279. package/dist/features/users/sign-in-methods.service.d.ts +40 -0
  280. package/dist/features/users/sign-in-methods.service.js +81 -0
  281. package/dist/features/users/sign-in-methods.service.js.map +1 -0
  282. package/dist/features/users/sign-up-rules.d.ts +12 -0
  283. package/dist/features/users/sign-up-rules.js +29 -0
  284. package/dist/features/users/sign-up-rules.js.map +1 -0
  285. package/dist/features/users/users.service.d.ts +246 -0
  286. package/dist/features/users/users.service.js +509 -0
  287. package/dist/features/users/users.service.js.map +1 -0
  288. package/dist/features/users/users.types.d.ts +24 -0
  289. package/dist/features/users/users.types.js +3 -0
  290. package/dist/features/users/users.types.js.map +1 -0
  291. package/dist/features/webhooks/webhook-delivery.worker.d.ts +55 -0
  292. package/dist/features/webhooks/webhook-delivery.worker.js +175 -0
  293. package/dist/features/webhooks/webhook-delivery.worker.js.map +1 -0
  294. package/dist/features/webhooks/webhook-signature.d.ts +28 -0
  295. package/dist/features/webhooks/webhook-signature.js +85 -0
  296. package/dist/features/webhooks/webhook-signature.js.map +1 -0
  297. package/dist/features/webhooks/webhooks.service.d.ts +144 -0
  298. package/dist/features/webhooks/webhooks.service.js +238 -0
  299. package/dist/features/webhooks/webhooks.service.js.map +1 -0
  300. package/dist/guards/auth.decorators.d.ts +65 -0
  301. package/dist/guards/auth.decorators.js +68 -0
  302. package/dist/guards/auth.decorators.js.map +1 -0
  303. package/dist/guards/auth.guard.d.ts +47 -0
  304. package/dist/guards/auth.guard.js +132 -0
  305. package/dist/guards/auth.guard.js.map +1 -0
  306. package/dist/index.d.ts +38 -0
  307. package/dist/index.js +95 -0
  308. package/dist/index.js.map +1 -0
  309. package/dist/integrations/console-email-sender.d.ts +15 -0
  310. package/dist/integrations/console-email-sender.js +26 -0
  311. package/dist/integrations/console-email-sender.js.map +1 -0
  312. package/dist/integrations/msg91-sms-sender.d.ts +28 -0
  313. package/dist/integrations/msg91-sms-sender.js +46 -0
  314. package/dist/integrations/msg91-sms-sender.js.map +1 -0
  315. package/docs/README.md +39 -0
  316. package/docs/admin-api-keys-webhooks.md +147 -0
  317. package/docs/api-reference.md +175 -0
  318. package/docs/architecture.md +119 -0
  319. package/docs/client-integration.md +192 -0
  320. package/docs/code-walkthrough.md +273 -0
  321. package/docs/configuration.md +229 -0
  322. package/docs/endpoints/README.md +151 -0
  323. package/docs/endpoints/account.md +363 -0
  324. package/docs/endpoints/admin.md +422 -0
  325. package/docs/endpoints/email-password.md +261 -0
  326. package/docs/endpoints/organizations.md +192 -0
  327. package/docs/endpoints/passkeys.md +195 -0
  328. package/docs/endpoints/passwordless.md +214 -0
  329. package/docs/endpoints/social.md +116 -0
  330. package/docs/endpoints/two-factor.md +146 -0
  331. package/docs/error-codes.md +100 -0
  332. package/docs/events.md +83 -0
  333. package/docs/getting-started.md +139 -0
  334. package/docs/manual-testing.md +215 -0
  335. package/docs/organizations.md +86 -0
  336. package/docs/production-checklist.md +60 -0
  337. package/docs/protecting-routes.md +147 -0
  338. package/docs/security.md +61 -0
  339. package/docs/sign-in-flows.md +294 -0
  340. package/package.json +92 -4
@@ -0,0 +1,304 @@
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.PasswordlessAuthService = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const auth_error_1 = require("../../common/auth-error.js");
15
+ const identifiers_1 = require("../../common/identifiers.js");
16
+ const rate_limiter_service_1 = require("../../common/rate-limiter.service.js");
17
+ const constants_1 = require("../../constants.js");
18
+ const link_tokens_service_1 = require("../email-links/link-tokens.service.js");
19
+ const notifications_service_1 = require("../notifications/notifications.service.js");
20
+ const one_time_codes_service_1 = require("../one-time-codes/one-time-codes.service.js");
21
+ const settings_service_1 = require("../settings/settings.service.js");
22
+ const sign_in_service_1 = require("../sign-in/sign-in.service.js");
23
+ const sign_up_rules_1 = require("../users/sign-up-rules.js");
24
+ const users_service_1 = require("../users/users.service.js");
25
+ /**
26
+ * Users who may receive a code or link: anyone except suspended and deleted accounts.
27
+ *
28
+ * @param user - An existing account.
29
+ * @returns True when a sign-in message may be sent to this user.
30
+ */
31
+ const canReceiveSignInMessages = (user) => user.status !== constants_1.ACCOUNT_STATUS.suspended && user.status !== constants_1.ACCOUNT_STATUS.deleted;
32
+ /**
33
+ * Sign in without a password:
34
+ * - Email OTP: a 6-digit code by email.
35
+ * - Magic link: a one-click link by email.
36
+ * - Phone OTP: a 6-digit code by SMS.
37
+ *
38
+ * The same endpoints also VERIFY the email / phone of an existing account, because receiving the
39
+ * code proves ownership. If the settings allow sign-up, an unknown email / phone gets a new account.
40
+ *
41
+ * "Send" endpoints always answer the same, so they never reveal who has an account.
42
+ */
43
+ let PasswordlessAuthService = class PasswordlessAuthService {
44
+ settingsService;
45
+ users;
46
+ signIn;
47
+ oneTimeCodes;
48
+ linkTokens;
49
+ notifications;
50
+ rateLimiter;
51
+ constructor(settingsService, users, signIn, oneTimeCodes, linkTokens, notifications, rateLimiter) {
52
+ this.settingsService = settingsService;
53
+ this.users = users;
54
+ this.signIn = signIn;
55
+ this.oneTimeCodes = oneTimeCodes;
56
+ this.linkTokens = linkTokens;
57
+ this.notifications = notifications;
58
+ this.rateLimiter = rateLimiter;
59
+ }
60
+ // -------------------------------------------------------------------------------------------
61
+ // Email OTP
62
+ // -------------------------------------------------------------------------------------------
63
+ /**
64
+ * Emails a 6-digit sign-in code. Always answers the same, whether or not the email has an account.
65
+ *
66
+ * @param typedEmail - The email from the request.
67
+ * @param request - Who is asking (for rate limits).
68
+ * @returns A generic success message.
69
+ * @throws AuthError SIGN_IN_METHOD_DISABLED when email codes are turned off.
70
+ * @throws AuthError TOO_MANY_REQUESTS (with `retryAfterSeconds`) when a code was sent to this email a moment ago.
71
+ * @throws AuthError TOO_MANY_REQUESTS after too many codes for this IP or email.
72
+ */
73
+ async sendEmailCode(typedEmail, request) {
74
+ const settings = await this.settingsService.getSettings();
75
+ if (!settings.emailOtp.enabled)
76
+ throw new auth_error_1.AuthError(constants_1.AUTH_ERRORS.signInMethodDisabled);
77
+ const email = (0, identifiers_1.normalizeEmail)(typedEmail);
78
+ await this.consumeSendLimits(email, request);
79
+ if (await this.mayReceiveMessage(await this.users.findUserByEmail(email), settings.emailOtp.allowSignUp, email, settings)) {
80
+ const code = await this.oneTimeCodes.createCode(constants_1.CODE_CHANNEL.email, email, settings.emailOtp);
81
+ await this.notifications.sendRequiredEmail({ type: constants_1.EMAIL_TYPE.signInCode, to: email, code });
82
+ }
83
+ return { success: true, message: constants_1.SUCCESS_MESSAGES.codeSent };
84
+ }
85
+ /**
86
+ * Signs in with an email code. This also verifies the email, and creates the account when the
87
+ * email is new and sign-up is allowed.
88
+ *
89
+ * @param typedEmail - The email the code was sent to.
90
+ * @param code - The code the user typed.
91
+ * @param signUpDetails - Names and consents, only needed when this creates a new account.
92
+ * @param request - Who is asking.
93
+ * @returns Tokens, or a 2FA challenge.
94
+ * @throws AuthError OTP_EXPIRED or INVALID_OTP when the code is not usable or wrong.
95
+ * @throws AuthError SIGN_UP_CLOSED when the email is new and sign-up is not allowed.
96
+ */
97
+ async verifyEmailCode(typedEmail, code, signUpDetails, request) {
98
+ const settings = await this.settingsService.getSettings();
99
+ if (!settings.emailOtp.enabled)
100
+ throw new auth_error_1.AuthError(constants_1.AUTH_ERRORS.signInMethodDisabled);
101
+ const email = (0, identifiers_1.normalizeEmail)(typedEmail);
102
+ await this.rateLimiter.consume(constants_1.RATE_LIMIT_KEY.signInPerIp(request.ipAddress), constants_1.RATE_LIMITS.signInPerIp);
103
+ const existingUser = await this.users.findUserByEmail(email);
104
+ // Check sign-up details BEFORE using the code, so a missing name doesn't burn it.
105
+ if (!existingUser)
106
+ this.assertMaySignUp(settings.emailOtp.allowSignUp, signUpDetails, settings, email);
107
+ await this.oneTimeCodes.verifyCode(constants_1.CODE_CHANNEL.email, email, code);
108
+ if (existingUser)
109
+ await this.users.removeUnprovenPassword(existingUser, request);
110
+ const user = existingUser ?? (await this.createVerifiedUser({ email }, signUpDetails, settings, request));
111
+ const verifiedUser = await this.users.markEmailVerified(user, settings, request);
112
+ return this.signIn.completeSignIn(verifiedUser, constants_1.SIGN_IN_METHOD.emailOtp, request, settings);
113
+ }
114
+ // -------------------------------------------------------------------------------------------
115
+ // Magic link
116
+ // -------------------------------------------------------------------------------------------
117
+ /**
118
+ * Emails a one-click sign-in link. Always answers the same, whether or not the email has an account.
119
+ *
120
+ * @param typedEmail - The email from the request.
121
+ * @param request - Who is asking (for rate limits).
122
+ * @returns A generic success message.
123
+ * @throws AuthError SIGN_IN_METHOD_DISABLED when magic links are turned off.
124
+ * @throws AuthError TOO_MANY_REQUESTS after too many emails for this IP or address.
125
+ */
126
+ async sendMagicLink(typedEmail, request) {
127
+ const settings = await this.settingsService.getSettings();
128
+ if (!settings.magicLink.enabled)
129
+ throw new auth_error_1.AuthError(constants_1.AUTH_ERRORS.signInMethodDisabled);
130
+ const email = (0, identifiers_1.normalizeEmail)(typedEmail);
131
+ await this.rateLimiter.consume(constants_1.RATE_LIMIT_KEY.sendEmailLinkPerIp(request.ipAddress), constants_1.RATE_LIMITS.sendEmailLinkPerIp);
132
+ await this.rateLimiter.consume(constants_1.RATE_LIMIT_KEY.sendEmailLinkPerEmail(email), constants_1.RATE_LIMITS.sendEmailLinkPerEmail);
133
+ const user = await this.users.findUserByEmail(email);
134
+ if (await this.mayReceiveMessage(user, settings.magicLink.allowSignUp, email, settings)) {
135
+ const token = await this.linkTokens.createLinkToken(constants_1.LINK_PURPOSE.magicSignIn, email, user?.id ?? null);
136
+ await this.notifications.sendRequiredEmail({ type: constants_1.EMAIL_TYPE.magicSignIn, to: email, token });
137
+ }
138
+ return { success: true, message: constants_1.SUCCESS_MESSAGES.magicLinkSent };
139
+ }
140
+ /**
141
+ * Signs in with the token from a magic link. This also verifies the email, and creates the account
142
+ * when the email is new and sign-up is allowed.
143
+ *
144
+ * @param token - The token from the link.
145
+ * @param signUpDetails - Names and consents, only needed when this creates a new account.
146
+ * @param request - Who is asking.
147
+ * @returns Tokens, or a 2FA challenge.
148
+ * @throws AuthError INVALID_TOKEN when the link is unknown, used or expired.
149
+ * @throws AuthError SIGN_UP_CLOSED when the email is new and sign-up is not allowed.
150
+ */
151
+ async verifyMagicLink(token, signUpDetails, request) {
152
+ const settings = await this.settingsService.getSettings();
153
+ if (!settings.magicLink.enabled)
154
+ throw new auth_error_1.AuthError(constants_1.AUTH_ERRORS.signInMethodDisabled);
155
+ await this.rateLimiter.consume(constants_1.RATE_LIMIT_KEY.signInPerIp(request.ipAddress), constants_1.RATE_LIMITS.signInPerIp);
156
+ const usedToken = await this.linkTokens.useLinkToken(token, constants_1.LINK_PURPOSE.magicSignIn);
157
+ // Look up by email, not the id stored in the token, so a link sent before sign-up still works.
158
+ const existingUser = await this.users.findUserByEmail(usedToken.email);
159
+ if (!existingUser)
160
+ this.assertMaySignUp(settings.magicLink.allowSignUp, signUpDetails, settings, usedToken.email);
161
+ if (existingUser)
162
+ await this.users.removeUnprovenPassword(existingUser, request);
163
+ const user = existingUser ?? (await this.createVerifiedUser({ email: usedToken.email }, signUpDetails, settings, request));
164
+ const verifiedUser = await this.users.markEmailVerified(user, settings, request);
165
+ return this.signIn.completeSignIn(verifiedUser, constants_1.SIGN_IN_METHOD.magicLink, request, settings);
166
+ }
167
+ // -------------------------------------------------------------------------------------------
168
+ // Phone OTP
169
+ // -------------------------------------------------------------------------------------------
170
+ /**
171
+ * Sends a 6-digit sign-in code by SMS. Always answers the same, whether or not the number has an account.
172
+ *
173
+ * @param typedPhoneNumber - The phone number from the request, with country code.
174
+ * @param request - Who is asking (for rate limits).
175
+ * @returns A generic success message.
176
+ * @throws AuthError PHONE_COUNTRY_NOT_ALLOWED when the country code is not in the allowed list.
177
+ * @throws AuthError TOO_MANY_REQUESTS (with `retryAfterSeconds`) when a code was sent to this number a moment ago.
178
+ */
179
+ async sendPhoneCode(typedPhoneNumber, request) {
180
+ const settings = await this.getPhoneSettings();
181
+ const phoneNumber = (0, identifiers_1.normalizePhoneNumber)(typedPhoneNumber);
182
+ if (!(0, identifiers_1.isPhoneCountryAllowed)(phoneNumber, settings.phoneOtp.allowedCountryCodes))
183
+ throw new auth_error_1.AuthError(constants_1.AUTH_ERRORS.phoneCountryNotAllowed);
184
+ await this.consumeSendLimits(phoneNumber, request);
185
+ const user = await this.users.findUserByPhoneNumber(phoneNumber);
186
+ const mayReceive = user ? canReceiveSignInMessages(user) : settings.phoneOtp.allowSignUp && settings.registration.enabled;
187
+ if (mayReceive) {
188
+ const code = await this.oneTimeCodes.createCode(constants_1.CODE_CHANNEL.sms, phoneNumber, settings.phoneOtp);
189
+ await this.notifications.sendSmsCode(phoneNumber, code);
190
+ }
191
+ return { success: true, message: constants_1.SUCCESS_MESSAGES.codeSent };
192
+ }
193
+ /**
194
+ * Signs in with an SMS code. This also verifies the phone number, and creates the account when the
195
+ * number is new and sign-up is allowed.
196
+ *
197
+ * @param typedPhoneNumber - The number the code was sent to.
198
+ * @param code - The code the user typed.
199
+ * @param signUpDetails - Names and consents, only needed when this creates a new account.
200
+ * @param request - Who is asking.
201
+ * @returns Tokens, or a 2FA challenge.
202
+ * @throws AuthError OTP_EXPIRED or INVALID_OTP when the code is not usable or wrong.
203
+ */
204
+ async verifyPhoneCode(typedPhoneNumber, code, signUpDetails, request) {
205
+ const settings = await this.getPhoneSettings();
206
+ const phoneNumber = (0, identifiers_1.normalizePhoneNumber)(typedPhoneNumber);
207
+ await this.rateLimiter.consume(constants_1.RATE_LIMIT_KEY.signInPerIp(request.ipAddress), constants_1.RATE_LIMITS.signInPerIp);
208
+ const existingUser = await this.users.findUserByPhoneNumber(phoneNumber);
209
+ if (!existingUser)
210
+ this.assertMaySignUp(settings.phoneOtp.allowSignUp, signUpDetails, settings, null);
211
+ await this.oneTimeCodes.verifyCode(constants_1.CODE_CHANNEL.sms, phoneNumber, code);
212
+ const user = existingUser ?? (await this.createVerifiedUser({ phoneNumber }, signUpDetails, settings, request));
213
+ const verifiedUser = await this.users.markPhoneVerified(user, settings, request);
214
+ return this.signIn.completeSignIn(verifiedUser, constants_1.SIGN_IN_METHOD.phoneOtp, request, settings);
215
+ }
216
+ // -------------------------------------------------------------------------------------------
217
+ /**
218
+ * @returns The current settings.
219
+ * @throws AuthError SIGN_IN_METHOD_DISABLED when phone codes are turned off.
220
+ * @throws AuthError NOT_CONFIGURED when the app has no SMS sender.
221
+ */
222
+ async getPhoneSettings() {
223
+ const settings = await this.settingsService.getSettings();
224
+ if (!settings.phoneOtp.enabled)
225
+ throw new auth_error_1.AuthError(constants_1.AUTH_ERRORS.signInMethodDisabled);
226
+ if (!this.notifications.canSendSms)
227
+ throw new auth_error_1.AuthError(constants_1.AUTH_ERRORS.notConfigured);
228
+ return settings;
229
+ }
230
+ /**
231
+ * Applies the "send a code" rate limits for both the IP and the destination.
232
+ *
233
+ * @param destination - The email or phone number the code goes to.
234
+ * @param request - Who is asking.
235
+ * @throws AuthError TOO_MANY_REQUESTS when either limit is reached.
236
+ */
237
+ async consumeSendLimits(destination, request) {
238
+ await this.rateLimiter.consume(constants_1.RATE_LIMIT_KEY.sendCodePerIp(request.ipAddress), constants_1.RATE_LIMITS.sendCodePerIp);
239
+ await this.rateLimiter.consume(constants_1.RATE_LIMIT_KEY.sendCodePerDestination(destination), constants_1.RATE_LIMITS.sendCodePerDestination);
240
+ }
241
+ /**
242
+ * Decides whether to actually send: existing users who may sign in, or new ones when sign-up is allowed.
243
+ *
244
+ * @param user - The existing account, or null.
245
+ * @param allowSignUp - Whether this sign-in method may create accounts.
246
+ * @param email - The normalized email.
247
+ * @param settings - The current settings.
248
+ * @returns True when the code or link should be sent.
249
+ */
250
+ async mayReceiveMessage(user, allowSignUp, email, settings) {
251
+ if (user)
252
+ return canReceiveSignInMessages(user);
253
+ return allowSignUp && settings.registration.enabled && (0, identifiers_1.isEmailDomainAllowed)(email, settings.registration.allowedEmailDomains);
254
+ }
255
+ /**
256
+ * Checks that a new account may be created with this method and these details.
257
+ *
258
+ * @param allowSignUp - Whether this sign-in method may create accounts.
259
+ * @param details - The names and consents from the request.
260
+ * @param settings - The current settings.
261
+ * @param email - The new account's email, or null for phone sign-up.
262
+ * @throws AuthError SIGN_UP_CLOSED, EMAIL_DOMAIN_NOT_ALLOWED, or an error for missing details.
263
+ */
264
+ assertMaySignUp(allowSignUp, details, settings, email) {
265
+ if (!allowSignUp || !settings.registration.enabled)
266
+ throw new auth_error_1.AuthError(constants_1.AUTH_ERRORS.signUpClosed);
267
+ if (email && !(0, identifiers_1.isEmailDomainAllowed)(email, settings.registration.allowedEmailDomains))
268
+ throw new auth_error_1.AuthError(constants_1.AUTH_ERRORS.emailDomainNotAllowed);
269
+ (0, sign_up_rules_1.assertSignUpDetailsComplete)(details, settings);
270
+ }
271
+ /**
272
+ * Creates an account whose email or phone is already verified (the user just received the code).
273
+ *
274
+ * @param contact - The email or the phone number the code was sent to.
275
+ * @param details - The names and consents from the request.
276
+ * @param settings - The current settings.
277
+ * @param request - Who is asking (for the audit log).
278
+ * @returns The new user.
279
+ */
280
+ createVerifiedUser(contact, details, settings, request) {
281
+ return this.users.createUser({
282
+ email: contact.email ?? null,
283
+ isEmailVerified: contact.email !== undefined,
284
+ phoneNumber: contact.phoneNumber ?? null,
285
+ isPhoneVerified: contact.phoneNumber !== undefined,
286
+ firstName: details.firstName?.trim() || null,
287
+ lastName: details.lastName?.trim() || null,
288
+ acceptedTerms: details.acceptTerms === true,
289
+ acceptedPrivacyPolicy: details.acceptPrivacyPolicy === true,
290
+ }, settings, request);
291
+ }
292
+ };
293
+ exports.PasswordlessAuthService = PasswordlessAuthService;
294
+ exports.PasswordlessAuthService = PasswordlessAuthService = __decorate([
295
+ (0, common_1.Injectable)(),
296
+ __metadata("design:paramtypes", [settings_service_1.SettingsService,
297
+ users_service_1.UsersService,
298
+ sign_in_service_1.SignInService,
299
+ one_time_codes_service_1.OneTimeCodesService,
300
+ link_tokens_service_1.LinkTokensService,
301
+ notifications_service_1.NotificationsService,
302
+ rate_limiter_service_1.RateLimiterService])
303
+ ], PasswordlessAuthService);
304
+ //# sourceMappingURL=passwordless-auth.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passwordless-auth.service.js","sourceRoot":"","sources":["../../../src/features/passwordless/passwordless-auth.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ import { RequestContext } from '../../common/request-context.js';
2
+ import { EmailOnlyInput } from '../passwords/password.dto.js';
3
+ import { PhoneNumberInput, VerifyEmailCodeInput, VerifyMagicLinkInput, VerifyPhoneCodeInput } from './passwordless.dto';
4
+ import { PasswordlessAuthService } from './passwordless-auth.service';
5
+ /**
6
+ * Sign in (or verify) without a password.
7
+ *
8
+ * POST /auth/email/send-otp email a 6-digit code
9
+ * POST /auth/email/verify-otp sign in with it (also verifies the email)
10
+ * POST /auth/magic-link/send email a sign-in link
11
+ * POST /auth/magic-link/verify sign in with the token from the link
12
+ * POST /auth/phone/send-otp SMS a 6-digit code
13
+ * POST /auth/phone/verify-otp sign in with it (also verifies the phone)
14
+ */
15
+ export declare class PasswordlessController {
16
+ private readonly passwordless;
17
+ constructor(passwordless: PasswordlessAuthService);
18
+ /**
19
+ * POST /auth/email/send-otp — Emails a 6-digit code.
20
+ *
21
+ * @param body - `{ email }`.
22
+ * @param request - Who is asking.
23
+ * @returns A generic success message.
24
+ */
25
+ sendEmailCode(body: EmailOnlyInput, request: RequestContext): Promise<{
26
+ success: true;
27
+ message: "If this destination can receive codes, a code is on its way.";
28
+ }>;
29
+ /**
30
+ * POST /auth/email/verify-otp — Signs in with the email code (and verifies the email).
31
+ *
32
+ * @param body - `{ email, code }`, plus sign-up details for new accounts.
33
+ * @param request - Who is asking.
34
+ * @returns Tokens, or a 2FA challenge.
35
+ */
36
+ verifyEmailCode(body: VerifyEmailCodeInput, request: RequestContext): Promise<import("../..").SignInResult>;
37
+ /**
38
+ * POST /auth/magic-link/send — Emails a sign-in link.
39
+ *
40
+ * @param body - `{ email }`.
41
+ * @param request - Who is asking.
42
+ * @returns A generic success message.
43
+ */
44
+ sendMagicLink(body: EmailOnlyInput, request: RequestContext): Promise<{
45
+ success: true;
46
+ message: "If this email can sign in, a sign-in link is on its way.";
47
+ }>;
48
+ /**
49
+ * POST /auth/magic-link/verify — Signs in with the token from the link.
50
+ *
51
+ * @param body - `{ token }`, plus sign-up details for new accounts.
52
+ * @param request - Who is asking.
53
+ * @returns Tokens, or a 2FA challenge.
54
+ */
55
+ verifyMagicLink(body: VerifyMagicLinkInput, request: RequestContext): Promise<import("../..").SignInResult>;
56
+ /**
57
+ * POST /auth/phone/send-otp — Sends a 6-digit code by SMS.
58
+ *
59
+ * @param body - `{ phoneNumber }`.
60
+ * @param request - Who is asking.
61
+ * @returns A generic success message.
62
+ */
63
+ sendPhoneCode(body: PhoneNumberInput, request: RequestContext): Promise<{
64
+ success: true;
65
+ message: "If this destination can receive codes, a code is on its way.";
66
+ }>;
67
+ /**
68
+ * POST /auth/phone/verify-otp — Signs in with the SMS code (and verifies the phone).
69
+ *
70
+ * @param body - `{ phoneNumber, code }`, plus sign-up details for new accounts.
71
+ * @param request - Who is asking.
72
+ * @returns Tokens, or a 2FA challenge.
73
+ */
74
+ verifyPhoneCode(body: VerifyPhoneCodeInput, request: RequestContext): Promise<import("../..").SignInResult>;
75
+ }
@@ -0,0 +1,163 @@
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
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.PasswordlessController = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const strict_validation_pipe_1 = require("../../common/strict-validation.pipe.js");
18
+ const request_context_1 = require("../../common/request-context.js");
19
+ const auth_decorators_1 = require("../../guards/auth.decorators.js");
20
+ const password_dto_1 = require("../passwords/password.dto.js");
21
+ const passwordless_dto_1 = require("./passwordless.dto");
22
+ const passwordless_auth_service_1 = require("./passwordless-auth.service");
23
+ const constants_1 = require("../../constants.js");
24
+ const refresh_token_cookie_1 = require("../../common/refresh-token-cookie.js");
25
+ /**
26
+ * Sign in (or verify) without a password.
27
+ *
28
+ * POST /auth/email/send-otp email a 6-digit code
29
+ * POST /auth/email/verify-otp sign in with it (also verifies the email)
30
+ * POST /auth/magic-link/send email a sign-in link
31
+ * POST /auth/magic-link/verify sign in with the token from the link
32
+ * POST /auth/phone/send-otp SMS a 6-digit code
33
+ * POST /auth/phone/verify-otp sign in with it (also verifies the phone)
34
+ */
35
+ let PasswordlessController = class PasswordlessController {
36
+ passwordless;
37
+ constructor(passwordless) {
38
+ this.passwordless = passwordless;
39
+ }
40
+ /**
41
+ * POST /auth/email/send-otp — Emails a 6-digit code.
42
+ *
43
+ * @param body - `{ email }`.
44
+ * @param request - Who is asking.
45
+ * @returns A generic success message.
46
+ */
47
+ sendEmailCode(body, request) {
48
+ return this.passwordless.sendEmailCode(body.email, request);
49
+ }
50
+ /**
51
+ * POST /auth/email/verify-otp — Signs in with the email code (and verifies the email).
52
+ *
53
+ * @param body - `{ email, code }`, plus sign-up details for new accounts.
54
+ * @param request - Who is asking.
55
+ * @returns Tokens, or a 2FA challenge.
56
+ */
57
+ verifyEmailCode(body, request) {
58
+ return this.passwordless.verifyEmailCode(body.email, body.code, body, request);
59
+ }
60
+ /**
61
+ * POST /auth/magic-link/send — Emails a sign-in link.
62
+ *
63
+ * @param body - `{ email }`.
64
+ * @param request - Who is asking.
65
+ * @returns A generic success message.
66
+ */
67
+ sendMagicLink(body, request) {
68
+ return this.passwordless.sendMagicLink(body.email, request);
69
+ }
70
+ /**
71
+ * POST /auth/magic-link/verify — Signs in with the token from the link.
72
+ *
73
+ * @param body - `{ token }`, plus sign-up details for new accounts.
74
+ * @param request - Who is asking.
75
+ * @returns Tokens, or a 2FA challenge.
76
+ */
77
+ verifyMagicLink(body, request) {
78
+ return this.passwordless.verifyMagicLink(body.token, body, request);
79
+ }
80
+ /**
81
+ * POST /auth/phone/send-otp — Sends a 6-digit code by SMS.
82
+ *
83
+ * @param body - `{ phoneNumber }`.
84
+ * @param request - Who is asking.
85
+ * @returns A generic success message.
86
+ */
87
+ sendPhoneCode(body, request) {
88
+ return this.passwordless.sendPhoneCode(body.phoneNumber, request);
89
+ }
90
+ /**
91
+ * POST /auth/phone/verify-otp — Signs in with the SMS code (and verifies the phone).
92
+ *
93
+ * @param body - `{ phoneNumber, code }`, plus sign-up details for new accounts.
94
+ * @param request - Who is asking.
95
+ * @returns Tokens, or a 2FA challenge.
96
+ */
97
+ verifyPhoneCode(body, request) {
98
+ return this.passwordless.verifyPhoneCode(body.phoneNumber, body.code, body, request);
99
+ }
100
+ };
101
+ exports.PasswordlessController = PasswordlessController;
102
+ __decorate([
103
+ (0, common_1.Post)(constants_1.ROUTES.auth.emailSendOtp),
104
+ (0, common_1.HttpCode)(common_1.HttpStatus.OK),
105
+ __param(0, (0, common_1.Body)()),
106
+ __param(1, (0, request_context_1.CurrentRequest)()),
107
+ __metadata("design:type", Function),
108
+ __metadata("design:paramtypes", [password_dto_1.EmailOnlyInput, Object]),
109
+ __metadata("design:returntype", void 0)
110
+ ], PasswordlessController.prototype, "sendEmailCode", null);
111
+ __decorate([
112
+ (0, common_1.Post)(constants_1.ROUTES.auth.emailVerifyOtp),
113
+ (0, common_1.HttpCode)(common_1.HttpStatus.OK),
114
+ __param(0, (0, common_1.Body)()),
115
+ __param(1, (0, request_context_1.CurrentRequest)()),
116
+ __metadata("design:type", Function),
117
+ __metadata("design:paramtypes", [passwordless_dto_1.VerifyEmailCodeInput, Object]),
118
+ __metadata("design:returntype", void 0)
119
+ ], PasswordlessController.prototype, "verifyEmailCode", null);
120
+ __decorate([
121
+ (0, common_1.Post)(constants_1.ROUTES.auth.magicLinkSend),
122
+ (0, common_1.HttpCode)(common_1.HttpStatus.OK),
123
+ __param(0, (0, common_1.Body)()),
124
+ __param(1, (0, request_context_1.CurrentRequest)()),
125
+ __metadata("design:type", Function),
126
+ __metadata("design:paramtypes", [password_dto_1.EmailOnlyInput, Object]),
127
+ __metadata("design:returntype", void 0)
128
+ ], PasswordlessController.prototype, "sendMagicLink", null);
129
+ __decorate([
130
+ (0, common_1.Post)(constants_1.ROUTES.auth.magicLinkVerify),
131
+ (0, common_1.HttpCode)(common_1.HttpStatus.OK),
132
+ __param(0, (0, common_1.Body)()),
133
+ __param(1, (0, request_context_1.CurrentRequest)()),
134
+ __metadata("design:type", Function),
135
+ __metadata("design:paramtypes", [passwordless_dto_1.VerifyMagicLinkInput, Object]),
136
+ __metadata("design:returntype", void 0)
137
+ ], PasswordlessController.prototype, "verifyMagicLink", null);
138
+ __decorate([
139
+ (0, common_1.Post)(constants_1.ROUTES.auth.phoneSendOtp),
140
+ (0, common_1.HttpCode)(common_1.HttpStatus.OK),
141
+ __param(0, (0, common_1.Body)()),
142
+ __param(1, (0, request_context_1.CurrentRequest)()),
143
+ __metadata("design:type", Function),
144
+ __metadata("design:paramtypes", [passwordless_dto_1.PhoneNumberInput, Object]),
145
+ __metadata("design:returntype", void 0)
146
+ ], PasswordlessController.prototype, "sendPhoneCode", null);
147
+ __decorate([
148
+ (0, common_1.Post)(constants_1.ROUTES.auth.phoneVerifyOtp),
149
+ (0, common_1.HttpCode)(common_1.HttpStatus.OK),
150
+ __param(0, (0, common_1.Body)()),
151
+ __param(1, (0, request_context_1.CurrentRequest)()),
152
+ __metadata("design:type", Function),
153
+ __metadata("design:paramtypes", [passwordless_dto_1.VerifyPhoneCodeInput, Object]),
154
+ __metadata("design:returntype", void 0)
155
+ ], PasswordlessController.prototype, "verifyPhoneCode", null);
156
+ exports.PasswordlessController = PasswordlessController = __decorate([
157
+ (0, common_1.Controller)(constants_1.ROUTES.auth.prefix),
158
+ (0, refresh_token_cookie_1.LibraryController)(),
159
+ (0, auth_decorators_1.Public)(),
160
+ (0, common_1.UsePipes)(strict_validation_pipe_1.strictValidationPipe),
161
+ __metadata("design:paramtypes", [passwordless_auth_service_1.PasswordlessAuthService])
162
+ ], PasswordlessController);
163
+ //# sourceMappingURL=passwordless.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passwordless.controller.js","sourceRoot":"","sources":["../../../src/features/passwordless/passwordless.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAwF;AACxF,4EAAuE;AACvE,8DAA0E;AAC1E,8DAAkD;AAClD,oEAAmE;AACnE,yDAAwH;AACxH,2EAAsE;AACtE,2CAAqC;AACrC,wEAAkE;AAElE;;;;;;;;;GASG;AAKI,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IACJ;IAA7B,YAA6B,YAAqC;QAArC,iBAAY,GAAZ,YAAY,CAAyB;IAAG,CAAC;IAEtE;;;;;;OAMG;IAGH,aAAa,CAAS,IAAoB,EAAoB,OAAuB;QACnF,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;IAED;;;;;;OAMG;IAGH,eAAe,CAAS,IAA0B,EAAoB,OAAuB;QAC3F,OAAO,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACjF,CAAC;IAED;;;;;;OAMG;IAGH,aAAa,CAAS,IAAoB,EAAoB,OAAuB;QACnF,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;IAED;;;;;;OAMG;IAGH,eAAe,CAAS,IAA0B,EAAoB,OAAuB;QAC3F,OAAO,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC;IAED;;;;;;OAMG;IAGH,aAAa,CAAS,IAAsB,EAAoB,OAAuB;QACrF,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC;IAED;;;;;;OAMG;IAGH,eAAe,CAAS,IAA0B,EAAoB,OAAuB;QAC3F,OAAO,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACvF,CAAC;CACF,CAAA;AAhFY,wDAAsB;AAYjC;IAFC,IAAA,aAAI,EAAC,kBAAM,CAAC,IAAI,CAAC,YAAY,CAAC;IAC9B,IAAA,iBAAQ,EAAC,mBAAU,CAAC,EAAE,CAAC;IACT,WAAA,IAAA,aAAI,GAAE,CAAA;IAAwB,WAAA,IAAA,gCAAc,GAAE,CAAA;;qCAAjC,6BAAc;;2DAEzC;AAWD;IAFC,IAAA,aAAI,EAAC,kBAAM,CAAC,IAAI,CAAC,cAAc,CAAC;IAChC,IAAA,iBAAQ,EAAC,mBAAU,CAAC,EAAE,CAAC;IACP,WAAA,IAAA,aAAI,GAAE,CAAA;IAA8B,WAAA,IAAA,gCAAc,GAAE,CAAA;;qCAAvC,uCAAoB;;6DAEjD;AAWD;IAFC,IAAA,aAAI,EAAC,kBAAM,CAAC,IAAI,CAAC,aAAa,CAAC;IAC/B,IAAA,iBAAQ,EAAC,mBAAU,CAAC,EAAE,CAAC;IACT,WAAA,IAAA,aAAI,GAAE,CAAA;IAAwB,WAAA,IAAA,gCAAc,GAAE,CAAA;;qCAAjC,6BAAc;;2DAEzC;AAWD;IAFC,IAAA,aAAI,EAAC,kBAAM,CAAC,IAAI,CAAC,eAAe,CAAC;IACjC,IAAA,iBAAQ,EAAC,mBAAU,CAAC,EAAE,CAAC;IACP,WAAA,IAAA,aAAI,GAAE,CAAA;IAA8B,WAAA,IAAA,gCAAc,GAAE,CAAA;;qCAAvC,uCAAoB;;6DAEjD;AAWD;IAFC,IAAA,aAAI,EAAC,kBAAM,CAAC,IAAI,CAAC,YAAY,CAAC;IAC9B,IAAA,iBAAQ,EAAC,mBAAU,CAAC,EAAE,CAAC;IACT,WAAA,IAAA,aAAI,GAAE,CAAA;IAA0B,WAAA,IAAA,gCAAc,GAAE,CAAA;;qCAAnC,mCAAgB;;2DAE3C;AAWD;IAFC,IAAA,aAAI,EAAC,kBAAM,CAAC,IAAI,CAAC,cAAc,CAAC;IAChC,IAAA,iBAAQ,EAAC,mBAAU,CAAC,EAAE,CAAC;IACP,WAAA,IAAA,aAAI,GAAE,CAAA;IAA8B,WAAA,IAAA,gCAAc,GAAE,CAAA;;qCAAvC,uCAAoB;;6DAEjD;iCA/EU,sBAAsB;IAJlC,IAAA,mBAAU,EAAC,kBAAM,CAAC,IAAI,CAAC,MAAM,CAAC;IAC9B,IAAA,wCAAiB,GAAE;IACnB,IAAA,wBAAM,GAAE;IACR,IAAA,iBAAQ,EAAC,6CAAoB,CAAC;qCAEc,mDAAuB;GADvD,sBAAsB,CAgFlC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Optional details for someone signing up with a code, link or social account. Only used when
3
+ * the sign-in creates a NEW account; ignored for existing users. If your settings require names
4
+ * or consent and they are missing, the response is VALIDATION_ERROR with `missingSignUpDetails`.
5
+ */
6
+ export declare class SignUpDetailsInput {
7
+ firstName?: string;
8
+ lastName?: string;
9
+ acceptTerms?: boolean;
10
+ acceptPrivacyPolicy?: boolean;
11
+ }
12
+ /** POST /auth/email/verify-otp */
13
+ export declare class VerifyEmailCodeInput extends SignUpDetailsInput {
14
+ email: string;
15
+ code: string;
16
+ }
17
+ /** POST /auth/phone/send-otp */
18
+ export declare class PhoneNumberInput {
19
+ phoneNumber: string;
20
+ }
21
+ /** POST /auth/phone/verify-otp */
22
+ export declare class VerifyPhoneCodeInput extends SignUpDetailsInput {
23
+ phoneNumber: string;
24
+ code: string;
25
+ }
26
+ /** POST /auth/magic-link/verify */
27
+ export declare class VerifyMagicLinkInput extends SignUpDetailsInput {
28
+ token: string;
29
+ }