@clairejs/server 3.15.2 → 3.16.1

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 (86) hide show
  1. package/.mocharc.json +3 -0
  2. package/README.md +5 -0
  3. package/dist/common/AbstractController.js +3 -0
  4. package/dist/common/ControllerMetadata.js +1 -0
  5. package/dist/common/FileOperation.js +6 -0
  6. package/dist/common/ServerModelMetadata.js +1 -0
  7. package/dist/common/Transactionable.js +17 -0
  8. package/dist/common/auth/AbstractPrincipalResolver.js +2 -0
  9. package/dist/common/auth/IPrincipal.js +1 -0
  10. package/dist/common/constants.js +7 -0
  11. package/dist/common/decorator.d.ts +2 -2
  12. package/dist/common/decorator.js +6 -0
  13. package/dist/common/request/EndpointMetadata.js +1 -0
  14. package/dist/common/request/HttpData.js +1 -0
  15. package/dist/common/request/HttpEndpoint.js +1 -0
  16. package/dist/common/request/JobData.js +1 -0
  17. package/dist/common/request/MountedEndpointInfo.js +1 -0
  18. package/dist/common/request/RequestOptions.js +1 -0
  19. package/dist/common/request/SocketData.js +1 -0
  20. package/dist/common/request/types.d.ts +1 -1
  21. package/dist/common/request/types.js +1 -0
  22. package/dist/controllers/FileManageController.js +90 -0
  23. package/dist/controllers/FileUploadController.js +64 -0
  24. package/dist/controllers/dto/system.js +14 -0
  25. package/dist/controllers/dto/upload.js +205 -0
  26. package/dist/http/auth/AbstractHttpAuthorizer.js +2 -0
  27. package/dist/http/common/HttpRequest.js +72 -0
  28. package/dist/http/common/HttpResponse.js +62 -0
  29. package/dist/http/controller/AbstractHttpController.js +21 -0
  30. package/dist/http/controller/AbstractHttpMiddleware.js +2 -0
  31. package/dist/http/controller/AbstractHttpRequestHandler.js +69 -0
  32. package/dist/http/controller/CrudHttpController.js +303 -0
  33. package/dist/http/controller/DefaultHttpRequestHandler.js +143 -0
  34. package/dist/http/decorators.d.ts +1 -1
  35. package/dist/http/decorators.js +86 -0
  36. package/dist/http/file-upload/AbstractFileUploadHandler.js +2 -0
  37. package/dist/http/file-upload/FileUploadHandler.js +41 -0
  38. package/dist/http/file-upload/types.d.ts +1 -1
  39. package/dist/http/file-upload/types.js +1 -0
  40. package/dist/http/repository/AbstractRepository.js +26 -0
  41. package/dist/http/repository/DtoRepository.d.ts +3 -3
  42. package/dist/http/repository/DtoRepository.js +204 -0
  43. package/dist/http/repository/ICrudRepository.js +1 -0
  44. package/dist/http/repository/ModelRepository.js +696 -0
  45. package/dist/http/security/AbstractAccessCondition.js +2 -0
  46. package/dist/http/security/access-conditions/FilterModelFieldAccessCondition.js +30 -0
  47. package/dist/http/security/access-conditions/MaximumQueryLimit.js +31 -0
  48. package/dist/http/security/cors.js +1 -0
  49. package/dist/http/utils.js +32 -0
  50. package/dist/index.js +75 -1
  51. package/dist/job/AbstractJobController.js +9 -0
  52. package/dist/job/AbstractJobRepository.js +2 -0
  53. package/dist/job/AbstractJobScheduler.js +48 -0
  54. package/dist/job/AwsJobScheduler.js +405 -0
  55. package/dist/job/LocalJobScheduler.js +273 -0
  56. package/dist/job/decorators.js +57 -0
  57. package/dist/job/interfaces.js +10 -0
  58. package/dist/logging/FileLogMedium.js +44 -0
  59. package/dist/services/AbstractFileService.js +28 -0
  60. package/dist/services/AbstractMailService.js +2 -0
  61. package/dist/services/AbstractService.js +3 -0
  62. package/dist/services/AbstractSmsService.js +2 -0
  63. package/dist/services/implementations/LocalFileService.js +42 -0
  64. package/dist/services/implementations/LocalMailService.js +27 -0
  65. package/dist/services/implementations/LocalSmsService.js +17 -0
  66. package/dist/services/implementations/S3FileService.js +107 -0
  67. package/dist/services/implementations/SesMailService.js +64 -0
  68. package/dist/socket/AbstractServerSocket.js +44 -0
  69. package/dist/socket/AbstractServerSocketManager.d.ts +1 -1
  70. package/dist/socket/AbstractServerSocketManager.js +348 -0
  71. package/dist/socket/AbstractSocketConnectionHandler.js +2 -0
  72. package/dist/socket/AbstractSocketController.d.ts +3 -3
  73. package/dist/socket/AbstractSocketController.js +12 -0
  74. package/dist/socket/AwsSocketManager.d.ts +2 -2
  75. package/dist/socket/AwsSocketManager.js +160 -0
  76. package/dist/socket/IServerSocket.js +1 -0
  77. package/dist/socket/LocalSocketManager.js +292 -0
  78. package/dist/system/ClaireServer.js +78 -0
  79. package/dist/system/ExpressWrapper.js +122 -0
  80. package/dist/system/LambdaWrapper.js +151 -0
  81. package/dist/system/ServerGlobalStore.js +1 -0
  82. package/dist/system/lamba-request-mapper.js +49 -0
  83. package/dist/system/locale/LocaleEntry.js +13 -0
  84. package/dist/system/locale/LocaleTranslation.js +47 -0
  85. package/dist/system/locale/decorators.js +14 -0
  86. package/package.json +13 -20
