temba 0.28.0 → 0.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/package.json +1 -1
- package/requestHandlers/types.d.ts +4 -2
- package/requestHandlers/types.d.ts.map +1 -1
- package/resourceRouter.d.ts.map +1 -1
- package/resourceRouter.js +73 -45
- package/resourceRouter.js.map +1 -1
- package/urls/urlParser.d.ts.map +1 -1
- package/urls/urlParser.js +0 -2
- package/urls/urlParser.js.map +1 -1
package/README.md
CHANGED
|
@@ -123,7 +123,9 @@ Request bodies sent with a `POST`, `PATCH`, and `PUT` requests are valid when th
|
|
|
123
123
|
|
|
124
124
|
Any valid formatted JSON is accepted and stored. If you want to validate or even change the JSON in the request bodies, check out [JSON Schema request body validation](#json-schema-request-body-validation) and the [`requestInterceptor`](#request-validation-or-mutation).
|
|
125
125
|
|
|
126
|
-
IDs are auto generated when creating resources.
|
|
126
|
+
IDs are auto generated when creating resources.
|
|
127
|
+
|
|
128
|
+
Providing IDs in the request body of `POST`, `PUT`, or `PATCH` requests is not allowed and will return a `400 Bad Request` response. The same applies to adding an ID in a `POST` request URL, or omitting an ID in a `PUT` or `PATCH` request URL.
|
|
127
129
|
|
|
128
130
|
## Usage
|
|
129
131
|
|
package/package.json
CHANGED
|
@@ -3,10 +3,12 @@ export type UrlInfo = {
|
|
|
3
3
|
id: string | null;
|
|
4
4
|
};
|
|
5
5
|
export type RequestInfo = {
|
|
6
|
-
resource: string;
|
|
7
6
|
id: string | null;
|
|
7
|
+
resource: string;
|
|
8
|
+
body: unknown | null;
|
|
9
|
+
host: string | null;
|
|
10
|
+
protocol: string | null;
|
|
8
11
|
};
|
|
9
|
-
export type RequestInfoWithoutId = Omit<RequestInfo, 'id'>;
|
|
10
12
|
export type ErrorResponse = {
|
|
11
13
|
message: string;
|
|
12
14
|
status: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/requestHandlers/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/requestHandlers/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG;IACtC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG;IACvC,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG;IACtC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,OAAO,CAAA;CACd,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,CAAA;AAErC,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG;IACzC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACjC,CAAA"}
|
package/resourceRouter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resourceRouter.d.ts","sourceRoot":"","sources":["../../src/resourceRouter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resourceRouter.d.ts","sourceRoot":"","sources":["../../src/resourceRouter.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAkE5C,eAAO,MAAM,oBAAoB,YACtB,OAAO,WACP,eAAe,gBACV,YAAY,+CAqI3B,CAAA"}
|
package/resourceRouter.js
CHANGED
|
@@ -1,24 +1,60 @@
|
|
|
1
1
|
import express from 'express';
|
|
2
2
|
import { getRequestHandler } from './requestHandlers/index.js';
|
|
3
3
|
import { parseUrl } from './urls/urlParser.js';
|
|
4
|
+
const isError = (request) => {
|
|
5
|
+
return 'status' in request;
|
|
6
|
+
};
|
|
7
|
+
const createError = (status, message) => {
|
|
8
|
+
return { status, message };
|
|
9
|
+
};
|
|
10
|
+
const validateIdInUrlRequired = (requestInfo) => {
|
|
11
|
+
return !requestInfo.id ? createError(400, 'Please provide an id in the URL') : requestInfo;
|
|
12
|
+
};
|
|
13
|
+
const validateIdInUrlNotAllowed = (requestInfo) => {
|
|
14
|
+
return requestInfo.id ? createError(400, 'An id is not allowed in the URL') : requestInfo;
|
|
15
|
+
};
|
|
16
|
+
const validateIdInRequestBodyNotAllowed = (requestInfo) => {
|
|
17
|
+
return requestInfo.body && typeof requestInfo.body === 'object' && 'id' in requestInfo.body
|
|
18
|
+
? createError(400, 'An id is not allowed in the request body')
|
|
19
|
+
: requestInfo;
|
|
20
|
+
};
|
|
21
|
+
const convertToGetRequest = (requestInfo) => {
|
|
22
|
+
return {
|
|
23
|
+
id: requestInfo.id,
|
|
24
|
+
resource: requestInfo.resource,
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
const convertToPostRequest = (requestInfo) => {
|
|
28
|
+
return {
|
|
29
|
+
resource: requestInfo.resource,
|
|
30
|
+
body: requestInfo.body ?? {},
|
|
31
|
+
protocol: requestInfo.protocol,
|
|
32
|
+
host: requestInfo.host,
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
const convertToPutRequest = (requestInfo) => {
|
|
36
|
+
return {
|
|
37
|
+
id: requestInfo.id,
|
|
38
|
+
resource: requestInfo.resource,
|
|
39
|
+
body: requestInfo.body ?? {},
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
const convertToPatchRequest = convertToPutRequest;
|
|
43
|
+
const convertToDeleteRequest = (requestInfo) => {
|
|
44
|
+
return {
|
|
45
|
+
id: requestInfo.id,
|
|
46
|
+
resource: requestInfo.resource,
|
|
47
|
+
};
|
|
48
|
+
};
|
|
4
49
|
export const createResourceRouter = (queries, schemas, routerConfig) => {
|
|
5
50
|
const getUrlInfo = (baseUrl) => {
|
|
6
51
|
const url = routerConfig.apiPrefix ? baseUrl.replace(routerConfig.apiPrefix, '') : baseUrl;
|
|
7
52
|
return parseUrl(url);
|
|
8
53
|
};
|
|
9
|
-
const
|
|
10
|
-
const urlInfo = getUrlInfo(req.baseUrl);
|
|
11
|
-
if (!urlInfo.resource)
|
|
12
|
-
return null;
|
|
13
|
-
return {
|
|
14
|
-
id: urlInfo.id,
|
|
15
|
-
resource: urlInfo.resource,
|
|
16
|
-
};
|
|
17
|
-
};
|
|
18
|
-
const parsePostRequest = (req) => {
|
|
54
|
+
const parseRequest = (req) => {
|
|
19
55
|
const urlInfo = getUrlInfo(req.baseUrl);
|
|
20
|
-
if (!urlInfo.resource)
|
|
21
|
-
return
|
|
56
|
+
if (!urlInfo.resource || urlInfo.resource.trim().length === 0)
|
|
57
|
+
return createError(400, 'Unknown resource');
|
|
22
58
|
const host = req.get('host') || null;
|
|
23
59
|
const protocol = host ? req.protocol : null;
|
|
24
60
|
return {
|
|
@@ -29,27 +65,12 @@ export const createResourceRouter = (queries, schemas, routerConfig) => {
|
|
|
29
65
|
protocol,
|
|
30
66
|
};
|
|
31
67
|
};
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
return
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
return {
|
|
39
|
-
id: urlInfo.id,
|
|
40
|
-
resource: urlInfo.resource,
|
|
41
|
-
body: req.body,
|
|
42
|
-
};
|
|
43
|
-
};
|
|
44
|
-
const parsePatchRequest = parsePutRequest;
|
|
45
|
-
const parseDeleteRequest = (req) => {
|
|
46
|
-
const urlInfo = getUrlInfo(req.baseUrl);
|
|
47
|
-
if (!urlInfo.resource)
|
|
48
|
-
return null;
|
|
49
|
-
return {
|
|
50
|
-
id: urlInfo.id,
|
|
51
|
-
resource: urlInfo.resource,
|
|
52
|
-
};
|
|
68
|
+
const validateResource = (requestInfo) => {
|
|
69
|
+
if (routerConfig.validateResources &&
|
|
70
|
+
!routerConfig.resources.includes((requestInfo.resource ?? '').toLowerCase())) {
|
|
71
|
+
return createError(400, 'Invalid resource');
|
|
72
|
+
}
|
|
73
|
+
return requestInfo;
|
|
53
74
|
};
|
|
54
75
|
const sendResponse = (tembaResponse, res) => {
|
|
55
76
|
res.status(tembaResponse.status);
|
|
@@ -61,34 +82,41 @@ export const createResourceRouter = (queries, schemas, routerConfig) => {
|
|
|
61
82
|
res.json(tembaResponse.body);
|
|
62
83
|
res.end();
|
|
63
84
|
};
|
|
64
|
-
const handle = async (expressRequest, expressResponse,
|
|
85
|
+
const handle = async (expressRequest, expressResponse, validators, convert, handleRequest) => {
|
|
65
86
|
const requestInfo = parseRequest(expressRequest);
|
|
66
|
-
if (
|
|
67
|
-
(
|
|
68
|
-
|
|
69
|
-
return expressResponse.status(404).json({
|
|
70
|
-
message: 'Unknown resource',
|
|
87
|
+
if (isError(requestInfo)) {
|
|
88
|
+
return expressResponse.status(requestInfo.status).json({
|
|
89
|
+
message: requestInfo.message,
|
|
71
90
|
});
|
|
72
91
|
}
|
|
73
|
-
const
|
|
92
|
+
for (const validator of [validators].flat()) {
|
|
93
|
+
const validationResult = validator(requestInfo);
|
|
94
|
+
if (isError(validationResult)) {
|
|
95
|
+
return expressResponse.status(validationResult.status).json({
|
|
96
|
+
message: validationResult.message,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
const convertedRequest = convert(requestInfo);
|
|
101
|
+
const response = await handleRequest(convertedRequest);
|
|
74
102
|
sendResponse(response, expressResponse);
|
|
75
103
|
};
|
|
76
104
|
const requestHandler = getRequestHandler(queries, schemas, routerConfig);
|
|
77
105
|
const resourceRouter = express.Router();
|
|
78
106
|
resourceRouter.get('*', async (expressRequest, expressResponse) => {
|
|
79
|
-
await handle(expressRequest, expressResponse,
|
|
107
|
+
await handle(expressRequest, expressResponse, validateResource, convertToGetRequest, requestHandler.handleGet);
|
|
80
108
|
});
|
|
81
109
|
resourceRouter.post('*', async (expressRequest, expressResponse) => {
|
|
82
|
-
await handle(expressRequest, expressResponse,
|
|
110
|
+
await handle(expressRequest, expressResponse, [validateResource, validateIdInUrlNotAllowed, validateIdInRequestBodyNotAllowed], convertToPostRequest, requestHandler.handlePost);
|
|
83
111
|
});
|
|
84
112
|
resourceRouter.put('*', async (expressRequest, expressResponse) => {
|
|
85
|
-
await handle(expressRequest, expressResponse,
|
|
113
|
+
await handle(expressRequest, expressResponse, [validateResource, validateIdInUrlRequired, validateIdInRequestBodyNotAllowed], convertToPutRequest, requestHandler.handlePut);
|
|
86
114
|
});
|
|
87
115
|
resourceRouter.patch('*', async (expressRequest, expressResponse) => {
|
|
88
|
-
await handle(expressRequest, expressResponse,
|
|
116
|
+
await handle(expressRequest, expressResponse, [validateResource, validateIdInUrlRequired, validateIdInRequestBodyNotAllowed], convertToPatchRequest, requestHandler.handlePatch);
|
|
89
117
|
});
|
|
90
118
|
resourceRouter.delete('*', async (expressRequest, expressResponse) => {
|
|
91
|
-
await handle(expressRequest, expressResponse,
|
|
119
|
+
await handle(expressRequest, expressResponse, validateResource, convertToDeleteRequest, requestHandler.handleDelete);
|
|
92
120
|
});
|
|
93
121
|
return resourceRouter;
|
|
94
122
|
};
|
package/resourceRouter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resourceRouter.js","sourceRoot":"","sources":["../../src/resourceRouter.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAA;AAE7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"resourceRouter.js","sourceRoot":"","sources":["../../src/resourceRouter.ts"],"names":[],"mappings":"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"}
|
package/urls/urlParser.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"urlParser.d.ts","sourceRoot":"","sources":["../../../src/urls/urlParser.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,QAAS,MAAM;;;
|
|
1
|
+
{"version":3,"file":"urlParser.d.ts","sourceRoot":"","sources":["../../../src/urls/urlParser.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,QAAS,MAAM;;;CAOnC,CAAA"}
|
package/urls/urlParser.js
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
export const parseUrl = (url) => {
|
|
2
|
-
if (!url || (url && !url.trim()))
|
|
3
|
-
return { resource: null, id: null };
|
|
4
2
|
const urlSegments = url.split('/').filter((i) => i);
|
|
5
3
|
const resource = (urlSegments.length > 0 ? urlSegments[0] : null) ?? null;
|
|
6
4
|
const id = (urlSegments.length > 1 ? urlSegments[1] : null) ?? null;
|
package/urls/urlParser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"urlParser.js","sourceRoot":"","sources":["../../../src/urls/urlParser.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,EAAE;IACtC,
|
|
1
|
+
{"version":3,"file":"urlParser.js","sourceRoot":"","sources":["../../../src/urls/urlParser.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,EAAE;IACtC,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;IAEnD,MAAM,QAAQ,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAA;IACzE,MAAM,EAAE,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAA;IAEnE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;AACzB,CAAC,CAAA"}
|