@fkn/lib 0.4.0 → 0.4.2
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 +24 -7
- package/index.js +311 -232
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -1,56 +1,56 @@
|
|
|
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 = ["fkn.app", "fkn.dev"], x = (e) => {
|
|
54
54
|
let t;
|
|
55
55
|
try {
|
|
56
56
|
t = new URL(e);
|
|
@@ -59,46 +59,46 @@ var h = () => typeof document > "u" ? !1 : document.documentElement.dataset[ae]
|
|
|
59
59
|
}
|
|
60
60
|
if (t.protocol === "chrome-extension:" || t.protocol === "moz-extension:") return !0;
|
|
61
61
|
let n = t.hostname;
|
|
62
|
-
return
|
|
63
|
-
},
|
|
64
|
-
if (
|
|
65
|
-
},
|
|
62
|
+
return le.some((e) => n === e || n.endsWith(`.${e}`));
|
|
63
|
+
}, S = (e) => {
|
|
64
|
+
if (x(e)) throw Error("fetch: refusing to target the extension's own pages or FKN platform domains");
|
|
65
|
+
}, ue = ["origin", "referer"], de = (e) => {
|
|
66
66
|
if (!e?.headers) return;
|
|
67
|
-
let t = new Headers(e.headers), n =
|
|
67
|
+
let t = new Headers(e.headers), n = ue.map((e) => {
|
|
68
68
|
let n = t.get(e);
|
|
69
69
|
return n === null ? void 0 : [e, n];
|
|
70
70
|
}).filter((e) => e !== void 0);
|
|
71
71
|
return n.length ? n : void 0;
|
|
72
|
-
},
|
|
72
|
+
}, C = async (e, t) => {
|
|
73
73
|
let n = new Request(e, t);
|
|
74
|
-
|
|
74
|
+
S(n.url);
|
|
75
75
|
let r = n.body ? await n.arrayBuffer() : null;
|
|
76
|
-
return
|
|
76
|
+
return b.proxyFetch({
|
|
77
77
|
url: n.url,
|
|
78
78
|
method: n.method,
|
|
79
79
|
headers: [...n.headers],
|
|
80
80
|
body: r,
|
|
81
81
|
credentials: t?.credentials === "include" ? "include" : "omit",
|
|
82
82
|
redirect: n.redirect,
|
|
83
|
-
unsafeHeaders:
|
|
83
|
+
unsafeHeaders: de(t),
|
|
84
84
|
reason: t?.reason,
|
|
85
85
|
signal: t?.signal ?? void 0
|
|
86
86
|
});
|
|
87
|
-
},
|
|
87
|
+
}, fe = {
|
|
88
88
|
scope: "network.readCookie",
|
|
89
89
|
category: "network",
|
|
90
90
|
severity: 3,
|
|
91
91
|
unsafe: !0,
|
|
92
92
|
title: "Read a site’s cookie",
|
|
93
93
|
description: "Lets the app read a named cookie from another site, which can include the login token only that site should see."
|
|
94
|
-
},
|
|
94
|
+
}, pe = { get: (e) => b.getCookie(e) }, me = {
|
|
95
95
|
scope: "network.modifyRequestHeaders",
|
|
96
96
|
category: "network",
|
|
97
97
|
severity: 2,
|
|
98
98
|
unsafe: !0,
|
|
99
99
|
title: "Rewrite request headers to other sites",
|
|
100
100
|
description: "Lets the app set or remove headers (like Origin and Referer) on this page’s own requests to the listed sites."
|
|
101
|
-
},
|
|
101
|
+
}, he = (e) => b.setRequestHeaderRule(e), ge = (e) => b.removeRequestHeaderRule({ ruleId: e });
|
|
102
102
|
(() => {
|
|
103
103
|
let e = {}, t = [...c.selectorModules, ...r.selectorModules];
|
|
104
104
|
for (let n of t) n.render && !(n.type in e) && (e[n.type] = n.render);
|
|
@@ -106,7 +106,7 @@ var h = () => typeof document > "u" ? !1 : document.documentElement.dataset[ae]
|
|
|
106
106
|
})();
|
|
107
107
|
//#endregion
|
|
108
108
|
//#region node_modules/@mfkn/web-extension/lib/lib/frame.js
|
|
109
|
-
var
|
|
109
|
+
var w = "FKN_WEB_EXTENSION_ATTACH_FRAME_EVENT_KEY", T = (e) => {
|
|
110
110
|
if (!e || e === "about:blank") return !1;
|
|
111
111
|
let t;
|
|
112
112
|
try {
|
|
@@ -118,28 +118,28 @@ var C = "FKN_WEB_EXTENSION_ATTACH_FRAME_EVENT_KEY", w = (e) => {
|
|
|
118
118
|
if (t.protocol === "about:") return !1;
|
|
119
119
|
let n = t.hostname;
|
|
120
120
|
return n === "fkn.app" || n.endsWith(".fkn.app");
|
|
121
|
-
},
|
|
122
|
-
if (
|
|
123
|
-
},
|
|
121
|
+
}, E = (e) => {
|
|
122
|
+
if (T(e)) throw Error("attachFrame: refusing to target the extension's own pages or fkn.app");
|
|
123
|
+
}, _e = {
|
|
124
124
|
scope: "embed.iframe",
|
|
125
125
|
category: "embed",
|
|
126
126
|
severity: 0,
|
|
127
127
|
title: "Load another website inside this app",
|
|
128
128
|
description: "Lets the app embed external pages directly inside its own view."
|
|
129
|
-
},
|
|
129
|
+
}, ve = {
|
|
130
130
|
scope: "embed.open",
|
|
131
131
|
category: "embed",
|
|
132
132
|
severity: 0,
|
|
133
133
|
title: "Open a website inside this app",
|
|
134
134
|
description: "Lets the app navigate to another site without leaving its window."
|
|
135
|
-
},
|
|
135
|
+
}, ye = async ({ iframe: e, domains: t = [] }) => {
|
|
136
136
|
let n = crypto.randomUUID();
|
|
137
|
-
if (
|
|
138
|
-
e.dispatchEvent(new CustomEvent(
|
|
139
|
-
let { executeLocator: r, ensureLocatorPermission: i, goto: a } = await
|
|
137
|
+
if (E(e.src), await y(), !e.isConnected) throw Error("attachFrame: the iframe must be connected to the document before attaching");
|
|
138
|
+
e.dispatchEvent(new CustomEvent(w, { detail: n }));
|
|
139
|
+
let { executeLocator: r, ensureLocatorPermission: i, goto: a } = await b.attachFrame({
|
|
140
140
|
marker: n,
|
|
141
141
|
domains: t
|
|
142
|
-
}), o = s(r, i), c = (e, t = {}) => (
|
|
142
|
+
}), o = s(r, i), c = (e, t = {}) => (E(e), a({
|
|
143
143
|
url: e,
|
|
144
144
|
...t
|
|
145
145
|
})), l = () => e.src;
|
|
@@ -148,22 +148,22 @@ var C = "FKN_WEB_EXTENSION_ATTACH_FRAME_EVENT_KEY", w = (e) => {
|
|
|
148
148
|
goto: c,
|
|
149
149
|
url: l
|
|
150
150
|
};
|
|
151
|
-
},
|
|
151
|
+
}, be = { request: (e) => b.requestPermissions(e.map((e) => ({
|
|
152
152
|
key: e.key,
|
|
153
153
|
scope: e.scope ?? "",
|
|
154
154
|
reason: e.reason
|
|
155
|
-
}))) },
|
|
155
|
+
}))) }, xe = 32, Se = typeof CSS < "u" && CSS.supports("clip-path", "path('M0 0H1V1H0Z')"), Ce = (e) => {
|
|
156
156
|
let t = e.style;
|
|
157
157
|
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 (!
|
|
158
|
+
}, we = ({ x: e, y: t, width: n, height: r }) => `M${e} ${t}h${n}v${r}h${-n}Z`, Te = (e, { modal: t, rects: n }) => {
|
|
159
|
+
if (!Se) {
|
|
160
160
|
let r = t || n.length > 0;
|
|
161
161
|
e.style.setProperty("pointer-events", r ? "auto" : "none", "important"), e.style.setProperty("visibility", r ? "visible" : "hidden", "important");
|
|
162
162
|
return;
|
|
163
163
|
}
|
|
164
|
-
let r = t ? "none" : n.length === 0 ? "inset(100%)" : `path('${n.map(
|
|
164
|
+
let r = t ? "none" : n.length === 0 ? "inset(100%)" : `path('${n.map(we).join("")}')`, i = r === "none" || CSS.supports("clip-path", r) ? r : "inset(100%)";
|
|
165
165
|
e.style.setProperty("clip-path", i, "important");
|
|
166
|
-
},
|
|
166
|
+
}, Ee = (e) => {
|
|
167
167
|
if (typeof e != "object" || !e) return null;
|
|
168
168
|
let { x: t, y: n, width: r, height: i } = e;
|
|
169
169
|
if (![
|
|
@@ -172,52 +172,52 @@ var C = "FKN_WEB_EXTENSION_ATTACH_FRAME_EVENT_KEY", w = (e) => {
|
|
|
172
172
|
r,
|
|
173
173
|
i
|
|
174
174
|
].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)),
|
|
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)), u = Math.max(c, Math.min(Math.round(n + i), o));
|
|
176
176
|
return {
|
|
177
177
|
x: s,
|
|
178
178
|
y: c,
|
|
179
179
|
width: l - s,
|
|
180
|
-
height:
|
|
180
|
+
height: u - c
|
|
181
181
|
};
|
|
182
|
-
},
|
|
182
|
+
}, De = (e) => {
|
|
183
183
|
if (typeof e != "object" || !e) return null;
|
|
184
|
-
let t = e, n = (Array.isArray(t.rects) ? t.rects.slice(0,
|
|
184
|
+
let t = e, n = (Array.isArray(t.rects) ? t.rects.slice(0, xe) : []).map(Ee).filter((e) => e !== null && e.width > 0 && e.height > 0);
|
|
185
185
|
return {
|
|
186
186
|
modal: t.modal === !0,
|
|
187
187
|
rects: n
|
|
188
188
|
};
|
|
189
|
-
},
|
|
190
|
-
|
|
189
|
+
}, D = null, Oe = () => D !== null, ke = (e) => {
|
|
190
|
+
Ce(e), Te(e, {
|
|
191
191
|
modal: !1,
|
|
192
192
|
rects: []
|
|
193
|
-
}),
|
|
194
|
-
},
|
|
195
|
-
if (!
|
|
196
|
-
let t =
|
|
197
|
-
t &&
|
|
198
|
-
},
|
|
199
|
-
!
|
|
200
|
-
var
|
|
201
|
-
|
|
202
|
-
var
|
|
203
|
-
if (typeof window < "u") return
|
|
193
|
+
}), D = e;
|
|
194
|
+
}, Ae = (e) => {
|
|
195
|
+
if (!D) return;
|
|
196
|
+
let t = De(e);
|
|
197
|
+
t && Te(D, t);
|
|
198
|
+
}, je = "https://fkn.app", O = typeof globalThis < "u" && globalThis.document ? globalThis.document : void 0, Me = O?.querySelector(`iframe[src="${je}/api"]`) ?? null, k = O?.createElement("iframe") ?? null;
|
|
199
|
+
!Me && k && O && (k.src = `${je}/api`, O.body.appendChild(k));
|
|
200
|
+
var A = Me ?? k, Ne = A?.contentWindow ?? null;
|
|
201
|
+
A && O && ke(A);
|
|
202
|
+
var j = (() => {
|
|
203
|
+
if (typeof window < "u") return Ne ? {
|
|
204
204
|
receive: window,
|
|
205
|
-
emit:
|
|
205
|
+
emit: Ne
|
|
206
206
|
} : void 0;
|
|
207
207
|
if (typeof self < "u") return {
|
|
208
208
|
receive: self,
|
|
209
209
|
emit: self
|
|
210
210
|
};
|
|
211
|
-
})(),
|
|
211
|
+
})(), Pe = j !== void 0, M = j ? ee({}, {
|
|
212
212
|
key: "fkn-api",
|
|
213
|
-
transport:
|
|
213
|
+
transport: j
|
|
214
214
|
}) : new Promise(() => {});
|
|
215
|
-
|
|
216
|
-
|
|
215
|
+
M.then((e) => {
|
|
216
|
+
Oe() && e.overlay.setHost(Ae);
|
|
217
217
|
}, () => {});
|
|
218
218
|
//#endregion
|
|
219
219
|
//#region src/lib/fkn-target.ts
|
|
220
|
-
var
|
|
220
|
+
var Fe = ["fkn.app", "fkn.dev"], Ie = (e) => {
|
|
221
221
|
let t = typeof e == "string" ? e : e instanceof URL ? e.href : e.url, n;
|
|
222
222
|
try {
|
|
223
223
|
n = new URL(t);
|
|
@@ -225,9 +225,9 @@ var Ie = ["fkn.app", "fkn.dev"], Le = (e) => {
|
|
|
225
225
|
return;
|
|
226
226
|
}
|
|
227
227
|
let r = n.hostname;
|
|
228
|
-
if (
|
|
229
|
-
},
|
|
230
|
-
let e = await
|
|
228
|
+
if (Fe.some((e) => r === e || r.endsWith(`.${e}`))) throw Error(`fetch refuses FKN platform domains (${r})`);
|
|
229
|
+
}, Le = (e, t) => (Ie(e), M.then((n) => n.cloud.fetch(e, t))), Re = async () => {
|
|
230
|
+
let e = await M.then((e) => e.cloud.quota());
|
|
231
231
|
return {
|
|
232
232
|
premium: e.premium,
|
|
233
233
|
overQuota: e.overQuota,
|
|
@@ -238,9 +238,9 @@ var Ie = ["fkn.app", "fkn.dev"], Le = (e) => {
|
|
|
238
238
|
bytesPerSecond: e.bytesPerSecond,
|
|
239
239
|
bitsPerSecond: e.bytesPerSecond * 8
|
|
240
240
|
};
|
|
241
|
-
}, ze = /* @__PURE__ */ n({ lookup: () => Be }), Be = (e, t) =>
|
|
241
|
+
}, ze = /* @__PURE__ */ n({ lookup: () => Be }), Be = (e, t) => M.then((n) => n.cloud.dns.lookup(e, t)), Ve = new TextEncoder();
|
|
242
242
|
new TextDecoder();
|
|
243
|
-
var N = (e) =>
|
|
243
|
+
var N = (e) => f.isValid(e), P = (e) => p.isValid(e), He = (e) => N(e) ? 4 : P(e) ? 6 : 0, Ue = (...e) => {
|
|
244
244
|
if (typeof e[0] == "string") throw Error("FKN WebVPN does not support IPC connections");
|
|
245
245
|
let t = typeof e.at(-1) == "function" ? e.at(-1) : void 0;
|
|
246
246
|
return e[0] && typeof e[0] == "object" ? {
|
|
@@ -291,15 +291,15 @@ new TextEncoder(), new TextDecoder();
|
|
|
291
291
|
var Ke = /* @__PURE__ */ n({
|
|
292
292
|
Server: () => I,
|
|
293
293
|
Socket: () => F,
|
|
294
|
-
_default: () =>
|
|
294
|
+
_default: () => Xe,
|
|
295
295
|
connect: () => qe,
|
|
296
296
|
createConnection: () => Je,
|
|
297
|
-
createServer: () =>
|
|
298
|
-
default: () =>
|
|
297
|
+
createServer: () => Ye,
|
|
298
|
+
default: () => Xe,
|
|
299
299
|
isIP: () => He,
|
|
300
300
|
isIPv4: () => N,
|
|
301
301
|
isIPv6: () => P
|
|
302
|
-
}), F = class extends
|
|
302
|
+
}), F = class extends d.Duplex {
|
|
303
303
|
_localAddress;
|
|
304
304
|
_remoteAddress;
|
|
305
305
|
_webVPNTcpSocketPromise;
|
|
@@ -359,7 +359,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
359
359
|
}).catch(n);
|
|
360
360
|
}
|
|
361
361
|
connect(...e) {
|
|
362
|
-
let t = Ue(...e), n = this.__webvpn_tcp_socket_init__(
|
|
362
|
+
let t = Ue(...e), n = this.__webvpn_tcp_socket_init__(M.then((e) => e.cloud.webvpn.tcpSocket({
|
|
363
363
|
remoteAddress: t.host ?? "localhost",
|
|
364
364
|
remotePort: t.port
|
|
365
365
|
})));
|
|
@@ -486,7 +486,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
486
486
|
return this._remoteAddress.family;
|
|
487
487
|
}
|
|
488
488
|
timeout;
|
|
489
|
-
}, I = class extends
|
|
489
|
+
}, I = class extends ne {
|
|
490
490
|
_localAddress;
|
|
491
491
|
_webVPNTcpSocketListenerPromise;
|
|
492
492
|
constructor(e, t) {
|
|
@@ -507,7 +507,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
507
507
|
let t = Ue(...e), n = (e) => {
|
|
508
508
|
let t = new F({ connection: Promise.resolve(e) });
|
|
509
509
|
this.emit("connection", t);
|
|
510
|
-
}, r = (e) =>
|
|
510
|
+
}, r = (e) => M.then((r) => r.cloud.webvpn.tcpSocketListener({
|
|
511
511
|
localAddress: e,
|
|
512
512
|
localPort: t.port,
|
|
513
513
|
onConnection: n
|
|
@@ -541,27 +541,33 @@ var Ke = /* @__PURE__ */ n({
|
|
|
541
541
|
connections;
|
|
542
542
|
listening;
|
|
543
543
|
async [Symbol.asyncDispose]() {}
|
|
544
|
-
}, qe = (e, t) => new F().connect(e, t), Je = (e, t) => new F().connect(e, t),
|
|
544
|
+
}, qe = (e, t) => new F().connect(e, t), Je = (e, t) => new F().connect(e, t), Ye = (e, t) => {
|
|
545
545
|
typeof e == "function" && (t = e, e = void 0);
|
|
546
546
|
let n = new I(e);
|
|
547
547
|
return t && n.on("connection", t), n;
|
|
548
|
-
},
|
|
548
|
+
}, Xe = {
|
|
549
549
|
Socket: F,
|
|
550
550
|
Server: I,
|
|
551
551
|
connect: qe,
|
|
552
552
|
createConnection: Je,
|
|
553
|
-
createServer:
|
|
553
|
+
createServer: Ye,
|
|
554
554
|
isIP: He,
|
|
555
555
|
isIPv4: N,
|
|
556
556
|
isIPv6: P
|
|
557
|
-
},
|
|
558
|
-
Socket: () =>
|
|
559
|
-
createSocket: () =>
|
|
560
|
-
}),
|
|
557
|
+
}, Ze = /* @__PURE__ */ n({
|
|
558
|
+
Socket: () => Qe,
|
|
559
|
+
createSocket: () => tt
|
|
560
|
+
}), Qe = class extends ne {
|
|
561
561
|
_type;
|
|
562
562
|
_localAddress;
|
|
563
563
|
_remoteAddress;
|
|
564
564
|
_webVPNUdpSocketPromise;
|
|
565
|
+
_dataPort;
|
|
566
|
+
_socketId;
|
|
567
|
+
_sendQueue = [];
|
|
568
|
+
_sendQueueBytes = 0;
|
|
569
|
+
_sendFlushScheduled = !1;
|
|
570
|
+
_peerTailCache = /* @__PURE__ */ new Map();
|
|
565
571
|
constructor(e) {
|
|
566
572
|
if (super(e), !e) throw Error("Missing options");
|
|
567
573
|
this._type = e.type;
|
|
@@ -584,9 +590,63 @@ var Ke = /* @__PURE__ */ n({
|
|
|
584
590
|
}
|
|
585
591
|
});
|
|
586
592
|
}
|
|
593
|
+
_onDataPortBatch(e) {
|
|
594
|
+
let t = new DataView(e), n = 0;
|
|
595
|
+
for (; n + 4 <= e.byteLength;) {
|
|
596
|
+
let r = t.getUint32(n);
|
|
597
|
+
n += 4;
|
|
598
|
+
let i = n + r;
|
|
599
|
+
if (i > e.byteLength) break;
|
|
600
|
+
let a = n + 4, o = t.getUint8(a);
|
|
601
|
+
a += 1;
|
|
602
|
+
let s, c, l;
|
|
603
|
+
if (o === 2) {
|
|
604
|
+
if (!this._remoteAddress) {
|
|
605
|
+
n = i;
|
|
606
|
+
continue;
|
|
607
|
+
}
|
|
608
|
+
s = this._remoteAddress.address, c = this._remoteAddress.family, l = this._remoteAddress.port;
|
|
609
|
+
} else {
|
|
610
|
+
let n = new Uint8Array(e, a, o === 0 ? 4 : 16);
|
|
611
|
+
if (o === 0) c = "IPv4", s = `${n[0]}.${n[1]}.${n[2]}.${n[3]}`;
|
|
612
|
+
else {
|
|
613
|
+
c = "IPv6";
|
|
614
|
+
let e = [];
|
|
615
|
+
for (let t = 0; t < 16; t += 2) e.push(((n[t] << 8 | n[t + 1]) >>> 0).toString(16));
|
|
616
|
+
s = e.join(":");
|
|
617
|
+
}
|
|
618
|
+
a += n.byteLength, l = t.getUint16(a), a += 2;
|
|
619
|
+
}
|
|
620
|
+
let u = t.getUint32(a);
|
|
621
|
+
a += 4, this.emit("message", m.from(e.slice(a, a + u)), {
|
|
622
|
+
address: s,
|
|
623
|
+
family: c,
|
|
624
|
+
port: l,
|
|
625
|
+
size: u
|
|
626
|
+
}), n = i;
|
|
627
|
+
}
|
|
628
|
+
}
|
|
629
|
+
_peerTail(e, t) {
|
|
630
|
+
if (e === void 0 || t === void 0) return $e;
|
|
631
|
+
let n = `${e}|${t}`, r = this._peerTailCache.get(n);
|
|
632
|
+
if (r) return r;
|
|
633
|
+
let i = f.isValid(e) ? L(e) : R(e), a = new Uint8Array(1 + i.byteLength + 2);
|
|
634
|
+
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;
|
|
635
|
+
}
|
|
636
|
+
_portSend(e, t, n) {
|
|
637
|
+
let r = this._peerTail(t, n), i = new Uint8Array(8 + r.byteLength + 4 + e.byteLength), a = new DataView(i.buffer);
|
|
638
|
+
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(() => {
|
|
639
|
+
this._sendFlushScheduled = !1;
|
|
640
|
+
let e = this._sendQueue, t = this._sendQueueBytes;
|
|
641
|
+
if (this._sendQueue = [], this._sendQueueBytes = 0, !e.length || !this._dataPort) return;
|
|
642
|
+
let n = new Uint8Array(t), r = 0;
|
|
643
|
+
for (let t of e) n.set(t, r), r += t.byteLength;
|
|
644
|
+
this._dataPort.postMessage(n.buffer, [n.buffer]);
|
|
645
|
+
}));
|
|
646
|
+
}
|
|
587
647
|
addMembership(e, t) {
|
|
588
|
-
if (
|
|
589
|
-
let n =
|
|
648
|
+
if (f.isValid(e)) {
|
|
649
|
+
let n = L(e), r = t && f.isValid(t) ? L(t) : new Uint8Array([
|
|
590
650
|
0,
|
|
591
651
|
0,
|
|
592
652
|
0,
|
|
@@ -597,8 +657,8 @@ var Ke = /* @__PURE__ */ n({
|
|
|
597
657
|
group: n,
|
|
598
658
|
interface: r
|
|
599
659
|
});
|
|
600
|
-
} else if (
|
|
601
|
-
let t =
|
|
660
|
+
} else if (p.isValid(e)) {
|
|
661
|
+
let t = R(e);
|
|
602
662
|
this._setUdpOption({
|
|
603
663
|
type: 7,
|
|
604
664
|
group: t,
|
|
@@ -612,21 +672,26 @@ var Ke = /* @__PURE__ */ n({
|
|
|
612
672
|
}
|
|
613
673
|
bind(...e) {
|
|
614
674
|
let t = We(...e), n = this._type === "udp6" ? "::" : "0.0.0.0";
|
|
615
|
-
return this._webVPNUdpSocketPromise =
|
|
675
|
+
return this._webVPNUdpSocketPromise = M.then((e) => e.cloud.webvpn.udpSocket({
|
|
616
676
|
type: this._type,
|
|
617
677
|
address: t.address ?? n,
|
|
618
|
-
port: t.port
|
|
678
|
+
port: t.port,
|
|
679
|
+
dataPort: !0
|
|
619
680
|
})).then((e) => {
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
681
|
+
if (e.dataPort) this._socketId = e.socketId, this._dataPort = e.dataPort, this._dataPort.onmessage = (e) => this._onDataPortBatch(e.data);
|
|
682
|
+
else {
|
|
683
|
+
let t = e.dataReadableStream.getReader(), n = async () => {
|
|
684
|
+
let { value: e, done: r } = await t.read();
|
|
685
|
+
r || (this.emit("message", m.from(e.data), {
|
|
686
|
+
address: e.address,
|
|
687
|
+
family: e.family,
|
|
688
|
+
port: e.port,
|
|
689
|
+
size: e.size
|
|
690
|
+
}), n());
|
|
691
|
+
};
|
|
692
|
+
n();
|
|
693
|
+
}
|
|
694
|
+
return this._localAddress = {
|
|
630
695
|
address: e.localAddress,
|
|
631
696
|
family: e.localFamily,
|
|
632
697
|
port: e.localPort
|
|
@@ -636,14 +701,14 @@ var Ke = /* @__PURE__ */ n({
|
|
|
636
701
|
}), this._webVPNUdpSocketPromise.then((e) => {
|
|
637
702
|
e && this.emit("listening");
|
|
638
703
|
}), t.callback && this._webVPNUdpSocketPromise.then((e) => {
|
|
639
|
-
e && t.callback();
|
|
704
|
+
e && t.callback.call(this);
|
|
640
705
|
}), this;
|
|
641
706
|
}
|
|
642
707
|
close(e) {
|
|
643
708
|
if (!this._webVPNUdpSocketPromise) throw Error("Socket not bound");
|
|
644
709
|
return this._webVPNUdpSocketPromise.then(async (t) => {
|
|
645
710
|
if (!t) throw Error("Socket not bound");
|
|
646
|
-
await t.close(), e && e(), this.emit("close");
|
|
711
|
+
this._dataPort?.close(), this._dataPort = void 0, await t.close(), e && e(), this.emit("close");
|
|
647
712
|
}), this;
|
|
648
713
|
}
|
|
649
714
|
connect(...e) {
|
|
@@ -672,8 +737,8 @@ var Ke = /* @__PURE__ */ n({
|
|
|
672
737
|
});
|
|
673
738
|
}
|
|
674
739
|
dropMembership(e, t) {
|
|
675
|
-
if (
|
|
676
|
-
let n =
|
|
740
|
+
if (f.isValid(e)) {
|
|
741
|
+
let n = L(e), r = t && f.isValid(t) ? L(t) : new Uint8Array([
|
|
677
742
|
0,
|
|
678
743
|
0,
|
|
679
744
|
0,
|
|
@@ -684,8 +749,8 @@ var Ke = /* @__PURE__ */ n({
|
|
|
684
749
|
group: n,
|
|
685
750
|
interface: r
|
|
686
751
|
});
|
|
687
|
-
} else if (
|
|
688
|
-
let t =
|
|
752
|
+
} else if (p.isValid(e)) {
|
|
753
|
+
let t = R(e);
|
|
689
754
|
this._setUdpOption({
|
|
690
755
|
type: 8,
|
|
691
756
|
group: t,
|
|
@@ -722,12 +787,16 @@ var Ke = /* @__PURE__ */ n({
|
|
|
722
787
|
if (!this._webVPNUdpSocketPromise) throw Error("Socket not bound");
|
|
723
788
|
this._webVPNUdpSocketPromise.then((e) => {
|
|
724
789
|
if (!e) throw Error("Socket not bound");
|
|
725
|
-
let r =
|
|
790
|
+
let r = et(t.message), i = t.callback, a = t.address ?? n, o = this._remoteAddress !== void 0 && t.address === void 0;
|
|
791
|
+
if (this._dataPort && (o || f.isValid(a) || p.isValid(a))) {
|
|
792
|
+
this._portSend(r, o ? void 0 : a, o ? void 0 : t.port), i?.call(this, null, r.byteLength);
|
|
793
|
+
return;
|
|
794
|
+
}
|
|
726
795
|
e.send({
|
|
727
796
|
...t,
|
|
728
|
-
address:
|
|
729
|
-
message: r.buffer
|
|
730
|
-
});
|
|
797
|
+
address: a,
|
|
798
|
+
message: r.byteOffset === 0 && r.byteLength === r.buffer.byteLength ? r.buffer : r.buffer.slice(r.byteOffset, r.byteOffset + r.byteLength)
|
|
799
|
+
}).then(() => i?.call(this, null, r.byteLength), (e) => i ? i.call(this, e, 0) : this.emit("error", e));
|
|
731
800
|
});
|
|
732
801
|
}
|
|
733
802
|
setBroadcast(e) {
|
|
@@ -780,33 +849,43 @@ var Ke = /* @__PURE__ */ n({
|
|
|
780
849
|
this.close(e);
|
|
781
850
|
});
|
|
782
851
|
}
|
|
783
|
-
},
|
|
852
|
+
}, $e = new Uint8Array([2]), et = (e) => {
|
|
853
|
+
if (typeof e == "string") return Ve.encode(e);
|
|
854
|
+
if (e instanceof Uint8Array) return e;
|
|
855
|
+
if (ArrayBuffer.isView(e)) return new Uint8Array(e.buffer, e.byteOffset, e.byteLength);
|
|
856
|
+
if (Array.isArray(e)) {
|
|
857
|
+
let t = e.map(et), n = new Uint8Array(t.reduce((e, t) => e + t.byteLength, 0)), r = 0;
|
|
858
|
+
for (let e of t) n.set(e, r), r += e.byteLength;
|
|
859
|
+
return n;
|
|
860
|
+
}
|
|
861
|
+
return new Uint8Array(e);
|
|
862
|
+
}, L = (e) => {
|
|
784
863
|
let t = e.split(".").map((e) => parseInt(e, 10));
|
|
785
864
|
if (t.length !== 4 || t.some((e) => Number.isNaN(e) || e < 0 || e > 255)) throw Error(`Invalid IPv4 address: ${e}`);
|
|
786
865
|
return new Uint8Array(t);
|
|
787
|
-
},
|
|
788
|
-
let t = new
|
|
866
|
+
}, R = (e) => {
|
|
867
|
+
let t = new p(e).getBitsBase16(0, 128).match(/.{2}/g);
|
|
789
868
|
if (!t || t.length !== 16) throw Error(`Invalid IPv6 address: ${e}`);
|
|
790
869
|
return new Uint8Array(t.map((e) => parseInt(e, 16)));
|
|
791
|
-
},
|
|
792
|
-
let n = new
|
|
870
|
+
}, tt = (e, t) => {
|
|
871
|
+
let n = new Qe(typeof e == "string" ? { type: e } : e);
|
|
793
872
|
return t && n.on("message", t), n;
|
|
794
|
-
},
|
|
873
|
+
}, nt = /* @__PURE__ */ n({
|
|
795
874
|
Agent: () => Y,
|
|
796
875
|
ClientRequest: () => q,
|
|
797
876
|
HTTPParser: () => U,
|
|
798
877
|
IncomingMessage: () => W,
|
|
799
|
-
METHODS: () =>
|
|
878
|
+
METHODS: () => it,
|
|
800
879
|
STATUS_CODES: () => z,
|
|
801
880
|
Server: () => J,
|
|
802
881
|
ServerResponse: () => K,
|
|
803
|
-
_default: () =>
|
|
804
|
-
createServer: () =>
|
|
805
|
-
default: () =>
|
|
806
|
-
get: () =>
|
|
807
|
-
globalAgent: () =>
|
|
882
|
+
_default: () => ht,
|
|
883
|
+
createServer: () => mt,
|
|
884
|
+
default: () => ht,
|
|
885
|
+
get: () => pt,
|
|
886
|
+
globalAgent: () => ft,
|
|
808
887
|
request: () => X
|
|
809
|
-
}),
|
|
888
|
+
}), rt = new TextDecoder("latin1"), it = /* @__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
889
|
100: "Continue",
|
|
811
890
|
101: "Switching Protocols",
|
|
812
891
|
102: "Processing",
|
|
@@ -870,7 +949,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
870
949
|
509: "Bandwidth Limit Exceeded",
|
|
871
950
|
510: "Not Extended",
|
|
872
951
|
511: "Network Authentication Required"
|
|
873
|
-
},
|
|
952
|
+
}, at = new Set([
|
|
874
953
|
"content-type",
|
|
875
954
|
"content-length",
|
|
876
955
|
"user-agent",
|
|
@@ -889,15 +968,15 @@ var Ke = /* @__PURE__ */ n({
|
|
|
889
968
|
"server",
|
|
890
969
|
"age",
|
|
891
970
|
"expires"
|
|
892
|
-
]), B = 13, V = 10,
|
|
971
|
+
]), B = 13, V = 10, ot = /^[\^_`a-zA-Z\-0-9!#$%&'*+.|~]+$/, H = (e, t) => (e.code = t, e), st = (e, t) => {
|
|
893
972
|
if (e.length === 0) return t;
|
|
894
973
|
if (t.length === 0) return e;
|
|
895
974
|
let n = new Uint8Array(e.length + t.length);
|
|
896
975
|
return n.set(e, 0), n.set(t, e.length), n;
|
|
897
|
-
},
|
|
976
|
+
}, ct = (e, t) => {
|
|
898
977
|
for (let n = t; n + 1 < e.length; n++) if (e[n] === B && e[n + 1] === V) return n;
|
|
899
978
|
return -1;
|
|
900
|
-
},
|
|
979
|
+
}, lt = (e) => {
|
|
901
980
|
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
981
|
return -1;
|
|
903
982
|
}, U = class {
|
|
@@ -911,10 +990,10 @@ var Ke = /* @__PURE__ */ n({
|
|
|
911
990
|
this.mode = e, this.handlers = t;
|
|
912
991
|
}
|
|
913
992
|
execute(e) {
|
|
914
|
-
this.buf =
|
|
993
|
+
this.buf = st(this.buf, e);
|
|
915
994
|
let t = !0;
|
|
916
995
|
for (; t;) if (t = !1, this.state === "HEAD") {
|
|
917
|
-
let e =
|
|
996
|
+
let e = lt(this.buf);
|
|
918
997
|
if (e === -1) return;
|
|
919
998
|
let n = this.buf.subarray(0, e);
|
|
920
999
|
this.buf = this.buf.subarray(e + 4);
|
|
@@ -929,7 +1008,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
929
1008
|
this.state = "HEAD", this.framing = "none", this.bodyRemaining = 0, this.chunkState = "size", this.skipBody = !1;
|
|
930
1009
|
}
|
|
931
1010
|
parseHead(e) {
|
|
932
|
-
let t =
|
|
1011
|
+
let t = rt.decode(e).split("\r\n"), n = t.shift() ?? "", r = [];
|
|
933
1012
|
for (let e of t) (e.startsWith(" ") || e.startsWith(" ")) && r.length > 0 ? r[r.length - 1] += " " + e.trim() : r.push(e);
|
|
934
1013
|
let i = [], a = {};
|
|
935
1014
|
for (let e of r) {
|
|
@@ -967,7 +1046,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
967
1046
|
return;
|
|
968
1047
|
}
|
|
969
1048
|
let i = e[r];
|
|
970
|
-
i === void 0 ? e[r] = n :
|
|
1049
|
+
i === void 0 ? e[r] = n : at.has(r) || (e[r] = `${i}, ${n}`);
|
|
971
1050
|
}
|
|
972
1051
|
setupBody(e) {
|
|
973
1052
|
if (this.skipBody) {
|
|
@@ -1000,9 +1079,9 @@ var Ke = /* @__PURE__ */ n({
|
|
|
1000
1079
|
}
|
|
1001
1080
|
consumeChunked() {
|
|
1002
1081
|
for (;;) if (this.chunkState === "size") {
|
|
1003
|
-
let e =
|
|
1082
|
+
let e = ct(this.buf, 0);
|
|
1004
1083
|
if (e === -1) return !1;
|
|
1005
|
-
let t =
|
|
1084
|
+
let t = rt.decode(this.buf.subarray(0, e)), n = parseInt(t.split(";")[0].trim(), 16);
|
|
1006
1085
|
if (this.buf = this.buf.subarray(e + 2), Number.isNaN(n)) return !0;
|
|
1007
1086
|
n === 0 ? this.chunkState = "trailer" : (this.bodyRemaining = n, this.chunkState = "data");
|
|
1008
1087
|
} else if (this.chunkState === "data") {
|
|
@@ -1013,13 +1092,13 @@ var Ke = /* @__PURE__ */ n({
|
|
|
1013
1092
|
if (this.buf.length < 2) return !1;
|
|
1014
1093
|
this.buf = this.buf.subarray(2), this.chunkState = "size";
|
|
1015
1094
|
} else {
|
|
1016
|
-
let e =
|
|
1095
|
+
let e = ct(this.buf, 0);
|
|
1017
1096
|
if (e === -1) return !1;
|
|
1018
1097
|
let t = e === 0;
|
|
1019
1098
|
if (this.buf = this.buf.subarray(e + 2), t) return !0;
|
|
1020
1099
|
}
|
|
1021
1100
|
}
|
|
1022
|
-
},
|
|
1101
|
+
}, ut = (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
1102
|
httpVersion = "1.1";
|
|
1024
1103
|
httpVersionMajor = 1;
|
|
1025
1104
|
httpVersionMinor = 1;
|
|
@@ -1046,7 +1125,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
1046
1125
|
setTimeout(e, t) {
|
|
1047
1126
|
return this.socket.setTimeout(e, t), this;
|
|
1048
1127
|
}
|
|
1049
|
-
}, G = class extends
|
|
1128
|
+
}, G = class extends d.Writable {
|
|
1050
1129
|
_headerStore = /* @__PURE__ */ new Map();
|
|
1051
1130
|
headersSent = !1;
|
|
1052
1131
|
chunkedEncoding = !1;
|
|
@@ -1054,7 +1133,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
1054
1133
|
_bodyWritten = !1;
|
|
1055
1134
|
setHeader(e, t) {
|
|
1056
1135
|
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" || !
|
|
1136
|
+
if (typeof e != "string" || !ot.test(e)) throw H(/* @__PURE__ */ TypeError(`Header name must be a valid HTTP token [${JSON.stringify(String(e))}]`), "ERR_INVALID_HTTP_TOKEN");
|
|
1058
1137
|
if (t === void 0) throw H(/* @__PURE__ */ TypeError(`Invalid value "undefined" for header "${e}"`), "ERR_HTTP_INVALID_HEADER_VALUE");
|
|
1059
1138
|
return this._headerStore.set(e.toLowerCase(), [e, Array.isArray(t) ? [...t] : t]), this;
|
|
1060
1139
|
}
|
|
@@ -1095,25 +1174,25 @@ var Ke = /* @__PURE__ */ n({
|
|
|
1095
1174
|
return this._bodyWritten = !0, super.write(e, t, n);
|
|
1096
1175
|
}
|
|
1097
1176
|
_write(e, t, n) {
|
|
1098
|
-
let r =
|
|
1099
|
-
if (this.headersSent ||= (this._implicitHeader(), i.push(
|
|
1177
|
+
let r = ut(e), i = [];
|
|
1178
|
+
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
1179
|
n();
|
|
1101
1180
|
return;
|
|
1102
1181
|
}
|
|
1103
|
-
this._writeToSocket(
|
|
1182
|
+
this._writeToSocket(m.concat(i), n);
|
|
1104
1183
|
}
|
|
1105
1184
|
_final(e) {
|
|
1106
1185
|
let t = [];
|
|
1107
|
-
if (this.headersSent ||= (!this.chunkedEncoding && !this.hasHeader("content-length") && this.setHeader("Content-Length", 0), this._implicitHeader(), t.push(
|
|
1186
|
+
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
1187
|
e();
|
|
1109
1188
|
return;
|
|
1110
1189
|
}
|
|
1111
|
-
this._writeToSocket(
|
|
1190
|
+
this._writeToSocket(m.concat(t), e);
|
|
1112
1191
|
}
|
|
1113
1192
|
end(e, t, n) {
|
|
1114
1193
|
if (e != null && typeof e != "function" && !this._bodyWritten && !this.headersSent && !this.chunkedEncoding && !this.hasHeader("content-length")) {
|
|
1115
1194
|
let n = typeof t == "string" ? t : void 0;
|
|
1116
|
-
this.setHeader("Content-Length",
|
|
1195
|
+
this.setHeader("Content-Length", ut(e, n).length);
|
|
1117
1196
|
}
|
|
1118
1197
|
return super.end(e, t, n);
|
|
1119
1198
|
}
|
|
@@ -1157,12 +1236,12 @@ var Ke = /* @__PURE__ */ n({
|
|
|
1157
1236
|
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
1237
|
}
|
|
1159
1238
|
writeContinue() {
|
|
1160
|
-
this._writeToSocket(
|
|
1239
|
+
this._writeToSocket(m.from("HTTP/1.1 100 Continue\r\n\r\n", "latin1"), () => {});
|
|
1161
1240
|
}
|
|
1162
1241
|
setTimeout(e, t) {
|
|
1163
1242
|
return this.socket?.setTimeout(e, t), this;
|
|
1164
1243
|
}
|
|
1165
|
-
},
|
|
1244
|
+
}, dt = (...e) => {
|
|
1166
1245
|
let t = {}, n = {}, r, i = [...e], a = i.shift();
|
|
1167
1246
|
if (typeof a == "string" || a instanceof URL) {
|
|
1168
1247
|
let e = typeof a == "string" ? new URL(a) : a;
|
|
@@ -1206,7 +1285,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
1206
1285
|
let e = this.protocol === "https:" && r === 443 || this.protocol !== "https:" && r === 80;
|
|
1207
1286
|
this.setHeader("Host", e ? n : `${n}:${r}`);
|
|
1208
1287
|
}
|
|
1209
|
-
e.auth && !this.hasHeader("authorization") && this.setHeader("Authorization", `Basic ${
|
|
1288
|
+
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
1289
|
this._aborted || this.emit("error", e);
|
|
1211
1290
|
}), this._attachResponseParser(), this.socket.connect({
|
|
1212
1291
|
host: n,
|
|
@@ -1227,7 +1306,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
1227
1306
|
e._applyHead(n), this.method === "HEAD" && (t.skipBody = !0), this.res = e, this.emit("response", e);
|
|
1228
1307
|
},
|
|
1229
1308
|
onBody: (t) => {
|
|
1230
|
-
e.push(
|
|
1309
|
+
e.push(m.from(t));
|
|
1231
1310
|
},
|
|
1232
1311
|
onComplete: () => {
|
|
1233
1312
|
e.complete = !0, e.push(null);
|
|
@@ -1281,7 +1360,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
1281
1360
|
}), this.emit("request", t, i);
|
|
1282
1361
|
},
|
|
1283
1362
|
onBody: (e) => {
|
|
1284
|
-
t?.push(
|
|
1363
|
+
t?.push(m.from(e));
|
|
1285
1364
|
},
|
|
1286
1365
|
onComplete: () => {
|
|
1287
1366
|
t && (t.complete = !0, t.push(null)), t = null;
|
|
@@ -1303,113 +1382,113 @@ var Ke = /* @__PURE__ */ n({
|
|
|
1303
1382
|
return `${e.host ?? "localhost"}:${e.port ?? ""}:${e.localAddress ?? ""}`;
|
|
1304
1383
|
}
|
|
1305
1384
|
destroy() {}
|
|
1306
|
-
},
|
|
1307
|
-
let { options: t, callback: n } =
|
|
1385
|
+
}, ft = new Y(), X = (...e) => {
|
|
1386
|
+
let { options: t, callback: n } = dt(...e);
|
|
1308
1387
|
return new q(t, n);
|
|
1309
|
-
},
|
|
1388
|
+
}, pt = (...e) => {
|
|
1310
1389
|
let t = X(...e);
|
|
1311
1390
|
return t.end(), t;
|
|
1312
|
-
},
|
|
1313
|
-
METHODS:
|
|
1391
|
+
}, mt = (e, t) => new J(e, t), ht = {
|
|
1392
|
+
METHODS: it,
|
|
1314
1393
|
STATUS_CODES: z,
|
|
1315
1394
|
Agent: Y,
|
|
1316
|
-
globalAgent:
|
|
1395
|
+
globalAgent: ft,
|
|
1317
1396
|
Server: J,
|
|
1318
1397
|
ServerResponse: K,
|
|
1319
1398
|
IncomingMessage: W,
|
|
1320
1399
|
ClientRequest: q,
|
|
1321
1400
|
OutgoingMessage: G,
|
|
1322
|
-
createServer:
|
|
1401
|
+
createServer: mt,
|
|
1323
1402
|
request: X,
|
|
1324
|
-
get:
|
|
1325
|
-
},
|
|
1326
|
-
available: () =>
|
|
1327
|
-
dgram: () =>
|
|
1403
|
+
get: pt
|
|
1404
|
+
}, gt = /* @__PURE__ */ n({
|
|
1405
|
+
available: () => _t,
|
|
1406
|
+
dgram: () => Ze,
|
|
1328
1407
|
dns: () => ze,
|
|
1329
|
-
fetch: () =>
|
|
1330
|
-
http: () =>
|
|
1408
|
+
fetch: () => Le,
|
|
1409
|
+
http: () => nt,
|
|
1331
1410
|
net: () => Ke,
|
|
1332
1411
|
quota: () => Re
|
|
1333
|
-
}),
|
|
1412
|
+
}), _t = () => Pe, Z = async (e) => {
|
|
1334
1413
|
if (typeof window > "u") return !1;
|
|
1335
|
-
if (
|
|
1336
|
-
let t = await
|
|
1414
|
+
if (g()) return !0;
|
|
1415
|
+
let t = await M, n = null, r = new Promise((e) => {
|
|
1337
1416
|
n = () => {
|
|
1338
|
-
|
|
1339
|
-
},
|
|
1417
|
+
g() && e(!0);
|
|
1418
|
+
}, h.addEventListener("statuschange", n);
|
|
1340
1419
|
}), i = t.installPrompt.show(e).then(() => !1), a = await Promise.race([r, i]);
|
|
1341
|
-
return n &&
|
|
1420
|
+
return n && h.removeEventListener("statuschange", n), await t.installPrompt.hide().catch(() => {}), a;
|
|
1342
1421
|
}, Q = null;
|
|
1343
|
-
|
|
1422
|
+
v(() => (Q ||= Z().then(() => void 0).finally(() => {
|
|
1344
1423
|
Q = null;
|
|
1345
1424
|
}), Q));
|
|
1346
1425
|
//#endregion
|
|
1347
1426
|
//#region src/lib/desktop.ts
|
|
1348
|
-
var
|
|
1349
|
-
available: () =>
|
|
1350
|
-
dgram: () =>
|
|
1351
|
-
dns: () =>
|
|
1352
|
-
fetch: () =>
|
|
1353
|
-
fs: () =>
|
|
1354
|
-
net: () =>
|
|
1355
|
-
}),
|
|
1427
|
+
var vt = /* @__PURE__ */ n({
|
|
1428
|
+
available: () => yt,
|
|
1429
|
+
dgram: () => Ct,
|
|
1430
|
+
dns: () => xt,
|
|
1431
|
+
fetch: () => bt,
|
|
1432
|
+
fs: () => wt,
|
|
1433
|
+
net: () => St
|
|
1434
|
+
}), yt = () => !1, $ = (e) => (...t) => {
|
|
1356
1435
|
throw Error(`The FKN desktop app is not connected, desktop.${e} is unavailable`);
|
|
1357
|
-
},
|
|
1436
|
+
}, bt = $("fetch"), xt = { lookup: $("dns.lookup") }, St = {
|
|
1358
1437
|
connect: $("net.connect"),
|
|
1359
1438
|
createConnection: $("net.createConnection"),
|
|
1360
1439
|
createServer: $("net.createServer")
|
|
1361
|
-
},
|
|
1440
|
+
}, Ct = { createSocket: $("dgram.createSocket") }, wt = {
|
|
1362
1441
|
isLocalDirectorySupported: () => !1,
|
|
1363
1442
|
pickLocalDirectory: $("fs.pickLocalDirectory"),
|
|
1364
1443
|
queryDirectoryPermission: $("fs.queryDirectoryPermission"),
|
|
1365
1444
|
ensureDirectoryPermission: $("fs.ensureDirectoryPermission")
|
|
1366
|
-
},
|
|
1367
|
-
if (
|
|
1445
|
+
}, Tt = () => typeof document < "u" && g(), Et = async (e, t) => {
|
|
1446
|
+
if (Ie(e), t?.credentials === "include") {
|
|
1368
1447
|
if (typeof document > "u") throw Error("fetch with credentials needs the FKN extension, which only exists in window realms");
|
|
1369
|
-
return
|
|
1448
|
+
return C(e, t);
|
|
1370
1449
|
}
|
|
1371
|
-
return
|
|
1450
|
+
return Tt() ? C(e, {
|
|
1372
1451
|
...t,
|
|
1373
1452
|
credentials: "omit"
|
|
1374
|
-
}) :
|
|
1375
|
-
},
|
|
1376
|
-
ATTACH_FRAME_EVENT_KEY: () =>
|
|
1377
|
-
assertAttachableFrameUrl: () =>
|
|
1378
|
-
assertFetchableUrl: () =>
|
|
1379
|
-
attachFrame: () =>
|
|
1380
|
-
attachFramePermission: () =>
|
|
1381
|
-
available: () =>
|
|
1453
|
+
}) : yt() ? bt(e, t) : Le(e, t);
|
|
1454
|
+
}, Dt = /* @__PURE__ */ n({
|
|
1455
|
+
ATTACH_FRAME_EVENT_KEY: () => w,
|
|
1456
|
+
assertAttachableFrameUrl: () => E,
|
|
1457
|
+
assertFetchableUrl: () => S,
|
|
1458
|
+
attachFrame: () => ye,
|
|
1459
|
+
attachFramePermission: () => _e,
|
|
1460
|
+
available: () => Tt,
|
|
1382
1461
|
box: () => l,
|
|
1383
|
-
cookies: () =>
|
|
1462
|
+
cookies: () => pe,
|
|
1384
1463
|
createVideoElementHandle: () => e,
|
|
1385
|
-
events: () =>
|
|
1386
|
-
extension: () =>
|
|
1387
|
-
fetch: () =>
|
|
1388
|
-
fetchCredentialedPermission: () =>
|
|
1389
|
-
fetchPermission: () =>
|
|
1390
|
-
gotoPermission: () =>
|
|
1464
|
+
events: () => h,
|
|
1465
|
+
extension: () => h,
|
|
1466
|
+
fetch: () => C,
|
|
1467
|
+
fetchCredentialedPermission: () => ce,
|
|
1468
|
+
fetchPermission: () => se,
|
|
1469
|
+
gotoPermission: () => ve,
|
|
1391
1470
|
handleRevivableModules: () => i,
|
|
1392
|
-
isBlockedFetchUrl: () =>
|
|
1393
|
-
isBlockedFrameUrl: () =>
|
|
1394
|
-
isExtensionExposed: () =>
|
|
1471
|
+
isBlockedFetchUrl: () => x,
|
|
1472
|
+
isBlockedFrameUrl: () => T,
|
|
1473
|
+
isExtensionExposed: () => g,
|
|
1395
1474
|
isType: () => t,
|
|
1396
|
-
modifyRequestHeadersPermission: () =>
|
|
1397
|
-
permissions: () =>
|
|
1475
|
+
modifyRequestHeadersPermission: () => me,
|
|
1476
|
+
permissions: () => be,
|
|
1398
1477
|
promptInstall: () => Z,
|
|
1399
|
-
readCookiePermission: () =>
|
|
1400
|
-
removeRequestHeaderRule: () =>
|
|
1478
|
+
readCookiePermission: () => fe,
|
|
1479
|
+
removeRequestHeaderRule: () => ge,
|
|
1401
1480
|
revive: () => o,
|
|
1402
|
-
setMissingExtensionHandler: () =>
|
|
1403
|
-
setRequestHeaderRule: () =>
|
|
1481
|
+
setMissingExtensionHandler: () => v,
|
|
1482
|
+
setRequestHeaderRule: () => he,
|
|
1404
1483
|
type: () => a,
|
|
1405
|
-
waitForExtensionExposure: () =>
|
|
1406
|
-
}),
|
|
1407
|
-
ensureDirectoryPermission: () =>
|
|
1408
|
-
isLocalDirectorySupported: () =>
|
|
1409
|
-
pickLocalDirectory: () =>
|
|
1410
|
-
queryDirectoryPermission: () =>
|
|
1411
|
-
}),
|
|
1412
|
-
if (!
|
|
1484
|
+
waitForExtensionExposure: () => y
|
|
1485
|
+
}), Ot = /* @__PURE__ */ n({
|
|
1486
|
+
ensureDirectoryPermission: () => Mt,
|
|
1487
|
+
isLocalDirectorySupported: () => kt,
|
|
1488
|
+
pickLocalDirectory: () => At,
|
|
1489
|
+
queryDirectoryPermission: () => jt
|
|
1490
|
+
}), kt = () => typeof window < "u" && "showDirectoryPicker" in window, At = async (e = {}) => {
|
|
1491
|
+
if (!kt()) return;
|
|
1413
1492
|
let t = window.showDirectoryPicker;
|
|
1414
1493
|
return t({
|
|
1415
1494
|
mode: "readwrite",
|
|
@@ -1417,25 +1496,25 @@ var gt = /* @__PURE__ */ n({
|
|
|
1417
1496
|
}).catch((e) => {
|
|
1418
1497
|
if (e?.name !== "AbortError") throw e;
|
|
1419
1498
|
});
|
|
1420
|
-
},
|
|
1499
|
+
}, jt = async (e, t = "readwrite") => {
|
|
1421
1500
|
let { queryPermission: n } = e;
|
|
1422
1501
|
return await n?.call(e, { mode: t }) ?? "granted";
|
|
1423
|
-
},
|
|
1424
|
-
if (await
|
|
1502
|
+
}, Mt = async (e, t = "readwrite") => {
|
|
1503
|
+
if (await jt(e, t) === "granted") return !0;
|
|
1425
1504
|
let { requestPermission: n } = e;
|
|
1426
1505
|
return await n?.call(e, { mode: t }) === "granted";
|
|
1427
|
-
},
|
|
1506
|
+
}, Nt = "https://fkn.app", Pt = (e, t) => {
|
|
1428
1507
|
if (typeof window > "u") throw Error("FKN @fkn/lib: relayWorker must be called from the main thread");
|
|
1429
|
-
if (!
|
|
1430
|
-
|
|
1508
|
+
if (!A?.contentWindow) throw Error("FKN @fkn/lib: relayWorker called before the FKN iframe was injected");
|
|
1509
|
+
te({
|
|
1431
1510
|
receive: window,
|
|
1432
|
-
emit:
|
|
1511
|
+
emit: A.contentWindow
|
|
1433
1512
|
}, e, {
|
|
1434
1513
|
key: "fkn-api",
|
|
1435
|
-
originA: t?.originA ??
|
|
1514
|
+
originA: t?.originA ?? Nt,
|
|
1436
1515
|
originB: t?.originB ?? "*",
|
|
1437
1516
|
unregisterSignal: t?.unregisterSignal
|
|
1438
1517
|
});
|
|
1439
1518
|
};
|
|
1440
1519
|
//#endregion
|
|
1441
|
-
export {
|
|
1520
|
+
export { w as ATTACH_FRAME_EVENT_KEY, E as assertAttachableFrameUrl, S as assertFetchableUrl, ye as attachFrame, _e as attachFramePermission, l as box, gt as cloud, pe as cookies, e as createVideoElementHandle, vt as desktop, Ze as dgram, ze as dns, Dt as extension, Et as fetch, ce as fetchCredentialedPermission, se as fetchPermission, Ot as fs, ve as gotoPermission, i as handleRevivableModules, nt as http, x as isBlockedFetchUrl, T as isBlockedFrameUrl, g as isExtensionExposed, t as isType, me as modifyRequestHeadersPermission, Ke as net, be as permissions, Z as promptInstall, fe as readCookiePermission, Pt as relayWorker, ge as removeRequestHeaderRule, o as revive, v as setMissingExtensionHandler, he as setRequestHeaderRule, a as type, y as waitForExtensionExposure };
|