@@ -0,0 +1,49 @@
1
+ import { SocketMethod } from "@clairejs/core";
2
+ import { CRON_REQUEST_METHOD, INTERVAL_REQUEST_METHOD } from "../job/interfaces";
3
+ const parseCookie = (cookieArray) => {
4
+ let result = {};
5
+ for (const cookie of cookieArray) {
6
+ const pairs = cookie.split("=");
7
+ if (pairs[0] && pairs[1]) {
8
+ result[pairs[0]] = pairs[1];
9
+ }
10
+ }
11
+ return result;
12
+ };
13
+ export const lambdaRequestMapper = (event) => {
14
+ if (event.requestContext.eventType) {
15
+ //-- socket
16
+ const method = event.requestContext.eventType.toLowerCase();
17
+ const body = event.body && JSON.parse(event.body);
18
+ return {
19
+ method,
20
+ rawPath: event.requestContext.connectionId,
21
+ body: method === SocketMethod.CONNECT ? { queries: event.queryStringParameters } : body,
22
+ };
23
+ }
24
+ if (event.requestContext.intervalScheduler) {
25
+ //-- interval scheduler
26
+ return {
27
+ method: INTERVAL_REQUEST_METHOD,
28
+ rawPath: "",
29
+ body: event.requestContext.intervalScheduler.time,
30
+ };
31
+ }
32
+ if (event.requestContext.cronScheduler) {
33
+ //-- cron scheduler
34
+ return {
35
+ method: CRON_REQUEST_METHOD,
36
+ rawPath: "",
37
+ body: event.requestContext.cronScheduler.data,
38
+ };
39
+ }
40
+ //-- http
41
+ return {
42
+ clientIP: event.requestContext.http.sourceIp,
43
+ method: event.requestContext.http.method.toLowerCase(),
44
+ rawPath: `${event.rawPath}?${event.rawQueryString}`,
45
+ body: event.body && JSON.parse(event.body),
46
+ headers: event.headers,
47
+ cookies: parseCookie(event.cookies || []),
48
+ };
49
+ };
@@ -0,0 +1,13 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { AbstractModel, Model } from "@clairejs/core";
8
+ let LocaleEntry = class LocaleEntry extends AbstractModel {
9
+ };
10
+ LocaleEntry = __decorate([
11
+ Model()
12
+ ], LocaleEntry);
13
+ export { LocaleEntry };
@@ -0,0 +1,47 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { AbstractModel, Column, Model, FK, Index } from "@clairejs/core";
11
+ import { LocaleEntry } from "./LocaleEntry";
12
+ let LocaleTranslation = class LocaleTranslation extends AbstractModel {
13
+ entryId;
14
+ localeCode;
15
+ translation;
16
+ };
17
+ __decorate([
18
+ Column({
19
+ description: "Id of the locale",
20
+ isRequired: true,
21
+ ...FK({ model: LocaleEntry, cascade: "delete" }),
22
+ }),
23
+ __metadata("design:type", String)
24
+ ], LocaleTranslation.prototype, "entryId", void 0);
25
+ __decorate([
26
+ Column({
27
+ description: "Code of locale",
28
+ isRequired: true,
29
+ textLength: 3,
30
+ }),
31
+ __metadata("design:type", String)
32
+ ], LocaleTranslation.prototype, "localeCode", void 0);
33
+ __decorate([
34
+ Column({
35
+ description: "Translation of locale",
36
+ isRequired: true,
37
+ }),
38
+ __metadata("design:type", String)
39
+ ], LocaleTranslation.prototype, "translation", void 0);
40
+ LocaleTranslation = __decorate([
41
+ Model(),
42
+ Index([
43
+ ["entryId", 1],
44
+ ["localeCode", 1],
45
+ ], { unique: true })
46
+ ], LocaleTranslation);
47
+ export { LocaleTranslation };
@@ -0,0 +1,14 @@
1
+ import { FK, DataType, initFieldMetadata } from "@clairejs/core";
2
+ import { LocaleEntry } from "./LocaleEntry";
3
+ export const LocaleOf = (
4
+ /**
5
+ * Name of the column to localize
6
+ */
7
+ referenceColumn) => (prototype, propertyKey) => {
8
+ const field = initFieldMetadata(prototype, propertyKey);
9
+ field.multiLocaleColumn = referenceColumn;
10
+ field.fk = FK({ model: LocaleEntry, cascade: "nullify" }).fk;
11
+ field.dataType = DataType.NUMBER;
12
+ const refField = initFieldMetadata(prototype, referenceColumn);
13
+ refField.isMultiLocale = true;
14
+ };
package/package.json CHANGED
@@ -1,14 +1,15 @@
1
1
  {
2
2
  "name": "@clairejs/server",
3
- "version": "3.15.2",
3
+ "version": "3.16.1",
4
4
  "description": "Claire server NodeJs framework written in Typescript.",
5
5
  "types": "dist/index.d.ts",
6
6
  "main": "dist/index.js",
7
+ "type": "module",
7
8
  "scripts": {
8
- "test-http": "mocha -r ts-node/register ./test/e2e/e2e.test.ts",
9
- "test-socket": "mocha -r ts-node/register ./test/socket/socket.test.ts",
9
+ "test-http": "mocha ./test/e2e/e2e.test.ts",
10
+ "test-socket": "mocha ./test/socket/socket.test.ts",
10
11
  "test": "npm run test-http && npm run test-socket",
11
- "build": "rm -rf ./dist && webpack --mode production",
12
+ "build": "rm -rf ./dist && tsc -p ./tsconfig-build.json",
12
13
  "push": "npm run build && npm publish && git push"
13
14
  },
14
15
  "author": "immort",
@@ -33,8 +34,8 @@
33
34
  "ws": "^7.5.5"
34
35
  },
