@tramvai/module-server 1.7.8 → 1.8.3
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.
- package/README.md +18 -3
- package/lib/server.es.js +25 -23
- package/lib/server.js +23 -21
- package/package.json +10 -10
package/README.md
CHANGED
|
@@ -34,7 +34,7 @@ createApp({
|
|
|
34
34
|
|
|
35
35
|
Для включения проксирования необходимо в корне проекта создать файл `proxy.conf.js` или `proxy.conf.json` который будет экспортировать объект-маппинг запросов, либо можно использовать токен PROXY_CONFIG_TOKEN.
|
|
36
36
|
|
|
37
|
-
#### Формат
|
|
37
|
+
#### Формат прокси-файла
|
|
38
38
|
|
|
39
39
|
##### Объект ключ-значение
|
|
40
40
|
|
|
@@ -109,8 +109,7 @@ _К примеру, мы хотим раздать sw.js файл из корн
|
|
|
109
109
|
|
|
110
110
|
### PAPI
|
|
111
111
|
|
|
112
|
-
Papi - API роуты для `tramvai` приложения.
|
|
113
|
-
Подробная информация доступна в разделе [Papi](features/papi/introduction.md)
|
|
112
|
+
Papi - API роуты для `tramvai` приложения. Подробная информация доступна в разделе [Papi](features/papi/introduction.md)
|
|
114
113
|
|
|
115
114
|
### Эмуляция проблем с сетью/бэкендами в приложении
|
|
116
115
|
|
|
@@ -155,6 +154,22 @@ curl --location --request DELETE 'http://localhost:3000/tincoin/private/papi/deb
|
|
|
155
154
|
|
|
156
155
|
В модуль сервера автоматически подключен модуль прогрева кэшей. Подробную информацию по прогреву кэшей, можете почитать [в документации cache-warmup](references/modules/cache-warmup.md)
|
|
157
156
|
|
|
157
|
+
### Специальные заголовки
|
|
158
|
+
|
|
159
|
+
#### Информация о сборке и деплое
|
|
160
|
+
|
|
161
|
+
В модуле проставляются особые заголовки, которые помогают определить точную информацию о версии собранного приложения, коммите, ветке и т.п.:
|
|
162
|
+
|
|
163
|
+
- _x-app-id_ - имя приложения указанного в `createApp`. Указывается в коде приложения.
|
|
164
|
+
- _x-host_ - hostname сервера на котором запущено текущее приложение. Вычисляется в рантайме.
|
|
165
|
+
- _x-app-version_ - версия запущенного приложения. Передаётся через переменную окружения `APP_VERSION` (внутри tinkoff проставляется в рамках стандартных пайплайнов gitlab ci).
|
|
166
|
+
- _x-deploy-branch_ - ветка с которой был собран текущий образ приложения. Передаётся через переменную окружения `DEPLOY_BRANCH` (внутри tinkoff проставляется с помощью unic).
|
|
167
|
+
- _x-deploy-commit_ - sha коммита с которого был собран текущий образ приложения. Передаётся через переменную окружения `DEPLOY_COMMIT` (внутри tinkoff проставляется с помощью unic).
|
|
168
|
+
- _x-deploy-version_ - номер ревизии деплоя в k8s. Передаётся через переменную окружения `DEPLOY_VERSION` (внутри tinkoff проставляется с помощью unic).
|
|
169
|
+
- _x-deploy-repository_ - ссылка на репозиторий приложения. Передаётся через переменную окружения `DEPLOY_REPOSITORY` (внутри tinkoff проставляется с помощью unic).
|
|
170
|
+
|
|
171
|
+
Для всех заголовков выше, которые передаются через переменные окружения, чтобы они были доступны, необходимо чтобы внешняя инфраструктура передавала их при сборке и деплое образа приложения (внутри tinkoff это делается автоматически).
|
|
172
|
+
|
|
158
173
|
## Отладка
|
|
159
174
|
|
|
160
175
|
Модуль использует логгеры с идентификаторами: `server`, `server:static`, `server:webapp`, `server:node-debug:request`
|
package/lib/server.es.js
CHANGED
|
@@ -2,7 +2,7 @@ import { __decorate } from 'tslib';
|
|
|
2
2
|
import { Scope, APP_INFO_TOKEN, Module, provide, DI_TOKEN, COMMAND_LINE_RUNNER_TOKEN, commandLineListTokens } from '@tramvai/core';
|
|
3
3
|
import { SERVER_MODULE_PAPI_PUBLIC_ROUTE, SERVER_MODULE_PAPI_PUBLIC_URL, SERVER_MODULE_PAPI_PRIVATE_URL, WEB_APP_BEFORE_INIT_TOKEN, WEB_APP_TOKEN, SERVER_MODULE_PAPI_PRIVATE_ROUTE, SERVER_MODULE_STATICS_OPTIONS, WEB_APP_INIT_TOKEN, SERVER_TOKEN, SPECIAL_SERVER_PATHS, PROXY_CONFIG_TOKEN, DEPENDENCIES_VERSION_FILTER_TOKEN, WEB_APP_AFTER_INIT_TOKEN } from '@tramvai/tokens-server';
|
|
4
4
|
export * from '@tramvai/tokens-server';
|
|
5
|
-
import { REQUEST, RESPONSE, RESPONSE_MANAGER_TOKEN, LOGGER_TOKEN as LOGGER_TOKEN$1, ENV_MANAGER_TOKEN as ENV_MANAGER_TOKEN$1, ENV_USED_TOKEN
|
|
5
|
+
import { REQUEST, RESPONSE, RESPONSE_MANAGER_TOKEN, LOGGER_TOKEN as LOGGER_TOKEN$1, ENV_MANAGER_TOKEN as ENV_MANAGER_TOKEN$1, ENV_USED_TOKEN } from '@tramvai/module-common';
|
|
6
6
|
import { MetricsModule } from '@tramvai/module-metrics';
|
|
7
7
|
import { CacheWarmupModule } from '@tramvai/module-cache-warmup';
|
|
8
8
|
import http from 'http';
|
|
@@ -14,9 +14,10 @@ import { isRedirectFoundError, isNotFoundError, isHttpError } from '@tinkoff/err
|
|
|
14
14
|
import zlib from 'zlib';
|
|
15
15
|
import compression from 'compression';
|
|
16
16
|
import os from 'os';
|
|
17
|
+
import filterObj from '@tinkoff/utils/object/filter';
|
|
17
18
|
import flatten from '@tinkoff/utils/array/flatten';
|
|
18
19
|
import toArray from '@tinkoff/utils/array/toArray';
|
|
19
|
-
import { REQUEST as REQUEST$1, RESPONSE as RESPONSE$1, LOGGER_TOKEN, ENV_MANAGER_TOKEN
|
|
20
|
+
import { REQUEST as REQUEST$1, RESPONSE as RESPONSE$1, LOGGER_TOKEN, ENV_MANAGER_TOKEN } from '@tramvai/tokens-common';
|
|
20
21
|
import { create, middlewares, getPapiParameters, createPapiMethod } from '@tramvai/papi';
|
|
21
22
|
import { createChildContainer } from '@tinkoff/dippy';
|
|
22
23
|
import eachObj from '@tinkoff/utils/object/each';
|
|
@@ -29,7 +30,6 @@ import isArray from '@tinkoff/utils/is/array';
|
|
|
29
30
|
import isObject from '@tinkoff/utils/is/object';
|
|
30
31
|
import { resolve } from 'path';
|
|
31
32
|
import { createProxyMiddleware } from 'http-proxy-middleware';
|
|
32
|
-
import filterObj from '@tinkoff/utils/object/filter';
|
|
33
33
|
|
|
34
34
|
const serverFactory = ({ webApp }) => {
|
|
35
35
|
const server = http.createServer();
|
|
@@ -169,14 +169,18 @@ const staticAppCommand = ({ logger, envManager, appInfo, }) => {
|
|
|
169
169
|
};
|
|
170
170
|
|
|
171
171
|
const xHeadersFactory = ({ app, envManager, appInfo, }) => {
|
|
172
|
-
const
|
|
172
|
+
const xHeaders = filterObj((val) => !!val, {
|
|
173
|
+
'x-app-id': appInfo.appName,
|
|
174
|
+
'x-host': encodeURIComponent(os.hostname()),
|
|
175
|
+
'x-app-version': envManager.get('APP_VERSION'),
|
|
176
|
+
'x-deploy-branch': envManager.get('DEPLOY_BRANCH'),
|
|
177
|
+
'x-deploy-commit': envManager.get('DEPLOY_COMMIT'),
|
|
178
|
+
'x-deploy-version': envManager.get('DEPLOY_VERSION'),
|
|
179
|
+
'x-deploy-repository': envManager.get('DEPLOY_REPOSITORY'),
|
|
180
|
+
});
|
|
173
181
|
return async () => {
|
|
174
182
|
app.use((req, res, next) => {
|
|
175
|
-
res.set(
|
|
176
|
-
'X-App-Id': appInfo.appName,
|
|
177
|
-
'X-App-Version': appVersion,
|
|
178
|
-
'X-Host': encodeURIComponent(os.hostname()),
|
|
179
|
-
});
|
|
183
|
+
res.set(xHeaders);
|
|
180
184
|
next();
|
|
181
185
|
});
|
|
182
186
|
};
|
|
@@ -355,19 +359,6 @@ ServerPapiModule = __decorate([
|
|
|
355
359
|
},
|
|
356
360
|
}),
|
|
357
361
|
}),
|
|
358
|
-
provide({
|
|
359
|
-
provide: ENV_USED_TOKEN,
|
|
360
|
-
multi: true,
|
|
361
|
-
useValue: [
|
|
362
|
-
{
|
|
363
|
-
dehydrate: true,
|
|
364
|
-
optional: true,
|
|
365
|
-
key: 'APP_VERSION',
|
|
366
|
-
// обращаемся к process.env.APP_VERSION явно, чтобы вебпак заинлайнил его при сборке и версия вшилась в билд
|
|
367
|
-
value: process.env.APP_VERSION,
|
|
368
|
-
},
|
|
369
|
-
],
|
|
370
|
-
}),
|
|
371
362
|
],
|
|
372
363
|
})
|
|
373
364
|
], ServerPapiModule);
|
|
@@ -781,12 +772,23 @@ ServerModule = __decorate([
|
|
|
781
772
|
},
|
|
782
773
|
},
|
|
783
774
|
{
|
|
784
|
-
provide: ENV_USED_TOKEN
|
|
775
|
+
provide: ENV_USED_TOKEN,
|
|
785
776
|
multi: true,
|
|
786
777
|
useValue: [
|
|
787
778
|
{ key: 'DEV_STATIC', optional: true, dehydrate: false },
|
|
788
779
|
{ key: 'PORT_STATIC', optional: true, dehydrate: false, value: 4000 },
|
|
789
780
|
{ key: 'PORT', optional: true, dehydrate: false, value: 3000 },
|
|
781
|
+
{
|
|
782
|
+
key: 'APP_VERSION',
|
|
783
|
+
dehydrate: true,
|
|
784
|
+
optional: true,
|
|
785
|
+
// обращаемся к process.env.APP_VERSION явно, чтобы вебпак заинлайнил его при сборке и версия вшилась в билд
|
|
786
|
+
value: process.env.APP_VERSION,
|
|
787
|
+
},
|
|
788
|
+
{ key: 'DEPLOY_BRANCH', optional: true, dehydrate: false },
|
|
789
|
+
{ key: 'DEPLOY_COMMIT', optional: true, dehydrate: false },
|
|
790
|
+
{ key: 'DEPLOY_VERSION', optional: true, dehydrate: false },
|
|
791
|
+
{ key: 'DEPLOY_REPOSITORY', optional: true, dehydrate: false },
|
|
790
792
|
],
|
|
791
793
|
},
|
|
792
794
|
{
|
package/lib/server.js
CHANGED
|
@@ -17,6 +17,7 @@ var errors = require('@tinkoff/errors');
|
|
|
17
17
|
var zlib = require('zlib');
|
|
18
18
|
var compression = require('compression');
|
|
19
19
|
var os = require('os');
|
|
20
|
+
var filterObj = require('@tinkoff/utils/object/filter');
|
|
20
21
|
var flatten = require('@tinkoff/utils/array/flatten');
|
|
21
22
|
var toArray = require('@tinkoff/utils/array/toArray');
|
|
22
23
|
var tokensCommon = require('@tramvai/tokens-common');
|
|
@@ -32,7 +33,6 @@ var isArray = require('@tinkoff/utils/is/array');
|
|
|
32
33
|
var isObject = require('@tinkoff/utils/is/object');
|
|
33
34
|
var path = require('path');
|
|
34
35
|
var httpProxyMiddleware = require('http-proxy-middleware');
|
|
35
|
-
var filterObj = require('@tinkoff/utils/object/filter');
|
|
36
36
|
|
|
37
37
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
38
38
|
|
|
@@ -44,6 +44,7 @@ var finalhandler__default = /*#__PURE__*/_interopDefaultLegacy(finalhandler);
|
|
|
44
44
|
var zlib__default = /*#__PURE__*/_interopDefaultLegacy(zlib);
|
|
45
45
|
var compression__default = /*#__PURE__*/_interopDefaultLegacy(compression);
|
|
46
46
|
var os__default = /*#__PURE__*/_interopDefaultLegacy(os);
|
|
47
|
+
var filterObj__default = /*#__PURE__*/_interopDefaultLegacy(filterObj);
|
|
47
48
|
var flatten__default = /*#__PURE__*/_interopDefaultLegacy(flatten);
|
|
48
49
|
var toArray__default = /*#__PURE__*/_interopDefaultLegacy(toArray);
|
|
49
50
|
var eachObj__default = /*#__PURE__*/_interopDefaultLegacy(eachObj);
|
|
@@ -51,7 +52,6 @@ var monkeypatch__default = /*#__PURE__*/_interopDefaultLegacy(monkeypatch);
|
|
|
51
52
|
var https__default = /*#__PURE__*/_interopDefaultLegacy(https);
|
|
52
53
|
var isArray__default = /*#__PURE__*/_interopDefaultLegacy(isArray);
|
|
53
54
|
var isObject__default = /*#__PURE__*/_interopDefaultLegacy(isObject);
|
|
54
|
-
var filterObj__default = /*#__PURE__*/_interopDefaultLegacy(filterObj);
|
|
55
55
|
|
|
56
56
|
const serverFactory = ({ webApp }) => {
|
|
57
57
|
const server = http__default['default'].createServer();
|
|
@@ -191,14 +191,18 @@ const staticAppCommand = ({ logger, envManager, appInfo, }) => {
|
|
|
191
191
|
};
|
|
192
192
|
|
|
193
193
|
const xHeadersFactory = ({ app, envManager, appInfo, }) => {
|
|
194
|
-
const
|
|
194
|
+
const xHeaders = filterObj__default['default']((val) => !!val, {
|
|
195
|
+
'x-app-id': appInfo.appName,
|
|
196
|
+
'x-host': encodeURIComponent(os__default['default'].hostname()),
|
|
197
|
+
'x-app-version': envManager.get('APP_VERSION'),
|
|
198
|
+
'x-deploy-branch': envManager.get('DEPLOY_BRANCH'),
|
|
199
|
+
'x-deploy-commit': envManager.get('DEPLOY_COMMIT'),
|
|
200
|
+
'x-deploy-version': envManager.get('DEPLOY_VERSION'),
|
|
201
|
+
'x-deploy-repository': envManager.get('DEPLOY_REPOSITORY'),
|
|
202
|
+
});
|
|
195
203
|
return async () => {
|
|
196
204
|
app.use((req, res, next) => {
|
|
197
|
-
res.set(
|
|
198
|
-
'X-App-Id': appInfo.appName,
|
|
199
|
-
'X-App-Version': appVersion,
|
|
200
|
-
'X-Host': encodeURIComponent(os__default['default'].hostname()),
|
|
201
|
-
});
|
|
205
|
+
res.set(xHeaders);
|
|
202
206
|
next();
|
|
203
207
|
});
|
|
204
208
|
};
|
|
@@ -377,19 +381,6 @@ ServerPapiModule = tslib.__decorate([
|
|
|
377
381
|
},
|
|
378
382
|
}),
|
|
379
383
|
}),
|
|
380
|
-
core.provide({
|
|
381
|
-
provide: tokensCommon.ENV_USED_TOKEN,
|
|
382
|
-
multi: true,
|
|
383
|
-
useValue: [
|
|
384
|
-
{
|
|
385
|
-
dehydrate: true,
|
|
386
|
-
optional: true,
|
|
387
|
-
key: 'APP_VERSION',
|
|
388
|
-
// обращаемся к process.env.APP_VERSION явно, чтобы вебпак заинлайнил его при сборке и версия вшилась в билд
|
|
389
|
-
value: process.env.APP_VERSION,
|
|
390
|
-
},
|
|
391
|
-
],
|
|
392
|
-
}),
|
|
393
384
|
],
|
|
394
385
|
})
|
|
395
386
|
], ServerPapiModule);
|
|
@@ -809,6 +800,17 @@ exports.ServerModule = tslib.__decorate([
|
|
|
809
800
|
{ key: 'DEV_STATIC', optional: true, dehydrate: false },
|
|
810
801
|
{ key: 'PORT_STATIC', optional: true, dehydrate: false, value: 4000 },
|
|
811
802
|
{ key: 'PORT', optional: true, dehydrate: false, value: 3000 },
|
|
803
|
+
{
|
|
804
|
+
key: 'APP_VERSION',
|
|
805
|
+
dehydrate: true,
|
|
806
|
+
optional: true,
|
|
807
|
+
// обращаемся к process.env.APP_VERSION явно, чтобы вебпак заинлайнил его при сборке и версия вшилась в билд
|
|
808
|
+
value: process.env.APP_VERSION,
|
|
809
|
+
},
|
|
810
|
+
{ key: 'DEPLOY_BRANCH', optional: true, dehydrate: false },
|
|
811
|
+
{ key: 'DEPLOY_COMMIT', optional: true, dehydrate: false },
|
|
812
|
+
{ key: 'DEPLOY_VERSION', optional: true, dehydrate: false },
|
|
813
|
+
{ key: 'DEPLOY_REPOSITORY', optional: true, dehydrate: false },
|
|
812
814
|
],
|
|
813
815
|
},
|
|
814
816
|
{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tramvai/module-server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.3",
|
|
4
4
|
"description": "",
|
|
5
5
|
"browser": "lib/browser.js",
|
|
6
6
|
"main": "lib/server.js",
|
|
@@ -23,10 +23,10 @@
|
|
|
23
23
|
"@tinkoff/express-terminus": "0.1.11",
|
|
24
24
|
"@tinkoff/monkeypatch": "1.3.3",
|
|
25
25
|
"@tinkoff/url": "0.7.36",
|
|
26
|
-
"@tramvai/module-cache-warmup": "1.
|
|
27
|
-
"@tramvai/module-metrics": "1.
|
|
28
|
-
"@tramvai/papi": "1.
|
|
29
|
-
"@tramvai/tokens-server": "1.
|
|
26
|
+
"@tramvai/module-cache-warmup": "1.8.3",
|
|
27
|
+
"@tramvai/module-metrics": "1.8.3",
|
|
28
|
+
"@tramvai/papi": "1.8.3",
|
|
29
|
+
"@tramvai/tokens-server": "1.8.3",
|
|
30
30
|
"body-parser": "^1.19.0",
|
|
31
31
|
"compression": "^1.7.4",
|
|
32
32
|
"cookie-parser": "^1.4.3",
|
|
@@ -36,11 +36,11 @@
|
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|
|
38
38
|
"@tinkoff/utils": "^2.1.2",
|
|
39
|
-
"@tramvai/cli": "1.
|
|
40
|
-
"@tramvai/core": "1.
|
|
41
|
-
"@tramvai/module-common": "1.
|
|
42
|
-
"@tramvai/module-environment": "1.
|
|
43
|
-
"@tramvai/tokens-common": "1.
|
|
39
|
+
"@tramvai/cli": "1.8.3",
|
|
40
|
+
"@tramvai/core": "1.8.3",
|
|
41
|
+
"@tramvai/module-common": "1.8.3",
|
|
42
|
+
"@tramvai/module-environment": "1.8.3",
|
|
43
|
+
"@tramvai/tokens-common": "1.8.3",
|
|
44
44
|
"@tinkoff/dippy": "0.7.35",
|
|
45
45
|
"tslib": "^2.0.3"
|
|
46
46
|
},
|