@ambushsoftworks/nestjs-auth-graphql 0.17.0-rc.1 → 0.17.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.
- package/CHANGELOG.md +127 -0
- package/README.md +63 -8
- package/dist/dto/passkey.dto.d.ts +8 -0
- package/dist/dto/passkey.dto.d.ts.map +1 -1
- package/dist/exceptions/passkey.exceptions.d.ts +9 -0
- package/dist/exceptions/passkey.exceptions.d.ts.map +1 -1
- package/dist/exceptions/passkey.exceptions.js +25 -1
- package/dist/exceptions/passkey.exceptions.js.map +1 -1
- package/dist/exceptions/password-reset.exceptions.d.ts +3 -0
- package/dist/exceptions/password-reset.exceptions.d.ts.map +1 -1
- package/dist/exceptions/password-reset.exceptions.js +7 -1
- package/dist/exceptions/password-reset.exceptions.js.map +1 -1
- package/dist/exceptions/step-up.exceptions.d.ts +1 -1
- package/dist/exceptions/step-up.exceptions.d.ts.map +1 -1
- package/dist/exceptions/step-up.exceptions.js +1 -5
- package/dist/exceptions/step-up.exceptions.js.map +1 -1
- package/dist/exceptions/verification.exceptions.d.ts +4 -1
- package/dist/exceptions/verification.exceptions.d.ts.map +1 -1
- package/dist/exceptions/verification.exceptions.js +14 -6
- package/dist/exceptions/verification.exceptions.js.map +1 -1
- package/dist/resolvers/base-auth.resolver.d.ts +3 -2
- package/dist/resolvers/base-auth.resolver.d.ts.map +1 -1
- package/dist/resolvers/base-auth.resolver.js +6 -2
- package/dist/resolvers/base-auth.resolver.js.map +1 -1
- package/dist/resolvers/oauth.controller.d.ts.map +1 -1
- package/dist/resolvers/oauth.controller.js +8 -5
- package/dist/resolvers/oauth.controller.js.map +1 -1
- package/dist/services/auth.service.d.ts +2 -0
- package/dist/services/auth.service.d.ts.map +1 -1
- package/dist/services/auth.service.js +92 -113
- package/dist/services/auth.service.js.map +1 -1
- package/dist/services/brute-force-protection.service.d.ts +4 -0
- package/dist/services/brute-force-protection.service.d.ts.map +1 -1
- package/dist/services/brute-force-protection.service.js +9 -3
- package/dist/services/brute-force-protection.service.js.map +1 -1
- package/dist/services/passkey-signup-token.service.d.ts +5 -0
- package/dist/services/passkey-signup-token.service.d.ts.map +1 -1
- package/dist/services/passkey-signup-token.service.js +18 -0
- package/dist/services/passkey-signup-token.service.js.map +1 -1
- package/dist/services/passkey.service.d.ts +9 -0
- package/dist/services/passkey.service.d.ts.map +1 -1
- package/dist/services/passkey.service.js +36 -9
- package/dist/services/passkey.service.js.map +1 -1
- package/dist/services/step-up.service.d.ts.map +1 -1
- package/dist/services/step-up.service.js +8 -1
- package/dist/services/step-up.service.js.map +1 -1
- package/dist/services/verification.service.d.ts.map +1 -1
- package/dist/services/verification.service.js +9 -8
- package/dist/services/verification.service.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -27,6 +27,133 @@ for buried obligations. **The marker was introduced in 0.9.0 and has not been
|
|
|
27
27
|
retro-applied**, so it is reliable from 0.9.0 onward only. Convention adopted
|
|
28
28
|
from `@ambushsoftworks/nestjs-payments-graphql`.
|
|
29
29
|
|
|
30
|
+
## [0.17.0] - 2026-10-02
|
|
31
|
+
|
|
32
|
+
Passwordless sign-up with a passkey, a step-up token on sign-in, and fixes for
|
|
33
|
+
**account enumeration in password reset and email verification** (present in
|
|
34
|
+
every earlier version). Identical to `0.17.0-rc.2`, which LiftIQ piloted on
|
|
35
|
+
staging and an Android device. This entry is the summary for anyone coming from
|
|
36
|
+
0.16.x; the two release-candidate entries below have the detail.
|
|
37
|
+
|
|
38
|
+
### ⚠ Security
|
|
39
|
+
|
|
40
|
+
- **Password reset and email verification revealed which addresses have
|
|
41
|
+
accounts**: through a lock or social-only error, a cooldown only real accounts
|
|
42
|
+
had, account checks before the code, a password-strength error, response
|
|
43
|
+
timing, and "already verified". Every signed-out, email-keyed flow now answers
|
|
44
|
+
alike for every address. **If you are on 0.16.x or earlier, upgrade.**
|
|
45
|
+
|
|
46
|
+
### ⚠ External configuration required
|
|
47
|
+
|
|
48
|
+
Only for passwordless sign-up:
|
|
49
|
+
- `PasskeyChallenge.userId` must not be a foreign key to users
|
|
50
|
+
(`assertPasskeyRepositoryContract` checks it).
|
|
51
|
+
- `IUserRepository.create` must store the `emailVerified` it is given, and
|
|
52
|
+
`IUserRepository.delete` must work.
|
|
53
|
+
- The email service needs `sendSignupCodeEmail` (`ConfigurableEmailService` has
|
|
54
|
+
it with the default renderer).
|
|
55
|
+
|
|
56
|
+
### Added
|
|
57
|
+
|
|
58
|
+
- **Passwordless sign-up**: `performStartPasskeySignup` →
|
|
59
|
+
`performVerifyPasskeySignupCode` (returns a verified `signupId`) →
|
|
60
|
+
`performCompletePasskeySignup`, plus `performPasskeySignupOptions` to retry
|
|
61
|
+
the passkey step without the code. The account exists only once its passkey
|
|
62
|
+
does.
|
|
63
|
+
- **`stepUp.issueOnLogin`**: fresh sign-ins return a step-up token, so an app can
|
|
64
|
+
offer "Create a passkey?" without a second proof. Never from a refresh or the
|
|
65
|
+
biometric login.
|
|
66
|
+
- **`retryAfterSeconds` on every `RATE_LIMIT_EXCEEDED`.**
|
|
67
|
+
- New codes: `PASSWORD_RESET_CODE_INVALID`, `EMAIL_VERIFICATION_CODE_INVALID`,
|
|
68
|
+
the `PASSKEY_SIGNUP_*` family; `VERIFICATION_CODE_*` now used for signed-in
|
|
69
|
+
code checks.
|
|
70
|
+
|
|
71
|
+
### Changed — breaking
|
|
72
|
+
|
|
73
|
+
- **Code failures are no longer `UNAUTHENTICATED`.** Password reset and
|
|
74
|
+
verify-email each report one code for every failure (no remaining-attempts
|
|
75
|
+
count); verify-phone and step-up by email report `VERIFICATION_CODE_INVALID` /
|
|
76
|
+
`_EXPIRED` / `_EXHAUSTED`. Update any client logic that matched
|
|
77
|
+
`UNAUTHENTICATED` or the old messages.
|
|
78
|
+
- `requestPasswordReset` no longer throws for a locked account, and its cooldown
|
|
79
|
+
applies to every address. `verifyEmail` refuses an already verified address.
|
|
80
|
+
`resendVerificationEmail` answers alike for every address.
|
|
81
|
+
- A misconfigured per-realm `verification.baseUrl` is logged through
|
|
82
|
+
`IAuthLogger.error` instead of failing the request.
|
|
83
|
+
- `PasskeyChallengePurpose` includes `'signup'`; `StepUpMethod` includes
|
|
84
|
+
`'oauth'`; `AuthRateLimitException` requires `retryAfterSeconds`.
|
|
85
|
+
|
|
86
|
+
### Upgrading from an RC
|
|
87
|
+
|
|
88
|
+
From rc.1: read the rc.2 entry (codes changed, and step 3 of sign-up needs the
|
|
89
|
+
verified `signupId`). From rc.2: nothing changes.
|
|
90
|
+
|
|
91
|
+
## [0.17.0-rc.2] - 2026-10-02
|
|
92
|
+
|
|
93
|
+
Fixes from LiftIQ's pilot of rc.1, chiefly **account enumeration in password
|
|
94
|
+
reset and email verification**. Those flaws are older than 0.17: every released
|
|
95
|
+
version has them. Still a release candidate on `next`.
|
|
96
|
+
|
|
97
|
+
### ⚠ Security
|
|
98
|
+
|
|
99
|
+
- **Password reset revealed which addresses have accounts.**
|
|
100
|
+
`requestPasswordReset` answered an existing account differently: a locked one
|
|
101
|
+
with `AccountLockedException`, and a second request within a minute with a 429
|
|
102
|
+
(the cooldown lived on the user record, so only real accounts had one). It also
|
|
103
|
+
answered a real account slower, because it waited for the email.
|
|
104
|
+
`resetPassword` looked the account up before checking the code: an unknown
|
|
105
|
+
address, a locked account, a social-only account and a weak new password each
|
|
106
|
+
answered differently to a junk code. Now:
|
|
107
|
+
- one answer for every address from `requestPasswordReset`, a locked or
|
|
108
|
+
social-only account included (no code sent to either);
|
|
109
|
+
- the 60-second cooldown per email address, for every address, in the rate
|
|
110
|
+
limiter;
|
|
111
|
+
- the email sent in the background;
|
|
112
|
+
- in `resetPassword`, password strength checked first (for everyone; it no
|
|
113
|
+
longer spends a valid code), then the code, then account state;
|
|
114
|
+
- **every** reset refusal is `PASSWORD_RESET_CODE_INVALID` (400), with no
|
|
115
|
+
remaining-attempts count, since anyone can request a reset for any address
|
|
116
|
+
first and probe.
|
|
117
|
+
- **Email verification revealed the same.** `verifyEmail` and
|
|
118
|
+
`resendVerificationEmail` answered `Invalid email address` for an unknown
|
|
119
|
+
address and `Email is already verified` for a verified one. Now resend answers
|
|
120
|
+
alike for every address (per-email cooldown in the rate limiter, send in the
|
|
121
|
+
background), and verify refuses every failure with
|
|
122
|
+
`EMAIL_VERIFICATION_CODE_INVALID` (400), an already verified address included.
|
|
123
|
+
|
|
124
|
+
### Changed — breaking
|
|
125
|
+
|
|
126
|
+
- **Code failures are no longer `UNAUTHENTICATED`.** Clients read that as an
|
|
127
|
+
expired session and refresh-and-retry. Verify-phone and step-up by email now
|
|
128
|
+
report `VERIFICATION_CODE_INVALID` (with `remainingAttempts`),
|
|
129
|
+
`VERIFICATION_CODE_EXPIRED` or `VERIFICATION_CODE_EXHAUSTED`; password reset
|
|
130
|
+
and verify-email report their single codes above.
|
|
131
|
+
- **Passwordless sign-up: step 2 returns a verified `signupId`, and completion
|
|
132
|
+
requires it.** Keep the one `performVerifyPasskeySignupCode` returns. With it,
|
|
133
|
+
the new `performPasskeySignupOptions({ signupId })` fetches fresh passkey
|
|
134
|
+
options without the code and without spending an attempt, for a cancelled or
|
|
135
|
+
timed-out device sheet. The verified id keeps the original 15-minute expiry.
|
|
136
|
+
Completion failures are now `PASSKEY_SIGNUP_CHALLENGE_EXPIRED` (fetch new
|
|
137
|
+
options) or `PASSKEY_SIGNUP_VERIFICATION_FAILED`, not a bare
|
|
138
|
+
`Passkey registration failed`; and `PASSKEY_SIGNUP_CODE_REQUIRED` for an
|
|
139
|
+
unverified id.
|
|
140
|
+
- A misconfigured per-realm `verification.baseUrl` no longer fails the
|
|
141
|
+
`requestPasswordReset` / `resendVerificationEmail` call (only real accounts
|
|
142
|
+
could reach it, so the error revealed them). It is logged through
|
|
143
|
+
`IAuthLogger.error` and no unusable email is sent.
|
|
144
|
+
|
|
145
|
+
### Added
|
|
146
|
+
|
|
147
|
+
- **`retryAfterSeconds` on every `RATE_LIMIT_EXCEEDED`**: login and OAuth IP
|
|
148
|
+
limits, passkey options, passwordless sign-up, step-up.
|
|
149
|
+
`AuthRateLimitException` now requires it.
|
|
150
|
+
`BruteForceProtectionService.checkIpRateLimitWithRetry` returns it;
|
|
151
|
+
`checkIpRateLimit` keeps its boolean.
|
|
152
|
+
- `PasswordResetCodeInvalidException`, `EmailVerificationCodeInvalidException`,
|
|
153
|
+
`PasskeySignupCodeRequiredException`,
|
|
154
|
+
`PasskeySignupChallengeExpiredException`,
|
|
155
|
+
`PasskeySignupVerificationFailedException`.
|
|
156
|
+
|
|
30
157
|
## [0.17.0-rc.1] - 2026-10-01
|
|
31
158
|
|
|
32
159
|
Passwordless sign-up with a passkey, and an optional step-up token on sign-in.
|
package/README.md
CHANGED
|
@@ -288,7 +288,8 @@ When cookie auth is enabled, pass the GraphQL `context` so tokens are set as Htt
|
|
|
288
288
|
| `performRenamePasskey(user, input, context?)` | Rename one |
|
|
289
289
|
| `performRemovePasskey(user, input, context?)` | Remove one (refused for the last way in) |
|
|
290
290
|
| `performStartPasskeySignup(input, context?)` | Passwordless sign-up, step 1: email a code (public) |
|
|
291
|
-
| `performVerifyPasskeySignupCode(input, context?)` | Step 2: check the code, get passkey creation options (public) |
|
|
291
|
+
| `performVerifyPasskeySignupCode(input, context?)` | Step 2: check the code, get passkey creation options and a verified `signupId` (public) |
|
|
292
|
+
| `performPasskeySignupOptions(input, context?)` | Fresh options for a verified sign-up, no code (public) |
|
|
292
293
|
| `performCompletePasskeySignup(input, context?)` | Step 3: create the account with its passkey and sign in (public) |
|
|
293
294
|
|
|
294
295
|
**Other:**
|
|
@@ -925,7 +926,11 @@ It sits beside `useFactory` because Nest fixes a module's controllers before asy
|
|
|
925
926
|
| 409 | `OAUTH_ACCOUNT_ALREADY_LINKED` | The account has a different ID linked for this provider | `provider` |
|
|
926
927
|
| 403 | `ACCOUNT_LOCKED` | Brute-force lockout | `remainingLockoutTime` (seconds) |
|
|
927
928
|
| 403 | `ACCOUNT_INACTIVE` | The account is suspended or deleted | -- |
|
|
928
|
-
| 429 | `RATE_LIMIT_EXCEEDED` | The client IP exceeded `bruteForce.ipRateLimit` |
|
|
929
|
+
| 429 | `RATE_LIMIT_EXCEEDED` | The client IP exceeded `bruteForce.ipRateLimit` | `retryAfterSeconds` |
|
|
930
|
+
|
|
931
|
+
Every `RATE_LIMIT_EXCEEDED` the package raises, here and over GraphQL (login,
|
|
932
|
+
passkey, sign-up, step-up), carries `retryAfterSeconds`, the time left in the
|
|
933
|
+
window, for a countdown.
|
|
929
934
|
|
|
930
935
|
With realms enabled, a request without a realm gets `400 Realm required` first. Before 0.10.0 the lockout, inactive-account, rate-limit and unconfigured-provider cases answered 500.
|
|
931
936
|
|
|
@@ -1356,11 +1361,18 @@ abandoned sign-up leaves nothing behind.
|
|
|
1356
1361
|
|
|
1357
1362
|
```
|
|
1358
1363
|
performStartPasskeySignup({ email }) -> { signupId, expiresAt } (emails a 6-digit code)
|
|
1359
|
-
performVerifyPasskeySignupCode({ signupId, code }) -> { challengeId, optionsJson }
|
|
1364
|
+
performVerifyPasskeySignupCode({ signupId, code }) -> { challengeId, optionsJson, signupId } (verified)
|
|
1360
1365
|
client: navigator.credentials.create(...)
|
|
1361
1366
|
performCompletePasskeySignup({ signupId, challengeId, responseJson, name? }) -> AuthResponse
|
|
1367
|
+
|
|
1368
|
+
after a cancelled or timed-out device sheet (PASSKEY_SIGNUP_CHALLENGE_EXPIRED):
|
|
1369
|
+
performPasskeySignupOptions({ signupId }) -> { challengeId, optionsJson, signupId } (no code)
|
|
1362
1370
|
```
|
|
1363
1371
|
|
|
1372
|
+
**Keep the `signupId` step 2 returns**: it is marked as having passed its code,
|
|
1373
|
+
with the same expiry. Completion and fresh options accept only that one, and
|
|
1374
|
+
neither spends a code attempt, so a cancelled sheet costs the user nothing.
|
|
1375
|
+
|
|
1364
1376
|
The result is an account with no password, `emailVerified: true`, and one
|
|
1365
1377
|
passkey, signed in exactly as `performLogin` signs in (cookies included).
|
|
1366
1378
|
Available when passkeys are configured and the email service has
|
|
@@ -1384,8 +1396,19 @@ renderer); otherwise `PASSKEY_SIGNUP_UNAVAILABLE`.
|
|
|
1384
1396
|
| `PASSKEY_SIGNUP_CODE_EXHAUSTED` | 429 | Third attempt used |
|
|
1385
1397
|
| `PASSKEY_SIGNUP_EXPIRED` | 400 | `signupId` expired, malformed, or from another realm |
|
|
1386
1398
|
| `PASSKEY_SIGNUP_EMAIL_TAKEN` | 409 | The email gained an account during the sign-up (only reachable with the code) |
|
|
1399
|
+
| `PASSKEY_SIGNUP_CODE_REQUIRED` | 400 | Options or completion with a `signupId` whose code was not checked: use the one step 2 returned |
|
|
1400
|
+
| `PASSKEY_SIGNUP_CHALLENGE_EXPIRED` | 400 | The passkey options expired or were used: fetch new ones with `performPasskeySignupOptions` |
|
|
1401
|
+
| `PASSKEY_SIGNUP_VERIFICATION_FAILED` | 400 | The created passkey did not verify |
|
|
1387
1402
|
| `PASSKEY_SIGNUP_UNAVAILABLE` | 503 | No passkeys, or no `sendSignupCodeEmail` |
|
|
1388
1403
|
|
|
1404
|
+
**An expired challenge can leave an orphaned passkey.** If the options expire
|
|
1405
|
+
(`passkey.registrationTimeoutSeconds`, 300 s by default) while the device's
|
|
1406
|
+
passkey sheet is still open, the platform may already have saved the passkey
|
|
1407
|
+
when the app gets `PASSKEY_SIGNUP_CHALLENGE_EXPIRED`. The retry then creates a
|
|
1408
|
+
second one, and the first stays in the user's password manager with no account
|
|
1409
|
+
behind it. Neither side can prevent this; it is rare at the default timeout.
|
|
1410
|
+
Reported by LiftIQ on Android.
|
|
1411
|
+
|
|
1389
1412
|
**What your repositories must do for it:**
|
|
1390
1413
|
- `IUserRepository.create` must store the `emailVerified` it is given (the
|
|
1391
1414
|
OAuth sign-up already relies on this).
|
|
@@ -1577,27 +1600,59 @@ None of this is configurable, and most of it is invisible until it bites:
|
|
|
1577
1600
|
| Code | 6 digits, HMAC-SHA256 hashed at rest, never logged |
|
|
1578
1601
|
| Expiry | 15 minutes |
|
|
1579
1602
|
| Attempts | **3**, then the code is destroyed and a new one must be requested |
|
|
1580
|
-
| Per-
|
|
1603
|
+
| Per-email cooldown | 60 seconds, for **every** address, in the rate limiter (`retryAfterSeconds` on the 429) |
|
|
1581
1604
|
| Per-IP limit | 5 per hour, checked **before** the user lookup |
|
|
1605
|
+
| Sending | In the background, so a real account does not answer slower than an unknown one |
|
|
1606
|
+
| New-password strength | Checked first, for everyone, before the account or the code |
|
|
1582
1607
|
| On success | **every refresh token for that user is revoked** — all devices are signed out |
|
|
1583
1608
|
| Comparison | constant-time |
|
|
1584
1609
|
|
|
1585
1610
|
The IP limit runs before the lookup deliberately: checking it afterwards would
|
|
1586
1611
|
make a request for a non-existent address measurably faster than one for a real
|
|
1587
1612
|
address, which is the enumeration leak the generic message exists to prevent.
|
|
1613
|
+
The same reasoning moved the cooldown off the user record and the email into
|
|
1614
|
+
the background in 0.17.0.
|
|
1588
1615
|
|
|
1589
1616
|
#### The response never tells you what happened
|
|
1590
1617
|
|
|
1591
1618
|
`requestPasswordReset` returns the same success payload whether the address does
|
|
1592
|
-
not exist, belongs to a social-login account, or was actually sent a
|
|
1593
|
-
|
|
1594
|
-
|
|
1619
|
+
not exist, belongs to a social-login or a locked account, or was actually sent a
|
|
1620
|
+
code. `resetPassword` refuses **every** failure with the same
|
|
1621
|
+
`PASSWORD_RESET_CODE_INVALID` (400): an unknown address, a wrong, expired or
|
|
1622
|
+
exhausted code, a locked or social-only account; no remaining-attempts count.
|
|
1623
|
+
That is deliberate — both are reachable unauthenticated, and anyone may request a
|
|
1624
|
+
reset for any address first, so any distinguishable result is an oracle for
|
|
1625
|
+
whether an address is registered. Show "Code invalid or expired. Request a new
|
|
1626
|
+
one." Until 0.17.0 a locked account, a social-only account, the cooldown and
|
|
1627
|
+
the password-strength check each answered differently.
|
|
1595
1628
|
|
|
1596
1629
|
If you need to know, read your `IAuthLogger`. A skip is reported as
|
|
1597
|
-
`PASSWORD_RESET_REQUESTED` with `result: 'SKIPPED_SOCIAL_ONLY'`
|
|
1630
|
+
`PASSWORD_RESET_REQUESTED` with `result: 'SKIPPED_SOCIAL_ONLY'` or
|
|
1631
|
+
`'SKIPPED_LOCKED'` and the user ID.
|
|
1598
1632
|
An operator tool that creates accounts and invites by reset should assert on that
|
|
1599
1633
|
event, not on the mutation's return value.
|
|
1600
1634
|
|
|
1635
|
+
#### Verify-email works the same way
|
|
1636
|
+
|
|
1637
|
+
`performVerifyEmail(email, code)` and `performResendVerificationEmail(email)`
|
|
1638
|
+
are keyed by an address and reachable signed out, so since 0.17.0 they follow
|
|
1639
|
+
the same rules: resend answers alike for every address (unknown and already
|
|
1640
|
+
verified ones are sent nothing), with the per-email cooldown in the rate limiter
|
|
1641
|
+
and the send in the background; verify refuses every failure with
|
|
1642
|
+
`EMAIL_VERIFICATION_CODE_INVALID` (400), including an address that is already
|
|
1643
|
+
verified.
|
|
1644
|
+
|
|
1645
|
+
#### Which code a verification failure reports
|
|
1646
|
+
|
|
1647
|
+
None is `UNAUTHENTICATED`, which clients treat as an expired session to refresh
|
|
1648
|
+
and retry.
|
|
1649
|
+
|
|
1650
|
+
| Flow | Caller | Failures |
|
|
1651
|
+
|---|---|---|
|
|
1652
|
+
| Password reset | Signed out, keyed by email | `PASSWORD_RESET_CODE_INVALID`, always |
|
|
1653
|
+
| Verify email | Signed out, keyed by email | `EMAIL_VERIFICATION_CODE_INVALID`, always |
|
|
1654
|
+
| Verify phone, step-up by email | Signed in | `VERIFICATION_CODE_INVALID` (with `remainingAttempts`), `VERIFICATION_CODE_EXPIRED`, `VERIFICATION_CODE_EXHAUSTED` |
|
|
1655
|
+
|
|
1601
1656
|
#### Accounts with no password
|
|
1602
1657
|
|
|
1603
1658
|
An account is refused only if it has an actual social identity — `googleId`,
|
|
@@ -51,6 +51,14 @@ export interface IAuthVerifyPasskeySignupCodeInput {
|
|
|
51
51
|
signupId: string;
|
|
52
52
|
code: string;
|
|
53
53
|
}
|
|
54
|
+
export interface IAuthPasskeySignupOptionsResponse {
|
|
55
|
+
challengeId: string;
|
|
56
|
+
optionsJson: string;
|
|
57
|
+
signupId: string;
|
|
58
|
+
}
|
|
59
|
+
export interface IAuthPasskeySignupOptionsInput {
|
|
60
|
+
signupId: string;
|
|
61
|
+
}
|
|
54
62
|
export interface IAuthCompletePasskeySignupInput {
|
|
55
63
|
signupId: string;
|
|
56
64
|
challengeId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"passkey.dto.d.ts","sourceRoot":"","sources":["../../src/dto/passkey.dto.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,2BAA2B,QAAS,CAAC;AAGlD,MAAM,WAAW,2BAA2B;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,oCAAoC;IAEnD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mCAAmC;IAClD,WAAW,EAAE,MAAM,CAAC;IAEpB,YAAY,EAAE,MAAM,CAAC;IAErB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qCAAqC;IACpD,WAAW,EAAE,MAAM,CAAC;IAEpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,MAAM,CAAC;CACtB;AAOD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,IAAI,CAAC;CACjB;AAGD,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,cAAc,GAAG,aAAa,CAAC;IAC3C,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;CACzB;AAGD,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,MAAM,CAAC;CACf;AAMD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;CACjB;AAGD,MAAM,WAAW,iCAAiC;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAGD,MAAM,WAAW,+BAA+B;
|
|
1
|
+
{"version":3,"file":"passkey.dto.d.ts","sourceRoot":"","sources":["../../src/dto/passkey.dto.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,2BAA2B,QAAS,CAAC;AAGlD,MAAM,WAAW,2BAA2B;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,oCAAoC;IAEnD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mCAAmC;IAClD,WAAW,EAAE,MAAM,CAAC;IAEpB,YAAY,EAAE,MAAM,CAAC;IAErB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qCAAqC;IACpD,WAAW,EAAE,MAAM,CAAC;IAEpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,MAAM,CAAC;CACtB;AAOD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,IAAI,CAAC;CACjB;AAGD,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,cAAc,GAAG,aAAa,CAAC;IAC3C,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;CACzB;AAGD,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,MAAM,CAAC;CACf;AAMD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;CACjB;AAGD,MAAM,WAAW,iCAAiC;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAOD,MAAM,WAAW,iCAAiC;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAGD,MAAM,WAAW,8BAA8B;IAE7C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAGD,MAAM,WAAW,+BAA+B;IAE9C,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IAEpB,YAAY,EAAE,MAAM,CAAC;IAErB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf"}
|
|
@@ -23,4 +23,13 @@ export declare class PasskeySignupEmailTakenException extends GraphQLError {
|
|
|
23
23
|
export declare class PasskeySignupUnavailableException extends GraphQLError {
|
|
24
24
|
constructor();
|
|
25
25
|
}
|
|
26
|
+
export declare class PasskeySignupCodeRequiredException extends GraphQLError {
|
|
27
|
+
constructor();
|
|
28
|
+
}
|
|
29
|
+
export declare class PasskeySignupChallengeExpiredException extends GraphQLError {
|
|
30
|
+
constructor();
|
|
31
|
+
}
|
|
32
|
+
export declare class PasskeySignupVerificationFailedException extends GraphQLError {
|
|
33
|
+
constructor();
|
|
34
|
+
}
|
|
26
35
|
//# sourceMappingURL=passkey.exceptions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"passkey.exceptions.d.ts","sourceRoot":"","sources":["../../src/exceptions/passkey.exceptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAgBvC,qBAAa,oCAAqC,SAAQ,YAAY;;CAMrE;AAOD,qBAAa,iCAAkC,SAAQ,YAAY;;CAMlE;AAQD,qBAAa,mCAAoC,SAAQ,YAAY;;CAMpE;AAQD,qBAAa,iCAAkC,SAAQ,YAAY;;CAMlE;AAMD,qBAAa,mCAAoC,SAAQ,YAAY;;CAMpE;AAMD,qBAAa,6BAA8B,SAAQ,YAAY;;CAM9D;AAOD,qBAAa,gCAAiC,SAAQ,YAAY;;CAMjE;AAQD,qBAAa,iCAAkC,SAAQ,YAAY;;CAMlE"}
|
|
1
|
+
{"version":3,"file":"passkey.exceptions.d.ts","sourceRoot":"","sources":["../../src/exceptions/passkey.exceptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAgBvC,qBAAa,oCAAqC,SAAQ,YAAY;;CAMrE;AAOD,qBAAa,iCAAkC,SAAQ,YAAY;;CAMlE;AAQD,qBAAa,mCAAoC,SAAQ,YAAY;;CAMpE;AAQD,qBAAa,iCAAkC,SAAQ,YAAY;;CAMlE;AAMD,qBAAa,mCAAoC,SAAQ,YAAY;;CAMpE;AAMD,qBAAa,6BAA8B,SAAQ,YAAY;;CAM9D;AAOD,qBAAa,gCAAiC,SAAQ,YAAY;;CAMjE;AAQD,qBAAa,iCAAkC,SAAQ,YAAY;;CAMlE;AAOD,qBAAa,kCAAmC,SAAQ,YAAY;;CAMnE;AAOD,qBAAa,sCAAuC,SAAQ,YAAY;;CAMvE;AAOD,qBAAa,wCAAyC,SAAQ,YAAY;;CAMzE"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PasskeySignupUnavailableException = exports.PasskeySignupEmailTakenException = exports.PasskeySignupExpiredException = exports.PasskeySignupCodeExhaustedException = exports.PasskeySignupCodeInvalidException = exports.CannotRemoveLastAuthMethodException = exports.PasskeyAlreadyRegisteredException = exports.PasskeyAuthenticationFailedException = void 0;
|
|
3
|
+
exports.PasskeySignupVerificationFailedException = exports.PasskeySignupChallengeExpiredException = exports.PasskeySignupCodeRequiredException = exports.PasskeySignupUnavailableException = exports.PasskeySignupEmailTakenException = exports.PasskeySignupExpiredException = exports.PasskeySignupCodeExhaustedException = exports.PasskeySignupCodeInvalidException = exports.CannotRemoveLastAuthMethodException = exports.PasskeyAlreadyRegisteredException = exports.PasskeyAuthenticationFailedException = void 0;
|
|
4
4
|
const graphql_1 = require("graphql");
|
|
5
5
|
class PasskeyAuthenticationFailedException extends graphql_1.GraphQLError {
|
|
6
6
|
constructor() {
|
|
@@ -66,4 +66,28 @@ class PasskeySignupUnavailableException extends graphql_1.GraphQLError {
|
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
68
|
exports.PasskeySignupUnavailableException = PasskeySignupUnavailableException;
|
|
69
|
+
class PasskeySignupCodeRequiredException extends graphql_1.GraphQLError {
|
|
70
|
+
constructor() {
|
|
71
|
+
super('Enter the emailed code first', {
|
|
72
|
+
extensions: { code: 'PASSKEY_SIGNUP_CODE_REQUIRED', statusCode: 400 },
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
exports.PasskeySignupCodeRequiredException = PasskeySignupCodeRequiredException;
|
|
77
|
+
class PasskeySignupChallengeExpiredException extends graphql_1.GraphQLError {
|
|
78
|
+
constructor() {
|
|
79
|
+
super('The passkey request expired. Try again', {
|
|
80
|
+
extensions: { code: 'PASSKEY_SIGNUP_CHALLENGE_EXPIRED', statusCode: 400 },
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
exports.PasskeySignupChallengeExpiredException = PasskeySignupChallengeExpiredException;
|
|
85
|
+
class PasskeySignupVerificationFailedException extends graphql_1.GraphQLError {
|
|
86
|
+
constructor() {
|
|
87
|
+
super('The passkey could not be verified', {
|
|
88
|
+
extensions: { code: 'PASSKEY_SIGNUP_VERIFICATION_FAILED', statusCode: 400 },
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
exports.PasskeySignupVerificationFailedException = PasskeySignupVerificationFailedException;
|
|
69
93
|
//# sourceMappingURL=passkey.exceptions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"passkey.exceptions.js","sourceRoot":"","sources":["../../src/exceptions/passkey.exceptions.ts"],"names":[],"mappings":";;;AAAA,qCAAuC;AAgBvC,MAAa,oCAAqC,SAAQ,sBAAY;IACpE;QACE,KAAK,CAAC,+BAA+B,EAAE;YACrC,UAAU,EAAE,EAAE,IAAI,EAAE,+BAA+B,EAAE,UAAU,EAAE,GAAG,EAAE;SACvE,CAAC,CAAC;IACL,CAAC;CACF;AAND,oFAMC;AAOD,MAAa,iCAAkC,SAAQ,sBAAY;IACjE;QACE,KAAK,CAAC,oCAAoC,EAAE;YAC1C,UAAU,EAAE,EAAE,IAAI,EAAE,4BAA4B,EAAE,UAAU,EAAE,GAAG,EAAE;SACpE,CAAC,CAAC;IACL,CAAC;CACF;AAND,8EAMC;AAQD,MAAa,mCAAoC,SAAQ,sBAAY;IACnE;QACE,KAAK,CAAC,wCAAwC,EAAE;YAC9C,UAAU,EAAE,EAAE,IAAI,EAAE,gCAAgC,EAAE,UAAU,EAAE,GAAG,EAAE;SACxE,CAAC,CAAC;IACL,CAAC;CACF;AAND,kFAMC;AAQD,MAAa,iCAAkC,SAAQ,sBAAY;IACjE;QACE,KAAK,CAAC,uBAAuB,EAAE;YAC7B,UAAU,EAAE,EAAE,IAAI,EAAE,6BAA6B,EAAE,UAAU,EAAE,GAAG,EAAE;SACrE,CAAC,CAAC;IACL,CAAC;CACF;AAND,8EAMC;AAMD,MAAa,mCAAoC,SAAQ,sBAAY;IACnE;QACE,KAAK,CAAC,2DAA2D,EAAE;YACjE,UAAU,EAAE,EAAE,IAAI,EAAE,+BAA+B,EAAE,UAAU,EAAE,GAAG,EAAE;SACvE,CAAC,CAAC;IACL,CAAC;CACF;AAND,kFAMC;AAMD,MAAa,6BAA8B,SAAQ,sBAAY;IAC7D;QACE,KAAK,CAAC,uCAAuC,EAAE;YAC7C,UAAU,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,UAAU,EAAE,GAAG,EAAE;SAChE,CAAC,CAAC;IACL,CAAC;CACF;AAND,sEAMC;AAOD,MAAa,gCAAiC,SAAQ,sBAAY;IAChE;QACE,KAAK,CAAC,2CAA2C,EAAE;YACjD,UAAU,EAAE,EAAE,IAAI,EAAE,4BAA4B,EAAE,UAAU,EAAE,GAAG,EAAE;SACpE,CAAC,CAAC;IACL,CAAC;CACF;AAND,4EAMC;AAQD,MAAa,iCAAkC,SAAQ,sBAAY;IACjE;QACE,KAAK,CAAC,kCAAkC,EAAE;YACxC,UAAU,EAAE,EAAE,IAAI,EAAE,4BAA4B,EAAE,UAAU,EAAE,GAAG,EAAE;SACpE,CAAC,CAAC;IACL,CAAC;CACF;AAND,8EAMC"}
|
|
1
|
+
{"version":3,"file":"passkey.exceptions.js","sourceRoot":"","sources":["../../src/exceptions/passkey.exceptions.ts"],"names":[],"mappings":";;;AAAA,qCAAuC;AAgBvC,MAAa,oCAAqC,SAAQ,sBAAY;IACpE;QACE,KAAK,CAAC,+BAA+B,EAAE;YACrC,UAAU,EAAE,EAAE,IAAI,EAAE,+BAA+B,EAAE,UAAU,EAAE,GAAG,EAAE;SACvE,CAAC,CAAC;IACL,CAAC;CACF;AAND,oFAMC;AAOD,MAAa,iCAAkC,SAAQ,sBAAY;IACjE;QACE,KAAK,CAAC,oCAAoC,EAAE;YAC1C,UAAU,EAAE,EAAE,IAAI,EAAE,4BAA4B,EAAE,UAAU,EAAE,GAAG,EAAE;SACpE,CAAC,CAAC;IACL,CAAC;CACF;AAND,8EAMC;AAQD,MAAa,mCAAoC,SAAQ,sBAAY;IACnE;QACE,KAAK,CAAC,wCAAwC,EAAE;YAC9C,UAAU,EAAE,EAAE,IAAI,EAAE,gCAAgC,EAAE,UAAU,EAAE,GAAG,EAAE;SACxE,CAAC,CAAC;IACL,CAAC;CACF;AAND,kFAMC;AAQD,MAAa,iCAAkC,SAAQ,sBAAY;IACjE;QACE,KAAK,CAAC,uBAAuB,EAAE;YAC7B,UAAU,EAAE,EAAE,IAAI,EAAE,6BAA6B,EAAE,UAAU,EAAE,GAAG,EAAE;SACrE,CAAC,CAAC;IACL,CAAC;CACF;AAND,8EAMC;AAMD,MAAa,mCAAoC,SAAQ,sBAAY;IACnE;QACE,KAAK,CAAC,2DAA2D,EAAE;YACjE,UAAU,EAAE,EAAE,IAAI,EAAE,+BAA+B,EAAE,UAAU,EAAE,GAAG,EAAE;SACvE,CAAC,CAAC;IACL,CAAC;CACF;AAND,kFAMC;AAMD,MAAa,6BAA8B,SAAQ,sBAAY;IAC7D;QACE,KAAK,CAAC,uCAAuC,EAAE;YAC7C,UAAU,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,UAAU,EAAE,GAAG,EAAE;SAChE,CAAC,CAAC;IACL,CAAC;CACF;AAND,sEAMC;AAOD,MAAa,gCAAiC,SAAQ,sBAAY;IAChE;QACE,KAAK,CAAC,2CAA2C,EAAE;YACjD,UAAU,EAAE,EAAE,IAAI,EAAE,4BAA4B,EAAE,UAAU,EAAE,GAAG,EAAE;SACpE,CAAC,CAAC;IACL,CAAC;CACF;AAND,4EAMC;AAQD,MAAa,iCAAkC,SAAQ,sBAAY;IACjE;QACE,KAAK,CAAC,kCAAkC,EAAE;YACxC,UAAU,EAAE,EAAE,IAAI,EAAE,4BAA4B,EAAE,UAAU,EAAE,GAAG,EAAE;SACpE,CAAC,CAAC;IACL,CAAC;CACF;AAND,8EAMC;AAOD,MAAa,kCAAmC,SAAQ,sBAAY;IAClE;QACE,KAAK,CAAC,8BAA8B,EAAE;YACpC,UAAU,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE,UAAU,EAAE,GAAG,EAAE;SACtE,CAAC,CAAC;IACL,CAAC;CACF;AAND,gFAMC;AAOD,MAAa,sCAAuC,SAAQ,sBAAY;IACtE;QACE,KAAK,CAAC,wCAAwC,EAAE;YAC9C,UAAU,EAAE,EAAE,IAAI,EAAE,kCAAkC,EAAE,UAAU,EAAE,GAAG,EAAE;SAC1E,CAAC,CAAC;IACL,CAAC;CACF;AAND,wFAMC;AAOD,MAAa,wCAAyC,SAAQ,sBAAY;IACxE;QACE,KAAK,CAAC,mCAAmC,EAAE;YACzC,UAAU,EAAE,EAAE,IAAI,EAAE,oCAAoC,EAAE,UAAU,EAAE,GAAG,EAAE;SAC5E,CAAC,CAAC;IACL,CAAC;CACF;AAND,4FAMC"}
|
|
@@ -5,4 +5,7 @@ export declare class PasswordResetRateLimitException extends CodedHttpException
|
|
|
5
5
|
export declare class WeakPasswordException extends CodedHttpException {
|
|
6
6
|
constructor(errors: string[]);
|
|
7
7
|
}
|
|
8
|
+
export declare class PasswordResetCodeInvalidException extends CodedHttpException {
|
|
9
|
+
constructor();
|
|
10
|
+
}
|
|
8
11
|
//# sourceMappingURL=password-reset.exceptions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"password-reset.exceptions.d.ts","sourceRoot":"","sources":["../../src/exceptions/password-reset.exceptions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAS5D,qBAAa,+BAAgC,SAAQ,kBAAkB;gBACzD,iBAAiB,EAAE,MAAM;CAUtC;AAYD,qBAAa,qBAAsB,SAAQ,kBAAkB;gBAC/C,MAAM,EAAE,MAAM,EAAE;CAU7B"}
|
|
1
|
+
{"version":3,"file":"password-reset.exceptions.d.ts","sourceRoot":"","sources":["../../src/exceptions/password-reset.exceptions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAS5D,qBAAa,+BAAgC,SAAQ,kBAAkB;gBACzD,iBAAiB,EAAE,MAAM;CAUtC;AAYD,qBAAa,qBAAsB,SAAQ,kBAAkB;gBAC/C,MAAM,EAAE,MAAM,EAAE;CAU7B;AAUD,qBAAa,iCAAkC,SAAQ,kBAAkB;;CAOxE"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.WeakPasswordException = exports.PasswordResetRateLimitException = void 0;
|
|
3
|
+
exports.PasswordResetCodeInvalidException = exports.WeakPasswordException = exports.PasswordResetRateLimitException = void 0;
|
|
4
4
|
const common_1 = require("@nestjs/common");
|
|
5
5
|
const coded_http_exception_1 = require("./coded-http.exception");
|
|
6
6
|
class PasswordResetRateLimitException extends coded_http_exception_1.CodedHttpException {
|
|
@@ -23,4 +23,10 @@ class WeakPasswordException extends coded_http_exception_1.CodedHttpException {
|
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
exports.WeakPasswordException = WeakPasswordException;
|
|
26
|
+
class PasswordResetCodeInvalidException extends coded_http_exception_1.CodedHttpException {
|
|
27
|
+
constructor() {
|
|
28
|
+
super({ message: 'Invalid or expired reset code.', code: 'PASSWORD_RESET_CODE_INVALID' }, common_1.HttpStatus.BAD_REQUEST);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.PasswordResetCodeInvalidException = PasswordResetCodeInvalidException;
|
|
26
32
|
//# sourceMappingURL=password-reset.exceptions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"password-reset.exceptions.js","sourceRoot":"","sources":["../../src/exceptions/password-reset.exceptions.ts"],"names":[],"mappings":";;;AAAA,2CAA4C;AAC5C,iEAA4D;AAS5D,MAAa,+BAAgC,SAAQ,yCAAkB;IACrE,YAAY,iBAAyB;QACnC,KAAK,CACH;YACE,OAAO,EAAE,iDAAiD,iBAAiB,+BAA+B;YAC1G,IAAI,EAAE,2BAA2B;YACjC,iBAAiB;SAClB,EACD,mBAAU,CAAC,iBAAiB,CAC7B,CAAC;IACJ,CAAC;CACF;AAXD,0EAWC;AAYD,MAAa,qBAAsB,SAAQ,yCAAkB;IAC3D,YAAY,MAAgB;QAC1B,KAAK,CACH;YACE,OAAO,EAAE,8CAA8C;YACvD,IAAI,EAAE,eAAe;YACrB,MAAM;SACP,EACD,mBAAU,CAAC,WAAW,CACvB,CAAC;IACJ,CAAC;CACF;AAXD,sDAWC"}
|
|
1
|
+
{"version":3,"file":"password-reset.exceptions.js","sourceRoot":"","sources":["../../src/exceptions/password-reset.exceptions.ts"],"names":[],"mappings":";;;AAAA,2CAA4C;AAC5C,iEAA4D;AAS5D,MAAa,+BAAgC,SAAQ,yCAAkB;IACrE,YAAY,iBAAyB;QACnC,KAAK,CACH;YACE,OAAO,EAAE,iDAAiD,iBAAiB,+BAA+B;YAC1G,IAAI,EAAE,2BAA2B;YACjC,iBAAiB;SAClB,EACD,mBAAU,CAAC,iBAAiB,CAC7B,CAAC;IACJ,CAAC;CACF;AAXD,0EAWC;AAYD,MAAa,qBAAsB,SAAQ,yCAAkB;IAC3D,YAAY,MAAgB;QAC1B,KAAK,CACH;YACE,OAAO,EAAE,8CAA8C;YACvD,IAAI,EAAE,eAAe;YACrB,MAAM;SACP,EACD,mBAAU,CAAC,WAAW,CACvB,CAAC;IACJ,CAAC;CACF;AAXD,sDAWC;AAUD,MAAa,iCAAkC,SAAQ,yCAAkB;IACvE;QACE,KAAK,CACH,EAAE,OAAO,EAAE,gCAAgC,EAAE,IAAI,EAAE,6BAA6B,EAAE,EAClF,mBAAU,CAAC,WAAW,CACvB,CAAC;IACJ,CAAC;CACF;AAPD,8EAOC"}
|
|
@@ -6,7 +6,7 @@ export declare class StepUpUnavailableException extends GraphQLError {
|
|
|
6
6
|
constructor(method?: string);
|
|
7
7
|
}
|
|
8
8
|
export declare class AuthRateLimitException extends GraphQLError {
|
|
9
|
-
constructor(message: string, retryAfterSeconds
|
|
9
|
+
constructor(message: string, retryAfterSeconds: number);
|
|
10
10
|
}
|
|
11
11
|
export declare class StepUpFailedException extends GraphQLError {
|
|
12
12
|
constructor();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step-up.exceptions.d.ts","sourceRoot":"","sources":["../../src/exceptions/step-up.exceptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAgBvC,qBAAa,uBAAwB,SAAQ,YAAY;;CAMxD;AAUD,qBAAa,0BAA2B,SAAQ,YAAY;gBAC9C,MAAM,CAAC,EAAE,MAAM;CAQ5B;
|
|
1
|
+
{"version":3,"file":"step-up.exceptions.d.ts","sourceRoot":"","sources":["../../src/exceptions/step-up.exceptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAgBvC,qBAAa,uBAAwB,SAAQ,YAAY;;CAMxD;AAUD,qBAAa,0BAA2B,SAAQ,YAAY;gBAC9C,MAAM,CAAC,EAAE,MAAM;CAQ5B;AAQD,qBAAa,sBAAuB,SAAQ,YAAY;gBAC1C,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM;CAKvD;AAaD,qBAAa,qBAAsB,SAAQ,YAAY;;CAMtD"}
|
|
@@ -21,11 +21,7 @@ exports.StepUpUnavailableException = StepUpUnavailableException;
|
|
|
21
21
|
class AuthRateLimitException extends graphql_1.GraphQLError {
|
|
22
22
|
constructor(message, retryAfterSeconds) {
|
|
23
23
|
super(message, {
|
|
24
|
-
extensions: {
|
|
25
|
-
code: 'RATE_LIMIT_EXCEEDED',
|
|
26
|
-
statusCode: 429,
|
|
27
|
-
...(retryAfterSeconds !== undefined ? { retryAfterSeconds } : {}),
|
|
28
|
-
},
|
|
24
|
+
extensions: { code: 'RATE_LIMIT_EXCEEDED', statusCode: 429, retryAfterSeconds },
|
|
29
25
|
});
|
|
30
26
|
}
|
|
31
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step-up.exceptions.js","sourceRoot":"","sources":["../../src/exceptions/step-up.exceptions.ts"],"names":[],"mappings":";;;AAAA,qCAAuC;AAgBvC,MAAa,uBAAwB,SAAQ,sBAAY;IACvD;QACE,KAAK,CAAC,4BAA4B,EAAE;YAClC,UAAU,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,UAAU,EAAE,GAAG,EAAE;SAC1D,CAAC,CAAC;IACL,CAAC;CACF;AAND,0DAMC;AAUD,MAAa,0BAA2B,SAAQ,sBAAY;IAC1D,YAAY,MAAe;QACzB,KAAK,CACH,MAAM;YACJ,CAAC,CAAC,wBAAwB,MAAM,oCAAoC;YACpE,CAAC,CAAC,2DAA2D,EAC/D,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,CACjE,CAAC;IACJ,CAAC;CACF;AATD,gEASC;
|
|
1
|
+
{"version":3,"file":"step-up.exceptions.js","sourceRoot":"","sources":["../../src/exceptions/step-up.exceptions.ts"],"names":[],"mappings":";;;AAAA,qCAAuC;AAgBvC,MAAa,uBAAwB,SAAQ,sBAAY;IACvD;QACE,KAAK,CAAC,4BAA4B,EAAE;YAClC,UAAU,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,UAAU,EAAE,GAAG,EAAE;SAC1D,CAAC,CAAC;IACL,CAAC;CACF;AAND,0DAMC;AAUD,MAAa,0BAA2B,SAAQ,sBAAY;IAC1D,YAAY,MAAe;QACzB,KAAK,CACH,MAAM;YACJ,CAAC,CAAC,wBAAwB,MAAM,oCAAoC;YACpE,CAAC,CAAC,2DAA2D,EAC/D,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,CACjE,CAAC;IACJ,CAAC;CACF;AATD,gEASC;AAQD,MAAa,sBAAuB,SAAQ,sBAAY;IACtD,YAAY,OAAe,EAAE,iBAAyB;QACpD,KAAK,CAAC,OAAO,EAAE;YACb,UAAU,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,UAAU,EAAE,GAAG,EAAE,iBAAiB,EAAE;SAChF,CAAC,CAAC;IACL,CAAC;CACF;AAND,wDAMC;AAaD,MAAa,qBAAsB,SAAQ,sBAAY;IACrD;QACE,KAAK,CAAC,0BAA0B,EAAE;YAChC,UAAU,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,GAAG,EAAE;SACxD,CAAC,CAAC;IACL,CAAC;CACF;AAND,sDAMC"}
|
|
@@ -3,7 +3,7 @@ export declare class VerificationCodeExpiredException extends CodedHttpException
|
|
|
3
3
|
constructor();
|
|
4
4
|
}
|
|
5
5
|
export declare class VerificationCodeInvalidException extends CodedHttpException {
|
|
6
|
-
constructor(remainingAttempts
|
|
6
|
+
constructor(remainingAttempts?: number);
|
|
7
7
|
}
|
|
8
8
|
export declare class VerificationCodeExhaustedException extends CodedHttpException {
|
|
9
9
|
constructor();
|
|
@@ -11,4 +11,7 @@ export declare class VerificationCodeExhaustedException extends CodedHttpExcepti
|
|
|
11
11
|
export declare class VerificationEmailRateLimitException extends CodedHttpException {
|
|
12
12
|
constructor(retryAfterSeconds: number);
|
|
13
13
|
}
|
|
14
|
+
export declare class EmailVerificationCodeInvalidException extends CodedHttpException {
|
|
15
|
+
constructor();
|
|
16
|
+
}
|
|
14
17
|
//# sourceMappingURL=verification.exceptions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification.exceptions.d.ts","sourceRoot":"","sources":["../../src/exceptions/verification.exceptions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,qBAAa,gCAAiC,SAAQ,kBAAkB;;CAUvE;AAED,qBAAa,gCAAiC,SAAQ,kBAAkB;
|
|
1
|
+
{"version":3,"file":"verification.exceptions.d.ts","sourceRoot":"","sources":["../../src/exceptions/verification.exceptions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,qBAAa,gCAAiC,SAAQ,kBAAkB;;CAUvE;AAED,qBAAa,gCAAiC,SAAQ,kBAAkB;gBAE1D,iBAAiB,CAAC,EAAE,MAAM;CAYvC;AAED,qBAAa,kCAAmC,SAAQ,kBAAkB;;CAUzE;AAED,qBAAa,mCAAoC,SAAQ,kBAAkB;gBAC7D,iBAAiB,EAAE,MAAM;CAUtC;AAQD,qBAAa,qCAAsC,SAAQ,kBAAkB;;CAO5E"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.VerificationEmailRateLimitException = exports.VerificationCodeExhaustedException = exports.VerificationCodeInvalidException = exports.VerificationCodeExpiredException = void 0;
|
|
3
|
+
exports.EmailVerificationCodeInvalidException = exports.VerificationEmailRateLimitException = exports.VerificationCodeExhaustedException = exports.VerificationCodeInvalidException = exports.VerificationCodeExpiredException = void 0;
|
|
4
4
|
const common_1 = require("@nestjs/common");
|
|
5
5
|
const coded_http_exception_1 = require("./coded-http.exception");
|
|
6
6
|
class VerificationCodeExpiredException extends coded_http_exception_1.CodedHttpException {
|
|
@@ -14,11 +14,13 @@ class VerificationCodeExpiredException extends coded_http_exception_1.CodedHttpE
|
|
|
14
14
|
exports.VerificationCodeExpiredException = VerificationCodeExpiredException;
|
|
15
15
|
class VerificationCodeInvalidException extends coded_http_exception_1.CodedHttpException {
|
|
16
16
|
constructor(remainingAttempts) {
|
|
17
|
-
super(
|
|
18
|
-
message:
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
super(remainingAttempts === undefined
|
|
18
|
+
? { message: 'Invalid verification code.', code: 'VERIFICATION_CODE_INVALID' }
|
|
19
|
+
: {
|
|
20
|
+
message: `Invalid verification code. ${remainingAttempts} attempt(s) remaining.`,
|
|
21
|
+
code: 'VERIFICATION_CODE_INVALID',
|
|
22
|
+
remainingAttempts,
|
|
23
|
+
}, common_1.HttpStatus.UNAUTHORIZED);
|
|
22
24
|
}
|
|
23
25
|
}
|
|
24
26
|
exports.VerificationCodeInvalidException = VerificationCodeInvalidException;
|
|
@@ -41,4 +43,10 @@ class VerificationEmailRateLimitException extends coded_http_exception_1.CodedHt
|
|
|
41
43
|
}
|
|
42
44
|
}
|
|
43
45
|
exports.VerificationEmailRateLimitException = VerificationEmailRateLimitException;
|
|
46
|
+
class EmailVerificationCodeInvalidException extends coded_http_exception_1.CodedHttpException {
|
|
47
|
+
constructor() {
|
|
48
|
+
super({ message: 'Invalid or expired verification code.', code: 'EMAIL_VERIFICATION_CODE_INVALID' }, common_1.HttpStatus.BAD_REQUEST);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.EmailVerificationCodeInvalidException = EmailVerificationCodeInvalidException;
|
|
44
52
|
//# sourceMappingURL=verification.exceptions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification.exceptions.js","sourceRoot":"","sources":["../../src/exceptions/verification.exceptions.ts"],"names":[],"mappings":";;;AAAA,2CAA4C;AAC5C,iEAA4D;AAE5D,MAAa,gCAAiC,SAAQ,yCAAkB;IACtE;QACE,KAAK,CACH;YACE,OAAO,EAAE,2DAA2D;YACpE,IAAI,EAAE,2BAA2B;SAClC,EACD,mBAAU,CAAC,YAAY,CACxB,CAAC;IACJ,CAAC;CACF;AAVD,4EAUC;AAED,MAAa,gCAAiC,SAAQ,yCAAkB;
|
|
1
|
+
{"version":3,"file":"verification.exceptions.js","sourceRoot":"","sources":["../../src/exceptions/verification.exceptions.ts"],"names":[],"mappings":";;;AAAA,2CAA4C;AAC5C,iEAA4D;AAE5D,MAAa,gCAAiC,SAAQ,yCAAkB;IACtE;QACE,KAAK,CACH;YACE,OAAO,EAAE,2DAA2D;YACpE,IAAI,EAAE,2BAA2B;SAClC,EACD,mBAAU,CAAC,YAAY,CACxB,CAAC;IACJ,CAAC;CACF;AAVD,4EAUC;AAED,MAAa,gCAAiC,SAAQ,yCAAkB;IAEtE,YAAY,iBAA0B;QACpC,KAAK,CACH,iBAAiB,KAAK,SAAS;YAC7B,CAAC,CAAC,EAAE,OAAO,EAAE,4BAA4B,EAAE,IAAI,EAAE,2BAA2B,EAAE;YAC9E,CAAC,CAAC;gBACE,OAAO,EAAE,8BAA8B,iBAAiB,wBAAwB;gBAChF,IAAI,EAAE,2BAA2B;gBACjC,iBAAiB;aAClB,EACL,mBAAU,CAAC,YAAY,CACxB,CAAC;IACJ,CAAC;CACF;AAdD,4EAcC;AAED,MAAa,kCAAmC,SAAQ,yCAAkB;IACxE;QACE,KAAK,CACH;YACE,OAAO,EAAE,sDAAsD;YAC/D,IAAI,EAAE,6BAA6B;SACpC,EACD,mBAAU,CAAC,iBAAiB,CAC7B,CAAC;IACJ,CAAC;CACF;AAVD,gFAUC;AAED,MAAa,mCAAoC,SAAQ,yCAAkB;IACzE,YAAY,iBAAyB;QACnC,KAAK,CACH;YACE,OAAO,EAAE,eAAe,iBAAiB,0CAA0C;YACnF,IAAI,EAAE,+BAA+B;YACrC,iBAAiB;SAClB,EACD,mBAAU,CAAC,iBAAiB,CAC7B,CAAC;IACJ,CAAC;CACF;AAXD,kFAWC;AAQD,MAAa,qCAAsC,SAAQ,yCAAkB;IAC3E;QACE,KAAK,CACH,EAAE,OAAO,EAAE,uCAAuC,EAAE,IAAI,EAAE,iCAAiC,EAAE,EAC7F,mBAAU,CAAC,WAAW,CACvB,CAAC;IACJ,CAAC;CACF;AAPD,sFAOC"}
|
|
@@ -24,7 +24,7 @@ import { IAuthLogger } from '../interfaces/auth-logger.interface';
|
|
|
24
24
|
import { PasskeyService } from '../services/passkey.service';
|
|
25
25
|
import { StepUpService } from '../services/step-up.service';
|
|
26
26
|
import { StepUpMethod } from '../services/step-up-token.service';
|
|
27
|
-
import { IAuthPasskey, IAuthPasskeyOptionsResponse, IAuthPasskeyRegistrationOptionsInput, IAuthReauthenticateInput, IAuthRemovePasskeyInput, IAuthRenamePasskeyInput, IAuthStepUpTokenResponse, IAuthVerifyPasskeyAuthenticationInput, IAuthVerifyPasskeyRegistrationInput, IAuthStartPasskeySignupInput, IAuthPasskeySignupStarted, IAuthVerifyPasskeySignupCodeInput, IAuthCompletePasskeySignupInput } from '../dto/passkey.dto';
|
|
27
|
+
import { IAuthPasskey, IAuthPasskeyOptionsResponse, IAuthPasskeyRegistrationOptionsInput, IAuthReauthenticateInput, IAuthRemovePasskeyInput, IAuthRenamePasskeyInput, IAuthStepUpTokenResponse, IAuthVerifyPasskeyAuthenticationInput, IAuthVerifyPasskeyRegistrationInput, IAuthStartPasskeySignupInput, IAuthPasskeySignupStarted, IAuthVerifyPasskeySignupCodeInput, IAuthCompletePasskeySignupInput, IAuthPasskeySignupOptionsResponse, IAuthPasskeySignupOptionsInput } from '../dto/passkey.dto';
|
|
28
28
|
export declare abstract class BaseAuthResolver<T extends IAuthUser> {
|
|
29
29
|
protected readonly authService: AuthService;
|
|
30
30
|
protected readonly bruteForceProtection: BruteForceProtectionService;
|
|
@@ -76,7 +76,8 @@ export declare abstract class BaseAuthResolver<T extends IAuthUser> {
|
|
|
76
76
|
protected performPasskeyAuthenticationOptions(context?: any): Promise<IAuthPasskeyOptionsResponse>;
|
|
77
77
|
protected performVerifyPasskeyAuthentication(input: IAuthVerifyPasskeyAuthenticationInput, context?: any): Promise<AuthResponseBase<T>>;
|
|
78
78
|
protected performStartPasskeySignup(input: IAuthStartPasskeySignupInput, context?: any): Promise<IAuthPasskeySignupStarted>;
|
|
79
|
-
protected performVerifyPasskeySignupCode(input: IAuthVerifyPasskeySignupCodeInput, context?: any): Promise<
|
|
79
|
+
protected performVerifyPasskeySignupCode(input: IAuthVerifyPasskeySignupCodeInput, context?: any): Promise<IAuthPasskeySignupOptionsResponse>;
|
|
80
|
+
protected performPasskeySignupOptions(input: IAuthPasskeySignupOptionsInput, context?: any): Promise<IAuthPasskeySignupOptionsResponse>;
|
|
80
81
|
protected performCompletePasskeySignup(input: IAuthCompletePasskeySignupInput, context?: any): Promise<AuthResponseBase<T>>;
|
|
81
82
|
protected performListPasskeys(user: IAuthUser, context?: any): Promise<IAuthPasskey[]>;
|
|
82
83
|
protected performRenamePasskey(user: IAuthUser, input: IAuthRenamePasskeyInput, context?: any): Promise<IAuthPasskey>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-auth.resolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/base-auth.resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,MAAM,EAKP,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACzF,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAC;AACvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EACL,8BAA8B,EAC9B,wBAAwB,EACxB,wBAAwB,EACzB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AACpF,OAAO,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC;AACrF,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;AACzF,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAiB,MAAM,qCAAqC,CAAC;AAMjF,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAe,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EACL,YAAY,EACZ,2BAA2B,EAC3B,oCAAoC,EACpC,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,qCAAqC,EACrC,mCAAmC,EACnC,4BAA4B,EAC5B,yBAAyB,EACzB,iCAAiC,EACjC,+BAA+B,
|
|
1
|
+
{"version":3,"file":"base-auth.resolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/base-auth.resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -263,8 +263,12 @@ let BaseAuthResolver = class BaseAuthResolver {
|
|
|
263
263
|
return this.requireAuthPasskeys().startSignup({ email: input.email }, { realm: this.getRealmFromContext(context), ipAddress: this.authClientIp(context) });
|
|
264
264
|
}
|
|
265
265
|
async performVerifyPasskeySignupCode(input, context) {
|
|
266
|
-
const { challengeId, options } = await this.requireAuthPasskeys().verifySignupCode({ signupId: input.signupId, code: input.code }, { realm: this.getRealmFromContext(context), ipAddress: this.authClientIp(context) });
|
|
267
|
-
return { challengeId, optionsJson: JSON.stringify(options) };
|
|
266
|
+
const { challengeId, options, signupId } = await this.requireAuthPasskeys().verifySignupCode({ signupId: input.signupId, code: input.code }, { realm: this.getRealmFromContext(context), ipAddress: this.authClientIp(context) });
|
|
267
|
+
return { challengeId, optionsJson: JSON.stringify(options), signupId };
|
|
268
|
+
}
|
|
269
|
+
async performPasskeySignupOptions(input, context) {
|
|
270
|
+
const { challengeId, options } = await this.requireAuthPasskeys().signupOptions({ signupId: input.signupId }, { realm: this.getRealmFromContext(context), ipAddress: this.authClientIp(context) });
|
|
271
|
+
return { challengeId, optionsJson: JSON.stringify(options), signupId: input.signupId };
|
|
268
272
|
}
|
|
269
273
|
async performCompletePasskeySignup(input, context) {
|
|
270
274
|
assertResponseSize(input.responseJson);
|