minimonolith 0.24.1 → 0.25.4

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.
Files changed (153) hide show
  1. package/README.md +209 -208
  2. package/api/api.js +5 -0
  3. package/api/getModels/handler.js +5 -0
  4. package/api/getModels/out.js +3 -0
  5. package/api/getNewAPI/handler.js +53 -0
  6. package/api/getNewAPI/in.js +7 -0
  7. package/api/getNewAPI/out.js +3 -0
  8. package/api/getORM/handler.js +5 -0
  9. package/api/getORM/out.js +3 -0
  10. package/api/getSchemas/handler.js +5 -0
  11. package/api/getSchemas/out.js +3 -0
  12. package/api/getService/handler.js +8 -0
  13. package/api/getService/in.js +6 -0
  14. package/api/getService/out.js +3 -0
  15. package/api/getServices/handler.js +5 -0
  16. package/api/getServices/out.js +3 -0
  17. package/api/getSyncedHandler/handler.js +40 -0
  18. package/api/getSyncedHandler/in.js +3 -0
  19. package/api/getSyncedHandler/out.js +3 -0
  20. package/api/postModel/handler.js +8 -0
  21. package/api/postModel/in.js +6 -0
  22. package/api/postModule/handler.js +31 -0
  23. package/api/postModule/in.js +7 -0
  24. package/api/postORM/handler.js +7 -0
  25. package/api/postORM/in.js +5 -0
  26. package/api/postRawModule/handler.js +9 -0
  27. package/api/postRawModule/in.js +9 -0
  28. package/api/postRoute/handler.js +9 -0
  29. package/api/postRoute/in.js +7 -0
  30. package/api/postSchema/handler.js +8 -0
  31. package/api/postSchema/in.js +6 -0
  32. package/api/services.js +15 -0
  33. package/{src/autotest/getMethodTest/index.js → autotest/getMethodTest/handler.js} +14 -12
  34. package/autotest/getMethodTest/in.js +3 -0
  35. package/autotest/getMethodTest/out.js +3 -0
  36. package/{src/autotest → autotest}/getTestServerResponse/index.js +14 -14
  37. package/autotest/services.js +1 -0
  38. package/control/get/handler.js +8 -0
  39. package/control/get/in.js +6 -0
  40. package/control/get/out.js +3 -0
  41. package/control/services.js +1 -0
  42. package/database/post/handler.js +24 -0
  43. package/database/post/in.js +12 -0
  44. package/database/postConnection/handler.js +27 -0
  45. package/database/postConnection/in.js +5 -0
  46. package/database/postConnection/out.js +3 -0
  47. package/database/services.js +1 -0
  48. package/environment/getDBEnvVars/handler.js +6 -0
  49. package/environment/getDBEnvVars/in.js +3 -0
  50. package/environment/getDBEnvVars/out.js +3 -0
  51. package/environment/getENVEnvVars/handler.js +7 -0
  52. package/environment/getENVEnvVars/in.js +3 -0
  53. package/environment/getENVEnvVars/out.js +3 -0
  54. package/environment/postEnvFile/handler.js +20 -0
  55. package/environment/postEnvFile/in.js +6 -0
  56. package/{src/environment → environment}/postTestEnvironment/index.js +6 -6
  57. package/environment/services.js +5 -0
  58. package/{src/error → error}/index.js +4 -4
  59. package/{src/error → error}/postCompiletime/index.js +13 -13
  60. package/{src/error → error}/postRuntime/index.js +7 -7
  61. package/health/post/handler.js +14 -0
  62. package/health/services.js +1 -0
  63. package/index.js +23 -15
  64. package/{src/log → log}/index.js +5 -5
  65. package/{src/log → log}/post/index.js +3 -3
  66. package/{src/log → log}/postError/index.js +3 -3
  67. package/{src/log → log}/postQA/index.js +3 -3
  68. package/model/getSynced/handler.js +28 -0
  69. package/model/post/handler.js +17 -0
  70. package/model/post/in.js +6 -0
  71. package/model/services.js +1 -0
  72. package/modules.js +19 -0
  73. package/package.json +33 -32
  74. package/{src/server → server}/getNodejsServerHandler/index.js +70 -68
  75. package/server/getServerFactory/handler.js +17 -0
  76. package/server/getServerFactory/in.js +8 -0
  77. package/server/getServerFactory/out.js +3 -0
  78. package/server/services.js +1 -0
  79. package/service/getParsedCode/handler.js +22 -0
  80. package/service/getParsedCode/in.js +6 -0
  81. package/service/getParsedCode/out.js +6 -0
  82. package/service/getParsedEvent/handler.js +12 -0
  83. package/service/getParsedEvent/in.js +5 -0
  84. package/service/getParsedEvent/out.js +6 -0
  85. package/{src/method/getResponseCode/index.js → service/getResponseCode/handler.js} +11 -9
  86. package/service/getResponseCode/in.js +3 -0
  87. package/service/getResponseCode/out.js +3 -0
  88. package/service/getRouteCode/handler.js +15 -0
  89. package/service/getRouteCode/in.js +6 -0
  90. package/service/getRouteCode/out.js +3 -0
  91. package/service/getType/handler.js +11 -0
  92. package/service/getType/in.js +5 -0
  93. package/service/getType/out.js +3 -0
  94. package/{src/method → service}/postResponse/index.js +13 -13
  95. package/service/postRoute/handler.js +82 -0
  96. package/service/postRoute/in.js +6 -0
  97. package/service/services.js +9 -0
  98. package/validation/getParsedAsync/handler.js +38 -0
  99. package/validation/getParsedAsync/in.js +9 -0
  100. package/validation/getParsedAsync/out.js +6 -0
  101. package/validation/services.js +1 -0
  102. package/yarn-error.log +4104 -0
  103. package/zdb/components.js +1 -0
  104. package/zdb/getAssertExists/handler.js +16 -0
  105. package/zdb/getAssertExists/in.js +6 -0
  106. package/zdb/getAssertExists/out.js +3 -0
  107. package/zdb/getAssertNotExists/handler.js +16 -0
  108. package/zdb/getAssertNotExists/in.js +6 -0
  109. package/zdb/getAssertNotExists/out.js +3 -0
  110. package/zdb/getAssertSafeInt/handler.js +15 -0
  111. package/zdb/getAssertSafeInt/in.js +6 -0
  112. package/zdb/getAssertSafeInt/out.js +3 -0
  113. package/src/api/get/index.js +0 -19
  114. package/src/api/getNewAPI/index.js +0 -14
  115. package/src/api/getSyncedHandler/index.js +0 -24
  116. package/src/api/index.js +0 -4
  117. package/src/api/postService/index.js +0 -34
  118. package/src/autotest/getMethodTest/back.index.js +0 -29
  119. package/src/autotest/index.js +0 -3
  120. package/src/control/get/index.js +0 -3
  121. package/src/control/index.js +0 -3
  122. package/src/database/index.js +0 -4
  123. package/src/database/post/index.js +0 -28
  124. package/src/database/postConnection/index.js +0 -25
  125. package/src/environment/getDBEnvVars/index.js +0 -4
  126. package/src/environment/getENVEnvVars/index.js +0 -4
  127. package/src/environment/index.js +0 -4
  128. package/src/environment/postEnvFile/index.js +0 -13
  129. package/src/event/getParsedEvent/index.js +0 -9
  130. package/src/event/index.js +0 -3
  131. package/src/health/index.js +0 -3
  132. package/src/health/post/index.js +0 -10
  133. package/src/method/getParsedCode/index.js +0 -13
  134. package/src/method/getRouteCode/index.js +0 -12
  135. package/src/method/getType/index.js +0 -9
  136. package/src/method/index.js +0 -7
  137. package/src/method/post/index.js +0 -56
  138. package/src/middleware/index.js +0 -4
  139. package/src/middleware/postCors/index.js +0 -20
  140. package/src/middleware/postError/index.js +0 -10
  141. package/src/model/getSynced/index.js +0 -22
  142. package/src/model/index.js +0 -4
  143. package/src/model/post/index.js +0 -11
  144. package/src/path/getProjectRoot/index.js +0 -14
  145. package/src/path/index.js +0 -3
  146. package/src/server/getServerFactory/index.js +0 -14
  147. package/src/server/index.js +0 -3
  148. package/src/validation/dbValidation.js +0 -33
  149. package/src/validation/get/index.js +0 -16
  150. package/src/validation/getOptionalObject/index.js +0 -8
  151. package/src/validation/index.js +0 -8
  152. package/src/validation/postError/index.js +0 -29
  153. /package/{src/middleware/postCors → api}/corsHeaders.js +0 -0
