@fkn/lib 0.9.18 → 0.9.20

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 (51) hide show
  1. package/{api-BPnL3UKE.d.ts → api-CyWF0RUj.d.ts} +39 -39
  2. package/cloud/fetch.d.ts +1 -1
  3. package/cloud/fs.cjs +1 -1
  4. package/cloud/fs.d.ts +2 -2
  5. package/cloud/fs.js +1 -1
  6. package/cloud/net.d.ts +1 -1
  7. package/cloud-C8jfO0iJ.cjs +1 -0
  8. package/{cloud-BoteCXb4.d.ts → cloud-CQVtRvcI.d.ts} +4 -4
  9. package/cloud-C_1Dt_tR.js +209 -0
  10. package/cloud.cjs +1 -1
  11. package/cloud.d.ts +4 -4
  12. package/cloud.js +1 -1
  13. package/dgram.d.ts +1 -1
  14. package/extension-B3nD2u7c.cjs +1 -0
  15. package/{extension-CN9oFZ0Q.d.ts → extension-CMPZjuaV.d.ts} +1 -1
  16. package/{extension-DVO10P3i.js → extension-jRuNpBs3.js} +42 -42
  17. package/extension.cjs +1 -1
  18. package/extension.d.ts +2 -2
  19. package/extension.js +3 -3
  20. package/fs/promises.cjs +1 -1
  21. package/fs/promises.js +1 -1
  22. package/fs-BW5mVMmu.js +340 -0
  23. package/{fs-D5LFP4_n.d.ts → fs-CUmugp10.d.ts} +1 -1
  24. package/fs-DJm0bhjg.cjs +1 -0
  25. package/fs.cjs +1 -1
  26. package/fs.js +1 -1
  27. package/http.d.ts +1 -1
  28. package/{index-DLaonjpx.d.ts → index-DY8WjklJ.d.ts} +82 -0
  29. package/index.cjs +1 -1
  30. package/index.d.ts +37 -6
  31. package/index.js +41 -30
  32. package/lib-DbiVHPXE.cjs +53 -0
  33. package/{lib-CegQxwDI.js → lib-k3lstfa4.js} +178 -131
  34. package/{net-5t6B2LnQ.d.ts → net-ByL9yG7X.d.ts} +1 -1
  35. package/net.d.ts +1 -1
  36. package/package.json +1 -1
  37. package/{packages-vX-1yfRK.d.ts → packages-Cn8S-Hkn.d.ts} +20 -20
  38. package/packages.d.ts +1 -1
  39. package/{proxy-DcALGZ-U.d.ts → proxy-RU8sbq68.d.ts} +1 -1
  40. package/storage-BW-jDLUL.cjs +1 -0
  41. package/storage-C8hBot2f.js +51 -0
  42. package/storage-qxXFLgTM.d.ts +44 -0
  43. package/cloud-BQoppUw4.cjs +0 -1
  44. package/cloud-C8CeqUht.js +0 -130
  45. package/extension-4BM5hKrn.cjs +0 -1
  46. package/fs-Br0pOpNu.js +0 -315
  47. package/fs-fyR-J9up.cjs +0 -1
  48. package/lib-ulyxIbTr.cjs +0 -53
  49. package/storage-B1stLxSc.js +0 -37
  50. package/storage-BNQlgGqF.cjs +0 -1
  51. package/storage-CXIXrIxB.d.ts +0 -38
package/extension.js CHANGED
@@ -1,3 +1,3 @@
1
- import { A as e, B as t, C as n, D as r, E as i, F as a, H as o, I as s, L as c, M as l, N as u, O as d, P as f, R as p, S as m, T as h, V as g, _, a as v, b as y, c as b, d as x, g as S, h as C, i as w, j as T, k as E, l as D, m as O, n as k, o as A, p as j, r as M, s as N, t as P, u as F, v as I, w as L, x as R, y as z, z as B } from "./lib-CegQxwDI.js";
2
- import { i as V, r as H } from "./extension-DVO10P3i.js";
3
- export { k as ATTACH_FRAME_EVENT_KEY, E as FORGEABLE_HEADERS, S as LOCATOR_DENIED, F as LOCATOR_ERROR, C as LOCATOR_UNSUPPORTED, N as assertAttachableFrameUrl, m as assertFetchableUrl, e as assertForgeableHeaders, b as assertLockdownApplicable, T as assertOneCookieIdentity, M as attachFrame, w as attachFramePermission, H as available, p as box, y as cookies, v as createFrame, B as createVideoElementHandle, u as events, u as extension, n as fetch, L as fetchCredentialedPermission, h as fetchLocalPermission, i as fetchPermission, A as gotoPermission, c as handleRevivableModules, l as hasForgedCookie, r as isBlockedFetchUrl, D as isBlockedFrameUrl, f as isExtensionExposed, d as isLocalNetworkUrl, x as isLocatorDenied, O as isLocatorUnsupported, j as isTerminalError, t as isType, _ as modifyRequestHeadersPermission, P as permissions, V as promptInstall, R as readCookiePermission, I as removeRequestHeaderRule, g as revive, a as setMissingExtensionHandler, z as setRequestHeaderRule, o as type, s as waitForExtensionExposure };
1
+ import { A as e, B as t, C as n, D as r, E as i, F as a, H as o, I as s, L as c, M as l, N as u, O as d, P as f, R as p, S as m, T as h, U as g, V as _, a as v, b as y, c as b, d as x, g as S, h as C, i as w, j as T, k as E, l as D, m as O, n as k, o as A, p as j, r as M, s as N, t as P, u as F, v as I, w as L, x as R, y as z, z as B } from "./lib-k3lstfa4.js";
2
+ import { i as V, r as H } from "./extension-jRuNpBs3.js";
3
+ export { k as ATTACH_FRAME_EVENT_KEY, e as FORGEABLE_HEADERS, C as LOCATOR_DENIED, S as LOCATOR_ERROR, O as LOCATOR_UNSUPPORTED, N as assertAttachableFrameUrl, n as assertFetchableUrl, T as assertForgeableHeaders, b as assertLockdownApplicable, l as assertOneCookieIdentity, M as attachFrame, w as attachFramePermission, H as available, B as box, R as cookies, v as createFrame, t as createVideoElementHandle, f as events, f as extension, L as fetch, h as fetchCredentialedPermission, i as fetchLocalPermission, r as fetchPermission, A as gotoPermission, p as handleRevivableModules, u as hasForgedCookie, d as isBlockedFetchUrl, D as isBlockedFrameUrl, a as isExtensionExposed, E as isLocalNetworkUrl, j as isLocatorDenied, F as isLocatorUnsupported, x as isTerminalError, _ as isType, I as modifyRequestHeadersPermission, P as permissions, V as promptInstall, m as readCookiePermission, z as removeRequestHeaderRule, o as revive, s as setMissingExtensionHandler, y as setRequestHeaderRule, g as type, c as waitForExtensionExposure };
package/fs/promises.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("../fs-fyR-J9up.cjs");var{readFile:t,writeFile:n,appendFile:r,unlink:i,rename:a,readdir:o,mkdir:s,rm:c,rmdir:l,stat:u,lstat:d,access:f}=e.v,p=e.v;exports.access=f,exports.appendFile=r,exports.default=p,exports.lstat=d,exports.mkdir=s,exports.readFile=t,exports.readdir=o,exports.rename=a,exports.rm=c,exports.rmdir=l,exports.stat=u,exports.unlink=i,exports.writeFile=n;
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("../fs-DJm0bhjg.cjs");var{readFile:t,writeFile:n,appendFile:r,unlink:i,rename:a,readdir:o,mkdir:s,rm:c,rmdir:l,stat:u,lstat:d,access:f}=e.v,p=e.v;exports.access=f,exports.appendFile=r,exports.default=p,exports.lstat=d,exports.mkdir=s,exports.readFile=t,exports.readdir=o,exports.rename=a,exports.rm=c,exports.rmdir=l,exports.stat=u,exports.unlink=i,exports.writeFile=n;
package/fs/promises.js CHANGED
@@ -1,4 +1,4 @@
1
- import { v as e } from "../fs-Br0pOpNu.js";
1
+ import { v as e } from "../fs-BW5mVMmu.js";
2
2
  //#region src/lib/fs/promises.ts
3
3
  var { readFile: t, writeFile: n, appendFile: r, unlink: i, rename: a, readdir: o, mkdir: s, rm: c, rmdir: l, stat: u, lstat: d, access: f } = e, p = e;
4
4
  //#endregion
