@datacapy/server 0.1.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.
Files changed (112) hide show
  1. package/LICENSE +29 -0
  2. package/README.md +485 -0
  3. package/dist/acl/role-assessor/all.d.ts +7 -0
  4. package/dist/acl/role-assessor/all.d.ts.map +1 -0
  5. package/dist/acl/role-assessor/all.js +18 -0
  6. package/dist/acl/role-assessor/all.js.map +1 -0
  7. package/dist/acl/role-assessor/index.d.ts +4 -0
  8. package/dist/acl/role-assessor/index.d.ts.map +1 -0
  9. package/dist/acl/role-assessor/index.js +7 -0
  10. package/dist/acl/role-assessor/index.js.map +1 -0
  11. package/dist/acl/role-assessor.d.ts +13 -0
  12. package/dist/acl/role-assessor.d.ts.map +1 -0
  13. package/dist/acl/role-assessor.js +20 -0
  14. package/dist/acl/role-assessor.js.map +1 -0
  15. package/dist/acl.d.ts +41 -0
  16. package/dist/acl.d.ts.map +1 -0
  17. package/dist/acl.js +116 -0
  18. package/dist/acl.js.map +1 -0
  19. package/dist/api-config.d.ts +92 -0
  20. package/dist/api-config.d.ts.map +1 -0
  21. package/dist/api-config.js +3 -0
  22. package/dist/api-config.js.map +1 -0
  23. package/dist/error.d.ts +30 -0
  24. package/dist/error.d.ts.map +1 -0
  25. package/dist/error.js +72 -0
  26. package/dist/error.js.map +1 -0
  27. package/dist/index.d.ts +9 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +28 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/remote-object/body-parser-configurer.d.ts +28 -0
  32. package/dist/remote-object/body-parser-configurer.d.ts.map +1 -0
  33. package/dist/remote-object/body-parser-configurer.js +103 -0
  34. package/dist/remote-object/body-parser-configurer.js.map +1 -0
  35. package/dist/remote-object/endpoint-resolver.d.ts +12 -0
  36. package/dist/remote-object/endpoint-resolver.d.ts.map +1 -0
  37. package/dist/remote-object/endpoint-resolver.js +58 -0
  38. package/dist/remote-object/endpoint-resolver.js.map +1 -0
  39. package/dist/remote-object/error-handler.d.ts +16 -0
  40. package/dist/remote-object/error-handler.d.ts.map +1 -0
  41. package/dist/remote-object/error-handler.js +149 -0
  42. package/dist/remote-object/error-handler.js.map +1 -0
  43. package/dist/remote-object/index.d.ts +8 -0
  44. package/dist/remote-object/index.d.ts.map +1 -0
  45. package/dist/remote-object/index.js +24 -0
  46. package/dist/remote-object/index.js.map +1 -0
  47. package/dist/remote-object/interfaces.d.ts +42 -0
  48. package/dist/remote-object/interfaces.d.ts.map +1 -0
  49. package/dist/remote-object/interfaces.js +3 -0
  50. package/dist/remote-object/interfaces.js.map +1 -0
  51. package/dist/remote-object/middleware-factory.d.ts +14 -0
  52. package/dist/remote-object/middleware-factory.d.ts.map +1 -0
  53. package/dist/remote-object/middleware-factory.js +66 -0
  54. package/dist/remote-object/middleware-factory.js.map +1 -0
  55. package/dist/remote-object/request-data-parser.d.ts +18 -0
  56. package/dist/remote-object/request-data-parser.d.ts.map +1 -0
  57. package/dist/remote-object/request-data-parser.js +75 -0
  58. package/dist/remote-object/request-data-parser.js.map +1 -0
  59. package/dist/remote-object/response-handler.d.ts +6 -0
  60. package/dist/remote-object/response-handler.d.ts.map +1 -0
  61. package/dist/remote-object/response-handler.js +20 -0
  62. package/dist/remote-object/response-handler.js.map +1 -0
  63. package/dist/remote-object.d.ts +50 -0
  64. package/dist/remote-object.d.ts.map +1 -0
  65. package/dist/remote-object.js +102 -0
  66. package/dist/remote-object.js.map +1 -0
  67. package/dist/server/acl-registry.d.ts +12 -0
  68. package/dist/server/acl-registry.d.ts.map +1 -0
  69. package/dist/server/acl-registry.js +21 -0
  70. package/dist/server/acl-registry.js.map +1 -0
  71. package/dist/server/api-config-registry.d.ts +10 -0
  72. package/dist/server/api-config-registry.d.ts.map +1 -0
  73. package/dist/server/api-config-registry.js +19 -0
  74. package/dist/server/api-config-registry.js.map +1 -0
  75. package/dist/server/configuration-manager.d.ts +12 -0
  76. package/dist/server/configuration-manager.d.ts.map +1 -0
  77. package/dist/server/configuration-manager.js +62 -0
  78. package/dist/server/configuration-manager.js.map +1 -0
  79. package/dist/server/endpoint-registrar.d.ts +13 -0
  80. package/dist/server/endpoint-registrar.d.ts.map +1 -0
  81. package/dist/server/endpoint-registrar.js +92 -0
  82. package/dist/server/endpoint-registrar.js.map +1 -0
  83. package/dist/server/express-app-manager.d.ts +14 -0
  84. package/dist/server/express-app-manager.d.ts.map +1 -0
  85. package/dist/server/express-app-manager.js +33 -0
  86. package/dist/server/express-app-manager.js.map +1 -0
  87. package/dist/server/http-server-manager.d.ts +16 -0
  88. package/dist/server/http-server-manager.d.ts.map +1 -0
  89. package/dist/server/http-server-manager.js +40 -0
  90. package/dist/server/http-server-manager.js.map +1 -0
  91. package/dist/server/index.d.ts +9 -0
  92. package/dist/server/index.d.ts.map +1 -0
  93. package/dist/server/index.js +33 -0
  94. package/dist/server/index.js.map +1 -0
  95. package/dist/server/interfaces.d.ts +70 -0
  96. package/dist/server/interfaces.d.ts.map +1 -0
  97. package/dist/server/interfaces.js +3 -0
  98. package/dist/server/interfaces.js.map +1 -0
  99. package/dist/server/lifecycle-manager.d.ts +19 -0
  100. package/dist/server/lifecycle-manager.d.ts.map +1 -0
  101. package/dist/server/lifecycle-manager.js +60 -0
  102. package/dist/server/lifecycle-manager.js.map +1 -0
  103. package/dist/server-config.d.ts +10 -0
  104. package/dist/server-config.d.ts.map +1 -0
  105. package/dist/server-config.js +3 -0
  106. package/dist/server-config.js.map +1 -0
  107. package/dist/server.d.ts +53 -0
  108. package/dist/server.d.ts.map +1 -0
  109. package/dist/server.js +115 -0
  110. package/dist/server.js.map +1 -0
  111. package/package.json +66 -0
  112. package/tsconfig.json +27 -0
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ErrorHandler = void 0;
4
+ const om_1 = require("@datacapy/om");
5
+ class ErrorHandler {
6
+ constructor(logger, exposeErrorDetails = false) {
7
+ this.logger = logger;
8
+ this.exposeErrorDetails = exposeErrorDetails;
9
+ }
10
+ setLogger(logger) {
11
+ this.logger = logger;
12
+ }
13
+ setExposeErrorDetails(exposeErrorDetails) {
14
+ this.exposeErrorDetails = exposeErrorDetails;
15
+ }
16
+ setErrorTranslator(errorTranslator) {
17
+ this.errorTranslator = errorTranslator;
18
+ }
19
+ async handleEndpointError(err, res, req, endpointName, method, responseErrorConfig) {
20
+ try {
21
+ if (this.errorTranslator) {
22
+ err = await this.errorTranslator(err, req);
23
+ }
24
+ const error = err instanceof Error ? err : null;
25
+ let errorHandled = false;
26
+ let resolvedStatusCode;
27
+ if (Object.keys(responseErrorConfig).length) {
28
+ for (const errorName in responseErrorConfig) {
29
+ if (error && errorName !== error.constructor.name) {
30
+ continue;
31
+ }
32
+ const errorConfig = responseErrorConfig[errorName];
33
+ const schemaConfig = errorConfig.schema ? errorConfig.schema : null;
34
+ const httpConfig = errorConfig.http ? errorConfig.http : {};
35
+ const code = httpConfig.code ? httpConfig.code : 400;
36
+ const contentType = httpConfig.contentType
37
+ ? httpConfig.contentType
38
+ : 'json';
39
+ const validateResultError = schemaConfig
40
+ ? await new om_1.Schema(schemaConfig).validate(err)
41
+ : { isValid: true };
42
+ if (validateResultError.isValid) {
43
+ if (contentType == 'json') {
44
+ res.status(code).json(error);
45
+ }
46
+ else {
47
+ if (contentType)
48
+ res.type(contentType);
49
+ res.status(code).send(error === null || error === void 0 ? void 0 : error.message);
50
+ }
51
+ errorHandled = true;
52
+ resolvedStatusCode = code;
53
+ }
54
+ break;
55
+ }
56
+ }
57
+ if (!errorHandled) {
58
+ resolvedStatusCode = 500;
59
+ }
60
+ this.logError(err, errorHandled, req, endpointName, method, resolvedStatusCode);
61
+ if (!errorHandled) {
62
+ this.sendUnhandledErrorResponse(res, err, endpointName, method);
63
+ }
64
+ }
65
+ catch (outerErr) {
66
+ this.handleFatalError(outerErr, err, res);
67
+ }
68
+ }
69
+ logError(err, errorHandled, req, endpointName, method, statusCode) {
70
+ var _a, _b, _c;
71
+ const isInTest = typeof global.it === 'function';
72
+ if (!isInTest &&
73
+ (err.ref == undefined || err.logged || !errorHandled)) {
74
+ const errorMessage = (err === null || err === void 0 ? void 0 : err.message) || ((_a = err === null || err === void 0 ? void 0 : err.toString) === null || _a === void 0 ? void 0 : _a.call(err)) || String(err) || 'Unknown error';
75
+ const errorStack = (err === null || err === void 0 ? void 0 : err.stack) ||
76
+ (err instanceof Error ? new Error().stack : null) ||
77
+ 'No stack trace available';
78
+ const errorName = (err === null || err === void 0 ? void 0 : err.name) || ((_b = err === null || err === void 0 ? void 0 : err.constructor) === null || _b === void 0 ? void 0 : _b.name) || 'Error';
79
+ const errorDetails = [
80
+ `Endpoint: ${endpointName}`,
81
+ `Method: ${method}`,
82
+ `Error: ${errorName} - ${errorMessage}`,
83
+ `Stack: ${errorStack}`,
84
+ !errorHandled
85
+ ? 'WARNING: Error was not handled by endpoint error config'
86
+ : null,
87
+ ]
88
+ .filter(Boolean)
89
+ .join('\n');
90
+ console.error(errorDetails);
91
+ (_c = this.logger) === null || _c === void 0 ? void 0 : _c.error({
92
+ endpoint: endpointName,
93
+ method: method,
94
+ errorName: errorName,
95
+ errorMessage: errorMessage,
96
+ errorStack: errorStack,
97
+ errorCode: err === null || err === void 0 ? void 0 : err.code,
98
+ errorRef: err === null || err === void 0 ? void 0 : err.ref,
99
+ handled: errorHandled,
100
+ statusCode: statusCode,
101
+ req: this.getMinimalRequestInfo(req),
102
+ });
103
+ }
104
+ }
105
+ sendUnhandledErrorResponse(res, err, endpointName, method) {
106
+ if (!res.headersSent) {
107
+ const message = this.exposeErrorDetails
108
+ ? (err === null || err === void 0 ? void 0 : err.message) || 'An unexpected error occurred'
109
+ : 'An unexpected error occurred';
110
+ res.status(500).json({
111
+ error: 'InternalServerError',
112
+ message,
113
+ endpoint: endpointName,
114
+ method: method,
115
+ });
116
+ }
117
+ }
118
+ handleFatalError(outerErr, originalErr, res) {
119
+ console.error('=== FATAL: Error in error handler ===\n' +
120
+ `Outer error: ${outerErr}\n` +
121
+ `Original error: ${originalErr}`);
122
+ if (!res.headersSent) {
123
+ try {
124
+ res.status(500).json({
125
+ error: 'FatalServerError',
126
+ message: 'A fatal error occurred in the error handler',
127
+ });
128
+ }
129
+ catch (finalErr) {
130
+ res.status(500).end('Fatal server error');
131
+ }
132
+ }
133
+ }
134
+ getMinimalRequestInfo(req) {
135
+ return {
136
+ url: req.url,
137
+ originalUrl: req.originalUrl,
138
+ method: req.method,
139
+ query: req.query,
140
+ params: req.params,
141
+ ip: req.ip,
142
+ headers: req.headers,
143
+ cookies: req.cookies,
144
+ body: req.body,
145
+ };
146
+ }
147
+ }
148
+ exports.ErrorHandler = ErrorHandler;
149
+ //# sourceMappingURL=error-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/remote-object/error-handler.ts"],"names":[],"mappings":";;;AAAA,qCAA6D;AAa7D,MAAa,YAAY;IAKvB,YAAY,MAAuB,EAAE,kBAAkB,GAAG,KAAK;QAC7D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAA;IAC9C,CAAC;IAKD,SAAS,CAAC,MAAuB;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAQD,qBAAqB,CAAC,kBAA2B;QAC/C,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAA;IAC9C,CAAC;IAOD,kBAAkB,CAAC,eAAgC;QACjD,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;IACxC,CAAC;IAKD,KAAK,CAAC,mBAAmB,CACvB,GAAQ,EACR,GAAsB,EACtB,GAAqB,EACrB,YAAoB,EACpB,MAAc,EACd,mBAAwB;QAExB,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBACzB,GAAG,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;YAC5C,CAAC;YAED,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAA;YAC/C,IAAI,YAAY,GAAG,KAAK,CAAA;YACxB,IAAI,kBAAsC,CAAA;YAE1C,IAAI,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,MAAM,EAAE,CAAC;gBAC5C,KAAK,MAAM,SAAS,IAAI,mBAAmB,EAAE,CAAC;oBAC5C,IAAI,KAAK,IAAI,SAAS,KAAK,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;wBAClD,SAAQ;oBACV,CAAC;oBAED,MAAM,WAAW,GAAG,mBAAmB,CACrC,SAAS,CACyB,CAAA;oBACpC,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAA;oBACnE,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;oBAC3D,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAA;oBACpD,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW;wBACxC,CAAC,CAAC,UAAU,CAAC,WAAW;wBACxB,CAAC,CAAC,MAAM,CAAA;oBAEV,MAAM,mBAAmB,GAA2B,YAAY;wBAC9D,CAAC,CAAC,MAAM,IAAI,WAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;wBAC9C,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;oBAErB,IAAI,mBAAmB,CAAC,OAAO,EAAE,CAAC;wBAChC,IAAI,WAAW,IAAI,MAAM,EAAE,CAAC;4BAC1B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;wBAC9B,CAAC;6BAAM,CAAC;4BACN,IAAI,WAAW;gCAAE,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;4BACtC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,CAAC,CAAA;wBACvC,CAAC;wBACD,YAAY,GAAG,IAAI,CAAA;wBACnB,kBAAkB,GAAG,IAAI,CAAA;oBAC3B,CAAC;oBACD,MAAK;gBACP,CAAC;YACH,CAAC;YAED,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,kBAAkB,GAAG,GAAG,CAAA;YAC1B,CAAC;YAED,IAAI,CAAC,QAAQ,CACX,GAAG,EACH,YAAY,EACZ,GAAG,EACH,YAAY,EACZ,MAAM,EACN,kBAAkB,CACnB,CAAA;YAED,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,IAAI,CAAC,0BAA0B,CAAC,GAAG,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,CAAC,CAAA;YACjE,CAAC;QACH,CAAC;QAAC,OAAO,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC;IAKO,QAAQ,CACd,GAAQ,EACR,YAAqB,EACrB,GAAqB,EACrB,YAAoB,EACpB,MAAc,EACd,UAAmB;;QAEnB,MAAM,QAAQ,GAAG,OAAO,MAAM,CAAC,EAAE,KAAK,UAAU,CAAA;QAEhD,IACE,CAAC,QAAQ;YAGT,CAAC,GAAG,CAAC,GAAG,IAAI,SAAS,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,EACrD,CAAC;YACD,MAAM,YAAY,GAChB,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,OAAO,MAAI,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,QAAQ,mDAAI,CAAA,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,eAAe,CAAA;YACrE,MAAM,UAAU,GACd,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,KAAK;gBACV,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;gBACjD,0BAA0B,CAAA;YAC5B,MAAM,SAAS,GAAG,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,IAAI,MAAI,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,WAAW,0CAAE,IAAI,CAAA,IAAI,OAAO,CAAA;YAEhE,MAAM,YAAY,GAAG;gBACnB,aAAa,YAAY,EAAE;gBAC3B,WAAW,MAAM,EAAE;gBACnB,UAAU,SAAS,MAAM,YAAY,EAAE;gBACvC,UAAU,UAAU,EAAE;gBACtB,CAAC,YAAY;oBACX,CAAC,CAAC,yDAAyD;oBAC3D,CAAC,CAAC,IAAI;aACT;iBACE,MAAM,CAAC,OAAO,CAAC;iBACf,IAAI,CAAC,IAAI,CAAC,CAAA;YAEb,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;YAE3B,MAAA,IAAI,CAAC,MAAM,0CAAE,KAAK,CAAC;gBACjB,QAAQ,EAAE,YAAY;gBACtB,MAAM,EAAE,MAAM;gBACd,SAAS,EAAE,SAAS;gBACpB,YAAY,EAAE,YAAY;gBAC1B,UAAU,EAAE,UAAU;gBACtB,SAAS,EAAE,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,IAAI;gBACpB,QAAQ,EAAE,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,GAAG;gBAClB,OAAO,EAAE,YAAY;gBACrB,UAAU,EAAE,UAAU;gBACtB,GAAG,EAAE,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC;aACrC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAKO,0BAA0B,CAChC,GAAsB,EACtB,GAAQ,EACR,YAAoB,EACpB,MAAc;QAEd,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB;gBACrC,CAAC,CAAC,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,OAAO,KAAI,8BAA8B;gBAChD,CAAC,CAAC,8BAA8B,CAAA;YAClC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,KAAK,EAAE,qBAAqB;gBAC5B,OAAO;gBACP,QAAQ,EAAE,YAAY;gBACtB,MAAM,EAAE,MAAM;aACf,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAKO,gBAAgB,CACtB,QAAa,EACb,WAAgB,EAChB,GAAsB;QAEtB,OAAO,CAAC,KAAK,CACX,yCAAyC;YACvC,gBAAgB,QAAQ,IAAI;YAC5B,mBAAmB,WAAW,EAAE,CACnC,CAAA;QAED,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACnB,KAAK,EAAE,kBAAkB;oBACzB,OAAO,EAAE,6CAA6C;iBACvD,CAAC,CAAA;YACJ,CAAC;YAAC,OAAO,QAAQ,EAAE,CAAC;gBAClB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;YAC3C,CAAC;QACH,CAAC;IACH,CAAC;IAKO,qBAAqB,CAAC,GAAqB;QACjD,OAAO;YACL,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,IAAI,EAAE,GAAG,CAAC,IAAI;SACf,CAAA;IACH,CAAC;CACF;AAvOD,oCAuOC"}
@@ -0,0 +1,8 @@
1
+ export * from './interfaces';
2
+ export * from './request-data-parser';
3
+ export * from './body-parser-configurer';
4
+ export * from './response-handler';
5
+ export * from './error-handler';
6
+ export * from './endpoint-resolver';
7
+ export * from './middleware-factory';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/remote-object/index.ts"],"names":[],"mappings":"AAKA,cAAc,cAAc,CAAA;AAC5B,cAAc,uBAAuB,CAAA;AACrC,cAAc,0BAA0B,CAAA;AACxC,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA"}
@@ -0,0 +1,24 @@
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"), exports);
18
+ __exportStar(require("./request-data-parser"), exports);
19
+ __exportStar(require("./body-parser-configurer"), exports);
20
+ __exportStar(require("./response-handler"), exports);
21
+ __exportStar(require("./error-handler"), exports);
22
+ __exportStar(require("./endpoint-resolver"), exports);
23
+ __exportStar(require("./middleware-factory"), exports);
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/remote-object/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAKA,+CAA4B;AAC5B,wDAAqC;AACrC,2DAAwC;AACxC,qDAAkC;AAClC,kDAA+B;AAC/B,sDAAmC;AACnC,uDAAoC"}
@@ -0,0 +1,42 @@
1
+ export interface LoggerInterface {
2
+ error(message: any, ...optionalParams: any[]): void;
3
+ warn?(message: any, ...optionalParams: any[]): void;
4
+ info?(message: any, ...optionalParams: any[]): void;
5
+ debug?(message: any, ...optionalParams: any[]): void;
6
+ }
7
+ export interface ModelManagerInterface {
8
+ services: {
9
+ [key: string]: any;
10
+ };
11
+ repos: {
12
+ [key: string]: any;
13
+ };
14
+ }
15
+ export type ErrorTranslator = (err: any, req: RequestInterface) => any | Promise<any>;
16
+ export interface RequestInterface {
17
+ url: string;
18
+ originalUrl: string;
19
+ method: string;
20
+ query?: any;
21
+ params?: any;
22
+ body?: any;
23
+ ip?: string;
24
+ headers?: any;
25
+ cookies?: any;
26
+ aclContext?: any;
27
+ aclConditions?: any;
28
+ get(header: string): string | undefined;
29
+ }
30
+ export interface ResponseInterface {
31
+ status(code: number): ResponseInterface;
32
+ json(data: any): ResponseInterface;
33
+ send(data: any): ResponseInterface;
34
+ type(contentType: string): ResponseInterface;
35
+ headersSent: boolean;
36
+ end(data?: any): void;
37
+ }
38
+ export interface AclInterface {
39
+ populateContext(req: RequestInterface, context: any, remoteObject: any): Promise<boolean>;
40
+ isPermitted(endpointName: string, context: any): Promise<boolean | object>;
41
+ }
42
+ //# sourceMappingURL=interfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/remote-object/interfaces.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;IACnD,IAAI,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;IACnD,IAAI,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;IACnD,KAAK,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;CACrD;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAA;IAChC,KAAK,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAA;CAC9B;AAED,MAAM,MAAM,eAAe,GAAG,CAC5B,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,gBAAgB,KAClB,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;AAEvB,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,GAAG,CAAA;IACX,MAAM,CAAC,EAAE,GAAG,CAAA;IACZ,IAAI,CAAC,EAAE,GAAG,CAAA;IACV,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,OAAO,CAAC,EAAE,GAAG,CAAA;IACb,OAAO,CAAC,EAAE,GAAG,CAAA;IACb,UAAU,CAAC,EAAE,GAAG,CAAA;IAChB,aAAa,CAAC,EAAE,GAAG,CAAA;IACnB,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;CACxC;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAAA;IACvC,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,iBAAiB,CAAA;IAClC,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,iBAAiB,CAAA;IAClC,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,iBAAiB,CAAA;IAC5C,WAAW,EAAE,OAAO,CAAA;IACpB,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,CAAA;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,eAAe,CACb,GAAG,EAAE,gBAAgB,EACrB,OAAO,EAAE,GAAG,EACZ,YAAY,EAAE,GAAG,GAChB,OAAO,CAAC,OAAO,CAAC,CAAA;IACnB,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,CAAA;CAC3E"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/remote-object/interfaces.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import { RequestInterface, ResponseInterface } from './interfaces';
2
+ import { ServerApiConfigEndpoint, ServerApiConfigEndpointResponse } from '../api-config';
3
+ import { RequestDataParser } from './request-data-parser';
4
+ import { ResponseHandler } from './response-handler';
5
+ import { ErrorHandler } from './error-handler';
6
+ export declare class MiddlewareFactory {
7
+ private requestDataParser;
8
+ private responseHandler;
9
+ private errorHandler;
10
+ private remoteObjectContext;
11
+ constructor(requestDataParser: RequestDataParser, responseHandler: ResponseHandler, errorHandler: ErrorHandler, remoteObjectContext: any);
12
+ createMiddlewareCallback(endpointName: string, endpointConfig: ServerApiConfigEndpoint, endpointObject: any, method: string, requestDataConfig: any, responseSuccess: ServerApiConfigEndpointResponse, responseErrorConfig: any): (req: RequestInterface, res: ResponseInterface) => Promise<void>;
13
+ }
14
+ //# sourceMappingURL=middleware-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware-factory.d.ts","sourceRoot":"","sources":["../../src/remote-object/middleware-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAChF,OAAO,EACL,uBAAuB,EACvB,+BAA+B,EAChC,MAAM,eAAe,CAAA;AAKtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAM9C,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,iBAAiB,CAAmB;IAC5C,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,mBAAmB,CAAK;gBAG9B,iBAAiB,EAAE,iBAAiB,EACpC,eAAe,EAAE,eAAe,EAChC,YAAY,EAAE,YAAY,EAC1B,mBAAmB,EAAE,GAAG;IAW1B,wBAAwB,CACtB,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,uBAAuB,EACvC,cAAc,EAAE,GAAG,EACnB,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,GAAG,EACtB,eAAe,EAAE,+BAA+B,EAChD,mBAAmB,EAAE,GAAG,GACvB,CAAC,GAAG,EAAE,gBAAgB,EAAE,GAAG,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC;CA8FpE"}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MiddlewareFactory = void 0;
4
+ const error_1 = require("../error");
5
+ class MiddlewareFactory {
6
+ constructor(requestDataParser, responseHandler, errorHandler, remoteObjectContext) {
7
+ this.requestDataParser = requestDataParser;
8
+ this.responseHandler = responseHandler;
9
+ this.errorHandler = errorHandler;
10
+ this.remoteObjectContext = remoteObjectContext;
11
+ }
12
+ createMiddlewareCallback(endpointName, endpointConfig, endpointObject, method, requestDataConfig, responseSuccess, responseErrorConfig) {
13
+ return async (req, res) => {
14
+ try {
15
+ const requestData = this.requestDataParser.parseRequestData(requestDataConfig, req, res);
16
+ const validationSpec = this.requestDataParser.parseValidationSpec(requestDataConfig);
17
+ const validationResult = await this.requestDataParser.validateRequestData(requestData, validationSpec);
18
+ if (!validationResult.isValid) {
19
+ res.status(403).json({ validationErrors: validationResult.errors });
20
+ return;
21
+ }
22
+ if (endpointObject[method] === undefined) {
23
+ throw new Error('Method "' +
24
+ method +
25
+ '" is not defined in ' +
26
+ (endpointConfig.object
27
+ ? 'endpoint object'
28
+ : endpointConfig.service
29
+ ? `service "${endpointConfig.service}"`
30
+ : endpointConfig.repo
31
+ ? `repo "${endpointConfig.repo}"`
32
+ : 'config-level object') +
33
+ ' for endpoint "' +
34
+ endpointName +
35
+ '"');
36
+ }
37
+ const aclContext = { ...requestData };
38
+ const remoteObjectWrapper = {
39
+ ...this.remoteObjectContext,
40
+ object: endpointObject,
41
+ };
42
+ await this.remoteObjectContext.acl.populateContext(req, aclContext, remoteObjectWrapper);
43
+ req.aclContext = aclContext;
44
+ const isPermitted = await this.remoteObjectContext.acl.isPermitted(endpointName, aclContext);
45
+ if (isPermitted === false) {
46
+ throw new error_1.ServerErrorUnauthorized();
47
+ }
48
+ requestData.aclContext = aclContext;
49
+ requestData.aclConditions =
50
+ typeof isPermitted === 'object' ? isPermitted : {};
51
+ const response = await endpointObject[method].apply(endpointObject, [
52
+ requestData,
53
+ ]);
54
+ if (endpointConfig.skipResponse) {
55
+ return;
56
+ }
57
+ this.responseHandler.sendSuccessResponse(res, response, responseSuccess);
58
+ }
59
+ catch (err) {
60
+ await this.errorHandler.handleEndpointError(err, res, req, endpointName, method, responseErrorConfig);
61
+ }
62
+ };
63
+ }
64
+ }
65
+ exports.MiddlewareFactory = MiddlewareFactory;
66
+ //# sourceMappingURL=middleware-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware-factory.js","sourceRoot":"","sources":["../../src/remote-object/middleware-factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { RequestInterface, ResponseInterface } from './interfaces';
2
+ import { ServerConfig } from '../server-config';
3
+ export declare class RequestDataParser {
4
+ private serverConfig;
5
+ constructor(serverConfig: Partial<ServerConfig> & {
6
+ [key: string]: any;
7
+ });
8
+ parseRequestData(requestDataConfig: any, req: RequestInterface, res: ResponseInterface): {
9
+ [key: string]: any;
10
+ };
11
+ private parseOneRequestData;
12
+ parseValidationSpec(requestDataConfig: any): any;
13
+ validateRequestData(requestData: any, validationSpec: any): Promise<{
14
+ isValid: boolean;
15
+ errors?: any;
16
+ }>;
17
+ }
18
+ //# sourceMappingURL=request-data-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-data-parser.d.ts","sourceRoot":"","sources":["../../src/remote-object/request-data-parser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAM/C,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,YAAY,CAAgD;gBAExD,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;IAOxE,gBAAgB,CACd,iBAAiB,EAAE,GAAG,EACtB,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,iBAAiB,GACrB;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;IAgBzB,OAAO,CAAC,mBAAmB;IAuC3B,mBAAmB,CAAC,iBAAiB,EAAE,GAAG,GAAG,GAAG;IA8B1C,mBAAmB,CACvB,WAAW,EAAE,GAAG,EAChB,cAAc,EAAE,GAAG,GAClB,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;CAQ/C"}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RequestDataParser = void 0;
4
+ const om_1 = require("@datacapy/om");
5
+ class RequestDataParser {
6
+ constructor(serverConfig) {
7
+ this.serverConfig = serverConfig;
8
+ }
9
+ parseRequestData(requestDataConfig, req, res) {
10
+ const values = {};
11
+ for (const name in requestDataConfig) {
12
+ values[name] = this.parseOneRequestData(name, requestDataConfig[name], req, res);
13
+ }
14
+ return values;
15
+ }
16
+ parseOneRequestData(name, methodArgConfig, req, res) {
17
+ let value = undefined;
18
+ const src = methodArgConfig.src ? methodArgConfig.src : 'query';
19
+ const srcPath = methodArgConfig.srcPath ? methodArgConfig.srcPath : name;
20
+ const container = {
21
+ param: req.params ? req.params : {},
22
+ query: req.query ? req.query : {},
23
+ body: req.body ? req.body : {},
24
+ request: req,
25
+ response: res,
26
+ config: this.serverConfig ? this.serverConfig : {},
27
+ aclContext: req.aclContext ? req.aclContext : {},
28
+ aclConditions: req.aclConditions ? req.aclConditions : {},
29
+ };
30
+ switch (src) {
31
+ case 'header':
32
+ value = container.request.get(srcPath);
33
+ break;
34
+ case 'container':
35
+ value = om_1.ObjectPathAccessor.getPath(srcPath, container);
36
+ break;
37
+ default:
38
+ value = om_1.ObjectPathAccessor.getPath(srcPath, container[src]);
39
+ break;
40
+ }
41
+ return value;
42
+ }
43
+ parseValidationSpec(requestDataConfig) {
44
+ const spec = {};
45
+ const parseOne = (argConfig, key) => {
46
+ const type = argConfig.type ? argConfig.type : null;
47
+ spec[key] = {};
48
+ spec[key].$type = type;
49
+ spec[key].$validate = {};
50
+ spec[key].$filter = {};
51
+ if (argConfig.required !== undefined)
52
+ spec[key].$validate.required = argConfig.required;
53
+ if (argConfig.notNull !== undefined)
54
+ spec[key].$validate.notNull = argConfig.notNull;
55
+ if (argConfig.notEmpty !== undefined)
56
+ spec[key].$validate.notEmpty = argConfig.notEmpty;
57
+ if (argConfig.defaultValue !== undefined)
58
+ spec[key].$filter.defaultValue = argConfig.defaultValue;
59
+ };
60
+ for (const key in requestDataConfig) {
61
+ parseOne(requestDataConfig[key], key);
62
+ }
63
+ return spec;
64
+ }
65
+ async validateRequestData(requestData, validationSpec) {
66
+ const schema = new om_1.Schema(validationSpec);
67
+ const validateResult = await schema.validate(requestData);
68
+ return {
69
+ isValid: validateResult.isValid,
70
+ errors: validateResult.errors,
71
+ };
72
+ }
73
+ }
74
+ exports.RequestDataParser = RequestDataParser;
75
+ //# sourceMappingURL=request-data-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-data-parser.js","sourceRoot":"","sources":["../../src/remote-object/request-data-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { ResponseInterface } from './interfaces';
2
+ import { ServerApiConfigEndpointResponse } from '../api-config';
3
+ export declare class ResponseHandler {
4
+ sendSuccessResponse(res: ResponseInterface, response: any, responseSuccess: ServerApiConfigEndpointResponse): void;
5
+ }
6
+ //# sourceMappingURL=response-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-handler.d.ts","sourceRoot":"","sources":["../../src/remote-object/response-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,EAAE,+BAA+B,EAAE,MAAM,eAAe,CAAA;AAM/D,qBAAa,eAAe;IAI1B,mBAAmB,CACjB,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,GAAG,EACb,eAAe,EAAE,+BAA+B,GAC/C,IAAI;CAYR"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResponseHandler = void 0;
4
+ class ResponseHandler {
5
+ sendSuccessResponse(res, response, responseSuccess) {
6
+ const httpConfig = responseSuccess.http ? responseSuccess.http : {};
7
+ const code = httpConfig.code ? httpConfig.code : 200;
8
+ const contentType = httpConfig.contentType ? httpConfig.contentType : 'json';
9
+ if (contentType == 'json') {
10
+ res.status(code).json(response);
11
+ }
12
+ else {
13
+ if (contentType)
14
+ res.type(contentType);
15
+ res.status(code).send(response);
16
+ }
17
+ }
18
+ }
19
+ exports.ResponseHandler = ResponseHandler;
20
+ //# sourceMappingURL=response-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-handler.js","sourceRoot":"","sources":["../../src/remote-object/response-handler.ts"],"names":[],"mappings":";;;AAOA,MAAa,eAAe;IAI1B,mBAAmB,CACjB,GAAsB,EACtB,QAAa,EACb,eAAgD;QAEhD,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;QACnE,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAA;QACpD,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAA;QAE5E,IAAI,WAAW,IAAI,MAAM,EAAE,CAAC;YAC1B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACjC,CAAC;aAAM,CAAC;YACN,IAAI,WAAW;gBAAE,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;YACtC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACjC,CAAC;IACH,CAAC;CACF;AApBD,0CAoBC"}
@@ -0,0 +1,50 @@
1
+ import { ServerConfig } from './server-config';
2
+ import { ServerError } from './error';
3
+ import { ServerApiConfigAcl, ServerApiConfigEndpoint } from './api-config';
4
+ import { LoggerInterface, ModelManagerInterface, AclInterface, ErrorTranslator } from './remote-object/interfaces';
5
+ import { ServerBodyParserConfig } from './remote-object/body-parser-configurer';
6
+ export interface ServerRemoteObjectConfig {
7
+ path?: string;
8
+ acl?: ServerApiConfigAcl;
9
+ endpoints?: {
10
+ [key: string]: ServerApiConfigEndpoint;
11
+ };
12
+ server?: Partial<ServerConfig> & {
13
+ [key: string]: any;
14
+ };
15
+ remoteObjectName?: string;
16
+ }
17
+ export interface ServerMiddlewareConfig {
18
+ endpointName: string;
19
+ method: string;
20
+ verb: string;
21
+ path: string;
22
+ callback: Function;
23
+ priority: number;
24
+ bodyParserConfig?: ServerBodyParserConfig;
25
+ }
26
+ export declare class ServerRemoteObject {
27
+ static error: {
28
+ [key: string]: ServerError;
29
+ };
30
+ config: ServerRemoteObjectConfig;
31
+ object: any;
32
+ acl: AclInterface;
33
+ private modelManager?;
34
+ private requestDataParser;
35
+ private bodyParserConfigurer;
36
+ private responseHandler;
37
+ private errorHandler;
38
+ private endpointResolver;
39
+ private middlewareFactory;
40
+ constructor(object: any, config?: ServerRemoteObjectConfig, modelManager?: ModelManagerInterface);
41
+ setLogger(logger: LoggerInterface): this;
42
+ setErrorTranslator(errorTranslator?: ErrorTranslator): this;
43
+ initRouter(router: any): void;
44
+ setAcl(acl: AclInterface): void;
45
+ getMiddlewareConfig(): ServerMiddlewareConfig[];
46
+ }
47
+ export { ServerBodyParserConfig } from './remote-object/body-parser-configurer';
48
+ export { LoggerInterface, ModelManagerInterface, AclInterface, RequestInterface, ResponseInterface, } from './remote-object/interfaces';
49
+ export default ServerRemoteObject;
50
+ //# sourceMappingURL=remote-object.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-object.d.ts","sourceRoot":"","sources":["../src/remote-object.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAwC,MAAM,SAAS,CAAA;AAC3E,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EAExB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,YAAY,EACZ,eAAe,EAChB,MAAM,4BAA4B,CAAA;AAEnC,OAAO,EAEL,sBAAsB,EACvB,MAAM,wCAAwC,CAAA;AAM/C,MAAM,WAAW,wBAAwB;IACvC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,kBAAkB,CAAA;IACxB,SAAS,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,uBAAuB,CAAA;KAAE,CAAA;IACtD,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAA;IACvD,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,QAAQ,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,gBAAgB,CAAC,EAAE,sBAAsB,CAAA;CAC1C;AAMD,qBAAa,kBAAkB;IAC7B,MAAM,CAAC,KAAK,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAA;KAAE,CAAA;IAE5C,MAAM,EAAE,wBAAwB,CAAA;IAChC,MAAM,EAAE,GAAG,CAAA;IACX,GAAG,EAAE,YAAY,CAAA;IACjB,OAAO,CAAC,YAAY,CAAC,CAAuB;IAG5C,OAAO,CAAC,iBAAiB,CAAmB;IAC5C,OAAO,CAAC,oBAAoB,CAAsB;IAClD,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,iBAAiB,CAAmB;gBAG1C,MAAM,EAAE,GAAG,EACX,MAAM,CAAC,EAAE,wBAAwB,EACjC,YAAY,CAAC,EAAE,qBAAqB;IAoCtC,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAKxC,kBAAkB,CAAC,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI;IAO3D,UAAU,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI;IAc7B,MAAM,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI;IAI/B,mBAAmB,IAAI,sBAAsB,EAAE;CA8DhD;AAGD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAA;AAC/E,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,4BAA4B,CAAA;AAEnC,eAAe,kBAAkB,CAAA"}