35
36
  "peerDependencies": {
36
- "@clairejs/core": "^3.4.2",
37
- "@clairejs/orm": "^3.7.0",
37
+ "@clairejs/core": "^3.5.2",
38
+ "@clairejs/orm": "^3.10.1",
38
39
  "ioredis": "^5.2.0"
39
40
  },
40
41
  "devDependencies": {
@@ -42,25 +43,17 @@
42
43
  "@types/cors": "^2.8.12",
43
44
  "@types/express": "^4.17.11",
44
45
  "@types/express-fileupload": "^1.1.6",
45
- "@types/mocha": "^8.2.2",
46
- "@types/node": "^14.14.25",
46
+ "@types/mocha": "^10.0.1",
47
+ "@types/node": "^18.16.1",
47
48
  "@types/node-schedule": "^2.1.0",
48
49
  "@types/parseurl": "^1.3.1",
49
50
  "@types/randomstring": "^1.1.8",
50
51
  "@types/uuid": "^9.0.0",
51
- "@types/validator": "^13.1.3",
52
- "@types/webpack-env": "^1.16.0",
53
52
  "@types/ws": "^7.4.0",
54
53
  "axios": "^0.21.1",
55
- "mocha": "^10.0.0",
56
- "terser-webpack-plugin": "^4.2.3",
57
- "ts-loader": "^8.4.0",
58
- "ts-node": "^10.8.1",
59
- "tslib": "^2.1.0",
60
- "typescript": "^4.4.4",
61
- "uuid": "^9.0.0",
62
- "webpack": "^5.73.0",
63
- "webpack-cli": "^4.10.0",
64
- "webpack-node-externals": "^2.5.1"
54
+ "mocha": "^10.2.0",
55
+ "ts-node": "^10.9.1",
56
+ "typescript": "^5.0.4",
57
+ "uuid": "^9.0.0"
65
58
  }
66
59
  }