chemicaljs 2.3.1 → 2.4.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.cjs ADDED
@@ -0,0 +1,428 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/index.ts
31
+ var src_exports = {};
32
+ __export(src_exports, {
33
+ ChemicalBuild: () => ChemicalBuild,
34
+ ChemicalServer: () => ChemicalServer,
35
+ ChemicalVitePlugin: () => ChemicalVitePlugin
36
+ });
37
+ module.exports = __toCommonJS(src_exports);
38
+ var import_node_path = require("path");
39
+ var import_node_fs = require("fs");
40
+ var import_node_http = require("http");
41
+ var import_express = __toESM(require("express"), 1);
42
+ var import_server = require("@mercuryworkshop/wisp-js/server");
43
+ var import_node = require("@mercuryworkshop/bare-mux/node");
44
+ var import_libcurl_transport = require("@mercuryworkshop/libcurl-transport");
45
+ var import_epoxy_transport = require("@mercuryworkshop/epoxy-transport");
46
+ var import_ultraviolet = require("@titaniumnetwork-dev/ultraviolet");
47
+ var import_scramjet = require("@mercuryworkshop/scramjet");
48
+ var import_server2 = __toESM(require("rammerhead/src/server/index.js"), 1);
49
+ import_server.logging.set_level(import_server.logging.ERROR);
50
+ var ChemicalServer = class {
51
+ constructor(options) {
52
+ if (options) {
53
+ if (typeof options !== "object" || Array.isArray(options)) {
54
+ options = {};
55
+ console.error("Error: ChemicalServer options invalid.");
56
+ }
57
+ } else {
58
+ options = {};
59
+ }
60
+ if (options.uv === void 0) {
61
+ options.uv = true;
62
+ }
63
+ if (options.scramjet === void 0) {
64
+ options.scramjet = true;
65
+ }
66
+ if (options.rammerhead === void 0) {
67
+ options.rammerhead = true;
68
+ }
69
+ if (options.demoMode === void 0) {
70
+ options.demoMode = false;
71
+ }
72
+ this.options = options;
73
+ this.server = (0, import_node_http.createServer)();
74
+ this.app = (0, import_express.default)();
75
+ this.app.serveChemical = this.serveChemical;
76
+ return [this.app, this.listen];
77
+ }
78
+ serveChemical = () => {
79
+ const rh = (0, import_server2.default)();
80
+ const rammerheadScopes = [
81
+ "/rammerhead.js",
82
+ "/hammerhead.js",
83
+ "/transport-worker.js",
84
+ "/task.js",
85
+ "/iframe-task.js",
86
+ "/worker-hammerhead.js",
87
+ "/messaging",
88
+ "/sessionexists",
89
+ "/deletesession",
90
+ "/newsession",
91
+ "/editsession",
92
+ "/needpassword",
93
+ "/syncLocalStorage",
94
+ "/api/shuffleDict"
95
+ ];
96
+ const rammerheadSession = /^\/[a-z0-9]{32}/;
97
+ const shouldRouteRh = (req) => {
98
+ const url = new URL(req.url, "http://0.0.0.0");
99
+ return rammerheadScopes.includes(url.pathname) || rammerheadSession.test(url.pathname);
100
+ };
101
+ const routeRhRequest = (req, res) => {
102
+ rh.emit("request", req, res);
103
+ };
104
+ const routeRhUpgrade = (req, socket, head) => {
105
+ rh.emit("upgrade", req, socket, head);
106
+ };
107
+ this.app.get("/chemical.js", async (req, res) => {
108
+ let chemicalMain = await (0, import_node_fs.readFileSync)(
109
+ (0, import_node_path.resolve)(__dirname, "../client/chemical.js"),
110
+ "utf8"
111
+ );
112
+ if (this.options.default) {
113
+ if (["uv", "rammerhead", "scramjet"].includes(this.options.default)) {
114
+ chemicalMain = `const defaultService = "${this.options.default}";
115
+
116
+ ` + chemicalMain;
117
+ } else {
118
+ chemicalMain = `const defaultService = "uv";
119
+
120
+ ` + chemicalMain;
121
+ console.error("Error: Chemical default option invalid.");
122
+ }
123
+ } else {
124
+ chemicalMain = `const defaultService = "uv";
125
+
126
+ ` + chemicalMain;
127
+ }
128
+ chemicalMain = "const uvEnabled = " + String(this.options.uv) + ";\n" + chemicalMain;
129
+ chemicalMain = "const scramjetEnabled = " + String(this.options.scramjet) + ";\n" + chemicalMain;
130
+ chemicalMain = "const rammerheadEnabled = " + String(this.options.rammerhead) + ";\n" + chemicalMain;
131
+ chemicalMain = "const demoMode = " + String(this.options.demoMode) + ";\n" + chemicalMain;
132
+ chemicalMain = "(async () => {\n" + chemicalMain + "\n})();";
133
+ res.type("application/javascript");
134
+ return res.send(chemicalMain);
135
+ });
136
+ this.app.get("/chemical.sw.js", async (req, res) => {
137
+ let chemicalSW = await (0, import_node_fs.readFileSync)(
138
+ (0, import_node_path.resolve)(__dirname, "../client/chemical.sw.js"),
139
+ "utf8"
140
+ );
141
+ chemicalSW = "const uvEnabled = " + String(this.options.uv) + ";\n" + chemicalSW;
142
+ chemicalSW = "const scramjetEnabled = " + String(this.options.scramjet) + ";\n" + chemicalSW;
143
+ chemicalSW = "const rammerheadEnabled = " + String(this.options.rammerhead) + ";\n" + chemicalSW;
144
+ res.type("application/javascript");
145
+ return res.send(chemicalSW);
146
+ });
147
+ this.app.use(import_express.default.static((0, import_node_path.resolve)(__dirname, "../client")));
148
+ this.app.use("/baremux/", import_express.default.static(import_node.baremuxPath));
149
+ this.app.use("/libcurl/", import_express.default.static(import_libcurl_transport.libcurlPath));
150
+ this.app.use("/epoxy/", import_express.default.static(import_epoxy_transport.epoxyPath));
151
+ if (this.options.uv) {
152
+ this.app.use("/uv/", import_express.default.static((0, import_node_path.resolve)(__dirname, "config/uv")));
153
+ this.app.use("/uv/", import_express.default.static(import_ultraviolet.uvPath));
154
+ }
155
+ if (this.options.scramjet) {
156
+ this.app.use("/scramjet/", import_express.default.static(import_scramjet.scramjetPath));
157
+ }
158
+ this.server.on("request", (req, res) => {
159
+ if (this.options.rammerhead && shouldRouteRh(req)) {
160
+ routeRhRequest(req, res);
161
+ } else {
162
+ this.app(req, res);
163
+ }
164
+ });
165
+ this.server.on("upgrade", (req, socket, head) => {
166
+ if (req.url && req.url.endsWith("/wisp/")) {
167
+ if (this.options.wispOptions) {
168
+ for (let option in this.options.wispOptions) {
169
+ import_server.server.options[option] = this.options.wispOptions[option];
170
+ }
171
+ }
172
+ import_server.server.routeRequest(req, socket, head);
173
+ } else if (this.options.rammerhead && shouldRouteRh(req)) {
174
+ routeRhUpgrade(req, socket, head);
175
+ } else {
176
+ socket.end();
177
+ }
178
+ });
179
+ };
180
+ listen = (port, callback) => {
181
+ this.server.listen(port, callback);
182
+ };
183
+ };
184
+ var ChemicalVitePlugin = (options) => ({
185
+ name: "chemical-vite-plugin",
186
+ configureServer(server) {
187
+ if (options) {
188
+ if (typeof options !== "object" || Array.isArray(options)) {
189
+ options = {};
190
+ console.error("Error: ChemicalServer options invalid.");
191
+ }
192
+ } else {
193
+ options = {};
194
+ }
195
+ if (options.uv === void 0) {
196
+ options.uv = true;
197
+ }
198
+ if (options.scramjet === void 0) {
199
+ options.scramjet = true;
200
+ }
201
+ if (options.rammerhead === void 0) {
202
+ options.rammerhead = true;
203
+ }
204
+ if (options.demoMode === void 0) {
205
+ options.demoMode = false;
206
+ }
207
+ const rh = (0, import_server2.default)();
208
+ const rammerheadScopes = [
209
+ "/rammerhead.js",
210
+ "/hammerhead.js",
211
+ "/transport-worker.js",
212
+ "/task.js",
213
+ "/iframe-task.js",
214
+ "/worker-hammerhead.js",
215
+ "/messaging",
216
+ "/sessionexists",
217
+ "/deletesession",
218
+ "/newsession",
219
+ "/editsession",
220
+ "/needpassword",
221
+ "/syncLocalStorage",
222
+ "/api/shuffleDict"
223
+ ];
224
+ const rammerheadSession = /^\/[a-z0-9]{32}/;
225
+ const shouldRouteRh = (req) => {
226
+ const url = new URL(req.url, "http://0.0.0.0");
227
+ return rammerheadScopes.includes(url.pathname) || rammerheadSession.test(url.pathname);
228
+ };
229
+ const routeRhRequest = (req, res) => {
230
+ rh.emit("request", req, res);
231
+ };
232
+ const routeRhUpgrade = (req, socket, head) => {
233
+ rh.emit("upgrade", req, socket, head);
234
+ };
235
+ const app = (0, import_express.default)();
236
+ app.get("/chemical.js", async function(req, res) {
237
+ let chemicalMain = await (0, import_node_fs.readFileSync)(
238
+ (0, import_node_path.resolve)(__dirname, "../client/chemical.js"),
239
+ "utf8"
240
+ );
241
+ if (options.default) {
242
+ if (["uv", "rammerhead", "scramjet"].includes(options.default)) {
243
+ chemicalMain = `const defaultService = "${options.default}";
244
+
245
+ ` + chemicalMain;
246
+ } else {
247
+ chemicalMain = `const defaultService = "uv";
248
+
249
+ ` + chemicalMain;
250
+ console.error("Error: Chemical default option invalid.");
251
+ }
252
+ } else {
253
+ chemicalMain = `const defaultService = "uv";
254
+
255
+ ` + chemicalMain;
256
+ }
257
+ chemicalMain = "const uvEnabled = " + String(options.uv) + ";\n" + chemicalMain;
258
+ chemicalMain = "const scramjetEnabled = " + String(options.scramjet) + ";\n" + chemicalMain;
259
+ chemicalMain = "const rammerheadEnabled = " + String(options.rammerhead) + ";\n" + chemicalMain;
260
+ chemicalMain = "const demoMode = " + String(options.demoMode) + ";\n" + chemicalMain;
261
+ chemicalMain = "(async () => {\n" + chemicalMain + "\n})();";
262
+ res.type("application/javascript");
263
+ return res.send(chemicalMain);
264
+ });
265
+ app.get("/chemical.sw.js", async function(req, res) {
266
+ let chemicalSW = await (0, import_node_fs.readFileSync)(
267
+ (0, import_node_path.resolve)(__dirname, "../client/chemical.sw.js"),
268
+ "utf8"
269
+ );
270
+ chemicalSW = "const uvEnabled = " + String(options.uv) + ";\n" + chemicalSW;
271
+ chemicalSW = "const scramjetEnabled = " + String(options.scramjet) + ";\n" + chemicalSW;
272
+ chemicalSW = "const rammerheadEnabled = " + String(options.rammerhead) + ";\n" + chemicalSW;
273
+ res.type("application/javascript");
274
+ return res.send(chemicalSW);
275
+ });
276
+ app.use(import_express.default.static((0, import_node_path.resolve)(__dirname, "../client")));
277
+ app.use("/baremux/", import_express.default.static(import_node.baremuxPath));
278
+ app.use("/libcurl/", import_express.default.static(import_libcurl_transport.libcurlPath));
279
+ app.use("/epoxy/", import_express.default.static(import_epoxy_transport.epoxyPath));
280
+ if (options.uv) {
281
+ app.use("/uv/", import_express.default.static((0, import_node_path.resolve)(__dirname, "config/uv")));
282
+ app.use("/uv/", import_express.default.static(import_ultraviolet.uvPath));
283
+ }
284
+ if (options.scramjet) {
285
+ app.use("/scramjet/", import_express.default.static(import_scramjet.scramjetPath));
286
+ }
287
+ server.middlewares.use(app);
288
+ server.middlewares.use((req, res, next) => {
289
+ if (options.rammerhead && shouldRouteRh(req)) {
290
+ routeRhRequest(req, res);
291
+ } else {
292
+ next();
293
+ }
294
+ });
295
+ const upgraders = server.httpServer?.listeners("upgrade");
296
+ for (const upgrader of upgraders) {
297
+ server?.httpServer?.off("upgrade", upgrader);
298
+ }
299
+ server?.httpServer?.on(
300
+ "upgrade",
301
+ (req, socket, head) => {
302
+ if (req.url && req.url.endsWith("/wisp/")) {
303
+ if (options.wispOptions) {
304
+ for (let option in options.wispOptions) {
305
+ import_server.server.options[option] = options.wispOptions[option];
306
+ }
307
+ }
308
+ import_server.server.routeRequest(req, socket, head);
309
+ } else if (options.rammerhead && shouldRouteRh(req)) {
310
+ routeRhUpgrade(req, socket, head);
311
+ } else {
312
+ for (const upgrader of upgraders) {
313
+ upgrader(req, socket, head);
314
+ }
315
+ }
316
+ }
317
+ );
318
+ }
319
+ });
320
+ var ChemicalBuild = class {
321
+ constructor(options) {
322
+ if (options) {
323
+ if (typeof options !== "object" || Array.isArray(options)) {
324
+ options = {};
325
+ console.error("Error: ChemicalBuild options invalid.");
326
+ }
327
+ } else {
328
+ options = {};
329
+ }
330
+ if (options.path === void 0) {
331
+ options.path = "dist";
332
+ }
333
+ if (options.path.startsWith("/")) {
334
+ options.path = options.path.substring(1);
335
+ }
336
+ if (options.path.endsWith("/")) {
337
+ options.path = options.path.slice(0, -1);
338
+ }
339
+ if (options.uv === void 0) {
340
+ options.uv = true;
341
+ }
342
+ if (options.scramjet === void 0) {
343
+ options.scramjet = true;
344
+ }
345
+ if (options.rammerhead === void 0) {
346
+ options.rammerhead = true;
347
+ }
348
+ if (options.demoMode === void 0) {
349
+ options.demoMode = false;
350
+ }
351
+ this.options = options;
352
+ }
353
+ async write(deletePath = false) {
354
+ if (!(0, import_node_fs.existsSync)((0, import_node_path.resolve)(this.options.path || ""))) {
355
+ (0, import_node_fs.mkdirSync)((0, import_node_path.resolve)(this.options.path || ""), { recursive: true });
356
+ } else {
357
+ if (deletePath) {
358
+ (0, import_node_fs.readdirSync)((0, import_node_path.resolve)(this.options.path || "")).forEach(
359
+ (file) => (0, import_node_fs.rmSync)((0, import_node_path.resolve)(this.options.path || "", file), { recursive: true })
360
+ );
361
+ }
362
+ }
363
+ let chemicalMain = await (0, import_node_fs.readFileSync)(
364
+ (0, import_node_path.resolve)(__dirname, "../client/chemical.js"),
365
+ "utf8"
366
+ );
367
+ if (this.options.default) {
368
+ if (["uv", "rammerhead", "scramjet"].includes(this.options.default)) {
369
+ chemicalMain = `const defaultService = "${this.options.default}";
370
+
371
+ ` + chemicalMain;
372
+ } else {
373
+ chemicalMain = `const defaultService = "uv";
374
+
375
+ ` + chemicalMain;
376
+ console.error("Error: Chemical default option invalid.");
377
+ }
378
+ } else {
379
+ chemicalMain = `const defaultService = "uv";
380
+
381
+ ` + chemicalMain;
382
+ }
383
+ chemicalMain = "const uvEnabled = " + String(this.options.uv) + ";\n" + chemicalMain;
384
+ chemicalMain = "const scramjetEnabled = " + String(this.options.scramjet) + ";\n" + chemicalMain;
385
+ chemicalMain = "const rammerheadEnabled = " + String(this.options.rammerhead) + ";\n" + chemicalMain;
386
+ chemicalMain = "const demoMode = " + String(this.options.demoMode) + ";\n" + chemicalMain;
387
+ chemicalMain = "(async () => {\n" + chemicalMain + "\n})();";
388
+ (0, import_node_fs.writeFileSync)((0, import_node_path.resolve)(this.options.path || "", "chemical.js"), chemicalMain);
389
+ let chemicalSW = await (0, import_node_fs.readFileSync)(
390
+ (0, import_node_path.resolve)(__dirname, "../client/chemical.sw.js"),
391
+ "utf8"
392
+ );
393
+ chemicalSW = "const uvEnabled = " + String(this.options.uv) + ";\n" + chemicalSW;
394
+ chemicalSW = "const scramjetEnabled = " + String(this.options.scramjet) + ";\n" + chemicalSW;
395
+ chemicalSW = "const rammerheadEnabled = " + String(this.options.rammerhead) + ";\n" + chemicalSW;
396
+ (0, import_node_fs.writeFileSync)((0, import_node_path.resolve)(this.options.path || "", "chemical.sw.js"), chemicalSW);
397
+ if (this.options.demoMode) {
398
+ (0, import_node_fs.copyFileSync)(
399
+ (0, import_node_path.resolve)(__dirname, "client/chemical.demo.html"),
400
+ (0, import_node_path.resolve)(this.options.path || "", "chemical.demo.html")
401
+ );
402
+ }
403
+ (0, import_node_fs.cpSync)(import_node.baremuxPath, (0, import_node_path.resolve)(this.options.path || "", "baremux"), {
404
+ recursive: true
405
+ });
406
+ (0, import_node_fs.cpSync)(import_libcurl_transport.libcurlPath, (0, import_node_path.resolve)(this.options.path || "", "libcurl"), {
407
+ recursive: true
408
+ });
409
+ (0, import_node_fs.cpSync)(import_epoxy_transport.epoxyPath, (0, import_node_path.resolve)(this.options.path || "", "epoxy"), { recursive: true });
410
+ (0, import_node_fs.cpSync)(import_libcurl_transport.libcurlPath, (0, import_node_path.resolve)(this.options.path || "", "libcurl"), {
411
+ recursive: true
412
+ });
413
+ if (this.options.uv) {
414
+ (0, import_node_fs.cpSync)(import_ultraviolet.uvPath, (0, import_node_path.resolve)(this.options.path || "", "uv"), { recursive: true });
415
+ (0, import_node_fs.copyFileSync)(
416
+ (0, import_node_path.resolve)(__dirname, "config/uv/uv.config.js"),
417
+ (0, import_node_path.resolve)(this.options.path || "", "uv/uv.config.js")
418
+ );
419
+ }
420
+ }
421
+ };
422
+ // Annotate the CommonJS export names for ESM import in node:
423
+ 0 && (module.exports = {
424
+ ChemicalBuild,
425
+ ChemicalServer,
426
+ ChemicalVitePlugin
427
+ });
428
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAwB;AACxB,qBASO;AACP,uBAAqC;AAErC,qBAA8D;AAE9D,oBAAwC;AAExC,kBAA4B;AAC5B,+BAA4B;AAC5B,6BAA0B;AAC1B,yBAAuB;AACvB,sBAA6B;AAC7B,IAAAA,iBAAkD;AAGlD,sBAAQ,UAAU,sBAAQ,KAAK;AA6C/B,IAAM,iBAAN,MAAqB;AAAA,EACnB,YAAY,SAAkB;AAC5B,QAAI,SAAS;AACX,UAAI,OAAO,YAAY,YAAY,MAAM,QAAQ,OAAO,GAAG;AACzD,kBAAU,CAAC;AACX,gBAAQ,MAAM,wCAAwC;AAAA,MACxD;AAAA,IACF,OAAO;AACL,gBAAU,CAAC;AAAA,IACb;AAEA,QAAI,QAAQ,OAAO,QAAW;AAC5B,cAAQ,KAAK;AAAA,IACf;AAEA,QAAI,QAAQ,aAAa,QAAW;AAClC,cAAQ,WAAW;AAAA,IACrB;AAEA,QAAI,QAAQ,eAAe,QAAW;AACpC,cAAQ,aAAa;AAAA,IACvB;AAEA,QAAI,QAAQ,aAAa,QAAW;AAClC,cAAQ,WAAW;AAAA,IACrB;AAEA,SAAK,UAAU;AACf,SAAK,aAAS,+BAAa;AAC3B,SAAK,UAAM,eAAAC,SAAQ;AACnB,SAAK,IAAI,gBAAgB,KAAK;AAE9B,WAAO,CAAC,KAAK,KAAK,KAAK,MAAM;AAAA,EAC/B;AAAA,EACA,gBAAgB,MAAM;AACpB,UAAM,SAAsB,eAAAC,SAAiB;AAC7C,UAAM,mBAAkC;AAAA,MACtC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,UAAM,oBAA4B;AAClC,UAAM,gBAAgB,CAAC,QAA0B;AAC/C,YAAM,MAAM,IAAI,IAAI,IAAI,KAAK,gBAAgB;AAC7C,aACE,iBAAiB,SAAS,IAAI,QAAQ,KACtC,kBAAkB,KAAK,IAAI,QAAQ;AAAA,IAEvC;AACA,UAAM,iBAAiB,CAAC,KAAc,QAAkB;AACtD,SAAG,KAAK,WAAW,KAAK,GAAG;AAAA,IAC7B;AACA,UAAM,iBAAiB,CAAC,KAAc,QAAgB,SAAiB;AACrE,SAAG,KAAK,WAAW,KAAK,QAAQ,IAAI;AAAA,IACtC;AAEA,SAAK,IAAI,IAAI,gBAAgB,OAAO,KAAc,QAAkB;AAClE,UAAI,eAAe,UAAM;AAAA,YACvB,0BAAQ,WAAW,uBAAuB;AAAA,QAC1C;AAAA,MACF;AAEA,UAAI,KAAK,QAAQ,SAAS;AACxB,YAAI,CAAC,MAAM,cAAc,UAAU,EAAE,SAAS,KAAK,QAAQ,OAAO,GAAG;AACnE,yBACE,2BAA2B,KAAK,QAAQ,OAAO;AAAA;AAAA,IAC/C;AAAA,QACJ,OAAO;AACL,yBAAe;AAAA;AAAA,IAAqC;AACpD,kBAAQ,MAAM,yCAAyC;AAAA,QACzD;AAAA,MACF,OAAO;AACL,uBAAe;AAAA;AAAA,IAAqC;AAAA,MACtD;AAEA,qBACE,uBAAuB,OAAO,KAAK,QAAQ,EAAE,IAAI,QAAQ;AAC3D,qBACE,6BACA,OAAO,KAAK,QAAQ,QAAQ,IAC5B,QACA;AACF,qBACE,+BACA,OAAO,KAAK,QAAQ,UAAU,IAC9B,QACA;AACF,qBACE,sBACA,OAAO,KAAK,QAAQ,QAAQ,IAC5B,QACA;AAEF,qBAAe,qBAAqB,eAAe;AAEnD,UAAI,KAAK,wBAAwB;AACjC,aAAO,IAAI,KAAK,YAAY;AAAA,IAC9B,CAAC;AACD,SAAK,IAAI,IAAI,mBAAmB,OAAO,KAAc,QAAkB;AACrE,UAAI,aAAa,UAAM;AAAA,YACrB,0BAAQ,WAAW,0BAA0B;AAAA,QAC7C;AAAA,MACF;AAEA,mBACE,uBAAuB,OAAO,KAAK,QAAQ,EAAE,IAAI,QAAQ;AAC3D,mBACE,6BACA,OAAO,KAAK,QAAQ,QAAQ,IAC5B,QACA;AACF,mBACE,+BACA,OAAO,KAAK,QAAQ,UAAU,IAC9B,QACA;AAEF,UAAI,KAAK,wBAAwB;AACjC,aAAO,IAAI,KAAK,UAAU;AAAA,IAC5B,CAAC;AACD,SAAK,IAAI,IAAI,eAAAD,QAAQ,WAAO,0BAAQ,WAAW,WAAW,CAAC,CAAC;AAC5D,SAAK,IAAI,IAAI,aAAa,eAAAA,QAAQ,OAAO,uBAAW,CAAC;AACrD,SAAK,IAAI,IAAI,aAAa,eAAAA,QAAQ,OAAO,oCAAW,CAAC;AACrD,SAAK,IAAI,IAAI,WAAW,eAAAA,QAAQ,OAAO,gCAAS,CAAC;AACjD,QAAI,KAAK,QAAQ,IAAI;AACnB,WAAK,IAAI,IAAI,QAAQ,eAAAA,QAAQ,WAAO,0BAAQ,WAAW,WAAW,CAAC,CAAC;AACpE,WAAK,IAAI,IAAI,QAAQ,eAAAA,QAAQ,OAAO,yBAAM,CAAC;AAAA,IAC7C;AACA,QAAI,KAAK,QAAQ,UAAU;AACzB,WAAK,IAAI,IAAI,cAAc,eAAAA,QAAQ,OAAO,4BAAY,CAAC;AAAA,IACzD;AACA,SAAK,OAAO,GAAG,WAAW,CAAC,KAAc,QAAkB;AACzD,UAAI,KAAK,QAAQ,cAAc,cAAc,GAAG,GAAG;AACjD,uBAAe,KAAK,GAAG;AAAA,MACzB,OAAO;AACL,aAAK,IAAI,KAAK,GAAG;AAAA,MACnB;AAAA,IACF,CAAC;AACD,SAAK,OAAO,GAAG,WAAW,CAAC,KAAc,QAAgB,SAAiB;AACxE,UAAI,IAAI,OAAO,IAAI,IAAI,SAAS,QAAQ,GAAG;AACzC,YAAI,KAAK,QAAQ,aAAa;AAC5B,mBAAS,UAAU,KAAK,QAAQ,aAAa;AAE3C,0BAAAE,OAAK,QAAQ,MAAM,IAAI,KAAK,QAAQ,YAAY,MAAM;AAAA,UACxD;AAAA,QACF;AACA,sBAAAA,OAAK,aAAa,KAAK,QAAQ,IAAI;AAAA,MACrC,WAAW,KAAK,QAAQ,cAAc,cAAc,GAAG,GAAG;AACxD,uBAAe,KAAK,QAAQ,IAAI;AAAA,MAClC,OAAO;AACL,eAAO,IAAI;AAAA,MACb;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EACA,SAAS,CAAC,MAAc,aAAyB;AAC/C,SAAK,OAAO,OAAO,MAAM,QAAQ;AAAA,EACnC;AACF;AAEA,IAAM,qBAAqB,CAAC,aAAsB;AAAA,EAChD,MAAM;AAAA,EACN,gBAAgB,QAAuB;AACrC,QAAI,SAAS;AACX,UAAI,OAAO,YAAY,YAAY,MAAM,QAAQ,OAAO,GAAG;AACzD,kBAAU,CAAC;AACX,gBAAQ,MAAM,wCAAwC;AAAA,MACxD;AAAA,IACF,OAAO;AACL,gBAAU,CAAC;AAAA,IACb;AAEA,QAAI,QAAQ,OAAO,QAAW;AAC5B,cAAQ,KAAK;AAAA,IACf;AAEA,QAAI,QAAQ,aAAa,QAAW;AAClC,cAAQ,WAAW;AAAA,IACrB;AAEA,QAAI,QAAQ,eAAe,QAAW;AACpC,cAAQ,aAAa;AAAA,IACvB;AAEA,QAAI,QAAQ,aAAa,QAAW;AAClC,cAAQ,WAAW;AAAA,IACrB;AAEA,UAAM,SAAsB,eAAAD,SAAiB;AAC7C,UAAM,mBAAkC;AAAA,MACtC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,UAAM,oBAA4B;AAClC,UAAM,gBAAgB,CAAC,QAA0B;AAC/C,YAAM,MAAW,IAAI,IAAI,IAAI,KAAK,gBAAgB;AAClD,aACE,iBAAiB,SAAS,IAAI,QAAQ,KACtC,kBAAkB,KAAK,IAAI,QAAQ;AAAA,IAEvC;AACA,UAAM,iBAAiB,CAAC,KAAc,QAAkB;AACtD,SAAG,KAAK,WAAW,KAAK,GAAG;AAAA,IAC7B;AACA,UAAM,iBAAiB,CAAC,KAAc,QAAgB,SAAiB;AACrE,SAAG,KAAK,WAAW,KAAK,QAAQ,IAAI;AAAA,IACtC;AAEA,UAAM,UAAmB,eAAAD,SAAQ;AACjC,QAAI,IAAI,gBAAgB,eAAgB,KAAc,KAAe;AACnE,UAAI,eAAuB,UAAM;AAAA,YAC/B,0BAAQ,WAAW,uBAAuB;AAAA,QAC1C;AAAA,MACF;AAEA,UAAI,QAAQ,SAAS;AACnB,YAAI,CAAC,MAAM,cAAc,UAAU,EAAE,SAAS,QAAQ,OAAO,GAAG;AAC9D,yBACE,2BAA2B,QAAQ,OAAO;AAAA;AAAA,IAAW;AAAA,QACzD,OAAO;AACL,yBAAe;AAAA;AAAA,IAAqC;AACpD,kBAAQ,MAAM,yCAAyC;AAAA,QACzD;AAAA,MACF,OAAO;AACL,uBAAe;AAAA;AAAA,IAAqC;AAAA,MACtD;AAEA,qBACE,uBAAuB,OAAO,QAAQ,EAAE,IAAI,QAAQ;AACtD,qBACE,6BACA,OAAO,QAAQ,QAAQ,IACvB,QACA;AACF,qBACE,+BACA,OAAO,QAAQ,UAAU,IACzB,QACA;AACF,qBACE,sBAAsB,OAAO,QAAQ,QAAQ,IAAI,QAAQ;AAE3D,qBAAe,qBAAqB,eAAe;AAEnD,UAAI,KAAK,wBAAwB;AACjC,aAAO,IAAI,KAAK,YAAY;AAAA,IAC9B,CAAC;AACD,QAAI,IAAI,mBAAmB,eAAgB,KAAc,KAAe;AACtE,UAAI,aAAqB,UAAM;AAAA,YAC7B,0BAAQ,WAAW,0BAA0B;AAAA,QAC7C;AAAA,MACF;AAEA,mBACE,uBAAuB,OAAO,QAAQ,EAAE,IAAI,QAAQ;AACtD,mBACE,6BACA,OAAO,QAAQ,QAAQ,IACvB,QACA;AACF,mBACE,+BACA,OAAO,QAAQ,UAAU,IACzB,QACA;AAEF,UAAI,KAAK,wBAAwB;AACjC,aAAO,IAAI,KAAK,UAAU;AAAA,IAC5B,CAAC;AACD,QAAI,IAAI,eAAAA,QAAQ,WAAO,0BAAQ,WAAW,WAAW,CAAC,CAAC;AACvD,QAAI,IAAI,aAAa,eAAAA,QAAQ,OAAO,uBAAW,CAAC;AAChD,QAAI,IAAI,aAAa,eAAAA,QAAQ,OAAO,oCAAW,CAAC;AAChD,QAAI,IAAI,WAAW,eAAAA,QAAQ,OAAO,gCAAS,CAAC;AAC5C,QAAI,QAAQ,IAAI;AACd,UAAI,IAAI,QAAQ,eAAAA,QAAQ,WAAO,0BAAQ,WAAW,WAAW,CAAC,CAAC;AAC/D,UAAI,IAAI,QAAQ,eAAAA,QAAQ,OAAO,yBAAM,CAAC;AAAA,IACxC;AACA,QAAI,QAAQ,UAAU;AACpB,UAAI,IAAI,cAAc,eAAAA,QAAQ,OAAO,4BAAY,CAAC;AAAA,IACpD;AACA,WAAO,YAAY,IAAI,GAAG;AAE1B,WAAO,YAAY,IAAI,CAAC,KAAc,KAAc,SAAe;AACjE,UAAI,QAAQ,cAAc,cAAc,GAAG,GAAG;AAC5C,uBAAe,KAAK,GAAG;AAAA,MACzB,OAAO;AACL,aAAK;AAAA,MACP;AAAA,IACF,CAAC;AAED,UAAM,YAAY,OAAO,YAAY,UAAU,SAAS;AAExD,eAAW,YAAY,WAAW;AAChC,cAAQ,YAAY,IAAI,WAAW,QAAQ;AAAA,IAC7C;AAEA,YAAQ,YAAY;AAAA,MAClB;AAAA,MACA,CAAC,KAAc,QAAgB,SAAiB;AAC9C,YAAI,IAAI,OAAO,IAAI,IAAI,SAAS,QAAQ,GAAG;AACzC,cAAI,QAAQ,aAAa;AACvB,qBAAS,UAAU,QAAQ,aAAa;AAEtC,4BAAAE,OAAK,QAAQ,MAAM,IAAI,QAAQ,YAAY,MAAM;AAAA,YACnD;AAAA,UACF;AACA,wBAAAA,OAAK,aAAa,KAAK,QAAQ,IAAI;AAAA,QACrC,WAAW,QAAQ,cAAc,cAAc,GAAG,GAAG;AACnD,yBAAe,KAAK,QAAQ,IAAI;AAAA,QAClC,OAAO;AACL,qBAAW,YAAY,WAAW;AAChC,qBAAS,KAAK,QAAQ,IAAI;AAAA,UAC5B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,gBAAN,MAAoB;AAAA,EAClB,YAAY,SAAuB;AACjC,QAAI,SAAS;AACX,UAAI,OAAO,YAAY,YAAY,MAAM,QAAQ,OAAO,GAAG;AACzD,kBAAU,CAAC;AACX,gBAAQ,MAAM,uCAAuC;AAAA,MACvD;AAAA,IACF,OAAO;AACL,gBAAU,CAAC;AAAA,IACb;AAEA,QAAI,QAAQ,SAAS,QAAW;AAC9B,cAAQ,OAAO;AAAA,IACjB;AAEA,QAAI,QAAQ,KAAK,WAAW,GAAG,GAAG;AAChC,cAAQ,OAAO,QAAQ,KAAK,UAAU,CAAC;AAAA,IACzC;AAEA,QAAI,QAAQ,KAAK,SAAS,GAAG,GAAG;AAC9B,cAAQ,OAAO,QAAQ,KAAK,MAAM,GAAG,EAAE;AAAA,IACzC;AAEA,QAAI,QAAQ,OAAO,QAAW;AAC5B,cAAQ,KAAK;AAAA,IACf;AAEA,QAAI,QAAQ,aAAa,QAAW;AAClC,cAAQ,WAAW;AAAA,IACrB;AAEA,QAAI,QAAQ,eAAe,QAAW;AACpC,cAAQ,aAAa;AAAA,IACvB;AAEA,QAAI,QAAQ,aAAa,QAAW;AAClC,cAAQ,WAAW;AAAA,IACrB;AAEA,SAAK,UAAU;AAAA,EACjB;AAAA,EACA,MAAM,MAAM,aAAsB,OAAO;AACvC,QAAI,KAAC,+BAAW,0BAAQ,KAAK,QAAQ,QAAQ,EAAE,CAAC,GAAG;AACjD,wCAAU,0BAAQ,KAAK,QAAQ,QAAQ,EAAE,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,IACjE,OAAO;AACL,UAAI,YAAY;AACd,4CAAY,0BAAQ,KAAK,QAAQ,QAAQ,EAAE,CAAC,EAAE;AAAA,UAAQ,CAAC,aACrD,2BAAO,0BAAQ,KAAK,QAAQ,QAAQ,IAAI,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,QACpE;AAAA,MACF;AAAA,IACF;AAEA,QAAI,eAAuB,UAAM;AAAA,UAC/B,0BAAQ,WAAW,uBAAuB;AAAA,MAC1C;AAAA,IACF;AAEA,QAAI,KAAK,QAAQ,SAAS;AACxB,UAAI,CAAC,MAAM,cAAc,UAAU,EAAE,SAAS,KAAK,QAAQ,OAAO,GAAG;AACnE,uBACE,2BAA2B,KAAK,QAAQ,OAAO;AAAA;AAAA,IAC/C;AAAA,MACJ,OAAO;AACL,uBAAe;AAAA;AAAA,IAAqC;AACpD,gBAAQ,MAAM,yCAAyC;AAAA,MACzD;AAAA,IACF,OAAO;AACL,qBAAe;AAAA;AAAA,IAAqC;AAAA,IACtD;AAEA,mBACE,uBAAuB,OAAO,KAAK,QAAQ,EAAE,IAAI,QAAQ;AAC3D,mBACE,6BACA,OAAO,KAAK,QAAQ,QAAQ,IAC5B,QACA;AACF,mBACE,+BACA,OAAO,KAAK,QAAQ,UAAU,IAC9B,QACA;AACF,mBACE,sBACA,OAAO,KAAK,QAAQ,QAAQ,IAC5B,QACA;AAEF,mBAAe,qBAAqB,eAAe;AAEnD,0CAAc,0BAAQ,KAAK,QAAQ,QAAQ,IAAI,aAAa,GAAG,YAAY;AAE3E,QAAI,aAAqB,UAAM;AAAA,UAC7B,0BAAQ,WAAW,0BAA0B;AAAA,MAC7C;AAAA,IACF;AAEA,iBACE,uBAAuB,OAAO,KAAK,QAAQ,EAAE,IAAI,QAAQ;AAC3D,iBACE,6BACA,OAAO,KAAK,QAAQ,QAAQ,IAC5B,QACA;AACF,iBACE,+BACA,OAAO,KAAK,QAAQ,UAAU,IAC9B,QACA;AAEF,0CAAc,0BAAQ,KAAK,QAAQ,QAAQ,IAAI,gBAAgB,GAAG,UAAU;AAE5E,QAAI,KAAK,QAAQ,UAAU;AACzB;AAAA,YACE,0BAAQ,WAAW,2BAA2B;AAAA,YAC9C,0BAAQ,KAAK,QAAQ,QAAQ,IAAI,oBAAoB;AAAA,MACvD;AAAA,IACF;AAEA,+BAAO,6BAAa,0BAAQ,KAAK,QAAQ,QAAQ,IAAI,SAAS,GAAG;AAAA,MAC/D,WAAW;AAAA,IACb,CAAC;AACD,+BAAO,0CAAa,0BAAQ,KAAK,QAAQ,QAAQ,IAAI,SAAS,GAAG;AAAA,MAC/D,WAAW;AAAA,IACb,CAAC;AACD,+BAAO,sCAAW,0BAAQ,KAAK,QAAQ,QAAQ,IAAI,OAAO,GAAG,EAAE,WAAW,KAAK,CAAC;AAChF,+BAAO,0CAAa,0BAAQ,KAAK,QAAQ,QAAQ,IAAI,SAAS,GAAG;AAAA,MAC/D,WAAW;AAAA,IACb,CAAC;AACD,QAAI,KAAK,QAAQ,IAAI;AACnB,iCAAO,+BAAQ,0BAAQ,KAAK,QAAQ,QAAQ,IAAI,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;AAC1E;AAAA,YACE,0BAAQ,WAAW,wBAAwB;AAAA,YAC3C,0BAAQ,KAAK,QAAQ,QAAQ,IAAI,iBAAiB;AAAA,MACpD;AAAA,IACF;AAAA,EACF;AACF;","names":["import_server","express","createRammerhead","wisp"]}
@@ -0,0 +1,57 @@
1
+ import { Server } from 'node:http';
2
+ import { application } from 'express';
3
+ import { ViteDevServer } from 'vite';
4
+
5
+ interface WispOptions {
6
+ hostname_blacklist?: Array<RegExp>;
7
+ hostname_whitelist?: Array<RegExp>;
8
+ port_blacklist?: (number | Array<number>)[];
9
+ port_whitelist?: (number | Array<number>)[];
10
+ allow_direct_ip?: boolean;
11
+ allow_private_ips?: boolean;
12
+ allow_loopback_ips?: boolean;
13
+ stream_limit_per_host?: number;
14
+ stream_limit_total?: number;
15
+ allow_udp_streams?: boolean;
16
+ allow_tcp_streams?: boolean;
17
+ dns_ttl?: number;
18
+ dns_method?: "lookup" | "resolve";
19
+ dns_servers?: Array<string>;
20
+ dns_result_order?: "ipv4first" | "ipv6first" | "verbatim";
21
+ parse_real_ip?: boolean;
22
+ parse_real_ip_from?: Array<string>;
23
+ }
24
+ interface Options {
25
+ uv?: boolean;
26
+ scramjet?: boolean;
27
+ rammerhead?: boolean;
28
+ demoMode?: boolean;
29
+ default?: string;
30
+ wispOptions?: WispOptions;
31
+ }
32
+ interface BuildOptions extends Options {
33
+ path?: string;
34
+ }
35
+ interface ChemicalServer {
36
+ options: Options;
37
+ server: Server;
38
+ app: application;
39
+ }
40
+ declare class ChemicalServer {
41
+ constructor(options: Options);
42
+ serveChemical: () => void;
43
+ listen: (port: number, callback: () => void) => void;
44
+ }
45
+ declare const ChemicalVitePlugin: (options: Options) => {
46
+ name: string;
47
+ configureServer(server: ViteDevServer): void;
48
+ };
49
+ interface ChemicalBuild {
50
+ options: BuildOptions;
51
+ }
52
+ declare class ChemicalBuild {
53
+ constructor(options: BuildOptions);
54
+ write(deletePath?: boolean): Promise<void>;
55
+ }
56
+
57
+ export { ChemicalBuild, ChemicalServer, ChemicalVitePlugin };
@@ -0,0 +1,57 @@
1
+ import { Server } from 'node:http';
2
+ import { application } from 'express';
3
+ import { ViteDevServer } from 'vite';
4
+
5
+ interface WispOptions {
6
+ hostname_blacklist?: Array<RegExp>;
7
+ hostname_whitelist?: Array<RegExp>;
8
+ port_blacklist?: (number | Array<number>)[];
9
+ port_whitelist?: (number | Array<number>)[];
10
+ allow_direct_ip?: boolean;
11
+ allow_private_ips?: boolean;
12
+ allow_loopback_ips?: boolean;
13
+ stream_limit_per_host?: number;
14
+ stream_limit_total?: number;
15
+ allow_udp_streams?: boolean;
16
+ allow_tcp_streams?: boolean;
17
+ dns_ttl?: number;
18
+ dns_method?: "lookup" | "resolve";
19
+ dns_servers?: Array<string>;
20
+ dns_result_order?: "ipv4first" | "ipv6first" | "verbatim";
21
+ parse_real_ip?: boolean;
22
+ parse_real_ip_from?: Array<string>;
23
+ }
24
+ interface Options {
25
+ uv?: boolean;
26
+ scramjet?: boolean;
27
+ rammerhead?: boolean;
28
+ demoMode?: boolean;
29
+ default?: string;
30
+ wispOptions?: WispOptions;
31
+ }
32
+ interface BuildOptions extends Options {
33
+ path?: string;
34
+ }
35
+ interface ChemicalServer {
36
+ options: Options;
37
+ server: Server;
38
+ app: application;
39
+ }
40
+ declare class ChemicalServer {
41
+ constructor(options: Options);
42
+ serveChemical: () => void;
43
+ listen: (port: number, callback: () => void) => void;
44
+ }
45
+ declare const ChemicalVitePlugin: (options: Options) => {
46
+ name: string;
47
+ configureServer(server: ViteDevServer): void;
48
+ };
49
+ interface ChemicalBuild {
50
+ options: BuildOptions;
51
+ }
52
+ declare class ChemicalBuild {
53
+ constructor(options: BuildOptions);
54
+ write(deletePath?: boolean): Promise<void>;
55
+ }
56
+
57
+ export { ChemicalBuild, ChemicalServer, ChemicalVitePlugin };