@atcute/oauth-types 0.1.1 → 1.0.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 +6 -5
- package/dist/build-client-metadata.d.ts +5 -320
- package/dist/build-client-metadata.d.ts.map +1 -1
- package/dist/build-client-metadata.js +3 -2
- package/dist/build-client-metadata.js.map +1 -1
- package/dist/index.d.ts +31 -31
- package/dist/schemas/atcute-client-shared.d.ts +8 -0
- package/dist/schemas/atcute-client-shared.d.ts.map +1 -0
- package/dist/schemas/atcute-client-shared.js +15 -0
- package/dist/schemas/atcute-client-shared.js.map +1 -0
- package/dist/schemas/atcute-confidential-client-metadata.d.ts +228 -4
- package/dist/schemas/atcute-confidential-client-metadata.d.ts.map +1 -1
- package/dist/schemas/atcute-confidential-client-metadata.js +48 -88
- package/dist/schemas/atcute-confidential-client-metadata.js.map +1 -1
- package/dist/schemas/atcute-public-client-metadata.d.ts +75 -35
- package/dist/schemas/atcute-public-client-metadata.d.ts.map +1 -1
- package/dist/schemas/atcute-public-client-metadata.js +25 -110
- package/dist/schemas/atcute-public-client-metadata.js.map +1 -1
- package/dist/schemas/atproto-authorization-server-metadata.d.ts +786 -4
- package/dist/schemas/atproto-authorization-server-metadata.d.ts.map +1 -1
- package/dist/schemas/atproto-authorization-server-metadata.js +2 -18
- package/dist/schemas/atproto-authorization-server-metadata.js.map +1 -1
- package/dist/schemas/atproto-oauth-scope.d.ts +3 -3
- package/dist/schemas/atproto-oauth-scope.d.ts.map +1 -1
- package/dist/schemas/atproto-oauth-scope.js +2 -2
- package/dist/schemas/atproto-oauth-scope.js.map +1 -1
- package/dist/schemas/atproto-oauth-token-response.d.ts +17 -17
- package/dist/schemas/atproto-oauth-token-response.d.ts.map +1 -1
- package/dist/schemas/atproto-oauth-token-response.js +6 -6
- package/dist/schemas/atproto-oauth-token-response.js.map +1 -1
- package/dist/schemas/atproto-protected-resource-metadata.d.ts +100 -4
- package/dist/schemas/atproto-protected-resource-metadata.d.ts.map +1 -1
- package/dist/schemas/atproto-protected-resource-metadata.js +2 -11
- package/dist/schemas/atproto-protected-resource-metadata.js.map +1 -1
- package/dist/schemas/jwk.d.ts +4289 -42
- package/dist/schemas/jwk.d.ts.map +1 -1
- package/dist/schemas/jwk.js +58 -91
- package/dist/schemas/jwk.js.map +1 -1
- package/dist/schemas/jwks.d.ts +87 -42
- package/dist/schemas/jwks.d.ts.map +1 -1
- package/dist/schemas/jwks.js +13 -29
- package/dist/schemas/jwks.js.map +1 -1
- package/dist/schemas/oauth-authorization-details.d.ts +18 -18
- package/dist/schemas/oauth-authorization-details.d.ts.map +1 -1
- package/dist/schemas/oauth-authorization-details.js +7 -7
- package/dist/schemas/oauth-authorization-details.js.map +1 -1
- package/dist/schemas/oauth-authorization-server-metadata.d.ts +462 -48
- package/dist/schemas/oauth-authorization-server-metadata.d.ts.map +1 -1
- package/dist/schemas/oauth-authorization-server-metadata.js +46 -65
- package/dist/schemas/oauth-authorization-server-metadata.js.map +1 -1
- package/dist/schemas/oauth-client-id-discoverable.d.ts +2 -2
- package/dist/schemas/oauth-client-id-discoverable.d.ts.map +1 -1
- package/dist/schemas/oauth-client-id-discoverable.js +20 -22
- package/dist/schemas/oauth-client-id-discoverable.js.map +1 -1
- package/dist/schemas/oauth-client-id.d.ts +3 -3
- package/dist/schemas/oauth-client-id.d.ts.map +1 -1
- package/dist/schemas/oauth-client-id.js +2 -2
- package/dist/schemas/oauth-client-id.js.map +1 -1
- package/dist/schemas/oauth-client-metadata.d.ts +73 -51
- package/dist/schemas/oauth-client-metadata.d.ts.map +1 -1
- package/dist/schemas/oauth-client-metadata.js +33 -40
- package/dist/schemas/oauth-client-metadata.js.map +1 -1
- package/dist/schemas/oauth-code-challenge-method.d.ts +3 -3
- package/dist/schemas/oauth-code-challenge-method.d.ts.map +1 -1
- package/dist/schemas/oauth-code-challenge-method.js +2 -2
- package/dist/schemas/oauth-code-challenge-method.js.map +1 -1
- package/dist/schemas/oauth-endpoint-auth-method.d.ts +3 -3
- package/dist/schemas/oauth-endpoint-auth-method.d.ts.map +1 -1
- package/dist/schemas/oauth-endpoint-auth-method.js +10 -2
- package/dist/schemas/oauth-endpoint-auth-method.js.map +1 -1
- package/dist/schemas/oauth-grant-type.d.ts +3 -3
- package/dist/schemas/oauth-grant-type.d.ts.map +1 -1
- package/dist/schemas/oauth-grant-type.js +10 -3
- package/dist/schemas/oauth-grant-type.js.map +1 -1
- package/dist/schemas/oauth-issuer-identifier.d.ts +3 -3
- package/dist/schemas/oauth-issuer-identifier.d.ts.map +1 -1
- package/dist/schemas/oauth-issuer-identifier.js +16 -9
- package/dist/schemas/oauth-issuer-identifier.js.map +1 -1
- package/dist/schemas/oauth-par-response.d.ts +5 -5
- package/dist/schemas/oauth-par-response.d.ts.map +1 -1
- package/dist/schemas/oauth-par-response.js +3 -3
- package/dist/schemas/oauth-par-response.js.map +1 -1
- package/dist/schemas/oauth-prompt.d.ts +3 -3
- package/dist/schemas/oauth-prompt.d.ts.map +1 -1
- package/dist/schemas/oauth-prompt.js +2 -2
- package/dist/schemas/oauth-prompt.js.map +1 -1
- package/dist/schemas/oauth-protected-resource-metadata.d.ts +88 -16
- package/dist/schemas/oauth-protected-resource-metadata.d.ts.map +1 -1
- package/dist/schemas/oauth-protected-resource-metadata.js +14 -26
- package/dist/schemas/oauth-protected-resource-metadata.js.map +1 -1
- package/dist/schemas/oauth-redirect-uri.d.ts +5 -5
- package/dist/schemas/oauth-redirect-uri.d.ts.map +1 -1
- package/dist/schemas/oauth-redirect-uri.js +3 -16
- package/dist/schemas/oauth-redirect-uri.js.map +1 -1
- package/dist/schemas/oauth-response-mode.d.ts +3 -3
- package/dist/schemas/oauth-response-mode.d.ts.map +1 -1
- package/dist/schemas/oauth-response-mode.js +2 -2
- package/dist/schemas/oauth-response-mode.js.map +1 -1
- package/dist/schemas/oauth-response-type.d.ts +3 -3
- package/dist/schemas/oauth-response-type.d.ts.map +1 -1
- package/dist/schemas/oauth-response-type.js +13 -7
- package/dist/schemas/oauth-response-type.js.map +1 -1
- package/dist/schemas/oauth-scope.d.ts +3 -3
- package/dist/schemas/oauth-scope.d.ts.map +1 -1
- package/dist/schemas/oauth-scope.js +2 -2
- package/dist/schemas/oauth-scope.js.map +1 -1
- package/dist/schemas/oauth-token-response.d.ts +17 -17
- package/dist/schemas/oauth-token-response.d.ts.map +1 -1
- package/dist/schemas/oauth-token-response.js +7 -7
- package/dist/schemas/oauth-token-response.js.map +1 -1
- package/dist/schemas/oauth-token-type.d.ts +3 -3
- package/dist/schemas/oauth-token-type.d.ts.map +1 -1
- package/dist/schemas/oauth-token-type.js +8 -7
- package/dist/schemas/oauth-token-type.js.map +1 -1
- package/dist/schemas/uri.d.ts +7 -7
- package/dist/schemas/uri.d.ts.map +1 -1
- package/dist/schemas/uri.js +44 -44
- package/dist/schemas/uri.js.map +1 -1
- package/dist/schemas/utils.d.ts.map +1 -1
- package/dist/schemas/utils.js.map +1 -1
- package/dist/scope.d.ts.map +1 -1
- package/dist/scope.js.map +1 -1
- package/lib/build-client-metadata.ts +9 -7
- package/lib/index.ts +31 -31
- package/lib/schemas/atcute-client-shared.ts +25 -0
- package/lib/schemas/atcute-confidential-client-metadata.ts +81 -111
- package/lib/schemas/atcute-public-client-metadata.ts +70 -166
- package/lib/schemas/atproto-authorization-server-metadata.ts +22 -23
- package/lib/schemas/atproto-oauth-scope.ts +8 -5
- package/lib/schemas/atproto-oauth-token-response.ts +10 -9
- package/lib/schemas/atproto-protected-resource-metadata.ts +15 -15
- package/lib/schemas/jwk.ts +104 -120
- package/lib/schemas/jwks.ts +28 -40
- package/lib/schemas/oauth-authorization-details.ts +10 -10
- package/lib/schemas/oauth-authorization-server-metadata.ts +72 -74
- package/lib/schemas/oauth-client-id-discoverable.ts +43 -48
- package/lib/schemas/oauth-client-id.ts +3 -3
- package/lib/schemas/oauth-client-metadata.ts +45 -49
- package/lib/schemas/oauth-code-challenge-method.ts +3 -3
- package/lib/schemas/oauth-endpoint-auth-method.ts +11 -11
- package/lib/schemas/oauth-grant-type.ts +11 -11
- package/lib/schemas/oauth-issuer-identifier.ts +35 -27
- package/lib/schemas/oauth-par-response.ts +4 -4
- package/lib/schemas/oauth-prompt.ts +3 -9
- package/lib/schemas/oauth-protected-resource-metadata.ts +26 -35
- package/lib/schemas/oauth-redirect-uri.ts +15 -23
- package/lib/schemas/oauth-response-mode.ts +3 -7
- package/lib/schemas/oauth-response-type.ts +12 -12
- package/lib/schemas/oauth-scope.ts +3 -3
- package/lib/schemas/oauth-token-response.ts +10 -10
- package/lib/schemas/oauth-token-type.ts +16 -12
- package/lib/schemas/uri.ts +89 -76
- package/package.json +9 -8
|
@@ -1,52 +1,17 @@
|
|
|
1
|
-
import * as v from '
|
|
2
|
-
import {
|
|
1
|
+
import * as v from 'valibot';
|
|
2
|
+
import { scopeSchema } from './atcute-client-shared.js';
|
|
3
3
|
import { oauthClientIdDiscoverableSchema } from './oauth-client-id-discoverable.js';
|
|
4
4
|
import { loopbackRedirectUriSchema, oauthRedirectUriSchema } from './oauth-redirect-uri.js';
|
|
5
|
-
import { nonLocalWebUriSchema,
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const scopes = input.split(/\s+/);
|
|
11
|
-
for (let i = 0, len = scopes.length; i < len; i++) {
|
|
12
|
-
const aka = scopes[i];
|
|
13
|
-
for (let j = 0; j < i; j++) {
|
|
14
|
-
if (aka === scopes[j]) {
|
|
15
|
-
return v.err(`duplicate "${aka}" scope`);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
5
|
+
import { nonLocalWebUriSchema, webUriSchema } from './uri.js';
|
|
6
|
+
const redirectUrisSchema = v.pipe(v.array(oauthRedirectUriSchema), v.minLength(1, `must have at least one redirect URI`), v.checkItems((uri) => {
|
|
7
|
+
// private-use URIs don't have URL-style credentials
|
|
8
|
+
if (!uri.includes('://')) {
|
|
9
|
+
return true;
|
|
18
10
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
for (let i = 0, len = input.length; i < len; i++) {
|
|
25
|
-
const aka = input[i];
|
|
26
|
-
for (let j = 0; j < i; j++) {
|
|
27
|
-
if (aka === input[j]) {
|
|
28
|
-
return v.err(`duplicate "${aka}" scope`);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
return v.ok(input);
|
|
33
|
-
}));
|
|
34
|
-
const redirectUrisSchema = v
|
|
35
|
-
.array(oauthRedirectUriSchema)
|
|
36
|
-
.assert((arr) => arr.length > 0, `must have at least one redirect URI`)
|
|
37
|
-
.assert((arr) => {
|
|
38
|
-
for (const uri of arr) {
|
|
39
|
-
// private-use URIs don't have URL-style credentials
|
|
40
|
-
if (!uri.includes('://')) {
|
|
41
|
-
continue;
|
|
42
|
-
}
|
|
43
|
-
const url = new URL(uri);
|
|
44
|
-
if (url.username || url.password) {
|
|
45
|
-
return false;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
return true;
|
|
49
|
-
}, `redirect URIs must not contain credentials`);
|
|
11
|
+
const url = new URL(uri);
|
|
12
|
+
return !url.username && !url.password;
|
|
13
|
+
}, `redirect URI must not contain credentials`));
|
|
14
|
+
const loopbackRedirectUrisSchema = v.pipe(redirectUrisSchema, v.checkItems((uri) => v.is(loopbackRedirectUriSchema, uri), `loopback clients require loopback redirect URIs (127.0.0.1 or [::1])`));
|
|
50
15
|
/**
|
|
51
16
|
* user-facing client metadata for configuring a loopback public OAuth client.
|
|
52
17
|
*
|
|
@@ -54,10 +19,9 @@ const redirectUrisSchema = v
|
|
|
54
19
|
* `http://localhost` as the client_id origin, which is built automatically
|
|
55
20
|
* from the redirect_uris and scope.
|
|
56
21
|
*/
|
|
57
|
-
export const loopbackClientMetadataSchema = v
|
|
58
|
-
.object({
|
|
22
|
+
export const loopbackClientMetadataSchema = v.looseObject({
|
|
59
23
|
/** must not be provided for loopback clients */
|
|
60
|
-
client_id: v.
|
|
24
|
+
client_id: v.optional(v.undefined()),
|
|
61
25
|
/**
|
|
62
26
|
* redirect URIs for authorization responses.
|
|
63
27
|
*
|
|
@@ -65,30 +29,9 @@ export const loopbackClientMetadataSchema = v
|
|
|
65
29
|
* per RFC 8252, port numbers are ignored during redirect URI matching,
|
|
66
30
|
* allowing ephemeral ports.
|
|
67
31
|
*/
|
|
68
|
-
redirect_uris:
|
|
32
|
+
redirect_uris: loopbackRedirectUrisSchema,
|
|
69
33
|
/** OAuth scope (must include "atproto") */
|
|
70
34
|
scope: scopeSchema,
|
|
71
|
-
})
|
|
72
|
-
.chain((input) => {
|
|
73
|
-
// validate all redirect URIs are loopback
|
|
74
|
-
for (let i = 0; i < input.redirect_uris.length; i++) {
|
|
75
|
-
const uri = input.redirect_uris[i];
|
|
76
|
-
const result = loopbackRedirectUriSchema.try(uri, { mode: 'strict' });
|
|
77
|
-
if (!result.ok) {
|
|
78
|
-
return v.err({
|
|
79
|
-
message: `loopback clients require loopback redirect URIs (127.0.0.1 or [::1]): ${result.message}`,
|
|
80
|
-
path: ['redirect_uris', i],
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
const url = new URL(uri);
|
|
84
|
-
if (!isLoopbackHost(url.hostname) || url.hostname === 'localhost') {
|
|
85
|
-
return v.err({
|
|
86
|
-
message: `loopback redirect URIs must use 127.0.0.1 or [::1], not ${url.hostname}`,
|
|
87
|
-
path: ['redirect_uris', i],
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
return v.ok(input);
|
|
92
35
|
});
|
|
93
36
|
/**
|
|
94
37
|
* user-facing client metadata for configuring a discoverable public OAuth client.
|
|
@@ -96,8 +39,7 @@ export const loopbackClientMetadataSchema = v
|
|
|
96
39
|
* discoverable public clients have an HTTPS client_id URL where metadata is hosted,
|
|
97
40
|
* but don't use a keyset (token_endpoint_auth_method: 'none').
|
|
98
41
|
*/
|
|
99
|
-
export const discoverablePublicClientMetadataSchema = v
|
|
100
|
-
.object({
|
|
42
|
+
export const discoverablePublicClientMetadataSchema = v.looseObject({
|
|
101
43
|
/** discoverable HTTPS client_id URL */
|
|
102
44
|
client_id: oauthClientIdDiscoverableSchema,
|
|
103
45
|
/** redirect URIs for authorization responses */
|
|
@@ -107,47 +49,17 @@ export const discoverablePublicClientMetadataSchema = v
|
|
|
107
49
|
/**
|
|
108
50
|
* application type - defaults to 'web'.
|
|
109
51
|
*/
|
|
110
|
-
application_type: v.
|
|
52
|
+
application_type: v.optional(v.picklist(['web', 'native'])),
|
|
111
53
|
/** optional client homepage */
|
|
112
|
-
client_uri:
|
|
54
|
+
client_uri: v.optional(webUriSchema),
|
|
113
55
|
/** optional display name */
|
|
114
|
-
client_name: v.
|
|
56
|
+
client_name: v.optional(v.string()),
|
|
115
57
|
/** optional policy url */
|
|
116
|
-
policy_uri:
|
|
58
|
+
policy_uri: v.optional(nonLocalWebUriSchema),
|
|
117
59
|
/** optional terms of service url */
|
|
118
|
-
tos_uri:
|
|
60
|
+
tos_uri: v.optional(nonLocalWebUriSchema),
|
|
119
61
|
/** optional logo url */
|
|
120
|
-
logo_uri:
|
|
121
|
-
})
|
|
122
|
-
.chain((input) => {
|
|
123
|
-
// validate redirect URIs are HTTPS, loopback, or private-use
|
|
124
|
-
for (let i = 0; i < input.redirect_uris.length; i++) {
|
|
125
|
-
const uri = input.redirect_uris[i];
|
|
126
|
-
// private-use URIs are allowed
|
|
127
|
-
if (!uri.includes('://')) {
|
|
128
|
-
const result = privateUseUriSchema.try(uri, { mode: 'strict' });
|
|
129
|
-
if (!result.ok) {
|
|
130
|
-
return v.err({
|
|
131
|
-
message: `invalid redirect URI: ${result.message}`,
|
|
132
|
-
path: ['redirect_uris', i],
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
continue;
|
|
136
|
-
}
|
|
137
|
-
const url = new URL(uri);
|
|
138
|
-
// loopback http URIs are allowed for native apps
|
|
139
|
-
if (url.protocol === 'http:' && isLoopbackHost(url.hostname)) {
|
|
140
|
-
continue;
|
|
141
|
-
}
|
|
142
|
-
// otherwise must be https
|
|
143
|
-
if (url.protocol !== 'https:') {
|
|
144
|
-
return v.err({
|
|
145
|
-
message: `redirect URI must use https:, http: loopback, or private-use scheme`,
|
|
146
|
-
path: ['redirect_uris', i],
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
return v.ok(input);
|
|
62
|
+
logo_uri: v.optional(nonLocalWebUriSchema),
|
|
151
63
|
});
|
|
152
64
|
/**
|
|
153
65
|
* user-facing client metadata for configuring a public OAuth client.
|
|
@@ -155,5 +67,8 @@ export const discoverablePublicClientMetadataSchema = v
|
|
|
155
67
|
* - if `client_id` is omitted: loopback client (for localhost dev / CLI tools)
|
|
156
68
|
* - if `client_id` is provided: discoverable public client (HTTPS URL)
|
|
157
69
|
*/
|
|
158
|
-
export const publicClientMetadataSchema = v.union(
|
|
70
|
+
export const publicClientMetadataSchema = v.union([
|
|
71
|
+
loopbackClientMetadataSchema,
|
|
72
|
+
discoverablePublicClientMetadataSchema,
|
|
73
|
+
]);
|
|
159
74
|
//# sourceMappingURL=atcute-public-client-metadata.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atcute-public-client-metadata.js","sourceRoot":"","sources":["../../lib/schemas/atcute-public-client-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"atcute-public-client-metadata.js","sourceRoot":"","sources":["../../lib/schemas/atcute-public-client-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAE7B,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,+BAA+B,EAAE,MAAM,mCAAmC,CAAC;AACpF,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAC5F,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE9D,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAChC,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAC/B,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,qCAAqC,CAAC,EACrD,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,EAAE;IACpB,oDAAoD;IACpD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACzB,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;AACvC,CAAC,EAAE,2CAA2C,CAAC,CAC/C,CAAC;AAEF,MAAM,0BAA0B,GAAG,CAAC,CAAC,IAAI,CACxC,kBAAkB,EAClB,CAAC,CAAC,UAAU,CACX,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,yBAAyB,EAAE,GAAG,CAAC,EAC7C,sEAAsE,CACtE,CACD,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,WAAW,CAAC;IACzD,gDAAgD;IAChD,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IAEpC;;;;;;OAMG;IACH,aAAa,EAAE,0BAA0B;IAEzC,2CAA2C;IAC3C,KAAK,EAAE,WAAW;CAClB,CAAC,CAAC;AAIH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sCAAsC,GAAG,CAAC,CAAC,WAAW,CAAC;IACnE,uCAAuC;IACvC,SAAS,EAAE,+BAA+B;IAE1C,gDAAgD;IAChD,aAAa,EAAE,kBAAkB;IAEjC,2CAA2C;IAC3C,KAAK,EAAE,WAAW;IAElB;;OAEG;IACH,gBAAgB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE3D,+BAA+B;IAC/B,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;IACpC,4BAA4B;IAC5B,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACnC,0BAA0B;IAC1B,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IAC5C,oCAAoC;IACpC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACzC,wBAAwB;IACxB,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;CAC1C,CAAC,CAAC;AAIH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC;IACjD,4BAA4B;IAC5B,sCAAsC;CACtC,CAAC,CAAC"}
|