@fkn/lib 0.4.2 → 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 +70 -7
- package/index.js +209 -163
- 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,27 +31,48 @@ 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 = {
|
|
55
|
+
scope: "network.fetchLocal",
|
|
56
|
+
category: "network",
|
|
57
|
+
severity: 3,
|
|
58
|
+
unsafe: !0,
|
|
59
|
+
title: "Access devices on your local network",
|
|
60
|
+
description: "Lets the app reach devices and services on your home or work network, which websites normally cannot touch."
|
|
61
|
+
}, de = (e) => {
|
|
62
|
+
let t = e.match(/^(\d+)\.(\d+)\.\d+\.\d+$/);
|
|
63
|
+
if (!t) return !1;
|
|
64
|
+
let [n, r] = [Number(t[1]), Number(t[2])];
|
|
65
|
+
return n === 10 || n === 127 || n === 0 || n === 169 && r === 254 || n === 172 && r >= 16 && r <= 31 || n === 192 && r === 168;
|
|
66
|
+
}, fe = (e) => {
|
|
67
|
+
let t;
|
|
68
|
+
try {
|
|
69
|
+
t = new URL(e);
|
|
70
|
+
} catch {
|
|
71
|
+
return !1;
|
|
72
|
+
}
|
|
73
|
+
let n = t.hostname.replace(/^\[|\]$/g, "").toLowerCase().replace(/\.$/, "");
|
|
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) => {
|
|
54
76
|
let t;
|
|
55
77
|
try {
|
|
56
78
|
t = new URL(e);
|
|
@@ -59,12 +81,12 @@ var g = () => typeof document > "u" ? !1 : document.documentElement.dataset[ie]
|
|
|
59
81
|
}
|
|
60
82
|
if (t.protocol === "chrome-extension:" || t.protocol === "moz-extension:") return !0;
|
|
61
83
|
let n = t.hostname;
|
|
62
|
-
return
|
|
84
|
+
return pe.some((e) => n === e || n.endsWith(`.${e}`));
|
|
63
85
|
}, S = (e) => {
|
|
64
86
|
if (x(e)) throw Error("fetch: refusing to target the extension's own pages or FKN platform domains");
|
|
65
|
-
},
|
|
87
|
+
}, me = ["origin", "referer"], he = (e) => {
|
|
66
88
|
if (!e?.headers) return;
|
|
67
|
-
let t = new Headers(e.headers), n =
|
|
89
|
+
let t = new Headers(e.headers), n = me.map((e) => {
|
|
68
90
|
let n = t.get(e);
|
|
69
91
|
return n === null ? void 0 : [e, n];
|
|
70
92
|
}).filter((e) => e !== void 0);
|
|
@@ -80,25 +102,25 @@ var g = () => typeof document > "u" ? !1 : document.documentElement.dataset[ie]
|
|
|
80
102
|
body: r,
|
|
81
103
|
credentials: t?.credentials === "include" ? "include" : "omit",
|
|
82
104
|
redirect: n.redirect,
|
|
83
|
-
unsafeHeaders:
|
|
105
|
+
unsafeHeaders: he(t),
|
|
84
106
|
reason: t?.reason,
|
|
85
107
|
signal: t?.signal ?? void 0
|
|
86
108
|
});
|
|
87
|
-
},
|
|
109
|
+
}, ge = {
|
|
88
110
|
scope: "network.readCookie",
|
|
89
111
|
category: "network",
|
|
90
112
|
severity: 3,
|
|
91
113
|
unsafe: !0,
|
|
92
114
|
title: "Read a site’s cookie",
|
|
93
115
|
description: "Lets the app read a named cookie from another site, which can include the login token only that site should see."
|
|
94
|
-
},
|
|
116
|
+
}, _e = { get: (e) => b.getCookie(e) }, ve = {
|
|
95
117
|
scope: "network.modifyRequestHeaders",
|
|
96
118
|
category: "network",
|
|
97
119
|
severity: 2,
|
|
98
120
|
unsafe: !0,
|
|
99
121
|
title: "Rewrite request headers to other sites",
|
|
100
122
|
description: "Lets the app set or remove headers (like Origin and Referer) on this page’s own requests to the listed sites."
|
|
101
|
-
},
|
|
123
|
+
}, ye = (e) => b.setRequestHeaderRule(e), be = (e) => b.removeRequestHeaderRule({ ruleId: e });
|
|
102
124
|
(() => {
|
|
103
125
|
let e = {}, t = [...c.selectorModules, ...r.selectorModules];
|
|
104
126
|
for (let n of t) n.render && !(n.type in e) && (e[n.type] = n.render);
|
|
@@ -120,19 +142,19 @@ var w = "FKN_WEB_EXTENSION_ATTACH_FRAME_EVENT_KEY", T = (e) => {
|
|
|
120
142
|
return n === "fkn.app" || n.endsWith(".fkn.app");
|
|
121
143
|
}, E = (e) => {
|
|
122
144
|
if (T(e)) throw Error("attachFrame: refusing to target the extension's own pages or fkn.app");
|
|
123
|
-
},
|
|
145
|
+
}, xe = {
|
|
124
146
|
scope: "embed.iframe",
|
|
125
147
|
category: "embed",
|
|
126
148
|
severity: 0,
|
|
127
149
|
title: "Load another website inside this app",
|
|
128
150
|
description: "Lets the app embed external pages directly inside its own view."
|
|
129
|
-
},
|
|
151
|
+
}, Se = {
|
|
130
152
|
scope: "embed.open",
|
|
131
153
|
category: "embed",
|
|
132
154
|
severity: 0,
|
|
133
155
|
title: "Open a website inside this app",
|
|
134
156
|
description: "Lets the app navigate to another site without leaving its window."
|
|
135
|
-
},
|
|
157
|
+
}, Ce = async ({ iframe: e, domains: t = [] }) => {
|
|
136
158
|
let n = crypto.randomUUID();
|
|
137
159
|
if (E(e.src), await y(), !e.isConnected) throw Error("attachFrame: the iframe must be connected to the document before attaching");
|
|
138
160
|
e.dispatchEvent(new CustomEvent(w, { detail: n }));
|
|
@@ -148,22 +170,22 @@ var w = "FKN_WEB_EXTENSION_ATTACH_FRAME_EVENT_KEY", T = (e) => {
|
|
|
148
170
|
goto: c,
|
|
149
171
|
url: l
|
|
150
172
|
};
|
|
151
|
-
},
|
|
173
|
+
}, we = { request: (e) => b.requestPermissions(e.map((e) => ({
|
|
152
174
|
key: e.key,
|
|
153
175
|
scope: e.scope ?? "",
|
|
154
176
|
reason: e.reason
|
|
155
|
-
}))) },
|
|
177
|
+
}))) }, Te = 32, Ee = typeof CSS < "u" && CSS.supports("clip-path", "path('M0 0H1V1H0Z')"), De = (e) => {
|
|
156
178
|
let t = e.style;
|
|
157
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");
|
|
158
|
-
},
|
|
159
|
-
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) {
|
|
160
182
|
let r = t || n.length > 0;
|
|
161
183
|
e.style.setProperty("pointer-events", r ? "auto" : "none", "important"), e.style.setProperty("visibility", r ? "visible" : "hidden", "important");
|
|
162
184
|
return;
|
|
163
185
|
}
|
|
164
|
-
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%)";
|
|
165
187
|
e.style.setProperty("clip-path", i, "important");
|
|
166
|
-
},
|
|
188
|
+
}, Ae = (e) => {
|
|
167
189
|
if (typeof e != "object" || !e) return null;
|
|
168
190
|
let { x: t, y: n, width: r, height: i } = e;
|
|
169
191
|
if (![
|
|
@@ -179,45 +201,45 @@ var w = "FKN_WEB_EXTENSION_ATTACH_FRAME_EVENT_KEY", T = (e) => {
|
|
|
179
201
|
width: l - s,
|
|
180
202
|
height: u - c
|
|
181
203
|
};
|
|
182
|
-
},
|
|
204
|
+
}, je = (e) => {
|
|
183
205
|
if (typeof e != "object" || !e) return null;
|
|
184
|
-
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);
|
|
185
207
|
return {
|
|
186
208
|
modal: t.modal === !0,
|
|
187
209
|
rects: n
|
|
188
210
|
};
|
|
189
|
-
}, D = null,
|
|
190
|
-
|
|
211
|
+
}, D = null, Me = () => D !== null, Ne = (e) => {
|
|
212
|
+
De(e), ke(e, {
|
|
191
213
|
modal: !1,
|
|
192
214
|
rects: []
|
|
193
215
|
}), D = e;
|
|
194
|
-
},
|
|
216
|
+
}, Pe = (e) => {
|
|
195
217
|
if (!D) return;
|
|
196
|
-
let t =
|
|
197
|
-
t &&
|
|
198
|
-
},
|
|
199
|
-
!
|
|
200
|
-
var A =
|
|
201
|
-
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);
|
|
202
224
|
var j = (() => {
|
|
203
|
-
if (typeof window < "u") return
|
|
225
|
+
if (typeof window < "u") return Le ? {
|
|
204
226
|
receive: window,
|
|
205
|
-
emit:
|
|
227
|
+
emit: Le
|
|
206
228
|
} : void 0;
|
|
207
229
|
if (typeof self < "u") return {
|
|
208
230
|
receive: self,
|
|
209
231
|
emit: self
|
|
210
232
|
};
|
|
211
|
-
})(),
|
|
233
|
+
})(), Re = j !== void 0, M = j ? te({}, {
|
|
212
234
|
key: "fkn-api",
|
|
213
235
|
transport: j
|
|
214
236
|
}) : new Promise(() => {});
|
|
215
237
|
M.then((e) => {
|
|
216
|
-
|
|
238
|
+
Me() && e.overlay.setHost(Pe);
|
|
217
239
|
}, () => {});
|
|
218
240
|
//#endregion
|
|
219
241
|
//#region src/lib/fkn-target.ts
|
|
220
|
-
var
|
|
242
|
+
var ze = ["fkn.app", "fkn.dev"], Be = (e) => {
|
|
221
243
|
let t = typeof e == "string" ? e : e instanceof URL ? e.href : e.url, n;
|
|
222
244
|
try {
|
|
223
245
|
n = new URL(t);
|
|
@@ -225,8 +247,8 @@ var Fe = ["fkn.app", "fkn.dev"], Ie = (e) => {
|
|
|
225
247
|
return;
|
|
226
248
|
}
|
|
227
249
|
let r = n.hostname;
|
|
228
|
-
if (
|
|
229
|
-
},
|
|
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 () => {
|
|
230
252
|
let e = await M.then((e) => e.cloud.quota());
|
|
231
253
|
return {
|
|
232
254
|
premium: e.premium,
|
|
@@ -238,9 +260,9 @@ var Fe = ["fkn.app", "fkn.dev"], Ie = (e) => {
|
|
|
238
260
|
bytesPerSecond: e.bytesPerSecond,
|
|
239
261
|
bitsPerSecond: e.bytesPerSecond * 8
|
|
240
262
|
};
|
|
241
|
-
},
|
|
263
|
+
}, Ue = /* @__PURE__ */ n({ lookup: () => We }), We = (e, t) => M.then((n) => n.cloud.dns.lookup(e, t)), Ge = new TextEncoder();
|
|
242
264
|
new TextDecoder();
|
|
243
|
-
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) => {
|
|
244
266
|
if (typeof e[0] == "string") throw Error("FKN WebVPN does not support IPC connections");
|
|
245
267
|
let t = typeof e.at(-1) == "function" ? e.at(-1) : void 0;
|
|
246
268
|
return e[0] && typeof e[0] == "object" ? {
|
|
@@ -251,7 +273,7 @@ var N = (e) => f.isValid(e), P = (e) => p.isValid(e), He = (e) => N(e) ? 4 : P(e
|
|
|
251
273
|
host: typeof e[1] == "string" ? e[1] : void 0,
|
|
252
274
|
callback: t
|
|
253
275
|
};
|
|
254
|
-
},
|
|
276
|
+
}, Je = (...e) => {
|
|
255
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;
|
|
256
278
|
return typeof e[0] == "object" ? {
|
|
257
279
|
...e[0],
|
|
@@ -263,7 +285,7 @@ var N = (e) => f.isValid(e), P = (e) => p.isValid(e), He = (e) => N(e) ? 4 : P(e
|
|
|
263
285
|
port: n,
|
|
264
286
|
callback: t
|
|
265
287
|
};
|
|
266
|
-
},
|
|
288
|
+
}, Ye = (...e) => {
|
|
267
289
|
let t = typeof e.at(-1) == "function" ? e.at(-1) : void 0, n = e[0];
|
|
268
290
|
if (typeof e[2] == "number") return {
|
|
269
291
|
message: n,
|
|
@@ -288,15 +310,15 @@ var N = (e) => f.isValid(e), P = (e) => p.isValid(e), He = (e) => N(e) ? 4 : P(e
|
|
|
288
310
|
new TextEncoder(), new TextDecoder();
|
|
289
311
|
//#endregion
|
|
290
312
|
//#region src/lib/webvpn/net.ts
|
|
291
|
-
var
|
|
313
|
+
var Xe = /* @__PURE__ */ n({
|
|
292
314
|
Server: () => I,
|
|
293
315
|
Socket: () => F,
|
|
294
|
-
_default: () =>
|
|
295
|
-
connect: () =>
|
|
296
|
-
createConnection: () =>
|
|
297
|
-
createServer: () =>
|
|
298
|
-
default: () =>
|
|
299
|
-
isIP: () =>
|
|
316
|
+
_default: () => et,
|
|
317
|
+
connect: () => Ze,
|
|
318
|
+
createConnection: () => Qe,
|
|
319
|
+
createServer: () => $e,
|
|
320
|
+
default: () => et,
|
|
321
|
+
isIP: () => Ke,
|
|
300
322
|
isIPv4: () => N,
|
|
301
323
|
isIPv6: () => P
|
|
302
324
|
}), F = class extends d.Duplex {
|
|
@@ -359,7 +381,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
359
381
|
}).catch(n);
|
|
360
382
|
}
|
|
361
383
|
connect(...e) {
|
|
362
|
-
let t =
|
|
384
|
+
let t = qe(...e), n = this.__webvpn_tcp_socket_init__(M.then((e) => e.cloud.webvpn.tcpSocket({
|
|
363
385
|
remoteAddress: t.host ?? "localhost",
|
|
364
386
|
remotePort: t.port
|
|
365
387
|
})));
|
|
@@ -486,7 +508,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
486
508
|
return this._remoteAddress.family;
|
|
487
509
|
}
|
|
488
510
|
timeout;
|
|
489
|
-
}, I = class extends
|
|
511
|
+
}, I = class extends re {
|
|
490
512
|
_localAddress;
|
|
491
513
|
_webVPNTcpSocketListenerPromise;
|
|
492
514
|
constructor(e, t) {
|
|
@@ -504,7 +526,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
504
526
|
}), this._webVPNTcpSocketListenerPromise;
|
|
505
527
|
}
|
|
506
528
|
listen(...e) {
|
|
507
|
-
let t =
|
|
529
|
+
let t = qe(...e), n = (e) => {
|
|
508
530
|
let t = new F({ connection: Promise.resolve(e) });
|
|
509
531
|
this.emit("connection", t);
|
|
510
532
|
}, r = (e) => M.then((r) => r.cloud.webvpn.tcpSocketListener({
|
|
@@ -541,23 +563,23 @@ var Ke = /* @__PURE__ */ n({
|
|
|
541
563
|
connections;
|
|
542
564
|
listening;
|
|
543
565
|
async [Symbol.asyncDispose]() {}
|
|
544
|
-
},
|
|
566
|
+
}, Ze = (e, t) => new F().connect(e, t), Qe = (e, t) => new F().connect(e, t), $e = (e, t) => {
|
|
545
567
|
typeof e == "function" && (t = e, e = void 0);
|
|
546
568
|
let n = new I(e);
|
|
547
569
|
return t && n.on("connection", t), n;
|
|
548
|
-
},
|
|
570
|
+
}, et = {
|
|
549
571
|
Socket: F,
|
|
550
572
|
Server: I,
|
|
551
|
-
connect:
|
|
552
|
-
createConnection:
|
|
553
|
-
createServer:
|
|
554
|
-
isIP:
|
|
573
|
+
connect: Ze,
|
|
574
|
+
createConnection: Qe,
|
|
575
|
+
createServer: $e,
|
|
576
|
+
isIP: Ke,
|
|
555
577
|
isIPv4: N,
|
|
556
578
|
isIPv6: P
|
|
557
|
-
},
|
|
558
|
-
Socket: () =>
|
|
559
|
-
createSocket: () =>
|
|
560
|
-
}),
|
|
579
|
+
}, tt = /* @__PURE__ */ n({
|
|
580
|
+
Socket: () => nt,
|
|
581
|
+
createSocket: () => at
|
|
582
|
+
}), nt = class extends re {
|
|
561
583
|
_type;
|
|
562
584
|
_localAddress;
|
|
563
585
|
_remoteAddress;
|
|
@@ -627,7 +649,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
627
649
|
}
|
|
628
650
|
}
|
|
629
651
|
_peerTail(e, t) {
|
|
630
|
-
if (e === void 0 || t === void 0) return
|
|
652
|
+
if (e === void 0 || t === void 0) return rt;
|
|
631
653
|
let n = `${e}|${t}`, r = this._peerTailCache.get(n);
|
|
632
654
|
if (r) return r;
|
|
633
655
|
let i = f.isValid(e) ? L(e) : R(e), a = new Uint8Array(1 + i.byteLength + 2);
|
|
@@ -671,7 +693,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
671
693
|
return this._localAddress;
|
|
672
694
|
}
|
|
673
695
|
bind(...e) {
|
|
674
|
-
let t =
|
|
696
|
+
let t = Je(...e), n = this._type === "udp6" ? "::" : "0.0.0.0";
|
|
675
697
|
return this._webVPNUdpSocketPromise = M.then((e) => e.cloud.webvpn.udpSocket({
|
|
676
698
|
type: this._type,
|
|
677
699
|
address: t.address ?? n,
|
|
@@ -783,11 +805,11 @@ var Ke = /* @__PURE__ */ n({
|
|
|
783
805
|
}
|
|
784
806
|
send(...e) {
|
|
785
807
|
this._webVPNUdpSocketPromise || this.bind();
|
|
786
|
-
let t =
|
|
808
|
+
let t = Ye(...e), n = this._type === "udp6" ? "::1" : "127.0.0.1";
|
|
787
809
|
if (!this._webVPNUdpSocketPromise) throw Error("Socket not bound");
|
|
788
810
|
this._webVPNUdpSocketPromise.then((e) => {
|
|
789
811
|
if (!e) throw Error("Socket not bound");
|
|
790
|
-
let r =
|
|
812
|
+
let r = it(t.message), i = t.callback, a = t.address ?? n, o = this._remoteAddress !== void 0 && t.address === void 0;
|
|
791
813
|
if (this._dataPort && (o || f.isValid(a) || p.isValid(a))) {
|
|
792
814
|
this._portSend(r, o ? void 0 : a, o ? void 0 : t.port), i?.call(this, null, r.byteLength);
|
|
793
815
|
return;
|
|
@@ -849,12 +871,12 @@ var Ke = /* @__PURE__ */ n({
|
|
|
849
871
|
this.close(e);
|
|
850
872
|
});
|
|
851
873
|
}
|
|
852
|
-
},
|
|
853
|
-
if (typeof e == "string") return
|
|
874
|
+
}, rt = new Uint8Array([2]), it = (e) => {
|
|
875
|
+
if (typeof e == "string") return Ge.encode(e);
|
|
854
876
|
if (e instanceof Uint8Array) return e;
|
|
855
877
|
if (ArrayBuffer.isView(e)) return new Uint8Array(e.buffer, e.byteOffset, e.byteLength);
|
|
856
878
|
if (Array.isArray(e)) {
|
|
857
|
-
let t = e.map(
|
|
879
|
+
let t = e.map(it), n = new Uint8Array(t.reduce((e, t) => e + t.byteLength, 0)), r = 0;
|
|
858
880
|
for (let e of t) n.set(e, r), r += e.byteLength;
|
|
859
881
|
return n;
|
|
860
882
|
}
|
|
@@ -867,25 +889,25 @@ var Ke = /* @__PURE__ */ n({
|
|
|
867
889
|
let t = new p(e).getBitsBase16(0, 128).match(/.{2}/g);
|
|
868
890
|
if (!t || t.length !== 16) throw Error(`Invalid IPv6 address: ${e}`);
|
|
869
891
|
return new Uint8Array(t.map((e) => parseInt(e, 16)));
|
|
870
|
-
},
|
|
871
|
-
let n = new
|
|
892
|
+
}, at = (e, t) => {
|
|
893
|
+
let n = new nt(typeof e == "string" ? { type: e } : e);
|
|
872
894
|
return t && n.on("message", t), n;
|
|
873
|
-
},
|
|
895
|
+
}, ot = /* @__PURE__ */ n({
|
|
874
896
|
Agent: () => Y,
|
|
875
897
|
ClientRequest: () => q,
|
|
876
898
|
HTTPParser: () => U,
|
|
877
899
|
IncomingMessage: () => W,
|
|
878
|
-
METHODS: () =>
|
|
900
|
+
METHODS: () => ct,
|
|
879
901
|
STATUS_CODES: () => z,
|
|
880
902
|
Server: () => J,
|
|
881
903
|
ServerResponse: () => K,
|
|
882
|
-
_default: () =>
|
|
883
|
-
createServer: () =>
|
|
884
|
-
default: () =>
|
|
885
|
-
get: () =>
|
|
886
|
-
globalAgent: () =>
|
|
904
|
+
_default: () => yt,
|
|
905
|
+
createServer: () => vt,
|
|
906
|
+
default: () => yt,
|
|
907
|
+
get: () => _t,
|
|
908
|
+
globalAgent: () => gt,
|
|
887
909
|
request: () => X
|
|
888
|
-
}),
|
|
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 = {
|
|
889
911
|
100: "Continue",
|
|
890
912
|
101: "Switching Protocols",
|
|
891
913
|
102: "Processing",
|
|
@@ -949,7 +971,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
949
971
|
509: "Bandwidth Limit Exceeded",
|
|
950
972
|
510: "Not Extended",
|
|
951
973
|
511: "Network Authentication Required"
|
|
952
|
-
},
|
|
974
|
+
}, lt = new Set([
|
|
953
975
|
"content-type",
|
|
954
976
|
"content-length",
|
|
955
977
|
"user-agent",
|
|
@@ -968,15 +990,15 @@ var Ke = /* @__PURE__ */ n({
|
|
|
968
990
|
"server",
|
|
969
991
|
"age",
|
|
970
992
|
"expires"
|
|
971
|
-
]), 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) => {
|
|
972
994
|
if (e.length === 0) return t;
|
|
973
995
|
if (t.length === 0) return e;
|
|
974
996
|
let n = new Uint8Array(e.length + t.length);
|
|
975
997
|
return n.set(e, 0), n.set(t, e.length), n;
|
|
976
|
-
},
|
|
998
|
+
}, ft = (e, t) => {
|
|
977
999
|
for (let n = t; n + 1 < e.length; n++) if (e[n] === B && e[n + 1] === V) return n;
|
|
978
1000
|
return -1;
|
|
979
|
-
},
|
|
1001
|
+
}, pt = (e) => {
|
|
980
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;
|
|
981
1003
|
return -1;
|
|
982
1004
|
}, U = class {
|
|
@@ -990,10 +1012,10 @@ var Ke = /* @__PURE__ */ n({
|
|
|
990
1012
|
this.mode = e, this.handlers = t;
|
|
991
1013
|
}
|
|
992
1014
|
execute(e) {
|
|
993
|
-
this.buf =
|
|
1015
|
+
this.buf = dt(this.buf, e);
|
|
994
1016
|
let t = !0;
|
|
995
1017
|
for (; t;) if (t = !1, this.state === "HEAD") {
|
|
996
|
-
let e =
|
|
1018
|
+
let e = pt(this.buf);
|
|
997
1019
|
if (e === -1) return;
|
|
998
1020
|
let n = this.buf.subarray(0, e);
|
|
999
1021
|
this.buf = this.buf.subarray(e + 4);
|
|
@@ -1008,7 +1030,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
1008
1030
|
this.state = "HEAD", this.framing = "none", this.bodyRemaining = 0, this.chunkState = "size", this.skipBody = !1;
|
|
1009
1031
|
}
|
|
1010
1032
|
parseHead(e) {
|
|
1011
|
-
let t =
|
|
1033
|
+
let t = st.decode(e).split("\r\n"), n = t.shift() ?? "", r = [];
|
|
1012
1034
|
for (let e of t) (e.startsWith(" ") || e.startsWith(" ")) && r.length > 0 ? r[r.length - 1] += " " + e.trim() : r.push(e);
|
|
1013
1035
|
let i = [], a = {};
|
|
1014
1036
|
for (let e of r) {
|
|
@@ -1046,7 +1068,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
1046
1068
|
return;
|
|
1047
1069
|
}
|
|
1048
1070
|
let i = e[r];
|
|
1049
|
-
i === void 0 ? e[r] = n :
|
|
1071
|
+
i === void 0 ? e[r] = n : lt.has(r) || (e[r] = `${i}, ${n}`);
|
|
1050
1072
|
}
|
|
1051
1073
|
setupBody(e) {
|
|
1052
1074
|
if (this.skipBody) {
|
|
@@ -1079,9 +1101,9 @@ var Ke = /* @__PURE__ */ n({
|
|
|
1079
1101
|
}
|
|
1080
1102
|
consumeChunked() {
|
|
1081
1103
|
for (;;) if (this.chunkState === "size") {
|
|
1082
|
-
let e =
|
|
1104
|
+
let e = ft(this.buf, 0);
|
|
1083
1105
|
if (e === -1) return !1;
|
|
1084
|
-
let t =
|
|
1106
|
+
let t = st.decode(this.buf.subarray(0, e)), n = parseInt(t.split(";")[0].trim(), 16);
|
|
1085
1107
|
if (this.buf = this.buf.subarray(e + 2), Number.isNaN(n)) return !0;
|
|
1086
1108
|
n === 0 ? this.chunkState = "trailer" : (this.bodyRemaining = n, this.chunkState = "data");
|
|
1087
1109
|
} else if (this.chunkState === "data") {
|
|
@@ -1092,13 +1114,13 @@ var Ke = /* @__PURE__ */ n({
|
|
|
1092
1114
|
if (this.buf.length < 2) return !1;
|
|
1093
1115
|
this.buf = this.buf.subarray(2), this.chunkState = "size";
|
|
1094
1116
|
} else {
|
|
1095
|
-
let e =
|
|
1117
|
+
let e = ft(this.buf, 0);
|
|
1096
1118
|
if (e === -1) return !1;
|
|
1097
1119
|
let t = e === 0;
|
|
1098
1120
|
if (this.buf = this.buf.subarray(e + 2), t) return !0;
|
|
1099
1121
|
}
|
|
1100
1122
|
}
|
|
1101
|
-
},
|
|
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 {
|
|
1102
1124
|
httpVersion = "1.1";
|
|
1103
1125
|
httpVersionMajor = 1;
|
|
1104
1126
|
httpVersionMinor = 1;
|
|
@@ -1133,7 +1155,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
1133
1155
|
_bodyWritten = !1;
|
|
1134
1156
|
setHeader(e, t) {
|
|
1135
1157
|
if (this.headersSent) throw H(/* @__PURE__ */ Error("Cannot set headers after they are sent to the client"), "ERR_HTTP_HEADERS_SENT");
|
|
1136
|
-
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");
|
|
1137
1159
|
if (t === void 0) throw H(/* @__PURE__ */ TypeError(`Invalid value "undefined" for header "${e}"`), "ERR_HTTP_INVALID_HEADER_VALUE");
|
|
1138
1160
|
return this._headerStore.set(e.toLowerCase(), [e, Array.isArray(t) ? [...t] : t]), this;
|
|
1139
1161
|
}
|
|
@@ -1174,7 +1196,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
1174
1196
|
return this._bodyWritten = !0, super.write(e, t, n);
|
|
1175
1197
|
}
|
|
1176
1198
|
_write(e, t, n) {
|
|
1177
|
-
let r =
|
|
1199
|
+
let r = mt(e), i = [];
|
|
1178
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) {
|
|
1179
1201
|
n();
|
|
1180
1202
|
return;
|
|
@@ -1192,7 +1214,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
1192
1214
|
end(e, t, n) {
|
|
1193
1215
|
if (e != null && typeof e != "function" && !this._bodyWritten && !this.headersSent && !this.chunkedEncoding && !this.hasHeader("content-length")) {
|
|
1194
1216
|
let n = typeof t == "string" ? t : void 0;
|
|
1195
|
-
this.setHeader("Content-Length",
|
|
1217
|
+
this.setHeader("Content-Length", mt(e, n).length);
|
|
1196
1218
|
}
|
|
1197
1219
|
return super.end(e, t, n);
|
|
1198
1220
|
}
|
|
@@ -1241,7 +1263,7 @@ var Ke = /* @__PURE__ */ n({
|
|
|
1241
1263
|
setTimeout(e, t) {
|
|
1242
1264
|
return this.socket?.setTimeout(e, t), this;
|
|
1243
1265
|
}
|
|
1244
|
-
},
|
|
1266
|
+
}, ht = (...e) => {
|
|
1245
1267
|
let t = {}, n = {}, r, i = [...e], a = i.shift();
|
|
1246
1268
|
if (typeof a == "string" || a instanceof URL) {
|
|
1247
1269
|
let e = typeof a == "string" ? new URL(a) : a;
|
|
@@ -1382,34 +1404,34 @@ var Ke = /* @__PURE__ */ n({
|
|
|
1382
1404
|
return `${e.host ?? "localhost"}:${e.port ?? ""}:${e.localAddress ?? ""}`;
|
|
1383
1405
|
}
|
|
1384
1406
|
destroy() {}
|
|
1385
|
-
},
|
|
1386
|
-
let { options: t, callback: n } =
|
|
1407
|
+
}, gt = new Y(), X = (...e) => {
|
|
1408
|
+
let { options: t, callback: n } = ht(...e);
|
|
1387
1409
|
return new q(t, n);
|
|
1388
|
-
},
|
|
1410
|
+
}, _t = (...e) => {
|
|
1389
1411
|
let t = X(...e);
|
|
1390
1412
|
return t.end(), t;
|
|
1391
|
-
},
|
|
1392
|
-
METHODS:
|
|
1413
|
+
}, vt = (e, t) => new J(e, t), yt = {
|
|
1414
|
+
METHODS: ct,
|
|
1393
1415
|
STATUS_CODES: z,
|
|
1394
1416
|
Agent: Y,
|
|
1395
|
-
globalAgent:
|
|
1417
|
+
globalAgent: gt,
|
|
1396
1418
|
Server: J,
|
|
1397
1419
|
ServerResponse: K,
|
|
1398
1420
|
IncomingMessage: W,
|
|
1399
1421
|
ClientRequest: q,
|
|
1400
1422
|
OutgoingMessage: G,
|
|
1401
|
-
createServer:
|
|
1423
|
+
createServer: vt,
|
|
1402
1424
|
request: X,
|
|
1403
|
-
get:
|
|
1404
|
-
},
|
|
1405
|
-
available: () =>
|
|
1406
|
-
dgram: () =>
|
|
1407
|
-
dns: () =>
|
|
1408
|
-
fetch: () =>
|
|
1409
|
-
http: () =>
|
|
1410
|
-
net: () =>
|
|
1411
|
-
quota: () =>
|
|
1412
|
-
}),
|
|
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) => {
|
|
1413
1435
|
if (typeof window > "u") return !1;
|
|
1414
1436
|
if (g()) return !0;
|
|
1415
1437
|
let t = await M, n = null, r = new Promise((e) => {
|
|
@@ -1424,71 +1446,73 @@ v(() => (Q ||= Z().then(() => void 0).finally(() => {
|
|
|
1424
1446
|
}), Q));
|
|
1425
1447
|
//#endregion
|
|
1426
1448
|
//#region src/lib/desktop.ts
|
|
1427
|
-
var
|
|
1428
|
-
available: () =>
|
|
1429
|
-
dgram: () =>
|
|
1430
|
-
dns: () =>
|
|
1431
|
-
fetch: () =>
|
|
1432
|
-
fs: () =>
|
|
1433
|
-
net: () =>
|
|
1434
|
-
}),
|
|
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) => {
|
|
1435
1457
|
throw Error(`The FKN desktop app is not connected, desktop.${e} is unavailable`);
|
|
1436
|
-
},
|
|
1458
|
+
}, wt = $("fetch"), Tt = { lookup: $("dns.lookup") }, Et = {
|
|
1437
1459
|
connect: $("net.connect"),
|
|
1438
1460
|
createConnection: $("net.createConnection"),
|
|
1439
1461
|
createServer: $("net.createServer")
|
|
1440
|
-
},
|
|
1462
|
+
}, Dt = { createSocket: $("dgram.createSocket") }, Ot = {
|
|
1441
1463
|
isLocalDirectorySupported: () => !1,
|
|
1442
1464
|
pickLocalDirectory: $("fs.pickLocalDirectory"),
|
|
1443
1465
|
queryDirectoryPermission: $("fs.queryDirectoryPermission"),
|
|
1444
1466
|
ensureDirectoryPermission: $("fs.ensureDirectoryPermission")
|
|
1445
|
-
},
|
|
1446
|
-
if (
|
|
1467
|
+
}, kt = () => typeof document < "u" && g(), At = async (e, t) => {
|
|
1468
|
+
if (Be(e), t?.credentials === "include") {
|
|
1447
1469
|
if (typeof document > "u") throw Error("fetch with credentials needs the FKN extension, which only exists in window realms");
|
|
1448
1470
|
return C(e, t);
|
|
1449
1471
|
}
|
|
1450
|
-
return
|
|
1472
|
+
return kt() ? C(e, {
|
|
1451
1473
|
...t,
|
|
1452
1474
|
credentials: "omit"
|
|
1453
|
-
}) :
|
|
1454
|
-
},
|
|
1475
|
+
}) : Ct() ? wt(e, t) : Ve(e, t);
|
|
1476
|
+
}, jt = /* @__PURE__ */ n({
|
|
1455
1477
|
ATTACH_FRAME_EVENT_KEY: () => w,
|
|
1456
1478
|
assertAttachableFrameUrl: () => E,
|
|
1457
1479
|
assertFetchableUrl: () => S,
|
|
1458
|
-
attachFrame: () =>
|
|
1459
|
-
attachFramePermission: () =>
|
|
1460
|
-
available: () =>
|
|
1480
|
+
attachFrame: () => Ce,
|
|
1481
|
+
attachFramePermission: () => xe,
|
|
1482
|
+
available: () => kt,
|
|
1461
1483
|
box: () => l,
|
|
1462
|
-
cookies: () =>
|
|
1484
|
+
cookies: () => _e,
|
|
1463
1485
|
createVideoElementHandle: () => e,
|
|
1464
1486
|
events: () => h,
|
|
1465
1487
|
extension: () => h,
|
|
1466
1488
|
fetch: () => C,
|
|
1467
|
-
fetchCredentialedPermission: () =>
|
|
1468
|
-
|
|
1469
|
-
|
|
1489
|
+
fetchCredentialedPermission: () => le,
|
|
1490
|
+
fetchLocalPermission: () => ue,
|
|
1491
|
+
fetchPermission: () => ce,
|
|
1492
|
+
gotoPermission: () => Se,
|
|
1470
1493
|
handleRevivableModules: () => i,
|
|
1471
1494
|
isBlockedFetchUrl: () => x,
|
|
1472
1495
|
isBlockedFrameUrl: () => T,
|
|
1473
1496
|
isExtensionExposed: () => g,
|
|
1497
|
+
isLocalNetworkUrl: () => fe,
|
|
1474
1498
|
isType: () => t,
|
|
1475
|
-
modifyRequestHeadersPermission: () =>
|
|
1476
|
-
permissions: () =>
|
|
1499
|
+
modifyRequestHeadersPermission: () => ve,
|
|
1500
|
+
permissions: () => we,
|
|
1477
1501
|
promptInstall: () => Z,
|
|
1478
|
-
readCookiePermission: () =>
|
|
1479
|
-
removeRequestHeaderRule: () =>
|
|
1502
|
+
readCookiePermission: () => ge,
|
|
1503
|
+
removeRequestHeaderRule: () => be,
|
|
1480
1504
|
revive: () => o,
|
|
1481
1505
|
setMissingExtensionHandler: () => v,
|
|
1482
|
-
setRequestHeaderRule: () =>
|
|
1506
|
+
setRequestHeaderRule: () => ye,
|
|
1483
1507
|
type: () => a,
|
|
1484
1508
|
waitForExtensionExposure: () => y
|
|
1485
|
-
}),
|
|
1486
|
-
ensureDirectoryPermission: () =>
|
|
1487
|
-
isLocalDirectorySupported: () =>
|
|
1488
|
-
pickLocalDirectory: () =>
|
|
1489
|
-
queryDirectoryPermission: () =>
|
|
1490
|
-
}),
|
|
1491
|
-
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;
|
|
1492
1516
|
let t = window.showDirectoryPicker;
|
|
1493
1517
|
return t({
|
|
1494
1518
|
mode: "readwrite",
|
|
@@ -1496,25 +1520,47 @@ var vt = /* @__PURE__ */ n({
|
|
|
1496
1520
|
}).catch((e) => {
|
|
1497
1521
|
if (e?.name !== "AbortError") throw e;
|
|
1498
1522
|
});
|
|
1499
|
-
},
|
|
1523
|
+
}, Ft = async (e, t = "readwrite") => {
|
|
1500
1524
|
let { queryPermission: n } = e;
|
|
1501
1525
|
return await n?.call(e, { mode: t }) ?? "granted";
|
|
1502
|
-
},
|
|
1503
|
-
if (await
|
|
1526
|
+
}, It = async (e, t = "readwrite") => {
|
|
1527
|
+
if (await Ft(e, t) === "granted") return !0;
|
|
1504
1528
|
let { requestPermission: n } = e;
|
|
1505
1529
|
return await n?.call(e, { mode: t }) === "granted";
|
|
1506
|
-
},
|
|
1530
|
+
}, Lt = "https://fkn.app", Rt = (e, t) => {
|
|
1507
1531
|
if (typeof window > "u") throw Error("FKN @fkn/lib: relayWorker must be called from the main thread");
|
|
1508
1532
|
if (!A?.contentWindow) throw Error("FKN @fkn/lib: relayWorker called before the FKN iframe was injected");
|
|
1509
|
-
|
|
1533
|
+
ne({
|
|
1510
1534
|
receive: window,
|
|
1511
1535
|
emit: A.contentWindow
|
|
1512
1536
|
}, e, {
|
|
1513
1537
|
key: "fkn-api",
|
|
1514
|
-
originA: t?.originA ??
|
|
1538
|
+
originA: t?.originA ?? Lt,
|
|
1515
1539
|
originB: t?.originB ?? "*",
|
|
1516
1540
|
unregisterSignal: t?.unregisterSignal
|
|
1517
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 : () => {};
|
|
1518
1564
|
};
|
|
1519
1565
|
//#endregion
|
|
1520
|
-
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 };
|