@nxgt/janus 0.16.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/README.md +99 -11
- package/dist/auth/config/index.d.ts +1 -1
- package/dist/auth/config/index.d.ts.map +1 -1
- package/dist/auth/config/janus-config.d.ts +24 -3
- package/dist/auth/config/janus-config.d.ts.map +1 -1
- package/dist/auth/config/resolve-config.d.ts.map +1 -1
- package/dist/auth/config/resolve-devices.d.ts +5 -0
- package/dist/auth/config/resolve-devices.d.ts.map +1 -0
- package/dist/auth/config/resolved-config.d.ts +4 -0
- package/dist/auth/config/resolved-config.d.ts.map +1 -1
- package/dist/auth/devices/hint.d.ts +30 -0
- package/dist/auth/devices/hint.d.ts.map +1 -0
- package/dist/auth/devices/index.d.ts +10 -0
- package/dist/auth/devices/index.d.ts.map +1 -0
- package/dist/auth/devices/report.d.ts +11 -0
- package/dist/auth/devices/report.d.ts.map +1 -0
- package/dist/auth/devices/token.d.ts +13 -0
- package/dist/auth/devices/token.d.ts.map +1 -0
- package/dist/auth/email-sign-in.d.ts +4 -2
- package/dist/auth/email-sign-in.d.ts.map +1 -1
- package/dist/auth/events.d.ts +18 -5
- package/dist/auth/events.d.ts.map +1 -1
- package/dist/auth/index.d.ts +2 -2
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/magic-link.d.ts.map +1 -1
- package/dist/auth/second-factor/challenge.d.ts +2 -2
- package/dist/auth/second-factor/challenge.d.ts.map +1 -1
- package/dist/auth/second-factor/flows.d.ts +6 -4
- package/dist/auth/second-factor/flows.d.ts.map +1 -1
- package/dist/auth/second-factor/recovery.d.ts +6 -2
- package/dist/auth/second-factor/recovery.d.ts.map +1 -1
- package/dist/auth/sessions/open-session.d.ts +7 -1
- package/dist/auth/sessions/open-session.d.ts.map +1 -1
- package/dist/auth/sign-in-code.d.ts.map +1 -1
- package/dist/auth/types/email-flows.d.ts +2 -2
- package/dist/auth/types/email-flows.d.ts.map +1 -1
- package/dist/auth/types/index.d.ts +1 -1
- package/dist/auth/types/index.d.ts.map +1 -1
- package/dist/auth/types/magic-link.d.ts +2 -2
- package/dist/auth/types/magic-link.d.ts.map +1 -1
- package/dist/auth/types/password.d.ts +10 -3
- package/dist/auth/types/password.d.ts.map +1 -1
- package/dist/auth/types/second-factor.d.ts +6 -3
- package/dist/auth/types/second-factor.d.ts.map +1 -1
- package/dist/auth/types/sign-in.d.ts +32 -0
- package/dist/auth/types/sign-in.d.ts.map +1 -1
- package/dist/auth/users/flow-types.d.ts +2 -1
- package/dist/auth/users/flow-types.d.ts.map +1 -1
- package/dist/auth/users/password-flows.d.ts.map +1 -1
- package/dist/auth/users/sign-in.d.ts +5 -1
- package/dist/auth/users/sign-in.d.ts.map +1 -1
- package/dist/index.js +172 -73
- package/dist/index.js.map +19 -15
- package/docs/README.md +2 -1
- package/docs/guide/devices.md +428 -0
- package/docs/guide/events.md +53 -8
- package/docs/guide/magic-link.md +25 -3
- package/docs/guide/second-factor.md +30 -5
- package/docs/guide/sessions.md +8 -0
- package/docs/guide/sign-in-code.md +22 -3
- package/docs/guide/users.md +3 -2
- package/docs/guide/vocabulary.md +4 -3
- package/docs/roadmap.md +12 -8
- package/docs/troubleshooting.md +210 -4
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-session.d.ts","sourceRoot":"","sources":["../../../src/auth/sessions/open-session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,YAAY,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE/D,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAElD,8EAA8E;AAC9E,wBAAgB,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAGxD;AAED
|
|
1
|
+
{"version":3,"file":"open-session.d.ts","sourceRoot":"","sources":["../../../src/auth/sessions/open-session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,KAAK,UAAU,EAAiB,MAAM,YAAY,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE/D,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAElD,8EAA8E;AAC9E,wBAAgB,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAGxD;AAED;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAChC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,UAAU,EAClB,MAAM,UAAQ,GACZ,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAqB5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sign-in-code.d.ts","sourceRoot":"","sources":["../../src/auth/sign-in-code.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,OAAO,EAAsB,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"sign-in-code.d.ts","sourceRoot":"","sources":["../../src/auth/sign-in-code.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,OAAO,EAAsB,MAAM,WAAW,CAAC;AAE3E,OAAO,EACN,KAAK,MAAM,EAIX,MAAM,iBAAiB,CAAC;AAWzB,OAAO,KAAK,EAEX,aAAa,EAEb,YAAY,EACZ,MAAM,SAAS,CAAC;AAEjB;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAC9B,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,YAAY,EAClB,EAAE,EAAE,EAAE,EACN,MAAM,EAAE,MAAM,GACZ,aAAa,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAgB7D"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Part of what `janus()` hands back; `./index` gathers it.
|
|
6
6
|
*/
|
|
7
|
-
import type { SignedIn } from './sign-in';
|
|
7
|
+
import type { SignedIn, SignInOptions } from './sign-in';
|
|
8
8
|
import type { UserRef } from './user';
|
|
9
9
|
/** A one-time token, given to the application once, to send by e-mail. */
|
|
10
10
|
export interface IssuedToken {
|
|
@@ -62,7 +62,7 @@ export interface SignInCodeApi<U, Answer = SignedIn<U>> {
|
|
|
62
62
|
* or `TOKEN_EXPIRED`; an e-mail the user changed since is `TOKEN_STALE`;
|
|
63
63
|
* an inactive user is `USER_INACTIVE`.
|
|
64
64
|
*/
|
|
65
|
-
confirm(challenge: string, code: string): Promise<Answer>;
|
|
65
|
+
confirm(challenge: string, code: string, options?: SignInOptions): Promise<Answer>;
|
|
66
66
|
};
|
|
67
67
|
}
|
|
68
68
|
/** What a user type with an e-mail answers besides. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email-flows.d.ts","sourceRoot":"","sources":["../../../src/auth/types/email-flows.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAgB,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"email-flows.d.ts","sourceRoot":"","sources":["../../../src/auth/types/email-flows.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAgB,MAAM,WAAW,CAAC;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEtC,0EAA0E;AAC1E,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,iCAAiC;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;CACzB;AAED,oFAAoF;AACpF,MAAM,WAAW,UAAU,CAAC,CAAC;IAC5B,mFAAmF;IACnF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,uCAAuC;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;CACjB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC;IACrD,QAAQ,CAAC,UAAU,EAAE;QACpB;;;;;;;;;;WAUG;QACH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACtD;;;;;;;;;;;;WAYG;QACH,OAAO,CACN,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,CAAC;KACnB,CAAC;CACF;AAED,uDAAuD;AACvD,MAAM,WAAW,cAAc,CAAC,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE;QACrB,yEAAyE;QACzE,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;QAC1C;;;WAGG;QACH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;KACnC,CAAC;CACF;AAED,sEAAsE;AACtE,MAAM,WAAW,gBAAgB,CAAC,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE;QACvB;;;;;WAKG;QACH,OAAO,CACN,KAAK,EAAE,MAAM,GACX,OAAO,CAAC,CAAC,WAAW,GAAG;YAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;SAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACxD;;;;;;WAMG;QACH,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;KACrD,CAAC;CACF"}
|
|
@@ -15,7 +15,7 @@ export type { MagicLinkApi } from './magic-link';
|
|
|
15
15
|
export type { PasswordApi } from './password';
|
|
16
16
|
export type { RecoveredSignIn, RecoveryCodesIssued, SecondFactorApi, SecondFactorEnrolment, } from './second-factor';
|
|
17
17
|
export type { Authenticated, HeaderRecord, RequestLike, Session, } from './session';
|
|
18
|
-
export type { SecondFactorRequired, SignedIn, SignInResult, } from './sign-in';
|
|
18
|
+
export type { SecondFactorRequired, SignedIn, SignInOptions, SignInResult, } from './sign-in';
|
|
19
19
|
export type { StepUpApi, StepUpByApp, StepUpByEmail } from './step-up';
|
|
20
20
|
export type { User, UserBase, UserRef, WriteOptions } from './user';
|
|
21
21
|
export type { UserTypeApi } from './user-type';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/auth/types/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,YAAY,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACxC,YAAY,EACX,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,cAAc,GACd,MAAM,eAAe,CAAC;AACvB,YAAY,EACX,OAAO,EACP,OAAO,EACP,kBAAkB,EAClB,OAAO,EACP,MAAM,GACN,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACzD,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,YAAY,EACX,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,qBAAqB,GACrB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACX,aAAa,EACb,YAAY,EACZ,WAAW,EACX,OAAO,GACP,MAAM,WAAW,CAAC;AACnB,YAAY,EACX,oBAAoB,EACpB,QAAQ,EACR,YAAY,GACZ,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACvE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACpE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/auth/types/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,YAAY,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACxC,YAAY,EACX,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,cAAc,GACd,MAAM,eAAe,CAAC;AACvB,YAAY,EACX,OAAO,EACP,OAAO,EACP,kBAAkB,EAClB,OAAO,EACP,MAAM,GACN,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACzD,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,YAAY,EACX,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,qBAAqB,GACrB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACX,aAAa,EACb,YAAY,EACZ,WAAW,EACX,OAAO,GACP,MAAM,WAAW,CAAC;AACnB,YAAY,EACX,oBAAoB,EACpB,QAAQ,EACR,aAAa,EACb,YAAY,GACZ,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACvE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACpE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Part of what `janus()` hands back; `./index` gathers it.
|
|
6
6
|
*/
|
|
7
7
|
import type { IssuedToken } from './email-flows';
|
|
8
|
-
import type { SignedIn } from './sign-in';
|
|
8
|
+
import type { SignedIn, SignInOptions } from './sign-in';
|
|
9
9
|
/**
|
|
10
10
|
* Signing in with a link sent to the user's e-mail, no password needed —
|
|
11
11
|
* a sign-in code with nothing to type.
|
|
@@ -44,7 +44,7 @@ export interface MagicLinkApi<U, Answer = SignedIn<U>> {
|
|
|
44
44
|
* `USER_INACTIVE`. The first call spends the token, whether it signs
|
|
45
45
|
* in or is refused.
|
|
46
46
|
*/
|
|
47
|
-
confirm(token: string): Promise<Answer>;
|
|
47
|
+
confirm(token: string, options?: SignInOptions): Promise<Answer>;
|
|
48
48
|
};
|
|
49
49
|
}
|
|
50
50
|
//# sourceMappingURL=magic-link.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"magic-link.d.ts","sourceRoot":"","sources":["../../../src/auth/types/magic-link.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"magic-link.d.ts","sourceRoot":"","sources":["../../../src/auth/types/magic-link.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAEzD;;;;;;GAMG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,SAAS,EAAE;QACnB;;;;;;;;;;WAUG;QACH,OAAO,CACN,KAAK,EAAE,MAAM,GACX,OAAO,CAAC,CAAC,WAAW,GAAG;YAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;SAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACxD;;;;;;;;;;;;;;WAcG;QACH,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;KACjE,CAAC;CACF"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Part of what `janus()` hands back; `./index` gathers it.
|
|
6
6
|
*/
|
|
7
|
-
import type { SignedIn } from './sign-in';
|
|
7
|
+
import type { SignedIn, SignInOptions } from './sign-in';
|
|
8
8
|
import type { UserRef, WriteOptions } from './user';
|
|
9
9
|
/**
|
|
10
10
|
* What a user type that signs in with a password answers besides.
|
|
@@ -18,10 +18,13 @@ export interface PasswordApi<U, In, Login extends string, Answer = SignedIn<U>>
|
|
|
18
18
|
*
|
|
19
19
|
* Rejects with `USER_INVALID`, `PASSWORD_TOO_SHORT`, `LOGIN_TAKEN`, or
|
|
20
20
|
* `STORE_FAILED`.
|
|
21
|
+
*
|
|
22
|
+
* Given a `device`, mints the user's first device token: the device they
|
|
23
|
+
* signed up on is known from the start, and never reported as new.
|
|
21
24
|
*/
|
|
22
25
|
signUp(input: In & {
|
|
23
26
|
readonly password: string;
|
|
24
|
-
}): Promise<SignedIn<U>>;
|
|
27
|
+
}, options?: SignInOptions): Promise<SignedIn<U>>;
|
|
25
28
|
/**
|
|
26
29
|
* Checks the password and opens a session.
|
|
27
30
|
*
|
|
@@ -44,12 +47,16 @@ export interface PasswordApi<U, In, Login extends string, Answer = SignedIn<U>>
|
|
|
44
47
|
* With a `secondFactor` configured, a user whose factor is active gets no
|
|
45
48
|
* session yet: `{ status: 'secondFactor', challenge }`, for
|
|
46
49
|
* `secondFactor.confirm`. Switch on `status`.
|
|
50
|
+
*
|
|
51
|
+
* Given a `device`, answers `newDevice` and `deviceToken`, and sends
|
|
52
|
+
* `user.newDeviceSignedIn` for a device new to the user. A challenge
|
|
53
|
+
* carries no device: give it again to `secondFactor.confirm`.
|
|
47
54
|
*/
|
|
48
55
|
signIn(input: {
|
|
49
56
|
readonly [K in Login]: string;
|
|
50
57
|
} & {
|
|
51
58
|
readonly password: string;
|
|
52
|
-
}): Promise<Answer>;
|
|
59
|
+
}, options?: SignInOptions): Promise<Answer>;
|
|
53
60
|
/** The user holding this login, normalised as sign-up normalised it, or `null`. */
|
|
54
61
|
findByLogin(login: string): Promise<U | null>;
|
|
55
62
|
/** Sets or replaces the password — an admin's call. `PASSWORD_TOO_SHORT` below the policy. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"password.d.ts","sourceRoot":"","sources":["../../../src/auth/types/password.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAgB,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"password.d.ts","sourceRoot":"","sources":["../../../src/auth/types/password.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAgB,MAAM,WAAW,CAAC;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,WAAW,WAAW,CAC3B,CAAC,EACD,EAAE,EACF,KAAK,SAAS,MAAM,EACpB,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC;IAEpB;;;;;;;;OAQG;IACH,MAAM,CACL,KAAK,EAAE,EAAE,GAAG;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EACzC,OAAO,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAExB;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,MAAM,CACL,KAAK,EAAE;QAAE,QAAQ,EAAE,CAAC,IAAI,KAAK,GAAG,MAAM;KAAE,GAAG;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EACxE,OAAO,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB,mFAAmF;IACnF,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAE9C,8FAA8F;IAC9F,WAAW,CACV,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,YAAY,GACpB,OAAO,CAAC,CAAC,CAAC,CAAC;IAEd;;;;OAIG;IACH,cAAc,CACb,IAAI,EAAE,OAAO,EACb,MAAM,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAC3D,OAAO,CAAC,EAAE,YAAY,GACpB,OAAO,CAAC,CAAC,CAAC,CAAC;CACd"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Part of what `janus()` hands back; `./index` gathers it.
|
|
7
7
|
*/
|
|
8
|
-
import type { SignedIn } from './sign-in';
|
|
8
|
+
import type { SignedIn, SignInOptions } from './sign-in';
|
|
9
9
|
import type { UserRef, WriteOptions } from './user';
|
|
10
10
|
/** What `secondFactor.enroll` answers: show both, keep neither. */
|
|
11
11
|
export interface SecondFactorEnrolment {
|
|
@@ -75,8 +75,11 @@ export interface SecondFactorApi<U> {
|
|
|
75
75
|
* A code is accepted once, so a replay is `CODE_INVALID` too. An unknown,
|
|
76
76
|
* spent or lapsed challenge is `TOKEN_UNKNOWN`, `TOKEN_SPENT` or
|
|
77
77
|
* `TOKEN_EXPIRED`: sign in again.
|
|
78
|
+
*
|
|
79
|
+
* The `device` given to `signIn` is not carried by the challenge: give
|
|
80
|
+
* it here again.
|
|
78
81
|
*/
|
|
79
|
-
confirm(challenge: string, code: string): Promise<SignedIn<U>>;
|
|
82
|
+
confirm(challenge: string, code: string, options?: SignInOptions): Promise<SignedIn<U>>;
|
|
80
83
|
/**
|
|
81
84
|
* Redeems `signIn`'s challenge with a **recovery code** instead of the
|
|
82
85
|
* app's, for a user whose phone is gone, and opens the session. The
|
|
@@ -88,7 +91,7 @@ export interface SecondFactorApi<U> {
|
|
|
88
91
|
* two sign-ins at once opens one session, and the other call is
|
|
89
92
|
* `VERSION_CONFLICT`.
|
|
90
93
|
*/
|
|
91
|
-
recover(challenge: string, code: string): Promise<RecoveredSignIn<U>>;
|
|
94
|
+
recover(challenge: string, code: string, options?: SignInOptions): Promise<RecoveredSignIn<U>>;
|
|
92
95
|
/**
|
|
93
96
|
* How many recovery codes the user still holds — what `recover`
|
|
94
97
|
* answered as `recoveryCodesLeft`, read again for whoever did not see
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"second-factor.d.ts","sourceRoot":"","sources":["../../../src/auth/types/second-factor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"second-factor.d.ts","sourceRoot":"","sources":["../../../src/auth/types/second-factor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEpD,mEAAmE;AACnE,MAAM,WAAW,qBAAqB;IACrC,kFAAkF;IAClF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,mDAAmD;IACnD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAmB,CAAC,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,mEAAmE;IACnE,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C;AAED,qFAAqF;AACrF,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG;IAC9C,oFAAoF;IACpF,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACnC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE;QACtB;;;;WAIG;QACH,MAAM,CACL,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE,YAAY,GACpB,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAClC;;;;;WAKG;QACH,QAAQ,CACP,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,YAAY,GACpB,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC;;;;;;;;;;;WAWG;QACH,uBAAuB,CACtB,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,YAAY,GACpB,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,2GAA2G;QAC3G,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3D;;;;;;;;;;;WAWG;QACH,OAAO,CACN,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACxB;;;;;;;;;;WAUG;QACH,OAAO,CACN,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B;;;;;;;WAOG;QACH,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;KACzD,CAAC;CACF"}
|
|
@@ -16,6 +16,38 @@ export interface SignedIn<U> {
|
|
|
16
16
|
readonly user: U;
|
|
17
17
|
readonly session: Session;
|
|
18
18
|
readonly token: string;
|
|
19
|
+
/**
|
|
20
|
+
* Whether the session was opened from a device the user had not signed in
|
|
21
|
+
* from: the `device` given held no token, or one that did not prove this
|
|
22
|
+
* user signed in there before. Then `user.newDeviceSignedIn` was sent too.
|
|
23
|
+
* **`false` without a `device`**, and always on `signUp`.
|
|
24
|
+
*/
|
|
25
|
+
readonly newDevice: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* The device token for the client to keep — in a long-lived cookie — and
|
|
28
|
+
* to present as `device` at its next sign-in: the one it presented, a
|
|
29
|
+
* fresh one for a new device, or the same device signed again with the
|
|
30
|
+
* first key. **`null` without a `device`**: nothing is minted then.
|
|
31
|
+
*/
|
|
32
|
+
readonly deviceToken: string | null;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* What a sign-in takes besides its credentials: `signUp`, `signIn`,
|
|
36
|
+
* `secondFactor.confirm`, `secondFactor.recover`, `signInCode.confirm` and
|
|
37
|
+
* `magicLink.confirm`.
|
|
38
|
+
*/
|
|
39
|
+
export interface SignInOptions {
|
|
40
|
+
/**
|
|
41
|
+
* The device token the client holds — the `deviceToken` an earlier
|
|
42
|
+
* sign-in answered — or `null` when it holds none yet. Absent, devices
|
|
43
|
+
* are not tracked for this call: `newDevice` is `false`, `deviceToken`
|
|
44
|
+
* `null`, and no event is sent. **Requires `janus({ devices })`.**
|
|
45
|
+
*
|
|
46
|
+
* A sign-in answering a second-factor challenge carries nothing to its
|
|
47
|
+
* confirmation: give the device again to `secondFactor.confirm` or
|
|
48
|
+
* `recover`.
|
|
49
|
+
*/
|
|
50
|
+
readonly device?: string | null;
|
|
19
51
|
}
|
|
20
52
|
/**
|
|
21
53
|
* The password was right, and the user has a second factor: no session yet.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sign-in.d.ts","sourceRoot":"","sources":["../../../src/auth/types/sign-in.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC;;;;GAIG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"sign-in.d.ts","sourceRoot":"","sources":["../../../src/auth/types/sign-in.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC;;;;GAIG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC7B;;;;;;;;;OASG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,0EAA0E;IAC1E,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;CACpB;AAED,oFAAoF;AACpF,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC"}
|
|
@@ -3,10 +3,11 @@
|
|
|
3
3
|
* sign-in finishes.
|
|
4
4
|
*/
|
|
5
5
|
import type { AnyUser } from '../context';
|
|
6
|
+
import type { DeviceHint } from '../devices';
|
|
6
7
|
import type { UserRecord } from '../port/types';
|
|
7
8
|
import type { SignInResult } from '../types';
|
|
8
9
|
/** A user's fields as a flow receives them, before any schema read them. */
|
|
9
10
|
export type Input = Record<string, unknown>;
|
|
10
11
|
/** What a sign-in answers once the user proved who they are: `secondFactorFlows`'s `finish`. */
|
|
11
|
-
export type Finish = (record: UserRecord, where: string) => Promise<SignInResult<AnyUser>>;
|
|
12
|
+
export type Finish = (record: UserRecord, where: string, device: DeviceHint) => Promise<SignInResult<AnyUser>>;
|
|
12
13
|
//# sourceMappingURL=flow-types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow-types.d.ts","sourceRoot":"","sources":["../../../src/auth/users/flow-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,4EAA4E;AAC5E,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE5C,gGAAgG;AAChG,MAAM,MAAM,MAAM,GAAG,CACpB,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"flow-types.d.ts","sourceRoot":"","sources":["../../../src/auth/users/flow-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,4EAA4E;AAC5E,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE5C,gGAAgG;AAChG,MAAM,MAAM,MAAM,GAAG,CACpB,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,UAAU,KACd,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"password-flows.d.ts","sourceRoot":"","sources":["../../../src/auth/users/password-flows.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EACN,KAAK,OAAO,EACZ,KAAK,OAAO,EAMZ,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"password-flows.d.ts","sourceRoot":"","sources":["../../../src/auth/users/password-flows.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EACN,KAAK,OAAO,EACZ,KAAK,OAAO,EAMZ,MAAM,YAAY,CAAC;AAIpB,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG1D,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAIlD;;;GAGG;AACH,wBAAgB,aAAa,CAC5B,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,YAAY,EAClB,EAAE,EAAE,EAAE,EACN,MAAM,EAAE,MAAM,GACZ,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAkD5D"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ResolvedType } from '../config';
|
|
2
2
|
import { type AnyUser, type Context } from '../context';
|
|
3
|
+
import { type DeviceHint } from '../devices';
|
|
3
4
|
import type { SignInResult } from '../types';
|
|
4
5
|
import type { Finish, Input } from './flow-types';
|
|
5
6
|
/**
|
|
@@ -7,5 +8,8 @@ import type { Finish, Input } from './flow-types';
|
|
|
7
8
|
* refusal for an unknown login, no password, a wrong one and a login past
|
|
8
9
|
* its attempts; `USER_INACTIVE` only once the password matched.
|
|
9
10
|
*/
|
|
10
|
-
export declare function signIn(context: Context, type: ResolvedType, finish: Finish, input: Input,
|
|
11
|
+
export declare function signIn(context: Context, type: ResolvedType, finish: Finish, input: Input, call: {
|
|
12
|
+
readonly where: string;
|
|
13
|
+
readonly device: DeviceHint;
|
|
14
|
+
}): Promise<SignInResult<AnyUser>>;
|
|
11
15
|
//# sourceMappingURL=sign-in.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sign-in.d.ts","sourceRoot":"","sources":["../../../src/auth/users/sign-in.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EACN,KAAK,OAAO,EACZ,KAAK,OAAO,EAKZ,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"sign-in.d.ts","sourceRoot":"","sources":["../../../src/auth/users/sign-in.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EACN,KAAK,OAAO,EACZ,KAAK,OAAO,EAKZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,UAAU,EAAmB,MAAM,YAAY,CAAC;AAI9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAElD;;;;GAIG;AACH,wBAAsB,MAAM,CAC3B,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GAC3D,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAmEhC"}
|