@webda/auth 0.0.0-stage → 4.0.0-beta.10
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/LICENSE +166 -0
- package/README.md +59 -2
- package/lib/authentication.service.d.ts +322 -0
- package/lib/authentication.service.d.ts.map +1 -0
- package/lib/authentication.service.js +978 -0
- package/lib/authentication.service.js.map +1 -0
- package/lib/certificate/certificate.service.d.ts +139 -0
- package/lib/certificate/certificate.service.d.ts.map +1 -0
- package/lib/certificate/certificate.service.js +343 -0
- package/lib/certificate/certificate.service.js.map +1 -0
- package/lib/compat/upgrade.d.ts +71 -0
- package/lib/compat/upgrade.d.ts.map +1 -0
- package/lib/compat/upgrade.js +200 -0
- package/lib/compat/upgrade.js.map +1 -0
- package/lib/email/emailpassword.service.d.ts +249 -0
- package/lib/email/emailpassword.service.d.ts.map +1 -0
- package/lib/email/emailpassword.service.js +714 -0
- package/lib/email/emailpassword.service.js.map +1 -0
- package/lib/email/tokens.d.ts +36 -0
- package/lib/email/tokens.d.ts.map +1 -0
- package/lib/email/tokens.js +46 -0
- package/lib/email/tokens.js.map +1 -0
- package/lib/errors.d.ts +53 -0
- package/lib/errors.d.ts.map +1 -0
- package/lib/errors.js +74 -0
- package/lib/errors.js.map +1 -0
- package/lib/index.d.ts +12 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +12 -0
- package/lib/index.js.map +1 -0
- package/lib/mfa/secondfactor.service.d.ts +44 -0
- package/lib/mfa/secondfactor.service.d.ts.map +1 -0
- package/lib/mfa/secondfactor.service.js +38 -0
- package/lib/mfa/secondfactor.service.js.map +1 -0
- package/lib/mfa/totp.service.d.ts +41 -0
- package/lib/mfa/totp.service.d.ts.map +1 -0
- package/lib/mfa/totp.service.js +63 -0
- package/lib/mfa/totp.service.js.map +1 -0
- package/lib/oauth/oauth.service.d.ts +296 -0
- package/lib/oauth/oauth.service.d.ts.map +1 -0
- package/lib/oauth/oauth.service.js +560 -0
- package/lib/oauth/oauth.service.js.map +1 -0
- package/lib/provider.d.ts +53 -0
- package/lib/provider.d.ts.map +1 -0
- package/lib/provider.js +55 -0
- package/lib/provider.js.map +1 -0
- package/lib/test/authtest.d.ts +39 -0
- package/lib/test/authtest.d.ts.map +1 -0
- package/lib/test/authtest.js +62 -0
- package/lib/test/authtest.js.map +1 -0
- package/lib/test/emailtest.d.ts +25 -0
- package/lib/test/emailtest.d.ts.map +1 -0
- package/lib/test/emailtest.js +42 -0
- package/lib/test/emailtest.js.map +1 -0
- package/lib/test/fakeoauth.service.d.ts +45 -0
- package/lib/test/fakeoauth.service.d.ts.map +1 -0
- package/lib/test/fakeoauth.service.js +78 -0
- package/lib/test/fakeoauth.service.js.map +1 -0
- package/lib/test/mfauser.fixture.model.d.ts +11 -0
- package/lib/test/mfauser.fixture.model.d.ts.map +1 -0
- package/lib/test/mfauser.fixture.model.js +44 -0
- package/lib/test/mfauser.fixture.model.js.map +1 -0
- package/lib/test/stubprovider.d.ts +35 -0
- package/lib/test/stubprovider.d.ts.map +1 -0
- package/lib/test/stubprovider.js +46 -0
- package/lib/test/stubprovider.js.map +1 -0
- package/lib/test/v3.d.ts +29 -0
- package/lib/test/v3.d.ts.map +1 -0
- package/lib/test/v3.js +47 -0
- package/lib/test/v3.js.map +1 -0
- package/lib/throttle.d.ts +41 -0
- package/lib/throttle.d.ts.map +1 -0
- package/lib/throttle.js +49 -0
- package/lib/throttle.js.map +1 -0
- package/package.json +69 -3
- package/test/config.json +23 -0
- package/webda.module.json +891 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emailpassword.service.js","sourceRoot":"","sources":["../../src/email/emailpassword.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/** What an emailed link is for */
|
|
2
|
+
export type EmailTokenPurpose = "register" | "verify" | "recover";
|
|
3
|
+
/** Claims of an emailed token */
|
|
4
|
+
export interface EmailTokenClaims {
|
|
5
|
+
purpose: EmailTokenPurpose;
|
|
6
|
+
email: string;
|
|
7
|
+
sub?: string;
|
|
8
|
+
pwdAt?: number;
|
|
9
|
+
jti: string;
|
|
10
|
+
}
|
|
11
|
+
/** Default lifetimes in seconds */
|
|
12
|
+
export declare const EMAIL_TOKEN_TTL: Record<EmailTokenPurpose, number>;
|
|
13
|
+
/**
|
|
14
|
+
* Sign a purpose-scoped emailed token
|
|
15
|
+
* @param purpose - purpose
|
|
16
|
+
* @param claims - email, user and password timestamp
|
|
17
|
+
* @param claims.email - email of the token
|
|
18
|
+
* @param claims.sub - user id
|
|
19
|
+
* @param claims.pwdAt - password change timestamp
|
|
20
|
+
* @param ttl - lifetime in seconds
|
|
21
|
+
* @returns signed token
|
|
22
|
+
*/
|
|
23
|
+
export declare function signEmailToken(purpose: EmailTokenPurpose, claims: {
|
|
24
|
+
email: string;
|
|
25
|
+
sub?: string;
|
|
26
|
+
pwdAt?: number;
|
|
27
|
+
}, ttl?: number): Promise<string>;
|
|
28
|
+
/**
|
|
29
|
+
* Verify an emailed token
|
|
30
|
+
* @param token - token from the link
|
|
31
|
+
* @param purpose - expected purpose
|
|
32
|
+
* @returns claims
|
|
33
|
+
* @throws TokenExpired if expired, TokenInvalid for any other problem
|
|
34
|
+
*/
|
|
35
|
+
export declare function verifyEmailToken(token: string, purpose: EmailTokenPurpose): Promise<EmailTokenClaims>;
|
|
36
|
+
//# sourceMappingURL=tokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/email/tokens.ts"],"names":[],"mappings":"AAIA,kCAAkC;AAClC,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC;AAElE,iCAAiC;AACjC,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAED,mCAAmC;AACnC,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAqD,CAAC;AAGpH;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EACvD,GAAG,GAAE,MAAiC,GACrC,OAAO,CAAC,MAAM,CAAC,CAEjB;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAiB3G"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { getUuid } from "@webda/utils";
|
|
2
|
+
import { useCrypto } from "@webda/core";
|
|
3
|
+
import { TokenExpired, TokenInvalid } from "../errors.js";
|
|
4
|
+
/** Default lifetimes in seconds */
|
|
5
|
+
export const EMAIL_TOKEN_TTL = { register: 86400, verify: 86400, recover: 3600 };
|
|
6
|
+
const AUDIENCE = "webda-email";
|
|
7
|
+
/**
|
|
8
|
+
* Sign a purpose-scoped emailed token
|
|
9
|
+
* @param purpose - purpose
|
|
10
|
+
* @param claims - email, user and password timestamp
|
|
11
|
+
* @param claims.email - email of the token
|
|
12
|
+
* @param claims.sub - user id
|
|
13
|
+
* @param claims.pwdAt - password change timestamp
|
|
14
|
+
* @param ttl - lifetime in seconds
|
|
15
|
+
* @returns signed token
|
|
16
|
+
*/
|
|
17
|
+
export async function signEmailToken(purpose, claims, ttl = EMAIL_TOKEN_TTL[purpose]) {
|
|
18
|
+
return useCrypto().jwtSign({ ...claims, purpose, jti: getUuid("base64") }, { audience: AUDIENCE, expiresIn: ttl });
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Verify an emailed token
|
|
22
|
+
* @param token - token from the link
|
|
23
|
+
* @param purpose - expected purpose
|
|
24
|
+
* @returns claims
|
|
25
|
+
* @throws TokenExpired if expired, TokenInvalid for any other problem
|
|
26
|
+
*/
|
|
27
|
+
export async function verifyEmailToken(token, purpose) {
|
|
28
|
+
if (typeof token !== "string") {
|
|
29
|
+
throw new TokenInvalid();
|
|
30
|
+
}
|
|
31
|
+
let claims;
|
|
32
|
+
try {
|
|
33
|
+
claims = await useCrypto().jwtVerify(token, { audience: AUDIENCE });
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
if (err instanceof Error && err.name === "TokenExpiredError") {
|
|
37
|
+
throw new TokenExpired();
|
|
38
|
+
}
|
|
39
|
+
throw new TokenInvalid();
|
|
40
|
+
}
|
|
41
|
+
if (!claims || typeof claims !== "object" || claims.purpose !== purpose || typeof claims.email !== "string") {
|
|
42
|
+
throw new TokenInvalid();
|
|
43
|
+
}
|
|
44
|
+
return claims;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/email/tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAc1D,mCAAmC;AACnC,MAAM,CAAC,MAAM,eAAe,GAAsC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACpH,MAAM,QAAQ,GAAG,aAAa,CAAC;AAE/B;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAA0B,EAC1B,MAAuD,EACvD,GAAG,GAAW,eAAe,CAAC,OAAO,CAAC;IAEtC,OAAO,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;AACrH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAa,EAAE,OAA0B;IAC9E,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,YAAY,EAAE,CAAC;IAC3B,CAAC;IACD,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;YAC7D,MAAM,IAAI,YAAY,EAAE,CAAC;QAC3B,CAAC;QACD,MAAM,IAAI,YAAY,EAAE,CAAC;IAC3B,CAAC;IACD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5G,MAAM,IAAI,YAAY,EAAE,CAAC;IAC3B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/lib/errors.d.ts
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { WebdaError } from "@webda/core";
|
|
2
|
+
export { InvalidIdent, InvalidMfaCode, MfaAlreadyEnabled, MfaNotEnabled, PasswordPolicyError, Throttled, TokenInvalid } from "@webda/core";
|
|
3
|
+
/** An account already owns this email; log in to link (409) */
|
|
4
|
+
export declare class AccountExists extends WebdaError.HttpError {
|
|
5
|
+
/** @param message - error message */
|
|
6
|
+
constructor(message?: string);
|
|
7
|
+
}
|
|
8
|
+
/** The ident is already linked to another user (409) */
|
|
9
|
+
export declare class IdentLinkedElsewhere extends WebdaError.HttpError {
|
|
10
|
+
/** @param message - error message */
|
|
11
|
+
constructor(message?: string);
|
|
12
|
+
}
|
|
13
|
+
/** A v3 ident upgrades to a key another user already holds; resolve it manually (409) */
|
|
14
|
+
export declare class IdentConflict extends WebdaError.HttpError {
|
|
15
|
+
/** @param message - error message */
|
|
16
|
+
constructor(message?: string);
|
|
17
|
+
}
|
|
18
|
+
/** The last login method cannot be removed (409) */
|
|
19
|
+
export declare class LastLoginMethod extends WebdaError.HttpError {
|
|
20
|
+
/** @param message - error message */
|
|
21
|
+
constructor(message?: string);
|
|
22
|
+
}
|
|
23
|
+
/** Credentials are invalid (403) */
|
|
24
|
+
export declare class InvalidCredentials extends WebdaError.HttpError {
|
|
25
|
+
/** @param message - error message */
|
|
26
|
+
constructor(message?: string);
|
|
27
|
+
}
|
|
28
|
+
/** Registration is disabled (403) */
|
|
29
|
+
export declare class RegistrationDisabled extends WebdaError.HttpError {
|
|
30
|
+
/** @param message - error message */
|
|
31
|
+
constructor(message?: string);
|
|
32
|
+
}
|
|
33
|
+
/** The token has expired (410) */
|
|
34
|
+
export declare class TokenExpired extends WebdaError.HttpError {
|
|
35
|
+
/** @param message - error message */
|
|
36
|
+
constructor(message?: string);
|
|
37
|
+
}
|
|
38
|
+
/** The email domain is not allowed for this provider (403) */
|
|
39
|
+
export declare class EmailDomainNotAllowed extends WebdaError.HttpError {
|
|
40
|
+
/** @param message - error message */
|
|
41
|
+
constructor(message?: string);
|
|
42
|
+
}
|
|
43
|
+
/** The request body must be JSON (415) */
|
|
44
|
+
export declare class UnsupportedMediaType extends WebdaError.HttpError {
|
|
45
|
+
/** @param message - error message */
|
|
46
|
+
constructor(message?: string);
|
|
47
|
+
}
|
|
48
|
+
/** Session is not awaiting second-factor verification (401) */
|
|
49
|
+
export declare class MfaNotPending extends WebdaError.HttpError {
|
|
50
|
+
/** @param message - error message */
|
|
51
|
+
constructor(message?: string);
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EACL,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACnB,SAAS,EACT,YAAY,EACb,MAAM,aAAa,CAAC;AAErB,+DAA+D;AAC/D,qBAAa,aAAc,SAAQ,UAAU,CAAC,SAAS;IACrD,qCAAqC;IACrC,YAAY,OAAO,GAAE,MAAyC,EAE7D;CACF;AAED,wDAAwD;AACxD,qBAAa,oBAAqB,SAAQ,UAAU,CAAC,SAAS;IAC5D,qCAAqC;IACrC,YAAY,OAAO,GAAE,MAA0C,EAE9D;CACF;AAED,yFAAyF;AACzF,qBAAa,aAAc,SAAQ,UAAU,CAAC,SAAS;IACrD,qCAAqC;IACrC,YAAY,OAAO,GAAE,MAA6D,EAEjF;CACF;AAED,oDAAoD;AACpD,qBAAa,eAAgB,SAAQ,UAAU,CAAC,SAAS;IACvD,qCAAqC;IACrC,YAAY,OAAO,GAAE,MAA8C,EAElE;CACF;AAED,oCAAoC;AACpC,qBAAa,kBAAmB,SAAQ,UAAU,CAAC,SAAS;IAC1D,qCAAqC;IACrC,YAAY,OAAO,GAAE,MAA8B,EAElD;CACF;AAED,qCAAqC;AACrC,qBAAa,oBAAqB,SAAQ,UAAU,CAAC,SAAS;IAC5D,qCAAqC;IACrC,YAAY,OAAO,GAAE,MAAmC,EAEvD;CACF;AAED,kCAAkC;AAClC,qBAAa,YAAa,SAAQ,UAAU,CAAC,SAAS;IACpD,qCAAqC;IACrC,YAAY,OAAO,GAAE,MAAwB,EAE5C;CACF;AAED,8DAA8D;AAC9D,qBAAa,qBAAsB,SAAQ,UAAU,CAAC,SAAS;IAC7D,qCAAqC;IACrC,YAAY,OAAO,GAAE,MAAmC,EAEvD;CACF;AAED,0CAA0C;AAC1C,qBAAa,oBAAqB,SAAQ,UAAU,CAAC,SAAS;IAC5D,qCAAqC;IACrC,YAAY,OAAO,GAAE,MAAgD,EAEpE;CACF;AAED,+DAA+D;AAC/D,qBAAa,aAAc,SAAQ,UAAU,CAAC,SAAS;IACrD,qCAAqC;IACrC,YAAY,OAAO,GAAE,MAA0C,EAE9D;CACF"}
|
package/lib/errors.js
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { WebdaError } from "@webda/core";
|
|
2
|
+
// MFA errors and Throttled live in core: the MFA behavior raises them on any model
|
|
3
|
+
export { InvalidIdent, InvalidMfaCode, MfaAlreadyEnabled, MfaNotEnabled, PasswordPolicyError, Throttled, TokenInvalid } from "@webda/core";
|
|
4
|
+
/** An account already owns this email; log in to link (409) */
|
|
5
|
+
export class AccountExists extends WebdaError.HttpError {
|
|
6
|
+
/** @param message - error message */
|
|
7
|
+
constructor(message = "Account exists, log in to link") {
|
|
8
|
+
super(message, 409);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
/** The ident is already linked to another user (409) */
|
|
12
|
+
export class IdentLinkedElsewhere extends WebdaError.HttpError {
|
|
13
|
+
/** @param message - error message */
|
|
14
|
+
constructor(message = "Ident is linked to another user") {
|
|
15
|
+
super(message, 409);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/** A v3 ident upgrades to a key another user already holds; resolve it manually (409) */
|
|
19
|
+
export class IdentConflict extends WebdaError.HttpError {
|
|
20
|
+
/** @param message - error message */
|
|
21
|
+
constructor(message = "Upgraded ident key already belongs to another user") {
|
|
22
|
+
super(message, 409);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/** The last login method cannot be removed (409) */
|
|
26
|
+
export class LastLoginMethod extends WebdaError.HttpError {
|
|
27
|
+
/** @param message - error message */
|
|
28
|
+
constructor(message = "Cannot remove the last login method") {
|
|
29
|
+
super(message, 409);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/** Credentials are invalid (403) */
|
|
33
|
+
export class InvalidCredentials extends WebdaError.HttpError {
|
|
34
|
+
/** @param message - error message */
|
|
35
|
+
constructor(message = "Invalid credentials") {
|
|
36
|
+
super(message, 403);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/** Registration is disabled (403) */
|
|
40
|
+
export class RegistrationDisabled extends WebdaError.HttpError {
|
|
41
|
+
/** @param message - error message */
|
|
42
|
+
constructor(message = "Registration is disabled") {
|
|
43
|
+
super(message, 403);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/** The token has expired (410) */
|
|
47
|
+
export class TokenExpired extends WebdaError.HttpError {
|
|
48
|
+
/** @param message - error message */
|
|
49
|
+
constructor(message = "Expired token") {
|
|
50
|
+
super(message, 410);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/** The email domain is not allowed for this provider (403) */
|
|
54
|
+
export class EmailDomainNotAllowed extends WebdaError.HttpError {
|
|
55
|
+
/** @param message - error message */
|
|
56
|
+
constructor(message = "Email domain not allowed") {
|
|
57
|
+
super(message, 403);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/** The request body must be JSON (415) */
|
|
61
|
+
export class UnsupportedMediaType extends WebdaError.HttpError {
|
|
62
|
+
/** @param message - error message */
|
|
63
|
+
constructor(message = "Content-Type must be application/json") {
|
|
64
|
+
super(message, 415);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/** Session is not awaiting second-factor verification (401) */
|
|
68
|
+
export class MfaNotPending extends WebdaError.HttpError {
|
|
69
|
+
/** @param message - error message */
|
|
70
|
+
constructor(message = "MFA verification is not pending") {
|
|
71
|
+
super(message, 401);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,mFAAmF;AACnF,OAAO,EACL,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACnB,SAAS,EACT,YAAY,EACb,MAAM,aAAa,CAAC;AAErB,+DAA+D;AAC/D,MAAM,OAAO,aAAc,SAAQ,UAAU,CAAC,SAAS;IACrD,qCAAqC;IACrC,YAAY,OAAO,GAAW,gCAAgC;QAC5D,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACtB,CAAC;CACF;AAED,wDAAwD;AACxD,MAAM,OAAO,oBAAqB,SAAQ,UAAU,CAAC,SAAS;IAC5D,qCAAqC;IACrC,YAAY,OAAO,GAAW,iCAAiC;QAC7D,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACtB,CAAC;CACF;AAED,yFAAyF;AACzF,MAAM,OAAO,aAAc,SAAQ,UAAU,CAAC,SAAS;IACrD,qCAAqC;IACrC,YAAY,OAAO,GAAW,oDAAoD;QAChF,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACtB,CAAC;CACF;AAED,oDAAoD;AACpD,MAAM,OAAO,eAAgB,SAAQ,UAAU,CAAC,SAAS;IACvD,qCAAqC;IACrC,YAAY,OAAO,GAAW,qCAAqC;QACjE,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACtB,CAAC;CACF;AAED,oCAAoC;AACpC,MAAM,OAAO,kBAAmB,SAAQ,UAAU,CAAC,SAAS;IAC1D,qCAAqC;IACrC,YAAY,OAAO,GAAW,qBAAqB;QACjD,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACtB,CAAC;CACF;AAED,qCAAqC;AACrC,MAAM,OAAO,oBAAqB,SAAQ,UAAU,CAAC,SAAS;IAC5D,qCAAqC;IACrC,YAAY,OAAO,GAAW,0BAA0B;QACtD,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACtB,CAAC;CACF;AAED,kCAAkC;AAClC,MAAM,OAAO,YAAa,SAAQ,UAAU,CAAC,SAAS;IACpD,qCAAqC;IACrC,YAAY,OAAO,GAAW,eAAe;QAC3C,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACtB,CAAC;CACF;AAED,8DAA8D;AAC9D,MAAM,OAAO,qBAAsB,SAAQ,UAAU,CAAC,SAAS;IAC7D,qCAAqC;IACrC,YAAY,OAAO,GAAW,0BAA0B;QACtD,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACtB,CAAC;CACF;AAED,0CAA0C;AAC1C,MAAM,OAAO,oBAAqB,SAAQ,UAAU,CAAC,SAAS;IAC5D,qCAAqC;IACrC,YAAY,OAAO,GAAW,uCAAuC;QACnE,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACtB,CAAC;CACF;AAED,+DAA+D;AAC/D,MAAM,OAAO,aAAc,SAAQ,UAAU,CAAC,SAAS;IACrD,qCAAqC;IACrC,YAAY,OAAO,GAAW,iCAAiC;QAC7D,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACtB,CAAC;CACF"}
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export * from "./errors.js";
|
|
2
|
+
export * from "./throttle.js";
|
|
3
|
+
export * from "./provider.js";
|
|
4
|
+
export * from "./authentication.service.js";
|
|
5
|
+
export * from "./email/tokens.js";
|
|
6
|
+
export * from "./email/emailpassword.service.js";
|
|
7
|
+
export * from "./oauth/oauth.service.js";
|
|
8
|
+
export * from "./certificate/certificate.service.js";
|
|
9
|
+
export * from "./compat/upgrade.js";
|
|
10
|
+
export * from "./mfa/secondfactor.service.js";
|
|
11
|
+
export * from "./mfa/totp.service.js";
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,kCAAkC,CAAC;AACjD,cAAc,0BAA0B,CAAC;AACzC,cAAc,sCAAsC,CAAC;AACrD,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC"}
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export * from "./errors.js";
|
|
2
|
+
export * from "./throttle.js";
|
|
3
|
+
export * from "./provider.js";
|
|
4
|
+
export * from "./authentication.service.js";
|
|
5
|
+
export * from "./email/tokens.js";
|
|
6
|
+
export * from "./email/emailpassword.service.js";
|
|
7
|
+
export * from "./oauth/oauth.service.js";
|
|
8
|
+
export * from "./certificate/certificate.service.js";
|
|
9
|
+
export * from "./compat/upgrade.js";
|
|
10
|
+
export * from "./mfa/secondfactor.service.js";
|
|
11
|
+
export * from "./mfa/totp.service.js";
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,kCAAkC,CAAC;AACjD,cAAc,0BAA0B,CAAC;AACzC,cAAc,sCAAsC,CAAC;AACrD,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type MFA, type SecondFactorProvider, Service, ServiceParameters, type ThrottleParameters } from "@webda/core";
|
|
2
|
+
/** Parameters common to all second factor services */
|
|
3
|
+
export declare class SecondFactorParameters extends ServiceParameters {
|
|
4
|
+
/** Throttle config for failed attempts */
|
|
5
|
+
throttle: ThrottleParameters;
|
|
6
|
+
/** Number of recovery codes generated (default 10, 0 disables recovery codes) */
|
|
7
|
+
recoveryCodes: number;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Base provider of a second factor method (TOTP, SMS, etc.). Public operations belong to model MFA attributes.
|
|
11
|
+
*/
|
|
12
|
+
export declare abstract class SecondFactorService<P extends SecondFactorParameters = SecondFactorParameters> extends Service<P> implements SecondFactorProvider {
|
|
13
|
+
/** amr value and key in MFA.methods(), e.g. "totp", "sms" */
|
|
14
|
+
abstract readonly method: string;
|
|
15
|
+
/**
|
|
16
|
+
* Store the pending factor data in mfa.factors[method]
|
|
17
|
+
* @param mfa - the MFA behavior
|
|
18
|
+
* @param owner - the user or object holding it
|
|
19
|
+
* @param input - factor-specific enrollment input
|
|
20
|
+
* @returns the enrollment data for the client
|
|
21
|
+
*/
|
|
22
|
+
abstract startEnrollment(mfa: MFA, owner: any, input?: any): Promise<any>;
|
|
23
|
+
/**
|
|
24
|
+
* Check a code against the factor data (TOTP: RFC 6238; SMS: hashed one-time code)
|
|
25
|
+
* @param mfa - the MFA behavior
|
|
26
|
+
* @param code - submitted code
|
|
27
|
+
* @returns true when the code is valid
|
|
28
|
+
*/
|
|
29
|
+
abstract check(mfa: MFA, code: string): Promise<boolean>;
|
|
30
|
+
/**
|
|
31
|
+
* @returns the throttle of the attempts checked with this method
|
|
32
|
+
*/
|
|
33
|
+
get throttle(): ThrottleParameters;
|
|
34
|
+
/**
|
|
35
|
+
* @returns the recovery codes issued with the first enabled factor
|
|
36
|
+
*/
|
|
37
|
+
get recoveryCodeCount(): number;
|
|
38
|
+
/**
|
|
39
|
+
* Make the method available to the MFA behavior of every model
|
|
40
|
+
* @returns this
|
|
41
|
+
*/
|
|
42
|
+
resolve(): this;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=secondfactor.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secondfactor.service.d.ts","sourceRoot":"","sources":["../../src/mfa/secondfactor.service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,GAAG,EAER,KAAK,oBAAoB,EACzB,OAAO,EACP,iBAAiB,EACjB,KAAK,kBAAkB,EACxB,MAAM,aAAa,CAAC;AAErB,sDAAsD;AACtD,qBAAa,sBAAuB,SAAQ,iBAAiB;IAC3D,0CAA0C;IAC1C,QAAQ,EAAE,kBAAkB,CAA6C;IACzE,iFAAiF;IACjF,aAAa,EAAE,MAAM,CAAM;CAC5B;AAED;;GAEG;AACH,8BAAsB,mBAAmB,CAAC,CAAC,SAAS,sBAAsB,GAAG,sBAAsB,CACjG,SAAQ,OAAO,CAAC,CAAC,CACjB,YAAW,oBAAoB;IAE/B,6DAA6D;IAC7D,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAEjC;;;;;;OAMG;IACH,QAAQ,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAE1E;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEzD;;OAEG;IACH,IAAI,QAAQ,IAAI,kBAAkB,CAEjC;IAED;;OAEG;IACH,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED;;;OAGG;IACM,OAAO,IAAI,IAAI,CAIvB;CACF"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { registerSecondFactor, Service, ServiceParameters } from "@webda/core";
|
|
2
|
+
/** Parameters common to all second factor services */
|
|
3
|
+
export class SecondFactorParameters extends ServiceParameters {
|
|
4
|
+
constructor() {
|
|
5
|
+
super(...arguments);
|
|
6
|
+
/** Throttle config for failed attempts */
|
|
7
|
+
this.throttle = { failedBeforeDelay: 5, lockout: 900000 };
|
|
8
|
+
/** Number of recovery codes generated (default 10, 0 disables recovery codes) */
|
|
9
|
+
this.recoveryCodes = 10;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Base provider of a second factor method (TOTP, SMS, etc.). Public operations belong to model MFA attributes.
|
|
14
|
+
*/
|
|
15
|
+
export class SecondFactorService extends Service {
|
|
16
|
+
/**
|
|
17
|
+
* @returns the throttle of the attempts checked with this method
|
|
18
|
+
*/
|
|
19
|
+
get throttle() {
|
|
20
|
+
return this.parameters.throttle;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* @returns the recovery codes issued with the first enabled factor
|
|
24
|
+
*/
|
|
25
|
+
get recoveryCodeCount() {
|
|
26
|
+
return this.parameters.recoveryCodes;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Make the method available to the MFA behavior of every model
|
|
30
|
+
* @returns this
|
|
31
|
+
*/
|
|
32
|
+
resolve() {
|
|
33
|
+
super.resolve();
|
|
34
|
+
registerSecondFactor(this);
|
|
35
|
+
return this;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=secondfactor.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secondfactor.service.js","sourceRoot":"","sources":["../../src/mfa/secondfactor.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,oBAAoB,EAEpB,OAAO,EACP,iBAAiB,EAElB,MAAM,aAAa,CAAC;AAErB,sDAAsD;AACtD,MAAM,OAAO,sBAAuB,SAAQ,iBAAiB;IAA7D;;QACE,0CAA0C;QAC1C,aAAQ,GAAuB,EAAE,iBAAiB,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QACzE,iFAAiF;QACjF,kBAAa,GAAW,EAAE,CAAC;IAC7B,CAAC;CAAA;AAED;;GAEG;AACH,MAAM,OAAgB,mBACpB,SAAQ,OAAU;IAuBlB;;OAEG;IACH,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,IAAI,iBAAiB;QACnB,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;IACvC,CAAC;IAED;;;OAGG;IACM,OAAO;QACd,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type MFA } from "@webda/core";
|
|
2
|
+
import { SecondFactorParameters, SecondFactorService } from "./secondfactor.service.js";
|
|
3
|
+
/** Parameters for TOTP service */
|
|
4
|
+
export declare class TotpParameters extends SecondFactorParameters {
|
|
5
|
+
/** Application name / issuer shown in authenticator apps (defaults to application name) */
|
|
6
|
+
issuer?: string;
|
|
7
|
+
/** HMAC hash algorithm (default "sha1") */
|
|
8
|
+
algorithm: "sha1" | "sha256" | "sha512";
|
|
9
|
+
/** Number of digits (default 6) */
|
|
10
|
+
digits: 6 | 8;
|
|
11
|
+
/** Time step in seconds (default 30) */
|
|
12
|
+
period: number;
|
|
13
|
+
/** Accepted drift window in time steps (default 1) */
|
|
14
|
+
window: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Time-based One-Time Password (TOTP) second-factor authentication service
|
|
18
|
+
* @WebdaModda TotpService
|
|
19
|
+
*/
|
|
20
|
+
export declare class TotpService extends SecondFactorService<TotpParameters> {
|
|
21
|
+
static Parameters: typeof TotpParameters;
|
|
22
|
+
readonly method = "totp";
|
|
23
|
+
/**
|
|
24
|
+
* Start TOTP enrollment: generate secret and otpauth URI
|
|
25
|
+
* @param mfa - the MFA behavior
|
|
26
|
+
* @param owner - the user or object holding it, labelled by its email, display name or primary key
|
|
27
|
+
* @returns secret and QR-ready otpauth URI
|
|
28
|
+
*/
|
|
29
|
+
startEnrollment(mfa: MFA, owner: any): Promise<{
|
|
30
|
+
secret: string;
|
|
31
|
+
uri: string;
|
|
32
|
+
}>;
|
|
33
|
+
/**
|
|
34
|
+
* Check a submitted code against the TOTP secret, confirmed or pending
|
|
35
|
+
* @param mfa - the MFA behavior
|
|
36
|
+
* @param code - code submitted by user
|
|
37
|
+
* @returns true if valid
|
|
38
|
+
*/
|
|
39
|
+
check(mfa: MFA, code: string): Promise<boolean>;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=totp.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"totp.service.d.ts","sourceRoot":"","sources":["../../src/mfa/totp.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,GAAG,EAA2B,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAExF,kCAAkC;AAClC,qBAAa,cAAe,SAAQ,sBAAsB;IACxD,2FAA2F;IAC3F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAU;IACjD,mCAAmC;IACnC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAK;IAClB,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAM;IACpB,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAK;CACpB;AAED;;;GAGG;AACH,qBAAa,WAAY,SAAQ,mBAAmB,CAAC,cAAc,CAAC;IAClE,MAAM,CAAC,UAAU,wBAAkB;IAEnC,QAAQ,CAAC,MAAM,UAAU;IAEzB;;;;;OAKG;IACG,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAmBpF;IAED;;;;;OAKG;IACG,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEpD;CACF"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { generateTotpSecret, totpUri, useApplication } from "@webda/core";
|
|
2
|
+
import { SecondFactorParameters, SecondFactorService } from "./secondfactor.service.js";
|
|
3
|
+
/** Parameters for TOTP service */
|
|
4
|
+
export class TotpParameters extends SecondFactorParameters {
|
|
5
|
+
constructor() {
|
|
6
|
+
super(...arguments);
|
|
7
|
+
/** HMAC hash algorithm (default "sha1") */
|
|
8
|
+
this.algorithm = "sha1";
|
|
9
|
+
/** Number of digits (default 6) */
|
|
10
|
+
this.digits = 6;
|
|
11
|
+
/** Time step in seconds (default 30) */
|
|
12
|
+
this.period = 30;
|
|
13
|
+
/** Accepted drift window in time steps (default 1) */
|
|
14
|
+
this.window = 1;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Time-based One-Time Password (TOTP) second-factor authentication service
|
|
19
|
+
* @WebdaModda TotpService
|
|
20
|
+
*/
|
|
21
|
+
export class TotpService extends SecondFactorService {
|
|
22
|
+
constructor() {
|
|
23
|
+
super(...arguments);
|
|
24
|
+
this.method = "totp";
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Start TOTP enrollment: generate secret and otpauth URI
|
|
28
|
+
* @param mfa - the MFA behavior
|
|
29
|
+
* @param owner - the user or object holding it, labelled by its email, display name or primary key
|
|
30
|
+
* @returns secret and QR-ready otpauth URI
|
|
31
|
+
*/
|
|
32
|
+
async startEnrollment(mfa, owner) {
|
|
33
|
+
const secret = generateTotpSecret(20);
|
|
34
|
+
const issuer = this.parameters.issuer ?? useApplication()?.getPackageDescription()?.name ?? "Webda";
|
|
35
|
+
const account = owner.getEmail?.() ?? owner.getDisplayName?.() ?? owner.getUUID();
|
|
36
|
+
const uri = totpUri({
|
|
37
|
+
secret,
|
|
38
|
+
issuer,
|
|
39
|
+
account,
|
|
40
|
+
algorithm: this.parameters.algorithm,
|
|
41
|
+
digits: this.parameters.digits,
|
|
42
|
+
period: this.parameters.period
|
|
43
|
+
});
|
|
44
|
+
await mfa.totp.set({
|
|
45
|
+
secret,
|
|
46
|
+
algorithm: this.parameters.algorithm,
|
|
47
|
+
digits: this.parameters.digits,
|
|
48
|
+
period: this.parameters.period
|
|
49
|
+
});
|
|
50
|
+
return { secret, uri };
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Check a submitted code against the TOTP secret, confirmed or pending
|
|
54
|
+
* @param mfa - the MFA behavior
|
|
55
|
+
* @param code - code submitted by user
|
|
56
|
+
* @returns true if valid
|
|
57
|
+
*/
|
|
58
|
+
async check(mfa, code) {
|
|
59
|
+
return mfa.verifyTotp(code, this.parameters.window);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
TotpService.Parameters = TotpParameters;
|
|
63
|
+
//# sourceMappingURL=totp.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"totp.service.js","sourceRoot":"","sources":["../../src/mfa/totp.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAY,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAExF,kCAAkC;AAClC,MAAM,OAAO,cAAe,SAAQ,sBAAsB;IAA1D;;QAGE,2CAA2C;QAC3C,cAAS,GAAiC,MAAM,CAAC;QACjD,mCAAmC;QACnC,WAAM,GAAU,CAAC,CAAC;QAClB,wCAAwC;QACxC,WAAM,GAAW,EAAE,CAAC;QACpB,sDAAsD;QACtD,WAAM,GAAW,CAAC,CAAC;IACrB,CAAC;CAAA;AAED;;;GAGG;AACH,MAAM,OAAO,WAAY,SAAQ,mBAAmC;IAApE;;QAGW,WAAM,GAAG,MAAM,CAAC;IAsC3B,CAAC;IApCC;;;;;OAKG;IACH,KAAK,CAAC,eAAe,CAAC,GAAQ,EAAE,KAAU;QACxC,MAAM,MAAM,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,cAAc,EAAE,EAAE,qBAAqB,EAAE,EAAE,IAAI,IAAI,OAAO,CAAC;QACpG,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAE,EAAE,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClF,MAAM,GAAG,GAAG,OAAO,CAAC;YAClB,MAAM;YACN,MAAM;YACN,OAAO;YACP,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS;YACpC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;YAC9B,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;SAC/B,CAAC,CAAC;QACH,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;YACjB,MAAM;YACN,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS;YACpC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;YAC9B,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;SAC/B,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IACzB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,KAAK,CAAC,GAAQ,EAAE,IAAY;QAChC,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC;CACF;AAxCQ,sBAAU,GAAG,cAAc,AAAjB,CAAkB"}
|