@tramvai/module-http-client 1.94.1 → 1.94.2

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.
@@ -1,2 +1,3 @@
1
- export declare class HttpClientModule {
2
- }
1
+ export declare const HttpClientModule: import("@tramvai/core").ModuleType<{
2
+ new (): {};
3
+ }>;
@@ -1,4 +1,3 @@
1
- import { __decorate } from 'tslib';
2
1
  import { createToken } from '@tinkoff/dippy';
3
2
  import { Module, provide, Scope, APP_INFO_TOKEN } from '@tramvai/core';
4
3
  import { PAPI_SERVICE, HTTP_CLIENT_FACTORY, API_CLIENT_PASS_HEADERS, HTTP_CLIENT_AGENT, DISABLE_CIRCUIT_BREAKER, HTTP_CLIENT } from '@tramvai/tokens-http-client';
@@ -133,120 +132,114 @@ class PapiService extends ApiService {
133
132
  }
134
133
  }
135
134
 
136
- let PapiClientModule = class PapiClientModule {
137
- };
138
- PapiClientModule = __decorate([
139
- Module({
140
- providers: [
141
- provide({
142
- provide: PAPI_SERVICE,
143
- scope: Scope.SINGLETON,
144
- useClass: PapiService,
145
- deps: {
146
- httpClientFactory: HTTP_CLIENT_FACTORY,
147
- baseUrl: SERVER_MODULE_PAPI_PUBLIC_URL,
148
- },
149
- }),
150
- ],
151
- })
152
- ], PapiClientModule);
135
+ const PapiClientModule = /* @__PURE__ */ Module({
136
+ providers: [
137
+ provide({
138
+ provide: PAPI_SERVICE,
139
+ scope: Scope.SINGLETON,
140
+ useClass: PapiService,
141
+ deps: {
142
+ httpClientFactory: HTTP_CLIENT_FACTORY,
143
+ baseUrl: SERVER_MODULE_PAPI_PUBLIC_URL,
144
+ },
145
+ }),
146
+ ],
147
+ })(class PapiClientModule {
148
+ });
153
149
 
154
150
  const createCacheToken = createToken('httpClient createCache');
