@fkn/lib 0.4.1 → 0.4.3
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/index.cjs +5 -5
- package/index.d.ts +47 -7
- package/index.js +341 -239
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -1,56 +1,77 @@
|
|
|
1
1
|
import { d as e, f as t, g as n, i as r, l as i, m as a, p as o, r as s, t as c, u as l } from "./locator-DUbu14FW.js";
|
|
2
|
-
import { createTypedEventTarget as
|
|
3
|
-
import { Stream as
|
|
4
|
-
import { EventEmitter as
|
|
5
|
-
import { Address4 as
|
|
6
|
-
import { Buffer as
|
|
2
|
+
import { createTypedEventTarget as u, expose as ee, relay as te } from "osra";
|
|
3
|
+
import { Stream as d } from "stream";
|
|
4
|
+
import { EventEmitter as ne } from "events";
|
|
5
|
+
import { Address4 as f, Address6 as p } from "ip-address";
|
|
6
|
+
import { Buffer as m } from "buffer";
|
|
7
7
|
//#region node_modules/@mfkn/web-extension/lib/utils/extension.js
|
|
8
|
-
var
|
|
9
|
-
typeof document < "u" && document.addEventListener(
|
|
10
|
-
|
|
8
|
+
var re = "FKN_WEB_EXTENSION_MAIN_WORLD_CONTENT_SCRIPT_ENABLED_EVENT_KEY", ie = "fknExtension", h = u();
|
|
9
|
+
typeof document < "u" && document.addEventListener(re, (e) => {
|
|
10
|
+
h.dispatchEvent(new CustomEvent("statuschange", { detail: { enabled: e.detail.enabled } }));
|
|
11
11
|
});
|
|
12
|
-
var
|
|
13
|
-
|
|
14
|
-
},
|
|
15
|
-
if (
|
|
12
|
+
var g = () => typeof document > "u" ? !1 : document.documentElement.dataset[ie] === "true", _ = null, v = (e) => {
|
|
13
|
+
_ = e;
|
|
14
|
+
}, ae = 150, y = (e = 1e3) => new Promise((t, n) => {
|
|
15
|
+
if (g()) return t();
|
|
16
16
|
let r, i = (e) => {
|
|
17
17
|
clearTimeout(r), s.disconnect(), document.removeEventListener("readystatechange", c), e();
|
|
18
18
|
}, a = () => i(async () => {
|
|
19
|
-
if (
|
|
19
|
+
if (_ && (await _().catch(() => {}), g())) return t();
|
|
20
20
|
n(/* @__PURE__ */ Error("The FKN WebExtension is not installed, enabled or not exposed on this page."));
|
|
21
21
|
}), o = () => {
|
|
22
|
-
clearTimeout(r), r = setTimeout(() =>
|
|
22
|
+
clearTimeout(r), r = setTimeout(() => g() ? i(t) : a(), ae);
|
|
23
23
|
}, s = new MutationObserver(() => {
|
|
24
|
-
|
|
24
|
+
g() && i(t);
|
|
25
25
|
}), c = () => {
|
|
26
|
-
document.readyState === "complete" && !
|
|
26
|
+
document.readyState === "complete" && !g() && o();
|
|
27
27
|
};
|
|
28
28
|
if (r = setTimeout(a, e), s.observe(document.documentElement, {
|
|
29
29
|
attributes: !0,
|
|
30
30
|
attributeFilter: ["data-fkn-extension"]
|
|
31
31
|
}), document.addEventListener("readystatechange", c), document.readyState === "complete") return o();
|
|
32
|
-
|
|
33
|
-
}),
|
|
34
|
-
await
|
|
32
|
+
g() && i(t);
|
|
33
|
+
}), oe, b = new Proxy({}, { get: (e, t) => async (...e) => {
|
|
34
|
+
await y(), oe ??= ee({}, {
|
|
35
35
|
transport: window,
|
|
36
36
|
revivableModules: i
|
|
37
37
|
});
|
|
38
|
-
let n = (await
|
|
38
|
+
let n = (await oe)[t];
|
|
39
39
|
return n(...e);
|
|
40
|
-
} }),
|
|
40
|
+
} }), se = {
|
|
41
41
|
scope: "network.fetch",
|
|
42
42
|
category: "network",
|
|
43
43
|
severity: 0,
|
|
44
44
|
title: "Fetch data from other sites",
|
|
45
45
|
description: "Lets the app download public data from other websites directly, past the usual cross-origin limits."
|
|
46
|
-
},
|
|
46
|
+
}, ce = {
|
|
47
47
|
scope: "network.fetchCredentialed",
|
|
48
48
|
category: "network",
|
|
49
49
|
severity: 3,
|
|
50
50
|
unsafe: !0,
|
|
51
51
|
title: "Fetch from other sites, signed in as you",
|
|
52
52
|
description: "Lets the app fetch other sites using your logged-in session cookies, so it can read data only you should see."
|
|
53
|
-
},
|
|
53
|
+
}, le = {
|
|
54
|
+
scope: "network.fetchLocal",
|
|
55
|
+
category: "network",
|
|
56
|
+
severity: 3,
|
|
57
|
+
unsafe: !0,
|
|
58
|
+
title: "Access devices on your local network",
|
|
59
|
+
description: "Lets the app reach devices and services on your home or work network, which websites normally cannot touch."
|
|
60
|
+
}, ue = (e) => {
|
|
61
|
+
let t = e.match(/^(\d+)\.(\d+)\.\d+\.\d+$/);
|
|
62
|
+
if (!t) return !1;
|
|
63
|
+
let [n, r] = [Number(t[1]), Number(t[2])];
|
|
64
|
+
return n === 10 || n === 127 || n === 0 || n === 169 && r === 254 || n === 172 && r >= 16 && r <= 31 || n === 192 && r === 168;
|
|
65
|
+
}, de = (e) => {
|
|
66
|
+
let t;
|
|
67
|
+
try {
|
|
68
|
+
t = new URL(e);
|
|
69
|
+
} catch {
|
|
70
|
+
return !1;
|
|
71
|
+
}
|
|
72
|
+
let n = t.hostname.replace(/^\[|\]$/g, "").toLowerCase().replace(/\.$/, "");
|
|
73
|
+
return n === "localhost" || n.endsWith(".localhost") || n.endsWith(".local") || n.endsWith(".internal") || n.endsWith(".home.arpa") ? !0 : n.includes(":") ? n === "::" || n === "::1" || n.startsWith("fc") || n.startsWith("fd") || /^fe[89ab]/.test(n) || n.startsWith("::ffff:") : ue(n);
|
|
74
|
+
}, fe = ["fkn.app", "fkn.dev"], x = (e) => {
|
|
54
75
|
let t;
|
|
55
76
|
try {
|
|
56
77
|
t = new URL(e);
|
|
@@ -59,46 +80,46 @@ var h = () => typeof document > "u" ? !1 : document.documentElement.dataset[ae]
|
|
|
59
80
|
}
|
|
60
81
|
if (t.protocol === "chrome-extension:" || t.protocol === "moz-extension:") return !0;
|
|
61
82
|
let n = t.hostname;
|
|
62
|
-
return
|
|
63
|
-
},
|
|
64
|
-
if (
|
|
65
|
-
},
|
|
83
|
+
return fe.some((e) => n === e || n.endsWith(`.${e}`));
|
|
84
|
+
}, S = (e) => {
|
|
85
|
+
if (x(e)) throw Error("fetch: refusing to target the extension's own pages or FKN platform domains");
|
|
86
|
+
}, pe = ["origin", "referer"], me = (e) => {
|
|
66
87
|
if (!e?.headers) return;
|
|
67
|
-
let t = new Headers(e.headers), n =
|
|
88
|
+
let t = new Headers(e.headers), n = pe.map((e) => {
|
|
68
89
|
let n = t.get(e);
|
|
69
90
|
return n === null ? void 0 : [e, n];
|
|
70
91
|
}).filter((e) => e !== void 0);
|
|
71
92
|
return n.length ? n : void 0;
|
|
72
|
-
},
|
|
93
|
+
}, C = async (e, t) => {
|
|
73
94
|
let n = new Request(e, t);
|
|
74
|
-
|
|
95
|
+
S(n.url);
|
|
75
96
|
let r = n.body ? await n.arrayBuffer() : null;
|
|
76
|
-
return
|
|
97
|
+
return b.proxyFetch({
|
|
77
98
|
url: n.url,
|
|
78
99
|
method: n.method,
|
|
79
100
|
headers: [...n.headers],
|
|
80
101
|
body: r,
|
|
81
102
|
credentials: t?.credentials === "include" ? "include" : "omit",
|
|
82
103
|
redirect: n.redirect,
|
|
83
|
-
unsafeHeaders:
|
|
104
|
+
unsafeHeaders: me(t),
|
|
84
105
|
reason: t?.reason,
|
|
85
106
|
signal: t?.signal ?? void 0
|
|
86
107
|
});
|
|
87
|
-
},
|
|
108
|
+
}, he = {
|
|
88
109
|
scope: "network.readCookie",
|
|
89
110
|
category: "network",
|
|
90
111
|
severity: 3,
|
|
91
112
|
unsafe: !0,
|
|
92
113
|
title: "Read a site’s cookie",
|
|
93
114
|
description: "Lets the app read a named cookie from another site, which can include the login token only that site should see."
|
|
94
|
-
},
|
|
115
|
+
}, ge = { get: (e) => b.getCookie(e) }, _e = {
|
|
95
116
|
scope: "network.modifyRequestHeaders",
|
|
96
117
|
category: "network",
|
|
97
118
|
severity: 2,
|
|
98
119
|
unsafe: !0,
|
|
99
120
|
title: "Rewrite request headers to other sites",
|
|
100
121
|
description: "Lets the app set or remove headers (like Origin and Referer) on this page’s own requests to the listed sites."
|
|
101
|
-
},
|
|
122
|
+
}, ve = (e) => b.setRequestHeaderRule(e), ye = (e) => b.removeRequestHeaderRule({ ruleId: e });
|
|
102
123
|
(() => {
|
|
103
124
|
let e = {}, t = [...c.selectorModules, ...r.selectorModules];
|
|
104
125
|
for (let n of t) n.render && !(n.type in e) && (e[n.type] = n.render);
|
|
@@ -106,7 +127,7 @@ var h = () => typeof document > "u" ? !1 : document.documentElement.dataset[ae]
|
|
|
106
127
|
})();
|
|
107
128
|
//#endregion
|
|
108
129
|
//#region node_modules/@mfkn/web-extension/lib/lib/frame.js
|
|
109
|
-
var
|
|
130
|
+
var w = "FKN_WEB_EXTENSION_ATTACH_FRAME_EVENT_KEY", T = (e) => {
|
|
110
131
|
if (!e || e === "about:blank") return !1;
|
|
111
132
|
let t;
|
|
112
133
|
try {
|
|
@@ -118,28 +139,28 @@ var C = "FKN_WEB_EXTENSION_ATTACH_FRAME_EVENT_KEY", w = (e) => {
|
|
|
118
139
|
if (t.protocol === "about:") return !1;
|
|
119
140
|
let n = t.hostname;
|
|
120
141
|
return n === "fkn.app" || n.endsWith(".fkn.app");
|
|
121
|
-
},
|
|
122
|
-
if (
|
|
123
|
-
},
|
|
142
|
+
}, E = (e) => {
|
|
143
|
+
if (T(e)) throw Error("attachFrame: refusing to target the extension's own pages or fkn.app");
|
|
144
|
+
}, be = {
|
|
124
145
|
scope: "embed.iframe",
|
|
125
146
|
category: "embed",
|
|
126
147
|
severity: 0,
|
|
127
148
|
title: "Load another website inside this app",
|
|
128
149
|
description: "Lets the app embed external pages directly inside its own view."
|
|
129
|
-
},
|
|
150
|
+
}, xe = {
|
|
130
151
|
scope: "embed.open",
|
|
131
152
|
category: "embed",
|
|
132
153
|
severity: 0,
|
|
133
154
|
title: "Open a website inside this app",
|
|
134
155
|
description: "Lets the app navigate to another site without leaving its window."
|
|
135
|
-
},
|
|
156
|
+
}, Se = async ({ iframe: e, domains: t = [] }) => {
|
|
136
157
|
let n = crypto.randomUUID();
|
|
137
|
-
if (
|
|
138
|
-
e.dispatchEvent(new CustomEvent(
|
|
139
|
-
let { executeLocator: r, ensureLocatorPermission: i, goto: a } = await
|
|
158
|
+
if (E(e.src), await y(), !e.isConnected) throw Error("attachFrame: the iframe must be connected to the document before attaching");
|
|
159
|
+
e.dispatchEvent(new CustomEvent(w, { detail: n }));
|
|
160
|
+
let { executeLocator: r, ensureLocatorPermission: i, goto: a } = await b.attachFrame({
|
|
140
161
|
marker: n,
|
|
141
162
|
domains: t
|
|
142
|
-
}), o = s(r, i), c = (e, t = {}) => (
|
|
163
|
+
}), o = s(r, i), c = (e, t = {}) => (E(e), a({
|
|
143
164
|
url: e,
|
|
144
165
|
...t
|
|
145
166
|
})), l = () => e.src;
|
|
@@ -148,22 +169,22 @@ var C = "FKN_WEB_EXTENSION_ATTACH_FRAME_EVENT_KEY", w = (e) => {
|
|
|
148
169
|
goto: c,
|
|
149
170
|
url: l
|
|
150
171
|
};
|
|
151
|
-
},
|
|
172
|
+
}, Ce = { request: (e) => b.requestPermissions(e.map((e) => ({
|
|
152
173
|
key: e.key,
|
|
153
174
|
scope: e.scope ?? "",
|
|
154
175
|
reason: e.reason
|
|
155
|
-
}))) },
|
|
176
|
+
}))) }, we = 32, Te = typeof CSS < "u" && CSS.supports("clip-path", "path('M0 0H1V1H0Z')"), Ee = (e) => {
|
|
156
177
|
let t = e.style;
|
|
157
178
|
t.setProperty("display", "block", "important"), t.setProperty("position", "fixed", "important"), t.setProperty("top", "0", "important"), t.setProperty("left", "0", "important"), t.setProperty("width", "100%", "important"), t.setProperty("height", "100%", "important"), t.setProperty("border", "none", "important"), t.setProperty("clip-path", "inset(100%)", "important"), t.setProperty("background", "transparent"), t.setProperty("color-scheme", "normal"), t.setProperty("z-index", "2147483647"), e.setAttribute("title", "FKN");
|
|
158
|
-
},
|
|
159
|
-
if (!
|
|
179
|
+
}, De = ({ x: e, y: t, width: n, height: r }) => `M${e} ${t}h${n}v${r}h${-n}Z`, Oe = (e, { modal: t, rects: n }) => {
|
|
180
|
+
if (!Te) {
|
|
160
181
|
let r = t || n.length > 0;
|
|
161
182
|
e.style.setProperty("pointer-events", r ? "auto" : "none", "important"), e.style.setProperty("visibility", r ? "visible" : "hidden", "important");
|
|
162
183
|
return;
|
|
163
184
|
}
|
|
164
|
-
let r = t ? "none" : n.length === 0 ? "inset(100%)" : `path('${n.map(
|
|
185
|
+
let r = t ? "none" : n.length === 0 ? "inset(100%)" : `path('${n.map(De).join("")}')`, i = r === "none" || CSS.supports("clip-path", r) ? r : "inset(100%)";
|
|
165
186
|
e.style.setProperty("clip-path", i, "important");
|
|
166
|
-
},
|
|
187
|
+
}, ke = (e) => {
|
|
167
188
|
if (typeof e != "object" || !e) return null;
|
|
168
189
|
let { x: t, y: n, width: r, height: i } = e;
|
|
169
190
|
if (![
|
|
@@ -172,52 +193,52 @@ var C = "FKN_WEB_EXTENSION_ATTACH_FRAME_EVENT_KEY", w = (e) => {
|
|
|
172
193
|
r,
|
|
173
194
|
i
|
|
174
195
|
].every((e) => typeof e == "number" && Number.isFinite(e))) return null;
|
|
175
|
-
let a = window.innerWidth, o = window.innerHeight, s = Math.max(0, Math.min(Math.round(t), a)), c = Math.max(0, Math.min(Math.round(n), o)), l = Math.max(s, Math.min(Math.round(t + r), a)),
|
|
196
|
+
let a = window.innerWidth, o = window.innerHeight, s = Math.max(0, Math.min(Math.round(t), a)), c = Math.max(0, Math.min(Math.round(n), o)), l = Math.max(s, Math.min(Math.round(t + r), a)), u = Math.max(c, Math.min(Math.round(n + i), o));
|
|
176
197
|
return {
|
|
177
198
|
x: s,
|
|
178
199
|
y: c,
|
|
179
200
|
width: l - s,
|
|
180
|
-
height:
|
|
201
|
+
height: u - c
|
|
181
202
|
};
|
|
182
|
-
},
|
|
203
|
+
}, Ae = (e) => {
|
|
183
204
|
if (typeof e != "object" || !e) return null;
|
|
184
|
-
let t = e, n = (Array.isArray(t.rects) ? t.rects.slice(0,
|
|
205
|
+
let t = e, n = (Array.isArray(t.rects) ? t.rects.slice(0, we) : []).map(ke).filter((e) => e !== null && e.width > 0 && e.height > 0);
|
|
185
206
|
return {
|
|
186
207
|
modal: t.modal === !0,
|
|
187
208
|
rects: n
|
|
188
209
|
};
|
|
189
|
-
},
|
|
190
|
-
|
|
210
|
+
}, D = null, je = () => D !== null, Me = (e) => {
|
|
211
|
+
Ee(e), Oe(e, {
|
|
191
212
|
modal: !1,
|
|
192
213
|
rects: []
|
|
193
|
-
}),
|
|
194
|
-
},
|
|
195
|
-
if (!
|
|
196
|
-
let t =
|
|
197
|
-
t &&
|
|
198
|
-
},
|
|
199
|
-
!
|
|
200
|
-
var A =
|
|
201
|
-
A && O &&
|
|
214
|
+
}), D = e;
|
|
215
|
+
}, Ne = (e) => {
|
|
216
|
+
if (!D) return;
|
|
217
|
+
let t = Ae(e);
|
|
218
|
+
t && Oe(D, t);
|
|
219
|
+
}, Pe = "https://fkn.app", O = typeof globalThis < "u" && globalThis.document ? globalThis.document : void 0, Fe = O?.querySelector(`iframe[src="${Pe}/api"]`) ?? null, k = O?.createElement("iframe") ?? null;
|
|
220
|
+
!Fe && k && O && (k.src = `${Pe}/api`, O.body.appendChild(k));
|
|
221
|
+
var A = Fe ?? k, Ie = A?.contentWindow ?? null;
|
|
222
|
+
A && O && Me(A);
|
|
202
223
|
var j = (() => {
|
|
203
|
-
if (typeof window < "u") return
|
|
224
|
+
if (typeof window < "u") return Ie ? {
|
|
204
225
|
receive: window,
|
|
205
|
-
emit:
|
|
226
|
+
emit: Ie
|
|
206
227
|
} : void 0;
|
|
207
228
|
if (typeof self < "u") return {
|
|
208
229
|
receive: self,
|
|
209
230
|
emit: self
|
|
210
231
|
};
|
|
211
|
-
})(),
|
|
232
|
+
})(), Le = j !== void 0, M = j ? ee({}, {
|
|
212
233
|
key: "fkn-api",
|
|
213
234
|
transport: j
|
|
214
235
|
}) : new Promise(() => {});
|
|
215
236
|
M.then((e) => {
|
|
216
|
-
|
|
237
|
+
je() && e.overlay.setHost(Ne);
|
|
217
238
|
}, () => {});
|
|
218
239
|
//#endregion
|
|
219
240
|
//#region src/lib/fkn-target.ts
|
|
220
|
-
var
|
|
241
|
+
var Re = ["fkn.app", "fkn.dev"], ze = (e) => {
|
|
221
242
|
let t = typeof e == "string" ? e : e instanceof URL ? e.href : e.url, n;
|
|
222
243
|
try {
|
|
223
244
|
n = new URL(t);
|
|
@@ -225,8 +246,8 @@ var Fe = ["fkn.app", "fkn.dev"], Ie = (e) => {
|
|
|
225
246
|
return;
|
|
226
247
|
}
|
|
227
248
|
let r = n.hostname;
|
|
228
|
-
if (
|
|
229
|
-
},
|
|
249
|
+
if (Re.some((e) => r === e || r.endsWith(`.${e}`))) throw Error(`fetch refuses FKN platform domains (${r})`);
|
|
250
|
+
}, Be = (e, t) => (ze(e), M.then((n) => n.cloud.fetch(e, t))), Ve = async () => {
|
|
230
251
|
let e = await M.then((e) => e.cloud.quota());
|
|
231
252
|
return {
|
|
232
253
|
premium: e.premium,
|
|
@@ -238,9 +259,9 @@ var Fe = ["fkn.app", "fkn.dev"], Ie = (e) => {
|
|
|
238
259
|
bytesPerSecond: e.bytesPerSecond,
|
|
239
260
|
bitsPerSecond: e.bytesPerSecond * 8
|
|
240
261
|
};
|
|
241
|
-
},
|
|
262
|
+
}, He = /* @__PURE__ */ n({ lookup: () => Ue }), Ue = (e, t) => M.then((n) => n.cloud.dns.lookup(e, t)), We = new TextEncoder();
|
|
242
263
|
new TextDecoder();
|
|
243
|
-
var N = (e) =>
|
|
264
|
+
var N = (e) => f.isValid(e), P = (e) => p.isValid(e), Ge = (e) => N(e) ? 4 : P(e) ? 6 : 0, Ke = (...e) => {
|
|
244
265
|
if (typeof e[0] == "string") throw Error("FKN WebVPN does not support IPC connections");
|
|
245
266
|
let t = typeof e.at(-1) == "function" ? e.at(-1) : void 0;
|
|
246
267
|
return e[0] && typeof e[0] == "object" ? {
|
|
@@ -251,7 +272,7 @@ var N = (e) => d.isValid(e), P = (e) => f.isValid(e), He = (e) => N(e) ? 4 : P(e
|
|
|
251
272
|
host: typeof e[1] == "string" ? e[1] : void 0,
|
|
252
273
|
callback: t
|
|
253
274
|
};
|
|
254
|
-
},
|
|
275
|
+
}, qe = (...e) => {
|
|
255
276
|
let t = typeof e.at(-1) == "function" ? e.at(-1) : void 0, n = e[0] ?? 0, r = typeof e[1] == "string" ? e[1] : void 0;
|
|
256
277
|
return typeof e[0] == "object" ? {
|
|
257
278
|
...e[0],
|
|
@@ -263,7 +284,7 @@ var N = (e) => d.isValid(e), P = (e) => f.isValid(e), He = (e) => N(e) ? 4 : P(e
|
|
|
263
284
|
port: n,
|
|
264
285
|
callback: t
|
|
265
286
|
};
|
|
266
|
-
},
|
|
287
|
+
}, Je = (...e) => {
|
|
267
288
|
let t = typeof e.at(-1) == "function" ? e.at(-1) : void 0, n = e[0];
|
|
268
289
|
if (typeof e[2] == "number") return {
|
|
269
290
|
message: n,
|
|
@@ -288,18 +309,18 @@ var N = (e) => d.isValid(e), P = (e) => f.isValid(e), He = (e) => N(e) ? 4 : P(e
|
|
|
288
309
|
new TextEncoder(), new TextDecoder();
|
|
289
310
|
//#endregion
|
|
290
311
|
//#region src/lib/webvpn/net.ts
|
|
291
|
-
var
|
|
312
|
+
var Ye = /* @__PURE__ */ n({
|
|
292
313
|
Server: () => I,
|
|
293
314
|
Socket: () => F,
|
|
294
|
-
_default: () =>
|
|
295
|
-
connect: () =>
|
|
296
|
-
createConnection: () =>
|
|
297
|
-
createServer: () =>
|
|
298
|
-
default: () =>
|
|
299
|
-
isIP: () =>
|
|
315
|
+
_default: () => $e,
|
|
316
|
+
connect: () => Xe,
|
|
317
|
+
createConnection: () => Ze,
|
|
318
|
+
createServer: () => Qe,
|
|
319
|
+
default: () => $e,
|
|
320
|
+
isIP: () => Ge,
|
|
300
321
|
isIPv4: () => N,
|
|
301
322
|
isIPv6: () => P
|
|
302
|
-
}), F = class extends
|
|
323
|
+
}), F = class extends d.Duplex {
|
|
303
324
|
_localAddress;
|
|
304
325
|
_remoteAddress;
|
|
305
326
|
_webVPNTcpSocketPromise;
|
|
@@ -359,7 +380,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
359
380
|
}).catch(n);
|
|
360
381
|
}
|
|
361
382
|
connect(...e) {
|
|
362
|
-
let t =
|
|
383
|
+
let t = Ke(...e), n = this.__webvpn_tcp_socket_init__(M.then((e) => e.cloud.webvpn.tcpSocket({
|
|
363
384
|
remoteAddress: t.host ?? "localhost",
|
|
364
385
|
remotePort: t.port
|
|
365
386
|
})));
|
|
@@ -486,7 +507,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
486
507
|
return this._remoteAddress.family;
|
|
487
508
|
}
|
|
488
509
|
timeout;
|
|
489
|
-
}, I = class extends
|
|
510
|
+
}, I = class extends ne {
|
|
490
511
|
_localAddress;
|
|
491
512
|
_webVPNTcpSocketListenerPromise;
|
|
492
513
|
constructor(e, t) {
|
|
@@ -504,7 +525,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
504
525
|
}), this._webVPNTcpSocketListenerPromise;
|
|
505
526
|
}
|
|
506
527
|
listen(...e) {
|
|
507
|
-
let t =
|
|
528
|
+
let t = Ke(...e), n = (e) => {
|
|
508
529
|
let t = new F({ connection: Promise.resolve(e) });
|
|
509
530
|
this.emit("connection", t);
|
|
510
531
|
}, r = (e) => M.then((r) => r.cloud.webvpn.tcpSocketListener({
|
|
@@ -541,27 +562,33 @@ var Ke = /* @__PURE__ */ n({
|
|
|
541
562
|
connections;
|
|
542
563
|
listening;
|
|
543
564
|
async [Symbol.asyncDispose]() {}
|
|
544
|
-
},
|
|
565
|
+
}, Xe = (e, t) => new F().connect(e, t), Ze = (e, t) => new F().connect(e, t), Qe = (e, t) => {
|
|
545
566
|
typeof e == "function" && (t = e, e = void 0);
|
|
546
567
|
let n = new I(e);
|
|
547
568
|
return t && n.on("connection", t), n;
|
|
548
|
-
},
|
|
569
|
+
}, $e = {
|
|
549
570
|
Socket: F,
|
|
550
571
|
Server: I,
|
|
551
|
-
connect:
|
|
552
|
-
createConnection:
|
|
553
|
-
createServer:
|
|
554
|
-
isIP:
|
|
572
|
+
connect: Xe,
|
|
573
|
+
createConnection: Ze,
|
|
574
|
+
createServer: Qe,
|
|
575
|
+
isIP: Ge,
|
|
555
576
|
isIPv4: N,
|
|
556
577
|
isIPv6: P
|
|
557
|
-
},
|
|
558
|
-
Socket: () =>
|
|
559
|
-
createSocket: () =>
|
|
560
|
-
}),
|
|
578
|
+
}, et = /* @__PURE__ */ n({
|
|
579
|
+
Socket: () => tt,
|
|
580
|
+
createSocket: () => it
|
|
581
|
+
}), tt = class extends ne {
|
|
561
582
|
_type;
|
|
562
583
|
_localAddress;
|
|
563
584
|
_remoteAddress;
|
|
564
585
|
_webVPNUdpSocketPromise;
|
|
586
|
+
_dataPort;
|
|
587
|
+
_socketId;
|
|
588
|
+
_sendQueue = [];
|
|
589
|
+
_sendQueueBytes = 0;
|
|
590
|
+
_sendFlushScheduled = !1;
|
|
591
|
+
_peerTailCache = /* @__PURE__ */ new Map();
|
|
565
592
|
constructor(e) {
|
|
566
593
|
if (super(e), !e) throw Error("Missing options");
|
|
567
594
|
this._type = e.type;
|
|
@@ -584,9 +611,63 @@ var Ke = /* @__PURE__ */ n({
|
|
|
584
611
|
}
|
|
585
612
|
});
|
|
586
613
|
}
|
|
614
|
+
_onDataPortBatch(e) {
|
|
615
|
+
let t = new DataView(e), n = 0;
|
|
616
|
+
for (; n + 4 <= e.byteLength;) {
|
|
617
|
+
let r = t.getUint32(n);
|
|
618
|
+
n += 4;
|
|
619
|
+
let i = n + r;
|
|
620
|
+
if (i > e.byteLength) break;
|
|
621
|
+
let a = n + 4, o = t.getUint8(a);
|
|
622
|
+
a += 1;
|
|
623
|
+
let s, c, l;
|
|
624
|
+
if (o === 2) {
|
|
625
|
+
if (!this._remoteAddress) {
|
|
626
|
+
n = i;
|
|
627
|
+
continue;
|
|
628
|
+
}
|
|
629
|
+
s = this._remoteAddress.address, c = this._remoteAddress.family, l = this._remoteAddress.port;
|
|
630
|
+
} else {
|
|
631
|
+
let n = new Uint8Array(e, a, o === 0 ? 4 : 16);
|
|
632
|
+
if (o === 0) c = "IPv4", s = `${n[0]}.${n[1]}.${n[2]}.${n[3]}`;
|
|
633
|
+
else {
|
|
634
|
+
c = "IPv6";
|
|
635
|
+
let e = [];
|
|
636
|
+
for (let t = 0; t < 16; t += 2) e.push(((n[t] << 8 | n[t + 1]) >>> 0).toString(16));
|
|
637
|
+
s = e.join(":");
|
|
638
|
+
}
|
|
639
|
+
a += n.byteLength, l = t.getUint16(a), a += 2;
|
|
640
|
+
}
|
|
641
|
+
let u = t.getUint32(a);
|
|
642
|
+
a += 4, this.emit("message", m.from(e.slice(a, a + u)), {
|
|
643
|
+
address: s,
|
|
644
|
+
family: c,
|
|
645
|
+
port: l,
|
|
646
|
+
size: u
|
|
647
|
+
}), n = i;
|
|
648
|
+
}
|
|
649
|
+
}
|
|
650
|
+
_peerTail(e, t) {
|
|
651
|
+
if (e === void 0 || t === void 0) return nt;
|
|
652
|
+
let n = `${e}|${t}`, r = this._peerTailCache.get(n);
|
|
653
|
+
if (r) return r;
|
|
654
|
+
let i = f.isValid(e) ? L(e) : R(e), a = new Uint8Array(1 + i.byteLength + 2);
|
|
655
|
+
return a[0] = i.byteLength === 4 ? 0 : 1, a.set(i, 1), new DataView(a.buffer).setUint16(1 + i.byteLength, t), this._peerTailCache.set(n, a), a;
|
|
656
|
+
}
|
|
657
|
+
_portSend(e, t, n) {
|
|
658
|
+
let r = this._peerTail(t, n), i = new Uint8Array(8 + r.byteLength + 4 + e.byteLength), a = new DataView(i.buffer);
|
|
659
|
+
a.setUint32(0, i.byteLength - 4), a.setUint32(4, this._socketId), i.set(r, 8), a.setUint32(8 + r.byteLength, e.byteLength), i.set(e, 12 + r.byteLength), this._sendQueue.push(i), this._sendQueueBytes += i.byteLength, !this._sendFlushScheduled && (this._sendFlushScheduled = !0, queueMicrotask(() => {
|
|
660
|
+
this._sendFlushScheduled = !1;
|
|
661
|
+
let e = this._sendQueue, t = this._sendQueueBytes;
|
|
662
|
+
if (this._sendQueue = [], this._sendQueueBytes = 0, !e.length || !this._dataPort) return;
|
|
663
|
+
let n = new Uint8Array(t), r = 0;
|
|
664
|
+
for (let t of e) n.set(t, r), r += t.byteLength;
|
|
665
|
+
this._dataPort.postMessage(n.buffer, [n.buffer]);
|
|
666
|
+
}));
|
|
667
|
+
}
|
|
587
668
|
addMembership(e, t) {
|
|
588
|
-
if (
|
|
589
|
-
let n =
|
|
669
|
+
if (f.isValid(e)) {
|
|
670
|
+
let n = L(e), r = t && f.isValid(t) ? L(t) : new Uint8Array([
|
|
590
671
|
0,
|
|
591
672
|
0,
|
|
592
673
|
0,
|
|
@@ -597,8 +678,8 @@ var Ke = /* @__PURE__ */ n({
|
|
|
597
678
|
group: n,
|
|
598
679
|
interface: r
|
|
599
680
|
});
|
|
600
|
-
} else if (
|
|
601
|
-
let t =
|
|
681
|
+
} else if (p.isValid(e)) {
|
|
682
|
+
let t = R(e);
|
|
602
683
|
this._setUdpOption({
|
|
603
684
|
type: 7,
|
|
604
685
|
group: t,
|
|
@@ -611,22 +692,27 @@ var Ke = /* @__PURE__ */ n({
|
|
|
611
692
|
return this._localAddress;
|
|
612
693
|
}
|
|
613
694
|
bind(...e) {
|
|
614
|
-
let t =
|
|
695
|
+
let t = qe(...e), n = this._type === "udp6" ? "::" : "0.0.0.0";
|
|
615
696
|
return this._webVPNUdpSocketPromise = M.then((e) => e.cloud.webvpn.udpSocket({
|
|
616
697
|
type: this._type,
|
|
617
698
|
address: t.address ?? n,
|
|
618
|
-
port: t.port
|
|
699
|
+
port: t.port,
|
|
700
|
+
dataPort: !0
|
|
619
701
|
})).then((e) => {
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
702
|
+
if (e.dataPort) this._socketId = e.socketId, this._dataPort = e.dataPort, this._dataPort.onmessage = (e) => this._onDataPortBatch(e.data);
|
|
703
|
+
else {
|
|
704
|
+
let t = e.dataReadableStream.getReader(), n = async () => {
|
|
705
|
+
let { value: e, done: r } = await t.read();
|
|
706
|
+
r || (this.emit("message", m.from(e.data), {
|
|
707
|
+
address: e.address,
|
|
708
|
+
family: e.family,
|
|
709
|
+
port: e.port,
|
|
710
|
+
size: e.size
|
|
711
|
+
}), n());
|
|
712
|
+
};
|
|
713
|
+
n();
|
|
714
|
+
}
|
|
715
|
+
return this._localAddress = {
|
|
630
716
|
address: e.localAddress,
|
|
631
717
|
family: e.localFamily,
|
|
632
718
|
port: e.localPort
|
|
@@ -636,14 +722,14 @@ var Ke = /* @__PURE__ */ n({
|
|
|
636
722
|
}), this._webVPNUdpSocketPromise.then((e) => {
|
|
637
723
|
e && this.emit("listening");
|
|
638
724
|
}), t.callback && this._webVPNUdpSocketPromise.then((e) => {
|
|
639
|
-
e && t.callback();
|
|
725
|
+
e && t.callback.call(this);
|
|
640
726
|
}), this;
|
|
641
727
|
}
|
|
642
728
|
close(e) {
|
|
643
729
|
if (!this._webVPNUdpSocketPromise) throw Error("Socket not bound");
|
|
644
730
|
return this._webVPNUdpSocketPromise.then(async (t) => {
|
|
645
731
|
if (!t) throw Error("Socket not bound");
|
|
646
|
-
await t.close(), e && e(), this.emit("close");
|
|
732
|
+
this._dataPort?.close(), this._dataPort = void 0, await t.close(), e && e(), this.emit("close");
|
|
647
733
|
}), this;
|
|
648
734
|
}
|
|
649
735
|
connect(...e) {
|
|
@@ -672,8 +758,8 @@ var Ke = /* @__PURE__ */ n({
|
|
|
672
758
|
});
|
|
673
759
|
}
|
|
674
760
|
dropMembership(e, t) {
|
|
675
|
-
if (
|
|
676
|
-
let n =
|
|
761
|
+
if (f.isValid(e)) {
|
|
762
|
+
let n = L(e), r = t && f.isValid(t) ? L(t) : new Uint8Array([
|
|
677
763
|
0,
|
|
678
764
|
0,
|
|
679
765
|
0,
|
|
@@ -684,8 +770,8 @@ var Ke = /* @__PURE__ */ n({
|
|
|
684
770
|
group: n,
|
|
685
771
|
interface: r
|
|
686
772
|
});
|
|
687
|
-
} else if (
|
|
688
|
-
let t =
|
|
773
|
+
} else if (p.isValid(e)) {
|
|
774
|
+
let t = R(e);
|
|
689
775
|
this._setUdpOption({
|
|
690
776
|
type: 8,
|
|
691
777
|
group: t,
|
|
@@ -718,16 +804,20 @@ var Ke = /* @__PURE__ */ n({
|
|
|
718
804
|
}
|
|
719
805
|
send(...e) {
|
|
720
806
|
this._webVPNUdpSocketPromise || this.bind();
|
|
721
|
-
let t =
|
|
807
|
+
let t = Je(...e), n = this._type === "udp6" ? "::1" : "127.0.0.1";
|
|
722
808
|
if (!this._webVPNUdpSocketPromise) throw Error("Socket not bound");
|
|
723
809
|
this._webVPNUdpSocketPromise.then((e) => {
|
|
724
810
|
if (!e) throw Error("Socket not bound");
|
|
725
|
-
let r =
|
|
811
|
+
let r = rt(t.message), i = t.callback, a = t.address ?? n, o = this._remoteAddress !== void 0 && t.address === void 0;
|
|
812
|
+
if (this._dataPort && (o || f.isValid(a) || p.isValid(a))) {
|
|
813
|
+
this._portSend(r, o ? void 0 : a, o ? void 0 : t.port), i?.call(this, null, r.byteLength);
|
|
814
|
+
return;
|
|
815
|
+
}
|
|
726
816
|
e.send({
|
|
727
817
|
...t,
|
|
728
|
-
address:
|
|
729
|
-
message: r.buffer
|
|
730
|
-
});
|
|
818
|
+
address: a,
|
|
819
|
+
message: r.byteOffset === 0 && r.byteLength === r.buffer.byteLength ? r.buffer : r.buffer.slice(r.byteOffset, r.byteOffset + r.byteLength)
|
|
820
|
+
}).then(() => i?.call(this, null, r.byteLength), (e) => i ? i.call(this, e, 0) : this.emit("error", e));
|
|
731
821
|
});
|
|
732
822
|
}
|
|
733
823
|
setBroadcast(e) {
|
|
@@ -780,33 +870,43 @@ var Ke = /* @__PURE__ */ n({
|
|
|
780
870
|
this.close(e);
|
|
781
871
|
});
|
|
782
872
|
}
|
|
783
|
-
},
|
|
873
|
+
}, nt = new Uint8Array([2]), rt = (e) => {
|
|
874
|
+
if (typeof e == "string") return We.encode(e);
|
|
875
|
+
if (e instanceof Uint8Array) return e;
|
|
876
|
+
if (ArrayBuffer.isView(e)) return new Uint8Array(e.buffer, e.byteOffset, e.byteLength);
|
|
877
|
+
if (Array.isArray(e)) {
|
|
878
|
+
let t = e.map(rt), n = new Uint8Array(t.reduce((e, t) => e + t.byteLength, 0)), r = 0;
|
|
879
|
+
for (let e of t) n.set(e, r), r += e.byteLength;
|
|
880
|
+
return n;
|
|
881
|
+
}
|
|
882
|
+
return new Uint8Array(e);
|
|
883
|
+
}, L = (e) => {
|
|
784
884
|
let t = e.split(".").map((e) => parseInt(e, 10));
|
|
785
885
|
if (t.length !== 4 || t.some((e) => Number.isNaN(e) || e < 0 || e > 255)) throw Error(`Invalid IPv4 address: ${e}`);
|
|
786
886
|
return new Uint8Array(t);
|
|
787
|
-
},
|
|
788
|
-
let t = new
|
|
887
|
+
}, R = (e) => {
|
|
888
|
+
let t = new p(e).getBitsBase16(0, 128).match(/.{2}/g);
|
|
789
889
|
if (!t || t.length !== 16) throw Error(`Invalid IPv6 address: ${e}`);
|
|
790
890
|
return new Uint8Array(t.map((e) => parseInt(e, 16)));
|
|
791
|
-
},
|
|
792
|
-
let n = new
|
|
891
|
+
}, it = (e, t) => {
|
|
892
|
+
let n = new tt(typeof e == "string" ? { type: e } : e);
|
|
793
893
|
return t && n.on("message", t), n;
|
|
794
|
-
},
|
|
894
|
+
}, at = /* @__PURE__ */ n({
|
|
795
895
|
Agent: () => Y,
|
|
796
896
|
ClientRequest: () => q,
|
|
797
897
|
HTTPParser: () => U,
|
|
798
898
|
IncomingMessage: () => W,
|
|
799
|
-
METHODS: () =>
|
|
899
|
+
METHODS: () => st,
|
|
800
900
|
STATUS_CODES: () => z,
|
|
801
901
|
Server: () => J,
|
|
802
902
|
ServerResponse: () => K,
|
|
803
|
-
_default: () =>
|
|
804
|
-
createServer: () =>
|
|
805
|
-
default: () =>
|
|
806
|
-
get: () =>
|
|
807
|
-
globalAgent: () =>
|
|
903
|
+
_default: () => vt,
|
|
904
|
+
createServer: () => _t,
|
|
905
|
+
default: () => vt,
|
|
906
|
+
get: () => gt,
|
|
907
|
+
globalAgent: () => ht,
|
|
808
908
|
request: () => X
|
|
809
|
-
}),
|
|
909
|
+
}), ot = new TextDecoder("latin1"), st = /* @__PURE__ */ "ACL.BIND.CHECKOUT.CONNECT.COPY.DELETE.GET.HEAD.LINK.LOCK.M-SEARCH.MERGE.MKACTIVITY.MKCALENDAR.MKCOL.MOVE.NOTIFY.OPTIONS.PATCH.POST.PROPFIND.PROPPATCH.PURGE.PUT.REBIND.REPORT.SEARCH.SOURCE.SUBSCRIBE.TRACE.UNBIND.UNLINK.UNLOCK.UNSUBSCRIBE".split("."), z = {
|
|
810
910
|
100: "Continue",
|
|
811
911
|
101: "Switching Protocols",
|
|
812
912
|
102: "Processing",
|
|
@@ -870,7 +970,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
870
970
|
509: "Bandwidth Limit Exceeded",
|
|
871
971
|
510: "Not Extended",
|
|
872
972
|
511: "Network Authentication Required"
|
|
873
|
-
},
|
|
973
|
+
}, ct = new Set([
|
|
874
974
|
"content-type",
|
|
875
975
|
"content-length",
|
|
876
976
|
"user-agent",
|
|
@@ -889,15 +989,15 @@ var Ke = /* @__PURE__ */ n({
|
|
|
889
989
|
"server",
|
|
890
990
|
"age",
|
|
891
991
|
"expires"
|
|
892
|
-
]), B = 13, V = 10,
|
|
992
|
+
]), B = 13, V = 10, lt = /^[\^_`a-zA-Z\-0-9!#$%&'*+.|~]+$/, H = (e, t) => (e.code = t, e), ut = (e, t) => {
|
|
893
993
|
if (e.length === 0) return t;
|
|
894
994
|
if (t.length === 0) return e;
|
|
895
995
|
let n = new Uint8Array(e.length + t.length);
|
|
896
996
|
return n.set(e, 0), n.set(t, e.length), n;
|
|
897
|
-
},
|
|
997
|
+
}, dt = (e, t) => {
|
|
898
998
|
for (let n = t; n + 1 < e.length; n++) if (e[n] === B && e[n + 1] === V) return n;
|
|
899
999
|
return -1;
|
|
900
|
-
},
|
|
1000
|
+
}, ft = (e) => {
|
|
901
1001
|
for (let t = 0; t + 3 < e.length; t++) if (e[t] === B && e[t + 1] === V && e[t + 2] === B && e[t + 3] === V) return t;
|
|
902
1002
|
return -1;
|
|
903
1003
|
}, U = class {
|
|
@@ -911,10 +1011,10 @@ var Ke = /* @__PURE__ */ n({
|
|
|
911
1011
|
this.mode = e, this.handlers = t;
|
|
912
1012
|
}
|
|
913
1013
|
execute(e) {
|
|
914
|
-
this.buf =
|
|
1014
|
+
this.buf = ut(this.buf, e);
|
|
915
1015
|
let t = !0;
|
|
916
1016
|
for (; t;) if (t = !1, this.state === "HEAD") {
|
|
917
|
-
let e =
|
|
1017
|
+
let e = ft(this.buf);
|
|
918
1018
|
if (e === -1) return;
|
|
919
1019
|
let n = this.buf.subarray(0, e);
|
|
920
1020
|
this.buf = this.buf.subarray(e + 4);
|
|
@@ -929,7 +1029,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
929
1029
|
this.state = "HEAD", this.framing = "none", this.bodyRemaining = 0, this.chunkState = "size", this.skipBody = !1;
|
|
930
1030
|
}
|
|
931
1031
|
parseHead(e) {
|
|
932
|
-
let t =
|
|
1032
|
+
let t = ot.decode(e).split("\r\n"), n = t.shift() ?? "", r = [];
|
|
933
1033
|
for (let e of t) (e.startsWith(" ") || e.startsWith(" ")) && r.length > 0 ? r[r.length - 1] += " " + e.trim() : r.push(e);
|
|
934
1034
|
let i = [], a = {};
|
|
935
1035
|
for (let e of r) {
|
|
@@ -967,7 +1067,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
967
1067
|
return;
|
|
968
1068
|
}
|
|
969
1069
|
let i = e[r];
|
|
970
|
-
i === void 0 ? e[r] = n :
|
|
1070
|
+
i === void 0 ? e[r] = n : ct.has(r) || (e[r] = `${i}, ${n}`);
|
|
971
1071
|
}
|
|
972
1072
|
setupBody(e) {
|
|
973
1073
|
if (this.skipBody) {
|
|
@@ -1000,9 +1100,9 @@ var Ke = /* @__PURE__ */ n({
|
|
|
1000
1100
|
}
|
|
1001
1101
|
consumeChunked() {
|
|
1002
1102
|
for (;;) if (this.chunkState === "size") {
|
|
1003
|
-
let e =
|
|
1103
|
+
let e = dt(this.buf, 0);
|
|
1004
1104
|
if (e === -1) return !1;
|
|
1005
|
-
let t =
|
|
1105
|
+
let t = ot.decode(this.buf.subarray(0, e)), n = parseInt(t.split(";")[0].trim(), 16);
|
|
1006
1106
|
if (this.buf = this.buf.subarray(e + 2), Number.isNaN(n)) return !0;
|
|
1007
1107
|
n === 0 ? this.chunkState = "trailer" : (this.bodyRemaining = n, this.chunkState = "data");
|
|
1008
1108
|
} else if (this.chunkState === "data") {
|
|
@@ -1013,13 +1113,13 @@ var Ke = /* @__PURE__ */ n({
|
|
|
1013
1113
|
if (this.buf.length < 2) return !1;
|
|
1014
1114
|
this.buf = this.buf.subarray(2), this.chunkState = "size";
|
|
1015
1115
|
} else {
|
|
1016
|
-
let e =
|
|
1116
|
+
let e = dt(this.buf, 0);
|
|
1017
1117
|
if (e === -1) return !1;
|
|
1018
1118
|
let t = e === 0;
|
|
1019
1119
|
if (this.buf = this.buf.subarray(e + 2), t) return !0;
|
|
1020
1120
|
}
|
|
1021
1121
|
}
|
|
1022
|
-
},
|
|
1122
|
+
}, pt = (e, t) => m.isBuffer(e) ? e : typeof e == "string" ? m.from(e, t ?? "utf8") : e instanceof Uint8Array ? m.from(e) : e instanceof ArrayBuffer ? m.from(new Uint8Array(e)) : m.from(String(e)), W = class extends d.Readable {
|
|
1023
1123
|
httpVersion = "1.1";
|
|
1024
1124
|
httpVersionMajor = 1;
|
|
1025
1125
|
httpVersionMinor = 1;
|
|
@@ -1046,7 +1146,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
1046
1146
|
setTimeout(e, t) {
|
|
1047
1147
|
return this.socket.setTimeout(e, t), this;
|
|
1048
1148
|
}
|
|
1049
|
-
}, G = class extends
|
|
1149
|
+
}, G = class extends d.Writable {
|
|
1050
1150
|
_headerStore = /* @__PURE__ */ new Map();
|
|
1051
1151
|
headersSent = !1;
|
|
1052
1152
|
chunkedEncoding = !1;
|
|
@@ -1054,7 +1154,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
1054
1154
|
_bodyWritten = !1;
|
|
1055
1155
|
setHeader(e, t) {
|
|
1056
1156
|
if (this.headersSent) throw H(/* @__PURE__ */ Error("Cannot set headers after they are sent to the client"), "ERR_HTTP_HEADERS_SENT");
|
|
1057
|
-
if (typeof e != "string" || !
|
|
1157
|
+
if (typeof e != "string" || !lt.test(e)) throw H(/* @__PURE__ */ TypeError(`Header name must be a valid HTTP token [${JSON.stringify(String(e))}]`), "ERR_INVALID_HTTP_TOKEN");
|
|
1058
1158
|
if (t === void 0) throw H(/* @__PURE__ */ TypeError(`Invalid value "undefined" for header "${e}"`), "ERR_HTTP_INVALID_HEADER_VALUE");
|
|
1059
1159
|
return this._headerStore.set(e.toLowerCase(), [e, Array.isArray(t) ? [...t] : t]), this;
|
|
1060
1160
|
}
|
|
@@ -1095,25 +1195,25 @@ var Ke = /* @__PURE__ */ n({
|
|
|
1095
1195
|
return this._bodyWritten = !0, super.write(e, t, n);
|
|
1096
1196
|
}
|
|
1097
1197
|
_write(e, t, n) {
|
|
1098
|
-
let r =
|
|
1099
|
-
if (this.headersSent ||= (this._implicitHeader(), i.push(
|
|
1198
|
+
let r = pt(e), i = [];
|
|
1199
|
+
if (this.headersSent ||= (this._implicitHeader(), i.push(m.from(this._headBlock, "latin1")), !0), this.chunkedEncoding ? r.length > 0 && (i.push(m.from(`${r.length.toString(16)}\r\n`, "latin1")), i.push(r), i.push(m.from("\r\n", "latin1"))) : i.push(r), i.length === 0) {
|
|
1100
1200
|
n();
|
|
1101
1201
|
return;
|
|
1102
1202
|
}
|
|
1103
|
-
this._writeToSocket(
|
|
1203
|
+
this._writeToSocket(m.concat(i), n);
|
|
1104
1204
|
}
|
|
1105
1205
|
_final(e) {
|
|
1106
1206
|
let t = [];
|
|
1107
|
-
if (this.headersSent ||= (!this.chunkedEncoding && !this.hasHeader("content-length") && this.setHeader("Content-Length", 0), this._implicitHeader(), t.push(
|
|
1207
|
+
if (this.headersSent ||= (!this.chunkedEncoding && !this.hasHeader("content-length") && this.setHeader("Content-Length", 0), this._implicitHeader(), t.push(m.from(this._headBlock, "latin1")), !0), this.chunkedEncoding && t.push(m.from("0\r\n\r\n", "latin1")), this.finished = !0, t.length === 0) {
|
|
1108
1208
|
e();
|
|
1109
1209
|
return;
|
|
1110
1210
|
}
|
|
1111
|
-
this._writeToSocket(
|
|
1211
|
+
this._writeToSocket(m.concat(t), e);
|
|
1112
1212
|
}
|
|
1113
1213
|
end(e, t, n) {
|
|
1114
1214
|
if (e != null && typeof e != "function" && !this._bodyWritten && !this.headersSent && !this.chunkedEncoding && !this.hasHeader("content-length")) {
|
|
1115
1215
|
let n = typeof t == "string" ? t : void 0;
|
|
1116
|
-
this.setHeader("Content-Length",
|
|
1216
|
+
this.setHeader("Content-Length", pt(e, n).length);
|
|
1117
1217
|
}
|
|
1118
1218
|
return super.end(e, t, n);
|
|
1119
1219
|
}
|
|
@@ -1157,12 +1257,12 @@ var Ke = /* @__PURE__ */ n({
|
|
|
1157
1257
|
this.sendDate && !this.hasHeader("date") && this.setHeader("Date", (/* @__PURE__ */ new Date()).toUTCString()), this.hasHeader("connection") || this.setHeader("Connection", this._keepAlive ? "keep-alive" : "close"), this._headBlock = this._storeHeader(`HTTP/1.1 ${this.statusCode} ${e}`);
|
|
1158
1258
|
}
|
|
1159
1259
|
writeContinue() {
|
|
1160
|
-
this._writeToSocket(
|
|
1260
|
+
this._writeToSocket(m.from("HTTP/1.1 100 Continue\r\n\r\n", "latin1"), () => {});
|
|
1161
1261
|
}
|
|
1162
1262
|
setTimeout(e, t) {
|
|
1163
1263
|
return this.socket?.setTimeout(e, t), this;
|
|
1164
1264
|
}
|
|
1165
|
-
},
|
|
1265
|
+
}, mt = (...e) => {
|
|
1166
1266
|
let t = {}, n = {}, r, i = [...e], a = i.shift();
|
|
1167
1267
|
if (typeof a == "string" || a instanceof URL) {
|
|
1168
1268
|
let e = typeof a == "string" ? new URL(a) : a;
|
|
@@ -1206,7 +1306,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
1206
1306
|
let e = this.protocol === "https:" && r === 443 || this.protocol !== "https:" && r === 80;
|
|
1207
1307
|
this.setHeader("Host", e ? n : `${n}:${r}`);
|
|
1208
1308
|
}
|
|
1209
|
-
e.auth && !this.hasHeader("authorization") && this.setHeader("Authorization", `Basic ${
|
|
1309
|
+
e.auth && !this.hasHeader("authorization") && this.setHeader("Authorization", `Basic ${m.from(e.auth).toString("base64")}`), this.socket = new F(), this.emit("socket", this.socket), this.socket.on("error", (e) => {
|
|
1210
1310
|
this._aborted || this.emit("error", e);
|
|
1211
1311
|
}), this._attachResponseParser(), this.socket.connect({
|
|
1212
1312
|
host: n,
|
|
@@ -1227,7 +1327,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
1227
1327
|
e._applyHead(n), this.method === "HEAD" && (t.skipBody = !0), this.res = e, this.emit("response", e);
|
|
1228
1328
|
},
|
|
1229
1329
|
onBody: (t) => {
|
|
1230
|
-
e.push(
|
|
1330
|
+
e.push(m.from(t));
|
|
1231
1331
|
},
|
|
1232
1332
|
onComplete: () => {
|
|
1233
1333
|
e.complete = !0, e.push(null);
|
|
@@ -1281,7 +1381,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
1281
1381
|
}), this.emit("request", t, i);
|
|
1282
1382
|
},
|
|
1283
1383
|
onBody: (e) => {
|
|
1284
|
-
t?.push(
|
|
1384
|
+
t?.push(m.from(e));
|
|
1285
1385
|
},
|
|
1286
1386
|
onComplete: () => {
|
|
1287
1387
|
t && (t.complete = !0, t.push(null)), t = null;
|
|
@@ -1303,113 +1403,115 @@ var Ke = /* @__PURE__ */ n({
|
|
|
1303
1403
|
return `${e.host ?? "localhost"}:${e.port ?? ""}:${e.localAddress ?? ""}`;
|
|
1304
1404
|
}
|
|
1305
1405
|
destroy() {}
|
|
1306
|
-
},
|
|
1307
|
-
let { options: t, callback: n } =
|
|
1406
|
+
}, ht = new Y(), X = (...e) => {
|
|
1407
|
+
let { options: t, callback: n } = mt(...e);
|
|
1308
1408
|
return new q(t, n);
|
|
1309
|
-
},
|
|
1409
|
+
}, gt = (...e) => {
|
|
1310
1410
|
let t = X(...e);
|
|
1311
1411
|
return t.end(), t;
|
|
1312
|
-
},
|
|
1313
|
-
METHODS:
|
|
1412
|
+
}, _t = (e, t) => new J(e, t), vt = {
|
|
1413
|
+
METHODS: st,
|
|
1314
1414
|
STATUS_CODES: z,
|
|
1315
1415
|
Agent: Y,
|
|
1316
|
-
globalAgent:
|
|
1416
|
+
globalAgent: ht,
|
|
1317
1417
|
Server: J,
|
|
1318
1418
|
ServerResponse: K,
|
|
1319
1419
|
IncomingMessage: W,
|
|
1320
1420
|
ClientRequest: q,
|
|
1321
1421
|
OutgoingMessage: G,
|
|
1322
|
-
createServer:
|
|
1422
|
+
createServer: _t,
|
|
1323
1423
|
request: X,
|
|
1324
|
-
get:
|
|
1325
|
-
},
|
|
1326
|
-
available: () =>
|
|
1327
|
-
dgram: () =>
|
|
1328
|
-
dns: () =>
|
|
1329
|
-
fetch: () =>
|
|
1330
|
-
http: () =>
|
|
1331
|
-
net: () =>
|
|
1332
|
-
quota: () =>
|
|
1333
|
-
}),
|
|
1424
|
+
get: gt
|
|
1425
|
+
}, yt = /* @__PURE__ */ n({
|
|
1426
|
+
available: () => bt,
|
|
1427
|
+
dgram: () => et,
|
|
1428
|
+
dns: () => He,
|
|
1429
|
+
fetch: () => Be,
|
|
1430
|
+
http: () => at,
|
|
1431
|
+
net: () => Ye,
|
|
1432
|
+
quota: () => Ve
|
|
1433
|
+
}), bt = () => Le, Z = async (e) => {
|
|
1334
1434
|
if (typeof window > "u") return !1;
|
|
1335
|
-
if (
|
|
1435
|
+
if (g()) return !0;
|
|
1336
1436
|
let t = await M, n = null, r = new Promise((e) => {
|
|
1337
1437
|
n = () => {
|
|
1338
|
-
|
|
1339
|
-
},
|
|
1438
|
+
g() && e(!0);
|
|
1439
|
+
}, h.addEventListener("statuschange", n);
|
|
1340
1440
|
}), i = t.installPrompt.show(e).then(() => !1), a = await Promise.race([r, i]);
|
|
1341
|
-
return n &&
|
|
1441
|
+
return n && h.removeEventListener("statuschange", n), await t.installPrompt.hide().catch(() => {}), a;
|
|
1342
1442
|
}, Q = null;
|
|
1343
|
-
|
|
1443
|
+
v(() => (Q ||= Z().then(() => void 0).finally(() => {
|
|
1344
1444
|
Q = null;
|
|
1345
1445
|
}), Q));
|
|
1346
1446
|
//#endregion
|
|
1347
1447
|
//#region src/lib/desktop.ts
|
|
1348
|
-
var
|
|
1349
|
-
available: () =>
|
|
1350
|
-
dgram: () =>
|
|
1351
|
-
dns: () =>
|
|
1352
|
-
fetch: () =>
|
|
1353
|
-
fs: () =>
|
|
1354
|
-
net: () =>
|
|
1355
|
-
}),
|
|
1448
|
+
var xt = /* @__PURE__ */ n({
|
|
1449
|
+
available: () => St,
|
|
1450
|
+
dgram: () => Et,
|
|
1451
|
+
dns: () => wt,
|
|
1452
|
+
fetch: () => Ct,
|
|
1453
|
+
fs: () => Dt,
|
|
1454
|
+
net: () => Tt
|
|
1455
|
+
}), St = () => !1, $ = (e) => (...t) => {
|
|
1356
1456
|
throw Error(`The FKN desktop app is not connected, desktop.${e} is unavailable`);
|
|
1357
|
-
},
|
|
1457
|
+
}, Ct = $("fetch"), wt = { lookup: $("dns.lookup") }, Tt = {
|
|
1358
1458
|
connect: $("net.connect"),
|
|
1359
1459
|
createConnection: $("net.createConnection"),
|
|
1360
1460
|
createServer: $("net.createServer")
|
|
1361
|
-
},
|
|
1461
|
+
}, Et = { createSocket: $("dgram.createSocket") }, Dt = {
|
|
1362
1462
|
isLocalDirectorySupported: () => !1,
|
|
1363
1463
|
pickLocalDirectory: $("fs.pickLocalDirectory"),
|
|
1364
1464
|
queryDirectoryPermission: $("fs.queryDirectoryPermission"),
|
|
1365
1465
|
ensureDirectoryPermission: $("fs.ensureDirectoryPermission")
|
|
1366
|
-
},
|
|
1367
|
-
if (
|
|
1466
|
+
}, Ot = () => typeof document < "u" && g(), kt = async (e, t) => {
|
|
1467
|
+
if (ze(e), t?.credentials === "include") {
|
|
1368
1468
|
if (typeof document > "u") throw Error("fetch with credentials needs the FKN extension, which only exists in window realms");
|
|
1369
|
-
return
|
|
1469
|
+
return C(e, t);
|
|
1370
1470
|
}
|
|
1371
|
-
return
|
|
1471
|
+
return Ot() ? C(e, {
|
|
1372
1472
|
...t,
|
|
1373
1473
|
credentials: "omit"
|
|
1374
|
-
}) :
|
|
1375
|
-
},
|
|
1376
|
-
ATTACH_FRAME_EVENT_KEY: () =>
|
|
1377
|
-
assertAttachableFrameUrl: () =>
|
|
1378
|
-
assertFetchableUrl: () =>
|
|
1379
|
-
attachFrame: () =>
|
|
1380
|
-
attachFramePermission: () =>
|
|
1381
|
-
available: () =>
|
|
1474
|
+
}) : St() ? Ct(e, t) : Be(e, t);
|
|
1475
|
+
}, At = /* @__PURE__ */ n({
|
|
1476
|
+
ATTACH_FRAME_EVENT_KEY: () => w,
|
|
1477
|
+
assertAttachableFrameUrl: () => E,
|
|
1478
|
+
assertFetchableUrl: () => S,
|
|
1479
|
+
attachFrame: () => Se,
|
|
1480
|
+
attachFramePermission: () => be,
|
|
1481
|
+
available: () => Ot,
|
|
1382
1482
|
box: () => l,
|
|
1383
|
-
cookies: () =>
|
|
1483
|
+
cookies: () => ge,
|
|
1384
1484
|
createVideoElementHandle: () => e,
|
|
1385
|
-
events: () =>
|
|
1386
|
-
extension: () =>
|
|
1387
|
-
fetch: () =>
|
|
1388
|
-
fetchCredentialedPermission: () =>
|
|
1389
|
-
|
|
1390
|
-
|
|
1485
|
+
events: () => h,
|
|
1486
|
+
extension: () => h,
|
|
1487
|
+
fetch: () => C,
|
|
1488
|
+
fetchCredentialedPermission: () => ce,
|
|
1489
|
+
fetchLocalPermission: () => le,
|
|
1490
|
+
fetchPermission: () => se,
|
|
1491
|
+
gotoPermission: () => xe,
|
|
1391
1492
|
handleRevivableModules: () => i,
|
|
1392
|
-
isBlockedFetchUrl: () =>
|
|
1393
|
-
isBlockedFrameUrl: () =>
|
|
1394
|
-
isExtensionExposed: () =>
|
|
1493
|
+
isBlockedFetchUrl: () => x,
|
|
1494
|
+
isBlockedFrameUrl: () => T,
|
|
1495
|
+
isExtensionExposed: () => g,
|
|
1496
|
+
isLocalNetworkUrl: () => de,
|
|
1395
1497
|
isType: () => t,
|
|
1396
|
-
modifyRequestHeadersPermission: () =>
|
|
1397
|
-
permissions: () =>
|
|
1498
|
+
modifyRequestHeadersPermission: () => _e,
|
|
1499
|
+
permissions: () => Ce,
|
|
1398
1500
|
promptInstall: () => Z,
|
|
1399
|
-
readCookiePermission: () =>
|
|
1400
|
-
removeRequestHeaderRule: () =>
|
|
1501
|
+
readCookiePermission: () => he,
|
|
1502
|
+
removeRequestHeaderRule: () => ye,
|
|
1401
1503
|
revive: () => o,
|
|
1402
|
-
setMissingExtensionHandler: () =>
|
|
1403
|
-
setRequestHeaderRule: () =>
|
|
1504
|
+
setMissingExtensionHandler: () => v,
|
|
1505
|
+
setRequestHeaderRule: () => ve,
|
|
1404
1506
|
type: () => a,
|
|
1405
|
-
waitForExtensionExposure: () =>
|
|
1406
|
-
}),
|
|
1407
|
-
ensureDirectoryPermission: () =>
|
|
1408
|
-
isLocalDirectorySupported: () =>
|
|
1409
|
-
pickLocalDirectory: () =>
|
|
1410
|
-
queryDirectoryPermission: () =>
|
|
1411
|
-
}),
|
|
1412
|
-
if (!
|
|
1507
|
+
waitForExtensionExposure: () => y
|
|
1508
|
+
}), jt = /* @__PURE__ */ n({
|
|
1509
|
+
ensureDirectoryPermission: () => Ft,
|
|
1510
|
+
isLocalDirectorySupported: () => Mt,
|
|
1511
|
+
pickLocalDirectory: () => Nt,
|
|
1512
|
+
queryDirectoryPermission: () => Pt
|
|
1513
|
+
}), Mt = () => typeof window < "u" && "showDirectoryPicker" in window, Nt = async (e = {}) => {
|
|
1514
|
+
if (!Mt()) return;
|
|
1413
1515
|
let t = window.showDirectoryPicker;
|
|
1414
1516
|
return t({
|
|
1415
1517
|
mode: "readwrite",
|
|
@@ -1417,25 +1519,25 @@ var gt = /* @__PURE__ */ n({
|
|
|
1417
1519
|
}).catch((e) => {
|
|
1418
1520
|
if (e?.name !== "AbortError") throw e;
|
|
1419
1521
|
});
|
|
1420
|
-
},
|
|
1522
|
+
}, Pt = async (e, t = "readwrite") => {
|
|
1421
1523
|
let { queryPermission: n } = e;
|
|
1422
1524
|
return await n?.call(e, { mode: t }) ?? "granted";
|
|
1423
|
-
},
|
|
1424
|
-
if (await
|
|
1525
|
+
}, Ft = async (e, t = "readwrite") => {
|
|
1526
|
+
if (await Pt(e, t) === "granted") return !0;
|
|
1425
1527
|
let { requestPermission: n } = e;
|
|
1426
1528
|
return await n?.call(e, { mode: t }) === "granted";
|
|
1427
|
-
},
|
|
1529
|
+
}, It = "https://fkn.app", Lt = (e, t) => {
|
|
1428
1530
|
if (typeof window > "u") throw Error("FKN @fkn/lib: relayWorker must be called from the main thread");
|
|
1429
1531
|
if (!A?.contentWindow) throw Error("FKN @fkn/lib: relayWorker called before the FKN iframe was injected");
|
|
1430
|
-
|
|
1532
|
+
te({
|
|
1431
1533
|
receive: window,
|
|
1432
1534
|
emit: A.contentWindow
|
|
1433
1535
|
}, e, {
|
|
1434
1536
|
key: "fkn-api",
|
|
1435
|
-
originA: t?.originA ??
|
|
1537
|
+
originA: t?.originA ?? It,
|
|
1436
1538
|
originB: t?.originB ?? "*",
|
|
1437
1539
|
unregisterSignal: t?.unregisterSignal
|
|
1438
1540
|
});
|
|
1439
|
-
};
|
|
1541
|
+
}, Rt = async () => typeof window > "u" ? !1 : (await M).connect.prompt(location.origin).catch(() => !1);
|
|
1440
1542
|
//#endregion
|
|
1441
|
-
export {
|
|
1543
|
+
export { w as ATTACH_FRAME_EVENT_KEY, E as assertAttachableFrameUrl, S as assertFetchableUrl, Se as attachFrame, be as attachFramePermission, l as box, yt as cloud, Rt as connect, ge as cookies, e as createVideoElementHandle, xt as desktop, et as dgram, He as dns, At as extension, kt as fetch, ce as fetchCredentialedPermission, le as fetchLocalPermission, se as fetchPermission, jt as fs, xe as gotoPermission, i as handleRevivableModules, at as http, x as isBlockedFetchUrl, T as isBlockedFrameUrl, g as isExtensionExposed, de as isLocalNetworkUrl, t as isType, _e as modifyRequestHeadersPermission, Ye as net, Ce as permissions, Z as promptInstall, he as readCookiePermission, Lt as relayWorker, ye as removeRequestHeaderRule, o as revive, v as setMissingExtensionHandler, ve as setRequestHeaderRule, a as type, y as waitForExtensionExposure };
|