@squiz/render-runtime-lib 1.74.0 → 1.76.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 (122) hide show
  1. package/lib/PreviewComponentService.js +43 -0
  2. package/lib/PreviewComponentService.js.map +1 -0
  3. package/lib/PreviewComponentService.spec.js +64 -0
  4. package/lib/PreviewComponentService.spec.js.map +1 -0
  5. package/lib/RenderInputService.js +286 -0
  6. package/lib/RenderInputService.js.map +1 -0
  7. package/lib/RenderInputService.spec.js +645 -0
  8. package/lib/RenderInputService.spec.js.map +1 -0
  9. package/lib/component-runner/ComponentRootUrlResolver.js +3 -0
  10. package/lib/component-runner/ComponentRootUrlResolver.js.map +1 -0
  11. package/lib/component-runner/ComponentRunnerServiceWithWorkers.js +91 -0
  12. package/lib/component-runner/ComponentRunnerServiceWithWorkers.js.map +1 -0
  13. package/lib/component-runner/ComponentRunnerServiceWithWorkers.spec.js +104 -0
  14. package/lib/component-runner/ComponentRunnerServiceWithWorkers.spec.js.map +1 -0
  15. package/lib/component-runner/ComponentRuntimeContext.d.ts +1 -8
  16. package/lib/component-runner/ComponentRuntimeContext.js +3 -0
  17. package/lib/component-runner/ComponentRuntimeContext.js.map +1 -0
  18. package/lib/component-runner/ContentRuntimeService.js +31 -0
  19. package/lib/component-runner/ContentRuntimeService.js.map +1 -0
  20. package/lib/component-runner/ExecuteComponentTask.d.ts +1 -9
  21. package/lib/component-runner/ExecuteComponentTask.js +8 -0
  22. package/lib/component-runner/ExecuteComponentTask.js.map +1 -0
  23. package/lib/component-runner/FunctionReturnTypes.js +3 -0
  24. package/lib/component-runner/FunctionReturnTypes.js.map +1 -0
  25. package/lib/component-runner/index.js +23 -0
  26. package/lib/component-runner/index.js.map +1 -0
  27. package/lib/component-runner/worker/component-bootstrapper.js +63 -0
  28. package/lib/component-runner/worker/component-bootstrapper.js.map +1 -0
  29. package/lib/health-check-service.js +3 -0
  30. package/lib/health-check-service.js.map +1 -0
  31. package/lib/index.d.ts +0 -16
  32. package/lib/index.js +23 -4610
  33. package/lib/index.js.map +1 -7
  34. package/lib/ioc.js +37 -0
  35. package/lib/ioc.js.map +1 -0
  36. package/lib/test/helpers/fixtures.js +152 -0
  37. package/lib/test/helpers/fixtures.js.map +1 -0
  38. package/lib/test/helpers/stack.js +121 -0
  39. package/lib/test/helpers/stack.js.map +1 -0
  40. package/lib/test/index.js +21 -0
  41. package/lib/test/index.js.map +1 -0
  42. package/lib/test/mock-services/MockedComponentSetService.js +413 -0
  43. package/lib/test/mock-services/MockedComponentSetService.js.map +1 -0
  44. package/lib/test/mock-services/MockedContentItemService.js +37 -0
  45. package/lib/test/mock-services/MockedContentItemService.js.map +1 -0
  46. package/lib/test-helpers.d.ts +16 -0
  47. package/lib/test-helpers.js +44 -0
  48. package/lib/test-helpers.js.map +1 -0
  49. package/lib/utils/getContentItemIdFromInput.js +13 -0
  50. package/lib/utils/getContentItemIdFromInput.js.map +1 -0
  51. package/lib/utils/getContentItemIdFromInput.spec.js +18 -0
  52. package/lib/utils/getContentItemIdFromInput.spec.js.map +1 -0
  53. package/lib/utils/resolvePreviewOutput.js +71 -0
  54. package/lib/utils/resolvePreviewOutput.js.map +1 -0
  55. package/lib/utils/resolvePreviewOutput.spec.js +168 -0
  56. package/lib/utils/resolvePreviewOutput.spec.js.map +1 -0
  57. package/lib/utils/setHeadersOnExpressResponse.js +15 -0
  58. package/lib/utils/setHeadersOnExpressResponse.js.map +1 -0
  59. package/lib/utils/setHeadersOnExpressResponse.sepc.js +21 -0
  60. package/lib/utils/setHeadersOnExpressResponse.sepc.js.map +1 -0
  61. package/lib/webserver/app.js +78 -0
  62. package/lib/webserver/app.js.map +1 -0
  63. package/lib/webserver/controllers/CoreController.js +116 -0
  64. package/lib/webserver/controllers/CoreController.js.map +1 -0
  65. package/lib/webserver/controllers/CoreController.spec.js +132 -0
  66. package/lib/webserver/controllers/CoreController.spec.js.map +1 -0
  67. package/lib/webserver/controllers/DefinitionController.js +162 -0
  68. package/lib/webserver/controllers/DefinitionController.js.map +1 -0
  69. package/lib/webserver/controllers/DefinitionController.spec.js +16 -0
  70. package/lib/webserver/controllers/DefinitionController.spec.js.map +1 -0
  71. package/lib/webserver/controllers/DevelopmentController.js +149 -0
  72. package/lib/webserver/controllers/DevelopmentController.js.map +1 -0
  73. package/lib/webserver/controllers/DevelopmentController.spec.js +29 -0
  74. package/lib/webserver/controllers/DevelopmentController.spec.js.map +1 -0
  75. package/lib/webserver/controllers/PreviewController.spec.js +124 -0
  76. package/lib/webserver/controllers/PreviewController.spec.js.map +1 -0
  77. package/lib/webserver/controllers/RenderController.d.ts +3 -2
  78. package/lib/webserver/controllers/RenderController.js +221 -0
  79. package/lib/webserver/controllers/RenderController.js.map +1 -0
  80. package/lib/webserver/controllers/RenderController.spec.js +441 -0
  81. package/lib/webserver/controllers/RenderController.spec.js.map +1 -0
  82. package/lib/webserver/controllers/StaticController.js +149 -0
  83. package/lib/webserver/controllers/StaticController.js.map +1 -0
  84. package/lib/webserver/controllers/StaticController.spec.js +28 -0
  85. package/lib/webserver/controllers/StaticController.spec.js.map +1 -0
  86. package/lib/webserver/controllers/test/definition-route-tests.js +627 -0
  87. package/lib/webserver/controllers/test/definition-route-tests.js.map +1 -0
  88. package/lib/webserver/controllers/test/development-route-tests.js +110 -0
  89. package/lib/webserver/controllers/test/development-route-tests.js.map +1 -0
  90. package/lib/webserver/controllers/test/preview-route-tests.js +122 -0
  91. package/lib/webserver/controllers/test/preview-route-tests.js.map +1 -0
  92. package/lib/webserver/controllers/test/render-route-sandbox-tests.js +194 -0
  93. package/lib/webserver/controllers/test/render-route-sandbox-tests.js.map +1 -0
  94. package/lib/webserver/controllers/test/render-route-tests.js +422 -0
  95. package/lib/webserver/controllers/test/render-route-tests.js.map +1 -0
  96. package/lib/webserver/controllers/test/static-route-tests.js +96 -0
  97. package/lib/webserver/controllers/test/static-route-tests.js.map +1 -0
  98. package/lib/webserver/index.js +6 -0
  99. package/lib/webserver/index.js.map +1 -0
  100. package/lib/webserver/routes/routes.js +902 -0
  101. package/lib/webserver/routes/routes.js.map +1 -0
  102. package/package.json +19 -12
  103. package/lib/migrations/20220704054051_initial.sql +0 -19
  104. package/lib/migrations/20220718172237_adding_component_sets.sql +0 -23
  105. package/lib/migrations/20220728113941_add_env_vars_field.sql +0 -1
  106. package/lib/migrations/20220817113300_removing_null_props_from_jsonb.sql +0 -41
  107. package/lib/migrations/20221027151225_dummy.sql +0 -2
  108. package/lib/migrations/20221117151200_add_detail_columns_to_component_version.js +0 -40
  109. package/lib/migrations/20221220151200_add_required_to_manifests.js +0 -7794
  110. package/lib/migrations/20221222151200_add_required_to_manifests.js +0 -7856
  111. package/lib/migrations/20223525103556_component_set_rule.sql +0 -19
  112. package/lib/migrations/20230111095522_update_environment_property.js +0 -7802
  113. package/lib/migrations/20230203084900_ensure_static_root_exists.js +0 -47
  114. package/lib/migrations/20230210143300_lowercase_all_uri_names.js +0 -88
  115. package/lib/migrations/20230217151212_component_set_component_version_updates.sql +0 -38
  116. package/lib/migrations/20230218121212_add_component_set_rules.js +0 -24
  117. package/lib/migrations/202406061447_edge_component_type.sql +0 -1
  118. package/lib/migrations/202407111308_component_version_type.sql +0 -1
  119. package/lib/migrations/202408061132_update_type_to_server.sql +0 -1
  120. package/lib/public/docs.json +0 -5509
  121. package/lib/worker/component-bootstrapper.js +0 -170132
  122. package/lib/worker/component-bootstrapper.js.map +0 -7
