Skip to content

Commit 3769bb1

Browse files
authored
Merge pull request #70 from teacoder-team/dev
feat: add https-proxy-agent support for proxy configuration
2 parents b4299dd + d9b335a commit 3769bb1

6 files changed

Lines changed: 737 additions & 704 deletions

File tree

Lines changed: 12 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,31 @@
11
import type { FactoryProvider, ModuleMetadata } from '@nestjs/common';
2+
import type { HttpsProxyAgent } from 'https-proxy-agent';
23
export declare const YookassaOptionsSymbol: unique symbol;
34
/**
4-
* Тип, представляющий параметры для настройки YooKassa.
5+
* Настройки модуля YooKassa.
56
*/
67
export type YookassaModuleOptions = {
78
/**
8-
* Идентификатор магазина в YooKassa.
9+
* Идентификатор магазина YooKassa.
910
*/
1011
shopId: string;
1112
/**
12-
* Ключ API для аутентификации в YooKassa.
13+
* Секретный ключ API.
1314
*/
1415
apiKey: string;
1516
/**
16-
* Настройки HTTP-прокси для отправки запросов.
17+
* Агент для отправки HTTPS-запросов через прокси.
1718
*
18-
* Используется в случаях, когда запросы к YooKassa должны идти
19-
* через российский IP — например, если сервер находится за границей.
19+
* Обычно HttpsProxyAgent, созданный так:
2020
*
21-
* Пример простого подключения:
22-
* {
23-
* host: '192.168.1.10',
24-
* port: 8888,
25-
* protocol: 'http'
26-
* }
21+
* new HttpsProxyAgent("http://IP:PORT")
22+
*
23+
* Если передан agent — axios прекратит использовать встроенный proxy-режим,
24+
* и весь трафик к YooKassa *гарантированно пойдёт через прокси*.
2725
*/
28-
proxy?: {
29-
/**
30-
* Хост или IPv4-адрес прокси-сервера.
31-
* Например: "91.218.114.206"
32-
*/
33-
host: string;
34-
/**
35-
* Порт, на котором работает прокси.
36-
* Для tinyproxy обычно 8888.
37-
*/
38-
port: number;
39-
/**
40-
* Протокол для подключения к прокси.
41-
* Почти всегда "http", т.к. tinyproxy не использует HTTPS.
42-
*/
43-
protocol?: 'http' | 'https';
44-
/**
45-
* Данные для авторизации на прокси (необязательно).
46-
*
47-
* Используется ТОЛЬКО если прокси защищён логином и паролем.
48-
* В tinyproxy по умолчанию не нужно.
49-
*
50-
* Пример:
51-
* auth: { username: "user", password: "pass" }
52-
*/
53-
auth?: {
54-
username: string;
55-
password: string;
56-
};
57-
};
26+
agent?: HttpsProxyAgent<any>;
5827
};
5928
/**
60-
* Тип для асинхронной настройки YooKassa.
29+
* Асинхронная конфигурация модуля.
6130
*/
6231
export type YookassaModuleAsyncOptions = Pick<ModuleMetadata, 'imports'> & Pick<FactoryProvider<YookassaModuleOptions>, 'useFactory' | 'inject'>;

