unplugin-https-reverse-proxy 0.0.23 → 0.0.24

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/nuxt.cjs CHANGED
@@ -53,8 +53,8 @@ var import_kit = require("@nuxt/kit");
53
53
  var import_unplugin2 = require("unplugin");
54
54
 
55
55
  // src/index.ts
56
- var import_node_process4 = __toESM(require("process"), 1);
57
- var import_node_fs2 = require("fs");
56
+ var import_node_process5 = __toESM(require("process"), 1);
57
+ var import_node_fs3 = require("fs");
58
58
  var import_unplugin = require("unplugin");
59
59
  var import_picocolors = __toESM(require("picocolors"), 1);
60
60
 
@@ -65,15 +65,6 @@ var import_consola = require("consola");
65
65
  var consola = (0, import_consola.createConsola)({
66
66
  level: 3
67
67
  }).withTag("reverse-proxy");
68
- function once(fn) {
69
- let called = false;
70
- return (...args) => {
71
- if (called)
72
- return;
73
- called = true;
74
- return fn(...args);
75
- };
76
- }
77
68
  function isAdmin() {
78
69
  if (import_node_process.default.platform === "win32") {
79
70
  try {
@@ -89,20 +80,64 @@ function isAdmin() {
89
80
 
90
81
  // src/caddy/index.ts
91
82
  var import_node_os = require("os");
92
- var import_node_process3 = __toESM(require("process"), 1);
93
- var import_node_fs = require("fs");
94
- var import_node_child_process2 = require("child_process");
83
+ var import_node_process4 = __toESM(require("process"), 1);
84
+ var import_node_fs2 = require("fs");
85
+ var import_node_child_process3 = require("child_process");
95
86
  var import_got_cjs = require("got-cjs");
96
87
  var import_http_proxy_agent = require("http-proxy-agent");
97
88
  var import_https_proxy_agent = require("https-proxy-agent");
98
- var import_hosts_so_easy = __toESM(require("hosts-so-easy"), 1);
99
89
  var import_kill_port = __toESM(require("kill-port"), 1);
100
90
 
91
+ // src/host/index.ts
92
+ var import_node_process2 = __toESM(require("process"), 1);
93
+ var import_node_child_process2 = require("child_process");
94
+ var import_node_fs = require("fs");
95
+ var import_hosts_so_easy = __toESM(require("hosts-so-easy"), 1);
96
+ var Hosts = import_hosts_so_easy.default.default || import_hosts_so_easy.default;
97
+ var hostInstance = new Hosts({
98
+ debounceTime: 50,
99
+ hostsFile: getPathOfSystemHostsPath()
100
+ });
101
+ function getPathOfSystemHostsPath() {
102
+ return import_node_process2.default.platform === "win32" ? `${import_node_process2.default.env.windir || "C:\\WINDOWS"}\\system32\\drivers\\etc\\hosts` : "/etc/hosts";
103
+ }
104
+ async function syncHost() {
105
+ return new Promise((resolve, reject) => {
106
+ (0, import_node_child_process2.exec)(
107
+ import_node_process2.default.platform === "win32" ? "ipconfig /flushdns" : "sudo -E killall -HUP mDNSResponder",
108
+ (error, stdout, stderr) => {
109
+ if (error) {
110
+ console.error(`exec error: ${error}`);
111
+ return resolve(false);
112
+ }
113
+ return resolve(true);
114
+ }
115
+ );
116
+ });
117
+ }
118
+ async function addHost(ip, host) {
119
+ if (import_node_process2.default.platform !== "win32")
120
+ (0, import_node_fs.chmodSync)(getPathOfSystemHostsPath(), 511);
121
+ hostInstance.add("127.0.0.1", "localhost");
122
+ hostInstance.add(ip, host);
123
+ await hostInstance.updateFinish();
124
+ return await syncHost();
125
+ }
126
+ async function removeHost(ip, host) {
127
+ if (import_node_process2.default.platform !== "win32")
128
+ (0, import_node_fs.chmodSync)(getPathOfSystemHostsPath(), 511);
129
+ hostInstance.remove(ip, host);
130
+ if (ip === "localhost")
131
+ hostInstance.remove("127.0.0.1", host);
132
+ await hostInstance.updateFinish();
133
+ return await syncHost();
134
+ }
135
+
101
136
  // src/caddy/constants.ts
102
137
  var import_node_path = require("path");
103
- var import_node_process2 = __toESM(require("process"), 1);
104
- var TEMP_DIR = import_node_process2.default.env.TEMP || import_node_process2.default.env.TMPDIR || "/tmp";
105
- var caddyPath = (0, import_node_path.join)(TEMP_DIR, `caddy${import_node_process2.default.platform === "win32" ? ".exe" : ""}`);
138
+ var import_node_process3 = __toESM(require("process"), 1);
139
+ var TEMP_DIR = import_node_process3.default.env.TEMP || import_node_process3.default.env.TMPDIR || "/tmp";
140
+ var caddyPath = (0, import_node_path.join)(TEMP_DIR, `caddy${import_node_process3.default.platform === "win32" ? ".exe" : ""}`);
106
141
  var caddyFilePath = (0, import_node_path.join)(TEMP_DIR, "CADDYFILE");
107
142
  var supportList = [
108
143
  {
@@ -271,23 +306,22 @@ function logProgressOver() {
271
306
  }
272
307
 
273
308
  // src/caddy/index.ts
274
- var Hosts = import_hosts_so_easy.default.default || import_hosts_so_easy.default;
275
309
  async function download() {
276
310
  if (await testCaddy())
277
311
  return caddyPath;
278
312
  return new Promise((resolve, reject) => {
279
- const file = (0, import_node_fs.createWriteStream)(caddyPath);
313
+ const file = (0, import_node_fs2.createWriteStream)(caddyPath);
280
314
  let _platform = (0, import_node_os.platform)().toString();
281
315
  _platform === "win32" && (_platform = "windows");
282
- let _arch = import_node_process3.default.arch.toString();
316
+ let _arch = import_node_process4.default.arch.toString();
283
317
  _arch === "x64" && (_arch = "amd64");
284
318
  const support = supportList.find((item) => item.platform === _platform && item.arch === _arch);
285
319
  if (!support)
286
320
  return reject(new Error("not support"));
287
321
  const dowmloadLink = `https://caddyserver.com/api/download?os=${support.platform}&arch=${support.arch}`;
288
- (0, import_node_fs.existsSync)(caddyPath) && (0, import_node_fs.unlinkSync)(caddyPath);
289
- const httpProxy = import_node_process3.default.env.HTTP_PROXY || import_node_process3.default.env.http_proxy;
290
- const httpsProxy = import_node_process3.default.env.HTTPS_PROXY || import_node_process3.default.env.https_proxy;
322
+ (0, import_node_fs2.existsSync)(caddyPath) && (0, import_node_fs2.unlinkSync)(caddyPath);
323
+ const httpProxy = import_node_process4.default.env.HTTP_PROXY || import_node_process4.default.env.http_proxy;
324
+ const httpsProxy = import_node_process4.default.env.HTTPS_PROXY || import_node_process4.default.env.https_proxy;
291
325
  const httpAgent = httpProxy ? new import_http_proxy_agent.HttpProxyAgent(httpProxy) : void 0;
292
326
  const httpsAgent = httpsProxy ? new import_https_proxy_agent.HttpsProxyAgent(httpsProxy) : void 0;
293
327
  import_got_cjs.got.stream(dowmloadLink, {
@@ -299,9 +333,9 @@ async function download() {
299
333
  logProgress(progress.percent);
300
334
  }).pipe(file).on("finish", () => {
301
335
  logProgressOver();
302
- if (import_node_process3.default.platform === "win32")
336
+ if (import_node_process4.default.platform === "win32")
303
337
  return resolve(caddyPath);
304
- (0, import_node_fs.chmodSync)(caddyPath, 493);
338
+ (0, import_node_fs2.chmodSync)(caddyPath, 493);
305
339
  resolve(caddyPath);
306
340
  }).on("error", (err) => {
307
341
  reject(err);
@@ -310,10 +344,10 @@ async function download() {
310
344
  }
311
345
  function testCaddy() {
312
346
  return new Promise((resolve, reject) => {
313
- if (!(0, import_node_fs.existsSync)(caddyPath))
347
+ if (!(0, import_node_fs2.existsSync)(caddyPath))
314
348
  return resolve(false);
315
- (0, import_node_fs.chmodSync)(caddyPath, 493);
316
- const child = import_node_process3.default.platform === "win32" ? (0, import_node_child_process2.spawn)(caddyPath, []) : (0, import_node_child_process2.spawn)("sudo", ["-E", caddyPath]);
349
+ (0, import_node_fs2.chmodSync)(caddyPath, 493);
350
+ const child = import_node_process4.default.platform === "win32" ? (0, import_node_child_process3.spawn)(caddyPath, []) : (0, import_node_child_process3.spawn)("sudo", ["-E", caddyPath]);
317
351
  child.on("close", () => {
318
352
  return resolve(false);
319
353
  });
@@ -329,7 +363,6 @@ var CaddyInstant = class {
329
363
  constructor() {
330
364
  this.inited = false;
331
365
  this.stoped = false;
332
- this.host = new Hosts();
333
366
  testCaddy().then(() => {
334
367
  this.inited = true;
335
368
  });
@@ -338,51 +371,6 @@ var CaddyInstant = class {
338
371
  await download();
339
372
  this.inited = true;
340
373
  }
341
- async updateHost(ip, host) {
342
- ["localhost", "0.0.0.0"].includes(ip) && (ip = "127.0.0.1");
343
- this.host.add("127.0.0.1", "localhost");
344
- this.host.add(ip, host);
345
- await this.host.updateFinish();
346
- return new Promise((resolve, reject) => {
347
- if (import_node_process3.default.platform === "win32") {
348
- (0, import_node_child_process2.spawn)("ipconfig", ["/flushdns"]).on("error", (err) => {
349
- consola.error(err);
350
- return resolve(false);
351
- }).on("close", () => {
352
- resolve(true);
353
- });
354
- } else {
355
- (0, import_node_child_process2.spawn)("sudo", ["-E", "killall", "-HUP", "mDNSResponder"]).on("error", (err) => {
356
- consola.error(err);
357
- return resolve(false);
358
- }).on("close", () => {
359
- resolve(true);
360
- });
361
- }
362
- });
363
- }
364
- async restoreHost(ip, host) {
365
- ["localhost", "0.0.0.0"].includes(ip) && (ip = "127.0.0.1");
366
- this.host.remove(ip, host);
367
- await this.host.updateFinish();
368
- return new Promise((resolve, reject) => {
369
- if (import_node_process3.default.platform === "win32") {
370
- (0, import_node_child_process2.spawn)("ipconfig", ["/flushdns"]).on("error", (err) => {
371
- consola.error(err);
372
- return resolve(false);
373
- }).on("close", () => {
374
- resolve(true);
375
- });
376
- } else {
377
- (0, import_node_child_process2.spawn)("sudo", ["-E", "killall", "-HUP", "mDNSResponder"]).on("error", (err) => {
378
- consola.error(err);
379
- return resolve(false);
380
- }).on("close", () => {
381
- resolve(true);
382
- });
383
- }
384
- });
385
- }
386
374
  /**
387
375
  * @param source like `127.0.0.1:8080`
388
376
  * @param target like `test.abc.com`. And if you provide a port ,it will be ignore.
@@ -400,16 +388,53 @@ var CaddyInstant = class {
400
388
  await this.init();
401
389
  if (https && await tryPort(443))
402
390
  await (0, import_kill_port.default)(443, "tcp");
403
- if ((import_node_process3.default.platform === "win32" || !https) && await tryPort(80))
391
+ if ((import_node_process4.default.platform === "win32" || !https) && await tryPort(80))
404
392
  await (0, import_kill_port.default)(80, "tcp");
405
- if (!await this.updateHost(source.split(":")[0], target.split(":")[0]))
393
+ if (!await addHost(source.split(":")[0], target.split(":")[0]))
406
394
  throw new Error("update host failed");
407
395
  consola.success("update host success\n");
408
396
  return new Promise((resolve, reject) => {
409
- const child = import_node_process3.default.platform !== "win32" ? (0, import_node_child_process2.spawn)("sudo", ["-E", caddyPath, "reverse-proxy", "--from", `${target.split(":")[0]}${https ? "" : ":80"}`, "--to", `${source}`, "--internal-certs", "--insecure", "--disable-redirects"]) : (0, import_node_child_process2.spawn)(caddyPath, ["reverse-proxy", "--from", `${target.split(":")[0]}`, "--to", `${source}`, "--internal-certs"]);
397
+ const child = import_node_process4.default.platform !== "win32" ? (0, import_node_child_process3.spawn)("sudo", ["-E", caddyPath, "reverse-proxy", "--from", `${target.split(":")[0]}${https ? "" : ":80"}`, "--to", `${source}`, "--internal-certs", "--insecure", "--disable-redirects"]) : (0, import_node_child_process3.spawn)(caddyPath, ["reverse-proxy", "--from", `${target.split(":")[0]}`, "--to", `${source}`, "--internal-certs"]);
410
398
  child.on("error", (err) => {
411
399
  return reject(err);
412
400
  });
401
+ import_node_process4.default.on("SIGINT", async () => {
402
+ if (!restore || this.stoped)
403
+ return;
404
+ try {
405
+ if (await removeHost(source.split(":")[0], target.split(":")[0]))
406
+ consola.success("restore host success\n");
407
+ else
408
+ consola.fail("restore host failed\n");
409
+ } catch (e) {
410
+ consola.error(e);
411
+ consola.fail("restore host failed\n");
412
+ } finally {
413
+ this.stoped = true;
414
+ import_node_process4.default.nextTick(() => {
415
+ import_node_process4.default.exit();
416
+ });
417
+ }
418
+ });
419
+ const originalExit = import_node_process4.default.exit;
420
+ import_node_process4.default.exit = async (code) => {
421
+ if (!restore || this.stoped)
422
+ return originalExit(code);
423
+ try {
424
+ if (await removeHost(source.split(":")[0], target.split(":")[0]))
425
+ consola.success("restore host success\n");
426
+ else
427
+ consola.fail("restore host failed\n");
428
+ } catch (e) {
429
+ consola.error(e);
430
+ consola.fail("restore host failed\n");
431
+ } finally {
432
+ this.stoped = true;
433
+ import_node_process4.default.nextTick(() => {
434
+ originalExit(code);
435
+ });
436
+ }
437
+ };
413
438
  child.stderr.on("data", (data) => {
414
439
  const lines = data.toString().split("\n").map((line) => line.trim());
415
440
  for (const line of lines) {
@@ -422,22 +447,7 @@ var CaddyInstant = class {
422
447
  });
423
448
  child.stdout.on("data", (_data) => {
424
449
  consola.info(_data.toString());
425
- resolve(async (callback) => {
426
- if (!restore || this.stoped)
427
- return;
428
- try {
429
- if (await this.restoreHost(source.split(":")[0], target.split(":")[0]))
430
- consola.success("restore host success\n");
431
- else
432
- consola.fail("restore host failed\n");
433
- } catch (e) {
434
- consola.error(e);
435
- consola.fail("restore host failed\n");
436
- }
437
- this.stoped = true;
438
- child.kill();
439
- callback && callback();
440
- });
450
+ resolve();
441
451
  });
442
452
  });
443
453
  }
@@ -446,55 +456,13 @@ var CaddyInstant = class {
446
456
  // src/index.ts
447
457
  var config;
448
458
  var caddy;
449
- var _stop;
450
459
  var _servce;
451
- function registerExit(clear) {
452
- import_node_process4.default.on("beforeExit", async (_code) => {
453
- await clear();
454
- });
455
- import_node_process4.default.on("uncaughtException", async (err) => {
456
- console.error("An uncaught error occurred!", err.stack);
457
- await clear();
458
- import_node_process4.default.nextTick(() => {
459
- import_node_process4.default.exit(1);
460
- });
461
- });
462
- import_node_process4.default.on("unhandledRejection", async (reason, promise) => {
463
- console.error("Unhandled Rejection at:", promise, "reason:", reason);
464
- await clear();
465
- import_node_process4.default.nextTick(() => {
466
- import_node_process4.default.exit(1);
467
- });
468
- });
469
- import_node_process4.default.once("SIGINT", async () => {
470
- await clear();
471
- import_node_process4.default.exit(0);
472
- });
473
- import_node_process4.default.once("SIGTERM", async () => {
474
- await clear();
475
- import_node_process4.default.exit(0);
476
- });
477
- }
478
460
  var unpluginFactory = (options) => ({
479
461
  name: "unplugin-https-reverse-proxy",
480
462
  enforce: "pre",
481
463
  vite: {
482
464
  configResolved(_config) {
483
465
  config = _config;
484
- registerExit(async () => {
485
- var _a;
486
- try {
487
- if (_servce) {
488
- (_a = _servce.httpServer) == null ? void 0 : _a.close(async () => {
489
- _stop && await _stop();
490
- });
491
- _servce.close();
492
- }
493
- _stop && await _stop();
494
- } catch (e) {
495
- consola.error(e);
496
- }
497
- });
498
466
  },
499
467
  configureServer(server) {
500
468
  if (!isAdmin()) {
@@ -518,10 +486,10 @@ var unpluginFactory = (options) => ({
518
486
  server.printUrls = () => {
519
487
  var _a;
520
488
  _printUrls();
521
- const pwd = import_node_process4.default.cwd();
489
+ const pwd = import_node_process5.default.cwd();
522
490
  const vireCacheDir = `${pwd}/node_modules/.vite`;
523
- if ((0, import_node_fs2.existsSync)(vireCacheDir))
524
- (0, import_node_fs2.chmodSync)(vireCacheDir, 511);
491
+ if ((0, import_node_fs3.existsSync)(vireCacheDir))
492
+ (0, import_node_fs3.chmodSync)(vireCacheDir, 511);
525
493
  let source = `localhost:${config.server.port}`;
526
494
  const url = (_a = server.resolvedUrls) == null ? void 0 : _a.local[0];
527
495
  if (url) {
@@ -535,10 +503,9 @@ var unpluginFactory = (options) => ({
535
503
  caddy = new CaddyInstant();
536
504
  caddy.run(source, target, __spreadValues({
537
505
  base
538
- }, options)).then((stop) => {
506
+ }, options)).then(() => {
539
507
  const colorUrl = (url2) => import_picocolors.default.green(url2.replace(/:(\d+)\//, (_, port) => `:${import_picocolors.default.bold(port)}/`));
540
508
  consola.success(` ${import_picocolors.default.green("\u279C")} ${import_picocolors.default.bold("run caddy reverse proxy success")}: ${colorUrl(`${options.https ? "https" : "http"}://${target}${base}`)}`);
541
- !_stop && (_stop = once(stop));
542
509
  }).catch((e) => {
543
510
  throw e;
544
511
  });
@@ -554,7 +521,7 @@ var unpluginFactory = (options) => ({
554
521
  consola.warn("please run as administrator");
555
522
  return;
556
523
  }
557
- if (import_node_process4.default.env.NODE_ENV !== "development")
524
+ if (import_node_process5.default.env.NODE_ENV !== "development")
558
525
  return;
559
526
  const {
560
527
  enable = true,
@@ -570,38 +537,25 @@ var unpluginFactory = (options) => ({
570
537
  const devServer = __spreadValues(__spreadValues({
571
538
  host: "localhost",
572
539
  port: 8080
573
- }, compiler.options.devServer), import_node_process4.default.VUE_CLI_SERVICE.projectOptions.devServer);
540
+ }, compiler.options.devServer), import_node_process5.default.VUE_CLI_SERVICE.projectOptions.devServer);
574
541
  const source = `${devServer.host}:${devServer.port}`;
575
542
  if (caddy)
576
543
  return;
577
544
  const _close = (_a = compiler.close) == null ? void 0 : _a.bind(compiler);
578
545
  if (_close) {
579
546
  compiler.close = async (callback) => {
580
- try {
581
- _stop && await _stop(() => {
582
- _close && _close(callback);
583
- });
584
- } catch (e) {
585
- consola.error(e);
586
- import_node_process4.default.exit(1);
587
- }
547
+ import_node_process5.default.on("exit", () => {
548
+ _close && _close(callback);
549
+ });
588
550
  };
589
551
  } else {
590
552
  options.https = false;
591
- registerExit(async () => {
592
- try {
593
- _stop && await _stop();
594
- } catch (e) {
595
- consola.error(e);
596
- }
597
- });
598
553
  }
599
554
  caddy = new CaddyInstant();
600
- caddy.run(source, target, __spreadValues({}, options)).then((stop) => {
555
+ caddy.run(source, target, __spreadValues({}, options)).then(() => {
601
556
  const colorUrl = (url) => import_picocolors.default.green(url.replace(/:(\d+)\//, (_, port) => `:${import_picocolors.default.bold(port)}/`));
602
557
  compiler.hooks.done.tap("unplugin-https-reverse-proxy", () => {
603
558
  consola.success(` ${import_picocolors.default.green("\u279C")} ${import_picocolors.default.bold("run caddy reverse proxy success")}: ${colorUrl(`${options.https ? "https" : "http"}://${target}`)}`);
604
- !_stop && (_stop = once(stop));
605
559
  });
606
560
  }).catch((e) => {
607
561
  throw e;
package/dist/nuxt.js CHANGED
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  vite_default
3
- } from "./chunk-O43OD7QE.js";
3
+ } from "./chunk-Q7WB6WMX.js";
4
4
  import {
5
5
  webpack_default
6
- } from "./chunk-J4ZJTATR.js";
7
- import "./chunk-S4DC5XL4.js";
8
- import "./chunk-NNO3ZUSU.js";
6
+ } from "./chunk-W4RHTMNZ.js";
7
+ import "./chunk-TVCN6ESH.js";
8
+ import "./chunk-3RTK3FSZ.js";
9
9
 
10
10
  // src/nuxt.ts
11
11
  import { addVitePlugin, addWebpackPlugin, defineNuxtModule } from "@nuxt/kit";