@@ -0,0 +1,441 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const dx_common_lib_1 = require("@squiz/dx-common-lib");
7
+ let uuidCount = 0;
8
+ jest.mock('crypto', () => {
9
+ const crypto = jest.requireActual('crypto');
10
+ return {
11
+ ...crypto,
12
+ randomUUID: () => `uuid-${uuidCount++}`,
13
+ };
14
+ });
15
+ const component_lib_1 = require("@squiz/component-lib");
16
+ const component_web_api_lib_1 = require("@squiz/component-web-api-lib");
17
+ const ringbufferjs_1 = __importDefault(require("ringbufferjs"));
18
+ const winston_transport_1 = __importDefault(require("winston-transport"));
19
+ const render_route_tests_1 = require("./test/render-route-tests");
20
+ const test_helpers_1 = require("../../test-helpers");
21
+ const RenderInputService_1 = require("../../RenderInputService");
22
+ const test_1 = require("../../test");
23
+ const dx_logger_lib_1 = require("@squiz/dx-logger-lib");
24
+ const COMPONENT_ROOT = process.env.DATA_MOUNT_POINT;
25
+ class RingBufferTransport extends winston_transport_1.default {
26
+ constructor(opts) {
27
+ super(opts);
28
+ this.buffer = new ringbufferjs_1.default(100);
29
+ }
30
+ log(info, callback) {
31
+ this.buffer.enq(info);
32
+ callback();
33
+ }
34
+ }
35
+ const logMessages = new RingBufferTransport();
36
+ test_helpers_1.TestHelpers.testLogger.add(logMessages);
37
+ class MockedContentItemService extends component_lib_1.ContentItemService {
38
+ async getContentItem(contentItemId) {
39
+ // emulate different scenarios based on contentItemId value
40
+ switch (contentItemId) {
41
+ case 'valid-id':
42
+ return { something: 'input-from-content-item-service' };
43
+ case 'invalid-id':
44
+ return { somethingElse: 'this-will-fail-schema-validation' };
45
+ case 'call-fails-id':
46
+ throw Error('Call failed!!!');
47
+ case 'non-existent-id':
48
+ return null;
49
+ }
50
+ }
51
+ }
52
+ describe('render-runtime', () => {
53
+ const apiKeyService = new dx_common_lib_1.DevelopmentApiKeyService();
54
+ const componentSetService = new test_1.MockedComponentSetServiceForProduction();
55
+ const contentItemService = new MockedContentItemService(new component_web_api_lib_1.ContentApiService().contentItem);
56
+ const manifestService = new component_lib_1.ManifestServiceForProduction(COMPONENT_ROOT, (0, dx_logger_lib_1.getLogger)({ name: 'MockedComponentSetServiceForProduction' }));
57
+ const componentRootUrlResolver = () => 'http://localhost:3000';
58
+ const componentFunctionService = new component_lib_1.ComponentFunctionService();
59
+ const renderInputService = new RenderInputService_1.RenderInputService(apiKeyService, componentSetService, manifestService, componentFunctionService, contentItemService, componentRootUrlResolver);
60
+ const testServer = new test_helpers_1.TestHelpers.TestServer({
61
+ componentSetService: componentSetService,
62
+ componentFunctionService: componentFunctionService,
63
+ manifestService: manifestService,
64
+ renderInputService: renderInputService,
65
+ });
66
+ beforeAll(async () => {
67
+ testServer.start();
68
+ });
69
+ afterAll(() => {
70
+ testServer.stop();
71
+ });
72
+ beforeEach(() => {
73
+ uuidCount = 0;
74
+ while (logMessages.buffer.size() > 0) {
75
+ logMessages.buffer.deq();
76
+ }
77
+ });
78
+ describe('route parameter validation', () => {
79
+ it('should return redirect to lowercase path if component name has upper case letters', async () => {
80
+ await testServer.request
81
+ .get('/r/unit-test-components/Test-Component/1.0.0?_componentSet=set')
82
+ .expect(302)
83
+ .expect((res) => {
84
+ expect(res.text).toContain('/r/unit-test-components/test-component/1.0.0?_componentSet=set');
85
+ });
86
+ });
87
+ it('should return redirect to lowercase path if namespace has upper case letters', async () => {
88
+ await testServer.request
89
+ .get('/r/Unit-Test-Components/test-component/1.0.0?_componentSet=set')
90
+ .expect(302)
91
+ .expect((res) => {
92
+ expect(res.text).toContain('/r/unit-test-components/test-component/1.0.0?_componentSet=set');
93
+ });
94
+ });
95
+ it('should return redirect to lowercase path if component functionName has upper case letters', async () => {
96
+ await testServer.request
97
+ .get('/r/unit-test-components/test-component/1.0.0/MAIN?_componentSet=set')
98
+ .expect(302)
99
+ .expect((res) => {
100
+ expect(res.text).toContain('/r/unit-test-components/test-component/1.0.0/main?_componentSet=set');
101
+ });
102
+ });
103
+ it('should redirect with lowercase _componentSet query parameter', async () => {
104
+ await testServer.request
105
+ .get('/r/unit-test-components/test-component/1.0.0?_componentSet=Set')
106
+ .expect(302)
107
+ .expect((res) => {
108
+ expect(res.text).toContain('/r/unit-test-components/test-component/1.0.0?_componentSet=set');
109
+ });
110
+ });
111
+ it('should redirect with lowercase path and persist all query parameters', async () => {
112
+ await testServer.request
113
+ .get('/r/unit-test-components/Test-Component/1.0.0/MAIN?_componentSet=Set&foo=bar')
114
+ .expect(302)
115
+ .expect((res) => {
116
+ expect(res.text).toContain('/r/unit-test-components/test-component/1.0.0/main?_componentSet=set&foo=bar');
117
+ });
118
+ });
119
+ });
120
+ describe('Route tests', () => {
121
+ (0, render_route_tests_1.renderRouteTests)(() => testServer.request, 'http://localhost:3000');
122
+ });
123
+ describe('GET /r/unit-test-components/test-component/1.0.1?_componentSet=set', () => {
124
+ // this scenario shouldn't happen in practice, but should be tested for
125
+ // this needs too 500 in production
126
+ it('should throw 500 error if component name and version miss match', async () => {
127
+ const response = await testServer.request.get('/r/unit-test-components/test-component/1.0.1?_componentSet=set');
128
+ expect(response.statusCode).toEqual(500);
129
+ expect(response.body).toEqual({
130
+ message: 'manifest version miss match, expected version 1.0.1 but found 0.0.0',
131
+ });
132
+ });
133
+ });
134
+ describe('GET /r/unit-test-components/test-component/1.0.2?_componentSet=set', () => {
135
+ // this scenario shouldn't happen in practice, but should be tested for
136
+ it('should fail validation if trying to render a a component with an invalid schema', async () => {
137
+ const response = await testServer.request.get('/r/unit-test-components/test-component/1.0.2?_componentSet=set&something=not-used');
138
+ expect(response.statusCode).toEqual(500);
139
+ expect(response.body).toEqual({
140
+ message: 'Could not determine manifest version. Your manifest must have a $schema property defined.',
141
+ });
142
+ });
143
+ });
144
+ describe('GET /r/unit-test-components/test-component/1.0.0?_componentSet=set', () => {
145
+ it('should return html comment if component is not in set', async () => {
146
+ jest.spyOn(componentSetService, 'componentVersionInSet').mockImplementationOnce(async () => false);
147
+ const response = await testServer.request.get('/r/unit-test-components/test-component/1.0.0?_componentSet=set&something=not-used');
148
+ expect(response.statusCode).toEqual(404);
149
+ expect(response.text).toEqual('<!-- test-component 1.0.0 not in set set -->');
150
+ });
151
+ });
152
+ describe('should get environment variables', () => {
153
+ it('should allow per component env var overriding', async () => {
154
+ const response = await testServer.request.get('/r/unit-test-components/test-environment-variables/1.0.0?_componentSet=component-overrides-env-var&something=123');
155
+ expect(response.statusCode).toEqual(200);
156
+ expect(response.text).toMatchInlineSnapshot(`"<div>component set {"environment":{"TEST_VARIABLE":"TEST_VARIABLE overriding"}}</div>"`);
157
+ });
158
+ it('should pass in only the environment variables that are requested by a component', async () => {
159
+ const response = await testServer.request.get('/r/unit-test-components/test-environment-variables/1.0.0?_componentSet=only-toplevel-environment-variables&something=123');
160
+ expect(response.statusCode).toEqual(200);
161
+ expect(response.text).toMatchInlineSnapshot(`"<div>component set {"environment":{"TEST_VARIABLE":"top level"}}</div>"`);
162
+ });
163
+ it('should not provide any env vars to components that do not request them', async () => {
164
+ const response = await testServer.request.get('/r/unit-test-components/test-environment-variables/1.0.1?_componentSet=only-toplevel-environment-variables&something=123');
165
+ expect(response.statusCode).toEqual(200);
166
+ expect(response.text).toMatchInlineSnapshot(`"<div>component set {"environment":{}}</div>"`);
167
+ });
168
+ it('should allow for multiple components requesting the same variable to each have a different value', async () => {
169
+ let response = await testServer.request.get('/r/unit-test-components/test-environment-variables/1.0.0?_componentSet=component-overrides-env-var&something=123');
170
+ expect(response.statusCode).toEqual(200);
171
+ expect(response.text).toMatchInlineSnapshot(`"<div>component set {"environment":{"TEST_VARIABLE":"TEST_VARIABLE overriding"}}</div>"`);
172
+ response = await testServer.request.get('/r/unit-test-components/test-environment-variables/1.0.2?_componentSet=component-overrides-env-var&something=123');
173
+ expect(response.statusCode).toEqual(200);
174
+ expect(response.text).toMatchInlineSnapshot(`"<div>component set {"environment":{"TEST_VARIABLE":"a different value"}}</div>"`);
175
+ });
176
+ it('should respond with a 400 bad request if not all environment variables are provided', async () => {
177
+ const response = await testServer.request.get('/r/unit-test-components/test-environment-variables/1.0.0?_componentSet=missing-from-set&something=123');
178
+ expect(response.statusCode).toEqual(400);
179
+ expect(response.body).toEqual({ message: 'Missing required environment variables: "TEST_VARIABLE"' });
180
+ });
181
+ });
182
+ describe('should get headers from component set and component function', () => {
183
+ it('should override the headers set in function definition by the headers in the component set - html output', async () => {
184
+ const response = await testServer.request.get('/r/unit-test-components/test-headers/1.0.0?_componentSet=set');
185
+ expect(response.text).toMatchInlineSnapshot(`"<div>component set {"environment":{},"displayName":"set","webPath":"set"}</div>"`);
186
+ expect(response.statusCode).toEqual(200);
187
+ // component function sets following headers:
188
+ // - 'some-header-name-1': 'f-some-header-val-1'
189
+ // - 'some-header-name-3': 'f-some-header-val-3'
190
+ //
191
+ // while component set sets following:
192
+ // - 'some-header-name-1': 's-some-header-val-1'
193
+ // - 'some-header-name-2': 's-some-header-val-2'
194
+ expect(response.header['some-header-name-1']).toEqual('mocked-component-set-header-val-1');
195
+ expect(response.header['some-header-name-2']).toEqual('mocked-component-set-header-val-2');
196
+ expect(response.header['some-header-name-3']).toEqual('f-some-header-val-3');
197
+ });
198
+ it('should override the headers set in function definition by the headers in the component set - json output', async () => {
199
+ const response = await testServer.request.get('/r/unit-test-components/test-headers/1.0.1?_componentSet=set');
200
+ expect(response.body).toEqual({ output: 'some-output' });
201
+ expect(response.statusCode).toEqual(200);
202
+ // component function sets following headers:
203
+ // - 'some-header-name-1': 'f-some-header-val-1'
204
+ // - 'some-header-name-3': 'f-some-header-val-3'
205
+ //
206
+ // while component set sets following:
207
+ // - 'some-header-name-1': 's-some-header-val-1'
208
+ // - 'some-header-name-2': 's-some-header-val-2'
209
+ expect(response.header['some-header-name-1']).toEqual('mocked-component-set-header-val-1');
210
+ expect(response.header['some-header-name-2']).toEqual('mocked-component-set-header-val-2');
211
+ expect(response.header['some-header-name-3']).toEqual('f-some-header-val-3');
212
+ });
213
+ it('should return the default CSP/CORS headers if not set in component fn/set', async () => {
214
+ const response = await testServer.request.get('/r/unit-test-components/test-headers/1.0.1?_componentSet=set');
215
+ expect(response.body).toEqual({ output: 'some-output' });
216
+ expect(response.statusCode).toEqual(200);
217
+ // csp/cors headers are not set in the fn definition or in the component set
218
+ //expect(response.header['cross-origin-embedder-policy']).toEqual('require-corp');
219
+ expect(response.header['cross-origin-embedder-policy']).toEqual(undefined);
220
+ expect(response.header['cross-origin-opener-policy']).toEqual('same-origin');
221
+ expect(response.header['cross-origin-resource-policy']).toEqual('cross-origin');
222
+ expect(response.header['content-security-policy']).toEqual("default-src * 'unsafe-inline';frame-ancestors * 'self';script-src * 'unsafe-inline' 'unsafe-eval';script-src-elem * 'unsafe-inline';style-src * 'unsafe-inline';img-src * data:;base-uri 'self';font-src 'self' https: data:;form-action 'self';object-src 'none';script-src-attr 'none'");
223
+ });
224
+ it('should override the default CSP/CORS headers by the headers set in function definition', async () => {
225
+ const response = await testServer.request.get('/r/unit-test-components/test-headers/1.0.2?_componentSet=set');
226
+ expect(response.body).toEqual({ output: 'some-output' });
227
+ expect(response.statusCode).toEqual(200);
228
+ expect(response.header['cross-origin-embedder-policy']).toEqual('unsafe-none');
229
+ expect(response.header['cross-origin-opener-policy']).toEqual('cross-origin');
230
+ expect(response.header['cross-origin-resource-policy']).toEqual('cross-origin');
231
+ expect(response.header['content-security-policy']).toEqual('default-src *.example.com');
232
+ });
233
+ it('should use the input if valid _contentItemId is specified in the input', async () => {
234
+ const response = await testServer.request.get('/r/unit-test-components/test-component/1.0.0?_contentItemId=valid-id&_componentSet=set');
235
+ // manifest input schema requires "something"
236
+ // mocked Content Item service returns following for _contentItemId=valid-id
237
+ // {"something": "input-from-content-item-service"}
238
+ expect(response.text).toMatchInlineSnapshot(`"<div>hello - {"something":"input-from-content-item-service"}</div>"`);
239
+ expect(response.statusCode).toEqual(200);
240
+ });
241
+ it('should use content item input if _contentItemId specified in the input along with other inputs', async () => {
242
+ const response = await testServer.request.get('/r/unit-test-components/test-component/1.0.0?_componentSet=set&_contentItemId=valid-id&something=from-regular-input&foo=bar');
243
+ // manifest input schema requires "something"
244
+ // mocked Content Item service returns following for _contentItemId=valid-id
245
+ // {"something": "input-from-content-item-service"}
246
+ expect(response.text).toMatchInlineSnapshot(`"<div>hello - {"something":"input-from-content-item-service"}</div>"`);
247
+ expect(response.statusCode).toEqual(200);
248
+ });
249
+ it('should return validation error if content item returned does not match the input schema', async () => {
250
+ const response = await testServer.request.get('/r/unit-test-components/test-component/1.0.0?_componentSet=set&_contentItemId=invalid-id');
251
+ // manifest input schema requires "something"
252
+ // mocked Content Item service returns input that will not match the input schema
253
+ expect(response.text).toEqual('{"message":"failed validation: The required property `something` is missing at `#`"}');
254
+ expect(response.statusCode).toEqual(400);
255
+ });
256
+ it('should return 400 error if content item ID is not found', async () => {
257
+ const response = await testServer.request.get('/r/unit-test-components/test-component/1.0.0?_componentSet=set&_contentItemId=non-existent-id');
258
+ expect(response.text).toEqual('{"message":"Cannot find content item with ID \'non-existent-id\'"}');
259
+ expect(response.statusCode).toEqual(404);
260
+ });
261
+ it('should 500 error if content item fetching fails', async () => {
262
+ const response = await testServer.request.get('/r/unit-test-components/test-component/1.0.0?_componentSet=set&_contentItemId=call-fails-id&something=test');
263
+ expect(response.text).toEqual('{"message":"Call failed!!!"}');
264
+ expect(response.statusCode).toEqual(500);
265
+ });
266
+ });
267
+ describe('Logging', () => {
268
+ beforeEach(() => {
269
+ uuidCount = 0;
270
+ });
271
+ it('should capture logs from components', async () => {
272
+ const response = await testServer.request.get('/r/unit-test-components/test-component/1.0.9/?_componentSet=set&console-log');
273
+ expect(logMessages.buffer.size()).toEqual(3);
274
+ let messages = logMessages.buffer.peekN(3);
275
+ assertLogMessage(messages[0], {
276
+ area: 'component',
277
+ 'component-name': 'unit-test-components/test-component',
278
+ 'component-version': '1.0.9',
279
+ 'function-name': 'console-log',
280
+ message: ['first'],
281
+ 'log-command': 'log',
282
+ type: 'console',
283
+ req_id: 'uuid-0',
284
+ 'set-web-path': 'set',
285
+ });
286
+ assertLogMessage(messages[1], {
287
+ area: 'component',
288
+ 'component-name': 'unit-test-components/test-component',
289
+ 'component-version': '1.0.9',
290
+ 'function-name': 'console-log',
291
+ message: ['second'],
292
+ 'log-command': 'log',
293
+ type: 'console',
294
+ req_id: 'uuid-0',
295
+ 'set-web-path': 'set',
296
+ });
297
+ assertLogMessage(messages[2], {
298
+ area: 'component',
299
+ 'component-name': 'unit-test-components/test-component',
300
+ 'component-version': '1.0.9',
301
+ 'function-name': 'console-log',
302
+ message: ['third'],
303
+ 'log-command': 'log',
304
+ type: 'console',
305
+ req_id: 'uuid-0',
306
+ 'set-web-path': 'set',
307
+ });
308
+ expect(response.statusCode).toEqual(200);
309
+ expect(response.text).toMatchInlineSnapshot(`"[]"`);
310
+ // do second request, should have another uuid
311
+ await testServer.request.get('/r/unit-test-components/test-component/1.0.9/console-log?_componentSet=set');
312
+ expect(logMessages.buffer.size()).toEqual(6);
313
+ messages = logMessages.buffer.peekN(6);
314
+ assertLogMessage(messages[3], {
315
+ area: 'component',
316
+ 'component-name': 'unit-test-components/test-component',
317
+ 'component-version': '1.0.9',
318
+ 'function-name': 'console-log',
319
+ message: ['first'],
320
+ 'log-command': 'log',
321
+ type: 'console',
322
+ req_id: 'uuid-1',
323
+ 'set-web-path': 'set',
324
+ });
325
+ assertLogMessage(messages[4], {
326
+ area: 'component',
327
+ 'component-name': 'unit-test-components/test-component',
328
+ 'component-version': '1.0.9',
329
+ 'function-name': 'console-log',
330
+ message: ['second'],
331
+ 'log-command': 'log',
332
+ type: 'console',
333
+ req_id: 'uuid-1',
334
+ 'set-web-path': 'set',
335
+ });
336
+ assertLogMessage(messages[5], {
337
+ area: 'component',
338
+ 'component-name': 'unit-test-components/test-component',
339
+ 'component-version': '1.0.9',
340
+ 'function-name': 'console-log',
341
+ message: ['third'],
342
+ 'log-command': 'log',
343
+ type: 'console',
344
+ req_id: 'uuid-1',
345
+ 'set-web-path': 'set',
346
+ });
347
+ });
348
+ it('should capture logs from async/promise components', async () => {
349
+ const response = await testServer.request.get('/r/unit-test-components/test-component/1.0.9/console-log-promise?_componentSet=set');
350
+ expect(logMessages.buffer.size()).toEqual(3);
351
+ let messages = logMessages.buffer.peekN(3);
352
+ assertLogMessage(messages[0], {
353
+ area: 'component',
354
+ 'component-name': 'unit-test-components/test-component',
355
+ 'component-version': '1.0.9',
356
+ 'function-name': 'console-log-promise',
357
+ message: ['first'],
358
+ 'log-command': 'log',
359
+ type: 'console',
360
+ req_id: 'uuid-0',
361
+ 'set-web-path': 'set',
362
+ });
363
+ assertLogMessage(messages[1], {
364
+ area: 'component',
365
+ 'component-name': 'unit-test-components/test-component',
366
+ 'component-version': '1.0.9',
367
+ 'function-name': 'console-log-promise',
368
+ message: ['second', 'two args'],
369
+ 'log-command': 'log',
370
+ type: 'console',
371
+ req_id: 'uuid-0',
372
+ 'set-web-path': 'set',
373
+ });
374
+ assertLogMessage(messages[2], {
375
+ area: 'component',
376
+ 'component-name': 'unit-test-components/test-component',
377
+ 'component-version': '1.0.9',
378
+ 'function-name': 'console-log-promise',
379
+ message: ['third'],
380
+ 'log-command': 'log',
381
+ type: 'console',
382
+ req_id: 'uuid-0',
383
+ 'set-web-path': 'set',
384
+ });
385
+ expect(response.statusCode).toEqual(200);
386
+ expect(response.text).toMatchInlineSnapshot(`"[]"`);
387
+ // do second request, should have another uuid
388
+ await testServer.request.get('/r/unit-test-components/test-component/1.0.9/console-log-promise?_componentSet=set');
389
+ expect(logMessages.buffer.size()).toEqual(6);
390
+ messages = logMessages.buffer.peekN(6);
391
+ assertLogMessage(messages[3], {
392
+ area: 'component',
393
+ 'component-name': 'unit-test-components/test-component',
394
+ 'component-version': '1.0.9',
395
+ 'function-name': 'console-log-promise',
396
+ message: ['first'],
397
+ 'log-command': 'log',
398
+ type: 'console',
399
+ req_id: 'uuid-1',
400
+ 'set-web-path': 'set',
401
+ });
402
+ assertLogMessage(messages[4], {
403
+ area: 'component',
404
+ 'component-name': 'unit-test-components/test-component',
405
+ 'component-version': '1.0.9',
406
+ 'function-name': 'console-log-promise',
407
+ message: ['second', 'two args'],
408
+ 'log-command': 'log',
409
+ type: 'console',
410
+ req_id: 'uuid-1',
411
+ 'set-web-path': 'set',
412
+ });
413
+ assertLogMessage(messages[5], {
414
+ area: 'component',
415
+ 'component-name': 'unit-test-components/test-component',
416
+ 'component-version': '1.0.9',
417
+ 'function-name': 'console-log-promise',
418
+ message: ['third'],
419
+ 'log-command': 'log',
420
+ type: 'console',
421
+ req_id: 'uuid-1',
422
+ 'set-web-path': 'set',
423
+ });
424
+ });
425
+ });
426
+ });
427
+ function assertLogMessage(record, matches) {
428
+ var _a;
429
+ const { time, timestamp, hostname, pid, ...payload } = record;
430
+ delete payload[Symbol.for('message')];
431
+ if ((_a = payload === null || payload === void 0 ? void 0 : payload.err) === null || _a === void 0 ? void 0 : _a.stack) {
432
+ delete payload.err.stack;
433
+ }
434
+ expect(hostname).toBeDefined();
435
+ expect(time).toBeDefined();
436
+ expect(timestamp).toBeDefined();
437
+ expect(pid).toBeDefined();
438
+ expect(payload).toMatchSnapshot();
439
+ expect(payload).toMatchObject(matches);
440
+ }
441
+ //# sourceMappingURL=RenderController.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RenderController.spec.js","sourceRoot":"","sources":["../../../src/webserver/controllers/RenderController.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,149 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
15
+ return (mod && mod.__esModule) ? mod : { "default": mod };
16
+ };
17
+ var StaticController_1;
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.StaticController = void 0;
20
+ const tsoa_1 = require("tsoa");
21
+ const inversify_binding_decorators_1 = require("inversify-binding-decorators");
22
+ const dx_common_lib_1 = require("@squiz/dx-common-lib");
23
+ const component_lib_1 = require("@squiz/component-lib");
24
+ const path_1 = __importDefault(require("path"));
25
+ const inversify_1 = require("inversify");
26
+ const assert_1 = __importDefault(require("assert"));
27
+ const setHeadersOnExpressResponse_1 = require("../../utils/setHeadersOnExpressResponse");
28
+ let StaticController = StaticController_1 = class StaticController extends tsoa_1.Controller {
29
+ constructor(manifestService, componentSetService, componentFunctionService) {
30
+ super();
31
+ this.manifestService = manifestService;
32
+ this.componentSetService = componentSetService;
33
+ this.componentFunctionService = componentFunctionService;
34
+ }
35
+ async getPreview(namespace, componentName, version, staticFile, req, _componentSet, _previewKey) {
36
+ if (_componentSet !== undefined && _previewKey !== undefined) {
37
+ throw new dx_common_lib_1.BadRequestError('You can not have both _componentSet and _previewKey');
38
+ }
39
+ const manifest = await this.manifestService.loadManifest(namespace, componentName, version);
40
+ const manifestModel = manifest.getModel();
41
+ const response = req.res;
42
+ (0, assert_1.default)(response);
43
+ // * bit in the request path will match into req.params[0]
44
+ staticFile = path_1.default.join(staticFile, req.params[0]);
45
+ if (manifestModel.staticFiles) {
46
+ const componentStaticFileRoot = manifestModel.staticFiles.locationRoot;
47
+ const manifestPath = await this.manifestService.getManifestPath(namespace, componentName, version);
48
+ const staticFilePathRoot = path_1.default.join(path_1.default.dirname(manifestPath), componentStaticFileRoot);
49
+ const headers = await this.getHeadersForInputType(_componentSet, _previewKey, manifest);
50
+ this.setResponseHeaders(headers, response);
51
+ response.sendFile(staticFile, {
52
+ root: staticFilePathRoot,
53
+ dotfiles: 'deny',
54
+ lastModified: false,
55
+ // handle in DEVX-386
56
+ //
57
+ // maxAge: "1y",
58
+ // immutable: true,
59
+ // cacheControl: true
60
+ }, (e) => {
61
+ if (req.next) {
62
+ if ((e === null || e === void 0 ? void 0 : e.code) == 'ENOENT') {
63
+ req.next(new dx_common_lib_1.ResourceNotFoundError(`could not find ${e === null || e === void 0 ? void 0 : e.path.substr((e === null || e === void 0 ? void 0 : e.path.indexOf(componentStaticFileRoot)) + componentStaticFileRoot.length)}`));
64
+ }
65
+ else if (e) {
66
+ req.next(e);
67
+ }
68
+ }
69
+ });
70
+ // need to wait till the file send response finishes
71
+ // otherwise tsoa will end the request in routes.ts::returnHandler()
72
+ // causing the above file send response to abort
73
+ await new Promise((resolve, _reject) => {
74
+ response.on('finish', () => {
75
+ response.end();
76
+ resolve();
77
+ });
78
+ });
79
+ }
80
+ else {
81
+ throw new dx_common_lib_1.ResourceNotFoundError(`${componentName} ${version} doesn't expose any static resources`);
82
+ }
83
+ }
84
+ setResponseHeaders(headers, response) {
85
+ (0, setHeadersOnExpressResponse_1.setHeadersOnExpressResponse)(headers, response);
86
+ let cacheControl = response.getHeader('cache-control');
87
+ if (typeof cacheControl != 'string') {
88
+ cacheControl = dx_common_lib_1.DEFAULT_CACHE_CONTROL_HEADER;
89
+ }
90
+ let cacheControlObj = (0, dx_common_lib_1.parseCacheControl)(cacheControl);
91
+ cacheControlObj = (0, dx_common_lib_1.applyDefaultRulesToCacheControlObject)(cacheControlObj);
92
+ cacheControlObj.immutable = true;
93
+ cacheControlObj['max-age'] = 604800; // 1 week in seconds
94
+ response.setHeader('cache-control', (0, dx_common_lib_1.cacheControlToString)(cacheControlObj));
95
+ }
96
+ async getHeadersForInputType(_componentSet, _previewKey, manifest) {
97
+ if (_componentSet) {
98
+ const set = await this.getValidatedSet(_componentSet, manifest);
99
+ return set.headers;
100
+ }
101
+ if (_previewKey) {
102
+ const previewDefinition = await this.getValidatedPreviewDefinition(_previewKey, manifest.getModel());
103
+ const functionPreview = previewDefinition.functionData[manifest.getModel().mainFunction];
104
+ const headers = (functionPreview === null || functionPreview === void 0 ? void 0 : functionPreview.headers) ? functionPreview.headers : {};
105
+ return headers;
106
+ }
107
+ throw new dx_common_lib_1.BadRequestError(`neither componentSet or previewKey set`);
108
+ }
109
+ async getValidatedSet(_componentSet, manifest) {
110
+ const set = await this.componentSetService.getComponentSet(_componentSet);
111
+ const isCompVersionInSet = this.componentSetService.componentVersionInSet(manifest, set.webPath);
112
+ if (!isCompVersionInSet) {
113
+ throw new dx_common_lib_1.ResourceNotFoundError(`${manifest.getName()} ${manifest.getVersion()} not in set ${set.webPath}`);
114
+ }
115
+ return set;
116
+ }
117
+ async getValidatedPreviewDefinition(_previewKey, manifestModel) {
118
+ const { previews = {} } = manifestModel;
119
+ const previewDefinition = previews[_previewKey];
120
+ if (previewDefinition === undefined) {
121
+ const validPreviewKeys = Object.keys(previews);
122
+ throw new Error(`Component has not defined preview with key "${_previewKey}", the defined preview keys for this component are "${validPreviewKeys.join(', ')}"`);
123
+ }
124
+ return previewDefinition;
125
+ }
126
+ };
127
+ __decorate([
128
+ (0, tsoa_1.Get)('/:namespace/:componentName/:version/:staticFile*'),
129
+ __param(0, (0, tsoa_1.Path)()),
130
+ __param(1, (0, tsoa_1.Path)()),
131
+ __param(2, (0, tsoa_1.Path)()),
132
+ __param(3, (0, tsoa_1.Path)()),
133
+ __param(4, (0, tsoa_1.Request)()),
134
+ __param(5, (0, tsoa_1.Query)()),
135
+ __param(6, (0, tsoa_1.Query)()),
136
+ __metadata("design:type", Function),
137
+ __metadata("design:paramtypes", [String, String, String, String, Object, String, String]),
138
+ __metadata("design:returntype", Promise)
139
+ ], StaticController.prototype, "getPreview", null);
140
+ StaticController = StaticController_1 = __decorate([
141
+ (0, inversify_binding_decorators_1.provide)(StaticController_1),
142
+ (0, tsoa_1.Route)('/s'),
143
+ __param(0, (0, inversify_1.inject)('ManifestService')),
144
+ __param(1, (0, inversify_1.inject)('ComponentSetService')),
145
+ __param(2, (0, inversify_1.inject)('ComponentFunctionService')),
146
+ __metadata("design:paramtypes", [Object, Object, component_lib_1.ComponentFunctionService])
147
+ ], StaticController);
148
+ exports.StaticController = StaticController;
149
+ //# sourceMappingURL=StaticController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StaticController.js","sourceRoot":"","sources":["../../../src/webserver/controllers/StaticController.ts"],"names":[],"mappings":"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"}