chemicaljs 2.4.1 → 2.5.1

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.js CHANGED
@@ -6,7 +6,7 @@ var getDirname = () => path.dirname(getFilename());
6
6
  var __dirname = /* @__PURE__ */ getDirname();
7
7
 
8
8
  // src/index.ts
9
- import { resolve } from "node:path";
9
+ import { resolve as resolve2 } from "node:path";
10
10
  import {
11
11
  readFileSync,
12
12
  cpSync,
@@ -23,12 +23,22 @@ import { server as wisp, logging } from "@mercuryworkshop/wisp-js/server";
23
23
  import { baremuxPath } from "@mercuryworkshop/bare-mux/node";
24
24
  import { libcurlPath } from "@mercuryworkshop/libcurl-transport";
25
25
  import { epoxyPath } from "@mercuryworkshop/epoxy-transport";
26
- import { uvPath } from "@titaniumnetwork-dev/ultraviolet";
26
+
27
+ // ultraviolet/index.js
28
+ import { resolve, dirname } from "node:path";
29
+ import { fileURLToPath as fileURLToPath2 } from "node:url";
30
+ var __dirname2 = dirname(fileURLToPath2(import.meta.url));
31
+ var uvPath = resolve(__dirname2, "../ultraviolet/dist/");
32
+
33
+ // ultraviolet/path.js
34
+ var uvRandomPath = "PGtWY2ZzjT";
35
+
36
+ // src/index.ts
27
37
  import { scramjetPath } from "@mercuryworkshop/scramjet";
28
38
  import createRammerhead from "rammerhead/src/server/index.js";
29
39
  logging.set_level(logging.ERROR);
30
40
  var ChemicalServer = class {
31
- constructor(options) {
41
+ constructor(options = {}) {
32
42
  if (options) {
33
43
  if (typeof options !== "object" || Array.isArray(options)) {
34
44
  options = {};
@@ -43,8 +53,8 @@ var ChemicalServer = class {
43
53
  if (options.scramjet === void 0) {
44
54
  options.scramjet = true;
45
55
  }
46
- if (options.rammerhead === void 0) {
47
- options.rammerhead = true;
56
+ if (options.rh === void 0) {
57
+ options.rh = true;
48
58
  }
49
59
  if (options.demoMode === void 0) {
50
60
  options.demoMode = false;
@@ -53,7 +63,9 @@ var ChemicalServer = class {
53
63
  this.server = createServer();
54
64
  this.app = express();
55
65
  this.app.serveChemical = this.serveChemical;
56
- return [this.app, this.listen];
66
+ }
67
+ [Symbol.iterator]() {
68
+ return [this.app, this.listen][Symbol.iterator]();
57
69
  }
58
70
  serveChemical = () => {
59
71
  const rh = createRammerhead();
@@ -86,11 +98,11 @@ var ChemicalServer = class {
86
98
  };
87
99
  this.app.get("/chemical.js", async (req, res) => {
88
100
  let chemicalMain = await readFileSync(
89
- resolve(__dirname, "../client/chemical.js"),
101
+ resolve2(__dirname, "../client/chemical.js"),
90
102
  "utf8"
91
103
  );
92
104
  if (this.options.default) {
93
- if (["uv", "rammerhead", "scramjet"].includes(this.options.default)) {
105
+ if (["uv", "rh", "scramjet"].includes(this.options.default)) {
94
106
  chemicalMain = `const defaultService = "${this.options.default}";
95
107
 
96
108
  ` + chemicalMain;
@@ -107,36 +119,39 @@ var ChemicalServer = class {
107
119
  }
108
120
  chemicalMain = "const uvEnabled = " + String(this.options.uv) + ";\n" + chemicalMain;
109
121
  chemicalMain = "const scramjetEnabled = " + String(this.options.scramjet) + ";\n" + chemicalMain;
110
- chemicalMain = "const rammerheadEnabled = " + String(this.options.rammerhead) + ";\n" + chemicalMain;
122
+ chemicalMain = "const rammerheadEnabled = " + String(this.options.rh) + ";\n" + chemicalMain;
111
123
  chemicalMain = "const demoMode = " + String(this.options.demoMode) + ";\n" + chemicalMain;
124
+ chemicalMain = `const uvRandomPath = "${String(uvRandomPath)}";
125
+ ` + chemicalMain;
112
126
  chemicalMain = "(async () => {\n" + chemicalMain + "\n})();";
113
127
  res.type("application/javascript");
114
128
  return res.send(chemicalMain);
115
129
  });
116
130
  this.app.get("/chemical.sw.js", async (req, res) => {
117
131
  let chemicalSW = await readFileSync(
118
- resolve(__dirname, "../client/chemical.sw.js"),
132
+ resolve2(__dirname, "../client/chemical.sw.js"),
119
133
  "utf8"
120
134
  );
121
135
  chemicalSW = "const uvEnabled = " + String(this.options.uv) + ";\n" + chemicalSW;
122
136
  chemicalSW = "const scramjetEnabled = " + String(this.options.scramjet) + ";\n" + chemicalSW;
123
- chemicalSW = "const rammerheadEnabled = " + String(this.options.rammerhead) + ";\n" + chemicalSW;
137
+ chemicalSW = "const rammerheadEnabled = " + String(this.options.rh) + ";\n" + chemicalSW;
138
+ chemicalSW = `const uvRandomPath = "${String(uvRandomPath)}";
139
+ ` + chemicalSW;
124
140
  res.type("application/javascript");
125
141
  return res.send(chemicalSW);
126
142
  });
127
- this.app.use(express.static(resolve(__dirname, "../client")));
143
+ this.app.use(express.static(resolve2(__dirname, "../client")));
128
144
  this.app.use("/baremux/", express.static(baremuxPath));
129
145
  this.app.use("/libcurl/", express.static(libcurlPath));
130
146
  this.app.use("/epoxy/", express.static(epoxyPath));
131
147
  if (this.options.uv) {
132
- this.app.use("/uv/", express.static(resolve(__dirname, "config/uv")));
133
- this.app.use("/uv/", express.static(uvPath));
148
+ this.app.use(`/${uvRandomPath}/`, express.static(uvPath));
134
149
  }
135
150
  if (this.options.scramjet) {
136
151
  this.app.use("/scramjet/", express.static(scramjetPath));
137
152
  }
138
153
  this.server.on("request", (req, res) => {
139
- if (this.options.rammerhead && shouldRouteRh(req)) {
154
+ if (this.options.rh && shouldRouteRh(req)) {
140
155
  routeRhRequest(req, res);
141
156
  } else {
142
157
  this.app(req, res);
@@ -150,7 +165,7 @@ var ChemicalServer = class {
150
165
  }
151
166
  }
152
167
  wisp.routeRequest(req, socket, head);
153
- } else if (this.options.rammerhead && shouldRouteRh(req)) {
168
+ } else if (this.options.rh && shouldRouteRh(req)) {
154
169
  routeRhUpgrade(req, socket, head);
155
170
  } else {
156
171
  socket.end();
@@ -178,8 +193,8 @@ var ChemicalVitePlugin = (options) => ({
178
193
  if (options.scramjet === void 0) {
179
194
  options.scramjet = true;
180
195
  }
181
- if (options.rammerhead === void 0) {
182
- options.rammerhead = true;
196
+ if (options.rh === void 0) {
197
+ options.rh = true;
183
198
  }
184
199
  if (options.demoMode === void 0) {
185
200
  options.demoMode = false;
@@ -215,11 +230,11 @@ var ChemicalVitePlugin = (options) => ({
215
230
  const app = express();
216
231
  app.get("/chemical.js", async function(req, res) {
217
232
  let chemicalMain = await readFileSync(
218
- resolve(__dirname, "../client/chemical.js"),
233
+ resolve2(__dirname, "../client/chemical.js"),
219
234
  "utf8"
220
235
  );
221
236
  if (options.default) {
222
- if (["uv", "rammerhead", "scramjet"].includes(options.default)) {
237
+ if (["uv", "rh", "scramjet"].includes(options.default)) {
223
238
  chemicalMain = `const defaultService = "${options.default}";
224
239
 
225
240
  ` + chemicalMain;
@@ -236,37 +251,40 @@ var ChemicalVitePlugin = (options) => ({
236
251
  }
237
252
  chemicalMain = "const uvEnabled = " + String(options.uv) + ";\n" + chemicalMain;
238
253
  chemicalMain = "const scramjetEnabled = " + String(options.scramjet) + ";\n" + chemicalMain;
239
- chemicalMain = "const rammerheadEnabled = " + String(options.rammerhead) + ";\n" + chemicalMain;
254
+ chemicalMain = "const rammerheadEnabled = " + String(options.rh) + ";\n" + chemicalMain;
240
255
  chemicalMain = "const demoMode = " + String(options.demoMode) + ";\n" + chemicalMain;
256
+ chemicalMain = `const uvRandomPath = "${String(uvRandomPath)}";
257
+ ` + chemicalMain;
241
258
  chemicalMain = "(async () => {\n" + chemicalMain + "\n})();";
242
259
  res.type("application/javascript");
243
260
  return res.send(chemicalMain);
244
261
  });
245
262
  app.get("/chemical.sw.js", async function(req, res) {
246
263
  let chemicalSW = await readFileSync(
247
- resolve(__dirname, "../client/chemical.sw.js"),
264
+ resolve2(__dirname, "../client/chemical.sw.js"),
248
265
  "utf8"
249
266
  );
250
267
  chemicalSW = "const uvEnabled = " + String(options.uv) + ";\n" + chemicalSW;
251
268
  chemicalSW = "const scramjetEnabled = " + String(options.scramjet) + ";\n" + chemicalSW;
252
- chemicalSW = "const rammerheadEnabled = " + String(options.rammerhead) + ";\n" + chemicalSW;
269
+ chemicalSW = "const rammerheadEnabled = " + String(options.rh) + ";\n" + chemicalSW;
270
+ chemicalSW = `const uvRandomPath = "${String(uvRandomPath)}";
271
+ ` + chemicalSW;
253
272
  res.type("application/javascript");
254
273
  return res.send(chemicalSW);
255
274
  });
256
- app.use(express.static(resolve(__dirname, "../client")));
275
+ app.use(express.static(resolve2(__dirname, "../client")));
257
276
  app.use("/baremux/", express.static(baremuxPath));
258
277
  app.use("/libcurl/", express.static(libcurlPath));
259
278
  app.use("/epoxy/", express.static(epoxyPath));
260
279
  if (options.uv) {
261
- app.use("/uv/", express.static(resolve(__dirname, "config/uv")));
262
- app.use("/uv/", express.static(uvPath));
280
+ app.use(`/${uvRandomPath}/`, express.static(uvPath));
263
281
  }
264
282
  if (options.scramjet) {
265
283
  app.use("/scramjet/", express.static(scramjetPath));
266
284
  }
267
285
  server.middlewares.use(app);
268
286
  server.middlewares.use((req, res, next) => {
269
- if (options.rammerhead && shouldRouteRh(req)) {
287
+ if (options.rh && shouldRouteRh(req)) {
270
288
  routeRhRequest(req, res);
271
289
  } else {
272
290
  next();
@@ -286,7 +304,7 @@ var ChemicalVitePlugin = (options) => ({
286
304
  }
287
305
  }
288
306
  wisp.routeRequest(req, socket, head);
289
- } else if (options.rammerhead && shouldRouteRh(req)) {
307
+ } else if (options.rh && shouldRouteRh(req)) {
290
308
  routeRhUpgrade(req, socket, head);
291
309
  } else {
292
310
  for (const upgrader of upgraders) {
@@ -322,8 +340,8 @@ var ChemicalBuild = class {
322
340
  if (options.scramjet === void 0) {
323
341
  options.scramjet = true;
324
342
  }
325
- if (options.rammerhead === void 0) {
326
- options.rammerhead = true;
343
+ if (options.rh === void 0) {
344
+ options.rh = true;
327
345
  }
328
346
  if (options.demoMode === void 0) {
329
347
  options.demoMode = false;
@@ -331,21 +349,21 @@ var ChemicalBuild = class {
331
349
  this.options = options;
332
350
  }
333
351
  async write(deletePath = false) {
334
- if (!existsSync(resolve(this.options.path || ""))) {
335
- mkdirSync(resolve(this.options.path || ""), { recursive: true });
352
+ if (!existsSync(resolve2(this.options.path || ""))) {
353
+ mkdirSync(resolve2(this.options.path || ""), { recursive: true });
336
354
  } else {
337
355
  if (deletePath) {
338
- readdirSync(resolve(this.options.path || "")).forEach(
339
- (file) => rmSync(resolve(this.options.path || "", file), { recursive: true })
356
+ readdirSync(resolve2(this.options.path || "")).forEach(
357
+ (file) => rmSync(resolve2(this.options.path || "", file), { recursive: true })
340
358
  );
341
359
  }
342
360
  }
343
361
  let chemicalMain = await readFileSync(
344
- resolve(__dirname, "../client/chemical.js"),
362
+ resolve2(__dirname, "../client/chemical.js"),
345
363
  "utf8"
346
364
  );
347
365
  if (this.options.default) {
348
- if (["uv", "rammerhead", "scramjet"].includes(this.options.default)) {
366
+ if (["uv", "rh", "scramjet"].includes(this.options.default)) {
349
367
  chemicalMain = `const defaultService = "${this.options.default}";
350
368
 
351
369
  ` + chemicalMain;
@@ -362,40 +380,50 @@ var ChemicalBuild = class {
362
380
  }
363
381
  chemicalMain = "const uvEnabled = " + String(this.options.uv) + ";\n" + chemicalMain;
364
382
  chemicalMain = "const scramjetEnabled = " + String(this.options.scramjet) + ";\n" + chemicalMain;
365
- chemicalMain = "const rammerheadEnabled = " + String(this.options.rammerhead) + ";\n" + chemicalMain;
383
+ chemicalMain = "const rammerheadEnabled = " + String(this.options.rh) + ";\n" + chemicalMain;
366
384
  chemicalMain = "const demoMode = " + String(this.options.demoMode) + ";\n" + chemicalMain;
385
+ chemicalMain = `const uvRandomPath = "${String(uvRandomPath)}";
386
+ ` + chemicalMain;
367
387
  chemicalMain = "(async () => {\n" + chemicalMain + "\n})();";
368
- writeFileSync(resolve(this.options.path || "", "chemical.js"), chemicalMain);
388
+ writeFileSync(
389
+ resolve2(this.options.path || "", "chemical.js"),
390
+ chemicalMain
391
+ );
369
392
  let chemicalSW = await readFileSync(
370
- resolve(__dirname, "../client/chemical.sw.js"),
393
+ resolve2(__dirname, "../client/chemical.sw.js"),
371
394
  "utf8"
372
395
  );
373
396
  chemicalSW = "const uvEnabled = " + String(this.options.uv) + ";\n" + chemicalSW;
374
397
  chemicalSW = "const scramjetEnabled = " + String(this.options.scramjet) + ";\n" + chemicalSW;
375
- chemicalSW = "const rammerheadEnabled = " + String(this.options.rammerhead) + ";\n" + chemicalSW;
376
- writeFileSync(resolve(this.options.path || "", "chemical.sw.js"), chemicalSW);
398
+ chemicalSW = "const rammerheadEnabled = " + String(this.options.rh) + ";\n" + chemicalSW;
399
+ chemicalSW = `const uvRandomPath = "${String(uvRandomPath)}";
400
+ ` + chemicalSW;
401
+ writeFileSync(
402
+ resolve2(this.options.path || "", "chemical.sw.js"),
403
+ chemicalSW
404
+ );
377
405
  if (this.options.demoMode) {
378
406
  copyFileSync(
379
- resolve(__dirname, "client/chemical.demo.html"),
380
- resolve(this.options.path || "", "chemical.demo.html")
407
+ resolve2(__dirname, "client/chemical.demo.html"),
408
+ resolve2(this.options.path || "", "chemical.demo.html")
381
409
  );
382
410
  }
383
- cpSync(baremuxPath, resolve(this.options.path || "", "baremux"), {
411
+ cpSync(baremuxPath, resolve2(this.options.path || "", "baremux"), {
384
412
  recursive: true
385
413
  });
386
- cpSync(libcurlPath, resolve(this.options.path || "", "libcurl"), {
414
+ cpSync(libcurlPath, resolve2(this.options.path || "", "libcurl"), {
387
415
  recursive: true
388
416
  });
389
- cpSync(epoxyPath, resolve(this.options.path || "", "epoxy"), { recursive: true });
390
- cpSync(libcurlPath, resolve(this.options.path || "", "libcurl"), {
417
+ cpSync(epoxyPath, resolve2(this.options.path || "", "epoxy"), {
418
+ recursive: true
419
+ });
420
+ cpSync(libcurlPath, resolve2(this.options.path || "", "libcurl"), {
391
421
  recursive: true
392
422
  });
393
423
  if (this.options.uv) {
394
- cpSync(uvPath, resolve(this.options.path || "", "uv"), { recursive: true });
395
- copyFileSync(
396
- resolve(__dirname, "config/uv/uv.config.js"),
397
- resolve(this.options.path || "", "uv/uv.config.js")
398
- );
424
+ cpSync(uvPath, resolve2(this.options.path || "", uvRandomPath), {
425
+ recursive: true
426
+ });
399
427
  }
400
428
  }
401
429
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../node_modules/tsup/assets/esm_shims.js","../src/index.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport { fileURLToPath } from 'url'\nimport path from 'path'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","import { resolve } from \"node:path\";\nimport {\n readFileSync,\n cpSync,\n writeFileSync,\n copyFileSync,\n existsSync,\n mkdirSync,\n rmSync,\n readdirSync,\n} from \"node:fs\";\nimport { createServer, Server } from \"node:http\";\nimport { Socket } from \"node:net\";\nimport express, { Request, Response, application, Next } from \"express\";\n//@ts-ignore\nimport { server as wisp, logging } from \"@mercuryworkshop/wisp-js/server\";\n//@ts-ignore\nimport { baremuxPath } from \"@mercuryworkshop/bare-mux/node\";\nimport { libcurlPath } from \"@mercuryworkshop/libcurl-transport\";\nimport { epoxyPath } from \"@mercuryworkshop/epoxy-transport\";\nimport { uvPath } from \"@titaniumnetwork-dev/ultraviolet\";\nimport { scramjetPath } from \"@mercuryworkshop/scramjet\";\nimport createRammerhead, { RammerheadProxy } from \"rammerhead/src/server/index.js\";\nimport { ViteDevServer } from \"vite\";\n\nlogging.set_level(logging.ERROR);\n\ninterface WispOptions {\n hostname_blacklist?: Array<RegExp>;\n hostname_whitelist?: Array<RegExp>;\n port_blacklist?: (number | Array<number>)[];\n port_whitelist?: (number | Array<number>)[];\n allow_direct_ip?: boolean;\n allow_private_ips?: boolean;\n allow_loopback_ips?: boolean;\n stream_limit_per_host?: number;\n stream_limit_total?: number;\n allow_udp_streams?: boolean;\n allow_tcp_streams?: boolean;\n dns_ttl?: number;\n dns_method?: \"lookup\" | \"resolve\";\n dns_servers?: Array<string>;\n dns_result_order?: \"ipv4first\" | \"ipv6first\" | \"verbatim\";\n parse_real_ip?: boolean;\n parse_real_ip_from?: Array<string>;\n}\n\ninterface Options {\n uv?: boolean;\n scramjet?: boolean;\n rammerhead?: boolean;\n demoMode?: boolean;\n default?: string;\n wispOptions?: WispOptions;\n}\n\ninterface BuildOptions extends Options {\n path?: string;\n}\n\ninterface ChemicalServer {\n options: Options;\n server: Server;\n app: application;\n}\n\ninterface ChemicalBuild {\n options: BuildOptions;\n}\n\nclass ChemicalServer {\n constructor(options: Options) {\n if (options) {\n if (typeof options !== \"object\" || Array.isArray(options)) {\n options = {};\n console.error(\"Error: ChemicalServer options invalid.\");\n }\n } else {\n options = {};\n }\n\n if (options.uv === undefined) {\n options.uv = true;\n }\n\n if (options.scramjet === undefined) {\n options.scramjet = true;\n }\n\n if (options.rammerhead === undefined) {\n options.rammerhead = true;\n }\n\n if (options.demoMode === undefined) {\n options.demoMode = false;\n }\n\n this.options = options;\n this.server = createServer();\n this.app = express();\n this.app.serveChemical = this.serveChemical;\n\n return [this.app, this.listen] as any;\n }\n serveChemical = () => {\n const rh: RammerheadProxy = createRammerhead();\n const rammerheadScopes: Array<string> = [\n \"/rammerhead.js\",\n \"/hammerhead.js\",\n \"/transport-worker.js\",\n \"/task.js\",\n \"/iframe-task.js\",\n \"/worker-hammerhead.js\",\n \"/messaging\",\n \"/sessionexists\",\n \"/deletesession\",\n \"/newsession\",\n \"/editsession\",\n \"/needpassword\",\n \"/syncLocalStorage\",\n \"/api/shuffleDict\",\n ];\n const rammerheadSession: RegExp = /^\\/[a-z0-9]{32}/;\n const shouldRouteRh = (req: Request): boolean => {\n const url = new URL(req.url, \"http://0.0.0.0\");\n return (\n rammerheadScopes.includes(url.pathname) ||\n rammerheadSession.test(url.pathname)\n );\n };\n const routeRhRequest = (req: Request, res: Response) => {\n rh.emit(\"request\", req, res);\n };\n const routeRhUpgrade = (req: Request, socket: Socket, head: Buffer) => {\n rh.emit(\"upgrade\", req, socket, head);\n };\n\n this.app.get(\"/chemical.js\", async (req: Request, res: Response) => {\n let chemicalMain = await readFileSync(\n resolve(__dirname, \"../client/chemical.js\"),\n \"utf8\"\n );\n\n if (this.options.default) {\n if ([\"uv\", \"rammerhead\", \"scramjet\"].includes(this.options.default)) {\n chemicalMain =\n `const defaultService = \"${this.options.default}\";\\n\\n` +\n chemicalMain;\n } else {\n chemicalMain = `const defaultService = \"uv\";\\n\\n` + chemicalMain;\n console.error(\"Error: Chemical default option invalid.\");\n }\n } else {\n chemicalMain = `const defaultService = \"uv\";\\n\\n` + chemicalMain;\n }\n\n chemicalMain =\n \"const uvEnabled = \" + String(this.options.uv) + \";\\n\" + chemicalMain;\n chemicalMain =\n \"const scramjetEnabled = \" +\n String(this.options.scramjet) +\n \";\\n\" +\n chemicalMain;\n chemicalMain =\n \"const rammerheadEnabled = \" +\n String(this.options.rammerhead) +\n \";\\n\" +\n chemicalMain;\n chemicalMain =\n \"const demoMode = \" +\n String(this.options.demoMode) +\n \";\\n\" +\n chemicalMain;\n\n chemicalMain = \"(async () => {\\n\" + chemicalMain + \"\\n})();\";\n\n res.type(\"application/javascript\");\n return res.send(chemicalMain);\n });\n this.app.get(\"/chemical.sw.js\", async (req: Request, res: Response) => {\n let chemicalSW = await readFileSync(\n resolve(__dirname, \"../client/chemical.sw.js\"),\n \"utf8\"\n );\n\n chemicalSW =\n \"const uvEnabled = \" + String(this.options.uv) + \";\\n\" + chemicalSW;\n chemicalSW =\n \"const scramjetEnabled = \" +\n String(this.options.scramjet) +\n \";\\n\" +\n chemicalSW;\n chemicalSW =\n \"const rammerheadEnabled = \" +\n String(this.options.rammerhead) +\n \";\\n\" +\n chemicalSW;\n\n res.type(\"application/javascript\");\n return res.send(chemicalSW);\n });\n this.app.use(express.static(resolve(__dirname, \"../client\")));\n this.app.use(\"/baremux/\", express.static(baremuxPath));\n this.app.use(\"/libcurl/\", express.static(libcurlPath));\n this.app.use(\"/epoxy/\", express.static(epoxyPath));\n if (this.options.uv) {\n this.app.use(\"/uv/\", express.static(resolve(__dirname, \"config/uv\")));\n this.app.use(\"/uv/\", express.static(uvPath));\n }\n if (this.options.scramjet) {\n this.app.use(\"/scramjet/\", express.static(scramjetPath));\n }\n this.server.on(\"request\", (req: Request, res: Response) => {\n if (this.options.rammerhead && shouldRouteRh(req)) {\n routeRhRequest(req, res);\n } else {\n this.app(req, res);\n }\n });\n this.server.on(\"upgrade\", (req: Request, socket: Socket, head: Buffer) => {\n if (req.url && req.url.endsWith(\"/wisp/\")) {\n if (this.options.wispOptions) {\n for (let option in this.options.wispOptions) {\n //@ts-ignore\n wisp.options[option] = this.options.wispOptions[option];\n }\n }\n wisp.routeRequest(req, socket, head);\n } else if (this.options.rammerhead && shouldRouteRh(req)) {\n routeRhUpgrade(req, socket, head);\n } else {\n socket.end();\n }\n });\n };\n listen = (port: number, callback: () => void) => {\n this.server.listen(port, callback);\n };\n}\n\nconst ChemicalVitePlugin = (options: Options) => ({\n name: \"chemical-vite-plugin\",\n configureServer(server: ViteDevServer) {\n if (options) {\n if (typeof options !== \"object\" || Array.isArray(options)) {\n options = {};\n console.error(\"Error: ChemicalServer options invalid.\");\n }\n } else {\n options = {};\n }\n\n if (options.uv === undefined) {\n options.uv = true;\n }\n\n if (options.scramjet === undefined) {\n options.scramjet = true;\n }\n\n if (options.rammerhead === undefined) {\n options.rammerhead = true;\n }\n\n if (options.demoMode === undefined) {\n options.demoMode = false;\n }\n\n const rh: RammerheadProxy = createRammerhead();\n const rammerheadScopes: Array<string> = [\n \"/rammerhead.js\",\n \"/hammerhead.js\",\n \"/transport-worker.js\",\n \"/task.js\",\n \"/iframe-task.js\",\n \"/worker-hammerhead.js\",\n \"/messaging\",\n \"/sessionexists\",\n \"/deletesession\",\n \"/newsession\",\n \"/editsession\",\n \"/needpassword\",\n \"/syncLocalStorage\",\n \"/api/shuffleDict\",\n ];\n const rammerheadSession: RegExp = /^\\/[a-z0-9]{32}/;\n const shouldRouteRh = (req: Request): boolean => {\n const url: URL = new URL(req.url, \"http://0.0.0.0\");\n return (\n rammerheadScopes.includes(url.pathname) ||\n rammerheadSession.test(url.pathname)\n );\n };\n const routeRhRequest = (req: Request, res: Response) => {\n rh.emit(\"request\", req, res);\n };\n const routeRhUpgrade = (req: Request, socket: Socket, head: Buffer) => {\n rh.emit(\"upgrade\", req, socket, head);\n };\n\n const app: application = express();\n app.get(\"/chemical.js\", async function (req: Request, res: Response) {\n let chemicalMain: string = await readFileSync(\n resolve(__dirname, \"../client/chemical.js\"),\n \"utf8\"\n );\n\n if (options.default) {\n if ([\"uv\", \"rammerhead\", \"scramjet\"].includes(options.default)) {\n chemicalMain =\n `const defaultService = \"${options.default}\";\\n\\n` + chemicalMain;\n } else {\n chemicalMain = `const defaultService = \"uv\";\\n\\n` + chemicalMain;\n console.error(\"Error: Chemical default option invalid.\");\n }\n } else {\n chemicalMain = `const defaultService = \"uv\";\\n\\n` + chemicalMain;\n }\n\n chemicalMain =\n \"const uvEnabled = \" + String(options.uv) + \";\\n\" + chemicalMain;\n chemicalMain =\n \"const scramjetEnabled = \" +\n String(options.scramjet) +\n \";\\n\" +\n chemicalMain;\n chemicalMain =\n \"const rammerheadEnabled = \" +\n String(options.rammerhead) +\n \";\\n\" +\n chemicalMain;\n chemicalMain =\n \"const demoMode = \" + String(options.demoMode) + \";\\n\" + chemicalMain;\n\n chemicalMain = \"(async () => {\\n\" + chemicalMain + \"\\n})();\";\n\n res.type(\"application/javascript\");\n return res.send(chemicalMain);\n });\n app.get(\"/chemical.sw.js\", async function (req: Request, res: Response) {\n let chemicalSW: string = await readFileSync(\n resolve(__dirname, \"../client/chemical.sw.js\"),\n \"utf8\"\n );\n\n chemicalSW =\n \"const uvEnabled = \" + String(options.uv) + \";\\n\" + chemicalSW;\n chemicalSW =\n \"const scramjetEnabled = \" +\n String(options.scramjet) +\n \";\\n\" +\n chemicalSW;\n chemicalSW =\n \"const rammerheadEnabled = \" +\n String(options.rammerhead) +\n \";\\n\" +\n chemicalSW;\n\n res.type(\"application/javascript\");\n return res.send(chemicalSW);\n });\n app.use(express.static(resolve(__dirname, \"../client\")));\n app.use(\"/baremux/\", express.static(baremuxPath));\n app.use(\"/libcurl/\", express.static(libcurlPath));\n app.use(\"/epoxy/\", express.static(epoxyPath));\n if (options.uv) {\n app.use(\"/uv/\", express.static(resolve(__dirname, \"config/uv\")));\n app.use(\"/uv/\", express.static(uvPath));\n }\n if (options.scramjet) {\n app.use(\"/scramjet/\", express.static(scramjetPath));\n }\n server.middlewares.use(app);\n\n server.middlewares.use((req: Request, res: Request, next: Next) => {\n if (options.rammerhead && shouldRouteRh(req)) {\n routeRhRequest(req, res);\n } else {\n next();\n }\n });\n\n const upgraders = server.httpServer?.listeners(\"upgrade\") as ((...args: any[]) => void)[];\n\n for (const upgrader of upgraders) {\n server?.httpServer?.off(\"upgrade\", upgrader);\n }\n\n server?.httpServer?.on(\n \"upgrade\",\n (req: Request, socket: Socket, head: Buffer) => {\n if (req.url && req.url.endsWith(\"/wisp/\")) {\n if (options.wispOptions) {\n for (let option in options.wispOptions) {\n //@ts-ignore\n wisp.options[option] = options.wispOptions[option];\n }\n }\n wisp.routeRequest(req, socket, head);\n } else if (options.rammerhead && shouldRouteRh(req)) {\n routeRhUpgrade(req, socket, head);\n } else {\n for (const upgrader of upgraders) {\n upgrader(req, socket, head);\n }\n }\n }\n );\n },\n});\n\nclass ChemicalBuild {\n constructor(options: BuildOptions) {\n if (options) {\n if (typeof options !== \"object\" || Array.isArray(options)) {\n options = {};\n console.error(\"Error: ChemicalBuild options invalid.\");\n }\n } else {\n options = {};\n }\n\n if (options.path === undefined) {\n options.path = \"dist\";\n }\n\n if (options.path.startsWith(\"/\")) {\n options.path = options.path.substring(1);\n }\n\n if (options.path.endsWith(\"/\")) {\n options.path = options.path.slice(0, -1);\n }\n\n if (options.uv === undefined) {\n options.uv = true;\n }\n\n if (options.scramjet === undefined) {\n options.scramjet = true;\n }\n\n if (options.rammerhead === undefined) {\n options.rammerhead = true;\n }\n\n if (options.demoMode === undefined) {\n options.demoMode = false;\n }\n\n this.options = options;\n }\n async write(deletePath: boolean = false) {\n if (!existsSync(resolve(this.options.path || \"\"))) {\n mkdirSync(resolve(this.options.path || \"\"), { recursive: true });\n } else {\n if (deletePath) {\n readdirSync(resolve(this.options.path || \"\")).forEach((file) =>\n rmSync(resolve(this.options.path || \"\", file), { recursive: true })\n );\n }\n }\n\n let chemicalMain: string = await readFileSync(\n resolve(__dirname, \"../client/chemical.js\"),\n \"utf8\"\n );\n\n if (this.options.default) {\n if ([\"uv\", \"rammerhead\", \"scramjet\"].includes(this.options.default)) {\n chemicalMain =\n `const defaultService = \"${this.options.default}\";\\n\\n` +\n chemicalMain;\n } else {\n chemicalMain = `const defaultService = \"uv\";\\n\\n` + chemicalMain;\n console.error(\"Error: Chemical default option invalid.\");\n }\n } else {\n chemicalMain = `const defaultService = \"uv\";\\n\\n` + chemicalMain;\n }\n\n chemicalMain =\n \"const uvEnabled = \" + String(this.options.uv) + \";\\n\" + chemicalMain;\n chemicalMain =\n \"const scramjetEnabled = \" +\n String(this.options.scramjet) +\n \";\\n\" +\n chemicalMain;\n chemicalMain =\n \"const rammerheadEnabled = \" +\n String(this.options.rammerhead) +\n \";\\n\" +\n chemicalMain;\n chemicalMain =\n \"const demoMode = \" +\n String(this.options.demoMode) +\n \";\\n\" +\n chemicalMain;\n\n chemicalMain = \"(async () => {\\n\" + chemicalMain + \"\\n})();\";\n\n writeFileSync(resolve(this.options.path || \"\", \"chemical.js\"), chemicalMain);\n\n let chemicalSW: string = await readFileSync(\n resolve(__dirname, \"../client/chemical.sw.js\"),\n \"utf8\"\n );\n\n chemicalSW =\n \"const uvEnabled = \" + String(this.options.uv) + \";\\n\" + chemicalSW;\n chemicalSW =\n \"const scramjetEnabled = \" +\n String(this.options.scramjet) +\n \";\\n\" +\n chemicalSW;\n chemicalSW =\n \"const rammerheadEnabled = \" +\n String(this.options.rammerhead) +\n \";\\n\" +\n chemicalSW;\n\n writeFileSync(resolve(this.options.path || \"\", \"chemical.sw.js\"), chemicalSW);\n\n if (this.options.demoMode) {\n copyFileSync(\n resolve(__dirname, \"client/chemical.demo.html\"),\n resolve(this.options.path || \"\", \"chemical.demo.html\")\n );\n }\n\n cpSync(baremuxPath, resolve(this.options.path || \"\", \"baremux\"), {\n recursive: true,\n });\n cpSync(libcurlPath, resolve(this.options.path || \"\", \"libcurl\"), {\n recursive: true,\n });\n cpSync(epoxyPath, resolve(this.options.path || \"\", \"epoxy\"), { recursive: true });\n cpSync(libcurlPath, resolve(this.options.path || \"\", \"libcurl\"), {\n recursive: true,\n });\n if (this.options.uv) {\n cpSync(uvPath, resolve(this.options.path || \"\", \"uv\"), { recursive: true });\n copyFileSync(\n resolve(__dirname, \"config/uv/uv.config.js\"),\n resolve(this.options.path || \"\", \"uv/uv.config.js\")\n );\n }\n }\n}\n\nexport { ChemicalServer, ChemicalBuild, ChemicalVitePlugin };\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../node_modules/tsup/assets/esm_shims.js","../src/index.ts","../ultraviolet/index.js","../ultraviolet/path.js"],"sourcesContent":["// Shim globals in esm bundle\nimport { fileURLToPath } from 'url'\nimport path from 'path'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","import { resolve } from \"node:path\";\nimport {\n readFileSync,\n cpSync,\n writeFileSync,\n copyFileSync,\n existsSync,\n mkdirSync,\n rmSync,\n readdirSync,\n} from \"node:fs\";\nimport { createServer, Server } from \"node:http\";\nimport { Socket } from \"node:net\";\nimport express, { Request, Response, application, Next } from \"express\";\n//@ts-ignore\nimport { server as wisp, logging } from \"@mercuryworkshop/wisp-js/server\";\n//@ts-ignore\nimport { baremuxPath } from \"@mercuryworkshop/bare-mux/node\";\nimport { libcurlPath } from \"@mercuryworkshop/libcurl-transport\";\nimport { epoxyPath } from \"@mercuryworkshop/epoxy-transport\";\nimport { uvPath } from \"../ultraviolet/index.js\";\nimport { uvRandomPath } from \"../ultraviolet/path.js\";\nimport { scramjetPath } from \"@mercuryworkshop/scramjet\";\nimport createRammerhead, {\n RammerheadProxy,\n} from \"rammerhead/src/server/index.js\";\nimport { ViteDevServer } from \"vite\";\n\nlogging.set_level(logging.ERROR);\n\ninterface WispOptions {\n hostname_blacklist?: Array<RegExp>;\n hostname_whitelist?: Array<RegExp>;\n port_blacklist?: (number | Array<number>)[];\n port_whitelist?: (number | Array<number>)[];\n allow_direct_ip?: boolean;\n allow_private_ips?: boolean;\n allow_loopback_ips?: boolean;\n stream_limit_per_host?: number;\n stream_limit_total?: number;\n allow_udp_streams?: boolean;\n allow_tcp_streams?: boolean;\n dns_ttl?: number;\n dns_method?: \"lookup\" | \"resolve\";\n dns_servers?: Array<string>;\n dns_result_order?: \"ipv4first\" | \"ipv6first\" | \"verbatim\";\n parse_real_ip?: boolean;\n parse_real_ip_from?: Array<string>;\n}\n\ninterface Options {\n uv?: boolean;\n scramjet?: boolean;\n rh?: boolean;\n demoMode?: boolean;\n default?: string;\n wispOptions?: WispOptions;\n}\n\ninterface BuildOptions extends Options {\n path?: string;\n}\n\ninterface ChemicalServer {\n options: Options;\n server: Server;\n app: application;\n}\n\ninterface ChemicalBuild {\n options: BuildOptions;\n}\n\nclass ChemicalServer {\n constructor(options: Options = {}) {\n if (options) {\n if (typeof options !== \"object\" || Array.isArray(options)) {\n options = {};\n console.error(\"Error: ChemicalServer options invalid.\");\n }\n } else {\n options = {};\n }\n\n if (options.uv === undefined) {\n options.uv = true;\n }\n\n if (options.scramjet === undefined) {\n options.scramjet = true;\n }\n\n if (options.rh === undefined) {\n options.rh = true;\n }\n\n if (options.demoMode === undefined) {\n options.demoMode = false;\n }\n\n this.options = options;\n this.server = createServer();\n this.app = express();\n this.app.serveChemical = this.serveChemical;\n }\n [Symbol.iterator](): Iterator<application | Function> {\n return [this.app, this.listen][Symbol.iterator]();\n }\n serveChemical = () => {\n const rh: RammerheadProxy = createRammerhead();\n const rammerheadScopes: Array<string> = [\n \"/rammerhead.js\",\n \"/hammerhead.js\",\n \"/transport-worker.js\",\n \"/task.js\",\n \"/iframe-task.js\",\n \"/worker-hammerhead.js\",\n \"/messaging\",\n \"/sessionexists\",\n \"/deletesession\",\n \"/newsession\",\n \"/editsession\",\n \"/needpassword\",\n \"/syncLocalStorage\",\n \"/api/shuffleDict\",\n ];\n const rammerheadSession: RegExp = /^\\/[a-z0-9]{32}/;\n const shouldRouteRh = (req: Request): boolean => {\n const url = new URL(req.url, \"http://0.0.0.0\");\n return (\n rammerheadScopes.includes(url.pathname) ||\n rammerheadSession.test(url.pathname)\n );\n };\n const routeRhRequest = (req: Request, res: Response) => {\n rh.emit(\"request\", req, res);\n };\n const routeRhUpgrade = (req: Request, socket: Socket, head: Buffer) => {\n rh.emit(\"upgrade\", req, socket, head);\n };\n\n this.app.get(\"/chemical.js\", async (req: Request, res: Response) => {\n let chemicalMain = await readFileSync(\n resolve(__dirname, \"../client/chemical.js\"),\n \"utf8\"\n );\n\n if (this.options.default) {\n if ([\"uv\", \"rh\", \"scramjet\"].includes(this.options.default)) {\n chemicalMain =\n `const defaultService = \"${this.options.default}\";\\n\\n` +\n chemicalMain;\n } else {\n chemicalMain = `const defaultService = \"uv\";\\n\\n` + chemicalMain;\n console.error(\"Error: Chemical default option invalid.\");\n }\n } else {\n chemicalMain = `const defaultService = \"uv\";\\n\\n` + chemicalMain;\n }\n\n chemicalMain =\n \"const uvEnabled = \" + String(this.options.uv) + \";\\n\" + chemicalMain;\n chemicalMain =\n \"const scramjetEnabled = \" +\n String(this.options.scramjet) +\n \";\\n\" +\n chemicalMain;\n chemicalMain =\n \"const rammerheadEnabled = \" +\n String(this.options.rh) +\n \";\\n\" +\n chemicalMain;\n chemicalMain =\n \"const demoMode = \" +\n String(this.options.demoMode) +\n \";\\n\" +\n chemicalMain;\n chemicalMain =\n `const uvRandomPath = \"${String(uvRandomPath)}\";\\n` + chemicalMain;\n\n chemicalMain = \"(async () => {\\n\" + chemicalMain + \"\\n})();\";\n\n res.type(\"application/javascript\");\n return res.send(chemicalMain);\n });\n this.app.get(\"/chemical.sw.js\", async (req: Request, res: Response) => {\n let chemicalSW = await readFileSync(\n resolve(__dirname, \"../client/chemical.sw.js\"),\n \"utf8\"\n );\n\n chemicalSW =\n \"const uvEnabled = \" + String(this.options.uv) + \";\\n\" + chemicalSW;\n chemicalSW =\n \"const scramjetEnabled = \" +\n String(this.options.scramjet) +\n \";\\n\" +\n chemicalSW;\n chemicalSW =\n \"const rammerheadEnabled = \" +\n String(this.options.rh) +\n \";\\n\" +\n chemicalSW;\n chemicalSW =\n `const uvRandomPath = \"${String(uvRandomPath)}\";\\n` + chemicalSW;\n\n res.type(\"application/javascript\");\n return res.send(chemicalSW);\n });\n this.app.use(express.static(resolve(__dirname, \"../client\")));\n this.app.use(\"/baremux/\", express.static(baremuxPath));\n this.app.use(\"/libcurl/\", express.static(libcurlPath));\n this.app.use(\"/epoxy/\", express.static(epoxyPath));\n if (this.options.uv) {\n this.app.use(`/${uvRandomPath}/`, express.static(uvPath));\n }\n if (this.options.scramjet) {\n this.app.use(\"/scramjet/\", express.static(scramjetPath));\n }\n this.server.on(\"request\", (req: Request, res: Response) => {\n if (this.options.rh && shouldRouteRh(req)) {\n routeRhRequest(req, res);\n } else {\n this.app(req, res);\n }\n });\n this.server.on(\"upgrade\", (req: Request, socket: Socket, head: Buffer) => {\n if (req.url && req.url.endsWith(\"/wisp/\")) {\n if (this.options.wispOptions) {\n for (let option in this.options.wispOptions) {\n //@ts-ignore\n wisp.options[option] = this.options.wispOptions[option];\n }\n }\n wisp.routeRequest(req, socket, head);\n } else if (this.options.rh && shouldRouteRh(req)) {\n routeRhUpgrade(req, socket, head);\n } else {\n socket.end();\n }\n });\n };\n listen = (port: number, callback: () => void) => {\n this.server.listen(port, callback);\n };\n}\n\nconst ChemicalVitePlugin = (options: Options) => ({\n name: \"chemical-vite-plugin\",\n configureServer(server: ViteDevServer) {\n if (options) {\n if (typeof options !== \"object\" || Array.isArray(options)) {\n options = {};\n console.error(\"Error: ChemicalServer options invalid.\");\n }\n } else {\n options = {};\n }\n\n if (options.uv === undefined) {\n options.uv = true;\n }\n\n if (options.scramjet === undefined) {\n options.scramjet = true;\n }\n\n if (options.rh === undefined) {\n options.rh = true;\n }\n\n if (options.demoMode === undefined) {\n options.demoMode = false;\n }\n\n const rh: RammerheadProxy = createRammerhead();\n const rammerheadScopes: Array<string> = [\n \"/rammerhead.js\",\n \"/hammerhead.js\",\n \"/transport-worker.js\",\n \"/task.js\",\n \"/iframe-task.js\",\n \"/worker-hammerhead.js\",\n \"/messaging\",\n \"/sessionexists\",\n \"/deletesession\",\n \"/newsession\",\n \"/editsession\",\n \"/needpassword\",\n \"/syncLocalStorage\",\n \"/api/shuffleDict\",\n ];\n const rammerheadSession: RegExp = /^\\/[a-z0-9]{32}/;\n const shouldRouteRh = (req: Request): boolean => {\n const url: URL = new URL(req.url, \"http://0.0.0.0\");\n return (\n rammerheadScopes.includes(url.pathname) ||\n rammerheadSession.test(url.pathname)\n );\n };\n const routeRhRequest = (req: Request, res: Response) => {\n rh.emit(\"request\", req, res);\n };\n const routeRhUpgrade = (req: Request, socket: Socket, head: Buffer) => {\n rh.emit(\"upgrade\", req, socket, head);\n };\n\n const app: application = express();\n app.get(\"/chemical.js\", async function (req: Request, res: Response) {\n let chemicalMain: string = await readFileSync(\n resolve(__dirname, \"../client/chemical.js\"),\n \"utf8\"\n );\n\n if (options.default) {\n if ([\"uv\", \"rh\", \"scramjet\"].includes(options.default)) {\n chemicalMain =\n `const defaultService = \"${options.default}\";\\n\\n` + chemicalMain;\n } else {\n chemicalMain = `const defaultService = \"uv\";\\n\\n` + chemicalMain;\n console.error(\"Error: Chemical default option invalid.\");\n }\n } else {\n chemicalMain = `const defaultService = \"uv\";\\n\\n` + chemicalMain;\n }\n\n chemicalMain =\n \"const uvEnabled = \" + String(options.uv) + \";\\n\" + chemicalMain;\n chemicalMain =\n \"const scramjetEnabled = \" +\n String(options.scramjet) +\n \";\\n\" +\n chemicalMain;\n chemicalMain =\n \"const rammerheadEnabled = \" +\n String(options.rh) +\n \";\\n\" +\n chemicalMain;\n chemicalMain =\n \"const demoMode = \" + String(options.demoMode) + \";\\n\" + chemicalMain;\n chemicalMain =\n `const uvRandomPath = \"${String(uvRandomPath)}\";\\n` + chemicalMain;\n\n chemicalMain = \"(async () => {\\n\" + chemicalMain + \"\\n})();\";\n\n res.type(\"application/javascript\");\n return res.send(chemicalMain);\n });\n app.get(\"/chemical.sw.js\", async function (req: Request, res: Response) {\n let chemicalSW: string = await readFileSync(\n resolve(__dirname, \"../client/chemical.sw.js\"),\n \"utf8\"\n );\n\n chemicalSW =\n \"const uvEnabled = \" + String(options.uv) + \";\\n\" + chemicalSW;\n chemicalSW =\n \"const scramjetEnabled = \" +\n String(options.scramjet) +\n \";\\n\" +\n chemicalSW;\n chemicalSW =\n \"const rammerheadEnabled = \" +\n String(options.rh) +\n \";\\n\" +\n chemicalSW;\n chemicalSW =\n `const uvRandomPath = \"${String(uvRandomPath)}\";\\n` + chemicalSW;\n\n res.type(\"application/javascript\");\n return res.send(chemicalSW);\n });\n app.use(express.static(resolve(__dirname, \"../client\")));\n app.use(\"/baremux/\", express.static(baremuxPath));\n app.use(\"/libcurl/\", express.static(libcurlPath));\n app.use(\"/epoxy/\", express.static(epoxyPath));\n if (options.uv) {\n app.use(`/${uvRandomPath}/`, express.static(uvPath));\n }\n if (options.scramjet) {\n app.use(\"/scramjet/\", express.static(scramjetPath));\n }\n server.middlewares.use(app);\n\n server.middlewares.use((req: Request, res: Request, next: Next) => {\n if (options.rh && shouldRouteRh(req)) {\n routeRhRequest(req, res);\n } else {\n next();\n }\n });\n\n const upgraders = server.httpServer?.listeners(\"upgrade\") as ((\n ...args: any[]\n ) => void)[];\n\n for (const upgrader of upgraders) {\n server?.httpServer?.off(\"upgrade\", upgrader);\n }\n\n server?.httpServer?.on(\n \"upgrade\",\n (req: Request, socket: Socket, head: Buffer) => {\n if (req.url && req.url.endsWith(\"/wisp/\")) {\n if (options.wispOptions) {\n for (let option in options.wispOptions) {\n //@ts-ignore\n wisp.options[option] = options.wispOptions[option];\n }\n }\n wisp.routeRequest(req, socket, head);\n } else if (options.rh && shouldRouteRh(req)) {\n routeRhUpgrade(req, socket, head);\n } else {\n for (const upgrader of upgraders) {\n upgrader(req, socket, head);\n }\n }\n }\n );\n },\n});\n\nclass ChemicalBuild {\n constructor(options: BuildOptions) {\n if (options) {\n if (typeof options !== \"object\" || Array.isArray(options)) {\n options = {};\n console.error(\"Error: ChemicalBuild options invalid.\");\n }\n } else {\n options = {};\n }\n\n if (options.path === undefined) {\n options.path = \"dist\";\n }\n\n if (options.path.startsWith(\"/\")) {\n options.path = options.path.substring(1);\n }\n\n if (options.path.endsWith(\"/\")) {\n options.path = options.path.slice(0, -1);\n }\n\n if (options.uv === undefined) {\n options.uv = true;\n }\n\n if (options.scramjet === undefined) {\n options.scramjet = true;\n }\n\n if (options.rh === undefined) {\n options.rh = true;\n }\n\n if (options.demoMode === undefined) {\n options.demoMode = false;\n }\n\n this.options = options;\n }\n async write(deletePath: boolean = false) {\n if (!existsSync(resolve(this.options.path || \"\"))) {\n mkdirSync(resolve(this.options.path || \"\"), { recursive: true });\n } else {\n if (deletePath) {\n readdirSync(resolve(this.options.path || \"\")).forEach((file) =>\n rmSync(resolve(this.options.path || \"\", file), { recursive: true })\n );\n }\n }\n\n let chemicalMain: string = await readFileSync(\n resolve(__dirname, \"../client/chemical.js\"),\n \"utf8\"\n );\n\n if (this.options.default) {\n if ([\"uv\", \"rh\", \"scramjet\"].includes(this.options.default)) {\n chemicalMain =\n `const defaultService = \"${this.options.default}\";\\n\\n` +\n chemicalMain;\n } else {\n chemicalMain = `const defaultService = \"uv\";\\n\\n` + chemicalMain;\n console.error(\"Error: Chemical default option invalid.\");\n }\n } else {\n chemicalMain = `const defaultService = \"uv\";\\n\\n` + chemicalMain;\n }\n\n chemicalMain =\n \"const uvEnabled = \" + String(this.options.uv) + \";\\n\" + chemicalMain;\n chemicalMain =\n \"const scramjetEnabled = \" +\n String(this.options.scramjet) +\n \";\\n\" +\n chemicalMain;\n chemicalMain =\n \"const rammerheadEnabled = \" +\n String(this.options.rh) +\n \";\\n\" +\n chemicalMain;\n chemicalMain =\n \"const demoMode = \" +\n String(this.options.demoMode) +\n \";\\n\" +\n chemicalMain;\n chemicalMain =\n `const uvRandomPath = \"${String(uvRandomPath)}\";\\n` + chemicalMain;\n\n chemicalMain = \"(async () => {\\n\" + chemicalMain + \"\\n})();\";\n\n writeFileSync(\n resolve(this.options.path || \"\", \"chemical.js\"),\n chemicalMain\n );\n\n let chemicalSW: string = await readFileSync(\n resolve(__dirname, \"../client/chemical.sw.js\"),\n \"utf8\"\n );\n\n chemicalSW =\n \"const uvEnabled = \" + String(this.options.uv) + \";\\n\" + chemicalSW;\n chemicalSW =\n \"const scramjetEnabled = \" +\n String(this.options.scramjet) +\n \";\\n\" +\n chemicalSW;\n chemicalSW =\n \"const rammerheadEnabled = \" +\n String(this.options.rh) +\n \";\\n\" +\n chemicalSW;\n chemicalSW =\n `const uvRandomPath = \"${String(uvRandomPath)}\";\\n` + chemicalSW;\n\n writeFileSync(\n resolve(this.options.path || \"\", \"chemical.sw.js\"),\n chemicalSW\n );\n\n if (this.options.demoMode) {\n copyFileSync(\n resolve(__dirname, \"client/chemical.demo.html\"),\n resolve(this.options.path || \"\", \"chemical.demo.html\")\n );\n }\n\n cpSync(baremuxPath, resolve(this.options.path || \"\", \"baremux\"), {\n recursive: true,\n });\n cpSync(libcurlPath, resolve(this.options.path || \"\", \"libcurl\"), {\n recursive: true,\n });\n cpSync(epoxyPath, resolve(this.options.path || \"\", \"epoxy\"), {\n recursive: true,\n });\n cpSync(libcurlPath, resolve(this.options.path || \"\", \"libcurl\"), {\n recursive: true,\n });\n if (this.options.uv) {\n cpSync(uvPath, resolve(this.options.path || \"\", uvRandomPath), {\n recursive: true,\n });\n }\n }\n}\n\nexport { ChemicalServer, ChemicalBuild, ChemicalVitePlugin };\n","import { resolve, dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\nconst uvPath = resolve(__dirname, \"../ultraviolet/dist/\");\n\nexport { uvPath };\n","const uvRandomPath = \"PGtWY2ZzjT\";\n\nexport { uvRandomPath };"],"mappings":"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","names":["resolve","fileURLToPath","__dirname","resolve"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chemicaljs",
3
- "version": "2.4.1",
3
+ "version": "2.5.1",
4
4
  "description": "Easily create your own web proxy with no experience required.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -19,7 +19,8 @@
19
19
  "files": [
20
20
  "dist",
21
21
  "client",
22
- "config"
22
+ "config",
23
+ "ultraviolet"
23
24
  ],
24
25
  "repository": {
25
26
  "type": "git",
@@ -29,8 +30,9 @@
29
30
  "license": "AGPL-3.0-only",
30
31
  "scripts": {
31
32
  "update": "npx npm-check-updates -u && npm i",
32
- "build": "tsup",
33
- "publish": "npm run build && npm publish --access public"
33
+ "build-uv": "node build-uv.js",
34
+ "build": "npm run build-uv && tsup",
35
+ "publish": "npm publish --access public"
34
36
  },
35
37
  "dependencies": {
36
38
  "@mercuryworkshop/bare-mux": "^2.1.6",
@@ -40,6 +42,8 @@
40
42
  "@mercuryworkshop/wisp-js": "^0.3.3",
41
43
  "@titaniumnetwork-dev/ultraviolet": "^3.2.10",
42
44
  "express": "^4.21.1",
45
+ "glob": "^11.0.0",
46
+ "nanoid": "^5.0.8",
43
47
  "rammerhead": "https://github.com/chemicaljs/chemical/raw/main/rammerhead.tgz",
44
48
  "tsc": "^2.0.4",
45
49
  "typescript": "^5.6.3",