package/fs-BW5mVMmu.js ADDED
@@ -0,0 +1,340 @@
1
+ import { t as e } from "./rolldown-runtime-Dy4uBu1J.js";
2
+ import { t } from "./node-fs-DKfokOlh.js";
3
+ import { c as n, f as r, l as i, o as a, r as o } from "./storage-C8hBot2f.js";
4
+ import { a as s, i as c, n as l, o as u, t as d } from "./opfs-BibrNGF0.js";
5
+ //#region src/lib/fs/hybrid.ts
6
+ var ee = /* @__PURE__ */ e({
7
+ adopt: () => V,
8
+ adoptable: () => H,
9
+ available: () => te,
10
+ list: () => oe,
11
+ onConflict: () => z,
12
+ pending: () => O,
13
+ pendingDeletes: () => k,
14
+ pull: () => ue,
15
+ readFile: () => se,
16
+ remove: () => le,
17
+ replicating: () => re,
18
+ writeFile: () => ce
19
+ }), f, p = async () => await (f ??= d().catch(() => !1)) ? !0 : (f = void 0, !1), m = () => o().catch(() => "unknown"), h = async () => await m() === "connected", te = async () => await p() || await h(), g = "fkn:fs:pending", _ = "fkn:fs:pending-delete", v = "fkn:fs:adopt-declined", y = !0, b = /* @__PURE__ */ new Map(), x = (e) => {
20
+ try {
21
+ let t = localStorage.getItem(e);
22
+ if (!t) return {};
23
+ let n = JSON.parse(t);
24
+ return Array.isArray(n) ? Object.fromEntries(n.filter((e) => typeof e == "string").map((e) => [e, null])) : n && typeof n == "object" ? n : {};
25
+ } catch {
26
+ return {};
27
+ }
28
+ }, S = (e, t) => {
29
+ try {
30
+ Object.keys(t).length ? localStorage.setItem(e, JSON.stringify(t)) : localStorage.removeItem(e);
31
+ } catch {}
32
+ }, C = () => x(g), w = (e, t) => {
33
+ let n = C();
34
+ e in n || (n[e] = t === void 0 ? b.get(e) ?? null : t, S(g, n));
35
+ }, T = (e) => {
36
+ let t = C();
37
+ e in t && (delete t[e], S(g, t), j() || (N = M));
38
+ }, E = () => x(_), ne = (e) => {
39
+ let t = E();
40
+ e in t || (t[e] = b.get(e) ?? null, S(_, t));
41
+ }, D = (e) => {
42
+ let t = E();
43
+ e in t && (delete t[e], S(_, t), j() || (N = M));
44
+ }, O = () => Object.keys(C()), k = () => Object.keys(E()), re = () => y, A = null, j = () => Object.keys(C()).length > 0 || Object.keys(E()).length > 0, M = 6e4, ie = 10 * 6e4, N = M, P = null, F = () => {
45
+ P || typeof window > "u" || !j() || (P = setTimeout(() => {
46
+ P = null, I();
47
+ }, N), N = Math.min(N * 2, ie));
48
+ }, I = () => {
49
+ A || !j() || (A = B(!1).then((e) => {
50
+ if (!j()) {
51
+ N = M;
52
+ return;
53
+ }
54
+ e.failed.length && F();
55
+ }).catch(() => {
56
+ F();
57
+ }).finally(() => {
58
+ A = null;
59
+ }));
60
+ }, ae = null, L = () => ae ??= import("./api-DQ-V4Lls.js").then((e) => e.n).then((e) => e.apiPromise), oe = async () => {
61
+ G();
62
+ let e = await m(), t = e === "connected", [n, r] = await Promise.all([p().then((e) => e ? l() : []).catch(() => []), t ? a().then((e) => ({
63
+ ok: !0,
64
+ entries: e
65
+ })).catch(() => ({
66
+ ok: !1,
67
+ entries: []
68
+ })) : Promise.resolve({
69
+ ok: e === "disconnected",
70
+ entries: []
71
+ })]);
72
+ e !== "unknown" && (y = r.ok), r.ok && e !== "unknown" && (b = new Map(r.entries.map((e) => [e.path, e.updatedAt])));
73
+ let i = /* @__PURE__ */ new Map(), o = (e) => {
74
+ let t = Date.parse(e.updatedAt ?? "");
75
+ return Number.isFinite(t) ? t : 0;
76
+ }, s = (e) => {
77
+ let t = i.get(e.path);
78
+ (!t || o(e) >= o(t)) && i.set(e.path, e);
79
+ };
80
+ for (let e of n) s(e);
81
+ for (let e of r.entries) s(e);
82
+ return r.ok && t && (he(n, r.entries).catch(() => {}), j() ? I() : W({
83
+ local: n,
84
+ remote: r.entries
85
+ }).catch(() => {})), [...i.values()];
86
+ }, se = async (e) => {
87
+ if (await p()) try {
88
+ return await c(e);
89
+ } catch (e) {
90
+ if (e?.name !== "NotFoundError") throw e;
91
+ }
92
+ let t = await n(e);
93
+ return await p() && u(e, t).catch(() => {}), t;
94
+ }, ce = async (e, t, n) => {
95
+ let i = t instanceof Blob ? t : new Blob([t], n?.contentType ? { type: n.contentType } : void 0);
96
+ if (await p()) {
97
+ await u(e, i, n), G();
98
+ let t = b.get(e) ?? null, a = await m();
99
+ if (a === "disconnected") return;
100
+ if (a === "unknown" || !y) {
101
+ w(e, t), F();
102
+ return;
103
+ }
104
+ r(e, i, n).then(() => T(e)).catch((n) => {
105
+ w(e, t), F(), console.warn("fs: cloud replicate failed, queued for adopt()", n);
106
+ });
107
+ return;
108
+ }
109
+ let a = await m();
110
+ if (a === "connected") return r(e, i, n);
111
+ throw Error(a === "unknown" ? "fs: cloud unreachable" : "fs: no storage backend available");
112
+ }, le = async (e) => {
113
+ G();
114
+ let t = [];
115
+ await p() && t.push(s(e).catch(() => {}));
116
+ let n = await m();
117
+ if (n === "connected" ? t.push(i(e).then(() => D(e)).catch((t) => {
118
+ ne(e), F(), console.warn("fs: cloud delete failed, queued for retry", t);
119
+ })) : n === "unknown" && t.length && b.has(e) && (ne(e), F()), !t.length) throw Error(n === "unknown" ? "fs: cloud unreachable" : "fs: no storage backend available");
120
+ T(e), await Promise.all(t);
121
+ }, ue = async (e) => {
122
+ let t = await n(e);
123
+ return await p() && await u(e, t), t;
124
+ }, R = null, z = (e) => (R = e, () => {
125
+ R === e && (R = null);
126
+ }), de = async (e) => (await L()).cloud.fs.promptConflict({
127
+ path: e.path,
128
+ local: e.local,
129
+ cloud: e.cloud
130
+ }).catch(() => null), fe = async (e) => {
131
+ if (R) try {
132
+ return await R(e);
133
+ } catch {
134
+ return null;
135
+ }
136
+ return de(e);
137
+ }, B = async (e) => {
138
+ let t = {
139
+ uploaded: [],
140
+ kept: [],
141
+ resolved: [],
142
+ unresolved: [],
143
+ deleted: [],
144
+ failed: []
145
+ }, o = await m();
146
+ if (o === "unknown") throw Error("fs: cloud unreachable");
147
+ if (o !== "connected") throw Error("fs: this needs a signed-in account");
148
+ let s = await p(), [d, ee] = await Promise.all([s ? l() : Promise.resolve([]), a()]), f = new Map(ee.map((e) => [e.path, e])), h = C();
149
+ if (s) for (let e of Object.keys(h)) d.some((t) => t.path === e) || T(e);
150
+ for (let [e, n] of Object.entries(E())) {
151
+ let r = f.get(e);
152
+ if (!r) {
153
+ D(e);
154
+ continue;
155
+ }
156
+ if (d.some((t) => t.path === e)) {
157
+ D(e);
158
+ continue;
159
+ }
160
+ if (r.updatedAt !== n) {
161
+ D(e);
162
+ continue;
163
+ }
164
+ try {
165
+ await i(e), D(e), t.deleted.push(e);
166
+ } catch (n) {
167
+ t.failed.push({
168
+ path: e,
169
+ error: n instanceof Error ? n.message : String(n)
170
+ });
171
+ }
172
+ }
173
+ for (let i of d) {
174
+ let a = f.get(i.path), o = i.path in h;
175
+ if (!o && (a || !e)) {
176
+ a && t.kept.push(i.path);
177
+ continue;
178
+ }
179
+ if (o && a && a.updatedAt !== h[i.path]) {
180
+ let e = await fe({
181
+ path: i.path,
182
+ local: {
183
+ size: i.size,
184
+ updatedAt: i.updatedAt
185
+ },
186
+ cloud: {
187
+ size: a.size,
188
+ updatedAt: a.updatedAt
189
+ },
190
+ readLocal: () => c(i.path),
191
+ readCloud: () => n(i.path)
192
+ });
193
+ if (!e) {
194
+ t.unresolved.push(i.path);
195
+ continue;
196
+ }
197
+ try {
198
+ if (e === "cloud") await u(i.path, await n(i.path));
199
+ else {
200
+ let t = e === "local" ? await c(i.path) : e.merged;
201
+ await r(i.path, t, i.contentType ? { contentType: i.contentType } : void 0), e !== "local" && await u(i.path, t);
202
+ }
203
+ T(i.path), t.resolved.push({
204
+ path: i.path,
205
+ choice: e === "local" || e === "cloud" ? e : "merged"
206
+ });
207
+ } catch (e) {
208
+ if (e?.code === "FKN_E2E_LOCKED") throw e;
209
+ t.failed.push({
210
+ path: i.path,
211
+ error: e instanceof Error ? e.message : String(e)
212
+ });
213
+ }
214
+ continue;
215
+ }
216
+ try {
217
+ let e = await c(i.path);
218
+ await r(i.path, e, i.contentType ? { contentType: i.contentType } : void 0), T(i.path), t.uploaded.push(i.path);
219
+ } catch (e) {
220
+ if (w(i.path), e?.code === "FKN_E2E_LOCKED") throw e;
221
+ t.failed.push({
222
+ path: i.path,
223
+ error: e instanceof Error ? e.message : String(e)
224
+ });
225
+ }
226
+ }
227
+ return t;
228
+ }, V = async () => {
229
+ for (; A;) await A;
230
+ let e = B(!0);
231
+ A = e.then(() => {}, () => {});
232
+ try {
233
+ return await e;
234
+ } finally {
235
+ A = null;
236
+ }
237
+ }, H = async () => {
238
+ if (!await h() || !await p()) return {
239
+ paths: [],
240
+ bytes: 0
241
+ };
242
+ let [e, t] = await Promise.all([l(), a()]), n = new Set(t.map((e) => e.path)), r = e.filter((e) => !n.has(e.path));
243
+ return {
244
+ paths: r.map((e) => e.path),
245
+ bytes: r.reduce((e, t) => e + t.size, 0)
246
+ };
247
+ }, pe = () => new Set(Object.keys(x(v))), me = (e) => {
248
+ let t = x(v);
249
+ for (let n of e) t[n] = null;
250
+ S(v, t);
251
+ }, U = null, W = (e) => U || (U = (async () => {
252
+ if (!await h()) return;
253
+ let t = e ?? (await p() ? {
254
+ local: await l(),
255
+ remote: await a()
256
+ } : null);
257
+ if (!t) return;
258
+ let n = new Set(t.remote.map((e) => e.path)), r = pe(), i = t.local.filter((e) => !n.has(e.path) && !r.has(e.path));
259
+ if (!i.length) return;
260
+ let o = await L(), s = i.reduce((e, t) => e + t.size, 0);
261
+ if (!await o.cloud.fs.promptAdopt({
262
+ files: i.length,
263
+ bytes: s
264
+ }).catch(() => !1)) {
265
+ me(i.map((e) => e.path));
266
+ return;
267
+ }
268
+ await V();
269
+ })().catch(() => {}).finally(() => {
270
+ U = null;
271
+ }), U), he = async (e, t) => {
272
+ let n = new Set(t.map((e) => e.path)), r = e.filter((e) => !n.has(e.path)), i = await L(), a = async () => {
273
+ await V().catch(() => {});
274
+ let e = await H().catch(() => ({
275
+ paths: [],
276
+ bytes: 0
277
+ }));
278
+ await i.cloud.fs.setAdoptSource({
279
+ files: e.paths.length,
280
+ bytes: e.bytes
281
+ }, a).catch(() => {});
282
+ };
283
+ await i.cloud.fs.setAdoptSource({
284
+ files: r.length,
285
+ bytes: r.reduce((e, t) => e + t.size, 0)
286
+ }, a);
287
+ }, ge = !1, G = () => {
288
+ ge || typeof window > "u" || (ge = !0, window.addEventListener("online", () => {
289
+ I();
290
+ }), import("./account.js").then((e) => e.onChange(() => {
291
+ W().catch(() => {}), I();
292
+ })).catch(() => {}));
293
+ }, _e = /* @__PURE__ */ e({
294
+ adopt: () => J,
295
+ adoptable: () => Y,
296
+ appendFile: () => Pe,
297
+ appendFileSync: () => Se,
298
+ available: () => ye,
299
+ default: () => Ge,
300
+ exists: () => Ve,
301
+ existsSync: () => Ce,
302
+ flush: () => Ue,
303
+ lstatSync: () => Te,
304
+ mkdir: () => Le,
305
+ mkdirSync: () => De,
306
+ mount: () => He,
307
+ onConflict: () => $,
308
+ pending: () => X,
309
+ pendingDeletes: () => Z,
310
+ promises: () => K,
311
+ pull: () => q,
312
+ readFile: () => Me,
313
+ readFileSync: () => be,
314
+ readdir: () => Ie,
315
+ readdirSync: () => Ee,
316
+ remount: () => We,
317
+ rename: () => Be,
318
+ renameSync: () => je,
319
+ replicating: () => Q,
320
+ rm: () => Re,
321
+ rmSync: () => Oe,
322
+ rmdirSync: () => ke,
323
+ stat: () => Fe,
324
+ statSync: () => we,
325
+ unlink: () => ze,
326
+ unlinkSync: () => Ae,
327
+ writeFile: () => Ne,
328
+ writeFileSync: () => xe
329
+ }), ve = t(ee, { memfs: !0 }), { available: ye, readFileSync: be, writeFileSync: xe, appendFileSync: Se, existsSync: Ce, statSync: we, lstatSync: Te, readdirSync: Ee, mkdirSync: De, rmSync: Oe, rmdirSync: ke, unlinkSync: Ae, renameSync: je, readFile: Me, writeFile: Ne, appendFile: Pe, stat: Fe, readdir: Ie, mkdir: Le, rm: Re, unlink: ze, rename: Be, exists: Ve, promises: K, mount: He, flush: Ue, remount: We } = ve, q = ue, J = V, Y = H, X = O, Z = k, Q = re, $ = z, Ge = {
330
+ ...ve,
331
+ pull: q,
332
+ adopt: J,
333
+ adoptable: Y,
334
+ pending: X,
335
+ pendingDeletes: Z,
336
+ replicating: Q,
337
+ onConflict: $
338
+ };
339
+ //#endregion
340
+ export { ke as A, Ee as C, Q as D, je as E, Ne as F, xe as I, we as M, ze as N, Re as O, Ae as P, Ie as S, Be as T, Z as _, ye as a, Me as b, Ue as c, Te as d, Le as f, X as g, $ as h, Se as i, Fe as j, Oe as k, Ge as l, He as m, Y as n, Ve as o, De as p, Pe as r, Ce as s, J as t, _e as u, K as v, We as w, be as x, q as y };
@@ -1,4 +1,4 @@
1
- import { n as STORAGE_NOT_FOUND } from "./storage-CXIXrIxB.js";
1
+ import { n as STORAGE_NOT_FOUND } from "./storage-qxXFLgTM.js";
2
2
  import { a as Stats, i as ReadOptions, n as Callback, o as WriteData, r as MakeOptions, s as WriteOptions } from "./index-CJ0vHTcS.js";