packages/nestjs-yookassa/dist/core/http/yookassa.http-client.js

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ const common_1 = require("@nestjs/common");
2222
const interfaces_1 = require("../../common/interfaces");
2323
let YookassaHttpClient = class YookassaHttpClient {
2424
constructor(config, httpService) {
25-
var _a;
2625
this.config = config;
2726
this.httpService = httpService;
2827
const client = this.httpService.axiosRef;
@@ -33,14 +32,11 @@ let YookassaHttpClient = class YookassaHttpClient {
3332
password: this.config.apiKey
3433
};
3534
client.defaults.headers.common['Content-Type'] = 'application/json';
36-
if (this.config.proxy) {
37-
client.defaults.proxy = {
38-
host: this.config.proxy.host,
39-
port: this.config.proxy.port,
40-
protocol: (_a = this.config.proxy.protocol) !== null && _a !== void 0 ? _a : 'http',
41-
auth: this.config.proxy.auth
42-
};
43-
console.log(`[YooKassa] Proxy enabled → ${this.config.proxy.host}:${this.config.proxy.port}`);
35+
client.defaults.proxy = false;
36+
if (this.config.agent) {
37+
client.defaults.httpAgent = this.config.agent;
38+
client.defaults.httpsAgent = this.config.agent;
39+
console.log(`[YooKassa] Proxy agent enabled`);
4440
}
4541
}
4642
async request(options) {

packages/nestjs-yookassa/package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "nestjs-yookassa",
3-
"version": "2.1.1",
3+
"version": "2.1.2",
44
"description": "A NestJS library for integrating with YooKassa API",
55
"keywords": [
66
"nest",
@@ -40,7 +40,8 @@
4040
"dependencies": {
4141
"@nestjs/axios": "^4.0.1",
4242
"axios": "^1.11.0",
43-
"rxjs": "^7.8.2"
43+
"rxjs": "^7.8.2",
44+
"https-proxy-agent": "^7.0.6"
4445
},
4546
"husky": {
4647
"hooks": {
Lines changed: 13 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,70 +1,37 @@
11
import type { FactoryProvider, ModuleMetadata } from '@nestjs/common'
2+
import type { HttpsProxyAgent } from 'https-proxy-agent'
23

34
export const YookassaOptionsSymbol = Symbol('YookassaOptionsSymbol')
45

56
/**
6-
* Тип, представляющий параметры для настройки YooKassa.
7+
* Настройки модуля YooKassa.
78
*/
89
export type YookassaModuleOptions = {
910
/**
10-
* Идентификатор магазина в YooKassa.
11+
* Идентификатор магазина YooKassa.
1112
*/
1213
shopId: string
14+
1315
/**
14-
* Ключ API для аутентификации в YooKassa.
16+
* Секретный ключ API.
1517
*/
1618
apiKey: string
1719

1820
/**
19-
* Настройки HTTP-прокси для отправки запросов.
21+
* Агент для отправки HTTPS-запросов через прокси.
22+
*
23+
* Обычно HttpsProxyAgent, созданный так:
2024
*
21-
* Используется в случаях, когда запросы к YooKassa должны идти
22-
* через российский IP — например, если сервер находится за границей.
25+
* new HttpsProxyAgent("http://IP:PORT")
2326
*
24-
* Пример простого подключения:
25-
* {
26-
* host: '192.168.1.10',
27-
* port: 8888,
28-
* protocol: 'http'
29-
* }
27+
* Если передан agent — axios прекратит использовать встроенный proxy-режим,
28+
* и весь трафик к YooKassa *гарантированно пойдёт через прокси*.
3029
*/
31-
proxy?: {
32-
/**
33-
* Хост или IPv4-адрес прокси-сервера.
34-
* Например: "91.218.114.206"
35-
*/
36-
host: string
37-
38-
/**
39-
* Порт, на котором работает прокси.
40-
* Для tinyproxy обычно 8888.
41-
*/
42-
port: number
43-
44-
/**
45-
* Протокол для подключения к прокси.
46-
* Почти всегда "http", т.к. tinyproxy не использует HTTPS.
47-
*/
48-
protocol?: 'http' | 'https'
49-
50-
/**
51-
* Данные для авторизации на прокси (необязательно).
52-
*
53-
* Используется ТОЛЬКО если прокси защищён логином и паролем.
54-
* В tinyproxy по умолчанию не нужно.
55-
*
56-
* Пример:
57-
* auth: { username: "user", password: "pass" }
58-
*/
59-
auth?: {
60-
username: string
61-
password: string
62-
}
63-
}
30+
agent?: HttpsProxyAgent<any>
6431
}
6532

6633
/**
67-
* Тип для асинхронной настройки YooKassa.
34+
* Асинхронная конфигурация модуля.
6835
*/
6936
export type YookassaModuleAsyncOptions = Pick<ModuleMetadata, 'imports'> &
7037
Pick<FactoryProvider<YookassaModuleOptions>, 'useFactory' | 'inject'>

packages/nestjs-yookassa/src/core/http/yookassa.http-client.ts

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,23 +21,21 @@ export class YookassaHttpClient {
2121

2222
client.defaults.baseURL = YOOKASSA_API_URL
2323
client.defaults.timeout = 15000
24+
2425
client.defaults.auth = {
2526
username: this.config.shopId,
2627
password: this.config.apiKey
2728
}
2829

2930
client.defaults.headers.common['Content-Type'] = 'application/json'
3031

31-
if (this.config.proxy) {
32-
client.defaults.proxy = {
33-
host: this.config.proxy.host,
34-
port: this.config.proxy.port,
35-
protocol: this.config.proxy.protocol ?? 'http',
36-
auth: this.config.proxy.auth
37-
}
38-
console.log(
39-
`[YooKassa] Proxy enabled → ${this.config.proxy.host}:${this.config.proxy.port}`
40-
)
32+
client.defaults.proxy = false
33+
34+
if (this.config.agent) {
35+
client.defaults.httpAgent = this.config.agent
36+
client.defaults.httpsAgent = this.config.agent
37+
38+
console.log(`[YooKassa] Proxy agent enabled`)
4139
}
4240
}
4341

0 commit comments

Comments
 (0)