@tramvai/module-server 1.96.0 → 1.99.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -183,6 +183,31 @@ By default server starts at `3000` port. You have next options to override this
183
183
  - **in dev environment** port in fully controlled by `@tramvai/cli` and should be specified by [`-p` option](references/cli/start.md#-p---port)
184
184
  - **in prod environment** it can be specified explicitly as an environment variable `PORT` e.g. `PORT=8080`
185
185
 
186
+ ### Specify port for utility paths
187
+
188
+ It includes: health checks, liveness checks, metrics.
189
+
190
+ By default port for utility paths equals [base server port](#specify-server-port) and they will use the same http server.
191
+
192
+ If you want to change this and run utility routes on different server with different port, use token `UTILITY_SERVER_PORT_TOKEN`:
193
+
194
+ ```ts
195
+ import { UTILITY_SERVER_PORT_TOKEN } from '@tramvai/tokens-server';
196
+
197
+ const providers = [
198
+ {
199
+ provide: UTILITY_SERVER_PORT_TOKEN,
200
+ useValue: 6532,
201
+ },
202
+ ];
203
+ ```
204
+
205
+ Or use env variable `UTILITY_SERVER_PORT` with defined value.
206
+
207
+ ```sh
208
+ env UTILITY_SERVER_PORT=6532 tramvai start app
209
+ ```
210
+
186
211
  ## Exportable tokens
187
212
 
188
213
  [Link](references/tokens/server.md)
@@ -4,3 +4,4 @@ export * from './gracefulShutdown';
4
4
  export * from './debugRequests';
5
5
  export * from './proxy';
6
6
  export * from './dependenciesVersion';
7
+ export * from './utilityServer';
@@ -0,0 +1,2 @@
1
+ export declare class UtilityServerModule {
2
+ }
package/lib/server.es.js CHANGED
@@ -1,16 +1,16 @@
1
1
  import { __decorate } from 'tslib';
2
- import { Scope, APP_INFO_TOKEN, Module, provide, DI_TOKEN, COMMAND_LINE_RUNNER_TOKEN, commandLineListTokens } from '@tramvai/core';
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, SERVER_TOKEN, READINESS_PROBE_TOKEN, LIVENESS_PROBE_TOKEN, SPECIAL_SERVER_PATHS, PROXY_CONFIG_TOKEN, DEPENDENCIES_VERSION_FILTER_TOKEN, WEB_APP_INIT_TOKEN, WEB_APP_AFTER_INIT_TOKEN, WEB_APP_LIMITER_TOKEN } from '@tramvai/tokens-server';
2
+ import { Scope, APP_INFO_TOKEN, Module, provide, DI_TOKEN, COMMAND_LINE_RUNNER_TOKEN, commandLineListTokens, createToken } from '@tramvai/core';
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, SERVER_TOKEN, READINESS_PROBE_TOKEN, LIVENESS_PROBE_TOKEN, UTILITY_SERVER_PATHS, PROXY_CONFIG_TOKEN, DEPENDENCIES_VERSION_FILTER_TOKEN, UTILITY_SERVER_PORT_TOKEN, WEB_APP_INIT_TOKEN, WEB_APP_AFTER_INIT_TOKEN, WEB_APP_LIMITER_TOKEN } from '@tramvai/tokens-server';
4
4
  export * from '@tramvai/tokens-server';
