@fkn/lib 0.4.3 → 0.4.7
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/{background-C5D7dhf2.js → background-CaMv-fCT.js} +1 -1
- package/{background-DdXHHDsS.cjs → background-DLyTYBpc.cjs} +1 -1
- package/connect-button-Ng6Rf4-Y.cjs +1 -0
- package/connect-button-yKMuFxR9.js +4 -0
- package/index.cjs +6 -6
- package/index.d.ts +41 -1
- package/index.js +193 -170
- package/{locator-DUbu14FW.js → locator-CzKO_aEl.js} +1 -1
- package/{locator-jHaMLjtv.cjs → locator-DpDoiZSP.cjs} +1 -1
- package/package.json +22 -1
- package/react.cjs +1 -0
- package/react.d.ts +10 -0
- package/react.js +18 -0
package/index.js
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
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-
|
|
2
|
-
import {
|
|
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-CzKO_aEl.js";
|
|
2
|
+
import { t as u } from "./connect-button-yKMuFxR9.js";
|
|
3
|
+
import { createTypedEventTarget as ee, expose as te, relay as ne } from "osra";
|
|
3
4
|
import { Stream as d } from "stream";
|
|
4
|
-
import { EventEmitter as
|
|
5
|
+
import { EventEmitter as re } from "events";
|
|
5
6
|
import { Address4 as f, Address6 as p } from "ip-address";
|
|
6
7
|
import { Buffer as m } from "buffer";
|
|
7
8
|
//#region node_modules/@mfkn/web-extension/lib/utils/extension.js
|
|
8
|
-
var
|
|
9
|
-
typeof document < "u" && document.addEventListener(
|
|
9
|
+
var ie = "FKN_WEB_EXTENSION_MAIN_WORLD_CONTENT_SCRIPT_ENABLED_EVENT_KEY", ae = "fknExtension", h = ee();
|
|
10
|
+
typeof document < "u" && document.addEventListener(ie, (e) => {
|
|
10
11
|
h.dispatchEvent(new CustomEvent("statuschange", { detail: { enabled: e.detail.enabled } }));
|
|
11
12
|
});
|
|
12
|
-
var g = () => typeof document > "u" ? !1 : document.documentElement.dataset[
|
|
13
|
+
var g = () => typeof document > "u" ? !1 : document.documentElement.dataset[ae] === "true", _ = null, v = (e) => {
|
|
13
14
|
_ = e;
|
|
14
|
-
},
|
|
15
|
+
}, oe = 150, y = (e = 1e3) => new Promise((t, n) => {
|
|
15
16
|
if (g()) return t();
|
|
16
17
|
let r, i = (e) => {
|
|
17
18
|
clearTimeout(r), s.disconnect(), document.removeEventListener("readystatechange", c), e();
|
|
@@ -19,7 +20,7 @@ var g = () => typeof document > "u" ? !1 : document.documentElement.dataset[ie]
|
|
|
19
20
|
if (_ && (await _().catch(() => {}), g())) return t();
|
|
20
21
|
n(/* @__PURE__ */ Error("The FKN WebExtension is not installed, enabled or not exposed on this page."));
|
|
21
22
|
}), o = () => {
|
|
22
|
-
clearTimeout(r), r = setTimeout(() => g() ? i(t) : a(),
|
|
23
|
+
clearTimeout(r), r = setTimeout(() => g() ? i(t) : a(), oe);
|
|
23
24
|
}, s = new MutationObserver(() => {
|
|
24
25
|
g() && i(t);
|
|
25
26
|
}), c = () => {
|
|
@@ -30,39 +31,39 @@ var g = () => typeof document > "u" ? !1 : document.documentElement.dataset[ie]
|
|
|
30
31
|
attributeFilter: ["data-fkn-extension"]
|
|
31
32
|
}), document.addEventListener("readystatechange", c), document.readyState === "complete") return o();
|
|
32
33
|
g() && i(t);
|
|
33
|
-
}),
|
|
34
|
-
await y(),
|
|
34
|
+
}), se, b = new Proxy({}, { get: (e, t) => async (...e) => {
|
|
35
|
+
await y(), se ??= te({}, {
|
|
35
36
|
transport: window,
|
|
36
37
|
revivableModules: i
|
|
37
38
|
});
|
|
38
|
-
let n = (await
|
|
39
|
+
let n = (await se)[t];
|
|
39
40
|
return n(...e);
|
|
40
|
-
} }),
|
|
41
|
+
} }), ce = {
|
|
41
42
|
scope: "network.fetch",
|
|
42
43
|
category: "network",
|
|
43
44
|
severity: 0,
|
|
44
45
|
title: "Fetch data from other sites",
|
|
45
46
|
description: "Lets the app download public data from other websites directly, past the usual cross-origin limits."
|
|
46
|
-
},
|
|
47
|
+
}, le = {
|
|
47
48
|
scope: "network.fetchCredentialed",
|
|
48
49
|
category: "network",
|
|
49
50
|
severity: 3,
|
|
50
51
|
unsafe: !0,
|
|
51
52
|
title: "Fetch from other sites, signed in as you",
|
|
52
53
|
description: "Lets the app fetch other sites using your logged-in session cookies, so it can read data only you should see."
|
|
53
|
-
},
|
|
54
|
+
}, ue = {
|
|
54
55
|
scope: "network.fetchLocal",
|
|
55
56
|
category: "network",
|
|
56
57
|
severity: 3,
|
|
57
58
|
unsafe: !0,
|
|
58
59
|
title: "Access devices on your local network",
|
|
59
60
|
description: "Lets the app reach devices and services on your home or work network, which websites normally cannot touch."
|
|
60
|
-
},
|
|
61
|
+
}, de = (e) => {
|
|
61
62
|
let t = e.match(/^(\d+)\.(\d+)\.\d+\.\d+$/);
|
|
62
63
|
if (!t) return !1;
|
|
63
64
|
let [n, r] = [Number(t[1]), Number(t[2])];
|
|
64
65
|
return n === 10 || n === 127 || n === 0 || n === 169 && r === 254 || n === 172 && r >= 16 && r <= 31 || n === 192 && r === 168;
|
|
65
|
-
},
|
|
66
|
+
}, fe = (e) => {
|
|
66
67
|
let t;
|
|
67
68
|
try {
|
|
68
69
|
t = new URL(e);
|
|
@@ -70,8 +71,8 @@ var g = () => typeof document > "u" ? !1 : document.documentElement.dataset[ie]
|
|
|
70
71
|
return !1;
|
|
71
72
|
}
|
|
72
73
|
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:") :
|
|
74
|
-
},
|
|
74
|
+
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:") : de(n);
|
|
75
|
+
}, pe = ["fkn.app", "fkn.dev"], x = (e) => {
|
|
75
76
|
let t;
|
|
76
77
|
try {
|
|
77
78
|
t = new URL(e);
|
|
@@ -80,12 +81,12 @@ var g = () => typeof document > "u" ? !1 : document.documentElement.dataset[ie]
|
|
|
80
81
|
}
|
|
81
82
|
if (t.protocol === "chrome-extension:" || t.protocol === "moz-extension:") return !0;
|
|
82
83
|
let n = t.hostname;
|
|
83
|
-
return
|
|
84
|
+
return pe.some((e) => n === e || n.endsWith(`.${e}`));
|
|
84
85
|
}, S = (e) => {
|
|
85
86
|
if (x(e)) throw Error("fetch: refusing to target the extension's own pages or FKN platform domains");
|
|
86
|
-
},
|
|
87
|
+
}, me = ["origin", "referer"], he = (e) => {
|
|
87
88
|
if (!e?.headers) return;
|
|
88
|
-
let t = new Headers(e.headers), n =
|
|
89
|
+
let t = new Headers(e.headers), n = me.map((e) => {
|
|
89
90
|
let n = t.get(e);
|
|
90
91
|
return n === null ? void 0 : [e, n];
|
|
91
92
|
}).filter((e) => e !== void 0);
|
|
@@ -101,25 +102,25 @@ var g = () => typeof document > "u" ? !1 : document.documentElement.dataset[ie]
|
|
|
101
102
|
body: r,
|
|
102
103
|
credentials: t?.credentials === "include" ? "include" : "omit",
|
|
103
104
|
redirect: n.redirect,
|
|
104
|
-
unsafeHeaders:
|
|
105
|
+
unsafeHeaders: he(t),
|
|
105
106
|
reason: t?.reason,
|
|
106
107
|
signal: t?.signal ?? void 0
|
|
107
108
|
});
|
|
108
|
-
},
|
|
109
|
+
}, ge = {
|
|
109
110
|
scope: "network.readCookie",
|
|
110
111
|
category: "network",
|
|
111
112
|
severity: 3,
|
|
112
113
|
unsafe: !0,
|
|
113
114
|
title: "Read a site’s cookie",
|
|
114
115
|
description: "Lets the app read a named cookie from another site, which can include the login token only that site should see."
|
|
115
|
-
},
|
|
116
|
+
}, _e = { get: (e) => b.getCookie(e) }, ve = {
|
|
116
117
|
scope: "network.modifyRequestHeaders",
|
|
117
118
|
category: "network",
|
|
118
119
|
severity: 2,
|
|
119
120
|
unsafe: !0,
|
|
120
121
|
title: "Rewrite request headers to other sites",
|
|
121
122
|
description: "Lets the app set or remove headers (like Origin and Referer) on this page’s own requests to the listed sites."
|
|
122
|
-
},
|
|
123
|
+
}, ye = (e) => b.setRequestHeaderRule(e), be = (e) => b.removeRequestHeaderRule({ ruleId: e });
|
|
123
124
|
(() => {
|
|
124
125
|
let e = {}, t = [...c.selectorModules, ...r.selectorModules];
|
|
125
126
|
for (let n of t) n.render && !(n.type in e) && (e[n.type] = n.render);
|
|
@@ -141,19 +142,19 @@ var w = "FKN_WEB_EXTENSION_ATTACH_FRAME_EVENT_KEY", T = (e) => {
|
|
|
141
142
|
return n === "fkn.app" || n.endsWith(".fkn.app");
|
|
142
143
|
}, E = (e) => {
|
|
143
144
|
if (T(e)) throw Error("attachFrame: refusing to target the extension's own pages or fkn.app");
|
|
144
|
-
},
|
|
145
|
+
}, xe = {
|
|
145
146
|
scope: "embed.iframe",
|
|
146
147
|
category: "embed",
|
|
147
148
|
severity: 0,
|
|
148
149
|
title: "Load another website inside this app",
|
|
149
150
|
description: "Lets the app embed external pages directly inside its own view."
|
|
150
|
-
},
|
|
151
|
+
}, Se = {
|
|
151
152
|
scope: "embed.open",
|
|
152
153
|
category: "embed",
|
|
153
154
|
severity: 0,
|
|
154
155
|
title: "Open a website inside this app",
|
|
155
156
|
description: "Lets the app navigate to another site without leaving its window."
|
|
156
|
-
},
|
|
157
|
+
}, Ce = async ({ iframe: e, domains: t = [] }) => {
|
|
157
158
|
let n = crypto.randomUUID();
|
|
158
159
|
if (E(e.src), await y(), !e.isConnected) throw Error("attachFrame: the iframe must be connected to the document before attaching");
|
|
159
160
|
e.dispatchEvent(new CustomEvent(w, { detail: n }));
|
|
@@ -169,22 +170,22 @@ var w = "FKN_WEB_EXTENSION_ATTACH_FRAME_EVENT_KEY", T = (e) => {
|
|
|
169
170
|
goto: c,
|
|
170
171
|
url: l
|
|
171
172
|
};
|
|
172
|
-
},
|
|
173
|
+
}, we = { request: (e) => b.requestPermissions(e.map((e) => ({
|
|
173
174
|
key: e.key,
|
|
174
175
|
scope: e.scope ?? "",
|
|
175
176
|
reason: e.reason
|
|
176
|
-
}))) },
|
|
177
|
+
}))) }, Te = 32, Ee = typeof CSS < "u" && CSS.supports("clip-path", "path('M0 0H1V1H0Z')"), De = (e) => {
|
|
177
178
|
let t = e.style;
|
|
178
179
|
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");
|
|
179
|
-
},
|
|
180
|
-
if (!
|
|
180
|
+
}, Oe = ({ x: e, y: t, width: n, height: r }) => `M${e} ${t}h${n}v${r}h${-n}Z`, ke = (e, { modal: t, rects: n }) => {
|
|
181
|
+
if (!Ee) {
|
|
181
182
|
let r = t || n.length > 0;
|
|
182
183
|
e.style.setProperty("pointer-events", r ? "auto" : "none", "important"), e.style.setProperty("visibility", r ? "visible" : "hidden", "important");
|
|
183
184
|
return;
|
|
184
185
|
}
|
|
185
|
-
let r = t ? "none" : n.length === 0 ? "inset(100%)" : `path('${n.map(
|
|
186
|
+
let r = t ? "none" : n.length === 0 ? "inset(100%)" : `path('${n.map(Oe).join("")}')`, i = r === "none" || CSS.supports("clip-path", r) ? r : "inset(100%)";
|
|
186
187
|
e.style.setProperty("clip-path", i, "important");
|
|
187
|
-
},
|
|
188
|
+
}, Ae = (e) => {
|
|
188
189
|
if (typeof e != "object" || !e) return null;
|
|
189
190
|
let { x: t, y: n, width: r, height: i } = e;
|
|
190
191
|
if (![
|
|
@@ -200,45 +201,45 @@ var w = "FKN_WEB_EXTENSION_ATTACH_FRAME_EVENT_KEY", T = (e) => {
|
|
|
200
201
|
width: l - s,
|
|
201
202
|
height: u - c
|
|
202
203
|
};
|
|
203
|
-
},
|
|
204
|
+
}, je = (e) => {
|
|
204
205
|
if (typeof e != "object" || !e) return null;
|
|
205
|
-
let t = e, n = (Array.isArray(t.rects) ? t.rects.slice(0,
|
|
206
|
+
let t = e, n = (Array.isArray(t.rects) ? t.rects.slice(0, Te) : []).map(Ae).filter((e) => e !== null && e.width > 0 && e.height > 0);
|
|
206
207
|
return {
|
|
207
208
|
modal: t.modal === !0,
|
|
208
209
|
rects: n
|
|
209
210
|
};
|
|
210
|
-
}, D = null,
|
|
211
|
-
|
|
211
|
+
}, D = null, Me = () => D !== null, Ne = (e) => {
|
|
212
|
+
De(e), ke(e, {
|
|
212
213
|
modal: !1,
|
|
213
214
|
rects: []
|
|
214
215
|
}), D = e;
|
|
215
|
-
},
|
|
216
|
+
}, Pe = (e) => {
|
|
216
217
|
if (!D) return;
|
|
217
|
-
let t =
|
|
218
|
-
t &&
|
|
219
|
-
},
|
|
220
|
-
!
|
|
221
|
-
var A =
|
|
222
|
-
A && O &&
|
|
218
|
+
let t = je(e);
|
|
219
|
+
t && ke(D, t);
|
|
220
|
+
}, Fe = "https://fkn.app", O = typeof globalThis < "u" && globalThis.document ? globalThis.document : void 0, Ie = O?.querySelector(`iframe[src="${Fe}/api"]`) ?? null, k = O?.createElement("iframe") ?? null;
|
|
221
|
+
!Ie && k && O && (k.src = `${Fe}/api`, O.body.appendChild(k));
|
|
222
|
+
var A = Ie ?? k, Le = A?.contentWindow ?? null;
|
|
223
|
+
A && O && Ne(A);
|
|
223
224
|
var j = (() => {
|
|
224
|
-
if (typeof window < "u") return
|
|
225
|
+
if (typeof window < "u") return Le ? {
|
|
225
226
|
receive: window,
|
|
226
|
-
emit:
|
|
227
|
+
emit: Le
|
|
227
228
|
} : void 0;
|
|
228
229
|
if (typeof self < "u") return {
|
|
229
230
|
receive: self,
|
|
230
231
|
emit: self
|
|
231
232
|
};
|
|
232
|
-
})(),
|
|
233
|
+
})(), Re = j !== void 0, M = j ? te({}, {
|
|
233
234
|
key: "fkn-api",
|
|
234
235
|
transport: j
|
|
235
236
|
}) : new Promise(() => {});
|
|
236
237
|
M.then((e) => {
|
|
237
|
-
|
|
238
|
+
Me() && e.overlay.setHost(Pe);
|
|
238
239
|
}, () => {});
|
|
239
240
|
//#endregion
|
|
240
241
|
//#region src/lib/fkn-target.ts
|
|
241
|
-
var
|
|
242
|
+
var ze = ["fkn.app", "fkn.dev"], Be = (e) => {
|
|
242
243
|
let t = typeof e == "string" ? e : e instanceof URL ? e.href : e.url, n;
|
|
243
244
|
try {
|
|
244
245
|
n = new URL(t);
|
|
@@ -246,8 +247,8 @@ var Re = ["fkn.app", "fkn.dev"], ze = (e) => {
|
|
|
246
247
|
return;
|
|
247
248
|
}
|
|
248
249
|
let r = n.hostname;
|
|
249
|
-
if (
|
|
250
|
-
},
|
|
250
|
+
if (ze.some((e) => r === e || r.endsWith(`.${e}`))) throw Error(`fetch refuses FKN platform domains (${r})`);
|
|
251
|
+
}, Ve = (e, t) => (Be(e), M.then((n) => n.cloud.fetch(e, t))), He = async () => {
|
|
251
252
|
let e = await M.then((e) => e.cloud.quota());
|
|
252
253
|
return {
|
|
253
254
|
premium: e.premium,
|
|
@@ -259,9 +260,9 @@ var Re = ["fkn.app", "fkn.dev"], ze = (e) => {
|
|
|
259
260
|
bytesPerSecond: e.bytesPerSecond,
|
|
260
261
|
bitsPerSecond: e.bytesPerSecond * 8
|
|
261
262
|
};
|
|
262
|
-
},
|
|
263
|
+
}, Ue = /* @__PURE__ */ n({ lookup: () => We }), We = (e, t) => M.then((n) => n.cloud.dns.lookup(e, t)), Ge = new TextEncoder();
|
|
263
264
|
new TextDecoder();
|
|
264
|
-
var N = (e) => f.isValid(e), P = (e) => p.isValid(e),
|
|
265
|
+
var N = (e) => f.isValid(e), P = (e) => p.isValid(e), Ke = (e) => N(e) ? 4 : P(e) ? 6 : 0, qe = (...e) => {
|
|
265
266
|
if (typeof e[0] == "string") throw Error("FKN WebVPN does not support IPC connections");
|
|
266
267
|
let t = typeof e.at(-1) == "function" ? e.at(-1) : void 0;
|
|
267
268
|
return e[0] && typeof e[0] == "object" ? {
|
|
@@ -272,7 +273,7 @@ var N = (e) => f.isValid(e), P = (e) => p.isValid(e), Ge = (e) => N(e) ? 4 : P(e
|
|
|
272
273
|
host: typeof e[1] == "string" ? e[1] : void 0,
|
|
273
274
|
callback: t
|
|
274
275
|
};
|
|
275
|
-
},
|
|
276
|
+
}, Je = (...e) => {
|
|
276
277
|
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;
|
|
277
278
|
return typeof e[0] == "object" ? {
|
|
278
279
|
...e[0],
|
|
@@ -284,7 +285,7 @@ var N = (e) => f.isValid(e), P = (e) => p.isValid(e), Ge = (e) => N(e) ? 4 : P(e
|
|
|
284
285
|
port: n,
|
|
285
286
|
callback: t
|
|
286
287
|
};
|
|
287
|
-
},
|
|
288
|
+
}, Ye = (...e) => {
|
|
288
289
|
let t = typeof e.at(-1) == "function" ? e.at(-1) : void 0, n = e[0];
|
|
289
290
|
if (typeof e[2] == "number") return {
|
|
290
291
|
message: n,
|
|
@@ -309,15 +310,15 @@ var N = (e) => f.isValid(e), P = (e) => p.isValid(e), Ge = (e) => N(e) ? 4 : P(e
|
|
|
309
310
|
new TextEncoder(), new TextDecoder();
|
|
310
311
|
//#endregion
|
|
311
312
|
//#region src/lib/webvpn/net.ts
|
|
312
|
-
var
|
|
313
|
+
var Xe = /* @__PURE__ */ n({
|
|
313
314
|
Server: () => I,
|
|
314
315
|
Socket: () => F,
|
|
315
|
-
_default: () =>
|
|
316
|
-
connect: () =>
|
|
317
|
-
createConnection: () =>
|
|
318
|
-
createServer: () =>
|
|
319
|
-
default: () =>
|
|
320
|
-
isIP: () =>
|
|
316
|
+
_default: () => et,
|
|
317
|
+
connect: () => Ze,
|
|
318
|
+
createConnection: () => Qe,
|
|
319
|
+
createServer: () => $e,
|
|
320
|
+
default: () => et,
|
|
321
|
+
isIP: () => Ke,
|
|
321
322
|
isIPv4: () => N,
|
|
322
323
|
isIPv6: () => P
|
|
323
324
|
}), F = class extends d.Duplex {
|
|
@@ -380,7 +381,7 @@ var Ye = /* @__PURE__ */ n({
|
|
|
380
381
|
}).catch(n);
|
|
381
382
|
}
|
|
382
383
|
connect(...e) {
|
|
383
|
-
let t =
|
|
384
|
+
let t = qe(...e), n = this.__webvpn_tcp_socket_init__(M.then((e) => e.cloud.webvpn.tcpSocket({
|
|
384
385
|
remoteAddress: t.host ?? "localhost",
|
|
385
386
|
remotePort: t.port
|
|
386
387
|
})));
|
|
@@ -507,7 +508,7 @@ var Ye = /* @__PURE__ */ n({
|
|
|
507
508
|
return this._remoteAddress.family;
|
|
508
509
|
}
|
|
509
510
|
timeout;
|
|
510
|
-
}, I = class extends
|
|
511
|
+
}, I = class extends re {
|
|
511
512
|
_localAddress;
|
|
512
513
|
_webVPNTcpSocketListenerPromise;
|
|
513
514
|
constructor(e, t) {
|
|
@@ -525,7 +526,7 @@ var Ye = /* @__PURE__ */ n({
|
|
|
525
526
|
}), this._webVPNTcpSocketListenerPromise;
|
|
526
527
|
}
|
|
527
528
|
listen(...e) {
|
|
528
|
-
let t =
|
|
529
|
+
let t = qe(...e), n = (e) => {
|
|
529
530
|
let t = new F({ connection: Promise.resolve(e) });
|
|
530
531
|
this.emit("connection", t);
|
|
531
532
|
}, r = (e) => M.then((r) => r.cloud.webvpn.tcpSocketListener({
|
|
@@ -562,23 +563,23 @@ var Ye = /* @__PURE__ */ n({
|
|
|
562
563
|
connections;
|
|
563
564
|
listening;
|
|
564
565
|
async [Symbol.asyncDispose]() {}
|
|
565
|
-
},
|
|
566
|
+
}, Ze = (e, t) => new F().connect(e, t), Qe = (e, t) => new F().connect(e, t), $e = (e, t) => {
|
|
566
567
|
typeof e == "function" && (t = e, e = void 0);
|
|
567
568
|
let n = new I(e);
|
|
568
569
|
return t && n.on("connection", t), n;
|
|
569
|
-
},
|
|
570
|
+
}, et = {
|
|
570
571
|
Socket: F,
|
|
571
572
|
Server: I,
|
|
572
|
-
connect:
|
|
573
|
-
createConnection:
|
|
574
|
-
createServer:
|
|
575
|
-
isIP:
|
|
573
|
+
connect: Ze,
|
|
574
|
+
createConnection: Qe,
|
|
575
|
+
createServer: $e,
|
|
576
|
+
isIP: Ke,
|
|
576
577
|
isIPv4: N,
|
|
577
578
|
isIPv6: P
|
|
578
|
-
},
|
|
579
|
-
Socket: () =>
|
|
580
|
-
createSocket: () =>
|
|
581
|
-
}),
|
|
579
|
+
}, tt = /* @__PURE__ */ n({
|
|
580
|
+
Socket: () => nt,
|
|
581
|
+
createSocket: () => at
|
|
582
|
+
}), nt = class extends re {
|
|
582
583
|
_type;
|
|
583
584
|
_localAddress;
|
|
584
585
|
_remoteAddress;
|
|
@@ -648,7 +649,7 @@ var Ye = /* @__PURE__ */ n({
|
|
|
648
649
|
}
|
|
649
650
|
}
|
|
650
651
|
_peerTail(e, t) {
|
|
651
|
-
if (e === void 0 || t === void 0) return
|
|
652
|
+
if (e === void 0 || t === void 0) return rt;
|
|
652
653
|
let n = `${e}|${t}`, r = this._peerTailCache.get(n);
|
|
653
654
|
if (r) return r;
|
|
654
655
|
let i = f.isValid(e) ? L(e) : R(e), a = new Uint8Array(1 + i.byteLength + 2);
|
|
@@ -692,7 +693,7 @@ var Ye = /* @__PURE__ */ n({
|
|
|
692
693
|
return this._localAddress;
|
|
693
694
|
}
|
|
694
695
|
bind(...e) {
|
|
695
|
-
let t =
|
|
696
|
+
let t = Je(...e), n = this._type === "udp6" ? "::" : "0.0.0.0";
|
|
696
697
|
return this._webVPNUdpSocketPromise = M.then((e) => e.cloud.webvpn.udpSocket({
|
|
697
698
|
type: this._type,
|
|
698
699
|
address: t.address ?? n,
|
|
@@ -804,11 +805,11 @@ var Ye = /* @__PURE__ */ n({
|
|
|
804
805
|
}
|
|
805
806
|
send(...e) {
|
|
806
807
|
this._webVPNUdpSocketPromise || this.bind();
|
|
807
|
-
let t =
|
|
808
|
+
let t = Ye(...e), n = this._type === "udp6" ? "::1" : "127.0.0.1";
|
|
808
809
|
if (!this._webVPNUdpSocketPromise) throw Error("Socket not bound");
|
|
809
810
|
this._webVPNUdpSocketPromise.then((e) => {
|
|
810
811
|
if (!e) throw Error("Socket not bound");
|
|
811
|
-
let r =
|
|
812
|
+
let r = it(t.message), i = t.callback, a = t.address ?? n, o = this._remoteAddress !== void 0 && t.address === void 0;
|
|
812
813
|
if (this._dataPort && (o || f.isValid(a) || p.isValid(a))) {
|
|
813
814
|
this._portSend(r, o ? void 0 : a, o ? void 0 : t.port), i?.call(this, null, r.byteLength);
|
|
814
815
|
return;
|
|
@@ -870,12 +871,12 @@ var Ye = /* @__PURE__ */ n({
|
|
|
870
871
|
this.close(e);
|
|
871
872
|
});
|
|
872
873
|
}
|
|
873
|
-
},
|
|
874
|
-
if (typeof e == "string") return
|
|
874
|
+
}, rt = new Uint8Array([2]), it = (e) => {
|
|
875
|
+
if (typeof e == "string") return Ge.encode(e);
|
|
875
876
|
if (e instanceof Uint8Array) return e;
|
|
876
877
|
if (ArrayBuffer.isView(e)) return new Uint8Array(e.buffer, e.byteOffset, e.byteLength);
|
|
877
878
|
if (Array.isArray(e)) {
|
|
878
|
-
let t = e.map(
|
|
879
|
+
let t = e.map(it), n = new Uint8Array(t.reduce((e, t) => e + t.byteLength, 0)), r = 0;
|
|
879
880
|
for (let e of t) n.set(e, r), r += e.byteLength;
|
|
880
881
|
return n;
|
|
881
882
|
}
|
|
@@ -888,25 +889,25 @@ var Ye = /* @__PURE__ */ n({
|
|
|
888
889
|
let t = new p(e).getBitsBase16(0, 128).match(/.{2}/g);
|
|
889
890
|
if (!t || t.length !== 16) throw Error(`Invalid IPv6 address: ${e}`);
|
|
890
891
|
return new Uint8Array(t.map((e) => parseInt(e, 16)));
|
|
891
|
-
},
|
|
892
|
-
let n = new
|
|
892
|
+
}, at = (e, t) => {
|
|
893
|
+
let n = new nt(typeof e == "string" ? { type: e } : e);
|
|
893
894
|
return t && n.on("message", t), n;
|
|
894
|
-
},
|
|
895
|
+
}, ot = /* @__PURE__ */ n({
|
|
895
896
|
Agent: () => Y,
|
|
896
897
|
ClientRequest: () => q,
|
|
897
898
|
HTTPParser: () => U,
|
|
898
899
|
IncomingMessage: () => W,
|
|
899
|
-
METHODS: () =>
|
|
900
|
+
METHODS: () => ct,
|
|
900
901
|
STATUS_CODES: () => z,
|
|
901
902
|
Server: () => J,
|
|
902
903
|
ServerResponse: () => K,
|
|
903
|
-
_default: () =>
|
|
904
|
-
createServer: () =>
|
|
905
|
-
default: () =>
|
|
906
|
-
get: () =>
|
|
907
|
-
globalAgent: () =>
|
|
904
|
+
_default: () => yt,
|
|
905
|
+
createServer: () => vt,
|
|
906
|
+
default: () => yt,
|
|
907
|
+
get: () => _t,
|
|
908
|
+
globalAgent: () => gt,
|
|
908
909
|
request: () => X
|
|
909
|
-
}),
|
|
910
|
+
}), st = new TextDecoder("latin1"), ct = /* @__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 = {
|
|
910
911
|
100: "Continue",
|
|
911
912
|
101: "Switching Protocols",
|
|
912
913
|
102: "Processing",
|
|
@@ -970,7 +971,7 @@ var Ye = /* @__PURE__ */ n({
|
|
|
970
971
|
509: "Bandwidth Limit Exceeded",
|
|
971
972
|
510: "Not Extended",
|
|
972
973
|
511: "Network Authentication Required"
|
|
973
|
-
},
|
|
974
|
+
}, lt = new Set([
|
|
974
975
|
"content-type",
|
|
975
976
|
"content-length",
|
|
976
977
|
"user-agent",
|
|
@@ -989,15 +990,15 @@ var Ye = /* @__PURE__ */ n({
|
|
|
989
990
|
"server",
|
|
990
991
|
"age",
|
|
991
992
|
"expires"
|
|
992
|
-
]), B = 13, V = 10,
|
|
993
|
+
]), B = 13, V = 10, ut = /^[\^_`a-zA-Z\-0-9!#$%&'*+.|~]+$/, H = (e, t) => (e.code = t, e), dt = (e, t) => {
|
|
993
994
|
if (e.length === 0) return t;
|
|
994
995
|
if (t.length === 0) return e;
|
|
995
996
|
let n = new Uint8Array(e.length + t.length);
|
|
996
997
|
return n.set(e, 0), n.set(t, e.length), n;
|
|
997
|
-
},
|
|
998
|
+
}, ft = (e, t) => {
|
|
998
999
|
for (let n = t; n + 1 < e.length; n++) if (e[n] === B && e[n + 1] === V) return n;
|
|
999
1000
|
return -1;
|
|
1000
|
-
},
|
|
1001
|
+
}, pt = (e) => {
|
|
1001
1002
|
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;
|
|
1002
1003
|
return -1;
|
|
1003
1004
|
}, U = class {
|
|
@@ -1011,10 +1012,10 @@ var Ye = /* @__PURE__ */ n({
|
|
|
1011
1012
|
this.mode = e, this.handlers = t;
|
|
1012
1013
|
}
|
|
1013
1014
|
execute(e) {
|
|
1014
|
-
this.buf =
|
|
1015
|
+
this.buf = dt(this.buf, e);
|
|
1015
1016
|
let t = !0;
|
|
1016
1017
|
for (; t;) if (t = !1, this.state === "HEAD") {
|
|
1017
|
-
let e =
|
|
1018
|
+
let e = pt(this.buf);
|
|
1018
1019
|
if (e === -1) return;
|
|
1019
1020
|
let n = this.buf.subarray(0, e);
|
|
1020
1021
|
this.buf = this.buf.subarray(e + 4);
|
|
@@ -1029,7 +1030,7 @@ var Ye = /* @__PURE__ */ n({
|
|
|
1029
1030
|
this.state = "HEAD", this.framing = "none", this.bodyRemaining = 0, this.chunkState = "size", this.skipBody = !1;
|
|
1030
1031
|
}
|
|
1031
1032
|
parseHead(e) {
|
|
1032
|
-
let t =
|
|
1033
|
+
let t = st.decode(e).split("\r\n"), n = t.shift() ?? "", r = [];
|
|
1033
1034
|
for (let e of t) (e.startsWith(" ") || e.startsWith(" ")) && r.length > 0 ? r[r.length - 1] += " " + e.trim() : r.push(e);
|
|
1034
1035
|
let i = [], a = {};
|
|
1035
1036
|
for (let e of r) {
|
|
@@ -1067,7 +1068,7 @@ var Ye = /* @__PURE__ */ n({
|
|
|
1067
1068
|
return;
|
|
1068
1069
|
}
|
|
1069
1070
|
let i = e[r];
|
|
1070
|
-
i === void 0 ? e[r] = n :
|
|
1071
|
+
i === void 0 ? e[r] = n : lt.has(r) || (e[r] = `${i}, ${n}`);
|
|
1071
1072
|
}
|
|
1072
1073
|
setupBody(e) {
|
|
1073
1074
|
if (this.skipBody) {
|
|
@@ -1100,9 +1101,9 @@ var Ye = /* @__PURE__ */ n({
|
|
|
1100
1101
|
}
|
|
1101
1102
|
consumeChunked() {
|
|
1102
1103
|
for (;;) if (this.chunkState === "size") {
|
|
1103
|
-
let e =
|
|
1104
|
+
let e = ft(this.buf, 0);
|
|
1104
1105
|
if (e === -1) return !1;
|
|
1105
|
-
let t =
|
|
1106
|
+
let t = st.decode(this.buf.subarray(0, e)), n = parseInt(t.split(";")[0].trim(), 16);
|
|
1106
1107
|
if (this.buf = this.buf.subarray(e + 2), Number.isNaN(n)) return !0;
|
|
1107
1108
|
n === 0 ? this.chunkState = "trailer" : (this.bodyRemaining = n, this.chunkState = "data");
|
|
1108
1109
|
} else if (this.chunkState === "data") {
|
|
@@ -1113,13 +1114,13 @@ var Ye = /* @__PURE__ */ n({
|
|
|
1113
1114
|
if (this.buf.length < 2) return !1;
|
|
1114
1115
|
this.buf = this.buf.subarray(2), this.chunkState = "size";
|
|
1115
1116
|
} else {
|
|
1116
|
-
let e =
|
|
1117
|
+
let e = ft(this.buf, 0);
|
|
1117
1118
|
if (e === -1) return !1;
|
|
1118
1119
|
let t = e === 0;
|
|
1119
1120
|
if (this.buf = this.buf.subarray(e + 2), t) return !0;
|
|
1120
1121
|
}
|
|
1121
1122
|
}
|
|
1122
|
-
},
|
|
1123
|
+
}, mt = (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 {
|
|
1123
1124
|
httpVersion = "1.1";
|
|
1124
1125
|
httpVersionMajor = 1;
|
|
1125
1126
|
httpVersionMinor = 1;
|
|
@@ -1154,7 +1155,7 @@ var Ye = /* @__PURE__ */ n({
|
|
|
1154
1155
|
_bodyWritten = !1;
|
|
1155
1156
|
setHeader(e, t) {
|
|
1156
1157
|
if (this.headersSent) throw H(/* @__PURE__ */ Error("Cannot set headers after they are sent to the client"), "ERR_HTTP_HEADERS_SENT");
|
|
1157
|
-
if (typeof e != "string" || !
|
|
1158
|
+
if (typeof e != "string" || !ut.test(e)) throw H(/* @__PURE__ */ TypeError(`Header name must be a valid HTTP token [${JSON.stringify(String(e))}]`), "ERR_INVALID_HTTP_TOKEN");
|
|
1158
1159
|
if (t === void 0) throw H(/* @__PURE__ */ TypeError(`Invalid value "undefined" for header "${e}"`), "ERR_HTTP_INVALID_HEADER_VALUE");
|
|
1159
1160
|
return this._headerStore.set(e.toLowerCase(), [e, Array.isArray(t) ? [...t] : t]), this;
|
|
1160
1161
|
}
|
|
@@ -1195,7 +1196,7 @@ var Ye = /* @__PURE__ */ n({
|
|
|
1195
1196
|
return this._bodyWritten = !0, super.write(e, t, n);
|
|
1196
1197
|
}
|
|
1197
1198
|
_write(e, t, n) {
|
|
1198
|
-
let r =
|
|
1199
|
+
let r = mt(e), i = [];
|
|
1199
1200
|
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) {
|
|
1200
1201
|
n();
|
|
1201
1202
|
return;
|
|
@@ -1213,7 +1214,7 @@ var Ye = /* @__PURE__ */ n({
|
|
|
1213
1214
|
end(e, t, n) {
|
|
1214
1215
|
if (e != null && typeof e != "function" && !this._bodyWritten && !this.headersSent && !this.chunkedEncoding && !this.hasHeader("content-length")) {
|
|
1215
1216
|
let n = typeof t == "string" ? t : void 0;
|
|
1216
|
-
this.setHeader("Content-Length",
|
|
1217
|
+
this.setHeader("Content-Length", mt(e, n).length);
|
|
1217
1218
|
}
|
|
1218
1219
|
return super.end(e, t, n);
|
|
1219
1220
|
}
|
|
@@ -1262,7 +1263,7 @@ var Ye = /* @__PURE__ */ n({
|
|
|
1262
1263
|
setTimeout(e, t) {
|
|
1263
1264
|
return this.socket?.setTimeout(e, t), this;
|
|
1264
1265
|
}
|
|
1265
|
-
},
|
|
1266
|
+
}, ht = (...e) => {
|
|
1266
1267
|
let t = {}, n = {}, r, i = [...e], a = i.shift();
|
|
1267
1268
|
if (typeof a == "string" || a instanceof URL) {
|
|
1268
1269
|
let e = typeof a == "string" ? new URL(a) : a;
|
|
@@ -1403,34 +1404,34 @@ var Ye = /* @__PURE__ */ n({
|
|
|
1403
1404
|
return `${e.host ?? "localhost"}:${e.port ?? ""}:${e.localAddress ?? ""}`;
|
|
1404
1405
|
}
|
|
1405
1406
|
destroy() {}
|
|
1406
|
-
},
|
|
1407
|
-
let { options: t, callback: n } =
|
|
1407
|
+
}, gt = new Y(), X = (...e) => {
|
|
1408
|
+
let { options: t, callback: n } = ht(...e);
|
|
1408
1409
|
return new q(t, n);
|
|
1409
|
-
},
|
|
1410
|
+
}, _t = (...e) => {
|
|
1410
1411
|
let t = X(...e);
|
|
1411
1412
|
return t.end(), t;
|
|
1412
|
-
},
|
|
1413
|
-
METHODS:
|
|
1413
|
+
}, vt = (e, t) => new J(e, t), yt = {
|
|
1414
|
+
METHODS: ct,
|
|
1414
1415
|
STATUS_CODES: z,
|
|
1415
1416
|
Agent: Y,
|
|
1416
|
-
globalAgent:
|
|
1417
|
+
globalAgent: gt,
|
|
1417
1418
|
Server: J,
|
|
1418
1419
|
ServerResponse: K,
|
|
1419
1420
|
IncomingMessage: W,
|
|
1420
1421
|
ClientRequest: q,
|
|
1421
1422
|
OutgoingMessage: G,
|
|
1422
|
-
createServer:
|
|
1423
|
+
createServer: vt,
|
|
1423
1424
|
request: X,
|
|
1424
|
-
get:
|
|
1425
|
-
},
|
|
1426
|
-
available: () =>
|
|
1427
|
-
dgram: () =>
|
|
1428
|
-
dns: () =>
|
|
1429
|
-
fetch: () =>
|
|
1430
|
-
http: () =>
|
|
1431
|
-
net: () =>
|
|
1432
|
-
quota: () =>
|
|
1433
|
-
}),
|
|
1425
|
+
get: _t
|
|
1426
|
+
}, bt = /* @__PURE__ */ n({
|
|
1427
|
+
available: () => xt,
|
|
1428
|
+
dgram: () => tt,
|
|
1429
|
+
dns: () => Ue,
|
|
1430
|
+
fetch: () => Ve,
|
|
1431
|
+
http: () => ot,
|
|
1432
|
+
net: () => Xe,
|
|
1433
|
+
quota: () => He
|
|
1434
|
+
}), xt = () => Re, Z = async (e) => {
|
|
1434
1435
|
if (typeof window > "u") return !1;
|
|
1435
1436
|
if (g()) return !0;
|
|
1436
1437
|
let t = await M, n = null, r = new Promise((e) => {
|
|
@@ -1445,73 +1446,73 @@ v(() => (Q ||= Z().then(() => void 0).finally(() => {
|
|
|
1445
1446
|
}), Q));
|
|
1446
1447
|
//#endregion
|
|
1447
1448
|
//#region src/lib/desktop.ts
|
|
1448
|
-
var
|
|
1449
|
-
available: () =>
|
|
1450
|
-
dgram: () =>
|
|
1451
|
-
dns: () =>
|
|
1452
|
-
fetch: () =>
|
|
1453
|
-
fs: () =>
|
|
1454
|
-
net: () =>
|
|
1455
|
-
}),
|
|
1449
|
+
var St = /* @__PURE__ */ n({
|
|
1450
|
+
available: () => Ct,
|
|
1451
|
+
dgram: () => Dt,
|
|
1452
|
+
dns: () => Tt,
|
|
1453
|
+
fetch: () => wt,
|
|
1454
|
+
fs: () => Ot,
|
|
1455
|
+
net: () => Et
|
|
1456
|
+
}), Ct = () => !1, $ = (e) => (...t) => {
|
|
1456
1457
|
throw Error(`The FKN desktop app is not connected, desktop.${e} is unavailable`);
|
|
1457
|
-
},
|
|
1458
|
+
}, wt = $("fetch"), Tt = { lookup: $("dns.lookup") }, Et = {
|
|
1458
1459
|
connect: $("net.connect"),
|
|
1459
1460
|
createConnection: $("net.createConnection"),
|
|
1460
1461
|
createServer: $("net.createServer")
|
|
1461
|
-
},
|
|
1462
|
+
}, Dt = { createSocket: $("dgram.createSocket") }, Ot = {
|
|
1462
1463
|
isLocalDirectorySupported: () => !1,
|
|
1463
1464
|
pickLocalDirectory: $("fs.pickLocalDirectory"),
|
|
1464
1465
|
queryDirectoryPermission: $("fs.queryDirectoryPermission"),
|
|
1465
1466
|
ensureDirectoryPermission: $("fs.ensureDirectoryPermission")
|
|
1466
|
-
},
|
|
1467
|
-
if (
|
|
1467
|
+
}, kt = () => typeof document < "u" && g(), At = async (e, t) => {
|
|
1468
|
+
if (Be(e), t?.credentials === "include") {
|
|
1468
1469
|
if (typeof document > "u") throw Error("fetch with credentials needs the FKN extension, which only exists in window realms");
|
|
1469
1470
|
return C(e, t);
|
|
1470
1471
|
}
|
|
1471
|
-
return
|
|
1472
|
+
return kt() ? C(e, {
|
|
1472
1473
|
...t,
|
|
1473
1474
|
credentials: "omit"
|
|
1474
|
-
}) :
|
|
1475
|
-
},
|
|
1475
|
+
}) : Ct() ? wt(e, t) : Ve(e, t);
|
|
1476
|
+
}, jt = /* @__PURE__ */ n({
|
|
1476
1477
|
ATTACH_FRAME_EVENT_KEY: () => w,
|
|
1477
1478
|
assertAttachableFrameUrl: () => E,
|
|
1478
1479
|
assertFetchableUrl: () => S,
|
|
1479
|
-
attachFrame: () =>
|
|
1480
|
-
attachFramePermission: () =>
|
|
1481
|
-
available: () =>
|
|
1480
|
+
attachFrame: () => Ce,
|
|
1481
|
+
attachFramePermission: () => xe,
|
|
1482
|
+
available: () => kt,
|
|
1482
1483
|
box: () => l,
|
|
1483
|
-
cookies: () =>
|
|
1484
|
+
cookies: () => _e,
|
|
1484
1485
|
createVideoElementHandle: () => e,
|
|
1485
1486
|
events: () => h,
|
|
1486
1487
|
extension: () => h,
|
|
1487
1488
|
fetch: () => C,
|
|
1488
|
-
fetchCredentialedPermission: () =>
|
|
1489
|
-
fetchLocalPermission: () =>
|
|
1490
|
-
fetchPermission: () =>
|
|
1491
|
-
gotoPermission: () =>
|
|
1489
|
+
fetchCredentialedPermission: () => le,
|
|
1490
|
+
fetchLocalPermission: () => ue,
|
|
1491
|
+
fetchPermission: () => ce,
|
|
1492
|
+
gotoPermission: () => Se,
|
|
1492
1493
|
handleRevivableModules: () => i,
|
|
1493
1494
|
isBlockedFetchUrl: () => x,
|
|
1494
1495
|
isBlockedFrameUrl: () => T,
|
|
1495
1496
|
isExtensionExposed: () => g,
|
|
1496
|
-
isLocalNetworkUrl: () =>
|
|
1497
|
+
isLocalNetworkUrl: () => fe,
|
|
1497
1498
|
isType: () => t,
|
|
1498
|
-
modifyRequestHeadersPermission: () =>
|
|
1499
|
-
permissions: () =>
|
|
1499
|
+
modifyRequestHeadersPermission: () => ve,
|
|
1500
|
+
permissions: () => we,
|
|
1500
1501
|
promptInstall: () => Z,
|
|
1501
|
-
readCookiePermission: () =>
|
|
1502
|
-
removeRequestHeaderRule: () =>
|
|
1502
|
+
readCookiePermission: () => ge,
|
|
1503
|
+
removeRequestHeaderRule: () => be,
|
|
1503
1504
|
revive: () => o,
|
|
1504
1505
|
setMissingExtensionHandler: () => v,
|
|
1505
|
-
setRequestHeaderRule: () =>
|
|
1506
|
+
setRequestHeaderRule: () => ye,
|
|
1506
1507
|
type: () => a,
|
|
1507
1508
|
waitForExtensionExposure: () => y
|
|
1508
|
-
}),
|
|
1509
|
-
ensureDirectoryPermission: () =>
|
|
1510
|
-
isLocalDirectorySupported: () =>
|
|
1511
|
-
pickLocalDirectory: () =>
|
|
1512
|
-
queryDirectoryPermission: () =>
|
|
1513
|
-
}),
|
|
1514
|
-
if (!
|
|
1509
|
+
}), Mt = /* @__PURE__ */ n({
|
|
1510
|
+
ensureDirectoryPermission: () => It,
|
|
1511
|
+
isLocalDirectorySupported: () => Nt,
|
|
1512
|
+
pickLocalDirectory: () => Pt,
|
|
1513
|
+
queryDirectoryPermission: () => Ft
|
|
1514
|
+
}), Nt = () => typeof window < "u" && "showDirectoryPicker" in window, Pt = async (e = {}) => {
|
|
1515
|
+
if (!Nt()) return;
|
|
1515
1516
|
let t = window.showDirectoryPicker;
|
|
1516
1517
|
return t({
|
|
1517
1518
|
mode: "readwrite",
|
|
@@ -1519,25 +1520,47 @@ var xt = /* @__PURE__ */ n({
|
|
|
1519
1520
|
}).catch((e) => {
|
|
1520
1521
|
if (e?.name !== "AbortError") throw e;
|
|
1521
1522
|
});
|
|
1522
|
-
},
|
|
1523
|
+
}, Ft = async (e, t = "readwrite") => {
|
|
1523
1524
|
let { queryPermission: n } = e;
|
|
1524
1525
|
return await n?.call(e, { mode: t }) ?? "granted";
|
|
1525
|
-
},
|
|
1526
|
-
if (await
|
|
1526
|
+
}, It = async (e, t = "readwrite") => {
|
|
1527
|
+
if (await Ft(e, t) === "granted") return !0;
|
|
1527
1528
|
let { requestPermission: n } = e;
|
|
1528
1529
|
return await n?.call(e, { mode: t }) === "granted";
|
|
1529
|
-
},
|
|
1530
|
+
}, Lt = "https://fkn.app", Rt = (e, t) => {
|
|
1530
1531
|
if (typeof window > "u") throw Error("FKN @fkn/lib: relayWorker must be called from the main thread");
|
|
1531
1532
|
if (!A?.contentWindow) throw Error("FKN @fkn/lib: relayWorker called before the FKN iframe was injected");
|
|
1532
|
-
|
|
1533
|
+
ne({
|
|
1533
1534
|
receive: window,
|
|
1534
1535
|
emit: A.contentWindow
|
|
1535
1536
|
}, e, {
|
|
1536
1537
|
key: "fkn-api",
|
|
1537
|
-
originA: t?.originA ??
|
|
1538
|
+
originA: t?.originA ?? Lt,
|
|
1538
1539
|
originB: t?.originB ?? "*",
|
|
1539
1540
|
unregisterSignal: t?.unregisterSignal
|
|
1540
1541
|
});
|
|
1541
|
-
},
|
|
1542
|
+
}, zt = async () => typeof window > "u" ? !1 : (await M).connect.prompt(location.origin).catch(() => !1), Bt = /* @__PURE__ */ n({
|
|
1543
|
+
info: () => Ut,
|
|
1544
|
+
login: () => Vt,
|
|
1545
|
+
logout: () => Ht,
|
|
1546
|
+
onChange: () => Wt
|
|
1547
|
+
}), Vt = async () => typeof window > "u" ? !1 : (await M).account.login(location.origin).catch(() => !1), Ht = async () => {
|
|
1548
|
+
typeof window > "u" || await (await M).account.logout().catch(() => {});
|
|
1549
|
+
}, Ut = async () => {
|
|
1550
|
+
if (typeof window > "u") return null;
|
|
1551
|
+
let e = await M.then((e) => e.account.info()).catch(() => null);
|
|
1552
|
+
return e ? {
|
|
1553
|
+
name: e.name,
|
|
1554
|
+
image: e.image,
|
|
1555
|
+
premium: e.premium,
|
|
1556
|
+
premiumUntil: e.premiumUntil ? Date.parse(e.premiumUntil) : null
|
|
1557
|
+
} : null;
|
|
1558
|
+
}, Wt = async (e) => {
|
|
1559
|
+
if (typeof window > "u") return () => {};
|
|
1560
|
+
let t = await M.catch(() => null);
|
|
1561
|
+
if (!t) return () => {};
|
|
1562
|
+
let n = await t.account.onChange(e).catch(() => null);
|
|
1563
|
+
return typeof n == "function" ? n : () => {};
|
|
1564
|
+
};
|
|
1542
1565
|
//#endregion
|
|
1543
|
-
export { w as ATTACH_FRAME_EVENT_KEY, E as assertAttachableFrameUrl, S as assertFetchableUrl,
|
|
1566
|
+
export { w as ATTACH_FRAME_EVENT_KEY, Bt as account, E as assertAttachableFrameUrl, S as assertFetchableUrl, Ce as attachFrame, xe as attachFramePermission, l as box, bt as cloud, zt as connect, u as connectButtonUrl, _e as cookies, e as createVideoElementHandle, St as desktop, tt as dgram, Ue as dns, jt as extension, At as fetch, le as fetchCredentialedPermission, ue as fetchLocalPermission, ce as fetchPermission, Mt as fs, Se as gotoPermission, i as handleRevivableModules, ot as http, x as isBlockedFetchUrl, T as isBlockedFrameUrl, g as isExtensionExposed, fe as isLocalNetworkUrl, t as isType, ve as modifyRequestHeadersPermission, Xe as net, we as permissions, Z as promptInstall, ge as readCookiePermission, Rt as relayWorker, be as removeRequestHeaderRule, o as revive, v as setMissingExtensionHandler, ye as setRequestHeaderRule, a as type, y as waitForExtensionExposure };
|