@owox/idp-protocol 0.8.0-next-20250929102821 → 0.8.0-next-20250929131945
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 +4 -1
- package/dist/middleware/protocol-middleware.d.ts +2 -0
- package/dist/middleware/protocol-middleware.d.ts.map +1 -1
- package/dist/middleware/protocol-middleware.js +6 -0
- package/dist/providers/null-provider.d.ts +9 -0
- package/dist/providers/null-provider.d.ts.map +1 -1
- package/dist/providers/null-provider.js +21 -8
- package/dist/types/provider.d.ts +6 -0
- package/dist/types/provider.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -44,6 +44,7 @@ import { IdpProvider } from '@owox/idp-protocol';
|
|
|
44
44
|
interface IdpProvider {
|
|
45
45
|
// Middleware handlers
|
|
46
46
|
signInMiddleware(req: Request, res: Response, next: NextFunction): Promise<void | Response>;
|
|
47
|
+
signUpMiddleware(req: Request, res: Response, next: NextFunction): Promise<void | Response>;
|
|
47
48
|
signOutMiddleware(req: Request, res: Response, next: NextFunction): Promise<void | Response>;
|
|
48
49
|
accessTokenMiddleware(req: Request, res: Response, next: NextFunction): Promise<void | Response>;
|
|
49
50
|
userApiMiddleware(req: Request, res: Response, next: NextFunction): Promise<Response<Payload>>;
|
|
@@ -114,7 +115,7 @@ import { IdpProtocolMiddleware, NullIdpProvider } from '@owox/idp-protocol';
|
|
|
114
115
|
const app = express();
|
|
115
116
|
const provider = new NullIdpProvider();
|
|
116
117
|
|
|
117
|
-
// Basic usage with default routes (/auth/sign-in, /auth/sign-out, /auth/access-token, /auth/api/user)
|
|
118
|
+
// Basic usage with default routes (/auth/sign-in, /auth/sign-up, /auth/sign-out, /auth/access-token, /auth/api/user, /auth/api/projects)
|
|
118
119
|
const middleware = new IdpProtocolMiddleware(provider);
|
|
119
120
|
middleware.register(app);
|
|
120
121
|
|
|
@@ -123,6 +124,7 @@ const middleware = new IdpProtocolMiddleware(provider, {
|
|
|
123
124
|
basePath: '/api/v1/auth',
|
|
124
125
|
routes: {
|
|
125
126
|
signIn: '/login',
|
|
127
|
+
signUp: '/register',
|
|
126
128
|
signOut: '/logout',
|
|
127
129
|
accessToken: '/token',
|
|
128
130
|
user: '/me',
|
|
@@ -267,6 +269,7 @@ const middleware = new IdpProtocolMiddleware(provider, {
|
|
|
267
269
|
basePath: '/api/v1/auth',
|
|
268
270
|
routes: {
|
|
269
271
|
signIn: ProtocolRoute.SIGN_IN, // '/sign-in'
|
|
272
|
+
signUp: ProtocolRoute.SIGN_UP, // '/sign-up'
|
|
270
273
|
signOut: ProtocolRoute.SIGN_OUT, // '/sign-out'
|
|
271
274
|
accessToken: '/token', // Custom route
|
|
272
275
|
user: ProtocolRoute.USER, // '/api/user'
|
|
@@ -5,6 +5,7 @@ import { IdpProvider } from '../types/provider.js';
|
|
|
5
5
|
*/
|
|
6
6
|
export declare enum ProtocolRoute {
|
|
7
7
|
SIGN_IN = "/sign-in",
|
|
8
|
+
SIGN_UP = "/sign-up",
|
|
8
9
|
SIGN_OUT = "/sign-out",
|
|
9
10
|
ACCESS_TOKEN = "/access-token",
|
|
10
11
|
USER = "/api/user",
|
|
@@ -29,6 +30,7 @@ export interface IdpProtocolMiddlewareOptions {
|
|
|
29
30
|
basePath?: string;
|
|
30
31
|
routes?: {
|
|
31
32
|
signIn?: string;
|
|
33
|
+
signUp?: string;
|
|
32
34
|
signOut?: string;
|
|
33
35
|
accessToken?: string;
|
|
34
36
|
user?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol-middleware.d.ts","sourceRoot":"","sources":["../../src/middleware/protocol-middleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAmC,MAAM,SAAS,CAAC;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD;;GAEG;AACH,oBAAY,aAAa;IACvB,OAAO,aAAa;IACpB,QAAQ,cAAc;IACtB,YAAY,kBAAkB;IAC9B,IAAI,cAAc;IAClB,QAAQ,kBAAkB;CAC3B;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAQD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,qBAAqB;IAc9B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAb3B;;OAEG;IACH,SAAgB,iBAAiB,WAAW;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgE;IAEvF;;;;OAIG;gBAEgB,QAAQ,EAAE,WAAW,EACtC,OAAO,GAAE,4BAAiC;
|
|
1
|
+
{"version":3,"file":"protocol-middleware.d.ts","sourceRoot":"","sources":["../../src/middleware/protocol-middleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAmC,MAAM,SAAS,CAAC;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD;;GAEG;AACH,oBAAY,aAAa;IACvB,OAAO,aAAa;IACpB,OAAO,aAAa;IACpB,QAAQ,cAAc;IACtB,YAAY,kBAAkB;IAC9B,IAAI,cAAc;IAClB,QAAQ,kBAAkB;CAC3B;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAQD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,qBAAqB;IAc9B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAb3B;;OAEG;IACH,SAAgB,iBAAiB,WAAW;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgE;IAEvF;;;;OAIG;gBAEgB,QAAQ,EAAE,WAAW,EACtC,OAAO,GAAE,4BAAiC;IAe5C;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAe7B;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAU1B;;;;;;;;OAQG;IACH,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;CA0C7B"}
|
|
@@ -5,6 +5,7 @@ import cookieParser from 'cookie-parser';
|
|
|
5
5
|
export var ProtocolRoute;
|
|
6
6
|
(function (ProtocolRoute) {
|
|
7
7
|
ProtocolRoute["SIGN_IN"] = "/sign-in";
|
|
8
|
+
ProtocolRoute["SIGN_UP"] = "/sign-up";
|
|
8
9
|
ProtocolRoute["SIGN_OUT"] = "/sign-out";
|
|
9
10
|
ProtocolRoute["ACCESS_TOKEN"] = "/access-token";
|
|
10
11
|
ProtocolRoute["USER"] = "/api/user";
|
|
@@ -50,6 +51,7 @@ export class IdpProtocolMiddleware {
|
|
|
50
51
|
this.basePath = this.normalizeBasePath(options.basePath ?? this.DEFAULT_BASE_PATH);
|
|
51
52
|
this.routes = {
|
|
52
53
|
signIn: options.routes?.signIn ?? ProtocolRoute.SIGN_IN,
|
|
54
|
+
signUp: options.routes?.signUp ?? ProtocolRoute.SIGN_UP,
|
|
53
55
|
signOut: options.routes?.signOut ?? ProtocolRoute.SIGN_OUT,
|
|
54
56
|
accessToken: options.routes?.accessToken ?? ProtocolRoute.ACCESS_TOKEN,
|
|
55
57
|
user: options.routes?.user ?? ProtocolRoute.USER,
|
|
@@ -114,6 +116,10 @@ export class IdpProtocolMiddleware {
|
|
|
114
116
|
path: this.routes.signIn,
|
|
115
117
|
handler: (req, res, next) => this.provider.signInMiddleware(req, res, next),
|
|
116
118
|
},
|
|
119
|
+
{
|
|
120
|
+
path: this.routes.signUp,
|
|
121
|
+
handler: (req, res, next) => this.provider.signUpMiddleware(req, res, next),
|
|
122
|
+
},
|
|
117
123
|
{
|
|
118
124
|
path: this.routes.signOut,
|
|
119
125
|
handler: (req, res, next) => this.provider.signOutMiddleware(req, res, next),
|
|
@@ -12,6 +12,7 @@ export declare class NullIdpProvider implements IdpProvider {
|
|
|
12
12
|
constructor();
|
|
13
13
|
refreshToken(_refreshToken: string): Promise<AuthResult>;
|
|
14
14
|
signInMiddleware(req: Request, res: Response, _next: NextFunction): Promise<void>;
|
|
15
|
+
signUpMiddleware(req: Request, res: Response, _next: NextFunction): Promise<void>;
|
|
15
16
|
signOutMiddleware(_req: Request, res: Response, _next: NextFunction): Promise<void>;
|
|
16
17
|
accessTokenMiddleware(req: Request, res: Response, _next: NextFunction): Promise<Response>;
|
|
17
18
|
userApiMiddleware(req: Request, res: Response, _next: NextFunction): Promise<Response<Payload>>;
|
|
@@ -22,5 +23,13 @@ export declare class NullIdpProvider implements IdpProvider {
|
|
|
22
23
|
introspectToken(_token: string): Promise<Payload | null>;
|
|
23
24
|
parseToken(_token: string): Promise<Payload | null>;
|
|
24
25
|
revokeToken(_token: string): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Sets the authentication cookie in the response and redirects the user to the root path.
|
|
28
|
+
*
|
|
29
|
+
* @param {Request} req The HTTP request object containing the client's request.
|
|
30
|
+
* @param {Response} res The HTTP response object used to send back the response, including the cookie and redirect.
|
|
31
|
+
* @return {Promise<void>} A promise that resolves when the cookie is set and the redirect response is sent to the client.
|
|
32
|
+
*/
|
|
33
|
+
private setAuthCookieAndRedirect;
|
|
25
34
|
}
|
|
26
35
|
//# sourceMappingURL=null-provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"null-provider.d.ts","sourceRoot":"","sources":["../../src/providers/null-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEnE;;;GAGG;AACH,qBAAa,eAAgB,YAAW,WAAW;IACjD,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,mBAAmB,CAAS;;IAc9B,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAM9D,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"null-provider.d.ts","sourceRoot":"","sources":["../../src/providers/null-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEnE;;;GAGG;AACH,qBAAa,eAAgB,YAAW,WAAW;IACjD,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,mBAAmB,CAAS;;IAc9B,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAM9D,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjF,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjF,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAKnF,qBAAqB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC;IAO1F,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAO/F,qBAAqB,CACnB,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAK9B,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAI7B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAIxD,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAInD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD;;;;;;OAMG;IACH,OAAO,CAAC,wBAAwB;CAYjC"}
|
|
@@ -23,14 +23,10 @@ export class NullIdpProvider {
|
|
|
23
23
|
};
|
|
24
24
|
}
|
|
25
25
|
signInMiddleware(req, res, _next) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
sameSite: 'lax',
|
|
31
|
-
maxAge: 60 * 60 * 24 * 30 * 1000,
|
|
32
|
-
});
|
|
33
|
-
return Promise.resolve(res.redirect('/'));
|
|
26
|
+
return this.setAuthCookieAndRedirect(req, res);
|
|
27
|
+
}
|
|
28
|
+
signUpMiddleware(req, res, _next) {
|
|
29
|
+
return this.setAuthCookieAndRedirect(req, res);
|
|
34
30
|
}
|
|
35
31
|
signOutMiddleware(_req, res, _next) {
|
|
36
32
|
res.clearCookie('refreshToken');
|
|
@@ -70,4 +66,21 @@ export class NullIdpProvider {
|
|
|
70
66
|
async revokeToken(_token) {
|
|
71
67
|
// No-op for NULL provider
|
|
72
68
|
}
|
|
69
|
+
/**
|
|
70
|
+
* Sets the authentication cookie in the response and redirects the user to the root path.
|
|
71
|
+
*
|
|
72
|
+
* @param {Request} req The HTTP request object containing the client's request.
|
|
73
|
+
* @param {Response} res The HTTP response object used to send back the response, including the cookie and redirect.
|
|
74
|
+
* @return {Promise<void>} A promise that resolves when the cookie is set and the redirect response is sent to the client.
|
|
75
|
+
*/
|
|
76
|
+
setAuthCookieAndRedirect(req, res) {
|
|
77
|
+
const isSecure = req.protocol !== 'http' && !(req.hostname === 'localhost' || req.hostname === '127.0.0.1');
|
|
78
|
+
res.cookie('refreshToken', this.defaultRefreshToken, {
|
|
79
|
+
httpOnly: true,
|
|
80
|
+
secure: isSecure,
|
|
81
|
+
sameSite: 'lax',
|
|
82
|
+
maxAge: 60 * 60 * 24 * 30 * 1000,
|
|
83
|
+
});
|
|
84
|
+
return Promise.resolve(res.redirect('/'));
|
|
85
|
+
}
|
|
73
86
|
}
|
package/dist/types/provider.d.ts
CHANGED
|
@@ -10,6 +10,12 @@ export interface IdpProvider {
|
|
|
10
10
|
* If the IDP implementation does not support sign in, this method should call the `next()` function.
|
|
11
11
|
*/
|
|
12
12
|
signInMiddleware(req: Request, res: Response, next: NextFunction): Promise<void | Response>;
|
|
13
|
+
/**
|
|
14
|
+
* Sign up middleware. This method is used to handle the user registration request and send the sign up response.
|
|
15
|
+
* <br/>
|
|
16
|
+
* If the IDP implementation does not support sign up, this method should call the `next()` function.
|
|
17
|
+
*/
|
|
18
|
+
signUpMiddleware(req: Request, res: Response, next: NextFunction): Promise<void | Response>;
|
|
13
19
|
/**
|
|
14
20
|
* Sign out middleware. This method is used to handle the sign out request and use response to send the sign out response.
|
|
15
21
|
* <br/>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/types/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC;IAE5F;;;;OAIG;IACH,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC;IAE7F;;;;OAIG;IACH,qBAAqB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC;IAEjG;;;;OAIG;IACH,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAE/F;;;;OAIG;IACH,qBAAqB,CACnB,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE/B;;;;OAIG;IACH,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;IAEnC;;;;OAIG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAExD;;;;OAIG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAEnD;;;;OAIG;IACH,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAExD;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1C;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B;;OAEG;IACH,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B"}
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/types/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC;IAE5F;;;;OAIG;IACH,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC;IAE5F;;;;OAIG;IACH,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC;IAE7F;;;;OAIG;IACH,qBAAqB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC;IAEjG;;;;OAIG;IACH,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAE/F;;;;OAIG;IACH,qBAAqB,CACnB,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE/B;;;;OAIG;IACH,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;IAEnC;;;;OAIG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAExD;;;;OAIG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAEnD;;;;OAIG;IACH,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAExD;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1C;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B;;OAEG;IACH,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B"}
|