com.jimuwd.xian.registry-proxy 1.0.120 → 1.0.123
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/dist/index.d.ts +1 -4
- package/dist/index.js +19 -30
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { Server as HttpServer } from 'node:http';
|
|
3
3
|
import { Server as HttpsServer } from 'node:https';
|
|
4
|
-
export declare function startProxyServer(proxyConfigPath?: string, localYarnConfigPath?: string, globalYarnConfigPath?: string, port?: number): Promise<
|
|
5
|
-
serverIpv6: HttpServer | HttpsServer;
|
|
6
|
-
serverIpv4: HttpServer | HttpsServer;
|
|
7
|
-
}>;
|
|
4
|
+
export declare function startProxyServer(proxyConfigPath?: string, localYarnConfigPath?: string, globalYarnConfigPath?: string, port?: number): Promise<HttpServer | HttpsServer>;
|
package/dist/index.js
CHANGED
|
@@ -299,7 +299,7 @@ function getDownstreamClientIp(req) {
|
|
|
299
299
|
// 直接连接时,取 socket.remoteAddress
|
|
300
300
|
return req.socket.remoteAddress;
|
|
301
301
|
}
|
|
302
|
-
//
|
|
302
|
+
// deprecated 出于安全考虑只监听::1地址,废弃本注释:同时启动ipv6,ipv4监听,比如当客户端访问http://localhost:port时,无论客户端DNS解析到IPV4-127.0.0.1还是IPV6-::1地址,咱server都能轻松应对!
|
|
303
303
|
export async function startProxyServer(proxyConfigPath, localYarnConfigPath, globalYarnConfigPath, port = 0) {
|
|
304
304
|
const proxyInfo = await loadProxyInfo(proxyConfigPath, localYarnConfigPath, globalYarnConfigPath);
|
|
305
305
|
const registryInfos = proxyInfo.registries;
|
|
@@ -307,8 +307,6 @@ export async function startProxyServer(proxyConfigPath, localYarnConfigPath, glo
|
|
|
307
307
|
logger.info('Active registries:', registryInfos.map(r => r.normalizedRegistryUrl));
|
|
308
308
|
logger.info('Proxy base path:', basePathPrefixedWithSlash);
|
|
309
309
|
logger.info('HTTPS:', !!proxyInfo.https);
|
|
310
|
-
// the real port server is listening on if configured port is empty or 0
|
|
311
|
-
let realPort = port;
|
|
312
310
|
const requestHandler = async (reqFromDownstreamClient, resToDownstreamClient) => {
|
|
313
311
|
const downstreamUserAgent = reqFromDownstreamClient.headers["user-agent"]; // "curl/x.x.x"
|
|
314
312
|
const downstreamIp = getDownstreamClientIp(reqFromDownstreamClient);
|
|
@@ -354,15 +352,14 @@ export async function startProxyServer(proxyConfigPath, localYarnConfigPath, glo
|
|
|
354
352
|
}
|
|
355
353
|
// 统一回写响应
|
|
356
354
|
if (successfulResponseFromUpstream) {
|
|
357
|
-
await writeResponseToDownstreamClient(targetRegistry, targetUrl, resToDownstreamClient, successfulResponseFromUpstream, reqFromDownstreamClient, proxyInfo,
|
|
355
|
+
await writeResponseToDownstreamClient(targetRegistry, targetUrl, resToDownstreamClient, successfulResponseFromUpstream, reqFromDownstreamClient, proxyInfo, port, registryInfos);
|
|
358
356
|
}
|
|
359
357
|
else {
|
|
360
358
|
resToDownstreamClient.writeHead(404).end('All upstream registries failed');
|
|
361
359
|
}
|
|
362
360
|
};
|
|
363
|
-
//
|
|
364
|
-
let
|
|
365
|
-
let serverIpv4;
|
|
361
|
+
// deprecated 废弃本注释:需要同时启动ipv6,ipv4监听,比如当客户端访问http://localhost:port时,无论客户端DNS解析到IPV4-127.0.0.1还是IPV6-::1地址,咱server都能轻松应对!
|
|
362
|
+
let server;
|
|
366
363
|
if (proxyInfo.https) {
|
|
367
364
|
const { key, cert } = proxyInfo.https;
|
|
368
365
|
const keyPath = resolvePath(key);
|
|
@@ -379,28 +376,24 @@ export async function startProxyServer(proxyConfigPath, localYarnConfigPath, glo
|
|
|
379
376
|
key: readFileSync(keyPath),
|
|
380
377
|
cert: readFileSync(certPath),
|
|
381
378
|
};
|
|
382
|
-
|
|
383
|
-
serverIpv4 = createHttpsServer(httpsOptions, requestHandler);
|
|
379
|
+
server = createHttpsServer(httpsOptions, requestHandler);
|
|
384
380
|
logger.info("Proxy server's maxSockets is", https.globalAgent.maxSockets);
|
|
385
381
|
}
|
|
386
382
|
else {
|
|
387
|
-
|
|
388
|
-
serverIpv4 = createServer(requestHandler);
|
|
383
|
+
server = createServer(requestHandler);
|
|
389
384
|
logger.info("Proxy server's maxSockets is", http.globalAgent.maxSockets);
|
|
390
385
|
}
|
|
391
386
|
// server参数暂时写死
|
|
392
387
|
const serverMaxConnections = 10000;
|
|
393
388
|
const serverTimeoutMs = 60000;
|
|
394
|
-
logger.info(`Proxy server's initial maxConnections is ${
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
serverIpv6.timeout = serverTimeoutMs;
|
|
399
|
-
serverIpv4.timeout = serverTimeoutMs;
|
|
389
|
+
logger.info(`Proxy server's initial maxConnections is ${server.maxConnections}, adjusting to ${serverMaxConnections}`);
|
|
390
|
+
server.maxConnections = serverMaxConnections;
|
|
391
|
+
logger.info(`Proxy server's initial timeout is ${server.timeout}ms, adjusting to ${serverTimeoutMs}ms`);
|
|
392
|
+
server.timeout = serverTimeoutMs;
|
|
400
393
|
const promisedServer = new Promise((resolve, reject) => {
|
|
401
394
|
const errHandler = (err) => {
|
|
402
395
|
if (err.code === 'EADDRINUSE') {
|
|
403
|
-
logger.error(`Port ${
|
|
396
|
+
logger.error(`Port ${port} is in use, please specify a different port or free it.`, err);
|
|
404
397
|
process.exit(1);
|
|
405
398
|
}
|
|
406
399
|
logger.error('Server error:', err);
|
|
@@ -411,21 +404,17 @@ export async function startProxyServer(proxyConfigPath, localYarnConfigPath, glo
|
|
|
411
404
|
socket.setTimeout(60000);
|
|
412
405
|
socket.setKeepAlive(true, 30000);
|
|
413
406
|
};
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
const addressInfo = serverIpv6.address();
|
|
422
|
-
// 回写上层局部变量
|
|
423
|
-
realPort = addressInfo.port;
|
|
424
|
-
//logger.info(`前面已经监听了ipv6端口 ${addressInfo.address} ${addressInfo.port},追加监听Ipv4同端口号 0.0.0.0:${addressInfo.port}`);
|
|
407
|
+
server.on('error', errHandler /*this handler will call 'reject'*/);
|
|
408
|
+
server.on('connection', connectionHandler);
|
|
409
|
+
// 为了代理服务器的安全性,暂时只监听本机ipv6地址【::1】,不能对本机之外暴露本代理服务地址避免造成安全隐患
|
|
410
|
+
const listenOptions = { port, host: '::1', ipv6Only: true };
|
|
411
|
+
server.listen(listenOptions, () => {
|
|
412
|
+
const addressInfo = server.address();
|
|
413
|
+
port = addressInfo.port; // 回写上层局部变量
|
|
425
414
|
const portFile = join(process.env.PROJECT_ROOT || process.cwd(), '.registry-proxy-port');
|
|
426
415
|
writeFile(portFile, addressInfo.port.toString()).catch(e => logger.error(`Failed to write port file: ${portFile}`, e));
|
|
427
416
|
logger.info(`Proxy server running on ${proxyInfo.https ? 'https' : 'http'}://localhost:${addressInfo.port}${basePathPrefixedWithSlash === '/' ? '' : basePathPrefixedWithSlash}`);
|
|
428
|
-
resolve(
|
|
417
|
+
resolve(server);
|
|
429
418
|
});
|
|
430
419
|
});
|
|
431
420
|
return promisedServer;
|