Working behind proxy
See original GitHub issueIs your feature request related to a problem? Please describe.
We need our continuous integration to upload the openapi yaml to the Redocly API registry, but we always get time out, we think the reason for this timeout is that we are behind an enterprise proxy.
FetchError: request to https://api.redoc.ly/registry failed, reason: connect ETIMEDOUT 34.238.30.35:44 at ClientRequest.<anonymous> (C:\ (...) \AppData\Roaming\npm\node_modules\@redocly\openapi-cli\node_modules\node-fetch\lib\index.js:1491:11) at ClientRequest.emit (node:events:390:28) at TLSSocket.socketErrorListener (node:_http_client:447:9) at TLSSocket.emit (node:events:390:28) at emitErrorNT (node:internal/streams/destroy:157:8) at emitErrorCloseNT (node:internal/streams/destroy:122:3) at processTicksAndRejections (node:internal/process/task_queues:83:21) { type: 'system', errno: 'ETIMEDOUT', code: 'ETIMEDOUT' }
Authorization failed. Please check if you entered a valid API key.
Describe the solution you’d like
We would like openapi cli working behind a proxy server.
Describe alternatives you’ve considered
We did a quick modification to your code in registry-api.ts to handle the proxy connection:
const HttpsProxyAgent = require('https-proxy-agent');
private async request(path = '', options: RequestInit = {}, region?: Region) {
const headers = Object.assign({}, options.headers || {}, { 'x-redocly-cli-version': version });
if (!headers.hasOwnProperty('authorization')) { throw new Error('Unauthorized'); }
const proxyAgent = new HttpsProxyAgent('XXX:XXX/');
const response = await fetch(`${this.getBaseUrl(region)}${path}`, Object.assign({}, options, { headers }, { agent: proxyAgent}) );
if (response.status === 401) { throw new Error('Unauthorized'); }
if (response.status === 404) {
const body: RegistryApiTypes.NotFoundProblemResponse = await response.json();
throw new Error(body.code);
}
return response;
}
(see: https://www.scrapingbee.com/blog/proxy-node-fetch/)
This seems to work for the login command but still timesout for the push command:
FetchError: request to (...) host failed, reason: connect ETIMEDOUT 52.216.108.107:443 at ClientRequest.<anonymous> ( (...) \openapi-cli\node_modules\node-fetch\lib\index.js:1491:11) at ClientRequest.emit (node:events:390:28) at ClientRequest.emit (node:domain:475:12) at TLSSocket.socketErrorListener (node:_http_client:447:9) at TLSSocket.emit (node:events:390:28) at TLSSocket.emit (node:domain:475:12) at emitErrorNT (node:internal/streams/destroy:157:8) at emitErrorCloseNT (node:internal/streams/destroy:122:3) at processTicksAndRejections (node:internal/process/task_queues:83:21) { type: 'system', errno: 'ETIMEDOUT', code: 'ETIMEDOUT' }
Additional context
I don’t know if it matters but we do have an enterprise license for Redocly.
Issue Analytics
- State:
- Created 2 years ago
- Comments:9 (5 by maintainers)
Hello,
just an update on this. I managed to successfully push the files after modifying your code in push.ts.
Hope this helps.
Thank you
We just use the REDOCLY_PROXY environment variable and it works fine.