@mocko/core 2.0.0-alpha.12

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 (117) hide show
  1. package/README.md +3 -0
  2. package/default.env +26 -0
  3. package/dist/api/deploy/deploy.controller.js +37 -0
  4. package/dist/api/deploy/deploy.controller.js.map +1 -0
  5. package/dist/api/deploy/deploy.router.js +40 -0
  6. package/dist/api/deploy/deploy.router.js.map +1 -0
  7. package/dist/api/deploy/deploy.service.js +55 -0
  8. package/dist/api/deploy/deploy.service.js.map +1 -0
  9. package/dist/api/flag/data/flag.dto.js +36 -0
  10. package/dist/api/flag/data/flag.dto.js.map +1 -0
  11. package/dist/api/flag/flag.controller.js +90 -0
  12. package/dist/api/flag/flag.controller.js.map +1 -0
  13. package/dist/api/flag/flag.memory-repository.js +37 -0
  14. package/dist/api/flag/flag.memory-repository.js.map +1 -0
  15. package/dist/api/flag/flag.redis-repository.js +44 -0
  16. package/dist/api/flag/flag.redis-repository.js.map +1 -0
  17. package/dist/api/flag/flag.repository.js +3 -0
  18. package/dist/api/flag/flag.repository.js.map +1 -0
  19. package/dist/api/flag/flag.router.js +61 -0
  20. package/dist/api/flag/flag.router.js.map +1 -0
  21. package/dist/api/flag/flag.service.js +88 -0
  22. package/dist/api/flag/flag.service.js.map +1 -0
  23. package/dist/api/health/health.controller.js +30 -0
  24. package/dist/api/health/health.controller.js.map +1 -0
  25. package/dist/api/health/health.router.js +35 -0
  26. package/dist/api/health/health.router.js.map +1 -0
  27. package/dist/api/health/health.service.js +35 -0
  28. package/dist/api/health/health.service.js.map +1 -0
  29. package/dist/api/host/data/core-host.dto.js +16 -0
  30. package/dist/api/host/data/core-host.dto.js.map +1 -0
  31. package/dist/api/host/host.controller.js +32 -0
  32. package/dist/api/host/host.controller.js.map +1 -0
  33. package/dist/api/host/host.router.js +35 -0
  34. package/dist/api/host/host.router.js.map +1 -0
  35. package/dist/api/host/host.service.js +30 -0
  36. package/dist/api/host/host.service.js.map +1 -0
  37. package/dist/api/mock/data/core-mock.dto.js +52 -0
  38. package/dist/api/mock/data/core-mock.dto.js.map +1 -0
  39. package/dist/api/mock/data/mock-failure.js +11 -0
  40. package/dist/api/mock/data/mock-failure.js.map +1 -0
  41. package/dist/api/mock/mock.controller.js +43 -0
  42. package/dist/api/mock/mock.controller.js.map +1 -0
  43. package/dist/api/mock/mock.handler.js +141 -0
  44. package/dist/api/mock/mock.handler.js.map +1 -0
  45. package/dist/api/mock/mock.repository.js +38 -0
  46. package/dist/api/mock/mock.repository.js.map +1 -0
  47. package/dist/api/mock/mock.router.js +50 -0
  48. package/dist/api/mock/mock.router.js.map +1 -0
  49. package/dist/api/mock/mock.service.js +111 -0
  50. package/dist/api/mock/mock.service.js.map +1 -0
  51. package/dist/api/proxy/proxy.controller.js +45 -0
  52. package/dist/api/proxy/proxy.controller.js.map +1 -0
  53. package/dist/api/proxy/proxy.router.js +62 -0
  54. package/dist/api/proxy/proxy.router.js.map +1 -0
  55. package/dist/api/proxy/proxy.service.js +48 -0
  56. package/dist/api/proxy/proxy.service.js.map +1 -0
  57. package/dist/config/config.constants.js +7 -0
  58. package/dist/config/config.constants.js.map +1 -0
  59. package/dist/config/config.service.js +89 -0
  60. package/dist/config/config.service.js.map +1 -0
  61. package/dist/definitions/data/data.js +3 -0
  62. package/dist/definitions/data/data.js.map +1 -0
  63. package/dist/definitions/data/host.js +35 -0
  64. package/dist/definitions/data/host.js.map +1 -0
  65. package/dist/definitions/data/mock.js +74 -0
  66. package/dist/definitions/data/mock.js.map +1 -0
  67. package/dist/definitions/data/mocko-definition.js +48 -0
  68. package/dist/definitions/data/mocko-definition.js.map +1 -0
  69. package/dist/definitions/definition.constants.js +6 -0
  70. package/dist/definitions/definition.constants.js.map +1 -0
  71. package/dist/definitions/definition.provider.js +185 -0
  72. package/dist/definitions/definition.provider.js.map +1 -0
  73. package/dist/helpers/flag.js +49 -0
  74. package/dist/helpers/flag.js.map +1 -0
  75. package/dist/helpers/log.js +30 -0
  76. package/dist/helpers/log.js.map +1 -0
  77. package/dist/helpers/response.js +54 -0
  78. package/dist/helpers/response.js.map +1 -0
  79. package/dist/listeners/deploy-listener.js +29 -0
  80. package/dist/listeners/deploy-listener.js.map +1 -0
  81. package/dist/listeners/index.js +26 -0
  82. package/dist/listeners/index.js.map +1 -0
  83. package/dist/main.js +26 -0
  84. package/dist/main.js.map +1 -0
  85. package/dist/main.router.js +51 -0
  86. package/dist/main.router.js.map +1 -0
  87. package/dist/plugins/h2o2.js +22 -0
  88. package/dist/plugins/h2o2.js.map +1 -0
  89. package/dist/plugins/index.js +29 -0
  90. package/dist/plugins/index.js.map +1 -0
  91. package/dist/plugins/logger.js +24 -0
  92. package/dist/plugins/logger.js.map +1 -0
  93. package/dist/redis/redis.provider.js +94 -0
  94. package/dist/redis/redis.provider.js.map +1 -0
  95. package/dist/server.js +153 -0
  96. package/dist/server.js.map +1 -0
  97. package/dist/tsconfig.tsbuildinfo +1 -0
  98. package/dist/utils/decorators/provider.js +6 -0
  99. package/dist/utils/decorators/provider.js.map +1 -0
  100. package/dist/utils/decorators/service.js +6 -0
  101. package/dist/utils/decorators/service.js.map +1 -0
  102. package/dist/utils/listener.js +3 -0
  103. package/dist/utils/listener.js.map +1 -0
  104. package/dist/utils/logger.js +7 -0
  105. package/dist/utils/logger.js.map +1 -0
  106. package/dist/utils/plugin.js +3 -0
  107. package/dist/utils/plugin.js.map +1 -0
  108. package/dist/utils/remap-event-bus.js +26 -0
  109. package/dist/utils/remap-event-bus.js.map +1 -0
  110. package/dist/utils/router.js +3 -0
  111. package/dist/utils/router.js.map +1 -0
  112. package/dist/utils/stream.js +9 -0
  113. package/dist/utils/stream.js.map +1 -0
  114. package/dist/utils/utils.js +54 -0
  115. package/dist/utils/utils.js.map +1 -0
  116. package/nodemon.json +6 -0
  117. package/package.json +58 -0
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.MockService = void 0;
16
+ const service_1 = require("../../utils/decorators/service");
17
+ const mock_repository_1 = require("./mock.repository");
18
+ const proxy_controller_1 = require("../proxy/proxy.controller");
19
+ const flag_service_1 = require("../flag/flag.service");
20
+ const logger_1 = require("../../utils/logger");
21
+ const inversify_1 = require("inversify");
22
+ const mock_handler_1 = require("./mock.handler");
23
+ const LogHelpers = require("../../helpers/log");
24
+ const ResponseHelpers = require("../../helpers/response");
25
+ const FlagHelpers = require("../../helpers/flag");
26
+ const definition_provider_1 = require("../../definitions/definition.provider");
27
+ const bigodon_1 = require("bigodon");
28
+ const core_mock_dto_1 = require("./data/core-mock.dto");
29
+ let MockService = class MockService {
30
+ constructor(logger, repository, proxyController, flagService, definitionProvider) {
31
+ this.logger = logger;
32
+ this.repository = repository;
33
+ this.proxyController = proxyController;
34
+ this.flagService = flagService;
35
+ this.definitionProvider = definitionProvider;
36
+ this.bigodon = new bigodon_1.default();
37
+ }
38
+ async getMockRoutes() {
39
+ const options = await this.definitionProvider.getDefinitions();
40
+ this.registerHelpers();
41
+ return options.mocks
42
+ .filter((mock) => mock.isEnabled)
43
+ .filter((mock) => !this.isReservedPath(mock.path))
44
+ .map((mock) => this.mockToRoute(mock, options.data, options.hosts));
45
+ }
46
+ mockToRoute(mock, data, hosts) {
47
+ let config = {};
48
+ const handler = new mock_handler_1.MockHandler(this.bigodon, this.repository, this.proxyController, this.logger, mock, data).handle;
49
+ const vhost = this.resolveMockHost(mock.host, hosts);
50
+ if (mock.parse === false) {
51
+ config = {
52
+ payload: {
53
+ output: 'stream',
54
+ parse: false,
55
+ },
56
+ };
57
+ }
58
+ return {
59
+ method: mock.method,
60
+ path: mock.path,
61
+ vhost,
62
+ handler,
63
+ config,
64
+ };
65
+ }
66
+ async listMocks() {
67
+ const options = await this.definitionProvider.getDefinitions();
68
+ return options.mocks.map((mock) => core_mock_dto_1.CoreMockDto.ofMock(mock));
69
+ }
70
+ resolveMockHost(hostName, hosts) {
71
+ if (!hostName) {
72
+ return undefined;
73
+ }
74
+ const host = hosts.find((item) => item.slug === hostName || item.source === hostName);
75
+ return (host === null || host === void 0 ? void 0 : host.source) || hostName;
76
+ }
77
+ async getMockById(id) {
78
+ const options = await this.definitionProvider.getDefinitions();
79
+ const mock = options.mocks.find((item) => item.id === id);
80
+ if (!mock) {
81
+ return null;
82
+ }
83
+ const failure = await this.repository.getFailure(id);
84
+ return core_mock_dto_1.CoreMockDetailsDto.of(mock, failure);
85
+ }
86
+ isReservedPath(path) {
87
+ return path === '/__mocko__' || path.startsWith('/__mocko__/');
88
+ }
89
+ registerHelpers() {
90
+ this.bigodon.addHelper('log', LogHelpers.log(this.logger));
91
+ this.bigodon.addHelper('warn', LogHelpers.warn(this.logger));
92
+ this.bigodon.addHelper('error', LogHelpers.error(this.logger));
93
+ this.bigodon.addHelper('setStatus', ResponseHelpers.setStatus);
94
+ this.bigodon.addHelper('proxy', ResponseHelpers.proxy(this.definitionProvider));
95
+ this.bigodon.addHelper('setHeader', ResponseHelpers.setHeader);
96
+ this.bigodon.addHelper('getFlag', FlagHelpers.getFlag(this.flagService));
97
+ this.bigodon.addHelper('setFlag', FlagHelpers.setFlag(this.flagService));
98
+ this.bigodon.addHelper('delFlag', FlagHelpers.delFlag(this.flagService));
99
+ this.bigodon.addHelper('hasFlag', FlagHelpers.hasFlag(this.flagService));
100
+ }
101
+ };
102
+ exports.MockService = MockService;
103
+ exports.MockService = MockService = __decorate([
104
+ (0, service_1.Service)(),
105
+ __param(0, (0, inversify_1.inject)(logger_1.Logger)),
106
+ __metadata("design:paramtypes", [Object, mock_repository_1.MockRepository,
107
+ proxy_controller_1.ProxyController,
108
+ flag_service_1.FlagService,
109
+ definition_provider_1.DefinitionProvider])
110
+ ], MockService);
111
+ //# sourceMappingURL=mock.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock.service.js","sourceRoot":"","sources":["../../../src/api/mock/mock.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ProxyController = void 0;
13
+ const provider_1 = require("../../utils/decorators/provider");
14
+ const proxy_service_1 = require("./proxy.service");
15
+ const Boom = require("@hapi/boom");
16
+ const config_service_1 = require("../../config/config.service");
17
+ const debug = require('debug')('mocko:proxy:proxy:controller');
18
+ const TIMEOUT = config_service_1.configProvider.getNumber('PROXY_TIMEOUT-MILLIS');
19
+ let ProxyController = class ProxyController {
20
+ constructor(service) {
21
+ this.service = service;
22
+ }
23
+ proxyRequest(request, h, overrideUri, logLabel) {
24
+ const mustProxy = this.service.isProxyEnabled() || !!overrideUri;
25
+ const uri = this.service.getProxyUri(overrideUri) + request.url.search;
26
+ if (!mustProxy) {
27
+ debug(`cannot proxy '${request.method.toUpperCase()} ${request.path}', proxying is disabled`);
28
+ throw Boom.notFound('No mock was found for this endpoint and method. Proxying is also disabled.');
29
+ }
30
+ request['_label'] = logLabel || 'proxy';
31
+ debug(`proxying '${request.method.toUpperCase()} ${request.path}' to ${uri}`);
32
+ return h.proxy({
33
+ uri,
34
+ passThrough: true,
35
+ xforward: true,
36
+ timeout: TIMEOUT
37
+ });
38
+ }
39
+ };
40
+ exports.ProxyController = ProxyController;
41
+ exports.ProxyController = ProxyController = __decorate([
42
+ (0, provider_1.Provider)(),
43
+ __metadata("design:paramtypes", [proxy_service_1.ProxyService])
44
+ ], ProxyController);
45
+ //# sourceMappingURL=proxy.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.controller.js","sourceRoot":"","sources":["../../../src/api/proxy/proxy.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,8DAAyD;AAEzD,mDAA6C;AAC7C,mCAAmC;AACnC,gEAA2D;AAE3D,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,8BAA8B,CAAC,CAAC;AAE/D,MAAM,OAAO,GAAG,+BAAc,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;AAG1D,IAAM,eAAe,GAArB,MAAM,eAAe;IACxB,YACqB,OAAqB;QAArB,YAAO,GAAP,OAAO,CAAc;IACtC,CAAC;IAEL,YAAY,CAAC,OAAqB,EAAE,CAAuB,EAAE,WAAoB,EAAE,QAAiB;QAChG,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,WAAW,CAAC;QACjE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;QAEvE,IAAG,CAAC,SAAS,EAAE,CAAC;YACZ,KAAK,CAAC,iBAAiB,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,OAAO,CAAC,IAAI,yBAAyB,CAAC,CAAC;YAC9F,MAAM,IAAI,CAAC,QAAQ,CAAC,4EAA4E,CAAC,CAAC;QACtG,CAAC;QAED,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,IAAI,OAAO,CAAC;QAExC,KAAK,CAAC,aAAa,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,OAAO,CAAC,IAAI,QAAQ,GAAG,EAAE,CAAC,CAAC;QAC9E,OAAO,CAAC,CAAC,KAAK,CAAC;YACX,GAAG;YACH,WAAW,EAAE,IAAI;YACjB,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,OAAO;SACnB,CAAC,CAAC;IACP,CAAC;CACJ,CAAA;AAxBY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,mBAAQ,GAAE;qCAGuB,4BAAY;GAFjC,eAAe,CAwB3B"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ProxyRouter = void 0;
13
+ const provider_1 = require("../../utils/decorators/provider");
14
+ const proxy_controller_1 = require("./proxy.controller");
15
+ const proxy_service_1 = require("./proxy.service");
16
+ let ProxyRouter = class ProxyRouter {
17
+ constructor(controller, service) {
18
+ this.controller = controller;
19
+ this.service = service;
20
+ }
21
+ async getRoutes() {
22
+ const hosts = await this.service.getHosts();
23
+ return [{
24
+ method: '*',
25
+ path: '/{any*}',
26
+ handler: this.controller.proxyRequest.bind(this.controller),
27
+ config: {
28
+ payload: {
29
+ output: 'stream',
30
+ parse: false,
31
+ },
32
+ },
33
+ rules: {
34
+ mapSilently: true,
35
+ },
36
+ }, ...hosts.filter((host) => host.destination).map(h => this.hostToRoute(h))];
37
+ }
38
+ hostToRoute(host) {
39
+ return {
40
+ method: '*',
41
+ path: '/{any*}',
42
+ vhost: host.source,
43
+ handler: (req, h) => this.controller.proxyRequest(req, h, host.destination, `@${host.slug}`),
44
+ config: {
45
+ payload: {
46
+ output: 'stream',
47
+ parse: false,
48
+ },
49
+ },
50
+ rules: {
51
+ mapSilently: true,
52
+ },
53
+ };
54
+ }
55
+ };
56
+ exports.ProxyRouter = ProxyRouter;
57
+ exports.ProxyRouter = ProxyRouter = __decorate([
58
+ (0, provider_1.Provider)(),
59
+ __metadata("design:paramtypes", [proxy_controller_1.ProxyController,
60
+ proxy_service_1.ProxyService])
61
+ ], ProxyRouter);
62
+ //# sourceMappingURL=proxy.router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.router.js","sourceRoot":"","sources":["../../../src/api/proxy/proxy.router.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,8DAAyD;AACzD,yDAAmD;AACnD,mDAA+C;AAKxC,IAAM,WAAW,GAAjB,MAAM,WAAW;IACpB,YACqB,UAA2B,EAC3B,OAAqB;QADrB,eAAU,GAAV,UAAU,CAAiB;QAC3B,YAAO,GAAP,OAAO,CAAc;IACtC,CAAC;IAEL,KAAK,CAAC,SAAS;QACX,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QAE5C,OAAO,CAAC;gBACJ,MAAM,EAAE,GAAG;gBACX,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;gBAE3D,MAAM,EAAE;oBACJ,OAAO,EAAE;wBACL,MAAM,EAAE,QAAQ;wBAChB,KAAK,EAAE,KAAK;qBACf;iBACJ;gBACD,KAAK,EAAE;oBACH,WAAW,EAAE,IAAI;iBACpB;aACJ,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClF,CAAC;IAED,WAAW,CAAC,IAAU;QAClB,OAAO;YACH,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,IAAI,CAAC,MAAM;YAClB,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,WAAY,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAE7F,MAAM,EAAE;gBACJ,OAAO,EAAE;oBACL,MAAM,EAAE,QAAQ;oBAChB,KAAK,EAAE,KAAK;iBACf;aACJ;YACD,KAAK,EAAE;gBACH,WAAW,EAAE,IAAI;aACpB;SACJ,CAAC;IACN,CAAC;CACJ,CAAA;AA5CY,kCAAW;sBAAX,WAAW;IADvB,IAAA,mBAAQ,GAAE;qCAG0B,kCAAe;QAClB,4BAAY;GAHjC,WAAW,CA4CvB"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ProxyService = void 0;
13
+ const service_1 = require("../../utils/decorators/service");
14
+ const config_service_1 = require("../../config/config.service");
15
+ const definition_provider_1 = require("../../definitions/definition.provider");
16
+ const BASE_URI = config_service_1.configProvider.get('PROXY_BASE-URI');
17
+ let ProxyService = class ProxyService {
18
+ constructor(definitionProvider) {
19
+ this.definitionProvider = definitionProvider;
20
+ this.PROXY_URL = this.baseUriToH2o2Path(BASE_URI);
21
+ }
22
+ isProxyEnabled() {
23
+ return Boolean(BASE_URI.trim());
24
+ }
25
+ getProxyUri(overrideUri) {
26
+ if (overrideUri) {
27
+ return this.baseUriToH2o2Path(overrideUri);
28
+ }
29
+ return this.PROXY_URL;
30
+ }
31
+ async getHosts() {
32
+ const definitions = await this.definitionProvider.getDefinitions();
33
+ return definitions.hosts;
34
+ }
35
+ baseUriToH2o2Path(uri) {
36
+ let path = uri;
37
+ if (path.endsWith('/')) {
38
+ path = path.slice(0, -1);
39
+ }
40
+ return path + '{path}';
41
+ }
42
+ };
43
+ exports.ProxyService = ProxyService;
44
+ exports.ProxyService = ProxyService = __decorate([
45
+ (0, service_1.Service)(),
46
+ __metadata("design:paramtypes", [definition_provider_1.DefinitionProvider])
47
+ ], ProxyService);
48
+ //# sourceMappingURL=proxy.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.service.js","sourceRoot":"","sources":["../../../src/api/proxy/proxy.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,4DAAuD;AACvD,gEAA2D;AAC3D,+EAA2E;AAG3E,MAAM,QAAQ,GAAG,+BAAc,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAG/C,IAAM,YAAY,GAAlB,MAAM,YAAY;IAGrB,YACqB,kBAAsC;QAAtC,uBAAkB,GAAlB,kBAAkB,CAAoB;QAEvD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACtD,CAAC;IAED,cAAc;QACV,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,WAAW,CAAC,WAAoB;QAC5B,IAAG,WAAW,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,QAAQ;QACV,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE,CAAC;QACnE,OAAO,WAAW,CAAC,KAAK,CAAC;IAC7B,CAAC;IAEO,iBAAiB,CAAC,GAAW;QACjC,IAAI,IAAI,GAAG,GAAG,CAAC;QACf,IAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;QAED,OAAO,IAAI,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACJ,CAAA;AAlCY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,iBAAO,GAAE;qCAKmC,wCAAkB;GAJlD,YAAY,CAkCxB"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_CONFIG_PATH = exports.CONFIG_PATH = void 0;
4
+ const path = require("path");
5
+ exports.CONFIG_PATH = path.join(__dirname, '..', '..', '.env');
6
+ exports.DEFAULT_CONFIG_PATH = path.join(__dirname, '..', '..', 'default.env');
7
+ //# sourceMappingURL=config.constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.constants.js","sourceRoot":"","sources":["../../src/config/config.constants.ts"],"names":[],"mappings":";;;AAAA,6BAA6B;AAEhB,QAAA,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AACvD,QAAA,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC"}
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.configProvider = exports.ConfigProvider = void 0;
13
+ const dotenv = require("dotenv");
14
+ const fs = require("fs");
15
+ const config_constants_1 = require("./config.constants");
16
+ const provider_1 = require("../utils/decorators/provider");
17
+ const debug = require('debug')('mocko:proxy:config');
18
+ let ConfigProvider = class ConfigProvider {
19
+ constructor(configPath, defaultConfigPath) {
20
+ const path = this.assertConfig(configPath, defaultConfigPath);
21
+ this.config = { ...this.fromFile(path), ...process.env };
22
+ }
23
+ get(key) {
24
+ const value = this.getOptional(key);
25
+ if (typeof value === 'undefined') {
26
+ throw new Error(`Missing ${key} config`);
27
+ }
28
+ return value;
29
+ }
30
+ getOptional(key) {
31
+ return this.config[key];
32
+ }
33
+ getOptionalBoolean(key) {
34
+ const value = this.getOptional(key);
35
+ if (typeof value === 'undefined') {
36
+ return undefined;
37
+ }
38
+ return value.toLowerCase() === 'true';
39
+ }
40
+ getNumber(key) {
41
+ const value = Number(this.get(key));
42
+ if (isNaN(value)) {
43
+ throw new TypeError(`The config ${key} isn't a number`);
44
+ }
45
+ return value;
46
+ }
47
+ getBoolean(key) {
48
+ return this.get(key).toLowerCase() === 'true';
49
+ }
50
+ getRedisUrl() {
51
+ return this.getOptional('REDIS_URL');
52
+ }
53
+ getRedisPrefix() {
54
+ const prefix = this.getOptional('REDIS_PREFIX') || 'mocko:';
55
+ return `${prefix.endsWith(':') ? prefix : `${prefix}:`}v2:`;
56
+ }
57
+ getRedisConfig() {
58
+ return {
59
+ port: this.getNumber('REDIS_PORT'),
60
+ host: this.get('REDIS_HOST'),
61
+ password: this.getOptional('REDIS_PASSWORD'),
62
+ db: this.getNumber('REDIS_DATABASE'),
63
+ keyPrefix: this.getRedisPrefix(),
64
+ };
65
+ }
66
+ fromFile(path) {
67
+ return dotenv.parse(fs.readFileSync(path));
68
+ }
69
+ assertConfig(configPath, defaultConfigPath) {
70
+ if (fs.existsSync(configPath)) {
71
+ return configPath;
72
+ }
73
+ try {
74
+ fs.copyFileSync(defaultConfigPath, configPath);
75
+ return configPath;
76
+ }
77
+ catch (e) {
78
+ debug('Failed to copy default config to .env, using the default file');
79
+ return defaultConfigPath;
80
+ }
81
+ }
82
+ };
83
+ exports.ConfigProvider = ConfigProvider;
84
+ exports.ConfigProvider = ConfigProvider = __decorate([
85
+ (0, provider_1.Provider)(),
86
+ __metadata("design:paramtypes", [String, String])
87
+ ], ConfigProvider);
88
+ exports.configProvider = new ConfigProvider(config_constants_1.CONFIG_PATH, config_constants_1.DEFAULT_CONFIG_PATH);
89
+ //# sourceMappingURL=config.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.service.js","sourceRoot":"","sources":["../../src/config/config.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.js","sourceRoot":"","sources":["../../../src/definitions/data/data.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateHost = validateHost;
4
+ exports.hostFromConfig = hostFromConfig;
5
+ const Joi = require("joi");
6
+ const hostSchema = Joi.object({
7
+ slug: Joi.string().required(),
8
+ name: Joi.string().allow('').optional(),
9
+ source: Joi.string().hostname().required(),
10
+ destination: Joi.string().uri({ scheme: ['http', 'https'] }).optional(),
11
+ });
12
+ function validateHost(host) {
13
+ const validation = hostSchema.validate(host);
14
+ if (validation.error) {
15
+ throw new Error(validation.error.message);
16
+ }
17
+ return validation.value;
18
+ }
19
+ function hostFromConfig(slug, data) {
20
+ var _a, _b, _c;
21
+ const host = {
22
+ slug,
23
+ name: (_a = data === null || data === void 0 ? void 0 : data[0]) === null || _a === void 0 ? void 0 : _a.name,
24
+ source: (_b = data === null || data === void 0 ? void 0 : data[0]) === null || _b === void 0 ? void 0 : _b.source,
25
+ destination: (_c = data === null || data === void 0 ? void 0 : data[0]) === null || _c === void 0 ? void 0 : _c.destination,
26
+ };
27
+ try {
28
+ return validateHost(host);
29
+ }
30
+ catch (error) {
31
+ throw new Error(`On host '${slug}', ${error.message}`);
32
+ }
33
+ }
34
+ ;
35
+ //# sourceMappingURL=host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.js","sourceRoot":"","sources":["../../../src/definitions/data/host.ts"],"names":[],"mappings":";;AAgBA,oCAOC;AAED,wCAaC;AAtCD,2BAA2B;AAS3B,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC;IAC1B,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IACvC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC1C,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC1E,CAAC,CAAC;AAEH,SAAgB,YAAY,CAAC,IAAU;IACnC,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAG,UAAU,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,UAAU,CAAC,KAAK,CAAC;AAC5B,CAAC;AAED,SAAgB,cAAc,CAAC,IAAY,EAAE,IAAS;;IAClD,MAAM,IAAI,GAAG;QACT,IAAI;QACJ,IAAI,EAAE,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAG,CAAC,CAAC,0CAAE,IAAI;QACrB,MAAM,EAAE,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAG,CAAC,CAAC,0CAAE,MAAM;QACzB,WAAW,EAAE,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAG,CAAC,CAAC,0CAAE,WAAW;KACtC,CAAC;IAEF,IAAI,CAAC;QACD,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAM,KAAK,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3D,CAAC;AACL,CAAC;AAAA,CAAC"}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MOCK_METHODS = void 0;
4
+ exports.validateMock = validateMock;
5
+ exports.mockFromConfig = mockFromConfig;
6
+ const Joi = require("joi");
7
+ exports.MOCK_METHODS = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', '*'];
8
+ const mockSchema = Joi.object({
9
+ id: Joi.string().optional(),
10
+ name: Joi.string().optional(),
11
+ source: Joi.string().valid('FILE', 'DEPLOYED').optional(),
12
+ filePath: Joi.string().optional(),
13
+ isEnabled: Joi.boolean().default(true),
14
+ labels: Joi.array().items(Joi.string()).optional().default([]),
15
+ method: Joi.string().valid(...exports.MOCK_METHODS),
16
+ path: Joi.string(),
17
+ parse: Joi.boolean().default(true),
18
+ format: Joi.string().valid('json', 'html', 'text', 'xml', 'javascript', 'css').optional(),
19
+ host: Joi.string().optional(),
20
+ response: Joi.object({
21
+ code: Joi.number().min(200).max(599).label("status"),
22
+ delay: Joi.number().optional().min(0).max(300000).label("delay"),
23
+ body: Joi.string().allow('').label("body"),
24
+ headers: Joi.object().pattern(Joi.string(), Joi.string()).label("headers"),
25
+ }),
26
+ });
27
+ function validateMock(mock) {
28
+ const validation = mockSchema.validate(mock, { convert: true });
29
+ if (validation.error) {
30
+ throw new Error(validation.error.message);
31
+ }
32
+ assertFormatDoesNotConflictWithContentType(validation.value);
33
+ return validation.value;
34
+ }
35
+ function assertFormatDoesNotConflictWithContentType(mock) {
36
+ if (!mock.format) {
37
+ return;
38
+ }
39
+ const hasContentType = Object.keys(mock.response.headers || {})
40
+ .some((key) => key.toLowerCase() === 'content-type');
41
+ if (hasContentType) {
42
+ throw new Error("cannot use both 'format' and an explicit Content-Type header");
43
+ }
44
+ }
45
+ function mockFromConfig(req, res) {
46
+ var _a, _b;
47
+ const [rawMethod, ...pathParts] = req.split(" ");
48
+ const method = rawMethod.toUpperCase();
49
+ const path = pathParts.join(" ");
50
+ const headers = ((_a = res === null || res === void 0 ? void 0 : res.headers) === null || _a === void 0 ? void 0 : _a[0]) || {};
51
+ const code = (res === null || res === void 0 ? void 0 : res.status) || (method === 'POST' ? 201 : 200);
52
+ const host = res === null || res === void 0 ? void 0 : res.host;
53
+ const parse = res === null || res === void 0 ? void 0 : res.parse;
54
+ const format = res === null || res === void 0 ? void 0 : res.format;
55
+ const name = ((_b = res === null || res === void 0 ? void 0 : res.name) === null || _b === void 0 ? void 0 : _b.trim()) || undefined;
56
+ const isEnabled = res === null || res === void 0 ? void 0 : res.enabled;
57
+ const labels = res === null || res === void 0 ? void 0 : res.labels;
58
+ const definition = {
59
+ name, method, path, host, parse, format, isEnabled, labels,
60
+ response: {
61
+ code,
62
+ delay: res === null || res === void 0 ? void 0 : res.delay,
63
+ body: (res === null || res === void 0 ? void 0 : res.body) || "",
64
+ headers: headers,
65
+ },
66
+ };
67
+ try {
68
+ return validateMock(definition);
69
+ }
70
+ catch (error) {
71
+ throw new Error(`On mock '${req}', ${error.message}`);
72
+ }
73
+ }
74
+ //# sourceMappingURL=mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock.js","sourceRoot":"","sources":["../../../src/definitions/data/mock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.definitionFromConfig = void 0;
4
+ exports.validateDefinition = validateDefinition;
5
+ const Joi = require("joi");
6
+ const utils_1 = require("../../utils/utils");
7
+ const host_1 = require("./host");
8
+ const mock_1 = require("./mock");
9
+ const definitionSchema = Joi.object({
10
+ mocks: Joi.array().items(Joi.any()).required(),
11
+ hosts: Joi.array().items(Joi.any()).required(),
12
+ data: Joi.object()
13
+ .pattern(Joi.string(), Joi.object().pattern(Joi.string(), Joi.any()))
14
+ .optional(),
15
+ });
16
+ const definitionFromConfig = (config, onMockError) => {
17
+ const mergedMocks = (0, utils_1.mergeRecords)(config.mock || []);
18
+ const mocks = Object.entries(mergedMocks)
19
+ .flatMap(([req, resList]) => resList.map(res => [req, res]))
20
+ .flatMap(([req, res]) => {
21
+ try {
22
+ return [(0, mock_1.mockFromConfig)(req, res)];
23
+ }
24
+ catch (e) {
25
+ onMockError === null || onMockError === void 0 ? void 0 : onMockError(e);
26
+ return [];
27
+ }
28
+ });
29
+ const mergedDataBlocks = (0, utils_1.mergeRecords)(config.data || []);
30
+ const data = config.data && Object.fromEntries(Object.entries(mergedDataBlocks)
31
+ .map(([key, values]) => [key, (0, utils_1.mergeRecords)(values)]));
32
+ const hosts = Object.entries((0, utils_1.mergeRecords)(config.host || []))
33
+ .map(([name, data]) => (0, host_1.hostFromConfig)(name, data));
34
+ return { mocks, data, hosts };
35
+ };
36
+ exports.definitionFromConfig = definitionFromConfig;
37
+ function validateDefinition(definition) {
38
+ const validation = definitionSchema.validate(definition);
39
+ if (validation.error) {
40
+ throw new Error(validation.error.message);
41
+ }
42
+ return {
43
+ mocks: validation.value.mocks.map(mock_1.validateMock),
44
+ hosts: validation.value.hosts.map(host_1.validateHost),
45
+ data: validation.value.data,
46
+ };
47
+ }
48
+ //# sourceMappingURL=mocko-definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mocko-definition.js","sourceRoot":"","sources":["../../../src/definitions/data/mocko-definition.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.REDIS_OPTIONS_DEPLOYMENT = exports.REDIS_MOCK_KEY = void 0;
4
+ exports.REDIS_MOCK_KEY = 'workspace_mocks';
5
+ exports.REDIS_OPTIONS_DEPLOYMENT = 'mocks_deployment';
6
+ //# sourceMappingURL=definition.constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition.constants.js","sourceRoot":"","sources":["../../src/definitions/definition.constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,cAAc,GAAG,iBAAiB,CAAC;AACnC,QAAA,wBAAwB,GAAG,kBAAkB,CAAC"}