@forklaunch/core 0.1.1 → 0.1.2
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/.prettierignore +2 -0
- package/.prettierrc +6 -0
- package/dist/cache/index.d.ts +3 -0
- package/dist/cache/index.js +20 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/interfaces/ttlCache.interface.d.ts +1 -1
- package/dist/cache/redisTtlCache.d.ts +3 -2
- package/dist/cache/redisTtlCache.js +2 -2
- package/dist/cache/redisTtlCache.js.map +1 -1
- package/dist/cache/types/{ttlCacheRecord.js → ttlCacheRecord.types.js} +1 -1
- package/dist/cache/types/ttlCacheRecord.types.js.map +1 -0
- package/dist/controllers/index.d.ts +1 -0
- package/dist/controllers/index.js +18 -0
- package/dist/controllers/index.js.map +1 -0
- package/dist/database/index.d.ts +1 -0
- package/dist/database/index.js +18 -0
- package/dist/database/index.js.map +1 -0
- package/dist/database/mikro/models/entities/base.entity.js +1 -1
- package/dist/entityMapper/index.d.ts +2 -0
- package/dist/entityMapper/index.js +19 -0
- package/dist/entityMapper/index.js.map +1 -0
- package/dist/entityMapper/interfaces/entityMapper.interface.d.ts +3 -3
- package/dist/entityMapper/models/baseEntityMapper.model.d.ts +23 -23
- package/dist/entityMapper/models/baseEntityMapper.model.js +15 -15
- package/dist/entityMapper/models/baseEntityMapper.model.js.map +1 -1
- package/dist/entityMapper/models/requestEntityMapper.model.d.ts +17 -23
- package/dist/entityMapper/models/requestEntityMapper.model.js +13 -19
- package/dist/entityMapper/models/requestEntityMapper.model.js.map +1 -1
- package/dist/entityMapper/models/responseEntityMapper.model.d.ts +15 -16
- package/dist/entityMapper/models/responseEntityMapper.model.js +8 -8
- package/dist/entityMapper/models/responseEntityMapper.model.js.map +1 -1
- package/dist/entityMapper/types/entityMapper.types.d.ts +3 -22
- package/dist/http/index.d.ts +2 -0
- package/dist/http/index.js +19 -0
- package/dist/http/index.js.map +1 -0
- package/dist/http/middlewares/index.d.ts +2 -0
- package/dist/http/middlewares/index.js +19 -0
- package/dist/http/middlewares/index.js.map +1 -0
- package/dist/http/middlewares/request.middleware.d.ts +11 -11
- package/dist/http/middlewares/request.middleware.js +23 -21
- package/dist/http/middlewares/request.middleware.js.map +1 -1
- package/dist/http/middlewares/response.middleware.d.ts +3 -3
- package/dist/http/middlewares/response.middleware.js +7 -3
- package/dist/http/middlewares/response.middleware.js.map +1 -1
- package/dist/http/types/api.types.d.ts +16 -12
- package/dist/http/types/index.d.ts +2 -0
- package/dist/http/types/index.js +19 -0
- package/dist/http/types/index.js.map +1 -0
- package/dist/http/types/primitive.types.d.ts +14 -13
- package/dist/index.d.ts +6 -1
- package/dist/index.js +20 -5
- package/dist/index.js.map +1 -1
- package/dist/services/index.d.ts +1 -0
- package/dist/services/index.js +18 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/interfaces/baseService.d.ts +1 -1
- package/dist/tests/{dto.test.js → entityMapper.test.js} +10 -32
- package/dist/tests/entityMapper.test.js.map +1 -0
- package/dist/tests/http.middleware.test.d.ts +1 -0
- package/dist/tests/http.middleware.test.js +79 -0
- package/dist/tests/http.middleware.test.js.map +1 -0
- package/dist/tests/redisTtlCache.test.js +32 -15
- package/dist/tests/redisTtlCache.test.js.map +1 -1
- package/entityMapper/index.ts +2 -0
- package/entityMapper/interfaces/entityMapper.interface.ts +11 -11
- package/entityMapper/models/baseEntityMapper.model.ts +90 -73
- package/entityMapper/models/requestEntityMapper.model.ts +96 -75
- package/entityMapper/models/responseEntityMapper.model.ts +83 -62
- package/entityMapper/types/entityMapper.types.ts +6 -23
- package/http/index.ts +2 -0
- package/http/middlewares/index.ts +2 -0
- package/http/middlewares/request.middleware.ts +103 -55
- package/http/middlewares/response.middleware.ts +56 -31
- package/http/types/api.types.ts +43 -25
- package/http/types/index.ts +2 -0
- package/http/types/primitive.types.ts +65 -44
- package/index.ts +6 -5
- package/jest.config.ts +2 -2
- package/package.json +13 -4
- package/tests/entityMapper.test.ts +219 -0
- package/tests/http.middleware.test.ts +99 -0
- package/tests/redisTtlCache.test.ts +49 -29
- package/dist/cache/types/ttlCacheRecord.js.map +0 -1
- package/dist/tests/dto.test.js.map +0 -1
- package/tests/dto.test.ts +0 -235
- /package/dist/cache/types/{ttlCacheRecord.d.ts → ttlCacheRecord.types.d.ts} +0 -0
- /package/dist/tests/{dto.test.d.ts → entityMapper.test.d.ts} +0 -0
@@ -1,28 +1,9 @@
|
|
1
|
-
import {
|
2
|
-
import {
|
3
|
-
import { UnboxedObjectSchema } from "@forklaunch/validator/types";
|
4
|
-
import { BaseEntityMapper } from "../models/baseEntityMapper.model";
|
1
|
+
import { AnySchemaValidator } from '@forklaunch/validator';
|
2
|
+
import { UnboxedObjectSchema } from '@forklaunch/validator/types';
|
5
3
|
/**
|
6
4
|
* Type representing a schema validator object for an entity mapper.
|
7
5
|
*
|
8
6
|
* @template SV - A type that extends SchemaValidator.
|
9
7
|
* @typedef {ValidSchemaObject<SV> | UnboxedObjectSchema<SchemaCatchall<SV>> & {}} EntityMapperSchemaValidatorObject
|
10
8
|
*/
|
11
|
-
export type EntityMapperSchemaValidatorObject<SV extends
|
12
|
-
/**
|
13
|
-
* Type representing the static schema of an entity mapper.
|
14
|
-
*
|
15
|
-
* @template T - A type that extends BaseEntityMapper with a schema property.
|
16
|
-
* @typedef {Schema<T['schema'], T['_SV']> & {}} EntityMapperStaticSchema
|
17
|
-
*/
|
18
|
-
export type EntityMapperStaticSchema<T extends BaseEntityMapper<any> & {
|
19
|
-
schema: any;
|
20
|
-
}> = Schema<T['schema'], T['_SV']>;
|
21
|
-
/**
|
22
|
-
* Type representing the schema of an entity mapper.
|
23
|
-
*
|
24
|
-
* @template T - A type that extends ValidSchemaObject or UnboxedObjectSchema with SchemaCatchall.
|
25
|
-
* @template SV - A type that extends SchemaValidator.
|
26
|
-
* @typedef {Schema<T, SV> & {}} EntityMapperSchema
|
27
|
-
*/
|
28
|
-
export type EntityMapperSchema<T extends ValidSchemaObject<SV> | UnboxedObjectSchema<SchemaCatchall<SV>>, SV extends SchemaValidator> = Schema<T, SV>;
|
9
|
+
export type EntityMapperSchemaValidatorObject<SV extends AnySchemaValidator> = SV['_ValidSchemaObject'] | UnboxedObjectSchema<SV>;
|
@@ -0,0 +1,19 @@
|
|
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("./middlewares"), exports);
|
18
|
+
__exportStar(require("./types"), exports);
|
19
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../http/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,0CAAwB"}
|
@@ -0,0 +1,19 @@
|
|
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("./request.middleware"), exports);
|
18
|
+
__exportStar(require("./response.middleware"), exports);
|
19
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../http/middlewares/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC;AACrC,wDAAsC"}
|
@@ -1,11 +1,11 @@
|
|
1
|
-
import { SchemaValidator } from
|
2
|
-
import { ForklaunchNextFunction, ForklaunchRequest, ForklaunchResponse } from
|
3
|
-
import { HttpContractDetails, PathParamHttpContractDetails, StringOnlyObject } from
|
4
|
-
export declare function createRequestContext<SV extends
|
5
|
-
export declare function enrichRequestDetails<SV extends
|
6
|
-
export declare function preHandlerParse<SV extends
|
7
|
-
export declare function parseRequestParams<SV extends
|
8
|
-
export declare function parseRequestBody<SV extends
|
9
|
-
export declare function parseRequestHeaders<SV extends
|
10
|
-
export declare function parseRequestQuery<SV extends
|
11
|
-
export declare function parseRequestAuth<SV extends
|
1
|
+
import { AnySchemaValidator, SchemaValidator } from '@forklaunch/validator';
|
2
|
+
import { ForklaunchNextFunction, ForklaunchRequest, ForklaunchResponse } from '../types/api.types';
|
3
|
+
import { HttpContractDetails, PathParamHttpContractDetails, StringOnlyObject } from '../types/primitive.types';
|
4
|
+
export declare function createRequestContext<SV extends AnySchemaValidator, Request extends ForklaunchRequest<SV>, Response extends ForklaunchResponse, NextFunction extends ForklaunchNextFunction>(schemaValidator: SV): (req: Request, res: Response, next?: NextFunction) => void;
|
5
|
+
export declare function enrichRequestDetails<SV extends AnySchemaValidator, Request extends ForklaunchRequest<SV>, Response extends ForklaunchResponse, NextFunction extends ForklaunchNextFunction>(contractDetails: PathParamHttpContractDetails<SV> | HttpContractDetails<SV>): (req: Request, _res: Response, next?: NextFunction) => void;
|
6
|
+
export declare function preHandlerParse<SV extends AnySchemaValidator>(schemaValidator: SchemaValidator, object: unknown, schemaInput?: StringOnlyObject<SV>): 400 | undefined;
|
7
|
+
export declare function parseRequestParams<SV extends AnySchemaValidator, Request extends ForklaunchRequest<SV>, Response extends ForklaunchResponse, NextFunction extends ForklaunchNextFunction>(req: Request, res: Response, next?: NextFunction): void;
|
8
|
+
export declare function parseRequestBody<SV extends AnySchemaValidator, Request extends ForklaunchRequest<SV>, Response extends ForklaunchResponse, NextFunction extends ForklaunchNextFunction>(req: Request, res: Response, next?: NextFunction): void;
|
9
|
+
export declare function parseRequestHeaders<SV extends AnySchemaValidator, Request extends ForklaunchRequest<SV>, Response extends ForklaunchResponse, NextFunction extends ForklaunchNextFunction>(req: Request, res: Response, next?: NextFunction): void;
|
10
|
+
export declare function parseRequestQuery<SV extends AnySchemaValidator, Request extends ForklaunchRequest<SV>, Response extends ForklaunchResponse, NextFunction extends ForklaunchNextFunction>(req: Request, res: Response, next?: NextFunction): void;
|
11
|
+
export declare function parseRequestAuth<SV extends AnySchemaValidator, Request extends ForklaunchRequest<SV>, Response extends ForklaunchResponse, NextFunction extends ForklaunchNextFunction>(req: Request, res: Response, next?: NextFunction): Promise<void>;
|
@@ -69,23 +69,23 @@ function preHandlerParse(schemaValidator, object, schemaInput) {
|
|
69
69
|
function parseRequestParams(req, res, next) {
|
70
70
|
const params = req.contractDetails.params;
|
71
71
|
if (preHandlerParse(req.schemaValidator, req.params, params) === 400) {
|
72
|
-
res.status(400).send(
|
72
|
+
res.status(400).send('Invalid request parameters.');
|
73
73
|
if (next) {
|
74
|
-
next(new Error(
|
74
|
+
next(new Error('Invalid request parameters.'));
|
75
75
|
}
|
76
76
|
}
|
77
|
-
;
|
78
77
|
if (next) {
|
79
78
|
next();
|
80
79
|
}
|
81
80
|
}
|
82
81
|
function parseRequestBody(req, res, next) {
|
83
82
|
if (req.headers['content-type'] === 'application/json') {
|
84
|
-
const body = (req.schemaValidator,
|
85
|
-
|
86
|
-
|
83
|
+
const body = (req.schemaValidator,
|
84
|
+
req.contractDetails).body;
|
85
|
+
if (preHandlerParse(req.schemaValidator, req.body, body) === 400) {
|
86
|
+
res.status(400).send('Invalid request body.');
|
87
87
|
if (next) {
|
88
|
-
next(new Error(
|
88
|
+
next(new Error('Invalid request body.'));
|
89
89
|
}
|
90
90
|
}
|
91
91
|
}
|
@@ -96,9 +96,9 @@ function parseRequestBody(req, res, next) {
|
|
96
96
|
function parseRequestHeaders(req, res, next) {
|
97
97
|
const headers = req.contractDetails.requestHeaders;
|
98
98
|
if (preHandlerParse(req.schemaValidator, req.headers, headers) === 400) {
|
99
|
-
res.status(400).send(
|
99
|
+
res.status(400).send('Invalid request headers.');
|
100
100
|
if (next) {
|
101
|
-
next(new Error(
|
101
|
+
next(new Error('Invalid request headers.'));
|
102
102
|
}
|
103
103
|
}
|
104
104
|
if (next) {
|
@@ -108,9 +108,9 @@ function parseRequestHeaders(req, res, next) {
|
|
108
108
|
function parseRequestQuery(req, res, next) {
|
109
109
|
const query = req.contractDetails.query;
|
110
110
|
if (preHandlerParse(req.schemaValidator, req.query, query) === 400) {
|
111
|
-
res.status(400).send(
|
111
|
+
res.status(400).send('Invalid request query.');
|
112
112
|
if (next) {
|
113
|
-
next(new Error(
|
113
|
+
next(new Error('Invalid request query.'));
|
114
114
|
}
|
115
115
|
}
|
116
116
|
if (next) {
|
@@ -119,12 +119,12 @@ function parseRequestQuery(req, res, next) {
|
|
119
119
|
}
|
120
120
|
async function checkAuthorizationToken(authorizationMethod, authorizationString) {
|
121
121
|
if (!authorizationString) {
|
122
|
-
return [401,
|
122
|
+
return [401, 'No Authorization token provided.'];
|
123
123
|
}
|
124
124
|
switch (authorizationMethod) {
|
125
125
|
case 'jwt': {
|
126
126
|
if (!authorizationString.startsWith('Bearer ')) {
|
127
|
-
return [401,
|
127
|
+
return [401, 'Invalid Authorization token format.'];
|
128
128
|
}
|
129
129
|
try {
|
130
130
|
const decodedJwt = await jose.jwtVerify(authorizationString.split(' ')[1], new TextEncoder().encode(process.env.JWT_SECRET || 'your-256-bit-secret'));
|
@@ -132,11 +132,11 @@ async function checkAuthorizationToken(authorizationMethod, authorizationString)
|
|
132
132
|
}
|
133
133
|
catch (error) {
|
134
134
|
console.error(error);
|
135
|
-
return [403,
|
135
|
+
return [403, 'Invalid Authorization token.'];
|
136
136
|
}
|
137
137
|
}
|
138
138
|
default:
|
139
|
-
return [401,
|
139
|
+
return [401, 'Invalid Authorization method.'];
|
140
140
|
}
|
141
141
|
}
|
142
142
|
function mapRoles(authorizationType, authorizationToken) {
|
@@ -158,20 +158,22 @@ async function parseRequestAuth(req, res, next) {
|
|
158
158
|
// TODO: Implement role and permission checking
|
159
159
|
const permissionSlugs = mapPermissions(auth.method, req.headers.authorization);
|
160
160
|
const roles = mapRoles(auth.method, req.headers.authorization);
|
161
|
-
const permissionErrorMessage =
|
162
|
-
const roleErrorMessage =
|
161
|
+
const permissionErrorMessage = 'User does not have sufficient permissions to perform action.';
|
162
|
+
const roleErrorMessage = 'User does not have correct role to perform action.';
|
163
163
|
// this is wrong, we need to check if any of the user's permissions are in the allowed permissions, while checking that any of the permissions is not in the forbidden slugs
|
164
164
|
// currently this is checking if any of the user's permissions are NOT in the allowed permissions
|
165
|
-
permissionSlugs.forEach(permissionSlug => {
|
166
|
-
if (!req.contractDetails.auth?.allowedSlugs?.has(permissionSlug) ||
|
165
|
+
permissionSlugs.forEach((permissionSlug) => {
|
166
|
+
if (!req.contractDetails.auth?.allowedSlugs?.has(permissionSlug) ||
|
167
|
+
req.contractDetails.auth?.forbiddenSlugs?.has(permissionSlug)) {
|
167
168
|
res.status(403).send(permissionErrorMessage);
|
168
169
|
if (next) {
|
169
170
|
next(new Error(permissionErrorMessage));
|
170
171
|
}
|
171
172
|
}
|
172
173
|
});
|
173
|
-
roles.forEach(role => {
|
174
|
-
if (!req.contractDetails.auth?.allowedRoles?.has(role) ||
|
174
|
+
roles.forEach((role) => {
|
175
|
+
if (!req.contractDetails.auth?.allowedRoles?.has(role) ||
|
176
|
+
req.contractDetails.auth?.forbiddenRoles?.has(role)) {
|
175
177
|
res.status(403).send(roleErrorMessage);
|
176
178
|
if (next) {
|
177
179
|
next(new Error(roleErrorMessage));
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"request.middleware.js","sourceRoot":"","sources":["../../../http/middlewares/request.middleware.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;
|
1
|
+
{"version":3,"file":"request.middleware.js","sourceRoot":"","sources":["../../../http/middlewares/request.middleware.ts"],"names":[],"mappings":"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"}
|
@@ -1,3 +1,3 @@
|
|
1
|
-
import {
|
2
|
-
import { ForklaunchNextFunction, ForklaunchRequest, ForklaunchResponse } from
|
3
|
-
export declare function parseResponse<SV extends
|
1
|
+
import { AnySchemaValidator } from '@forklaunch/validator';
|
2
|
+
import { ForklaunchNextFunction, ForklaunchRequest, ForklaunchResponse } from '../types/api.types';
|
3
|
+
export declare function parseResponse<SV extends AnySchemaValidator, Request extends ForklaunchRequest<SV>, Response extends ForklaunchResponse, NextFunction extends ForklaunchNextFunction>(req: Request, res: Response, next?: NextFunction): void;
|
@@ -2,7 +2,10 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.parseResponse = parseResponse;
|
4
4
|
function checkAnyValidation(contractDetails) {
|
5
|
-
return contractDetails.body ||
|
5
|
+
return (contractDetails.body ||
|
6
|
+
contractDetails.params ||
|
7
|
+
contractDetails.requestHeaders ||
|
8
|
+
contractDetails.query);
|
6
9
|
}
|
7
10
|
function parseResponse(req, res, next) {
|
8
11
|
if (req.contractDetails.responseHeaders) {
|
@@ -11,14 +14,15 @@ function parseResponse(req, res, next) {
|
|
11
14
|
}
|
12
15
|
if (res.statusCode === 500 ||
|
13
16
|
(checkAnyValidation(req.contractDetails) && res.statusCode === 400) ||
|
14
|
-
(req.contractDetails.auth &&
|
17
|
+
(req.contractDetails.auth &&
|
18
|
+
(res.statusCode === 401 || res.statusCode === 403))) {
|
19
|
+
req.schemaValidator.validate(req.schemaValidator.string, res.bodyData);
|
15
20
|
return;
|
16
21
|
}
|
17
22
|
if (Object.prototype.hasOwnProperty.call(!req.contractDetails.responses, res.statusCode)) {
|
18
23
|
if (next) {
|
19
24
|
next(new Error(`Response code ${res.statusCode} not defined in contract.`));
|
20
25
|
}
|
21
|
-
;
|
22
26
|
}
|
23
27
|
const schema = req.schemaValidator.schemify(req.contractDetails.responses[res.statusCode]);
|
24
28
|
req.schemaValidator.validate(schema, res.bodyData);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"response.middleware.js","sourceRoot":"","sources":["../../../http/middlewares/response.middleware.ts"],"names":[],"mappings":";;
|
1
|
+
{"version":3,"file":"response.middleware.js","sourceRoot":"","sources":["../../../http/middlewares/response.middleware.ts"],"names":[],"mappings":";;AAmBA,sCA2CC;AAtDD,SAAS,kBAAkB,CACzB,eAAwC;IAExC,OAAO,CACL,eAAe,CAAC,IAAI;QACpB,eAAe,CAAC,MAAM;QACtB,eAAe,CAAC,cAAc;QAC9B,eAAe,CAAC,KAAK,CACtB,CAAC;AACJ,CAAC;AAED,SAAgB,aAAa,CAK3B,GAAY,EAAE,GAAa,EAAE,IAAmB;IAChD,IAAI,GAAG,CAAC,eAAe,CAAC,eAAe,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,GAAG,CAAC,eAAe,CAAC,QAAQ,CACzC,GAAG,CAAC,eAAe,CAAC,eAAe,CACpC,CAAC;QACF,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,IACE,GAAG,CAAC,UAAU,KAAK,GAAG;QACtB,CAAC,kBAAkB,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC;QACnE,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI;YACvB,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,EACrD,CAAC;QACD,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;QACvE,OAAO;IACT,CAAC;IACD,IACE,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAClC,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,EAC9B,GAAG,CAAC,UAAU,CACf,EACD,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CACF,IAAI,KAAK,CAAC,iBAAiB,GAAG,CAAC,UAAU,2BAA2B,CAAC,CACtE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,GAAG,CAAC,eAAe,CAAC,QAAQ,CACzC,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAC9C,CAAC;IACF,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEnD,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;IACT,CAAC;AACH,CAAC"}
|
@@ -1,24 +1,28 @@
|
|
1
|
-
import { Prettify } from
|
2
|
-
import {
|
3
|
-
import { SchemaValidator } from
|
4
|
-
import {
|
5
|
-
import {
|
6
|
-
import {
|
7
|
-
import { HttpContractDetails, ParamsDictionary, PathParamHttpContractDetails } from "./primitive.types";
|
1
|
+
import { Prettify } from '@forklaunch/common';
|
2
|
+
import { AnySchemaValidator, Schema } from '@forklaunch/validator';
|
3
|
+
import { IdiomaticSchema, SchemaValidator } from '@forklaunch/validator/types';
|
4
|
+
import { IncomingHttpHeaders, OutgoingHttpHeader } from 'http';
|
5
|
+
import { ParsedQs } from 'qs';
|
6
|
+
import { HttpContractDetails, ParamsDictionary, PathParamHttpContractDetails } from './primitive.types';
|
8
7
|
export interface RequestContext {
|
9
8
|
correlationId: string;
|
10
9
|
idempotencyKey?: string;
|
11
10
|
}
|
12
|
-
export interface ForklaunchRequest<SV extends
|
11
|
+
export interface ForklaunchRequest<SV extends AnySchemaValidator, P = ParamsDictionary, ReqBody = unknown, ReqQuery = ParsedQs, Headers = IncomingHttpHeaders> {
|
13
12
|
context: Prettify<RequestContext>;
|
14
13
|
contractDetails: HttpContractDetails<SV> | PathParamHttpContractDetails<SV>;
|
15
|
-
schemaValidator:
|
14
|
+
schemaValidator: SchemaValidator;
|
16
15
|
params: P;
|
17
16
|
headers: Headers;
|
18
17
|
body: ReqBody;
|
19
18
|
query: ReqQuery;
|
20
19
|
}
|
21
|
-
export interface ForklaunchResponse<ResBody =
|
20
|
+
export interface ForklaunchResponse<ResBody = {
|
21
|
+
400: unknown;
|
22
|
+
401: unknown;
|
23
|
+
403: unknown;
|
24
|
+
500: unknown;
|
25
|
+
}, StatusCode = number> {
|
22
26
|
bodyData: unknown;
|
23
27
|
statusCode: StatusCode;
|
24
28
|
corked: boolean;
|
@@ -43,7 +47,7 @@ export interface ForklaunchResponse<ResBody = any, StatusCode = number> {
|
|
43
47
|
<T>(body?: ResBody): T;
|
44
48
|
};
|
45
49
|
}
|
46
|
-
export type MapSchema<SV extends
|
50
|
+
export type MapSchema<SV extends AnySchemaValidator, T extends IdiomaticSchema<SV> | SV['_ValidSchemaObject']> = Schema<T, SV> extends infer U ? {
|
47
51
|
[key: string]: unknown;
|
48
52
|
} extends U ? never : U : never;
|
49
|
-
export type ForklaunchNextFunction = (err?:
|
53
|
+
export type ForklaunchNextFunction = (err?: unknown) => void;
|
@@ -0,0 +1,19 @@
|
|
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("./api.types"), exports);
|
18
|
+
__exportStar(require("./primitive.types"), exports);
|
19
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../http/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,oDAAkC"}
|
@@ -1,19 +1,20 @@
|
|
1
|
-
import {
|
2
|
-
import {
|
3
|
-
import { UnboxedObjectSchema } from "@forklaunch/validator/types";
|
1
|
+
import { AnySchemaValidator } from '@forklaunch/validator';
|
2
|
+
import { UnboxedObjectSchema } from '@forklaunch/validator/types';
|
4
3
|
export type ParamsDictionary = {
|
5
4
|
[key: string]: string;
|
6
5
|
};
|
7
|
-
export type StringOnlyObject<SV extends
|
8
|
-
export type NumberOnlyObject<SV extends
|
9
|
-
export type BodyObject<SV extends
|
10
|
-
export type ParamsObject<SV extends
|
11
|
-
export type QueryObject<SV extends
|
12
|
-
export type HeadersObject<SV extends
|
13
|
-
export type ResponsesObject<SV extends
|
14
|
-
|
6
|
+
export type StringOnlyObject<SV extends AnySchemaValidator> = Omit<UnboxedObjectSchema<SV>, number | symbol>;
|
7
|
+
export type NumberOnlyObject<SV extends AnySchemaValidator> = Omit<UnboxedObjectSchema<SV>, string | symbol>;
|
8
|
+
export type BodyObject<SV extends AnySchemaValidator> = StringOnlyObject<SV> & unknown;
|
9
|
+
export type ParamsObject<SV extends AnySchemaValidator> = StringOnlyObject<SV> & unknown;
|
10
|
+
export type QueryObject<SV extends AnySchemaValidator> = StringOnlyObject<SV> & unknown;
|
11
|
+
export type HeadersObject<SV extends AnySchemaValidator> = StringOnlyObject<SV> & unknown;
|
12
|
+
export type ResponsesObject<SV extends AnySchemaValidator> = {
|
13
|
+
[key: number]: SV['_ValidSchemaObject'] | UnboxedObjectSchema<SV> | string | SV['string'];
|
14
|
+
} & unknown;
|
15
|
+
export type Body<SV extends AnySchemaValidator> = BodyObject<SV> | SV['_ValidSchemaObject'] | SV['_SchemaCatchall'];
|
15
16
|
export type AuthMethod = 'jwt' | 'session';
|
16
|
-
export interface PathParamHttpContractDetails<SV extends
|
17
|
+
export interface PathParamHttpContractDetails<SV extends AnySchemaValidator, ParamSchemas extends ParamsObject<SV> = ParamsObject<SV>, ResponseSchemas extends ResponsesObject<SV> = ResponsesObject<SV>, QuerySchemas extends QueryObject<SV> = QueryObject<SV>> {
|
17
18
|
name: string;
|
18
19
|
summary: string;
|
19
20
|
responses: ResponseSchemas;
|
@@ -29,7 +30,7 @@ export interface PathParamHttpContractDetails<SV extends SchemaValidator, ParamS
|
|
29
30
|
forbiddenRoles?: Set<string>;
|
30
31
|
};
|
31
32
|
}
|
32
|
-
export interface HttpContractDetails<SV extends
|
33
|
+
export interface HttpContractDetails<SV extends AnySchemaValidator, ParamSchemas extends ParamsObject<SV> = ParamsObject<SV>, ResponseSchemas extends ResponsesObject<SV> = ResponsesObject<SV>, BodySchema extends Body<SV> = Body<SV>, QuerySchemas extends QueryObject<SV> = QueryObject<SV>> extends PathParamHttpContractDetails<SV, ParamSchemas, ResponseSchemas, QuerySchemas> {
|
33
34
|
body?: BodySchema;
|
34
35
|
contentType?: 'application/json' | 'multipart/form-data' | 'application/x-www-form-urlencoded';
|
35
36
|
}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
@@ -1,8 +1,23 @@
|
|
1
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
|
+
};
|
2
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
17
|
+
__exportStar(require("./cache"), exports);
|
18
|
+
__exportStar(require("./controllers"), exports);
|
19
|
+
__exportStar(require("./database"), exports);
|
20
|
+
__exportStar(require("./entityMapper"), exports);
|
21
|
+
__exportStar(require("./http"), exports);
|
22
|
+
__exportStar(require("./services"), exports);
|
8
23
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,gDAA8B;AAC9B,6CAA2B;AAC3B,iDAA+B;AAC/B,yCAAuB;AACvB,6CAA2B"}
|
@@ -0,0 +1 @@
|
|
1
|
+
export * from './interfaces/baseService';
|
@@ -0,0 +1,18 @@
|
|
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/baseService"), exports);
|
18
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2DAAyC"}
|
@@ -8,34 +8,11 @@ class TestEntity extends base_entity_1.BaseEntity {
|
|
8
8
|
name;
|
9
9
|
age;
|
10
10
|
}
|
11
|
-
class T extends requestEntityMapper_model_1.RequestEntityMapper {
|
12
|
-
toEntity(...additionalArgs) {
|
13
|
-
const entity = new TestEntity();
|
14
|
-
entity.id = this.dto.id;
|
15
|
-
entity.name = this.dto.name;
|
16
|
-
entity.age = this.dto.age;
|
17
|
-
return entity;
|
18
|
-
}
|
19
|
-
schema = {
|
20
|
-
id: typebox_1.string,
|
21
|
-
name: typebox_1.string,
|
22
|
-
age: typebox_1.number
|
23
|
-
};
|
24
|
-
}
|
25
|
-
const y = new T(new typebox_1.TypeboxSchemaValidator());
|
26
|
-
y.fromJson({ id: '123', name: 'test', age: 1 });
|
27
|
-
var x = { id: '123', name: 'test', age: 1 };
|
28
|
-
T.fromJson(new typebox_1.TypeboxSchemaValidator(), x);
|
29
|
-
T.fromJson(new typebox_1.TypeboxSchemaValidator(), {
|
30
|
-
id: '123',
|
31
|
-
name: 'test',
|
32
|
-
age: 1
|
33
|
-
});
|
34
11
|
class TestRequestEntityMapper extends requestEntityMapper_model_1.RequestEntityMapper {
|
35
12
|
schema = {
|
36
13
|
id: typebox_1.string,
|
37
14
|
name: typebox_1.string,
|
38
|
-
age: typebox_1.number
|
15
|
+
age: typebox_1.number
|
39
16
|
};
|
40
17
|
toEntity(...additionalArgs) {
|
41
18
|
const entity = new TestEntity();
|
@@ -77,14 +54,14 @@ describe('Request Entity Mapper Test', () => {
|
|
77
54
|
const json = {
|
78
55
|
id: '123',
|
79
56
|
name: 'test',
|
80
|
-
age: 1
|
57
|
+
age: 1
|
81
58
|
};
|
82
59
|
const responseEM = TestRequestEM.fromJson(json);
|
83
60
|
const staticEM = TestRequestEntityMapper.fromJson(new typebox_1.TypeboxSchemaValidator(), json);
|
84
61
|
const expectedDto = {
|
85
62
|
id: '123',
|
86
63
|
name: 'test',
|
87
|
-
age: 1
|
64
|
+
age: 1
|
88
65
|
};
|
89
66
|
expect(staticEM.dto).toEqual(expectedDto);
|
90
67
|
expect(responseEM.dto).toEqual(expectedDto);
|
@@ -94,7 +71,7 @@ describe('Request Entity Mapper Test', () => {
|
|
94
71
|
const json = {
|
95
72
|
id: '123',
|
96
73
|
name: 'test',
|
97
|
-
age: 1
|
74
|
+
age: 1
|
98
75
|
};
|
99
76
|
const entity = extractNonTimeBasedEntityFields(TestRequestEM.deserializeJsonToEntity(json));
|
100
77
|
const objectEntity = extractNonTimeBasedEntityFields(TestRequestEM.fromJson(json).toEntity());
|
@@ -115,12 +92,13 @@ describe('Request Entity Mapper Test', () => {
|
|
115
92
|
test('Serialization Failure', async () => {
|
116
93
|
const json = {
|
117
94
|
id: '123',
|
118
|
-
name: 'test'
|
95
|
+
name: 'test'
|
119
96
|
};
|
120
97
|
// @ts-expect-error
|
121
98
|
expect(() => TestRequestEM.fromJson(json)).toThrow();
|
99
|
+
expect(() =>
|
122
100
|
// @ts-expect-error
|
123
|
-
|
101
|
+
TestRequestEntityMapper.fromJson(new typebox_1.TypeboxSchemaValidator(), json)).toThrow();
|
124
102
|
});
|
125
103
|
});
|
126
104
|
describe('Response Entity Mapper Test', () => {
|
@@ -141,7 +119,7 @@ describe('Response Entity Mapper Test', () => {
|
|
141
119
|
const expectedDto = {
|
142
120
|
id: '123',
|
143
121
|
name: 'test',
|
144
|
-
age: 1
|
122
|
+
age: 1
|
145
123
|
};
|
146
124
|
expect(staticEM.dto).toEqual(expectedDto);
|
147
125
|
expect(responseEM.dto).toEqual(expectedDto);
|
@@ -158,7 +136,7 @@ describe('Response Entity Mapper Test', () => {
|
|
158
136
|
const expectedJson = {
|
159
137
|
id: '123',
|
160
138
|
name: 'test',
|
161
|
-
age: 1
|
139
|
+
age: 1
|
162
140
|
};
|
163
141
|
expect(json).toEqual(expectedJson);
|
164
142
|
expect(objectJson).toEqual(expectedJson);
|
@@ -176,4 +154,4 @@ describe('Response Entity Mapper Test', () => {
|
|
176
154
|
expect(() => TestResponseEntityMapper.fromEntity(new typebox_1.TypeboxSchemaValidator(), entity).toJson()).toThrow();
|
177
155
|
});
|
178
156
|
});
|
179
|
-
//# sourceMappingURL=
|
157
|
+
//# sourceMappingURL=entityMapper.test.js.map
|