3
3
 
4
4
  //#region src/lib/storage.d.ts
@@ -0,0 +1 @@
1
+ const e=require("./rolldown-runtime-BIInC43l.cjs"),t=require("./node-fs-BMR2yCEt.cjs"),n=require("./storage-BW-jDLUL.cjs"),r=require("./opfs-CXMESVLc.cjs");var i=e.t({adopt:()=>F,adoptable:()=>I,available:()=>l,list:()=>re,onConflict:()=>ce,pending:()=>C,pendingDeletes:()=>w,pull:()=>se,readFile:()=>ie,remove:()=>oe,replicating:()=>ee,writeFile:()=>ae}),a,o=async()=>await(a??=r.t().catch(()=>!1))?!0:(a=void 0,!1),s=()=>n.r().catch(()=>`unknown`),c=async()=>await s()===`connected`,l=async()=>await o()||await c(),u=`fkn:fs:pending`,d=`fkn:fs:pending-delete`,f=`fkn:fs:adopt-declined`,p=!0,m=new Map,h=e=>{try{let t=localStorage.getItem(e);if(!t)return{};let n=JSON.parse(t);return Array.isArray(n)?Object.fromEntries(n.filter(e=>typeof e==`string`).map(e=>[e,null])):n&&typeof n==`object`?n:{}}catch{return{}}},g=(e,t)=>{try{Object.keys(t).length?localStorage.setItem(e,JSON.stringify(t)):localStorage.removeItem(e)}catch{}},_=()=>h(u),v=(e,t)=>{let n=_();e in n||(n[e]=t===void 0?m.get(e)??null:t,g(u,n))},y=e=>{let t=_();e in t&&(delete t[e],g(u,t),E()||(O=D))},b=()=>h(d),x=e=>{let t=b();e in t||(t[e]=m.get(e)??null,g(d,t))},S=e=>{let t=b();e in t&&(delete t[e],g(d,t),E()||(O=D))},C=()=>Object.keys(_()),w=()=>Object.keys(b()),ee=()=>p,T=null,E=()=>Object.keys(_()).length>0||Object.keys(b()).length>0,D=6e4,te=10*6e4,O=D,k=null,A=()=>{k||typeof window>`u`||!E()||(k=setTimeout(()=>{k=null,j()},O),O=Math.min(O*2,te))},j=()=>{T||!E()||(T=P(!1).then(e=>{if(!E()){O=D;return}e.failed.length&&A()}).catch(()=>{A()}).finally(()=>{T=null}))},ne=null,M=()=>ne??=Promise.resolve().then(()=>require("./api-kHMHDGar.cjs")).then(e=>e.n).then(e=>e.apiPromise),re=async()=>{B();let e=await s(),t=e===`connected`,[i,a]=await Promise.all([o().then(e=>e?r.n():[]).catch(()=>[]),t?n.o().then(e=>({ok:!0,entries:e})).catch(()=>({ok:!1,entries:[]})):Promise.resolve({ok:e===`disconnected`,entries:[]})]);e!==`unknown`&&(p=a.ok),a.ok&&e!==`unknown`&&(m=new Map(a.entries.map(e=>[e.path,e.updatedAt])));let c=new Map,l=e=>{let t=Date.parse(e.updatedAt??``);return Number.isFinite(t)?t:0},u=e=>{let t=c.get(e.path);(!t||l(e)>=l(t))&&c.set(e.path,e)};for(let e of i)u(e);for(let e of a.entries)u(e);return a.ok&&t&&(pe(i,a.entries).catch(()=>{}),E()?j():R({local:i,remote:a.entries}).catch(()=>{})),[...c.values()]},ie=async e=>{if(await o())try{return await r.i(e)}catch(e){if(e?.name!==`NotFoundError`)throw e}let t=await n.c(e);return await o()&&r.o(e,t).catch(()=>{}),t},ae=async(e,t,i)=>{let a=t instanceof Blob?t:new Blob([t],i?.contentType?{type:i.contentType}:void 0);if(await o()){await r.o(e,a,i),B();let t=m.get(e)??null,o=await s();if(o===`disconnected`)return;if(o===`unknown`||!p){v(e,t),A();return}n.f(e,a,i).then(()=>y(e)).catch(n=>{v(e,t),A(),console.warn(`fs: cloud replicate failed, queued for adopt()`,n)});return}let c=await s();if(c===`connected`)return n.f(e,a,i);throw Error(c===`unknown`?`fs: cloud unreachable`:`fs: no storage backend available`)},oe=async e=>{B();let t=[];await o()&&t.push(r.a(e).catch(()=>{}));let i=await s();if(i===`connected`?t.push(n.l(e).then(()=>S(e)).catch(t=>{x(e),A(),console.warn(`fs: cloud delete failed, queued for retry`,t)})):i===`unknown`&&t.length&&m.has(e)&&(x(e),A()),!t.length)throw Error(i===`unknown`?`fs: cloud unreachable`:`fs: no storage backend available`);y(e),await Promise.all(t)},se=async e=>{let t=await n.c(e);return await o()&&await r.o(e,t),t},N=null,ce=e=>(N=e,()=>{N===e&&(N=null)}),le=async e=>(await M()).cloud.fs.promptConflict({path:e.path,local:e.local,cloud:e.cloud}).catch(()=>null),ue=async e=>{if(N)try{return await N(e)}catch{return null}return le(e)},P=async e=>{let t={uploaded:[],kept:[],resolved:[],unresolved:[],deleted:[],failed:[]},i=await s();if(i===`unknown`)throw Error(`fs: cloud unreachable`);if(i!==`connected`)throw Error(`fs: this needs a signed-in account`);let a=await o(),[c,l]=await Promise.all([a?r.n():Promise.resolve([]),n.o()]),u=new Map(l.map(e=>[e.path,e])),d=_();if(a)for(let e of Object.keys(d))c.some(t=>t.path===e)||y(e);for(let[e,r]of Object.entries(b())){let i=u.get(e);if(!i){S(e);continue}if(c.some(t=>t.path===e)){S(e);continue}if(i.updatedAt!==r){S(e);continue}try{await n.l(e),S(e),t.deleted.push(e)}catch(n){t.failed.push({path:e,error:n instanceof Error?n.message:String(n)})}}for(let i of c){let a=u.get(i.path),o=i.path in d;if(!o&&(a||!e)){a&&t.kept.push(i.path);continue}if(o&&a&&a.updatedAt!==d[i.path]){let e=await ue({path:i.path,local:{size:i.size,updatedAt:i.updatedAt},cloud:{size:a.size,updatedAt:a.updatedAt},readLocal:()=>r.i(i.path),readCloud:()=>n.c(i.path)});if(!e){t.unresolved.push(i.path);continue}try{if(e===`cloud`)await r.o(i.path,await n.c(i.path));else{let t=e===`local`?await r.i(i.path):e.merged;await n.f(i.path,t,i.contentType?{contentType:i.contentType}:void 0),e!==`local`&&await r.o(i.path,t)}y(i.path),t.resolved.push({path:i.path,choice:e===`local`||e===`cloud`?e:`merged`})}catch(e){if(e?.code===`FKN_E2E_LOCKED`)throw e;t.failed.push({path:i.path,error:e instanceof Error?e.message:String(e)})}continue}try{let e=await r.i(i.path);await n.f(i.path,e,i.contentType?{contentType:i.contentType}:void 0),y(i.path),t.uploaded.push(i.path)}catch(e){if(v(i.path),e?.code===`FKN_E2E_LOCKED`)throw e;t.failed.push({path:i.path,error:e instanceof Error?e.message:String(e)})}}return t},F=async()=>{for(;T;)await T;let e=P(!0);T=e.then(()=>{},()=>{});try{return await e}finally{T=null}},I=async()=>{if(!await c()||!await o())return{paths:[],bytes:0};let[e,t]=await Promise.all([r.n(),n.o()]),i=new Set(t.map(e=>e.path)),a=e.filter(e=>!i.has(e.path));return{paths:a.map(e=>e.path),bytes:a.reduce((e,t)=>e+t.size,0)}},de=()=>new Set(Object.keys(h(f))),fe=e=>{let t=h(f);for(let n of e)t[n]=null;g(f,t)},L=null,R=e=>L||(L=(async()=>{if(!await c())return;let t=e??(await o()?{local:await r.n(),remote:await n.o()}:null);if(!t)return;let i=new Set(t.remote.map(e=>e.path)),a=de(),s=t.local.filter(e=>!i.has(e.path)&&!a.has(e.path));if(!s.length)return;let l=await M(),u=s.reduce((e,t)=>e+t.size,0);if(!await l.cloud.fs.promptAdopt({files:s.length,bytes:u}).catch(()=>!1)){fe(s.map(e=>e.path));return}await F()})().catch(()=>{}).finally(()=>{L=null}),L),pe=async(e,t)=>{let n=new Set(t.map(e=>e.path)),r=e.filter(e=>!n.has(e.path)),i=await M(),a=async()=>{await F().catch(()=>{});let e=await I().catch(()=>({paths:[],bytes:0}));await i.cloud.fs.setAdoptSource({files:e.paths.length,bytes:e.bytes},a).catch(()=>{})};await i.cloud.fs.setAdoptSource({files:r.length,bytes:r.reduce((e,t)=>e+t.size,0)},a)},z=!1,B=()=>{z||typeof window>`u`||(z=!0,window.addEventListener(`online`,()=>{j()}),Promise.resolve().then(()=>require("./account.cjs")).then(e=>e.onChange(()=>{R().catch(()=>{}),j()})).catch(()=>{}))},me=e.t({adopt:()=>J,adoptable:()=>Y,appendFile:()=>Ee,appendFileSync:()=>G,available:()=>H,default:()=>Le,exists:()=>Ne,existsSync:()=>he,flush:()=>Fe,lstatSync:()=>_e,mkdir:()=>ke,mkdirSync:()=>ye,mount:()=>K,onConflict:()=>$,pending:()=>X,pendingDeletes:()=>Z,promises:()=>Pe,pull:()=>q,readFile:()=>we,readFileSync:()=>U,readdir:()=>Oe,readdirSync:()=>ve,remount:()=>Ie,rename:()=>Me,renameSync:()=>Ce,replicating:()=>Q,rm:()=>Ae,rmSync:()=>be,rmdirSync:()=>xe,stat:()=>De,statSync:()=>ge,unlink:()=>je,unlinkSync:()=>Se,writeFile:()=>Te,writeFileSync:()=>W}),V=t.t(i,{memfs:!0}),{available:H,readFileSync:U,writeFileSync:W,appendFileSync:G,existsSync:he,statSync:ge,lstatSync:_e,readdirSync:ve,mkdirSync:ye,rmSync:be,rmdirSync:xe,unlinkSync:Se,renameSync:Ce,readFile:we,writeFile:Te,appendFile:Ee,stat:De,readdir:Oe,mkdir:ke,rm:Ae,unlink:je,rename:Me,exists:Ne,promises:Pe,mount:K,flush:Fe,remount:Ie}=V,q=se,J=F,Y=I,X=C,Z=w,Q=ee,$=ce,Le={...V,pull:q,adopt:J,adoptable:Y,pending:X,pendingDeletes:Z,replicating:Q,onConflict:$};Object.defineProperty(exports,"A",{enumerable:!0,get:function(){return xe}}),Object.defineProperty(exports,"C",{enumerable:!0,get:function(){return ve}}),Object.defineProperty(exports,"D",{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,"E",{enumerable:!0,get:function(){return Ce}}),Object.defineProperty(exports,"F",{enumerable:!0,get:function(){return Te}}),Object.defineProperty(exports,"I",{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,"M",{enumerable:!0,get:function(){return ge}}),Object.defineProperty(exports,"N",{enumerable:!0,get:function(){return je}}),Object.defineProperty(exports,"O",{enumerable:!0,get:function(){return Ae}}),Object.defineProperty(exports,"P",{enumerable:!0,get:function(){return Se}}),Object.defineProperty(exports,"S",{enumerable:!0,get:function(){return Oe}}),Object.defineProperty(exports,"T",{enumerable:!0,get:function(){return Me}}),Object.defineProperty(exports,"_",{enumerable:!0,get:function(){return Z}}),Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,"b",{enumerable:!0,get:function(){return we}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return Fe}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return _e}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return ke}}),Object.defineProperty(exports,"g",{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,"h",{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return G}}),Object.defineProperty(exports,"j",{enumerable:!0,get:function(){return De}}),Object.defineProperty(exports,"k",{enumerable:!0,get:function(){return be}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return Le}}),Object.defineProperty(exports,"m",{enumerable:!0,get:function(){return K}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return Y}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return Ne}}),Object.defineProperty(exports,"p",{enumerable:!0,get:function(){return ye}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return Ee}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return he}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return J}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return me}}),Object.defineProperty(exports,"v",{enumerable:!0,get:function(){return Pe}}),Object.defineProperty(exports,"w",{enumerable:!0,get:function(){return Ie}}),Object.defineProperty(exports,"x",{enumerable:!0,get:function(){return U}}),Object.defineProperty(exports,"y",{enumerable:!0,get:function(){return q}});
package/fs.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("./fs-fyR-J9up.cjs");exports.adopt=e.t,exports.adoptable=e.n,exports.appendFile=e.r,exports.appendFileSync=e.i,exports.available=e.a,exports.default=e.l,exports.exists=e.o,exports.existsSync=e.s,exports.flush=e.c,exports.lstatSync=e.d,exports.mkdir=e.f,exports.mkdirSync=e.p,exports.mount=e.m,exports.onConflict=e.h,exports.pending=e.g,exports.pendingDeletes=e._,exports.promises=e.v,exports.pull=e.y,exports.readFile=e.b,exports.readFileSync=e.x,exports.readdir=e.S,exports.readdirSync=e.C,exports.remount=e.w,exports.rename=e.T,exports.renameSync=e.E,exports.replicating=e.D,exports.rm=e.O,exports.rmSync=e.k,exports.rmdirSync=e.A,exports.stat=e.j,exports.statSync=e.M,exports.unlink=e.N,exports.unlinkSync=e.P,exports.writeFile=e.F,exports.writeFileSync=e.I;
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("./fs-DJm0bhjg.cjs");exports.adopt=e.t,exports.adoptable=e.n,exports.appendFile=e.r,exports.appendFileSync=e.i,exports.available=e.a,exports.default=e.l,exports.exists=e.o,exports.existsSync=e.s,exports.flush=e.c,exports.lstatSync=e.d,exports.mkdir=e.f,exports.mkdirSync=e.p,exports.mount=e.m,exports.onConflict=e.h,exports.pending=e.g,exports.pendingDeletes=e._,exports.promises=e.v,exports.pull=e.y,exports.readFile=e.b,exports.readFileSync=e.x,exports.readdir=e.S,exports.readdirSync=e.C,exports.remount=e.w,exports.rename=e.T,exports.renameSync=e.E,exports.replicating=e.D,exports.rm=e.O,exports.rmSync=e.k,exports.rmdirSync=e.A,exports.stat=e.j,exports.statSync=e.M,exports.unlink=e.N,exports.unlinkSync=e.P,exports.writeFile=e.F,exports.writeFileSync=e.I;
package/fs.js CHANGED
@@ -1,2 +1,2 @@
1
- import { A as e, C as t, D as n, E as r, F as i, I as a, M as o, N as s, O as c, P as l, S as u, T as d, _ as f, a as p, b as m, c as h, d as g, f as _, g as v, h as y, i as b, j as x, k as S, l as C, m as w, n as T, o as E, p as D, r as O, s as k, t as A, v as j, w as M, x as N, y as P } from "./fs-Br0pOpNu.js";
1
+ import { A as e, C as t, D as n, E as r, F as i, I as a, M as o, N as s, O as c, P as l, S as u, T as d, _ as f, a as p, b as m, c as h, d as g, f as _, g as v, h as y, i as b, j as x, k as S, l as C, m as w, n as T, o as E, p as D, r as O, s as k, t as A, v as j, w as M, x as N, y as P } from "./fs-BW5mVMmu.js";
2
2
  export { A as adopt, T as adoptable, O as appendFile, b as appendFileSync, p as available, C as default, E as exists, k as existsSync, h as flush, g as lstatSync, _ as mkdir, D as mkdirSync, w as mount, y as onConflict, v as pending, f as pendingDeletes, j as promises, P as pull, m as readFile, N as readFileSync, u as readdir, t as readdirSync, M as remount, d as rename, r as renameSync, n as replicating, c as rm, S as rmSync, e as rmdirSync, x as stat, o as statSync, s as unlink, l as unlinkSync, i as writeFile, a as writeFileSync };
