@privateaim/server-http-kit 0.7.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/CHANGELOG.md +68 -0
- package/LICENSE +202 -0
- package/README.md +6 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/middlewares/basic.d.ts +3 -0
- package/dist/middlewares/basic.d.ts.map +1 -0
- package/dist/middlewares/basic.js +14 -0
- package/dist/middlewares/basic.js.map +1 -0
- package/dist/middlewares/cors.d.ts +3 -0
- package/dist/middlewares/cors.d.ts.map +1 -0
- package/dist/middlewares/cors.js +23 -0
- package/dist/middlewares/cors.js.map +1 -0
- package/dist/middlewares/decorators.d.ts +4 -0
- package/dist/middlewares/decorators.d.ts.map +1 -0
- package/dist/middlewares/decorators.js +39 -0
- package/dist/middlewares/decorators.js.map +1 -0
- package/dist/middlewares/error.d.ts +3 -0
- package/dist/middlewares/error.d.ts.map +1 -0
- package/dist/middlewares/error.js +50 -0
- package/dist/middlewares/error.js.map +1 -0
- package/dist/middlewares/force-logged-in.d.ts +6 -0
- package/dist/middlewares/force-logged-in.d.ts.map +1 -0
- package/dist/middlewares/force-logged-in.js +22 -0
- package/dist/middlewares/force-logged-in.js.map +1 -0
- package/dist/middlewares/index.d.ts +9 -0
- package/dist/middlewares/index.d.ts.map +1 -0
- package/dist/middlewares/index.js +31 -0
- package/dist/middlewares/index.js.map +1 -0
- package/dist/middlewares/module.d.ts +4 -0
- package/dist/middlewares/module.d.ts.map +1 -0
- package/dist/middlewares/module.js +46 -0
- package/dist/middlewares/module.js.map +1 -0
- package/dist/middlewares/prometheus.d.ts +3 -0
- package/dist/middlewares/prometheus.d.ts.map +1 -0
- package/dist/middlewares/prometheus.js +14 -0
- package/dist/middlewares/prometheus.js.map +1 -0
- package/dist/middlewares/rate-limit.d.ts +3 -0
- package/dist/middlewares/rate-limit.d.ts.map +1 -0
- package/dist/middlewares/rate-limit.js +40 -0
- package/dist/middlewares/rate-limit.js.map +1 -0
- package/dist/middlewares/swagger.d.ts +4 -0
- package/dist/middlewares/swagger.d.ts.map +1 -0
- package/dist/middlewares/swagger.js +29 -0
- package/dist/middlewares/swagger.js.map +1 -0
- package/dist/middlewares/types.d.ts +20 -0
- package/dist/middlewares/types.d.ts.map +1 -0
- package/dist/middlewares/types.js +9 -0
- package/dist/middlewares/types.js.map +1 -0
- package/dist/request/env.d.ts +6 -0
- package/dist/request/env.d.ts.map +1 -0
- package/dist/request/env.js +21 -0
- package/dist/request/env.js.map +1 -0
- package/dist/request/index.d.ts +3 -0
- package/dist/request/index.d.ts.map +1 -0
- package/dist/request/index.js +25 -0
- package/dist/request/index.js.map +1 -0
- package/dist/request/types.d.ts +15 -0
- package/dist/request/types.d.ts.map +1 -0
- package/dist/request/types.js +9 -0
- package/dist/request/types.js.map +1 -0
- package/dist/services/authup/index.d.ts +3 -0
- package/dist/services/authup/index.d.ts.map +1 -0
- package/dist/services/authup/index.js +25 -0
- package/dist/services/authup/index.js.map +1 -0
- package/dist/services/authup/middleware.d.ts +4 -0
- package/dist/services/authup/middleware.d.ts.map +1 -0
- package/dist/services/authup/middleware.js +86 -0
- package/dist/services/authup/middleware.js.map +1 -0
- package/dist/services/authup/types.d.ts +10 -0
- package/dist/services/authup/types.d.ts.map +1 -0
- package/dist/services/authup/types.js +9 -0
- package/dist/services/authup/types.js.map +1 -0
- package/dist/services/authup/utils.d.ts +7 -0
- package/dist/services/authup/utils.d.ts.map +1 -0
- package/dist/services/authup/utils.js +59 -0
- package/dist/services/authup/utils.js.map +1 -0
- package/dist/services/index.d.ts +2 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +24 -0
- package/dist/services/index.js.map +1 -0
- package/dist/swagger/index.d.ts +2 -0
- package/dist/swagger/index.d.ts.map +1 -0
- package/dist/swagger/index.js +24 -0
- package/dist/swagger/index.js.map +1 -0
- package/dist/swagger/module.d.ts +3 -0
- package/dist/swagger/module.d.ts.map +1 -0
- package/dist/swagger/module.js +66 -0
- package/dist/swagger/module.js.map +1 -0
- package/dist/swagger/types.d.ts +7 -0
- package/dist/swagger/types.d.ts.map +1 -0
- package/dist/swagger/types.js +9 -0
- package/dist/swagger/types.js.map +1 -0
- package/dist/utils/boolable-to-object.d.ts +2 -0
- package/dist/utils/boolable-to-object.d.ts.map +1 -0
- package/dist/utils/boolable-to-object.js +16 -0
- package/dist/utils/boolable-to-object.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +24 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/validation/index.d.ts +5 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +27 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/message.d.ts +2 -0
- package/dist/validation/message.d.ts.map +1 -0
- package/dist/validation/message.js +17 -0
- package/dist/validation/message.js.map +1 -0
- package/dist/validation/module.d.ts +6 -0
- package/dist/validation/module.d.ts.map +1 -0
- package/dist/validation/module.js +45 -0
- package/dist/validation/module.js.map +1 -0
- package/dist/validation/result.d.ts +7 -0
- package/dist/validation/result.d.ts.map +1 -0
- package/dist/validation/result.js +43 -0
- package/dist/validation/result.js.map +1 -0
- package/dist/validation/type.d.ts +15 -0
- package/dist/validation/type.d.ts.map +1 -0
- package/dist/validation/type.js +9 -0
- package/dist/validation/type.js.map +1 -0
- package/package.json +49 -0
- package/src/index.ts +12 -0
- package/src/middlewares/basic.ts +13 -0
- package/src/middlewares/cors.ts +19 -0
- package/src/middlewares/decorators.ts +42 -0
- package/src/middlewares/error.ts +55 -0
- package/src/middlewares/force-logged-in.ts +26 -0
- package/src/middlewares/index.ts +15 -0
- package/src/middlewares/module.ts +53 -0
- package/src/middlewares/prometheus.ts +13 -0
- package/src/middlewares/rate-limit.ts +47 -0
- package/src/middlewares/swagger.ts +26 -0
- package/src/middlewares/types.ts +30 -0
- package/src/request/env.ts +28 -0
- package/src/request/index.ts +9 -0
- package/src/request/types.ts +22 -0
- package/src/services/authup/index.ts +9 -0
- package/src/services/authup/middleware.ts +110 -0
- package/src/services/authup/types.ts +17 -0
- package/src/services/authup/utils.ts +79 -0
- package/src/services/index.ts +8 -0
- package/src/swagger/index.ts +8 -0
- package/src/swagger/module.ts +67 -0
- package/src/swagger/types.ts +13 -0
- package/src/utils/boolable-to-object.ts +14 -0
- package/src/utils/index.ts +8 -0
- package/src/validation/index.ts +11 -0
- package/src/validation/message.ts +17 -0
- package/src/validation/module.ts +49 -0
- package/src/validation/result.ts +58 -0
- package/src/validation/type.ts +28 -0
- package/tsconfig.build.json +11 -0
- package/tsconfig.json +9 -0
- package/writable/.gitkeep +0 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2022-2024.
|
|
3
|
+
* Author Peter Placzek (tada5hi)
|
|
4
|
+
* For the full copyright and license information,
|
|
5
|
+
* view the LICENSE file that was distributed with this source code.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { BadRequestError } from '@ebec/http';
|
|
9
|
+
import type { Result, ValidationError } from 'express-validator';
|
|
10
|
+
import { buildHTTPValidationErrorMessage } from './message';
|
|
11
|
+
|
|
12
|
+
export class HTTPValidationError extends BadRequestError {
|
|
13
|
+
constructor(validation: Result<ValidationError>) {
|
|
14
|
+
const errors : ValidationError[] = validation.array();
|
|
15
|
+
|
|
16
|
+
const parameterNames = [];
|
|
17
|
+
for (let i = 0; i < errors.length; i++) {
|
|
18
|
+
const item = errors[i];
|
|
19
|
+
|
|
20
|
+
switch (item.type) {
|
|
21
|
+
case 'field': {
|
|
22
|
+
parameterNames.push(item.path);
|
|
23
|
+
break;
|
|
24
|
+
}
|
|
25
|
+
case 'alternative': {
|
|
26
|
+
parameterNames.push(item.nestedErrors.map(
|
|
27
|
+
((el) => el.path),
|
|
28
|
+
).join('|'));
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
let message : string;
|
|
35
|
+
|
|
36
|
+
if (parameterNames.length > 0) {
|
|
37
|
+
message = buildHTTPValidationErrorMessage(Array.from(new Set(parameterNames)));
|
|
38
|
+
} else {
|
|
39
|
+
message = 'An unexpected validation error occurred.';
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
super({
|
|
43
|
+
message,
|
|
44
|
+
data: {
|
|
45
|
+
errors,
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2022-2024.
|
|
3
|
+
* Author Peter Placzek (tada5hi)
|
|
4
|
+
* For the full copyright and license information,
|
|
5
|
+
* view the LICENSE file that was distributed with this source code.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { BadRequestError } from '@ebec/http';
|
|
9
|
+
import { deleteUndefinedObjectProperties } from '@privateaim/kit';
|
|
10
|
+
import type { MatchedDataOptions } from 'express-validator';
|
|
11
|
+
import { matchedData, validationResult } from 'express-validator';
|
|
12
|
+
import type { Request } from 'routup';
|
|
13
|
+
import type { EntityTarget } from 'typeorm';
|
|
14
|
+
import { useDataSource } from 'typeorm-extension';
|
|
15
|
+
import { buildHTTPValidationErrorMessage } from './message';
|
|
16
|
+
import { HTTPValidationError } from './module';
|
|
17
|
+
import type { HTTPValidationExtendKeys, HTTPValidationResult } from './type';
|
|
18
|
+
|
|
19
|
+
export function createHTTPValidationResult<
|
|
20
|
+
R extends Record<string, any>,
|
|
21
|
+
M extends Record<string, any> = Record<string, any>,
|
|
22
|
+
>(req: Request, options: Partial<MatchedDataOptions> = {}) : HTTPValidationResult<R, M> {
|
|
23
|
+
const validation = validationResult(req);
|
|
24
|
+
if (!validation.isEmpty()) {
|
|
25
|
+
throw new HTTPValidationError(validation);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return {
|
|
29
|
+
data: deleteUndefinedObjectProperties(matchedData(req, {
|
|
30
|
+
includeOptionals: true,
|
|
31
|
+
...options,
|
|
32
|
+
})) as R,
|
|
33
|
+
meta: {} as M,
|
|
34
|
+
relation: {},
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export async function extendHTTPValidationResultWithRelation<
|
|
39
|
+
R extends Record<string, any>,
|
|
40
|
+
>(
|
|
41
|
+
result: HTTPValidationResult<R>,
|
|
42
|
+
target: EntityTarget<any>,
|
|
43
|
+
keys: HTTPValidationExtendKeys<R>,
|
|
44
|
+
) : Promise<HTTPValidationResult<R>> {
|
|
45
|
+
if (result.data[keys.id]) {
|
|
46
|
+
const dataSource = await useDataSource();
|
|
47
|
+
|
|
48
|
+
const repository = dataSource.getRepository(target);
|
|
49
|
+
const entity = await repository.findOneBy({ id: result.data[keys.id] });
|
|
50
|
+
if (!entity) {
|
|
51
|
+
throw new BadRequestError(buildHTTPValidationErrorMessage(keys.id));
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
result.relation[keys.entity as keyof HTTPValidationResult<R>['relation']] = entity;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2022-2024.
|
|
3
|
+
* Author Peter Placzek (tada5hi)
|
|
4
|
+
* For the full copyright and license information,
|
|
5
|
+
* view the LICENSE file that was distributed with this source code.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export type HTTPValidationResultMetaKey<T extends Record<string, any>> = ({
|
|
9
|
+
[K in keyof T]?: T[K] extends Record<string, any> ?
|
|
10
|
+
T[K] extends Date ? never : K :
|
|
11
|
+
never
|
|
12
|
+
})[keyof T];
|
|
13
|
+
|
|
14
|
+
export type HTTPValidationResult<
|
|
15
|
+
T extends Record<string, any>,
|
|
16
|
+
M extends Record<string, any> = Record<string, any>,
|
|
17
|
+
> = {
|
|
18
|
+
data: Partial<T>,
|
|
19
|
+
relation: {
|
|
20
|
+
[K in HTTPValidationResultMetaKey<T>]?: T[K]
|
|
21
|
+
},
|
|
22
|
+
meta: M
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export type HTTPValidationExtendKeys<T extends Record<string, any>> = {
|
|
26
|
+
id: keyof T,
|
|
27
|
+
entity: HTTPValidationResultMetaKey<T>
|
|
28
|
+
};
|
package/tsconfig.json
ADDED
|
File without changes
|