package/package.json CHANGED
@@ -1,32 +1,33 @@
1
- {
2
- "name": "minimonolith",
3
- "type": "module",
4
- "version": "0.24.1",
5
- "main": "index.js",
6
- "license": "MIT",
7
- "scripts": {
8
- "start": "nodemon --inspect=0.0.0.0 ./server.js",
9
- "test": "cross-env NODE_OPTIONS=--experimental-vm-modules npx jest --coverage"
10
- },
11
- "keywords": [
12
- "lambda-api",
13
- "zod",
14
- "sequelize"
15
- ],
16
- "dependencies": {
17
- "lambda-api": "^1.0.1",
18
- "sequelize": "^6.30.0",
19
- "zod": "^3.21.4"
20
- },
21
- "devDependencies": {
22
- "@aws-sdk/client-s3": "^3.304.0",
23
- "@aws-sdk/s3-request-presigner": "^3.304.0",
24
- "cross-env": "^7.0.3",
25
- "cross-fetch": "^3.1.5",
26
- "dotenv": "^16.0.3",
27
- "jest": "^29.5.0",
28
- "mysql2": "^3.2.0",
29
- "nodemon": "^2.0.22",
30
- "sqlite3": "^5.1.6"
31
- }
32
- }
1
+ {
2
+ "name": "minimonolith",
3
+ "type": "module",
4
+ "version": "0.25.4",
5
+ "main": "index.js",
6
+ "license": "MIT",
7
+ "scripts": {
8
+ "start": "nodemon --inspect=0.0.0.0 ./server.js",
9
+ "test": "cross-env NODE_OPTIONS=--experimental-vm-modules npx jest --coverage"
10
+ },
11
+ "keywords": [
12
+ "lambda-api",
13
+ "zod",
14
+ "sequelize"
15
+ ],
16
+ "dependencies": {
17
+ "@minimonolith/lib": "^0.13.1",
18
+ "lambda-api": "^1.0.3",
19
+ "sequelize": "^6.30.0",
20
+ "zod": "^3.21.4"
21
+ },
22
+ "devDependencies": {
23
+ "@aws-sdk/client-s3": "^3.304.0",
24
+ "@aws-sdk/s3-request-presigner": "^3.304.0",
25
+ "cross-env": "^7.0.3",
26
+ "cross-fetch": "^3.1.5",
27
+ "dotenv": "^16.0.3",
28
+ "jest": "^29.5.0",
29
+ "mysql2": "^3.2.0",
30
+ "nodemon": "^2.0.22",
31
+ "sqlite3": "^5.1.6"
32
+ }
33
+ }
@@ -1,68 +1,70 @@
1
- 'use strict';
2
-
3
- import url from 'url';
4
-
5
- import LOG_SERVICE from '../../log/index.js';
6
-
7
- import CORS_HEADERS from '../../middleware/postCors/corsHeaders.js';
8
-
9
- const getBody = req => {
10
- return new Promise((resolve, reject) => {
11
- let body = '';
12
- req.on('data', chunk => { body += chunk; });
13
- req.on('end', () => { resolve(body !== '' ? body : null); });
14
- });
15
- };
16
-
17
- const getJWTClaims = authHeader => {
18
- const b64JWT = authHeader.split(" ")[1];
19
- const b64Claims = b64JWT.split('.')[1];
20
- return JSON.parse(Buffer.from(b64Claims, 'base64').toString());
21
- }
22
-
23
- const getLambdaEvent = (req, queryString, jwtClaims, body) => {
24
- const event = {
25
- path: req.url,
26
- httpMethod: req.method,
27
- queryStringParameters: queryString,
28
- requestContext: {
29
- authorizer: { jwt: { claims: jwtClaims }, },
30
- http: { method: req.method, path: req.url },
31
- },
32
- headers: {},
33
- body,
34
- };
35
-
36
- if (req.headers['content-type']) event.headers['Content-Type'] = req.headers['content-type'];
37
- if (req.headers['x-trigger-error']) event.headers['x-trigger-error'] = 'TRUE';
38
- if (req.headers.accept) event.headers.accept = req.headers.accept;
39
- if (req.headers['user-agent']) event.headers['User-Agent'] = req.headers['user-agent'];
40
- console.log(event);
41
- return event;
42
- };
43
-
44
- export default lambdaHandler => async (req, res) => {
45
- try {
46
- const authHeader = req.headers.authorization;
47
- const jwtClaims = authHeader?.startsWith('Bearer ') ? getJWTClaims(authHeader) : null;
48
-
49
- const tempQueryString = url.parse(req.url, true).query;
50
- const queryString = tempQueryString ? tempQueryString : undefined;
51
-
52
- const tempBody = await getBody(req);
53
- const body = tempBody ? tempBody : undefined;
54
-
55
- const lambdaEvent = getLambdaEvent(req, queryString, jwtClaims, body);
56
- const lambdaRes = await lambdaHandler(lambdaEvent, null)
57
-
58
- res.statusCode = lambdaRes.statusCode;
59
- for (let k in CORS_HEADERS) res.setHeader(k, CORS_HEADERS[k]);
60
- res.end(lambdaRes.body);
61
-
62
- } catch(SERVER_ERROR) {
63
- LOG_SERVICE.post({ SERVER_ERROR });
64
- res.statusCode = 500;
65
- for (let k in CORS_HEADERS) res.setHeader(k, CORS_HEADERS[k]);
66
- res.end(JSON.stringify({ REQUEST_PARSING_ERROR: SERVER_ERROR.toString() }));
67
- }
68
- }
1
+ 'use strict';
2
+
3
+ import url from 'url';
4
+
5
+ //import { LOG_SERVICE } from '@minimonolith/lib';
6
+
7
+ import CORS_HEADERS from '../../api/corsHeaders.js';
8
+
9
+ const getBody = req => {
10
+ return new Promise((resolve, reject) => {
11
+ let body = '';
12
+ req.on('data', chunk => { body += chunk; });
13
+ req.on('end', () => { resolve(body !== '' ? body : null); });
14
+ });
15
+ };
16
+
17
+ const getJWTClaims = authHeader => {
18
+ const b64JWT = authHeader.split(" ")[1];
19
+ const b64Claims = b64JWT.split('.')[1];
20
+ return JSON.parse(Buffer.from(b64Claims, 'base64').toString());
21
+ }
22
+
23
+ const getLambdaEvent = (req, queryString, jwtClaims, body) => {
24
+ const event = {
25
+ path: req.url,
26
+ httpMethod: req.method,
27
+ queryStringParameters: queryString,
28
+ requestContext: {
29
+ authorizer: { jwt: { claims: jwtClaims }, },
30
+ http: { method: req.method, path: req.url },
31
+ },
32
+ headers: {},
33
+ body,
34
+ };
35
+
36
+ if (req.headers['content-type'])
37
+ event.headers['Content-Type'] = req.headers['content-type'];
38
+ if (req.headers['x-trigger-error']) event.headers['x-trigger-error'] = 'TRUE';
39
+ if (req.headers.accept) event.headers.accept = req.headers.accept;
40
+ if (req.headers['user-agent']) event.headers['User-Agent'] = req.headers['user-agent'];
41
+ //console.log(event);
42
+ return event;
43
+ };
44
+
45
+ export default lambdaHandler => async (req, res) => {
46
+ try {
47
+ const authHeader = req.headers.authorization;
48
+ const jwtClaims = authHeader?.startsWith('Bearer ') ? getJWTClaims(authHeader) : null;
49
+
50
+ const tempQueryString = url.parse(req.url, true).query;
51
+ const queryString = tempQueryString ? tempQueryString : undefined;
52
+
53
+ const tempBody = await getBody(req);
54
+ const body = tempBody ? tempBody : undefined;
55
+
56
+ const lambdaEvent = getLambdaEvent(req, queryString, jwtClaims, body);
57
+ const lambdaRes = await lambdaHandler(lambdaEvent, null)
58
+
59
+ res.statusCode = lambdaRes.statusCode;
60
+ for (let k in CORS_HEADERS) res.setHeader(k, CORS_HEADERS[k]);
61
+ res.end(lambdaRes.body);
62
+
63
+ } catch(SERVER_ERROR) {
64
+ //LOG_SERVICE.post({ SERVER_ERROR });
65
+ console.log({ SERVER_ERROR });
66
+ res.statusCode = 500;
67
+ for (let k in CORS_HEADERS) res.setHeader(k, CORS_HEADERS[k]);
68
+ res.end(JSON.stringify({ REQUEST_PARSING_ERROR: SERVER_ERROR.toString() }));
69
+ }
70
+ }
@@ -0,0 +1,17 @@
1
+ import http from 'http';
2
+ import path from 'path';
3
+
4
+ import getNodejsServerHandler from '../getNodejsServerHandler/index.js';
5
+
6
+ export default async ({ body, SERVICES }) => {
7
+ const envFile = body.envFile;
8
+ const modulesFolder = body.modulesFolder;
9
+
10
+ await SERVICES.environment.postEnvFile.handler({ envFile, modulesFolder });
11
+
12
+ return (lambdaHandler) => {
13
+ const serverHandler = getNodejsServerHandler(lambdaHandler);
14
+ const server = http.createServer(serverHandler);
15
+ return server;
16
+ }
17
+ }
@@ -0,0 +1,8 @@
1
+ import path from 'path';
2
+
3
+ import { z } from '@minimonolith/lib';
4
+
5
+ export default () => ({
6
+ envFile: z.string().default('.env'),
7
+ modulesFolder: z.string().default('node_modules'+path.sep),
8
+ });
@@ -0,0 +1,3 @@
1
+ import { z } from '@minimonolith/lib';
2
+
3
+ export default () => z.function();
@@ -0,0 +1 @@
1
+ export default ['getServerFactory'];
@@ -0,0 +1,22 @@
1
+ export default ({ body }) => {
2
+ const moduleName = body.moduleName;
3
+ const serviceCode = body.serviceCode;
4
+
5
+ const servicePathParts = serviceCode.split(":");
6
+ const pathParams = servicePathParts.slice(1).map(param => `:${param}`);
7
+ const rawServiceName = servicePathParts[0];
8
+ const serviceName = rawServiceName[0] === '!' ?
9
+ rawServiceName.substring(1) : rawServiceName;
10
+
11
+ const relativeServiceRoute = `${rawServiceName}`+
12
+ `${pathParams.length > 0 ? '/' : ''}${pathParams.join("/")}`;
13
+
14
+ const serviceRoute = relativeServiceRoute[0]==='!' ?
15
+ `/${relativeServiceRoute.substring(1)}/${moduleName}` :
16
+ `/${moduleName}/${relativeServiceRoute}`;
17
+
18
+ console.log('serviceRoute', '['+relativeServiceRoute+']');
19
+ console.log('serviceRoute', relativeServiceRoute.substring(1), 'fdfd', serviceRoute);
20
+
21
+ return { serviceName, serviceRoute };
22
+ };
@@ -0,0 +1,6 @@
1
+ import { z } from '@minimonolith/lib';
2
+
3
+ export default () => ({
4
+ moduleName: z.string(),
5
+ serviceCode: z.string(),
6
+ });
@@ -0,0 +1,6 @@
1
+ import { z } from '@minimonolith/lib';
2
+
3
+ export default () => ({
4
+ serviceName: z.string(),
5
+ serviceRoute: z.string(),
6
+ });
@@ -0,0 +1,12 @@
1
+ export default ({ body }) => {
2
+ const event = body.event;
3
+
4
+ const { params, query, requestContext } = event;
5
+ const claims = requestContext.authorizer?.jwt?.claims
6
+
7
+ const tempUnifiedBody = { ...event.body, ...params, ...query };
8
+ const unifiedBody = Object.keys(tempUnifiedBody).length > 0 ?
9
+ tempUnifiedBody : undefined;
10
+
11
+ return { body: unifiedBody, claims };
12
+ }
@@ -0,0 +1,5 @@
1
+ import { z } from '@minimonolith/lib';
2
+
3
+ export default () => ({
4
+ event: z.unknown(),
5
+ });
@@ -0,0 +1,6 @@
1
+ import { z } from '@minimonolith/lib';
2
+
3
+ export default () => ({
4
+ body: z.unknown(),
5
+ claims: z.unknown(),
6
+ });
@@ -1,9 +1,11 @@
1
- const typeToResponseCode = {
2
- post: 201,
3
- delete: 204,
4
- }
5
-
6
- export default methodType => {
7
- if (methodType in typeToResponseCode) return typeToResponseCode[methodType];
8
- else return 200;
9
- }
1
+ const typeToResponseCode = {
2
+ post: 201,
3
+ delete: 204,
4
+ }
5
+
6
+ export default ({ body }) => {
7
+ const methodType = body;
8
+
9
+ if (methodType in typeToResponseCode) return typeToResponseCode[methodType];
10
+ else return 200;
11
+ }
@@ -0,0 +1,3 @@
1
+ import { z } from '@minimonolith/lib';
2
+
3
+ export default () => z.enum(['get','post','patch','put','delete']);
@@ -0,0 +1,3 @@
1
+ import { z } from '@minimonolith/lib';
2
+
3
+ export default () => z.number();
@@ -0,0 +1,15 @@
1
+ const getUpperSnakeCase = str => {
2
+ return str
3
+ .replace(/([a-z])([A-Z])/g, '$1_$2')
4
+ .replace(/([A-Z])([A-Z][a-z])/g, '$1_$2')
5
+ .toUpperCase();
6
+ }
7
+
8
+ export default ({ body }) => {
9
+ const moduleName = body.moduleName;
10
+ const serviceName = body.serviceName;
11
+
12
+ const snakeModuleName = getUpperSnakeCase(moduleName);
13
+ const snakeServiceName = getUpperSnakeCase(serviceName);
14
+ return snakeModuleName + '_' + snakeServiceName;
15
+ };
@@ -0,0 +1,6 @@
1
+ import { z } from '@minimonolith/lib';
2
+
3
+ export default () => ({
4
+ moduleName: z.string(),
5
+ serviceName: z.string(),
6
+ });
@@ -0,0 +1,3 @@
1
+ import { z } from '@minimonolith/lib';
2
+
3
+ export default () => z.string();
@@ -0,0 +1,11 @@
1
+ const methodsAvailable = ['post', 'get', 'patch', 'put', 'delete'];
2
+
3
+ export default ({ body }) => {
4
+ const serviceName = body.serviceName;
5
+
6
+ const methodMatched = serviceName.match(/^[a-z]*/);
7
+ if (!methodMatched || !methodsAvailable.includes(methodMatched[0]))
8
+ throw new Error('UNKNOWN_METHOD_TYPE: ' + serviceName);
9
+
10
+ return methodMatched[0];
11
+ }
@@ -0,0 +1,5 @@
1
+ import { z } from '@minimonolith/lib';
2
+
3
+ export default () => ({
4
+ serviceName: z.string(),
5
+ });
@@ -0,0 +1,3 @@
1
+ import { z } from '@minimonolith/lib';
2
+
3
+ export default () => z.string();
@@ -1,13 +1,13 @@
1
- import API_SERVICE from '../../api/index.js';
2
- import LOG_SERVICE from '../../log/index.js';
3
-
4
- import getResponseCode from '../getResponseCode/index.js';
5
-
6
- export default async (res, ROUTE_CODE, CONTROLLER, METHOD_TYPE, body, claims) => {
7
-
8
- const { MODELS, SERVICES } = API_SERVICE.get();
9
- const METHOD_RESPONSE = await CONTROLLER({ MODELS, SERVICES, body, claims });
10
- const METHOD_RESPONSE_CODE = getResponseCode(METHOD_TYPE);
11
- LOG_SERVICE.post({ ROUTE_CODE, METHOD_RESPONSE });
12
- res.status(METHOD_RESPONSE_CODE).json(METHOD_RESPONSE);
13
- };
1
+ import API_SERVICE from '../../api/index.js';
2
+ import LOG_SERVICE from '../../log/index.js';
3
+
4
+ import getResponseCode from '../getResponseCode/index.js';
5
+
6
+ export default async (res, ROUTE_CODE, CONTROLLER, METHOD_TYPE, body, claims) => {
7
+
8
+ const { MODELS, SERVICES } = API_SERVICE.get();
9
+ const METHOD_RESPONSE = await CONTROLLER({ MODELS, SERVICES, body, claims });
10
+ const METHOD_RESPONSE_CODE = getResponseCode(METHOD_TYPE);
11
+ LOG_SERVICE.post({ ROUTE_CODE, METHOD_RESPONSE });
12
+ res.status(METHOD_RESPONSE_CODE).json(METHOD_RESPONSE);
13
+ };
@@ -0,0 +1,82 @@
1
+ //import LOG_SERVICE from '../../log/index.js';
2
+ //import { LOG_SERVICE } from '@minimonolith/lib';
3
+
4
+ export default async ({ body, ROUTE_CODE, SERVICES }) => {
5
+ const moduleName = body.moduleName;
6
+ const serviceCode = body.serviceCode;
7
+
8
+ const { serviceName, serviceRoute } = await SERVICES.service
9
+ .getParsedCode.handler({ moduleName, serviceCode });
10
+
11
+ const service =
12
+ await SERVICES.api.getService.handler({ moduleName, serviceName });
13
+
14
+ //const method = await SERVICES.service.getType.handler({ serviceName });
15
+ const ADDITIONAL_KEYS = { MODELS: await SERVICES.api.getModels.handler() };
16
+
17
+ const handler = async (event, res) => {
18
+ const { body: inBody, claims } =
19
+ await SERVICES.service.getParsedEvent.handler({ event });
20
+ //const service =
21
+ // await SERVICES.api.getService.handler({ moduleName, serviceName });
22
+
23
+ let parsedInBody = inBody;
24
+ //console.log('service', service);
25
+
26
+ //if (service.in) {
27
+ const validationIn = await SERVICES.validation
28
+ .getParsedAsync.handler({ ROUTE_CODE: ROUTE_CODE+'_IN',
29
+ VALIDATOR: service.in, input: inBody });
30
+
31
+ if (validationIn?.error) {
32
+ //LOG_SERVICE.post({ VALIDATION_ERROR: validationIn.error });
33
+ console.log({ VALIDATION_ERROR: validationIn.error });
34
+ res.status(400).json(validationIn.error);
35
+ return;
36
+ }
37
+
38
+ if (validationIn) parsedInBody = validationIn.parsedBody;
39
+ //}
40
+
41
+ let outBody = undefined;
42
+ try {
43
+ outBody = await service
44
+ .rawHandler(parsedInBody, claims);
45
+
46
+ } catch (SERVICE_ERROR) {
47
+ if (!service.error) {
48
+ //LOG_SERVICE.post({ SERVICE_ERROR });
49
+ console.log({ SERVICE_ERROR });
50
+ res.status(500).json(SERVICE_ERROR);
51
+ return;
52
+ }
53
+
54
+ outBody = await service.error(parsedInBody, claims);
55
+ }
56
+
57
+ let parsedOutBody = outBody;
58
+ //if (service.out) {
59
+ const validationOut = await SERVICES.validation
60
+ .getParsedAsync.handler({ ROUTE_CODE: ROUTE_CODE+'_OUT',
61
+ VALIDATOR: service.out, input: outBody });
62
+
63
+ if (validationOut?.error) {
64
+ //LOG_SERVICE.post({ VALIDATION_ERROR: validationOut.error });
65
+ console.log({ VALIDATION_ERROR: validationOut.error });
66
+ res.status(400).json(validationOut.error);
67
+ return;
68
+ }
69
+
70
+ if (validationOut) parsedOutBody = validationOut.parsedBody;
71
+ //}
72
+
73
+ //console.log('method', method);
74
+ const serviceResponseCode =
75
+ //await SERVICES.service.getResponseCode.handler(method);
76
+ await SERVICES.service.getResponseCode.handler(service.type);
77
+ return res.status(serviceResponseCode).json(parsedOutBody);
78
+ };
79
+
80
+ await SERVICES.api.postRoute.handler({
81
+ method: service.type, route: serviceRoute, handler });
82
+ };
@@ -0,0 +1,6 @@
1
+ import { z } from '@minimonolith/lib';
2
+
3
+ export default () => ({
4
+ moduleName: z.string(),
5
+ serviceCode: z.string(),
6
+ });
@@ -0,0 +1,9 @@
1
+ export default [
2
+ 'postRoute',
3
+ 'getParsedCode',
4
+ //'getType',
5
+ //'getRouteCode',
6
+ //'postResponse',
7
+ 'getParsedEvent',
8
+ 'getResponseCode',
9
+ ];
@@ -0,0 +1,38 @@
1
+ import { /*LOG_SERVICE,*/ VALIDATION_MODULE } from '@minimonolith/lib';
2
+
3
+ export default async ({ body, SERVICES }) => {
4
+ const ROUTE_CODE = body.ROUTE_CODE;
5
+ const VALIDATOR = body.VALIDATOR;
6
+ const input = body.input;
7
+ const ADDITIONAL_KEYS = body.ADDITIONAL_KEYS;
8
+
9
+ const EVENT_CONTEXT = { SERVICES, body: input };
10
+ //console.log('EVENT_CONTEXT', EVENT_CONTEXT);
11
+
12
+ if (!VALIDATOR && input) {
13
+ const MESSAGE = { ROUTE_CODE,
14
+ VALIDATION_ERROR: JSON.stringify({ message: 'BODY_NOT_ALLOWED' }) };
15
+ //LOG_MODULE.postError(MESSAGE);
16
+ console.error(MESSAGE);
17
+ return { error: MESSAGE };
18
+ }
19
+
20
+ if (!VALIDATOR) return undefined;
21
+
22
+ const zodobject = await VALIDATION_MODULE.getZodObject(ROUTE_CODE,
23
+ VALIDATOR(EVENT_CONTEXT));
24
+
25
+ const VALIDATION_RESULT = await VALIDATION_MODULE.getZodObject(ROUTE_CODE,
26
+ VALIDATOR(EVENT_CONTEXT)).safeParseAsync(input);
27
+ const VALIDATION_ERROR = VALIDATION_RESULT.error?.format();
28
+
29
+ if (VALIDATION_ERROR) {
30
+ const MESSAGE = { ROUTE_CODE,
31
+ VALIDATION_ERROR: JSON.stringify(VALIDATION_ERROR) };
32
+ //LOG_MODULE.postError(MESSAGE);
33
+ console.error(MESSAGE);
34
+ return { error: MESSAGE };
35
+ }
36
+
37
+ return { parsedBody: VALIDATION_RESULT.data };
38
+ }
@@ -0,0 +1,9 @@
1
+ import { z } from '@minimonolith/lib';
2
+
3
+ export default () => ({
4
+ ROUTE_CODE: z.string(),
5
+ VALIDATOR: z.unknown(),
6
+ input: z.unknown(),
7
+ //ADDITIONAL_KEYS: z.object(),
8
+ ADDITIONAL_KEYS: z.unknown(),
9
+ });
@@ -0,0 +1,6 @@
1
+ import { z } from '@minimonolith/lib';
2
+
3
+ export default () => ({
4
+ error: z.unknown().optional(),
5
+ parsedBody: z.unknown().optional(),
6
+ });
@@ -0,0 +1 @@
1
+ export default ['getParsedAsync'];