@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.
Files changed (4) hide show
  1. package/index.cjs +5 -5
  2. package/index.d.ts +24 -7
  3. package/index.js +311 -232
  4. 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 ee, expose as te, relay as ne } from "osra";
3
- import { Stream as u } from "stream";
4
- import { EventEmitter as re } from "events";
5
- import { Address4 as d, Address6 as f } from "ip-address";
6
- import { Buffer as p } from "buffer";
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 ie = "FKN_WEB_EXTENSION_MAIN_WORLD_CONTENT_SCRIPT_ENABLED_EVENT_KEY", ae = "fknExtension", m = ee();
9
- typeof document < "u" && document.addEventListener(ie, (e) => {
10
- m.dispatchEvent(new CustomEvent("statuschange", { detail: { enabled: e.detail.enabled } }));
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 h = () => typeof document > "u" ? !1 : document.documentElement.dataset[ae] === "true", g = null, _ = (e) => {
13
- g = e;
14
- }, oe = 150, v = (e = 1e3) => new Promise((t, n) => {
15
- if (h()) return t();
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 (g && (await g().catch(() => {}), h())) return t();
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(() => h() ? i(t) : a(), oe);
22
+ clearTimeout(r), r = setTimeout(() => g() ? i(t) : a(), ae);
23
23
  }, s = new MutationObserver(() => {
24
- h() && i(t);
24
+ g() && i(t);
25
25
  }), c = () => {
26
- document.readyState === "complete" && !h() && o();
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
- h() && i(t);
33
- }), se, y = new Proxy({}, { get: (e, t) => async (...e) => {
34
- await v(), se ??= te({}, {
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 se)[t];
38
+ let n = (await oe)[t];
39
39
  return n(...e);
40
- } }), ce = {
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
- }, le = {
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
- }, ue = ["fkn.app", "fkn.dev"], b = (e) => {
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 ue.some((e) => n === e || n.endsWith(`.${e}`));
63
- }, x = (e) => {
64
- if (b(e)) throw Error("fetch: refusing to target the extension's own pages or FKN platform domains");
65
- }, de = ["origin", "referer"], fe = (e) => {
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 = de.map((e) => {
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
- }, S = async (e, t) => {
72
+ }, C = async (e, t) => {
73
73
  let n = new Request(e, t);
74
- x(n.url);
74
+ S(n.url);
75
75
  let r = n.body ? await n.arrayBuffer() : null;
76
- return y.proxyFetch({
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: fe(t),
83
+ unsafeHeaders: de(t),
84
84
  reason: t?.reason,
85
85
  signal: t?.signal ?? void 0
86
86
  });
87
- }, pe = {
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
- }, me = { get: (e) => y.getCookie(e) }, he = {
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
- }, ge = (e) => y.setRequestHeaderRule(e), _e = (e) => y.removeRequestHeaderRule({ ruleId: e });
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 C = "FKN_WEB_EXTENSION_ATTACH_FRAME_EVENT_KEY", w = (e) => {
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
- }, T = (e) => {
122
- if (w(e)) throw Error("attachFrame: refusing to target the extension's own pages or fkn.app");
123
- }, ve = {
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
- }, ye = {
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
- }, be = async ({ iframe: e, domains: t = [] }) => {
135
+ }, ye = async ({ iframe: e, domains: t = [] }) => {
136
136
  let n = crypto.randomUUID();
137
- if (T(e.src), await v(), !e.isConnected) throw Error("attachFrame: the iframe must be connected to the document before attaching");
138
- e.dispatchEvent(new CustomEvent(C, { detail: n }));
139
- let { executeLocator: r, ensureLocatorPermission: i, goto: a } = await y.attachFrame({
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 = {}) => (T(e), a({
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
- }, xe = { request: (e) => y.requestPermissions(e.map((e) => ({
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
- }))) }, Se = 32, Ce = typeof CSS < "u" && CSS.supports("clip-path", "path('M0 0H1V1H0Z')"), we = (e) => {
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
- }, Te = ({ x: e, y: t, width: n, height: r }) => `M${e} ${t}h${n}v${r}h${-n}Z`, Ee = (e, { modal: t, rects: n }) => {
159
- if (!Ce) {
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(Te).join("")}')`, i = r === "none" || CSS.supports("clip-path", r) ? r : "inset(100%)";
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
- }, De = (e) => {
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)), ee = Math.max(c, Math.min(Math.round(n + i), o));
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: ee - c
180
+ height: u - c
181
181
  };
182
- }, Oe = (e) => {
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, Se) : []).map(De).filter((e) => e !== null && e.width > 0 && e.height > 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
- }, E = null, ke = () => E !== null, Ae = (e) => {
190
- we(e), Ee(e, {
189
+ }, D = null, Oe = () => D !== null, ke = (e) => {
190
+ Ce(e), Te(e, {
191
191
  modal: !1,
192
192
  rects: []
193
- }), E = e;
194
- }, je = (e) => {
195
- if (!E) return;
196
- let t = Oe(e);
197
- t && Ee(E, t);
198
- }, Me = "https://fkn.app", D = typeof globalThis < "u" && globalThis.document ? globalThis.document : void 0, Ne = D?.querySelector(`iframe[src="${Me}/api"]`) ?? null, O = D?.createElement("iframe") ?? null;
199
- !Ne && O && D && (O.src = `${Me}/api`, D.body.appendChild(O));
200
- var k = Ne ?? O, Pe = k?.contentWindow ?? null;
201
- k && D && Ae(k);
202
- var A = (() => {
203
- if (typeof window < "u") return Pe ? {
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: Pe
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
- })(), Fe = A !== void 0, j = A ? te({}, {
211
+ })(), Pe = j !== void 0, M = j ? ee({}, {
212
212
  key: "fkn-api",
213
- transport: A
213
+ transport: j
214
214
  }) : new Promise(() => {});
215
- j.then((e) => {
216
- ke() && e.overlay.setHost(je);
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 Ie = ["fkn.app", "fkn.dev"], Le = (e) => {
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 (Ie.some((e) => r === e || r.endsWith(`.${e}`))) throw Error(`fetch refuses FKN platform domains (${r})`);
229
- }, M = (e, t) => (Le(e), j.then((n) => n.cloud.fetch(e, t))), Re = async () => {
230
- let e = await j.then((e) => e.cloud.quota());
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) => j.then((n) => n.cloud.dns.lookup(e, t)), Ve = new TextEncoder();
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) => d.isValid(e), P = (e) => f.isValid(e), He = (e) => N(e) ? 4 : P(e) ? 6 : 0, Ue = (...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: () => Ye,
294
+ _default: () => Xe,
295
295
  connect: () => qe,
296
296
  createConnection: () => Je,
297
- createServer: () => L,
298
- default: () => Ye,
297
+ createServer: () => Ye,
298
+ default: () => Xe,
299
299
  isIP: () => He,
300
300
  isIPv4: () => N,
301
301
  isIPv6: () => P
302
- }), F = class extends u.Duplex {
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__(j.then((e) => e.cloud.webvpn.tcpSocket({
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 re {
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) => j.then((r) => r.cloud.webvpn.tcpSocketListener({
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), L = (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
- }, Ye = {
548
+ }, Xe = {
549
549
  Socket: F,
550
550
  Server: I,
551
551
  connect: qe,
552
552
  createConnection: Je,
553
- createServer: L,
553
+ createServer: Ye,
554
554
  isIP: He,
555
555
  isIPv4: N,
556
556
  isIPv6: P
557
- }, Xe = /* @__PURE__ */ n({
558
- Socket: () => Ze,
559
- createSocket: () => $e
560
- }), Ze = class extends re {
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 (d.isValid(e)) {
589
- let n = R(e), r = t && d.isValid(t) ? R(t) : new Uint8Array([
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 (f.isValid(e)) {
601
- let t = Qe(e);
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 = j.then((e) => e.cloud.webvpn.udpSocket({
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
- let t = e.dataReadableStream.getReader(), n = async () => {
621
- let { value: e, done: r } = await t.read();
622
- r || (this.emit("message", p.from(e.data), {
623
- address: e.address,
624
- family: e.family,
625
- port: e.port,
626
- size: e.size
627
- }), n());
628
- };
629
- return n(), this._localAddress = {
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 (d.isValid(e)) {
676
- let n = R(e), r = t && d.isValid(t) ? R(t) : new Uint8Array([
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 (f.isValid(e)) {
688
- let t = Qe(e);
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 = typeof t.message == "string" ? Ve.encode(t.message) : t.message;
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: t.address ?? n,
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
- }, R = (e) => {
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
- }, Qe = (e) => {
788
- let t = new f(e).getBitsBase16(0, 128).match(/.{2}/g);
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
- }, $e = (e, t) => {
792
- let n = new Ze(typeof e == "string" ? { type: e } : e);
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
- }, et = /* @__PURE__ */ n({
873
+ }, nt = /* @__PURE__ */ n({
795
874
  Agent: () => Y,
796
875
  ClientRequest: () => q,
797
876
  HTTPParser: () => U,
798
877
  IncomingMessage: () => W,
799
- METHODS: () => nt,
878
+ METHODS: () => it,
800
879
  STATUS_CODES: () => z,
801
880
  Server: () => J,
802
881
  ServerResponse: () => K,
803
- _default: () => pt,
804
- createServer: () => ft,
805
- default: () => pt,
806
- get: () => dt,
807
- globalAgent: () => ut,
882
+ _default: () => ht,
883
+ createServer: () => mt,
884
+ default: () => ht,
885
+ get: () => pt,
886
+ globalAgent: () => ft,
808
887
  request: () => X
809
- }), tt = new TextDecoder("latin1"), nt = /* @__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 = {
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
- }, rt = new Set([
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, it = /^[\^_`a-zA-Z\-0-9!#$%&'*+.|~]+$/, H = (e, t) => (e.code = t, e), at = (e, t) => {
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
- }, ot = (e, t) => {
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
- }, st = (e) => {
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 = at(this.buf, e);
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 = st(this.buf);
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 = tt.decode(e).split("\r\n"), n = t.shift() ?? "", r = [];
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 : rt.has(r) || (e[r] = `${i}, ${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 = ot(this.buf, 0);
1082
+ let e = ct(this.buf, 0);
1004
1083
  if (e === -1) return !1;
1005
- let t = tt.decode(this.buf.subarray(0, e)), n = parseInt(t.split(";")[0].trim(), 16);
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 = ot(this.buf, 0);
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
- }, ct = (e, t) => p.isBuffer(e) ? e : typeof e == "string" ? p.from(e, t ?? "utf8") : e instanceof Uint8Array ? p.from(e) : e instanceof ArrayBuffer ? p.from(new Uint8Array(e)) : p.from(String(e)), W = class extends u.Readable {
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 u.Writable {
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" || !it.test(e)) throw H(/* @__PURE__ */ TypeError(`Header name must be a valid HTTP token [${JSON.stringify(String(e))}]`), "ERR_INVALID_HTTP_TOKEN");
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 = ct(e), i = [];
1099
- if (this.headersSent ||= (this._implicitHeader(), i.push(p.from(this._headBlock, "latin1")), !0), this.chunkedEncoding ? r.length > 0 && (i.push(p.from(`${r.length.toString(16)}\r\n`, "latin1")), i.push(r), i.push(p.from("\r\n", "latin1"))) : i.push(r), i.length === 0) {
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(p.concat(i), n);
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(p.from(this._headBlock, "latin1")), !0), this.chunkedEncoding && t.push(p.from("0\r\n\r\n", "latin1")), this.finished = !0, t.length === 0) {
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(p.concat(t), e);
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", ct(e, n).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(p.from("HTTP/1.1 100 Continue\r\n\r\n", "latin1"), () => {});
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
- }, lt = (...e) => {
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 ${p.from(e.auth).toString("base64")}`), this.socket = new F(), this.emit("socket", this.socket), this.socket.on("error", (e) => {
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(p.from(t));
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(p.from(e));
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
- }, ut = new Y(), X = (...e) => {
1307
- let { options: t, callback: n } = lt(...e);
1385
+ }, ft = new Y(), X = (...e) => {
1386
+ let { options: t, callback: n } = dt(...e);
1308
1387
  return new q(t, n);
1309
- }, dt = (...e) => {
1388
+ }, pt = (...e) => {
1310
1389
  let t = X(...e);
1311
1390
  return t.end(), t;
1312
- }, ft = (e, t) => new J(e, t), pt = {
1313
- METHODS: nt,
1391
+ }, mt = (e, t) => new J(e, t), ht = {
1392
+ METHODS: it,
1314
1393
  STATUS_CODES: z,
1315
1394
  Agent: Y,
1316
- globalAgent: ut,
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: ft,
1401
+ createServer: mt,
1323
1402
  request: X,
1324
- get: dt
1325
- }, mt = /* @__PURE__ */ n({
1326
- available: () => ht,
1327
- dgram: () => Xe,
1403
+ get: pt
1404
+ }, gt = /* @__PURE__ */ n({
1405
+ available: () => _t,
1406
+ dgram: () => Ze,
1328
1407
  dns: () => ze,
1329
- fetch: () => M,
1330
- http: () => et,
1408
+ fetch: () => Le,
1409
+ http: () => nt,
1331
1410
  net: () => Ke,
1332
1411
  quota: () => Re
1333
- }), ht = () => Fe, Z = async (e) => {
1412
+ }), _t = () => Pe, Z = async (e) => {
1334
1413
  if (typeof window > "u") return !1;
1335
- if (h()) return !0;
1336
- let t = await j, n = null, r = new Promise((e) => {
1414
+ if (g()) return !0;
1415
+ let t = await M, n = null, r = new Promise((e) => {
1337
1416
  n = () => {
1338
- h() && e(!0);
1339
- }, m.addEventListener("statuschange", n);
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 && m.removeEventListener("statuschange", n), await t.installPrompt.hide().catch(() => {}), a;
1420
+ return n && h.removeEventListener("statuschange", n), await t.installPrompt.hide().catch(() => {}), a;
1342
1421
  }, Q = null;
1343
- _(() => (Q ||= Z().then(() => void 0).finally(() => {
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 gt = /* @__PURE__ */ n({
1349
- available: () => _t,
1350
- dgram: () => xt,
1351
- dns: () => yt,
1352
- fetch: () => vt,
1353
- fs: () => St,
1354
- net: () => bt
1355
- }), _t = () => !1, $ = (e) => (...t) => {
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
- }, vt = $("fetch"), yt = { lookup: $("dns.lookup") }, bt = {
1436
+ }, bt = $("fetch"), xt = { lookup: $("dns.lookup") }, St = {
1358
1437
  connect: $("net.connect"),
1359
1438
  createConnection: $("net.createConnection"),
1360
1439
  createServer: $("net.createServer")
1361
- }, xt = { createSocket: $("dgram.createSocket") }, St = {
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
- }, Ct = () => typeof document < "u" && h(), wt = async (e, t) => {
1367
- if (Le(e), t?.credentials === "include") {
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 S(e, t);
1448
+ return C(e, t);
1370
1449
  }
1371
- return Ct() ? S(e, {
1450
+ return Tt() ? C(e, {
1372
1451
  ...t,
1373
1452
  credentials: "omit"
1374
- }) : _t() ? vt(e, t) : M(e, t);
1375
- }, Tt = /* @__PURE__ */ n({
1376
- ATTACH_FRAME_EVENT_KEY: () => C,
1377
- assertAttachableFrameUrl: () => T,
1378
- assertFetchableUrl: () => x,
1379
- attachFrame: () => be,
1380
- attachFramePermission: () => ve,
1381
- available: () => Ct,
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: () => me,
1462
+ cookies: () => pe,
1384
1463
  createVideoElementHandle: () => e,
1385
- events: () => m,
1386
- extension: () => m,
1387
- fetch: () => S,
1388
- fetchCredentialedPermission: () => le,
1389
- fetchPermission: () => ce,
1390
- gotoPermission: () => ye,
1464
+ events: () => h,
1465
+ extension: () => h,
1466
+ fetch: () => C,
1467
+ fetchCredentialedPermission: () => ce,
1468
+ fetchPermission: () => se,
1469
+ gotoPermission: () => ve,
1391
1470
  handleRevivableModules: () => i,
1392
- isBlockedFetchUrl: () => b,
1393
- isBlockedFrameUrl: () => w,
1394
- isExtensionExposed: () => h,
1471
+ isBlockedFetchUrl: () => x,
1472
+ isBlockedFrameUrl: () => T,
1473
+ isExtensionExposed: () => g,
1395
1474
  isType: () => t,
1396
- modifyRequestHeadersPermission: () => he,
1397
- permissions: () => xe,
1475
+ modifyRequestHeadersPermission: () => me,
1476
+ permissions: () => be,
1398
1477
  promptInstall: () => Z,
1399
- readCookiePermission: () => pe,
1400
- removeRequestHeaderRule: () => _e,
1478
+ readCookiePermission: () => fe,
1479
+ removeRequestHeaderRule: () => ge,
1401
1480
  revive: () => o,
1402
- setMissingExtensionHandler: () => _,
1403
- setRequestHeaderRule: () => ge,
1481
+ setMissingExtensionHandler: () => v,
1482
+ setRequestHeaderRule: () => he,
1404
1483
  type: () => a,
1405
- waitForExtensionExposure: () => v
1406
- }), Et = /* @__PURE__ */ n({
1407
- ensureDirectoryPermission: () => At,
1408
- isLocalDirectorySupported: () => Dt,
1409
- pickLocalDirectory: () => Ot,
1410
- queryDirectoryPermission: () => kt
1411
- }), Dt = () => typeof window < "u" && "showDirectoryPicker" in window, Ot = async (e = {}) => {
1412
- if (!Dt()) return;
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
- }, kt = async (e, t = "readwrite") => {
1499
+ }, jt = async (e, t = "readwrite") => {
1421
1500
  let { queryPermission: n } = e;
1422
1501
  return await n?.call(e, { mode: t }) ?? "granted";
1423
- }, At = async (e, t = "readwrite") => {
1424
- if (await kt(e, t) === "granted") return !0;
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
- }, jt = "https://fkn.app", Mt = (e, t) => {
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 (!k?.contentWindow) throw Error("FKN @fkn/lib: relayWorker called before the FKN iframe was injected");
1430
- ne({
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: k.contentWindow
1511
+ emit: A.contentWindow
1433
1512
  }, e, {
1434
1513
  key: "fkn-api",
1435
- originA: t?.originA ?? jt,
1514
+ originA: t?.originA ?? Nt,
1436
1515
  originB: t?.originB ?? "*",
1437
1516
  unregisterSignal: t?.unregisterSignal
1438
1517
  });
1439
1518
  };
1440
1519
  //#endregion
1441
- export { C as ATTACH_FRAME_EVENT_KEY, T as assertAttachableFrameUrl, x as assertFetchableUrl, be as attachFrame, ve as attachFramePermission, l as box, mt as cloud, me as cookies, e as createVideoElementHandle, gt as desktop, Xe as dgram, ze as dns, Tt as extension, wt as fetch, le as fetchCredentialedPermission, ce as fetchPermission, Et as fs, ye as gotoPermission, i as handleRevivableModules, et as http, b as isBlockedFetchUrl, w as isBlockedFrameUrl, h as isExtensionExposed, t as isType, he as modifyRequestHeadersPermission, Ke as net, xe as permissions, Z as promptInstall, pe as readCookiePermission, Mt as relayWorker, _e as removeRequestHeaderRule, o as revive, M as serverProxyFetch, _ as setMissingExtensionHandler, ge as setRequestHeaderRule, a as type, v as waitForExtensionExposure };
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 };