5
- import { WEB_FASTIFY_APP_BEFORE_INIT_TOKEN, SERVER_FACTORY_TOKEN, WEB_FASTIFY_APP_FACTORY_TOKEN, WEB_FASTIFY_APP_TOKEN, WEB_FASTIFY_APP_INIT_TOKEN, WEB_FASTIFY_APP_AFTER_INIT_TOKEN, WEB_FASTIFY_APP_LIMITER_TOKEN, WEB_FASTIFY_APP_BEFORE_ERROR_TOKEN, WEB_FASTIFY_APP_PROCESS_ERROR_TOKEN, WEB_FASTIFY_APP_AFTER_ERROR_TOKEN } from '@tramvai/tokens-server-private';
5
+ import { WEB_FASTIFY_APP_BEFORE_INIT_TOKEN, UTILITY_WEB_FASTIFY_APP_TOKEN, UTILITY_SERVER_TOKEN, SERVER_FACTORY_TOKEN, WEB_FASTIFY_APP_TOKEN, WEB_FASTIFY_APP_FACTORY_TOKEN, WEB_FASTIFY_APP_INIT_TOKEN, WEB_FASTIFY_APP_AFTER_INIT_TOKEN, WEB_FASTIFY_APP_LIMITER_TOKEN, WEB_FASTIFY_APP_BEFORE_ERROR_TOKEN, WEB_FASTIFY_APP_PROCESS_ERROR_TOKEN, WEB_FASTIFY_APP_AFTER_ERROR_TOKEN } from '@tramvai/tokens-server-private';
6
6
  import { REQUEST, RESPONSE, FASTIFY_REQUEST, FASTIFY_RESPONSE, RESPONSE_MANAGER_TOKEN, LOGGER_TOKEN, ENV_MANAGER_TOKEN, ENV_USED_TOKEN } from '@tramvai/tokens-common';
7
7
  import { MetricsModule } from '@tramvai/module-metrics';
8
8
  import { CacheWarmupModule } from '@tramvai/module-cache-warmup';
9
9
  import http from 'http';
10
10
  import fastify from 'fastify';
11
11
  import express from 'express';
12
- import { fastifyCookie } from 'fastify-cookie';
13
- import fastifyFormBody from 'fastify-formbody';
12
+ import { fastifyCookie } from '@fastify/cookie';
13
+ import fastifyFormBody from '@fastify/formbody';
14
14
  import fp from 'fastify-plugin';
15
15
  import symbols from 'fastify/lib/symbols';
16
16
  import isNil from '@tinkoff/utils/is/nil';
@@ -25,7 +25,7 @@ import { create, middlewares, getPapiParameters, createPapiMethod } from '@tramv
25
25
  import { createChildContainer } from '@tinkoff/dippy';
26
26
  import eachObj from '@tinkoff/utils/object/each';
27
27
  import { resolve } from 'path';
28
- import FastifyStatic from 'fastify-static';
28
+ import FastifyStatic from '@fastify/static';
29
29
  import { createTerminus } from '@tinkoff/terminus';
30
30
  import { parse } from '@tinkoff/url';
31
31
  import { EventEmitter } from 'events';