package/http.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { n as Socket, t as Server$1 } from "./net-5t6B2LnQ.js";
1
+ import { n as Socket, t as Server$1 } from "./net-ByL9yG7X.js";
2
2
  import { Buffer } from "buffer";
3
3
  import { Stream } from "stream";
4
4
  import { IncomingHttpHeaders, OutgoingHttpHeaders, RequestOptions } from "http";
@@ -118,6 +118,21 @@ type SelectorModule = {
118
118
  };
119
119
  type OperationModule = {
120
120
  resolve: (context: LocatorContext, ...args: any[]) => unknown;
121
+ /**
122
+ * Pins the operation to one chain kind, opting it out of the executor's cross-kind fallback.
123
+ *
124
+ * That fallback is deliberate and load bearing in the frame-to-element direction:
125
+ * `frameLocator('#f').click()` resolves to kind `frame`, the frame kind has no `click`, and the
126
+ * element `click` then runs against the child's `documentElement`. It is also bidirectional, so
127
+ * without this an operation registered only on the `frame` kind is silently reachable from an
128
+ * element chain too.
129
+ *
130
+ * For most operations that is a convenience. For one whose whole meaning is WHICH REALM it runs
131
+ * in, it is a silent identity confusion: `locator('#x').fetch()` would run in the document that
132
+ * CONTAINS `#x` while reading as though it ran in `#x`. Pin those, so the wrong spelling is
133
+ * refused by name instead of quietly doing something else.
134
+ */
135
+ kind?: ChainKind;
121
136
  };
