@techelusive/nest-auth 0.0.0-stage → 0.2.0

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 +64 -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,183 @@
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.PasskeysController = 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 passkeys_dto_1 = require("./passkeys.dto");
21
+ const passkeys_service_1 = require("./passkeys.service");
22
+ const constants_1 = require("../../constants.js");
23
+ const refresh_token_cookie_1 = require("../../common/refresh-token-cookie.js");
24
+ /**
25
+ * Passkeys.
26
+ *
27
+ * POST /auth/passkeys/register/options signed in: start adding a passkey
28
+ * POST /auth/passkeys/register/verify signed in: finish adding it
29
+ * POST /auth/passkeys/sign-in/options start signing in with a passkey
30
+ * POST /auth/passkeys/sign-in/verify finish signing in
31
+ * GET /auth/passkeys list my passkeys
32
+ * PATCH /auth/passkeys/:id rename
33
+ * DELETE /auth/passkeys/:id remove
34
+ */
35
+ let PasskeysController = class PasskeysController {
36
+ passkeys;
37
+ constructor(passkeys) {
38
+ this.passkeys = passkeys;
39
+ }
40
+ /**
41
+ * POST /auth/passkeys/register/options — Starts adding a passkey.
42
+ *
43
+ * @param userId - From the access token.
44
+ * @returns Options for the device and a challenge token.
45
+ */
46
+ startRegistration(userId) {
47
+ return this.passkeys.startRegistration(userId);
48
+ }
49
+ /**
50
+ * POST /auth/passkeys/register/verify — Finishes adding a passkey.
51
+ *
52
+ * @param userId - From the access token.
53
+ * @param body - `{ challengeToken, response, name? }`.
54
+ * @param request - Who is asking.
55
+ * @returns The saved passkey.
56
+ */
57
+ finishRegistration(userId, body, request) {
58
+ return this.passkeys.finishRegistration(userId, body.challengeToken, body.response, body.name, request);
59
+ }
60
+ /**
61
+ * POST /auth/passkeys/sign-in/options — Starts signing in with a passkey. Public.
62
+ *
63
+ * @param request - Who is asking.
64
+ * @returns Options for the device and a challenge token.
65
+ */
66
+ startSignIn(request) {
67
+ return this.passkeys.startSignIn(request);
68
+ }
69
+ /**
70
+ * POST /auth/passkeys/sign-in/verify — Finishes signing in with a passkey. Public.
71
+ *
72
+ * @param body - `{ challengeToken, response }`.
73
+ * @param request - Who is asking.
74
+ * @returns Tokens.
75
+ */
76
+ finishSignIn(body, request) {
77
+ return this.passkeys.finishSignIn(body.challengeToken, body.response, request);
78
+ }
79
+ /**
80
+ * GET /auth/passkeys — The signed-in user's passkeys.
81
+ *
82
+ * @param userId - From the access token.
83
+ * @returns The passkeys.
84
+ */
85
+ async list(userId) {
86
+ return { success: true, passkeys: await this.passkeys.listPasskeys(userId) };
87
+ }
88
+ /**
89
+ * PATCH /auth/passkeys/:passkeyId — Renames a passkey.
90
+ *
91
+ * @param userId - From the access token.
92
+ * @param passkeyId - From the URL.
93
+ * @param body - `{ name }`.
94
+ * @returns `{ success: true }`.
95
+ */
96
+ rename(userId, passkeyId, body) {
97
+ return this.passkeys.renamePasskey(userId, passkeyId, body.name);
98
+ }
99
+ /**
100
+ * DELETE /auth/passkeys/:passkeyId — Removes a passkey.
101
+ *
102
+ * @param userId - From the access token.
103
+ * @param passkeyId - From the URL.
104
+ * @param request - Who is asking.
105
+ * @returns `{ success: true }`.
106
+ */
107
+ remove(userId, passkeyId, request) {
108
+ return this.passkeys.removePasskey(userId, passkeyId, request);
109
+ }
110
+ };
111
+ exports.PasskeysController = PasskeysController;
112
+ __decorate([
113
+ (0, common_1.Post)(constants_1.ROUTES.passkeys.registerOptions),
114
+ (0, auth_decorators_1.CheckSession)(),
115
+ (0, common_1.HttpCode)(common_1.HttpStatus.OK),
116
+ __param(0, (0, auth_decorators_1.CurrentUserId)()),
117
+ __metadata("design:type", Function),
118
+ __metadata("design:paramtypes", [String]),
119
+ __metadata("design:returntype", void 0)
120
+ ], PasskeysController.prototype, "startRegistration", null);
121
+ __decorate([
122
+ (0, common_1.Post)(constants_1.ROUTES.passkeys.registerVerify),
123
+ (0, auth_decorators_1.CheckSession)(),
124
+ (0, common_1.HttpCode)(common_1.HttpStatus.OK),
125
+ __param(0, (0, auth_decorators_1.CurrentUserId)()),
126
+ __param(1, (0, common_1.Body)()),
127
+ __param(2, (0, request_context_1.CurrentRequest)()),
128
+ __metadata("design:type", Function),
129
+ __metadata("design:paramtypes", [String, passkeys_dto_1.FinishPasskeyCeremonyInput, Object]),
130
+ __metadata("design:returntype", void 0)
131
+ ], PasskeysController.prototype, "finishRegistration", null);
132
+ __decorate([
133
+ (0, common_1.Post)(constants_1.ROUTES.passkeys.signInOptions),
134
+ (0, auth_decorators_1.Public)(),
135
+ (0, common_1.HttpCode)(common_1.HttpStatus.OK),
136
+ __param(0, (0, request_context_1.CurrentRequest)()),
137
+ __metadata("design:type", Function),
138
+ __metadata("design:paramtypes", [Object]),
139
+ __metadata("design:returntype", void 0)
140
+ ], PasskeysController.prototype, "startSignIn", null);
141
+ __decorate([
142
+ (0, common_1.Post)(constants_1.ROUTES.passkeys.signInVerify),
143
+ (0, auth_decorators_1.Public)(),
144
+ (0, common_1.HttpCode)(common_1.HttpStatus.OK),
145
+ __param(0, (0, common_1.Body)()),
146
+ __param(1, (0, request_context_1.CurrentRequest)()),
147
+ __metadata("design:type", Function),
148
+ __metadata("design:paramtypes", [passkeys_dto_1.FinishPasskeyCeremonyInput, Object]),
149
+ __metadata("design:returntype", void 0)
150
+ ], PasskeysController.prototype, "finishSignIn", null);
151
+ __decorate([
152
+ (0, common_1.Get)(),
153
+ __param(0, (0, auth_decorators_1.CurrentUserId)()),
154
+ __metadata("design:type", Function),
155
+ __metadata("design:paramtypes", [String]),
156
+ __metadata("design:returntype", Promise)
157
+ ], PasskeysController.prototype, "list", null);
158
+ __decorate([
159
+ (0, common_1.Patch)(constants_1.ROUTES.passkeys.passkey),
160
+ __param(0, (0, auth_decorators_1.CurrentUserId)()),
161
+ __param(1, (0, common_1.Param)(constants_1.ROUTE_PARAM.passkeyId, new common_1.ParseUUIDPipe())),
162
+ __param(2, (0, common_1.Body)()),
163
+ __metadata("design:type", Function),
164
+ __metadata("design:paramtypes", [String, String, passkeys_dto_1.RenamePasskeyInput]),
165
+ __metadata("design:returntype", void 0)
166
+ ], PasskeysController.prototype, "rename", null);
167
+ __decorate([
168
+ (0, common_1.Delete)(constants_1.ROUTES.passkeys.passkey),
169
+ (0, auth_decorators_1.CheckSession)(),
170
+ __param(0, (0, auth_decorators_1.CurrentUserId)()),
171
+ __param(1, (0, common_1.Param)(constants_1.ROUTE_PARAM.passkeyId, new common_1.ParseUUIDPipe())),
172
+ __param(2, (0, request_context_1.CurrentRequest)()),
173
+ __metadata("design:type", Function),
174
+ __metadata("design:paramtypes", [String, String, Object]),
175
+ __metadata("design:returntype", void 0)
176
+ ], PasskeysController.prototype, "remove", null);
177
+ exports.PasskeysController = PasskeysController = __decorate([
178
+ (0, common_1.Controller)(constants_1.ROUTES.passkeys.prefix),
179
+ (0, refresh_token_cookie_1.LibraryController)(),
180
+ (0, common_1.UsePipes)(strict_validation_pipe_1.strictValidationPipe),
181
+ __metadata("design:paramtypes", [passkeys_service_1.PasskeysService])
182
+ ], PasskeysController);
183
+ //# sourceMappingURL=passkeys.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passkeys.controller.js","sourceRoot":"","sources":["../../../src/features/passkeys/passkeys.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAkI;AAClI,4EAAuE;AACvE,8DAA0E;AAC1E,8DAA+E;AAC/E,iDAAgF;AAChF,yDAAqD;AACrD,2CAAkD;AAClD,wEAAkE;AAElE;;;;;;;;;;GAUG;AAII,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IACA;IAA7B,YAA6B,QAAyB;QAAzB,aAAQ,GAAR,QAAQ,CAAiB;IAAG,CAAC;IAE1D;;;;;OAKG;IAIH,iBAAiB,CAAkB,MAAc;QAC/C,OAAO,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IAED;;;;;;;OAOG;IAIH,kBAAkB,CAAkB,MAAc,EAAU,IAAgC,EAAoB,OAAuB;QACrI,OAAO,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1G,CAAC;IAED;;;;;OAKG;IAIH,WAAW,CAAmB,OAAuB;QACnD,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED;;;;;;OAMG;IAIH,YAAY,CAAS,IAAgC,EAAoB,OAAuB;QAC9F,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACjF,CAAC;IAED;;;;;OAKG;IAEG,AAAN,KAAK,CAAC,IAAI,CAAkB,MAAc;QACxC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;IAC/E,CAAC;IAED;;;;;;;OAOG;IAEH,MAAM,CAAkB,MAAc,EAAqD,SAAiB,EAAU,IAAwB;QAC5I,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACnE,CAAC;IAED;;;;;;;OAOG;IAGH,MAAM,CACa,MAAc,EACoB,SAAiB,EAClD,OAAuB;QAEzC,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;CACF,CAAA;AAnGY,gDAAkB;AAY7B;IAHC,IAAA,aAAI,EAAC,kBAAM,CAAC,QAAQ,CAAC,eAAe,CAAC;IACrC,IAAA,8BAAY,GAAE;IACd,IAAA,iBAAQ,EAAC,mBAAU,CAAC,EAAE,CAAC;IACL,WAAA,IAAA,+BAAa,GAAE,CAAA;;;;2DAEjC;AAaD;IAHC,IAAA,aAAI,EAAC,kBAAM,CAAC,QAAQ,CAAC,cAAc,CAAC;IACpC,IAAA,8BAAY,GAAE;IACd,IAAA,iBAAQ,EAAC,mBAAU,CAAC,EAAE,CAAC;IACJ,WAAA,IAAA,+BAAa,GAAE,CAAA;IAAkB,WAAA,IAAA,aAAI,GAAE,CAAA;IAAoC,WAAA,IAAA,gCAAc,GAAE,CAAA;;6CAA7C,yCAA0B;;4DAE3F;AAWD;IAHC,IAAA,aAAI,EAAC,kBAAM,CAAC,QAAQ,CAAC,aAAa,CAAC;IACnC,IAAA,wBAAM,GAAE;IACR,IAAA,iBAAQ,EAAC,mBAAU,CAAC,EAAE,CAAC;IACX,WAAA,IAAA,gCAAc,GAAE,CAAA;;;;qDAE5B;AAYD;IAHC,IAAA,aAAI,EAAC,kBAAM,CAAC,QAAQ,CAAC,YAAY,CAAC;IAClC,IAAA,wBAAM,GAAE;IACR,IAAA,iBAAQ,EAAC,mBAAU,CAAC,EAAE,CAAC;IACV,WAAA,IAAA,aAAI,GAAE,CAAA;IAAoC,WAAA,IAAA,gCAAc,GAAE,CAAA;;qCAA7C,yCAA0B;;sDAEpD;AASK;IADL,IAAA,YAAG,GAAE;IACM,WAAA,IAAA,+BAAa,GAAE,CAAA;;;;8CAE1B;AAWD;IADC,IAAA,cAAK,EAAC,kBAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;IACvB,WAAA,IAAA,+BAAa,GAAE,CAAA;IAAkB,WAAA,IAAA,cAAK,EAAC,uBAAW,CAAC,SAAS,EAAE,IAAI,sBAAa,EAAE,CAAC,CAAA;IAAqB,WAAA,IAAA,aAAI,GAAE,CAAA;;qDAAO,iCAAkB;;gDAE7I;AAYD;IAFC,IAAA,eAAM,EAAC,kBAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;IAC/B,IAAA,8BAAY,GAAE;IAEZ,WAAA,IAAA,+BAAa,GAAE,CAAA;IACf,WAAA,IAAA,cAAK,EAAC,uBAAW,CAAC,SAAS,EAAE,IAAI,sBAAa,EAAE,CAAC,CAAA;IACjD,WAAA,IAAA,gCAAc,GAAE,CAAA;;;;gDAGlB;6BAlGU,kBAAkB;IAH9B,IAAA,mBAAU,EAAC,kBAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;IAClC,IAAA,wCAAiB,GAAE;IACnB,IAAA,iBAAQ,EAAC,6CAAoB,CAAC;qCAEU,kCAAe;GAD3C,kBAAkB,CAmG9B"}
@@ -0,0 +1,13 @@
1
+ /** POST /auth/passkeys/register/verify and POST /auth/passkeys/sign-in/verify */
2
+ export declare class FinishPasskeyCeremonyInput {
3
+ /** The challengeToken returned by the matching ".../options" call. */
4
+ challengeToken: string;
5
+ /** The object returned by the browser (navigator.credentials.*) or the native passkey API, as JSON. */
6
+ response: Record<string, unknown>;
7
+ /** Only when registering: a name for the passkey, e.g. "My iPhone". */
8
+ name?: string;
9
+ }
10
+ /** PATCH /auth/passkeys/:id */
11
+ export declare class RenamePasskeyInput {
12
+ name: string;
13
+ }
@@ -0,0 +1,50 @@
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.RenamePasskeyInput = exports.FinishPasskeyCeremonyInput = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ const constants_1 = require("../../constants.js");
15
+ /** POST /auth/passkeys/register/verify and POST /auth/passkeys/sign-in/verify */
16
+ class FinishPasskeyCeremonyInput {
17
+ /** The challengeToken returned by the matching ".../options" call. */
18
+ challengeToken;
19
+ /** The object returned by the browser (navigator.credentials.*) or the native passkey API, as JSON. */
20
+ response;
21
+ /** Only when registering: a name for the passkey, e.g. "My iPhone". */
22
+ name;
23
+ }
24
+ exports.FinishPasskeyCeremonyInput = FinishPasskeyCeremonyInput;
25
+ __decorate([
26
+ (0, class_validator_1.IsString)(),
27
+ (0, class_validator_1.MaxLength)(constants_1.RANDOM_TOKEN_INPUT_MAX_LENGTH),
28
+ __metadata("design:type", String)
29
+ ], FinishPasskeyCeremonyInput.prototype, "challengeToken", void 0);
30
+ __decorate([
31
+ (0, class_validator_1.IsObject)(),
32
+ __metadata("design:type", Object)
33
+ ], FinishPasskeyCeremonyInput.prototype, "response", void 0);
34
+ __decorate([
35
+ (0, class_validator_1.IsOptional)(),
36
+ (0, class_validator_1.IsString)(),
37
+ (0, class_validator_1.MaxLength)(constants_1.PASSKEY_NAME_MAX_LENGTH),
38
+ __metadata("design:type", String)
39
+ ], FinishPasskeyCeremonyInput.prototype, "name", void 0);
40
+ /** PATCH /auth/passkeys/:id */
41
+ class RenamePasskeyInput {
42
+ name;
43
+ }
44
+ exports.RenamePasskeyInput = RenamePasskeyInput;
45
+ __decorate([
46
+ (0, class_validator_1.IsString)(),
47
+ (0, class_validator_1.MaxLength)(constants_1.PASSKEY_NAME_MAX_LENGTH),
48
+ __metadata("design:type", String)
49
+ ], RenamePasskeyInput.prototype, "name", void 0);
50
+ //# sourceMappingURL=passkeys.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passkeys.dto.js","sourceRoot":"","sources":["../../../src/features/passkeys/passkeys.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAA4E;AAC5E,2CAAqF;AAErF,iFAAiF;AACjF,MAAa,0BAA0B;IACrC,sEAAsE;IAEtE,cAAc,CAAS;IAEvB,uGAAuG;IAEvG,QAAQ,CAA0B;IAElC,uEAAuE;IAEvE,IAAI,CAAU;CACf;AAZD,gEAYC;AATC;IADC,IAAA,0BAAQ,GAAE;IAAE,IAAA,2BAAS,EAAC,yCAA6B,CAAC;;kEAC9B;AAIvB;IADC,IAAA,0BAAQ,GAAE;;4DACuB;AAIlC;IADC,IAAA,4BAAU,GAAE;IAAE,IAAA,0BAAQ,GAAE;IAAE,IAAA,2BAAS,EAAC,mCAAuB,CAAC;;wDAC/C;AAGhB,+BAA+B;AAC/B,MAAa,kBAAkB;IAE7B,IAAI,CAAS;CACd;AAHD,gDAGC;AADC;IADC,IAAA,0BAAQ,GAAE;IAAE,IAAA,2BAAS,EAAC,mCAAuB,CAAC;;gDAClC"}
@@ -0,0 +1,159 @@
1
+ import { AuthOptions } from '../../auth-options.js';
2
+ import { RateLimiterService } from '../../common/rate-limiter.service.js';
3
+ import { RequestContext } from '../../common/request-context.js';
4
+ import { AuthEventsService } from '../events/auth-events.service.js';
5
+ import { SettingsService } from '../settings/settings.service.js';
6
+ import { SignInService } from '../sign-in/sign-in.service.js';
7
+ import { SignInResult } from '../sign-in/sign-in.types.js';
8
+ import { SignInMethodsService } from '../users/sign-in-methods.service.js';
9
+ import { UsersService } from '../users/users.service.js';
10
+ /** A passkey as shown to its owner. The public key is not included (nobody needs it). */
11
+ export interface PasskeySummary {
12
+ id: string;
13
+ name: string;
14
+ isBackedUp: boolean;
15
+ createdAt: string;
16
+ lastUsedAt: string | null;
17
+ }
18
+ /**
19
+ * Passkeys (Face ID, Touch ID, Windows Hello, Android, security keys) through WebAuthn.
20
+ *
21
+ * Adding a passkey and signing in with one each take two requests:
22
+ * - ".../options": we create a random challenge and return options for the browser or app,
23
+ * plus a `challengeToken` to send back with the verify request.
24
+ * - ".../verify": the device signed the challenge; we check the signature.
25
+ *
26
+ * Passkeys must use a fingerprint, face or PIN (user verification = required), which is why
27
+ * a passkey sign-in counts as two factors and skips the authenticator-app step.
28
+ */
29
+ export declare class PasskeysService {
30
+ private readonly options;
31
+ private readonly settingsService;
32
+ private readonly users;
33
+ private readonly signIn;
34
+ private readonly signInMethods;
35
+ private readonly rateLimiter;
36
+ private readonly events;
37
+ private readonly database;
38
+ constructor(options: AuthOptions, settingsService: SettingsService, users: UsersService, signIn: SignInService, signInMethods: SignInMethodsService, rateLimiter: RateLimiterService, events: AuthEventsService);
39
+ /**
40
+ * Starts adding a passkey: creates a challenge and the options to pass to the browser
41
+ * (`navigator.credentials.create`, or SimpleWebAuthn's `startRegistration`).
42
+ *
43
+ * @param userId - The signed-in user.
44
+ * @returns `options` for the device, and a `challengeToken` to send back to finishRegistration.
45
+ * @throws AuthError SIGN_IN_METHOD_DISABLED or NOT_CONFIGURED when passkeys are off or not set up.
46
+ * @throws AuthError VALIDATION_ERROR when the user already has the maximum number of passkeys.
47
+ */
48
+ startRegistration(userId: string): Promise<{
49
+ success: true;
50
+ challengeToken: string;
51
+ options: import("@simplewebauthn/server").PublicKeyCredentialCreationOptionsJSON;
52
+ }>;
53
+ /**
54
+ * Finishes adding a passkey: checks the device's response and saves the new passkey.
55
+ *
56
+ * @param userId - The signed-in user (must be the one who called startRegistration).
57
+ * @param challengeToken - The token from startRegistration.
58
+ * @param deviceResponse - What the browser returned from `navigator.credentials.create`.
59
+ * @param passkeyName - A label like "MacBook"; a default name is used when empty.
60
+ * @param request - Who is asking (for the audit log).
61
+ * @returns The saved passkey.
62
+ * @throws AuthError INVALID_TOKEN when the challenge is unknown, used or expired.
63
+ * @throws AuthError INVALID_PASSKEY when the response doesn't check out.
64
+ */
65
+ finishRegistration(userId: string, challengeToken: unknown, deviceResponse: any, passkeyName: string | undefined, request: RequestContext): Promise<{
66
+ success: true;
67
+ passkey: PasskeySummary;
68
+ }>;
69
+ /**
70
+ * Starts signing in with a passkey. No email is needed: the device offers the user's passkeys.
71
+ *
72
+ * @param request - Who is asking (for rate limits).
73
+ * @returns `options` for `navigator.credentials.get`, and a `challengeToken` for finishSignIn.
74
+ * @throws AuthError TOO_MANY_REQUESTS after too many attempts from this IP.
75
+ */
76
+ startSignIn(request: RequestContext): Promise<{
77
+ success: true;
78
+ challengeToken: string;
79
+ options: import("@simplewebauthn/server").PublicKeyCredentialRequestOptionsJSON;
80
+ }>;
81
+ /**
82
+ * Finishes signing in with a passkey: checks the signature and signs the user in.
83
+ * Passkeys count as two factors, so the authenticator-app step is skipped.
84
+ *
85
+ * @param challengeToken - The token from startSignIn.
86
+ * @param deviceResponse - What the browser returned from `navigator.credentials.get`.
87
+ * @param request - Who is asking.
88
+ * @returns Tokens.
89
+ * @throws AuthError INVALID_TOKEN when the challenge is unknown, used or expired.
90
+ * @throws AuthError INVALID_PASSKEY when the passkey is unknown or the signature is wrong.
91
+ */
92
+ finishSignIn(challengeToken: unknown, deviceResponse: any, request: RequestContext): Promise<SignInResult>;
93
+ /**
94
+ * @param userId - The signed-in user.
95
+ * @returns The user's passkeys, oldest first.
96
+ */
97
+ listPasskeys(userId: string): Promise<PasskeySummary[]>;
98
+ /**
99
+ * @param userId - The signed-in user.
100
+ * @param passkeyId - One of the user's passkeys.
101
+ * @param newName - The new label.
102
+ * @returns `{ success: true }`.
103
+ * @throws AuthError NOT_FOUND when the passkey isn't the user's.
104
+ */
105
+ renamePasskey(userId: string, passkeyId: string, newName: string): Promise<{
106
+ success: true;
107
+ }>;
108
+ /**
109
+ * Removes one of the user's passkeys, unless it is their last way to sign in.
110
+ *
111
+ * @param userId - The signed-in user.
112
+ * @param passkeyId - One of the user's passkeys.
113
+ * @param request - Who is asking (for the audit log).
114
+ * @returns `{ success: true }`.
115
+ * @throws AuthError NOT_FOUND when the passkey isn't the user's.
116
+ * @throws AuthError LAST_SIGN_IN_METHOD when it is the user's only way to sign in.
117
+ */
118
+ removePasskey(userId: string, passkeyId: string, request: RequestContext): Promise<{
119
+ success: true;
120
+ }>;
121
+ /**
122
+ * @returns The current settings and the app's passkey options (relying party id, origins).
123
+ * @throws AuthError SIGN_IN_METHOD_DISABLED when passkeys are turned off in settings.
124
+ * @throws AuthError NOT_CONFIGURED when AuthOptions.passkeys is not set.
125
+ */
126
+ private getEnabledPasskeySettings;
127
+ /**
128
+ * Stores the WebAuthn challenge until the finish request arrives, behind a "ch_..." token (only the token's hash is stored).
129
+ *
130
+ * @param purpose - Registration or sign-in.
131
+ * @param webauthnChallenge - The random challenge the device must sign.
132
+ * @param userId - The user adding a passkey, or null for sign-in.
133
+ * @returns The plain token for the client.
134
+ */
135
+ private saveCeremonyChallenge;
136
+ /**
137
+ * Uses up a ceremony challenge (once only, before it expires).
138
+ *
139
+ * @param challengeToken - The token from startRegistration or startSignIn.
140
+ * @param purpose - Registration or sign-in.
141
+ * @returns The user who started it (null for sign-in) and the WebAuthn challenge.
142
+ * @throws AuthError INVALID_TOKEN when the token is unknown, used, expired or for another purpose.
143
+ */
144
+ private useCeremonyChallenge;
145
+ /**
146
+ * Reads the new credential from the library's result. SimpleWebAuthn v11+ nests it under
147
+ * `credential`; older versions used flat fields. Both are handled so an upgrade can't break sign-up.
148
+ *
149
+ * @param registrationInfo - `verification.registrationInfo` from SimpleWebAuthn.
150
+ * @param deviceResponse - The browser's response (fallback source for transports).
151
+ * @returns The credential id and public key (base64url), counter, transports and backup state.
152
+ */
153
+ private readRegisteredCredential;
154
+ /**
155
+ * @param passkey - The passkey row.
156
+ * @returns The passkey as shown to its owner (no public key).
157
+ */
158
+ private toSummary;
159
+ }