@@ -579,13 +579,13 @@ let ServerGracefulShutdownModule = class ServerGracefulShutdownModule {
579
579
  ServerGracefulShutdownModule = __decorate([
580
580
  Module({
581
581
  providers: [
582
- {
582
+ provide({
583
583
  provide: WEB_FASTIFY_APP_BEFORE_INIT_TOKEN,
584
584
  multi: true,
585
- useFactory: ({ server, logger, commandLineRunner, livenessProbe, readinessProbe, }) => {
585
+ useFactory: ({ app, server, logger, commandLineRunner, livenessProbe, readinessProbe, }) => {
586
586
  const log = logger('server');
587
- return function serverListen(instance) {
588
- createTerminus(server, instance, {
587
+ return function serverListen() {
588
+ createTerminus(server, app, {
589
589
  signal: 'SIGTERM',
590
590
  timeout: GRACEFUL_SHUTDOWN_TIMEOUT,
591
591
  logger: (msg, error) => {
@@ -625,15 +625,16 @@ ServerGracefulShutdownModule = __decorate([
625
625
  };
626
626
  },
627
627
  deps: {
628
+ app: UTILITY_WEB_FASTIFY_APP_TOKEN,
628
629
  server: SERVER_TOKEN,
629
630
  logger: LOGGER_TOKEN,
630
631
  commandLineRunner: COMMAND_LINE_RUNNER_TOKEN,
631
632
  readinessProbe: { token: READINESS_PROBE_TOKEN, optional: true },
632
633
  livenessProbe: { token: LIVENESS_PROBE_TOKEN, optional: true },
633
634
  },
634
- },
635
+ }),
635
636
  {
636
- provide: SPECIAL_SERVER_PATHS,
637
+ provide: UTILITY_SERVER_PATHS,
637
638
  useValue: [readyzPath, healthzPath],
638
639
  multi: true,
639
640
  },
@@ -788,7 +789,7 @@ ServerProxyModule = __decorate([
788
789
  Module({
789
790
  providers: [
790
791
  {
791
- // TODO: tramvai@2 migrate to `fastify` and `fastify-http-proxy`
792
+ // TODO: tramvai@2 migrate to `fastify` and `@fastify/http-proxy`
792
793
  // interfaces for the proxies are not compatible so some migration from the app is needed
793
794
  provide: WEB_APP_BEFORE_INIT_TOKEN,
794
795
  useFactory: ({ app, defaultProxies }) => {
@@ -878,6 +879,96 @@ DependenciesVersionModule = __decorate([
878
879
  })
879
880
  ], DependenciesVersionModule);
880
881
 
882
+ const IS_CUSTOM_SERVER_TOKEN = createToken('server utility isCustomServer');
883
+ let UtilityServerModule = class UtilityServerModule {
884
+ };
885
+ UtilityServerModule = __decorate([
886
+ Module({
887
+ providers: [
888
+ provide({
889
+ provide: ENV_USED_TOKEN,
890
+ multi: true,
891
+ useValue: [{ key: 'UTILITY_SERVER_PORT', optional: true }],
892
+ }),
893
+ provide({
894
+ provide: UTILITY_SERVER_PORT_TOKEN,
895
+ useFactory: ({ envManager }) => {
896
+ return +(envManager.get('UTILITY_SERVER_PORT') || envManager.get('PORT'));
897
+ },
898
+ deps: {
899
+ envManager: ENV_MANAGER_TOKEN,
900
+ },
901
+ }),
902
+ provide({
903
+ provide: IS_CUSTOM_SERVER_TOKEN,
904
+ useFactory: ({ port, envManager }) => {
905
+ return +envManager.get('PORT') !== port;
906
+ },
907
+ deps: {
908
+ envManager: ENV_MANAGER_TOKEN,
909
+ port: UTILITY_SERVER_PORT_TOKEN,
910
+ },
911
+ }),
912
+ provide({
913
+ provide: UTILITY_SERVER_TOKEN,
914
+ scope: Scope.SINGLETON,
915
+ useFactory: ({ isCustomServer, serverFactory, server }) => {
916
+ return isCustomServer ? serverFactory() : server;
917
+ },
918
+ deps: {
919
+ isCustomServer: IS_CUSTOM_SERVER_TOKEN,
920
+ server: SERVER_TOKEN,
921
+ serverFactory: SERVER_FACTORY_TOKEN,
922
+ },
923
+ }),
924
+ provide({
925
+ provide: UTILITY_WEB_FASTIFY_APP_TOKEN,
926
+ scope: Scope.SINGLETON,
927
+ useFactory: ({ isCustomServer, app, appFactory, server }) => {
928
+ return isCustomServer ? appFactory({ server }) : app;
929
+ },
930
+ deps: {
931
+ isCustomServer: IS_CUSTOM_SERVER_TOKEN,
932
+ app: WEB_FASTIFY_APP_TOKEN,
933
+ appFactory: WEB_FASTIFY_APP_FACTORY_TOKEN,
934
+ server: UTILITY_SERVER_TOKEN,
935
+ },
936
+ }),
937
+ provide({
938
+ provide: commandLineListTokens.listen,
939
+ multi: true,
940
+ scope: Scope.SINGLETON,
941
+ useFactory: ({ logger, isCustomServer, port, app, server }) => {
942
+ return async function utilityServerListen() {
943
+ if (!isCustomServer) {
944
+ return;
945
+ }
946
+ const log = logger('server:utility');
947
+ await app.ready();
948
+ return new Promise((resolve, reject) => {
949
+ server.once('error', (error) => {
950
+ log.error({ event: 'server-listen-port', error });
951
+ reject(error);
952
+ });
953
+ server.listen(port, () => {
954
+ log.warn({ event: 'server-listen-port', message: `Server listen ${port} port` });
955
+ resolve();
956
+ });
957
+ });
958
+ };
959
+ },
960
+ deps: {
961
+ logger: LOGGER_TOKEN,
962
+ isCustomServer: IS_CUSTOM_SERVER_TOKEN,
963
+ port: UTILITY_SERVER_PORT_TOKEN,
964
+ app: UTILITY_WEB_FASTIFY_APP_TOKEN,
965
+ server: UTILITY_SERVER_TOKEN,
966
+ },
967
+ }),
968
+ ],
969
+ })
970
+ ], UtilityServerModule);
971
+
881
972
  let ServerModule = class ServerModule {
882
973
  };
883
974
  ServerModule = __decorate([
@@ -890,6 +981,7 @@ ServerModule = __decorate([
890
981
  ServerGracefulShutdownModule,
891
982
  ServerProxyModule,
892
983
  DependenciesVersionModule,
984
+ UtilityServerModule,
893
985
  process.env.NODE_ENV !== 'production' && DebugHttpRequestsModule,
894
986
  ].filter(Boolean),
895
987
  providers: [
package/lib/server.js CHANGED
@@ -12,8 +12,8 @@ var moduleCacheWarmup = require('@tramvai/module-cache-warmup');
12
12
  var http = require('http');
13
13
  var fastify = require('fastify');
14
14
  var express = require('express');
15
- var fastifyCookie = require('fastify-cookie');
16
- var fastifyFormBody = require('fastify-formbody');
15
+ var cookie = require('@fastify/cookie');
16
+ var fastifyFormBody = require('@fastify/formbody');
17
17
  var fp = require('fastify-plugin');
18
18
  var symbols = require('fastify/lib/symbols');
19
19
  var isNil = require('@tinkoff/utils/is/nil');
@@ -28,7 +28,7 @@ var papi = require('@tramvai/papi');
28
28
  var dippy = require('@tinkoff/dippy');
29
29
  var eachObj = require('@tinkoff/utils/object/each');
30
30
  var path = require('path');
31
- var FastifyStatic = require('fastify-static');
31
+ var FastifyStatic = require('@fastify/static');
32
32
  var terminus = require('@tinkoff/terminus');
33
33
  var url = require('@tinkoff/url');
34
34
  var events = require('events');
@@ -244,7 +244,7 @@ const webAppInitCommand = ({ app, expressApp, logger, commandLineRunner, beforeI
244
244
  });
245
245
  await app.register(async (instance) => {
246
246
  await runHandlers(instance, limiterRequest, expressLimiterRequest);
247
- await app.register(fastifyCookie.fastifyCookie);
247
+ await app.register(cookie.fastifyCookie);
248
248
  await app.register(fastifyFormBody__default["default"], { bodyLimit: 2097152 }); // 2mb
249
249
  await runHandlers(instance, init, expressInit);
250
250
  // force express to execute to update server's request and response instances
@@ -604,13 +604,13 @@ let ServerGracefulShutdownModule = class ServerGracefulShutdownModule {
604
604
  ServerGracefulShutdownModule = tslib.__decorate([
605
605
  core.Module({
606
606
  providers: [
607
- {
607
+ core.provide({
608
608
  provide: tokensServerPrivate.WEB_FASTIFY_APP_BEFORE_INIT_TOKEN,
609
609
  multi: true,
610
- useFactory: ({ server, logger, commandLineRunner, livenessProbe, readinessProbe, }) => {
610
+ useFactory: ({ app, server, logger, commandLineRunner, livenessProbe, readinessProbe, }) => {
611
611
  const log = logger('server');
612
- return function serverListen(instance) {
613
- terminus.createTerminus(server, instance, {
612
+ return function serverListen() {
613
+ terminus.createTerminus(server, app, {
614
614
  signal: 'SIGTERM',
615
615
  timeout: GRACEFUL_SHUTDOWN_TIMEOUT,
616
616
  logger: (msg, error) => {
@@ -650,15 +650,16 @@ ServerGracefulShutdownModule = tslib.__decorate([
650
650
  };
651
651
  },
652
652
  deps: {
653
+ app: tokensServerPrivate.UTILITY_WEB_FASTIFY_APP_TOKEN,
653
654
  server: tokensServer.SERVER_TOKEN,
654
655
  logger: tokensCommon.LOGGER_TOKEN,
655
656
  commandLineRunner: core.COMMAND_LINE_RUNNER_TOKEN,
656
657
  readinessProbe: { token: tokensServer.READINESS_PROBE_TOKEN, optional: true },
657
658
  livenessProbe: { token: tokensServer.LIVENESS_PROBE_TOKEN, optional: true },
658
659
  },
659
- },
660
+ }),
660
661
  {
661
- provide: tokensServer.SPECIAL_SERVER_PATHS,
662
+ provide: tokensServer.UTILITY_SERVER_PATHS,
662
663
  useValue: [readyzPath, healthzPath],
663
664
  multi: true,
664
665
  },
@@ -813,7 +814,7 @@ ServerProxyModule = tslib.__decorate([
813
814
  core.Module({
814
815
  providers: [
815
816
  {
816
- // TODO: tramvai@2 migrate to `fastify` and `fastify-http-proxy`
817
+ // TODO: tramvai@2 migrate to `fastify` and `@fastify/http-proxy`
817
818
  // interfaces for the proxies are not compatible so some migration from the app is needed
818
819
  provide: tokensServer.WEB_APP_BEFORE_INIT_TOKEN,
819
820
  useFactory: ({ app, defaultProxies }) => {
@@ -903,6 +904,96 @@ DependenciesVersionModule = tslib.__decorate([
903
904
  })
904
905
  ], DependenciesVersionModule);
905
906
 
907
+ const IS_CUSTOM_SERVER_TOKEN = core.createToken('server utility isCustomServer');
908
+ let UtilityServerModule = class UtilityServerModule {
909
+ };
910
+ UtilityServerModule = tslib.__decorate([
911
+ core.Module({
912
+ providers: [
913
+ core.provide({
914
+ provide: tokensCommon.ENV_USED_TOKEN,
915
+ multi: true,
916
+ useValue: [{ key: 'UTILITY_SERVER_PORT', optional: true }],
917
+ }),
918
+ core.provide({
919
+ provide: tokensServer.UTILITY_SERVER_PORT_TOKEN,
920
+ useFactory: ({ envManager }) => {
921
+ return +(envManager.get('UTILITY_SERVER_PORT') || envManager.get('PORT'));
922
+ },
923
+ deps: {
924
+ envManager: tokensCommon.ENV_MANAGER_TOKEN,
925
+ },
926
+ }),
927
+ core.provide({
928
+ provide: IS_CUSTOM_SERVER_TOKEN,
929
+ useFactory: ({ port, envManager }) => {
930
+ return +envManager.get('PORT') !== port;
931
+ },
932
+ deps: {
933
+ envManager: tokensCommon.ENV_MANAGER_TOKEN,
934
+ port: tokensServer.UTILITY_SERVER_PORT_TOKEN,
935
+ },
936
+ }),
937
+ core.provide({
938
+ provide: tokensServerPrivate.UTILITY_SERVER_TOKEN,
939
+ scope: core.Scope.SINGLETON,
940
+ useFactory: ({ isCustomServer, serverFactory, server }) => {
941
+ return isCustomServer ? serverFactory() : server;
942
+ },
943
+ deps: {
944
+ isCustomServer: IS_CUSTOM_SERVER_TOKEN,
945
+ server: tokensServer.SERVER_TOKEN,
946
+ serverFactory: tokensServerPrivate.SERVER_FACTORY_TOKEN,
947
+ },
948
+ }),
949
+ core.provide({
950
+ provide: tokensServerPrivate.UTILITY_WEB_FASTIFY_APP_TOKEN,
951
+ scope: core.Scope.SINGLETON,
952
+ useFactory: ({ isCustomServer, app, appFactory, server }) => {
953
+ return isCustomServer ? appFactory({ server }) : app;
954
+ },
955
+ deps: {
956
+ isCustomServer: IS_CUSTOM_SERVER_TOKEN,
957
+ app: tokensServerPrivate.WEB_FASTIFY_APP_TOKEN,
958
+ appFactory: tokensServerPrivate.WEB_FASTIFY_APP_FACTORY_TOKEN,
959
+ server: tokensServerPrivate.UTILITY_SERVER_TOKEN,
960
+ },
961
+ }),
962
+ core.provide({
963
+ provide: core.commandLineListTokens.listen,
964
+ multi: true,
965
+ scope: core.Scope.SINGLETON,
966
+ useFactory: ({ logger, isCustomServer, port, app, server }) => {
967
+ return async function utilityServerListen() {
968
+ if (!isCustomServer) {
969
+ return;
970
+ }
971
+ const log = logger('server:utility');
972
+ await app.ready();
973
+ return new Promise((resolve, reject) => {
974
+ server.once('error', (error) => {
975
+ log.error({ event: 'server-listen-port', error });
976
+ reject(error);
977
+ });
978
+ server.listen(port, () => {
979
+ log.warn({ event: 'server-listen-port', message: `Server listen ${port} port` });
980
+ resolve();
981
+ });
982
+ });
983
+ };
984
+ },
985
+ deps: {
986
+ logger: tokensCommon.LOGGER_TOKEN,
987
+ isCustomServer: IS_CUSTOM_SERVER_TOKEN,
988
+ port: tokensServer.UTILITY_SERVER_PORT_TOKEN,
989
+ app: tokensServerPrivate.UTILITY_WEB_FASTIFY_APP_TOKEN,
990
+ server: tokensServerPrivate.UTILITY_SERVER_TOKEN,
991
+ },
992
+ }),
993
+ ],
994
+ })
995
+ ], UtilityServerModule);
996
+
906
997
  exports.ServerModule = class ServerModule {
907
998
  };
908
999
  exports.ServerModule = tslib.__decorate([
@@ -915,6 +1006,7 @@ exports.ServerModule = tslib.__decorate([
915
1006
  ServerGracefulShutdownModule,
916
1007
  ServerProxyModule,
917
1008
  DependenciesVersionModule,
1009
+ UtilityServerModule,
918
1010
  process.env.NODE_ENV !== 'production' && DebugHttpRequestsModule,
919
1011
  ].filter(Boolean),
920
1012
  providers: [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tramvai/module-server",
3
- "version": "1.96.0",
3
+ "version": "1.99.1",
4
4
  "description": "",
5
5
  "browser": "lib/browser.js",
6
6
  "main": "lib/server.js",
@@ -21,30 +21,30 @@
21
21
  "dependencies": {
22
22
  "@tinkoff/errors": "0.2.20",
23
23
  "@tinkoff/monkeypatch": "1.3.3",
24
- "@tinkoff/terminus": "0.0.2",
24
+ "@tinkoff/terminus": "0.0.3",
25
25
  "@tinkoff/url": "0.7.37",
26
- "@tramvai/module-cache-warmup": "1.96.0",
27
- "@tramvai/module-metrics": "1.96.0",
28
- "@tramvai/papi": "1.96.0",
29
- "@tramvai/tokens-server": "1.96.0",
30
- "@tramvai/tokens-server-private": "1.96.0",
26
+ "@tramvai/module-cache-warmup": "1.99.1",
27
+ "@tramvai/module-metrics": "1.99.1",
28
+ "@tramvai/papi": "1.99.1",
29
+ "@tramvai/tokens-server": "1.99.1",
30
+ "@tramvai/tokens-server-private": "1.99.1",
31
31
  "compression": "^1.7.4",
32
32
  "express": "^4.17.1",
33
- "fastify": "^3.27.4",
34
- "fastify-cookie": "^5.6.0",
35
- "fastify-formbody": "^5.2.0",
33
+ "fastify": "^3.29.0",
36
34
  "fastify-plugin": "^3.0.1",
37
- "fastify-static": "^4.6.1",
35
+ "@fastify/cookie": "^6.0.0",
36
+ "@fastify/formbody": "^6.0.1",
37
+ "@fastify/static": "^5.0.2",
38
38
  "http-proxy-middleware": "^2.0.2"
39
39
  },
40
40
  "peerDependencies": {
41
41
  "@tinkoff/dippy": "0.7.39",
42
42
  "@tinkoff/utils": "^2.1.2",
43
- "@tramvai/cli": "1.96.0",
44
- "@tramvai/core": "1.96.0",
45
- "@tramvai/module-common": "1.96.0",
46
- "@tramvai/module-environment": "1.96.0",
47
- "@tramvai/tokens-common": "1.96.0",
43
+ "@tramvai/cli": "1.99.1",
44
+ "@tramvai/core": "1.99.1",
45
+ "@tramvai/module-common": "1.99.1",
46
+ "@tramvai/module-environment": "1.99.1",
47
+ "@tramvai/tokens-common": "1.99.1",
48
48
  "tslib": "^2.0.3"
49
49
  },
50
50
  "devDependencies": {