@datacapy/server 0.1.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/LICENSE +29 -0
- package/README.md +485 -0
- package/dist/acl/role-assessor/all.d.ts +7 -0
- package/dist/acl/role-assessor/all.d.ts.map +1 -0
- package/dist/acl/role-assessor/all.js +18 -0
- package/dist/acl/role-assessor/all.js.map +1 -0
- package/dist/acl/role-assessor/index.d.ts +4 -0
- package/dist/acl/role-assessor/index.d.ts.map +1 -0
- package/dist/acl/role-assessor/index.js +7 -0
- package/dist/acl/role-assessor/index.js.map +1 -0
- package/dist/acl/role-assessor.d.ts +13 -0
- package/dist/acl/role-assessor.d.ts.map +1 -0
- package/dist/acl/role-assessor.js +20 -0
- package/dist/acl/role-assessor.js.map +1 -0
- package/dist/acl.d.ts +41 -0
- package/dist/acl.d.ts.map +1 -0
- package/dist/acl.js +116 -0
- package/dist/acl.js.map +1 -0
- package/dist/api-config.d.ts +92 -0
- package/dist/api-config.d.ts.map +1 -0
- package/dist/api-config.js +3 -0
- package/dist/api-config.js.map +1 -0
- package/dist/error.d.ts +30 -0
- package/dist/error.d.ts.map +1 -0
- package/dist/error.js +72 -0
- package/dist/error.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/remote-object/body-parser-configurer.d.ts +28 -0
- package/dist/remote-object/body-parser-configurer.d.ts.map +1 -0
- package/dist/remote-object/body-parser-configurer.js +103 -0
- package/dist/remote-object/body-parser-configurer.js.map +1 -0
- package/dist/remote-object/endpoint-resolver.d.ts +12 -0
- package/dist/remote-object/endpoint-resolver.d.ts.map +1 -0
- package/dist/remote-object/endpoint-resolver.js +58 -0
- package/dist/remote-object/endpoint-resolver.js.map +1 -0
- package/dist/remote-object/error-handler.d.ts +16 -0
- package/dist/remote-object/error-handler.d.ts.map +1 -0
- package/dist/remote-object/error-handler.js +149 -0
- package/dist/remote-object/error-handler.js.map +1 -0
- package/dist/remote-object/index.d.ts +8 -0
- package/dist/remote-object/index.d.ts.map +1 -0
- package/dist/remote-object/index.js +24 -0
- package/dist/remote-object/index.js.map +1 -0
- package/dist/remote-object/interfaces.d.ts +42 -0
- package/dist/remote-object/interfaces.d.ts.map +1 -0
- package/dist/remote-object/interfaces.js +3 -0
- package/dist/remote-object/interfaces.js.map +1 -0
- package/dist/remote-object/middleware-factory.d.ts +14 -0
- package/dist/remote-object/middleware-factory.d.ts.map +1 -0
- package/dist/remote-object/middleware-factory.js +66 -0
- package/dist/remote-object/middleware-factory.js.map +1 -0
- package/dist/remote-object/request-data-parser.d.ts +18 -0
- package/dist/remote-object/request-data-parser.d.ts.map +1 -0
- package/dist/remote-object/request-data-parser.js +75 -0
- package/dist/remote-object/request-data-parser.js.map +1 -0
- package/dist/remote-object/response-handler.d.ts +6 -0
- package/dist/remote-object/response-handler.d.ts.map +1 -0
- package/dist/remote-object/response-handler.js +20 -0
- package/dist/remote-object/response-handler.js.map +1 -0
- package/dist/remote-object.d.ts +50 -0
- package/dist/remote-object.d.ts.map +1 -0
- package/dist/remote-object.js +102 -0
- package/dist/remote-object.js.map +1 -0
- package/dist/server/acl-registry.d.ts +12 -0
- package/dist/server/acl-registry.d.ts.map +1 -0
- package/dist/server/acl-registry.js +21 -0
- package/dist/server/acl-registry.js.map +1 -0
- package/dist/server/api-config-registry.d.ts +10 -0
- package/dist/server/api-config-registry.d.ts.map +1 -0
- package/dist/server/api-config-registry.js +19 -0
- package/dist/server/api-config-registry.js.map +1 -0
- package/dist/server/configuration-manager.d.ts +12 -0
- package/dist/server/configuration-manager.d.ts.map +1 -0
- package/dist/server/configuration-manager.js +62 -0
- package/dist/server/configuration-manager.js.map +1 -0
- package/dist/server/endpoint-registrar.d.ts +13 -0
- package/dist/server/endpoint-registrar.d.ts.map +1 -0
- package/dist/server/endpoint-registrar.js +92 -0
- package/dist/server/endpoint-registrar.js.map +1 -0
- package/dist/server/express-app-manager.d.ts +14 -0
- package/dist/server/express-app-manager.d.ts.map +1 -0
- package/dist/server/express-app-manager.js +33 -0
- package/dist/server/express-app-manager.js.map +1 -0
- package/dist/server/http-server-manager.d.ts +16 -0
- package/dist/server/http-server-manager.d.ts.map +1 -0
- package/dist/server/http-server-manager.js +40 -0
- package/dist/server/http-server-manager.js.map +1 -0
- package/dist/server/index.d.ts +9 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +33 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/interfaces.d.ts +70 -0
- package/dist/server/interfaces.d.ts.map +1 -0
- package/dist/server/interfaces.js +3 -0
- package/dist/server/interfaces.js.map +1 -0
- package/dist/server/lifecycle-manager.d.ts +19 -0
- package/dist/server/lifecycle-manager.d.ts.map +1 -0
- package/dist/server/lifecycle-manager.js +60 -0
- package/dist/server/lifecycle-manager.js.map +1 -0
- package/dist/server-config.d.ts +10 -0
- package/dist/server-config.d.ts.map +1 -0
- package/dist/server-config.js +3 -0
- package/dist/server-config.js.map +1 -0
- package/dist/server.d.ts +53 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +115 -0
- package/dist/server.js.map +1 -0
- package/package.json +66 -0
- package/tsconfig.json +27 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ErrorHandler = void 0;
|
|
4
|
+
const om_1 = require("@datacapy/om");
|
|
5
|
+
class ErrorHandler {
|
|
6
|
+
constructor(logger, exposeErrorDetails = false) {
|
|
7
|
+
this.logger = logger;
|
|
8
|
+
this.exposeErrorDetails = exposeErrorDetails;
|
|
9
|
+
}
|
|
10
|
+
setLogger(logger) {
|
|
11
|
+
this.logger = logger;
|
|
12
|
+
}
|
|
13
|
+
setExposeErrorDetails(exposeErrorDetails) {
|
|
14
|
+
this.exposeErrorDetails = exposeErrorDetails;
|
|
15
|
+
}
|
|
16
|
+
setErrorTranslator(errorTranslator) {
|
|
17
|
+
this.errorTranslator = errorTranslator;
|
|
18
|
+
}
|
|
19
|
+
async handleEndpointError(err, res, req, endpointName, method, responseErrorConfig) {
|
|
20
|
+
try {
|
|
21
|
+
if (this.errorTranslator) {
|
|
22
|
+
err = await this.errorTranslator(err, req);
|
|
23
|
+
}
|
|
24
|
+
const error = err instanceof Error ? err : null;
|
|
25
|
+
let errorHandled = false;
|
|
26
|
+
let resolvedStatusCode;
|
|
27
|
+
if (Object.keys(responseErrorConfig).length) {
|
|
28
|
+
for (const errorName in responseErrorConfig) {
|
|
29
|
+
if (error && errorName !== error.constructor.name) {
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
const errorConfig = responseErrorConfig[errorName];
|
|
33
|
+
const schemaConfig = errorConfig.schema ? errorConfig.schema : null;
|
|
34
|
+
const httpConfig = errorConfig.http ? errorConfig.http : {};
|
|
35
|
+
const code = httpConfig.code ? httpConfig.code : 400;
|
|
36
|
+
const contentType = httpConfig.contentType
|
|
37
|
+
? httpConfig.contentType
|
|
38
|
+
: 'json';
|
|
39
|
+
const validateResultError = schemaConfig
|
|
40
|
+
? await new om_1.Schema(schemaConfig).validate(err)
|
|
41
|
+
: { isValid: true };
|
|
42
|
+
if (validateResultError.isValid) {
|
|
43
|
+
if (contentType == 'json') {
|
|
44
|
+
res.status(code).json(error);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
if (contentType)
|
|
48
|
+
res.type(contentType);
|
|
49
|
+
res.status(code).send(error === null || error === void 0 ? void 0 : error.message);
|
|
50
|
+
}
|
|
51
|
+
errorHandled = true;
|
|
52
|
+
resolvedStatusCode = code;
|
|
53
|
+
}
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (!errorHandled) {
|
|
58
|
+
resolvedStatusCode = 500;
|
|
59
|
+
}
|
|
60
|
+
this.logError(err, errorHandled, req, endpointName, method, resolvedStatusCode);
|
|
61
|
+
if (!errorHandled) {
|
|
62
|
+
this.sendUnhandledErrorResponse(res, err, endpointName, method);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch (outerErr) {
|
|
66
|
+
this.handleFatalError(outerErr, err, res);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
logError(err, errorHandled, req, endpointName, method, statusCode) {
|
|
70
|
+
var _a, _b, _c;
|
|
71
|
+
const isInTest = typeof global.it === 'function';
|
|
72
|
+
if (!isInTest &&
|
|
73
|
+
(err.ref == undefined || err.logged || !errorHandled)) {
|
|
74
|
+
const errorMessage = (err === null || err === void 0 ? void 0 : err.message) || ((_a = err === null || err === void 0 ? void 0 : err.toString) === null || _a === void 0 ? void 0 : _a.call(err)) || String(err) || 'Unknown error';
|
|
75
|
+
const errorStack = (err === null || err === void 0 ? void 0 : err.stack) ||
|
|
76
|
+
(err instanceof Error ? new Error().stack : null) ||
|
|
77
|
+
'No stack trace available';
|
|
78
|
+
const errorName = (err === null || err === void 0 ? void 0 : err.name) || ((_b = err === null || err === void 0 ? void 0 : err.constructor) === null || _b === void 0 ? void 0 : _b.name) || 'Error';
|
|
79
|
+
const errorDetails = [
|
|
80
|
+
`Endpoint: ${endpointName}`,
|
|
81
|
+
`Method: ${method}`,
|
|
82
|
+
`Error: ${errorName} - ${errorMessage}`,
|
|
83
|
+
`Stack: ${errorStack}`,
|
|
84
|
+
!errorHandled
|
|
85
|
+
? 'WARNING: Error was not handled by endpoint error config'
|
|
86
|
+
: null,
|
|
87
|
+
]
|
|
88
|
+
.filter(Boolean)
|
|
89
|
+
.join('\n');
|
|
90
|
+
console.error(errorDetails);
|
|
91
|
+
(_c = this.logger) === null || _c === void 0 ? void 0 : _c.error({
|
|
92
|
+
endpoint: endpointName,
|
|
93
|
+
method: method,
|
|
94
|
+
errorName: errorName,
|
|
95
|
+
errorMessage: errorMessage,
|
|
96
|
+
errorStack: errorStack,
|
|
97
|
+
errorCode: err === null || err === void 0 ? void 0 : err.code,
|
|
98
|
+
errorRef: err === null || err === void 0 ? void 0 : err.ref,
|
|
99
|
+
handled: errorHandled,
|
|
100
|
+
statusCode: statusCode,
|
|
101
|
+
req: this.getMinimalRequestInfo(req),
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
sendUnhandledErrorResponse(res, err, endpointName, method) {
|
|
106
|
+
if (!res.headersSent) {
|
|
107
|
+
const message = this.exposeErrorDetails
|
|
108
|
+
? (err === null || err === void 0 ? void 0 : err.message) || 'An unexpected error occurred'
|
|
109
|
+
: 'An unexpected error occurred';
|
|
110
|
+
res.status(500).json({
|
|
111
|
+
error: 'InternalServerError',
|
|
112
|
+
message,
|
|
113
|
+
endpoint: endpointName,
|
|
114
|
+
method: method,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
handleFatalError(outerErr, originalErr, res) {
|
|
119
|
+
console.error('=== FATAL: Error in error handler ===\n' +
|
|
120
|
+
`Outer error: ${outerErr}\n` +
|
|
121
|
+
`Original error: ${originalErr}`);
|
|
122
|
+
if (!res.headersSent) {
|
|
123
|
+
try {
|
|
124
|
+
res.status(500).json({
|
|
125
|
+
error: 'FatalServerError',
|
|
126
|
+
message: 'A fatal error occurred in the error handler',
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
catch (finalErr) {
|
|
130
|
+
res.status(500).end('Fatal server error');
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
getMinimalRequestInfo(req) {
|
|
135
|
+
return {
|
|
136
|
+
url: req.url,
|
|
137
|
+
originalUrl: req.originalUrl,
|
|
138
|
+
method: req.method,
|
|
139
|
+
query: req.query,
|
|
140
|
+
params: req.params,
|
|
141
|
+
ip: req.ip,
|
|
142
|
+
headers: req.headers,
|
|
143
|
+
cookies: req.cookies,
|
|
144
|
+
body: req.body,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
exports.ErrorHandler = ErrorHandler;
|
|
149
|
+
//# sourceMappingURL=error-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/remote-object/error-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './interfaces';
|
|
2
|
+
export * from './request-data-parser';
|
|
3
|
+
export * from './body-parser-configurer';
|
|
4
|
+
export * from './response-handler';
|
|
5
|
+
export * from './error-handler';
|
|
6
|
+
export * from './endpoint-resolver';
|
|
7
|
+
export * from './middleware-factory';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/remote-object/index.ts"],"names":[],"mappings":"AAKA,cAAc,cAAc,CAAA;AAC5B,cAAc,uBAAuB,CAAA;AACrC,cAAc,0BAA0B,CAAA;AACxC,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./interfaces"), exports);
|
|
18
|
+
__exportStar(require("./request-data-parser"), exports);
|
|
19
|
+
__exportStar(require("./body-parser-configurer"), exports);
|
|
20
|
+
__exportStar(require("./response-handler"), exports);
|
|
21
|
+
__exportStar(require("./error-handler"), exports);
|
|
22
|
+
__exportStar(require("./endpoint-resolver"), exports);
|
|
23
|
+
__exportStar(require("./middleware-factory"), exports);
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/remote-object/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAKA,+CAA4B;AAC5B,wDAAqC;AACrC,2DAAwC;AACxC,qDAAkC;AAClC,kDAA+B;AAC/B,sDAAmC;AACnC,uDAAoC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export interface LoggerInterface {
|
|
2
|
+
error(message: any, ...optionalParams: any[]): void;
|
|
3
|
+
warn?(message: any, ...optionalParams: any[]): void;
|
|
4
|
+
info?(message: any, ...optionalParams: any[]): void;
|
|
5
|
+
debug?(message: any, ...optionalParams: any[]): void;
|
|
6
|
+
}
|
|
7
|
+
export interface ModelManagerInterface {
|
|
8
|
+
services: {
|
|
9
|
+
[key: string]: any;
|
|
10
|
+
};
|
|
11
|
+
repos: {
|
|
12
|
+
[key: string]: any;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export type ErrorTranslator = (err: any, req: RequestInterface) => any | Promise<any>;
|
|
16
|
+
export interface RequestInterface {
|
|
17
|
+
url: string;
|
|
18
|
+
originalUrl: string;
|
|
19
|
+
method: string;
|
|
20
|
+
query?: any;
|
|
21
|
+
params?: any;
|
|
22
|
+
body?: any;
|
|
23
|
+
ip?: string;
|
|
24
|
+
headers?: any;
|
|
25
|
+
cookies?: any;
|
|
26
|
+
aclContext?: any;
|
|
27
|
+
aclConditions?: any;
|
|
28
|
+
get(header: string): string | undefined;
|
|
29
|
+
}
|
|
30
|
+
export interface ResponseInterface {
|
|
31
|
+
status(code: number): ResponseInterface;
|
|
32
|
+
json(data: any): ResponseInterface;
|
|
33
|
+
send(data: any): ResponseInterface;
|
|
34
|
+
type(contentType: string): ResponseInterface;
|
|
35
|
+
headersSent: boolean;
|
|
36
|
+
end(data?: any): void;
|
|
37
|
+
}
|
|
38
|
+
export interface AclInterface {
|
|
39
|
+
populateContext(req: RequestInterface, context: any, remoteObject: any): Promise<boolean>;
|
|
40
|
+
isPermitted(endpointName: string, context: any): Promise<boolean | object>;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/remote-object/interfaces.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;IACnD,IAAI,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;IACnD,IAAI,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;IACnD,KAAK,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;CACrD;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAA;IAChC,KAAK,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAA;CAC9B;AAED,MAAM,MAAM,eAAe,GAAG,CAC5B,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,gBAAgB,KAClB,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;AAEvB,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,GAAG,CAAA;IACX,MAAM,CAAC,EAAE,GAAG,CAAA;IACZ,IAAI,CAAC,EAAE,GAAG,CAAA;IACV,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,OAAO,CAAC,EAAE,GAAG,CAAA;IACb,OAAO,CAAC,EAAE,GAAG,CAAA;IACb,UAAU,CAAC,EAAE,GAAG,CAAA;IAChB,aAAa,CAAC,EAAE,GAAG,CAAA;IACnB,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;CACxC;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAAA;IACvC,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,iBAAiB,CAAA;IAClC,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,iBAAiB,CAAA;IAClC,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,iBAAiB,CAAA;IAC5C,WAAW,EAAE,OAAO,CAAA;IACpB,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,CAAA;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,eAAe,CACb,GAAG,EAAE,gBAAgB,EACrB,OAAO,EAAE,GAAG,EACZ,YAAY,EAAE,GAAG,GAChB,OAAO,CAAC,OAAO,CAAC,CAAA;IACnB,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,CAAA;CAC3E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/remote-object/interfaces.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { RequestInterface, ResponseInterface } from './interfaces';
|
|
2
|
+
import { ServerApiConfigEndpoint, ServerApiConfigEndpointResponse } from '../api-config';
|
|
3
|
+
import { RequestDataParser } from './request-data-parser';
|
|
4
|
+
import { ResponseHandler } from './response-handler';
|
|
5
|
+
import { ErrorHandler } from './error-handler';
|
|
6
|
+
export declare class MiddlewareFactory {
|
|
7
|
+
private requestDataParser;
|
|
8
|
+
private responseHandler;
|
|
9
|
+
private errorHandler;
|
|
10
|
+
private remoteObjectContext;
|
|
11
|
+
constructor(requestDataParser: RequestDataParser, responseHandler: ResponseHandler, errorHandler: ErrorHandler, remoteObjectContext: any);
|
|
12
|
+
createMiddlewareCallback(endpointName: string, endpointConfig: ServerApiConfigEndpoint, endpointObject: any, method: string, requestDataConfig: any, responseSuccess: ServerApiConfigEndpointResponse, responseErrorConfig: any): (req: RequestInterface, res: ResponseInterface) => Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=middleware-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware-factory.d.ts","sourceRoot":"","sources":["../../src/remote-object/middleware-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAChF,OAAO,EACL,uBAAuB,EACvB,+BAA+B,EAChC,MAAM,eAAe,CAAA;AAKtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAM9C,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,iBAAiB,CAAmB;IAC5C,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,mBAAmB,CAAK;gBAG9B,iBAAiB,EAAE,iBAAiB,EACpC,eAAe,EAAE,eAAe,EAChC,YAAY,EAAE,YAAY,EAC1B,mBAAmB,EAAE,GAAG;IAW1B,wBAAwB,CACtB,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,uBAAuB,EACvC,cAAc,EAAE,GAAG,EACnB,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,GAAG,EACtB,eAAe,EAAE,+BAA+B,EAChD,mBAAmB,EAAE,GAAG,GACvB,CAAC,GAAG,EAAE,gBAAgB,EAAE,GAAG,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC;CA8FpE"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MiddlewareFactory = void 0;
|
|
4
|
+
const error_1 = require("../error");
|
|
5
|
+
class MiddlewareFactory {
|
|
6
|
+
constructor(requestDataParser, responseHandler, errorHandler, remoteObjectContext) {
|
|
7
|
+
this.requestDataParser = requestDataParser;
|
|
8
|
+
this.responseHandler = responseHandler;
|
|
9
|
+
this.errorHandler = errorHandler;
|
|
10
|
+
this.remoteObjectContext = remoteObjectContext;
|
|
11
|
+
}
|
|
12
|
+
createMiddlewareCallback(endpointName, endpointConfig, endpointObject, method, requestDataConfig, responseSuccess, responseErrorConfig) {
|
|
13
|
+
return async (req, res) => {
|
|
14
|
+
try {
|
|
15
|
+
const requestData = this.requestDataParser.parseRequestData(requestDataConfig, req, res);
|
|
16
|
+
const validationSpec = this.requestDataParser.parseValidationSpec(requestDataConfig);
|
|
17
|
+
const validationResult = await this.requestDataParser.validateRequestData(requestData, validationSpec);
|
|
18
|
+
if (!validationResult.isValid) {
|
|
19
|
+
res.status(403).json({ validationErrors: validationResult.errors });
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (endpointObject[method] === undefined) {
|
|
23
|
+
throw new Error('Method "' +
|
|
24
|
+
method +
|
|
25
|
+
'" is not defined in ' +
|
|
26
|
+
(endpointConfig.object
|
|
27
|
+
? 'endpoint object'
|
|
28
|
+
: endpointConfig.service
|
|
29
|
+
? `service "${endpointConfig.service}"`
|
|
30
|
+
: endpointConfig.repo
|
|
31
|
+
? `repo "${endpointConfig.repo}"`
|
|
32
|
+
: 'config-level object') +
|
|
33
|
+
' for endpoint "' +
|
|
34
|
+
endpointName +
|
|
35
|
+
'"');
|
|
36
|
+
}
|
|
37
|
+
const aclContext = { ...requestData };
|
|
38
|
+
const remoteObjectWrapper = {
|
|
39
|
+
...this.remoteObjectContext,
|
|
40
|
+
object: endpointObject,
|
|
41
|
+
};
|
|
42
|
+
await this.remoteObjectContext.acl.populateContext(req, aclContext, remoteObjectWrapper);
|
|
43
|
+
req.aclContext = aclContext;
|
|
44
|
+
const isPermitted = await this.remoteObjectContext.acl.isPermitted(endpointName, aclContext);
|
|
45
|
+
if (isPermitted === false) {
|
|
46
|
+
throw new error_1.ServerErrorUnauthorized();
|
|
47
|
+
}
|
|
48
|
+
requestData.aclContext = aclContext;
|
|
49
|
+
requestData.aclConditions =
|
|
50
|
+
typeof isPermitted === 'object' ? isPermitted : {};
|
|
51
|
+
const response = await endpointObject[method].apply(endpointObject, [
|
|
52
|
+
requestData,
|
|
53
|
+
]);
|
|
54
|
+
if (endpointConfig.skipResponse) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
this.responseHandler.sendSuccessResponse(res, response, responseSuccess);
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
await this.errorHandler.handleEndpointError(err, res, req, endpointName, method, responseErrorConfig);
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.MiddlewareFactory = MiddlewareFactory;
|
|
66
|
+
//# sourceMappingURL=middleware-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware-factory.js","sourceRoot":"","sources":["../../src/remote-object/middleware-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { RequestInterface, ResponseInterface } from './interfaces';
|
|
2
|
+
import { ServerConfig } from '../server-config';
|
|
3
|
+
export declare class RequestDataParser {
|
|
4
|
+
private serverConfig;
|
|
5
|
+
constructor(serverConfig: Partial<ServerConfig> & {
|
|
6
|
+
[key: string]: any;
|
|
7
|
+
});
|
|
8
|
+
parseRequestData(requestDataConfig: any, req: RequestInterface, res: ResponseInterface): {
|
|
9
|
+
[key: string]: any;
|
|
10
|
+
};
|
|
11
|
+
private parseOneRequestData;
|
|
12
|
+
parseValidationSpec(requestDataConfig: any): any;
|
|
13
|
+
validateRequestData(requestData: any, validationSpec: any): Promise<{
|
|
14
|
+
isValid: boolean;
|
|
15
|
+
errors?: any;
|
|
16
|
+
}>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=request-data-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-data-parser.d.ts","sourceRoot":"","sources":["../../src/remote-object/request-data-parser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAM/C,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,YAAY,CAAgD;gBAExD,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;IAOxE,gBAAgB,CACd,iBAAiB,EAAE,GAAG,EACtB,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,iBAAiB,GACrB;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;IAgBzB,OAAO,CAAC,mBAAmB;IAuC3B,mBAAmB,CAAC,iBAAiB,EAAE,GAAG,GAAG,GAAG;IA8B1C,mBAAmB,CACvB,WAAW,EAAE,GAAG,EAChB,cAAc,EAAE,GAAG,GAClB,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;CAQ/C"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RequestDataParser = void 0;
|
|
4
|
+
const om_1 = require("@datacapy/om");
|
|
5
|
+
class RequestDataParser {
|
|
6
|
+
constructor(serverConfig) {
|
|
7
|
+
this.serverConfig = serverConfig;
|
|
8
|
+
}
|
|
9
|
+
parseRequestData(requestDataConfig, req, res) {
|
|
10
|
+
const values = {};
|
|
11
|
+
for (const name in requestDataConfig) {
|
|
12
|
+
values[name] = this.parseOneRequestData(name, requestDataConfig[name], req, res);
|
|
13
|
+
}
|
|
14
|
+
return values;
|
|
15
|
+
}
|
|
16
|
+
parseOneRequestData(name, methodArgConfig, req, res) {
|
|
17
|
+
let value = undefined;
|
|
18
|
+
const src = methodArgConfig.src ? methodArgConfig.src : 'query';
|
|
19
|
+
const srcPath = methodArgConfig.srcPath ? methodArgConfig.srcPath : name;
|
|
20
|
+
const container = {
|
|
21
|
+
param: req.params ? req.params : {},
|
|
22
|
+
query: req.query ? req.query : {},
|
|
23
|
+
body: req.body ? req.body : {},
|
|
24
|
+
request: req,
|
|
25
|
+
response: res,
|
|
26
|
+
config: this.serverConfig ? this.serverConfig : {},
|
|
27
|
+
aclContext: req.aclContext ? req.aclContext : {},
|
|
28
|
+
aclConditions: req.aclConditions ? req.aclConditions : {},
|
|
29
|
+
};
|
|
30
|
+
switch (src) {
|
|
31
|
+
case 'header':
|
|
32
|
+
value = container.request.get(srcPath);
|
|
33
|
+
break;
|
|
34
|
+
case 'container':
|
|
35
|
+
value = om_1.ObjectPathAccessor.getPath(srcPath, container);
|
|
36
|
+
break;
|
|
37
|
+
default:
|
|
38
|
+
value = om_1.ObjectPathAccessor.getPath(srcPath, container[src]);
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
return value;
|
|
42
|
+
}
|
|
43
|
+
parseValidationSpec(requestDataConfig) {
|
|
44
|
+
const spec = {};
|
|
45
|
+
const parseOne = (argConfig, key) => {
|
|
46
|
+
const type = argConfig.type ? argConfig.type : null;
|
|
47
|
+
spec[key] = {};
|
|
48
|
+
spec[key].$type = type;
|
|
49
|
+
spec[key].$validate = {};
|
|
50
|
+
spec[key].$filter = {};
|
|
51
|
+
if (argConfig.required !== undefined)
|
|
52
|
+
spec[key].$validate.required = argConfig.required;
|
|
53
|
+
if (argConfig.notNull !== undefined)
|
|
54
|
+
spec[key].$validate.notNull = argConfig.notNull;
|
|
55
|
+
if (argConfig.notEmpty !== undefined)
|
|
56
|
+
spec[key].$validate.notEmpty = argConfig.notEmpty;
|
|
57
|
+
if (argConfig.defaultValue !== undefined)
|
|
58
|
+
spec[key].$filter.defaultValue = argConfig.defaultValue;
|
|
59
|
+
};
|
|
60
|
+
for (const key in requestDataConfig) {
|
|
61
|
+
parseOne(requestDataConfig[key], key);
|
|
62
|
+
}
|
|
63
|
+
return spec;
|
|
64
|
+
}
|
|
65
|
+
async validateRequestData(requestData, validationSpec) {
|
|
66
|
+
const schema = new om_1.Schema(validationSpec);
|
|
67
|
+
const validateResult = await schema.validate(requestData);
|
|
68
|
+
return {
|
|
69
|
+
isValid: validateResult.isValid,
|
|
70
|
+
errors: validateResult.errors,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
exports.RequestDataParser = RequestDataParser;
|
|
75
|
+
//# sourceMappingURL=request-data-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-data-parser.js","sourceRoot":"","sources":["../../src/remote-object/request-data-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ResponseInterface } from './interfaces';
|
|
2
|
+
import { ServerApiConfigEndpointResponse } from '../api-config';
|
|
3
|
+
export declare class ResponseHandler {
|
|
4
|
+
sendSuccessResponse(res: ResponseInterface, response: any, responseSuccess: ServerApiConfigEndpointResponse): void;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=response-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-handler.d.ts","sourceRoot":"","sources":["../../src/remote-object/response-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,EAAE,+BAA+B,EAAE,MAAM,eAAe,CAAA;AAM/D,qBAAa,eAAe;IAI1B,mBAAmB,CACjB,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,GAAG,EACb,eAAe,EAAE,+BAA+B,GAC/C,IAAI;CAYR"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ResponseHandler = void 0;
|
|
4
|
+
class ResponseHandler {
|
|
5
|
+
sendSuccessResponse(res, response, responseSuccess) {
|
|
6
|
+
const httpConfig = responseSuccess.http ? responseSuccess.http : {};
|
|
7
|
+
const code = httpConfig.code ? httpConfig.code : 200;
|
|
8
|
+
const contentType = httpConfig.contentType ? httpConfig.contentType : 'json';
|
|
9
|
+
if (contentType == 'json') {
|
|
10
|
+
res.status(code).json(response);
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
if (contentType)
|
|
14
|
+
res.type(contentType);
|
|
15
|
+
res.status(code).send(response);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.ResponseHandler = ResponseHandler;
|
|
20
|
+
//# sourceMappingURL=response-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-handler.js","sourceRoot":"","sources":["../../src/remote-object/response-handler.ts"],"names":[],"mappings":";;;AAOA,MAAa,eAAe;IAI1B,mBAAmB,CACjB,GAAsB,EACtB,QAAa,EACb,eAAgD;QAEhD,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;QACnE,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAA;QACpD,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAA;QAE5E,IAAI,WAAW,IAAI,MAAM,EAAE,CAAC;YAC1B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACjC,CAAC;aAAM,CAAC;YACN,IAAI,WAAW;gBAAE,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;YACtC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACjC,CAAC;IACH,CAAC;CACF;AApBD,0CAoBC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { ServerConfig } from './server-config';
|
|
2
|
+
import { ServerError } from './error';
|
|
3
|
+
import { ServerApiConfigAcl, ServerApiConfigEndpoint } from './api-config';
|
|
4
|
+
import { LoggerInterface, ModelManagerInterface, AclInterface, ErrorTranslator } from './remote-object/interfaces';
|
|
5
|
+
import { ServerBodyParserConfig } from './remote-object/body-parser-configurer';
|
|
6
|
+
export interface ServerRemoteObjectConfig {
|
|
7
|
+
path?: string;
|
|
8
|
+
acl?: ServerApiConfigAcl;
|
|
9
|
+
endpoints?: {
|
|
10
|
+
[key: string]: ServerApiConfigEndpoint;
|
|
11
|
+
};
|
|
12
|
+
server?: Partial<ServerConfig> & {
|
|
13
|
+
[key: string]: any;
|
|
14
|
+
};
|
|
15
|
+
remoteObjectName?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface ServerMiddlewareConfig {
|
|
18
|
+
endpointName: string;
|
|
19
|
+
method: string;
|
|
20
|
+
verb: string;
|
|
21
|
+
path: string;
|
|
22
|
+
callback: Function;
|
|
23
|
+
priority: number;
|
|
24
|
+
bodyParserConfig?: ServerBodyParserConfig;
|
|
25
|
+
}
|
|
26
|
+
export declare class ServerRemoteObject {
|
|
27
|
+
static error: {
|
|
28
|
+
[key: string]: ServerError;
|
|
29
|
+
};
|
|
30
|
+
config: ServerRemoteObjectConfig;
|
|
31
|
+
object: any;
|
|
32
|
+
acl: AclInterface;
|
|
33
|
+
private modelManager?;
|
|
34
|
+
private requestDataParser;
|
|
35
|
+
private bodyParserConfigurer;
|
|
36
|
+
private responseHandler;
|
|
37
|
+
private errorHandler;
|
|
38
|
+
private endpointResolver;
|
|
39
|
+
private middlewareFactory;
|
|
40
|
+
constructor(object: any, config?: ServerRemoteObjectConfig, modelManager?: ModelManagerInterface);
|
|
41
|
+
setLogger(logger: LoggerInterface): this;
|
|
42
|
+
setErrorTranslator(errorTranslator?: ErrorTranslator): this;
|
|
43
|
+
initRouter(router: any): void;
|
|
44
|
+
setAcl(acl: AclInterface): void;
|
|
45
|
+
getMiddlewareConfig(): ServerMiddlewareConfig[];
|
|
46
|
+
}
|
|
47
|
+
export { ServerBodyParserConfig } from './remote-object/body-parser-configurer';
|
|
48
|
+
export { LoggerInterface, ModelManagerInterface, AclInterface, RequestInterface, ResponseInterface, } from './remote-object/interfaces';
|
|
49
|
+
export default ServerRemoteObject;
|
|
50
|
+
//# sourceMappingURL=remote-object.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-object.d.ts","sourceRoot":"","sources":["../src/remote-object.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAwC,MAAM,SAAS,CAAA;AAC3E,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EAExB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,YAAY,EACZ,eAAe,EAChB,MAAM,4BAA4B,CAAA;AAEnC,OAAO,EAEL,sBAAsB,EACvB,MAAM,wCAAwC,CAAA;AAM/C,MAAM,WAAW,wBAAwB;IACvC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,kBAAkB,CAAA;IACxB,SAAS,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,uBAAuB,CAAA;KAAE,CAAA;IACtD,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAA;IACvD,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,QAAQ,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,gBAAgB,CAAC,EAAE,sBAAsB,CAAA;CAC1C;AAMD,qBAAa,kBAAkB;IAC7B,MAAM,CAAC,KAAK,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAA;KAAE,CAAA;IAE5C,MAAM,EAAE,wBAAwB,CAAA;IAChC,MAAM,EAAE,GAAG,CAAA;IACX,GAAG,EAAE,YAAY,CAAA;IACjB,OAAO,CAAC,YAAY,CAAC,CAAuB;IAG5C,OAAO,CAAC,iBAAiB,CAAmB;IAC5C,OAAO,CAAC,oBAAoB,CAAsB;IAClD,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,iBAAiB,CAAmB;gBAG1C,MAAM,EAAE,GAAG,EACX,MAAM,CAAC,EAAE,wBAAwB,EACjC,YAAY,CAAC,EAAE,qBAAqB;IAoCtC,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAKxC,kBAAkB,CAAC,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI;IAO3D,UAAU,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI;IAc7B,MAAM,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI;IAI/B,mBAAmB,IAAI,sBAAsB,EAAE;CA8DhD;AAGD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAA;AAC/E,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,4BAA4B,CAAA;AAEnC,eAAe,kBAAkB,CAAA"}
|