155
- let HttpClientModule = class HttpClientModule {
156
- };
157
- HttpClientModule = __decorate([
158
- Module({
159
- imports: [PapiClientModule],
160
- providers: [
161
- provide({
162
- provide: HTTP_CLIENT_FACTORY,
163
- useFactory: httpClientFactory,
164
- deps: {
165
- logger: LOGGER_TOKEN,
166
- envManager: ENV_MANAGER_TOKEN,
167
- appInfo: APP_INFO_TOKEN,
168
- createCache: createCacheToken,
169
- tinkoffRequestRegistry: 'tinkoffRequestRegistry',
170
- requestManager: {
171
- token: REQUEST_MANAGER_TOKEN,
172
- optional: true,
173
- },
174
- headersList: {
175
- token: API_CLIENT_PASS_HEADERS,
176
- optional: true,
177
- },
178
- agent: {
179
- token: HTTP_CLIENT_AGENT,
180
- optional: true,
181
- },
182
- disableCircuitBreaker: {
183
- token: DISABLE_CIRCUIT_BREAKER,
184
- optional: true,
185
- },
186
- },
187
- }),
188
- provide({
189
- provide: HTTP_CLIENT,
190
- useFactory: ({ factory }) => {
191
- return factory({
192
- name: 'http-client',
193
- disableCache: true,
194
- });
151
+ const HttpClientModule = /* @__PURE__ */ Module({
152
+ imports: [PapiClientModule],
153
+ providers: [
154
+ provide({
155
+ provide: HTTP_CLIENT_FACTORY,
156
+ useFactory: httpClientFactory,
157
+ deps: {
158
+ logger: LOGGER_TOKEN,
159
+ envManager: ENV_MANAGER_TOKEN,
160
+ appInfo: APP_INFO_TOKEN,
161
+ createCache: createCacheToken,
162
+ tinkoffRequestRegistry: 'tinkoffRequestRegistry',
163
+ requestManager: {
164
+ token: REQUEST_MANAGER_TOKEN,
165
+ optional: true,
195
166
  },
196
- deps: {
197
- factory: HTTP_CLIENT_FACTORY,
167
+ headersList: {
168
+ token: API_CLIENT_PASS_HEADERS,
169
+ optional: true,
198
170
  },
199
- }),
200
- provide({
201
- provide: ENV_USED_TOKEN,
202
- useValue: [
203
- { key: 'HTTP_CLIENT_CACHE_DISABLED', optional: true, dehydrate: false },
204
- { key: 'HTTP_CLIENT_CIRCUIT_BREAKER_DISABLED', optional: true, dehydrate: false },
205
- ],
206
- multi: true,
207
- }),
208
- /**
209
- * хранилище для экземпляров @tinkoff/request
210
- *
211
- * требуется хранить экземпляры в единственном виде,
212
- * т.к. многие плагины @tinkoff/request после инициализации имеют состояние
213
- * (cache, circuit breaker), и не будут корректно работать на сервере,
214
- * если создавать новые экземпляры на Scope.REQUEST
215
- */
216
- provide({
217
- provide: 'tinkoffRequestRegistry',
218
- scope: Scope.SINGLETON,
219
- useFactory: () => new Map(),
220
- }),
221
- /**
222
- * `CREATE_CACHE_TOKEN` имеет проверку, если токен используется провайдером,
223
- * который имеет Scope.SINGLETON, то инстанс кэша сохраняется в общее хранилище,
224
- * и доступен для очистки через `/papi/clear-cache`.
225
- * Scope.REQUEST игнорируется, т.к. это верная утечка памяти,
226
- * инстансов кэши было бы неограниченное количество.
227
- *
228
- * HTTP клиенты создаются со Scope.REQUEST, но инстансы @tinkoff/request
229
- * (и соответственно кэшей) создаются только один раз, благодаря `tinkoffRequestRegistry`.
230
- * это гарантирует отсутствие утечек памяти, поэтому мы обходим проверку
231
- * на Scope.SINGLETON c помощью обертки `createCacheToken`
232
- */
233
- provide({
234
- provide: createCacheToken,
235
- scope: Scope.SINGLETON,
236
- useFactory: ({ createCache }) => {
237
- return createCache;
171
+ agent: {
172
+ token: HTTP_CLIENT_AGENT,
173
+ optional: true,
238
174
  },
239
- deps: {
240
- createCache: CREATE_CACHE_TOKEN,
175
+ disableCircuitBreaker: {
176
+ token: DISABLE_CIRCUIT_BREAKER,
177
+ optional: true,
241
178
  },
242
- }),
243
- provide({
244
- provide: API_CLIENT_PASS_HEADERS,
245
- multi: true,
246
- useValue: ['x-request-id'],
247
- }),
248
- ],
249
- })
250
- ], HttpClientModule);
179
+ },
180
+ }),
181
+ provide({
182
+ provide: HTTP_CLIENT,
183
+ useFactory: ({ factory }) => {
184
+ return factory({
185
+ name: 'http-client',
186
+ disableCache: true,
187
+ });
188
+ },
189
+ deps: {
190
+ factory: HTTP_CLIENT_FACTORY,
191
+ },
192
+ }),
193
+ provide({
194
+ provide: ENV_USED_TOKEN,
195
+ useValue: [
196
+ { key: 'HTTP_CLIENT_CACHE_DISABLED', optional: true, dehydrate: false },
197
+ { key: 'HTTP_CLIENT_CIRCUIT_BREAKER_DISABLED', optional: true, dehydrate: false },
198
+ ],
199
+ multi: true,
200
+ }),
201
+ /**
202
+ * хранилище для экземпляров @tinkoff/request
203
+ *
204
+ * требуется хранить экземпляры в единственном виде,
205
+ * т.к. многие плагины @tinkoff/request после инициализации имеют состояние
206
+ * (cache, circuit breaker), и не будут корректно работать на сервере,
207
+ * если создавать новые экземпляры на Scope.REQUEST
208
+ */
209
+ provide({
210
+ provide: 'tinkoffRequestRegistry',
211
+ scope: Scope.SINGLETON,
212
+ useFactory: () => new Map(),
213
+ }),
214
+ /**
215
+ * `CREATE_CACHE_TOKEN` имеет проверку, если токен используется провайдером,
216
+ * который имеет Scope.SINGLETON, то инстанс кэша сохраняется в общее хранилище,
217
+ * и доступен для очистки через `/papi/clear-cache`.
218
+ * Scope.REQUEST игнорируется, т.к. это верная утечка памяти,
219
+ * инстансов кэши было бы неограниченное количество.
220
+ *
221
+ * HTTP клиенты создаются со Scope.REQUEST, но инстансы @tinkoff/request
222
+ * (и соответственно кэшей) создаются только один раз, благодаря `tinkoffRequestRegistry`.
223
+ * это гарантирует отсутствие утечек памяти, поэтому мы обходим проверку
224
+ * на Scope.SINGLETON c помощью обертки `createCacheToken`
225
+ */
226
+ provide({
227
+ provide: createCacheToken,
228
+ scope: Scope.SINGLETON,
229
+ useFactory: ({ createCache }) => {
230
+ return createCache;
231
+ },
232
+ deps: {
233
+ createCache: CREATE_CACHE_TOKEN,
234
+ },
235
+ }),
236
+ provide({
237
+ provide: API_CLIENT_PASS_HEADERS,
238
+ multi: true,
239
+ useValue: ['x-request-id'],
240
+ }),
241
+ ],
242
+ })(class HttpClientModule {
243
+ });
251
244
 
252
245
  export { HttpClientModule, PapiService, fillHeaderIp, fillHeaders, formatError, httpClientFactory };
package/lib/index.es.js CHANGED
@@ -1,4 +1,3 @@
1
- import { __decorate } from 'tslib';
2
1
  import { createChildContainer, createToken } from '@tinkoff/dippy';
3
2
  import { Module, provide, Scope, DI_TOKEN, APP_INFO_TOKEN } from '@tramvai/core';
4
3
  import { PAPI_SERVICE, HTTP_CLIENT_FACTORY, API_CLIENT_PASS_HEADERS, HTTP_CLIENT_AGENT, DISABLE_CIRCUIT_BREAKER, HTTP_CLIENT } from '@tramvai/tokens-http-client';
@@ -180,120 +179,114 @@ class PapiService extends BaseHttpClient {
180
179
  }
181
180
  }
182
181
 
183
- let PapiClientModule = class PapiClientModule {
184
- };
185
- PapiClientModule = __decorate([
186
- Module({
187
- providers: [
188
- provide({
189
- provide: PAPI_SERVICE,
190
- scope: Scope.SINGLETON,
191
- useClass: PapiService,
192
- deps: {
193
- di: DI_TOKEN,
194
- papi: { token: SERVER_MODULE_PAPI_PUBLIC_ROUTE, optional: true, multi: true },
195
- },
196
- }),
197
- ],
198
- })
199
- ], PapiClientModule);
182
+ const PapiClientModule = /* @__PURE__ */ Module({
183
+ providers: [
184
+ provide({
185
+ provide: PAPI_SERVICE,
186
+ scope: Scope.SINGLETON,
187
+ useClass: PapiService,
188
+ deps: {
189
+ di: DI_TOKEN,
190
+ papi: { token: SERVER_MODULE_PAPI_PUBLIC_ROUTE, optional: true, multi: true },
191
+ },
192
+ }),
193
+ ],
194
+ })(class PapiClientModule {
195
+ });
200
196
 
201
197
  const createCacheToken = createToken('httpClient createCache');
202
- let HttpClientModule = class HttpClientModule {
203
- };
204
- HttpClientModule = __decorate([
205
- Module({
206
- imports: [PapiClientModule],
207
- providers: [
208
- provide({
209
- provide: HTTP_CLIENT_FACTORY,
210
- useFactory: httpClientFactory,
211
- deps: {
212
- logger: LOGGER_TOKEN,
213
- envManager: ENV_MANAGER_TOKEN,
214
- appInfo: APP_INFO_TOKEN,
215
- createCache: createCacheToken,
216
- tinkoffRequestRegistry: 'tinkoffRequestRegistry',
217
- requestManager: {
218
- token: REQUEST_MANAGER_TOKEN,
219
- optional: true,
220
- },
221
- headersList: {
222
- token: API_CLIENT_PASS_HEADERS,
223
- optional: true,
224
- },
225
- agent: {
226
- token: HTTP_CLIENT_AGENT,
227
- optional: true,
228
- },
229
- disableCircuitBreaker: {
230
- token: DISABLE_CIRCUIT_BREAKER,
231
- optional: true,
232
- },
233
- },
234
- }),
235
- provide({
236
- provide: HTTP_CLIENT,
237
- useFactory: ({ factory }) => {
238
- return factory({
239
- name: 'http-client',
240
- disableCache: true,
241
- });
198
+ const HttpClientModule = /* @__PURE__ */ Module({
199
+ imports: [PapiClientModule],
200
+ providers: [
201
+ provide({
202
+ provide: HTTP_CLIENT_FACTORY,
203
+ useFactory: httpClientFactory,
204
+ deps: {
205
+ logger: LOGGER_TOKEN,
206
+ envManager: ENV_MANAGER_TOKEN,
207
+ appInfo: APP_INFO_TOKEN,
208
+ createCache: createCacheToken,
209
+ tinkoffRequestRegistry: 'tinkoffRequestRegistry',
210
+ requestManager: {
211
+ token: REQUEST_MANAGER_TOKEN,
212
+ optional: true,
242
213
  },
243
- deps: {
244
- factory: HTTP_CLIENT_FACTORY,
214
+ headersList: {
215
+ token: API_CLIENT_PASS_HEADERS,
216
+ optional: true,
245
217
  },
246
- }),
247
- provide({
248
- provide: ENV_USED_TOKEN,
249
- useValue: [
250
- { key: 'HTTP_CLIENT_CACHE_DISABLED', optional: true, dehydrate: false },
251
- { key: 'HTTP_CLIENT_CIRCUIT_BREAKER_DISABLED', optional: true, dehydrate: false },
252
- ],
253
- multi: true,
254
- }),
255
- /**
256
- * хранилище для экземпляров @tinkoff/request
257
- *
258
- * требуется хранить экземпляры в единственном виде,
259
- * т.к. многие плагины @tinkoff/request после инициализации имеют состояние
260
- * (cache, circuit breaker), и не будут корректно работать на сервере,
261
- * если создавать новые экземпляры на Scope.REQUEST
262
- */
263
- provide({
264
- provide: 'tinkoffRequestRegistry',
265
- scope: Scope.SINGLETON,
266
- useFactory: () => new Map(),
267
- }),
268
- /**
269
- * `CREATE_CACHE_TOKEN` имеет проверку, если токен используется провайдером,
270
- * который имеет Scope.SINGLETON, то инстанс кэша сохраняется в общее хранилище,
271
- * и доступен для очистки через `/papi/clear-cache`.
272
- * Scope.REQUEST игнорируется, т.к. это верная утечка памяти,
273
- * инстансов кэши было бы неограниченное количество.
274
- *
275
- * HTTP клиенты создаются со Scope.REQUEST, но инстансы @tinkoff/request
276
- * (и соответственно кэшей) создаются только один раз, благодаря `tinkoffRequestRegistry`.
277
- * это гарантирует отсутствие утечек памяти, поэтому мы обходим проверку
278
- * на Scope.SINGLETON c помощью обертки `createCacheToken`
279
- */
280
- provide({
281
- provide: createCacheToken,
282
- scope: Scope.SINGLETON,
283
- useFactory: ({ createCache }) => {
284
- return createCache;
218
+ agent: {
219
+ token: HTTP_CLIENT_AGENT,
220
+ optional: true,
285
221
  },
286
- deps: {
287
- createCache: CREATE_CACHE_TOKEN,
222
+ disableCircuitBreaker: {
223
+ token: DISABLE_CIRCUIT_BREAKER,
224
+ optional: true,
288
225
  },
289
- }),
290
- provide({
291
- provide: API_CLIENT_PASS_HEADERS,
292
- multi: true,
293
- useValue: ['x-request-id'],
294
- }),
295
- ],
296
- })
297
- ], HttpClientModule);
226
+ },
227
+ }),
228
+ provide({
229
+ provide: HTTP_CLIENT,
230
+ useFactory: ({ factory }) => {
231
+ return factory({
232
+ name: 'http-client',
233
+ disableCache: true,
234
+ });
235
+ },
236
+ deps: {
237
+ factory: HTTP_CLIENT_FACTORY,
238
+ },
239
+ }),
240
+ provide({
241
+ provide: ENV_USED_TOKEN,
242
+ useValue: [
243
+ { key: 'HTTP_CLIENT_CACHE_DISABLED', optional: true, dehydrate: false },
244
+ { key: 'HTTP_CLIENT_CIRCUIT_BREAKER_DISABLED', optional: true, dehydrate: false },
245
+ ],
246
+ multi: true,
247
+ }),
248
+ /**
249
+ * хранилище для экземпляров @tinkoff/request
250
+ *
251
+ * требуется хранить экземпляры в единственном виде,
252
+ * т.к. многие плагины @tinkoff/request после инициализации имеют состояние
253
+ * (cache, circuit breaker), и не будут корректно работать на сервере,
254
+ * если создавать новые экземпляры на Scope.REQUEST
255
+ */
256
+ provide({
257
+ provide: 'tinkoffRequestRegistry',
258
+ scope: Scope.SINGLETON,
259
+ useFactory: () => new Map(),
260
+ }),
261
+ /**
262
+ * `CREATE_CACHE_TOKEN` имеет проверку, если токен используется провайдером,
263
+ * который имеет Scope.SINGLETON, то инстанс кэша сохраняется в общее хранилище,
264
+ * и доступен для очистки через `/papi/clear-cache`.
265
+ * Scope.REQUEST игнорируется, т.к. это верная утечка памяти,
266
+ * инстансов кэши было бы неограниченное количество.
267
+ *
268
+ * HTTP клиенты создаются со Scope.REQUEST, но инстансы @tinkoff/request
269
+ * (и соответственно кэшей) создаются только один раз, благодаря `tinkoffRequestRegistry`.
270
+ * это гарантирует отсутствие утечек памяти, поэтому мы обходим проверку
271
+ * на Scope.SINGLETON c помощью обертки `createCacheToken`
272
+ */
273
+ provide({
274
+ provide: createCacheToken,
275
+ scope: Scope.SINGLETON,
276
+ useFactory: ({ createCache }) => {
277
+ return createCache;
278
+ },
279
+ deps: {
280
+ createCache: CREATE_CACHE_TOKEN,
281
+ },
282
+ }),
283
+ provide({
284
+ provide: API_CLIENT_PASS_HEADERS,
285
+ multi: true,
286
+ useValue: ['x-request-id'],
287
+ }),
288
+ ],
289
+ })(class HttpClientModule {
290
+ });
298
291
 
299
292
  export { HttpClientModule, PapiService, fillHeaderIp, fillHeaders, formatError, httpClientFactory };
package/lib/index.js CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var tslib = require('tslib');
6
5
  var dippy = require('@tinkoff/dippy');
7
6
  var core = require('@tramvai/core');
8
7
  var tokensHttpClient = require('@tramvai/tokens-http-client');
@@ -191,122 +190,117 @@ class PapiService extends httpClient.BaseHttpClient {
191
190
  }
192
191
  }
193
192
 
194
- let PapiClientModule = class PapiClientModule {
195
- };
196
- PapiClientModule = tslib.__decorate([
197
- core.Module({
198
- providers: [
199
- core.provide({
200
- provide: tokensHttpClient.PAPI_SERVICE,
201
- scope: core.Scope.SINGLETON,
202
- useClass: PapiService,
203
- deps: {
204
- di: core.DI_TOKEN,
205
- papi: { token: tokensServer.SERVER_MODULE_PAPI_PUBLIC_ROUTE, optional: true, multi: true },
206
- },
207
- }),
208
- ],
209
- })
210
- ], PapiClientModule);
193
+ const PapiClientModule = /* @__PURE__ */ core.Module({
194
+ providers: [
195
+ core.provide({
196
+ provide: tokensHttpClient.PAPI_SERVICE,
197
+ scope: core.Scope.SINGLETON,
198
+ useClass: PapiService,
199
+ deps: {
200
+ di: core.DI_TOKEN,
201
+ papi: { token: tokensServer.SERVER_MODULE_PAPI_PUBLIC_ROUTE, optional: true, multi: true },
202
+ },
203
+ }),
204
+ ],
205
+ })(class PapiClientModule {
206
+ });
211
207
 
212
208
  const createCacheToken = dippy.createToken('httpClient createCache');
213
- exports.HttpClientModule = class HttpClientModule {
214
- };
215
- exports.HttpClientModule = tslib.__decorate([
216
- core.Module({
217
- imports: [PapiClientModule],
218
- providers: [
219
- core.provide({
220
- provide: tokensHttpClient.HTTP_CLIENT_FACTORY,
221
- useFactory: httpClientFactory,
222
- deps: {
223
- logger: tokensCommon.LOGGER_TOKEN,
224
- envManager: tokensCommon.ENV_MANAGER_TOKEN,
225
- appInfo: core.APP_INFO_TOKEN,
226
- createCache: createCacheToken,
227
- tinkoffRequestRegistry: 'tinkoffRequestRegistry',
228
- requestManager: {
229
- token: tokensCommon.REQUEST_MANAGER_TOKEN,
230
- optional: true,
231
- },
232
- headersList: {
233
- token: tokensHttpClient.API_CLIENT_PASS_HEADERS,
234
- optional: true,
235
- },
236
- agent: {
237
- token: tokensHttpClient.HTTP_CLIENT_AGENT,
238
- optional: true,
239
- },
240
- disableCircuitBreaker: {
241
- token: tokensHttpClient.DISABLE_CIRCUIT_BREAKER,
242
- optional: true,
243
- },
244
- },
245
- }),
246
- core.provide({
247
- provide: tokensHttpClient.HTTP_CLIENT,
248
- useFactory: ({ factory }) => {
249
- return factory({
250
- name: 'http-client',
251
- disableCache: true,
252
- });
209
+ const HttpClientModule = /* @__PURE__ */ core.Module({
210
+ imports: [PapiClientModule],
211
+ providers: [
212
+ core.provide({
213
+ provide: tokensHttpClient.HTTP_CLIENT_FACTORY,
214
+ useFactory: httpClientFactory,
215
+ deps: {
216
+ logger: tokensCommon.LOGGER_TOKEN,
217
+ envManager: tokensCommon.ENV_MANAGER_TOKEN,
218
+ appInfo: core.APP_INFO_TOKEN,
219
+ createCache: createCacheToken,
220
+ tinkoffRequestRegistry: 'tinkoffRequestRegistry',
221
+ requestManager: {
222
+ token: tokensCommon.REQUEST_MANAGER_TOKEN,
223
+ optional: true,
253
224
  },
254
- deps: {
255
- factory: tokensHttpClient.HTTP_CLIENT_FACTORY,
225
+ headersList: {
226
+ token: tokensHttpClient.API_CLIENT_PASS_HEADERS,
227
+ optional: true,
256
228
  },
257
- }),
258
- core.provide({
259
- provide: tokensCommon.ENV_USED_TOKEN,
260
- useValue: [
261
- { key: 'HTTP_CLIENT_CACHE_DISABLED', optional: true, dehydrate: false },
262
- { key: 'HTTP_CLIENT_CIRCUIT_BREAKER_DISABLED', optional: true, dehydrate: false },
263
- ],
264
- multi: true,
265
- }),
266
- /**
267
- * хранилище для экземпляров @tinkoff/request
268
- *
269
- * требуется хранить экземпляры в единственном виде,
270
- * т.к. многие плагины @tinkoff/request после инициализации имеют состояние
271
- * (cache, circuit breaker), и не будут корректно работать на сервере,
272
- * если создавать новые экземпляры на Scope.REQUEST
273
- */
274
- core.provide({
275
- provide: 'tinkoffRequestRegistry',
276
- scope: core.Scope.SINGLETON,
277
- useFactory: () => new Map(),
278
- }),
279
- /**
280
- * `CREATE_CACHE_TOKEN` имеет проверку, если токен используется провайдером,
281
- * который имеет Scope.SINGLETON, то инстанс кэша сохраняется в общее хранилище,
282
- * и доступен для очистки через `/papi/clear-cache`.
283
- * Scope.REQUEST игнорируется, т.к. это верная утечка памяти,
284
- * инстансов кэши было бы неограниченное количество.
285
- *
286
- * HTTP клиенты создаются со Scope.REQUEST, но инстансы @tinkoff/request
287
- * (и соответственно кэшей) создаются только один раз, благодаря `tinkoffRequestRegistry`.
288
- * это гарантирует отсутствие утечек памяти, поэтому мы обходим проверку
289
- * на Scope.SINGLETON c помощью обертки `createCacheToken`
290
- */
291
- core.provide({
292
- provide: createCacheToken,
293
- scope: core.Scope.SINGLETON,
294
- useFactory: ({ createCache }) => {
295
- return createCache;
229
+ agent: {
230
+ token: tokensHttpClient.HTTP_CLIENT_AGENT,
231
+ optional: true,
296
232
  },
297
- deps: {
298
- createCache: tokensCommon.CREATE_CACHE_TOKEN,
233
+ disableCircuitBreaker: {
234
+ token: tokensHttpClient.DISABLE_CIRCUIT_BREAKER,
235
+ optional: true,
299
236
  },
300
- }),
301
- core.provide({
302
- provide: tokensHttpClient.API_CLIENT_PASS_HEADERS,
303
- multi: true,
304
- useValue: ['x-request-id'],
305
- }),
306
- ],
307
- })
308
- ], exports.HttpClientModule);
237
+ },
238
+ }),
239
+ core.provide({
240
+ provide: tokensHttpClient.HTTP_CLIENT,
241
+ useFactory: ({ factory }) => {
242
+ return factory({
243
+ name: 'http-client',
244
+ disableCache: true,
245
+ });
246
+ },
247
+ deps: {
248
+ factory: tokensHttpClient.HTTP_CLIENT_FACTORY,
249
+ },
250
+ }),
251
+ core.provide({
252
+ provide: tokensCommon.ENV_USED_TOKEN,
253
+ useValue: [
254
+ { key: 'HTTP_CLIENT_CACHE_DISABLED', optional: true, dehydrate: false },
255
+ { key: 'HTTP_CLIENT_CIRCUIT_BREAKER_DISABLED', optional: true, dehydrate: false },
256
+ ],
257
+ multi: true,
258
+ }),
259
+ /**
260
+ * хранилище для экземпляров @tinkoff/request
261
+ *
262
+ * требуется хранить экземпляры в единственном виде,
263
+ * т.к. многие плагины @tinkoff/request после инициализации имеют состояние
264
+ * (cache, circuit breaker), и не будут корректно работать на сервере,
265
+ * если создавать новые экземпляры на Scope.REQUEST
266
+ */
267
+ core.provide({
268
+ provide: 'tinkoffRequestRegistry',
269
+ scope: core.Scope.SINGLETON,
270
+ useFactory: () => new Map(),
271
+ }),
272
+ /**
273
+ * `CREATE_CACHE_TOKEN` имеет проверку, если токен используется провайдером,
274
+ * который имеет Scope.SINGLETON, то инстанс кэша сохраняется в общее хранилище,
275
+ * и доступен для очистки через `/papi/clear-cache`.
276
+ * Scope.REQUEST игнорируется, т.к. это верная утечка памяти,
277
+ * инстансов кэши было бы неограниченное количество.
278
+ *
279
+ * HTTP клиенты создаются со Scope.REQUEST, но инстансы @tinkoff/request
280
+ * (и соответственно кэшей) создаются только один раз, благодаря `tinkoffRequestRegistry`.
281
+ * это гарантирует отсутствие утечек памяти, поэтому мы обходим проверку
282
+ * на Scope.SINGLETON c помощью обертки `createCacheToken`
283
+ */
284
+ core.provide({
285
+ provide: createCacheToken,
286
+ scope: core.Scope.SINGLETON,
287
+ useFactory: ({ createCache }) => {
288
+ return createCache;
289
+ },
290
+ deps: {
291
+ createCache: tokensCommon.CREATE_CACHE_TOKEN,
292
+ },
293
+ }),
294
+ core.provide({
295
+ provide: tokensHttpClient.API_CLIENT_PASS_HEADERS,
296
+ multi: true,
297
+ useValue: ['x-request-id'],
298
+ }),
299
+ ],
300
+ })(class HttpClientModule {
301
+ });
309
302
 
303
+ exports.HttpClientModule = HttpClientModule;
310
304
  exports.PapiService = PapiService;
311
305
  exports.fillHeaderIp = fillHeaderIp;
312
306
  exports.fillHeaders = fillHeaders;
@@ -1,4 +1,5 @@
1
1
  import { PapiService } from './papi/papiService.browser';
2
2
  export { PapiService };
3
- export declare class PapiClientModule {
4
- }
3
+ export declare const PapiClientModule: import("@tramvai/core").ModuleType<{
4
+ new (): {};
5
+ }>;
@@ -1,4 +1,5 @@
1
1
  import { PapiService } from './papi/papiService';
2
2
  export { PapiService };
3
- export declare class PapiClientModule {
4
- }
3
+ export declare const PapiClientModule: import("@tramvai/core").ModuleType<{
4
+ new (): {};
5
+ }>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tramvai/module-http-client",
3
- "version": "1.94.1",
3
+ "version": "1.94.2",
4
4
  "initialVersion": "0.58.99",
5
5
  "description": "",
6
6
  "main": "lib/index.js",
@@ -25,21 +25,21 @@
25
25
  },
26
26
  "dependencies": {
27
27
  "@tramvai/http-client": "0.1.25",
28
- "@tramvai/tinkoff-request-http-client-adapter": "0.8.327",
29
- "@tramvai/tokens-http-client": "1.94.1",
30
- "@tramvai/tokens-common": "1.94.1",
31
- "@tramvai/tokens-server": "1.94.1"
28
+ "@tramvai/tinkoff-request-http-client-adapter": "0.8.328",
29
+ "@tramvai/tokens-http-client": "1.94.2",
30
+ "@tramvai/tokens-common": "1.94.2",
31
+ "@tramvai/tokens-server": "1.94.2"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@tinkoff/request-core": "^0.8.9"
35
35
  },
36
36
  "peerDependencies": {
37
37
  "@tinkoff/utils": "^2.1.2",
38
- "@tramvai/core": "1.94.1",
39
- "@tramvai/module-common": "1.94.1",
40
- "@tramvai/papi": "1.94.1",
41
- "@tramvai/test-helpers": "1.94.1",
42
- "@tramvai/test-mocks": "1.94.1",
38
+ "@tramvai/core": "1.94.2",
39
+ "@tramvai/module-common": "1.94.2",
40
+ "@tramvai/papi": "1.94.2",
41
+ "@tramvai/test-helpers": "1.94.2",
42
+ "@tramvai/test-mocks": "1.94.2",
43
43
  "@tinkoff/dippy": "0.7.39",
44
44
  "node-fetch": "^2.6.1",
45
45
  "tslib": "^2.0.3"