@schemavaults/auth-common 0.22.8 → 0.22.11
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/dist/credentials/email_credentials.js +2 -1
- package/dist/credentials/email_credentials.js.map +1 -1
- package/dist/credentials/index.d.ts +1 -0
- package/dist/credentials/index.js +1 -0
- package/dist/credentials/index.js.map +1 -1
- package/dist/credentials/normalize-email.d.ts +15 -0
- package/dist/credentials/normalize-email.js +18 -0
- package/dist/credentials/normalize-email.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/sanitize-next-href.d.ts +15 -0
- package/dist/sanitize-next-href.js +71 -0
- package/dist/sanitize-next-href.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { passwordSchema } from './password_requirements';
|
|
3
|
+
import { normalizedEmailSchema } from './normalize-email';
|
|
3
4
|
export const emailCredentialsSchema = z.object({
|
|
4
|
-
email:
|
|
5
|
+
email: normalizedEmailSchema,
|
|
5
6
|
password: passwordSchema
|
|
6
7
|
}).required({
|
|
7
8
|
email: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email_credentials.js","sourceRoot":"","sources":["../../src/credentials/email_credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"email_credentials.js","sourceRoot":"","sources":["../../src/credentials/email_credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,KAAK,EAAE,qBAAqB;IAC5B,QAAQ,EAAE,cAAc;CACzB,CAAC,CAAC,QAAQ,CAAC;IACV,KAAK,EAAE,IAAI;IACX,QAAQ,EAAE,IAAI;CACf,CAAC,CAAC,MAAM,EAAE,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { passwordSchema } from './password_requirements';
|
|
2
|
+
export { normalizeEmail, normalizedEmailSchema } from './normalize-email';
|
|
2
3
|
export { emailCredentialsSchema, type EmailCredentials } from './email_credentials';
|
|
3
4
|
export { emailRegistrationCredentialsSchema, type EmailRegistrationCredentials } from './register_credentials';
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { passwordSchema } from './password_requirements';
|
|
2
|
+
export { normalizeEmail, normalizedEmailSchema } from './normalize-email';
|
|
2
3
|
export { emailCredentialsSchema } from './email_credentials';
|
|
3
4
|
export { emailRegistrationCredentialsSchema } from './register_credentials';
|
|
4
5
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/credentials/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAyB,MAAM,qBAAqB,CAAC;AACpF,OAAO,EAAE,kCAAkC,EAAqC,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/credentials/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAyB,MAAM,qBAAqB,CAAC;AACpF,OAAO,EAAE,kCAAkC,EAAqC,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Canonical form of an email address for storage and comparison: trimmed
|
|
4
|
+
* and lowercased. RFC 5321 technically allows a case-sensitive local part,
|
|
5
|
+
* but mainstream mail providers treat addresses case-insensitively, and
|
|
6
|
+
* treating case-variants as distinct accounts would let one mailbox
|
|
7
|
+
* register multiple times (e.g. `user@example.com` vs `User@example.com`).
|
|
8
|
+
*/
|
|
9
|
+
export declare function normalizeEmail(email: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* Email schema that normalizes (trims + lowercases) at parse time, so any
|
|
12
|
+
* payload validated with it carries the canonical form of the address.
|
|
13
|
+
*/
|
|
14
|
+
export declare const normalizedEmailSchema: z.ZodString;
|
|
15
|
+
export default normalizeEmail;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Canonical form of an email address for storage and comparison: trimmed
|
|
4
|
+
* and lowercased. RFC 5321 technically allows a case-sensitive local part,
|
|
5
|
+
* but mainstream mail providers treat addresses case-insensitively, and
|
|
6
|
+
* treating case-variants as distinct accounts would let one mailbox
|
|
7
|
+
* register multiple times (e.g. `user@example.com` vs `User@example.com`).
|
|
8
|
+
*/
|
|
9
|
+
export function normalizeEmail(email) {
|
|
10
|
+
return email.trim().toLowerCase();
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Email schema that normalizes (trims + lowercases) at parse time, so any
|
|
14
|
+
* payload validated with it carries the canonical form of the address.
|
|
15
|
+
*/
|
|
16
|
+
export const normalizedEmailSchema = z.string().trim().toLowerCase().email();
|
|
17
|
+
export default normalizeEmail;
|
|
18
|
+
//# sourceMappingURL=normalize-email.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize-email.js","sourceRoot":"","sources":["../../src/credentials/normalize-email.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC;AAE7E,eAAe,cAAc,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -35,6 +35,7 @@ export { authorizeClientApplicationFormType } from "./authorize-client-applicati
|
|
|
35
35
|
export { paginationOptionsSchema, DEFAULT_PAGINATION_PAGE_INDEX, DEFAULT_PAGINATION_PAGE_SIZE, isValidPaginationOptions, } from "./pagination";
|
|
36
36
|
export type { PaginationOptions } from "./pagination";
|
|
37
37
|
export { timingSafeStringEqual } from "./timing-safe-string-equal";
|
|
38
|
+
export { sanitizeNextHref, MAX_NEXT_HREF_LENGTH, } from "./sanitize-next-href";
|
|
38
39
|
export { isOriginInAllowedList } from "./cors";
|
|
39
40
|
export { oauth2StateSchema, OAUTH2_STATE_VSCHAR_REGEX, parseOAuth2State, OAuth2StateValidationError, } from "./oauth2-state-schema";
|
|
40
41
|
export type { OAuth2State } from "./oauth2-state-schema";
|
package/dist/index.js
CHANGED
|
@@ -24,6 +24,7 @@ export { determineRefreshTokenCookieSameSiteValue } from "./determineRefreshToke
|
|
|
24
24
|
export { authorizeClientApplicationFormType } from "./authorize-client-application-form-type";
|
|
25
25
|
export { paginationOptionsSchema, DEFAULT_PAGINATION_PAGE_INDEX, DEFAULT_PAGINATION_PAGE_SIZE, isValidPaginationOptions, } from "./pagination";
|
|
26
26
|
export { timingSafeStringEqual } from "./timing-safe-string-equal";
|
|
27
|
+
export { sanitizeNextHref, MAX_NEXT_HREF_LENGTH, } from "./sanitize-next-href";
|
|
27
28
|
export { isOriginInAllowedList } from "./cors";
|
|
28
29
|
export { oauth2StateSchema, OAUTH2_STATE_VSCHAR_REGEX, parseOAuth2State, OAuth2StateValidationError, } from "./oauth2-state-schema";
|
|
29
30
|
export { createAuthorizationCodePOSTBodySchema, createRefreshTokenPOSTBodySchema, } from "./auth_acquire_tokens_grant_types";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,cAAc,GACf,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EACL,mCAAmC,EACnC,qCAAqC,GACtC,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,cAAc,EAAiB,MAAM,aAAa,CAAC;AAE5D,cAAc,eAAe,CAAC;AAG9B,mBAAmB;AACnB,cAAc,cAAc,CAAC;AAM7B,cAAc,cAAc,CAAC;AAG7B,cAAc,QAAQ,CAAC;AAGvB,cAAc,QAAQ,CAAC;AAGvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,EACL,wBAAwB,EACxB,qCAAqC,EACrC,mCAAmC,EACnC,+BAA+B,EAC/B,wCAAwC,EACxC,wBAAwB,EACxB,uBAAuB,GAOxB,MAAM,uBAAuB,CAAC;AAE/B,cAAc,OAAO,CAAC;AACtB,OAAO,EACL,+BAA+B,EAE/B,6CAA6C,GAE9C,MAAM,yBAAyB,CAAC;AAEjC,cAAc,mCAAmC,CAAC;AAGlD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAE5D,OAAO,EACL,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,yBAAyB,EACzB,4BAA4B,EAC5B,gBAAgB,EAChB,gCAAgC,EAChC,yCAAyC,EACzC,kCAAkC,EAClC,2CAA2C,EAC3C,0BAA0B,EAC1B,8BAA8B,EAC9B,8BAA8B,EAC9B,sBAAsB,EACtB,sBAAsB,EACtB,iCAAiC,EACjC,kCAAkC,EAClC,4BAA4B,EAC5B,+BAA+B,EAC/B,oCAAoC,EACpC,qCAAqC,EACrC,uCAAuC,EACvC,wCAAwC,GACzC,MAAM,iBAAiB,CAAC;AAezB,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,EACL,sBAAsB,EACtB,4BAA4B,GAC7B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,wCAAwC,EAAE,MAAM,4CAA4C,CAAC;AAEtG,OAAO,EAAE,kCAAkC,EAAE,MAAM,0CAA0C,CAAC;AAE9F,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AAE/C,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,gBAAgB,EAChB,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,qCAAqC,EACrC,gCAAgC,GACjC,MAAM,mCAAmC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,cAAc,GACf,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EACL,mCAAmC,EACnC,qCAAqC,GACtC,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,cAAc,EAAiB,MAAM,aAAa,CAAC;AAE5D,cAAc,eAAe,CAAC;AAG9B,mBAAmB;AACnB,cAAc,cAAc,CAAC;AAM7B,cAAc,cAAc,CAAC;AAG7B,cAAc,QAAQ,CAAC;AAGvB,cAAc,QAAQ,CAAC;AAGvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,EACL,wBAAwB,EACxB,qCAAqC,EACrC,mCAAmC,EACnC,+BAA+B,EAC/B,wCAAwC,EACxC,wBAAwB,EACxB,uBAAuB,GAOxB,MAAM,uBAAuB,CAAC;AAE/B,cAAc,OAAO,CAAC;AACtB,OAAO,EACL,+BAA+B,EAE/B,6CAA6C,GAE9C,MAAM,yBAAyB,CAAC;AAEjC,cAAc,mCAAmC,CAAC;AAGlD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAE5D,OAAO,EACL,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,yBAAyB,EACzB,4BAA4B,EAC5B,gBAAgB,EAChB,gCAAgC,EAChC,yCAAyC,EACzC,kCAAkC,EAClC,2CAA2C,EAC3C,0BAA0B,EAC1B,8BAA8B,EAC9B,8BAA8B,EAC9B,sBAAsB,EACtB,sBAAsB,EACtB,iCAAiC,EACjC,kCAAkC,EAClC,4BAA4B,EAC5B,+BAA+B,EAC/B,oCAAoC,EACpC,qCAAqC,EACrC,uCAAuC,EACvC,wCAAwC,GACzC,MAAM,iBAAiB,CAAC;AAezB,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,EACL,sBAAsB,EACtB,4BAA4B,GAC7B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,wCAAwC,EAAE,MAAM,4CAA4C,CAAC;AAEtG,OAAO,EAAE,kCAAkC,EAAE,MAAM,0CAA0C,CAAC;AAE9F,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,EACL,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AAE/C,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,gBAAgB,EAChB,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,qCAAqC,EACrC,gCAAgC,GACjC,MAAM,mCAAmC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Maximum accepted `next_href` length. Generous enough for deep paths
|
|
3
|
+
* with query strings while keeping the value log- and cookie-safe.
|
|
4
|
+
*/
|
|
5
|
+
export declare const MAX_NEXT_HREF_LENGTH: 2048;
|
|
6
|
+
/**
|
|
7
|
+
* @name sanitizeNextHref
|
|
8
|
+
* @description Validate a post-login redirect target from an untrusted
|
|
9
|
+
* source (query param, form field). Returns the normalized same-origin
|
|
10
|
+
* path (`pathname + search + hash`) when the value is a safe internal
|
|
11
|
+
* absolute-path reference, or `null` when it is absent or unsafe.
|
|
12
|
+
* Callers should treat `null` as "use the default destination".
|
|
13
|
+
*/
|
|
14
|
+
export declare function sanitizeNextHref(value: unknown): string | null;
|
|
15
|
+
export default sanitizeNextHref;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// The `next_href` parameter carries the URL a user was trying to reach
|
|
2
|
+
// when an auth route guard bounced them to the login page, so that the
|
|
3
|
+
// post-login redirect can return them to it. Because the value round-trips
|
|
4
|
+
// through a user-controlled query string, it is an open-redirect vector
|
|
5
|
+
// unless it is strictly confined to a same-origin path.
|
|
6
|
+
//
|
|
7
|
+
// This sanitizer accepts only an absolute-path reference (RFC 3986
|
|
8
|
+
// §4.2: begins with "/" but not "//") and returns the normalized
|
|
9
|
+
// `pathname + search + hash`. Everything else — absolute URLs,
|
|
10
|
+
// protocol-relative URLs ("//evil.example"), backslash variants
|
|
11
|
+
// ("/\evil.example", which browsers treat as "//"), control characters,
|
|
12
|
+
// or values a URL parser resolves off-origin — is rejected with `null`
|
|
13
|
+
// so callers can fall back to their default destination.
|
|
14
|
+
/**
|
|
15
|
+
* Maximum accepted `next_href` length. Generous enough for deep paths
|
|
16
|
+
* with query strings while keeping the value log- and cookie-safe.
|
|
17
|
+
*/
|
|
18
|
+
export const MAX_NEXT_HREF_LENGTH = 2048;
|
|
19
|
+
// Sentinel base origin used to resolve the candidate path. If the
|
|
20
|
+
// parsed result escapes this origin, the value was not a plain path.
|
|
21
|
+
const SANITIZE_BASE_ORIGIN = "https://next-href.invalid";
|
|
22
|
+
// eslint-disable-next-line no-control-regex
|
|
23
|
+
const CONTROL_CHARS_REGEX = /[\u0000-\u001f\u007f]/;
|
|
24
|
+
/**
|
|
25
|
+
* @name sanitizeNextHref
|
|
26
|
+
* @description Validate a post-login redirect target from an untrusted
|
|
27
|
+
* source (query param, form field). Returns the normalized same-origin
|
|
28
|
+
* path (`pathname + search + hash`) when the value is a safe internal
|
|
29
|
+
* absolute-path reference, or `null` when it is absent or unsafe.
|
|
30
|
+
* Callers should treat `null` as "use the default destination".
|
|
31
|
+
*/
|
|
32
|
+
export function sanitizeNextHref(value) {
|
|
33
|
+
if (typeof value !== "string") {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
if (value.length === 0 || value.length > MAX_NEXT_HREF_LENGTH) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
// Must be an absolute-path reference: "/..." but never "//..." (a
|
|
40
|
+
// protocol-relative URL) nor "/\..." (browser-normalized to "//").
|
|
41
|
+
if (!value.startsWith("/")) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
if (value.startsWith("//") || value.startsWith("/\\")) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
if (CONTROL_CHARS_REGEX.test(value)) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
let parsed;
|
|
51
|
+
try {
|
|
52
|
+
parsed = new URL(value, SANITIZE_BASE_ORIGIN);
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
// A plain path resolved against the sentinel base must stay on the
|
|
58
|
+
// sentinel origin; anything else smuggled in a scheme or authority.
|
|
59
|
+
if (parsed.origin !== SANITIZE_BASE_ORIGIN) {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
// Defense-in-depth: reject if normalization still yields a
|
|
63
|
+
// protocol-relative shape (e.g. via backslash tricks the guards
|
|
64
|
+
// above didn't anticipate).
|
|
65
|
+
if (parsed.pathname.startsWith("//")) {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
return `${parsed.pathname}${parsed.search}${parsed.hash}`;
|
|
69
|
+
}
|
|
70
|
+
export default sanitizeNextHref;
|
|
71
|
+
//# sourceMappingURL=sanitize-next-href.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize-next-href.js","sourceRoot":"","sources":["../src/sanitize-next-href.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,uEAAuE;AACvE,2EAA2E;AAC3E,wEAAwE;AACxE,wDAAwD;AACxD,EAAE;AACF,mEAAmE;AACnE,iEAAiE;AACjE,+DAA+D;AAC/D,gEAAgE;AAChE,wEAAwE;AACxE,uEAAuE;AACvE,yDAAyD;AAEzD;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAa,CAAC;AAElD,kEAAkE;AAClE,qEAAqE;AACrE,MAAM,oBAAoB,GAAG,2BAAoC,CAAC;AAElE,4CAA4C;AAC5C,MAAM,mBAAmB,GAAW,uBAAuB,CAAC;AAE5D;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,oBAAoB,EAAE,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,kEAAkE;IAClE,mEAAmE;IACnE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mEAAmE;IACnE,oEAAoE;IACpE,IAAI,MAAM,CAAC,MAAM,KAAK,oBAAoB,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,2DAA2D;IAC3D,gEAAgE;IAChE,4BAA4B;IAC5B,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,GAAG,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;AAC5D,CAAC;AAED,eAAe,gBAAgB,CAAC"}
|
package/package.json
CHANGED