122
137
  type KindModules = {
123
138
  selectors: Record<string, SelectorModule>;
@@ -160,6 +175,46 @@ type AddStyleTagOptions$1 = OperationOptions & {
160
175
  noSanitize?: boolean;
161
176
  };
162
177
  //#endregion
178
+ //#region node_modules/@mfkn/frame-locator/lib/fetch.d.ts
179
+ /**
180
+ * A request issued from the realm the chain LANDS in, so the browser supplies that document's own
181
+ * identity: its cookie jar (partitioned, on the extension path), its `Origin`, its `Referer` and its
182
+ * `Sec-Fetch-*`. Nothing here synthesizes any of those, which is the point: a synthesized initiator is
183
+ * exactly the degraded shape a CSRF-protected private API refuses.
184
+ *
185
+ * This module is the MECHANISM only. It carries no allowlist and no consent, because frame-locator has
186
+ * no idea what an app is. The consumer gates it: in the FKN extension that is `LOCATOR_PERMISSIONS`,
187
+ * whose `satisfies Record<LocatorOperation, OperationPermission>` makes registering this operation
188
+ * without a permission a type error, plus an authoritative origin check in the content-script resolver.
189
+ * Do not add a "convenience" path that skips the consumer's gate.
190
+ */
191
+ type FrameFetchInit = OperationOptions & {
192
+ method?: string;
193
+ headers?: Record<string, string> | [string, string][];
194
+ body?: string | ArrayBuffer | null;
195
+ redirect?: RequestRedirect;
196
+ /**
197
+ * `include` by default, which is the whole capability: the frame spends the session it holds. An
198
+ * app that wants a cookieless request has an ordinary fetch for that and does not need this.
199
+ */
200
+ credentials?: RequestCredentials;
201
+ };
202
+ /**
203
+ * Deliberately NOT a `Response`. It crosses at least one RPC boundary, and a `Response` rebuilt on the
204
+ * far side with `new Response()` would be a different object with different headers anyway, so the
205
+ * shape says plainly what actually survives.
206
+ */
207
+ type FrameFetchResult = {
208
+ status: number;
209
+ statusText: string;
210
+ ok: boolean; /** Where the response came from AFTER redirects, which is the only honest answer to "who replied". */
211
+ url: string;
212
+ redirected: boolean;
213
+ type: ResponseType;
214
+ headers: [string, string][];
215
+ body: ArrayBuffer;
216
+ };
217
+ //#endregion
163
218
  //#region node_modules/@mfkn/frame-locator/lib/operations.d.ts
164
219
  type PositionOptions$1 = OperationOptions & {
165
220
  position?: {
@@ -289,6 +344,10 @@ declare const defaultModules: {
289
344
  readonly addStyleTag: {
290
345
  readonly resolve: (context: LocatorContext, options: AddStyleTagOptions$1) => void;
291
346
  };
347
+ readonly fetch: {
348
+ readonly kind: ChainKind;
349
+ readonly resolve: (context: LocatorContext, url: string, init?: FrameFetchInit) => Promise<FrameFetchResult>;
350
+ };
292
351
  };
293
352
  };
294
353
  };
@@ -450,6 +509,7 @@ type AddStyleTagOptions = LocatorOptions & {
450
509
  content: string;
451
510
  noSanitize?: boolean;
452
511
  };
512
+ type FrameFetchOptions = LocatorOptions & FrameFetchInit;
453
513
  declare const locatorModules: Extended<{
454
514
  readonly element: {
455
515
  readonly selectors: {
@@ -570,6 +630,10 @@ declare const locatorModules: Extended<{
570
630
  readonly addStyleTag: {
571
631
  readonly resolve: (context: LocatorContext, options: AddStyleTagOptions$1) => void;
572
632
  };
633
+ readonly fetch: {
634
+ readonly kind: ChainKind;
635
+ readonly resolve: (context: LocatorContext, url: string, init?: FrameFetchInit) => Promise<FrameFetchResult>;
636
+ };
573
637
  };
574
638
  };
575
639
  }, {
@@ -609,6 +673,10 @@ declare const locatorModules: Extended<{
609
673
  addStyleTag: {
610
674
  resolve: (context: LocatorContext, options: AddStyleTagOptions) => void;
611
675
  };
676
+ fetch: {
677
+ resolve: (context: LocatorContext, url: string, init?: FrameFetchOptions) => Promise<FrameFetchResult>;
678
+ kind: ChainKind;
679
+ };
612
680
  };
613
681
  };
614
682
  }>;
@@ -754,6 +822,20 @@ declare const PERMISSIONS: readonly [{
754
822
  readonly severity: 0;
755
823
  readonly title: 'Open a website inside this app';
756
824
  readonly description: 'Lets the app navigate to another site without leaving its window.';
825
+ }, {
826
+ readonly scope: 'frame.fetchRead';
827
+ readonly category: 'network';
828
+ readonly severity: 3;
829
+ readonly unsafe: true;
830
+ readonly title: 'Read your account data on this site';
831
+ readonly description: 'Lets the app read pages and data from this site as you, using the session in the frame.';
832
+ }, {
833
+ readonly scope: 'frame.fetchWrite';
834
+ readonly category: 'network';
835
+ readonly severity: 3;
836
+ readonly unsafe: true;
837
+ readonly title: 'Change your account data on this site';
838
+ readonly description: 'Lets the app send changes to this site as you, using the session in the frame.';
757
839
  }, {
758
840
  readonly scope: 'network.fetch';
759
841
  readonly category: 'network';
package/index.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./lib-ulyxIbTr.cjs"),t=require("./api-kHMHDGar.cjs"),n=require("./cloud-BQoppUw4.cjs"),r=require("./dns.cjs"),i=require("./net-COzDDBnS.cjs"),a=require("./dgram-D2Or5f2e.cjs"),o=require("./http.cjs"),s=require("./extension-4BM5hKrn.cjs"),c=require("./desktop.cjs"),l=require("./fs-fyR-J9up.cjs"),u=require("./opfs.cjs"),d=require("./packages.cjs"),f=require("./account.cjs"),p=require("./connect-button-BBEjXzB3.cjs");let m=require("osra");var h=1e4,g=150,_=()=>new Promise(t=>{if(e.P())return t(!0);let n,r=setTimeout(()=>i(e.P()),h),i=e=>{clearTimeout(n),clearTimeout(r),o.disconnect(),document.removeEventListener(`readystatechange`,s),t(e)},a=()=>{clearTimeout(n),n=setTimeout(()=>i(e.P()),g)},o=new MutationObserver(()=>{e.P()&&i(!0)}),s=()=>{document.readyState===`complete`&&!e.P()&&a()};o.observe(document.documentElement,{attributes:!0,attributeFilter:[`data-fkn-extension`]}),document.addEventListener(`readystatechange`,s),document.readyState===`complete`&&a()}),v=async t=>s.r()||t.lockdown||!n.a()||await _()?e.r(t):n.i(t),y=`https://fkn.app`,b=async(e,n)=>{if(typeof window>`u`)throw Error(`FKN @fkn/lib: relayWorker must be called from the main thread`);let r=await t.i;if(!r)throw Error(`FKN @fkn/lib: relayWorker found no FKN transport in this realm`);(0,m.relay)(r,e,{key:`fkn-api`,...r.emit instanceof MessagePort?{}:{originA:n?.originA??y,originB:n?.originB??`*`},unregisterSignal:n?.unregisterSignal})},x=async()=>typeof window>`u`?!1:(await t.t).connect.prompt(location.origin).catch(()=>!1),S=async()=>typeof window>`u`?null:(await t.t).relay.prompt().catch(()=>null);exports.ATTACH_FRAME_EVENT_KEY=e.n,exports.FORGEABLE_HEADERS=e.k,exports.LOCATOR_DENIED=e.g,exports.LOCATOR_ERROR=e.u,exports.LOCATOR_UNSUPPORTED=e.h,Object.defineProperty(exports,"account",{enumerable:!0,get:function(){return f.t}}),exports.assertAttachableFrameUrl=e.s,exports.assertFetchableUrl=e.S,exports.assertForgeableHeaders=e.A,exports.assertLockdownApplicable=e.c,exports.assertOneCookieIdentity=e.j,exports.attachFrame=v,exports.attachFramePermission=e.i,exports.box=e.R,Object.defineProperty(exports,"cloud",{enumerable:!0,get:function(){return n.n}}),exports.connect=x,exports.connectButtonUrl=p.t,exports.cookies=e.b,exports.createFrame=e.a,exports.createVideoElementHandle=e.z,Object.defineProperty(exports,"desktop",{enumerable:!0,get:function(){return c.t}}),Object.defineProperty(exports,"dgram",{enumerable:!0,get:function(){return a.i}}),Object.defineProperty(exports,"dns",{enumerable:!0,get:function(){return r.t}}),Object.defineProperty(exports,"extension",{enumerable:!0,get:function(){return s.t}}),exports.fetch=s.n,exports.fetchCredentialedPermission=e.w,exports.fetchLocalPermission=e.T,exports.fetchPermission=e.E,Object.defineProperty(exports,"fs",{enumerable:!0,get:function(){return l.u}}),exports.gotoPermission=e.o,exports.handleRevivableModules=e.L,exports.hasForgedCookie=e.M,Object.defineProperty(exports,"http",{enumerable:!0,get:function(){return o.t}}),exports.isBlockedFetchUrl=e.D,exports.isBlockedFrameUrl=e.l,exports.isExtensionExposed=e.P,exports.isLocalNetworkUrl=e.O,exports.isLocatorDenied=e.d,exports.isLocatorUnsupported=e.m,exports.isTerminalError=e.p,exports.isType=e.B,exports.modifyRequestHeadersPermission=e._,Object.defineProperty(exports,"net",{enumerable:!0,get:function(){return i.s}}),Object.defineProperty(exports,"opfs",{enumerable:!0,get:function(){return u.t}}),Object.defineProperty(exports,"packages",{enumerable:!0,get:function(){return d.t}}),exports.permissions=e.t,exports.promptInstall=s.i,exports.promptRelay=S,exports.readCookiePermission=e.x,exports.relayWorker=b,exports.removeRequestHeaderRule=e.v,exports.revive=e.V,exports.setMissingExtensionHandler=e.F,exports.setRequestHeaderRule=e.y,exports.type=e.H,exports.waitForExtensionExposure=e.I;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./rolldown-runtime-BIInC43l.cjs"),t=require("./lib-DbiVHPXE.cjs"),n=require("./api-kHMHDGar.cjs"),r=require("./cloud-C8jfO0iJ.cjs"),i=require("./dns.cjs"),a=require("./net-COzDDBnS.cjs"),o=require("./dgram-D2Or5f2e.cjs"),s=require("./http.cjs"),c=require("./extension-B3nD2u7c.cjs"),l=require("./desktop.cjs"),u=require("./fs-DJm0bhjg.cjs"),d=require("./opfs.cjs"),f=require("./packages.cjs"),p=require("./account.cjs"),m=require("./connect-button-BBEjXzB3.cjs");let h=require("osra");var g=1e4,_=150,v=()=>new Promise(e=>{if(t.F())return e(!0);let n,r=setTimeout(()=>i(t.F()),g),i=t=>{clearTimeout(n),clearTimeout(r),o.disconnect(),document.removeEventListener(`readystatechange`,s),e(t)},a=()=>{clearTimeout(n),n=setTimeout(()=>i(t.F()),_)},o=new MutationObserver(()=>{t.F()&&i(!0)}),s=()=>{document.readyState===`complete`&&!t.F()&&a()};o.observe(document.documentElement,{attributes:!0,attributeFilter:[`data-fkn-extension`]}),document.addEventListener(`readystatechange`,s),document.readyState===`complete`&&a()}),y=async e=>c.r()||e.lockdown||!r.a()||await v()?t.r(e):r.i(e),b=`https://fkn.app`,x=async(e,t)=>{if(typeof window>`u`)throw Error(`FKN @fkn/lib: relayWorker must be called from the main thread`);let r=await n.i;if(!r)throw Error(`FKN @fkn/lib: relayWorker found no FKN transport in this realm`);(0,h.relay)(r,e,{key:`fkn-api`,...r.emit instanceof MessagePort?{}:{originA:t?.originA??b,originB:t?.originB??`*`},unregisterSignal:t?.unregisterSignal})},S=async()=>typeof window>`u`?!1:(await n.t).connect.prompt(location.origin).catch(()=>!1),C=async()=>typeof window>`u`?null:(await n.t).relay.prompt().catch(()=>null),w=e.t({applyUpdate:()=>D,onUpdate:()=>E,updateReady:()=>T}),T=async()=>typeof window>`u`?!1:n.t.then(e=>e.shell?.updateReady()).then(e=>e===!0).catch(()=>!1),E=async e=>{if(typeof window>`u`)return()=>{};let t=await n.t.catch(()=>null);if(!t||typeof t.shell?.onUpdate!=`function`)return()=>{};let r=await t.shell.onUpdate(e).catch(()=>null);return typeof r==`function`?r:()=>{}},D=async()=>typeof window>`u`?!1:n.t.then(e=>e.shell?.applyUpdate()).then(e=>e===!0).catch(()=>!1);exports.ATTACH_FRAME_EVENT_KEY=t.n,exports.FORGEABLE_HEADERS=t.A,exports.LOCATOR_DENIED=t.h,exports.LOCATOR_ERROR=t.g,exports.LOCATOR_UNSUPPORTED=t.m,Object.defineProperty(exports,"account",{enumerable:!0,get:function(){return p.t}}),exports.assertAttachableFrameUrl=t.s,exports.assertFetchableUrl=t.C,exports.assertForgeableHeaders=t.j,exports.assertLockdownApplicable=t.c,exports.assertOneCookieIdentity=t.M,exports.attachFrame=y,exports.attachFramePermission=t.i,exports.box=t.z,Object.defineProperty(exports,"cloud",{enumerable:!0,get:function(){return r.n}}),exports.connect=S,exports.connectButtonUrl=m.t,exports.cookies=t.x,exports.createFrame=t.a,exports.createVideoElementHandle=t.B,Object.defineProperty(exports,"desktop",{enumerable:!0,get:function(){return l.t}}),Object.defineProperty(exports,"dgram",{enumerable:!0,get:function(){return o.i}}),Object.defineProperty(exports,"dns",{enumerable:!0,get:function(){return i.t}}),Object.defineProperty(exports,"extension",{enumerable:!0,get:function(){return c.t}}),exports.fetch=c.n,exports.fetchCredentialedPermission=t.T,exports.fetchLocalPermission=t.E,exports.fetchPermission=t.D,Object.defineProperty(exports,"fs",{enumerable:!0,get:function(){return u.u}}),exports.gotoPermission=t.o,exports.handleRevivableModules=t.R,exports.hasForgedCookie=t.N,Object.defineProperty(exports,"http",{enumerable:!0,get:function(){return s.t}}),exports.isBlockedFetchUrl=t.O,exports.isBlockedFrameUrl=t.l,exports.isExtensionExposed=t.F,exports.isLocalNetworkUrl=t.k,exports.isLocatorDenied=t.p,exports.isLocatorUnsupported=t.u,exports.isTerminalError=t.d,exports.isType=t.V,exports.modifyRequestHeadersPermission=t.v,Object.defineProperty(exports,"net",{enumerable:!0,get:function(){return a.s}}),Object.defineProperty(exports,"opfs",{enumerable:!0,get:function(){return d.t}}),Object.defineProperty(exports,"packages",{enumerable:!0,get:function(){return f.t}}),exports.permissions=t.t,exports.promptInstall=c.i,exports.promptRelay=C,exports.readCookiePermission=t.S,exports.relayWorker=x,exports.removeRequestHeaderRule=t.y,exports.revive=t.H,exports.setMissingExtensionHandler=t.I,exports.setRequestHeaderRule=t.b,Object.defineProperty(exports,"shell",{enumerable:!0,get:function(){return w}}),exports.type=t.U,exports.waitForExtensionExposure=t.L;
package/index.d.ts CHANGED
@@ -1,13 +1,13 @@
1
1
  import { t as account_d_exports } from "./account.js";
2
- import { S as packages_d_exports } from "./packages-vX-1yfRK.js";
3
- import { A as LOCATOR_DENIED, B as SelectorPart, C as RemoteVideoElement, D as isType, E as createVideoElementHandle, F as isTerminalError, G as setRequestHeaderRule, H as RequestHeaderRule, I as Executor, J as cookies, K as CookieDetails, L as Gate, M as LOCATOR_UNSUPPORTED, N as isLocatorDenied, O as revive, P as isLocatorUnsupported, Q as assertFetchableUrl, R as GateTools, S as BoxedVideoElement, T as box, U as modifyRequestHeadersPermission, V as HeaderOperation, W as removeRequestHeaderRule, X as FetchInit, Y as readCookiePermission, Z as ProxyFetchRequest, _ as gotoPermission, a as PermissionGrant, at as FORGEABLE_HEADERS, b as isBlockedFrameUrl, c as ATTACH_FRAME_EVENT_KEY, ct as hasForgedCookie, d as Frame, et as fetchCredentialedPermission, f as FrameBackend, g as createFrame, h as attachFramePermission, i as waitForExtensionExposure, it as isLocalNetworkUrl, j as LOCATOR_ERROR, k as type, m as Locator, n as isExtensionExposed, nt as fetchPermission, o as PermissionRequest, ot as assertForgeableHeaders, p as GotoOptions, q as SiteCookie, r as setMissingExtensionHandler, rt as isBlockedFetchUrl, s as permissions, st as assertOneCookieIdentity, tt as fetchLocalPermission, u as AttachFrameOptions, v as assertAttachableFrameUrl, w as VideoElementState, x as handleRevivableModules, y as assertLockdownApplicable, z as OperationRequest } from "./index-DLaonjpx.js";
4
- import { n as cloud_d_exports } from "./cloud-BoteCXb4.js";
2
+ import { S as packages_d_exports } from "./packages-Cn8S-Hkn.js";
3
+ import { A as LOCATOR_DENIED, B as SelectorPart, C as RemoteVideoElement, D as isType, E as createVideoElementHandle, F as isTerminalError, G as setRequestHeaderRule, H as RequestHeaderRule, I as Executor, J as cookies, K as CookieDetails, L as Gate, M as LOCATOR_UNSUPPORTED, N as isLocatorDenied, O as revive, P as isLocatorUnsupported, Q as assertFetchableUrl, R as GateTools, S as BoxedVideoElement, T as box, U as modifyRequestHeadersPermission, V as HeaderOperation, W as removeRequestHeaderRule, X as FetchInit, Y as readCookiePermission, Z as ProxyFetchRequest, _ as gotoPermission, a as PermissionGrant, at as FORGEABLE_HEADERS, b as isBlockedFrameUrl, c as ATTACH_FRAME_EVENT_KEY, ct as hasForgedCookie, d as Frame, et as fetchCredentialedPermission, f as FrameBackend, g as createFrame, h as attachFramePermission, i as waitForExtensionExposure, it as isLocalNetworkUrl, j as LOCATOR_ERROR, k as type, m as Locator, n as isExtensionExposed, nt as fetchPermission, o as PermissionRequest, ot as assertForgeableHeaders, p as GotoOptions, q as SiteCookie, r as setMissingExtensionHandler, rt as isBlockedFetchUrl, s as permissions, st as assertOneCookieIdentity, tt as fetchLocalPermission, u as AttachFrameOptions, v as assertAttachableFrameUrl, w as VideoElementState, x as handleRevivableModules, y as assertLockdownApplicable, z as OperationRequest } from "./index-DY8WjklJ.js";
4
+ import { n as cloud_d_exports } from "./cloud-CQVtRvcI.js";
5
5
  import { t as dns_d_exports } from "./dns.js";
6
- import { s as net_d_exports } from "./net-5t6B2LnQ.js";
6
+ import { s as net_d_exports } from "./net-ByL9yG7X.js";
7
7
  import { t as dgram_d_exports } from "./dgram.js";
8
8
  import { t as http_d_exports } from "./http.js";
9
9
  import { t as desktop_d_exports } from "./desktop.js";
10
- import { i as promptInstall, n as fetch, t as extension_d_exports } from "./extension-CN9oFZ0Q.js";
10
+ import { i as promptInstall, n as fetch, t as extension_d_exports } from "./extension-CMPZjuaV.js";
11
11
  import { u as index_d_exports } from "./index-BIZeEsNu.js";
12
12
  import { t as index_d_exports$1 } from "./opfs.js";
13
13
  import { t as connectButtonUrl } from "./connect-button-D8KXSL6s.js";
@@ -27,5 +27,36 @@ declare const connect: () => Promise<boolean>;
27
27
  //#endregion
28
28
  //#region src/lib/relay-prompt.d.ts
29
29
  declare const promptRelay: () => Promise<string | null>;
30
+ declare namespace shell_d_exports {
31
+ export { applyUpdate, onUpdate, updateReady };
32
+ }
33
+ /**
34
+ * The FKN shell's update surface, for apps that want a say in when the platform frame reloads.
35
+ *
36
+ * The broker downloads updates behind the page and never applies one on its own authority,
37
+ * because only the app knows what a reload costs right now (a torrent mid-download is the case
38
+ * that matters). An app that subscribes here learns when a newer shell is ready and calls
39
+ * applyUpdate() at a moment of its choosing; the reload covers ONLY the FKN frame, and whether
40
+ * the app then reloads its own page is its own decision. Apps that ignore this module entirely
41
+ * keep today's behavior: the shell offers the update in its own header instead.
42
+ */
43
+ /** Whether a newer FKN shell is downloaded and ready to apply. */
44
+ declare const updateReady: () => Promise<boolean>;
45
+ /**
46
+ * Subscribe to "a newer FKN shell is ready". Fires immediately when an update is already
47
+ * waiting at subscribe time, so a late subscriber misses nothing. Returns an unsubscribe;
48
+ * a shell without this surface yields a noop unsubscribe rather than an error.
49
+ */
50
+ declare const onUpdate: (callback: () => void) => Promise<() => void>;
51
+ /**
52
+ * Apply a ready update by reloading the FKN frame this page mounted. Resolves true when the
53
+ * reload was taken, false when there is nothing to apply or this caller does not own the frame.
54
+ *
55
+ * The page's FKN connection does NOT survive the frame reload: calling this means "now is a
56
+ * safe moment", and reloading your own page right after (which remounts the frame fresh) is the
57
+ * expected next step. An app that never calls this keeps today's behavior, where the shell
58
+ * offers the update in its own header instead.
59
+ */
60
+ declare const applyUpdate: () => Promise<boolean>;
30
61
  //#endregion
31
- export { ATTACH_FRAME_EVENT_KEY, AttachFrameOptions, BoxedVideoElement, CookieDetails, type Executor, FORGEABLE_HEADERS, FetchInit, Frame, FrameBackend, type Gate, type GateTools, GotoOptions, HeaderOperation, LOCATOR_DENIED, LOCATOR_ERROR, LOCATOR_UNSUPPORTED, Locator, type OperationRequest, PermissionGrant, PermissionRequest, ProxyFetchRequest, RemoteVideoElement, RequestHeaderRule, type SelectorPart, SiteCookie, VideoElementState, account_d_exports as account, assertAttachableFrameUrl, assertFetchableUrl, assertForgeableHeaders, assertLockdownApplicable, assertOneCookieIdentity, attachFrame, attachFramePermission, box, cloud_d_exports as cloud, connect, connectButtonUrl, cookies, createFrame, createVideoElementHandle, desktop_d_exports as desktop, dgram_d_exports as dgram, dns_d_exports as dns, extension_d_exports as extension, fetch, fetchCredentialedPermission, fetchLocalPermission, fetchPermission, index_d_exports as fs, gotoPermission, handleRevivableModules, hasForgedCookie, http_d_exports as http, isBlockedFetchUrl, isBlockedFrameUrl, isExtensionExposed, isLocalNetworkUrl, isLocatorDenied, isLocatorUnsupported, isTerminalError, isType, modifyRequestHeadersPermission, net_d_exports as net, index_d_exports$1 as opfs, packages_d_exports as packages, permissions, promptInstall, promptRelay, readCookiePermission, relayWorker, removeRequestHeaderRule, revive, setMissingExtensionHandler, setRequestHeaderRule, type, waitForExtensionExposure };
62
+ export { ATTACH_FRAME_EVENT_KEY, AttachFrameOptions, BoxedVideoElement, CookieDetails, type Executor, FORGEABLE_HEADERS, FetchInit, Frame, FrameBackend, type Gate, type GateTools, GotoOptions, HeaderOperation, LOCATOR_DENIED, LOCATOR_ERROR, LOCATOR_UNSUPPORTED, Locator, type OperationRequest, PermissionGrant, PermissionRequest, ProxyFetchRequest, RemoteVideoElement, RequestHeaderRule, type SelectorPart, SiteCookie, VideoElementState, account_d_exports as account, assertAttachableFrameUrl, assertFetchableUrl, assertForgeableHeaders, assertLockdownApplicable, assertOneCookieIdentity, attachFrame, attachFramePermission, box, cloud_d_exports as cloud, connect, connectButtonUrl, cookies, createFrame, createVideoElementHandle, desktop_d_exports as desktop, dgram_d_exports as dgram, dns_d_exports as dns, extension_d_exports as extension, fetch, fetchCredentialedPermission, fetchLocalPermission, fetchPermission, index_d_exports as fs, gotoPermission, handleRevivableModules, hasForgedCookie, http_d_exports as http, isBlockedFetchUrl, isBlockedFrameUrl, isExtensionExposed, isLocalNetworkUrl, isLocatorDenied, isLocatorUnsupported, isTerminalError, isType, modifyRequestHeadersPermission, net_d_exports as net, index_d_exports$1 as opfs, packages_d_exports as packages, permissions, promptInstall, promptRelay, readCookiePermission, relayWorker, removeRequestHeaderRule, revive, setMissingExtensionHandler, setRequestHeaderRule, shell_d_exports as shell, type, waitForExtensionExposure };