@fkn/lib 0.9.19 → 0.9.21

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 (86) hide show
  1. package/account.cjs +1 -1
  2. package/account.js +24 -17
  3. package/{api-DnO1DsJC.d.ts → api-B0qRPCcX.d.ts} +36 -37
  4. package/api-BqRjtWm_.js +311 -0
  5. package/api-CKO3Hw-O.cjs +3 -0
  6. package/busy-Bp1E3JPT.js +24 -0
  7. package/busy-Dv8wzE5M.cjs +1 -0
  8. package/cloud/dgram.cjs +1 -1
  9. package/cloud/dgram.js +1 -1
  10. package/cloud/fetch.cjs +1 -1
  11. package/cloud/fetch.d.ts +1 -1
  12. package/cloud/fetch.js +1 -1
  13. package/cloud/fs.cjs +1 -1
  14. package/cloud/fs.js +2 -2
  15. package/cloud/net.cjs +1 -1
  16. package/cloud/net.d.ts +1 -1
  17. package/cloud/net.js +1 -1
  18. package/cloud-BCQTex58.cjs +1 -0
  19. package/{cloud-uE4g-WqI.d.ts → cloud-BTpJn4jy.d.ts} +3 -3
  20. package/cloud-BlR1He17.js +212 -0
  21. package/cloud.cjs +1 -1
  22. package/cloud.d.ts +3 -3
  23. package/cloud.js +4 -4
  24. package/dgram-9hn582qO.cjs +1 -0
  25. package/{dgram-DlGl_ho1.js → dgram-TB03kqMr.js} +55 -49
  26. package/dgram.cjs +1 -1
  27. package/dgram.d.ts +2 -1
  28. package/dgram.js +1 -1
  29. package/dns.cjs +1 -1
  30. package/dns.js +1 -1
  31. package/extension-BI2NxGtC.js +78 -0
  32. package/{extension-CN9oFZ0Q.d.ts → extension-CMPZjuaV.d.ts} +1 -1
  33. package/extension-rFQQpEqJ.cjs +1 -0
  34. package/extension.cjs +1 -1
  35. package/extension.d.ts +2 -2
  36. package/extension.js +3 -3
  37. package/fs/promises.cjs +1 -1
  38. package/fs/promises.js +1 -1
  39. package/fs-BUcpl9k4.cjs +1 -0
  40. package/fs-bpb3Ysdd.js +347 -0
  41. package/fs.cjs +1 -1
  42. package/fs.js +1 -1
  43. package/http.cjs +1 -1
  44. package/http.d.ts +1 -1
  45. package/http.js +1 -1
  46. package/{index-DLaonjpx.d.ts → index-DY8WjklJ.d.ts} +82 -0
  47. package/index.cjs +1 -1
  48. package/index.d.ts +12 -18
  49. package/index.js +92 -39
  50. package/lib-DbiVHPXE.cjs +53 -0
  51. package/{lib-CegQxwDI.js → lib-k3lstfa4.js} +178 -131
  52. package/net-C2fIMWFr.cjs +1 -0
  53. package/{net-l7JVHsIR.d.ts → net-CnYxw_sB.d.ts} +3 -1
  54. package/{net-BbmQeMpt.js → net-Ct8ywVAk.js} +52 -41
  55. package/net.cjs +1 -1
  56. package/net.d.ts +1 -1
  57. package/net.js +1 -1
  58. package/node-fs-BZCQUmeE.js +404 -0
  59. package/node-fs-DZPGCYWg.cjs +1 -0
  60. package/opfs.cjs +1 -1
  61. package/opfs.js +1 -1
  62. package/package.json +1 -1
  63. package/{packages-vX-1yfRK.d.ts → packages-Cn8S-Hkn.d.ts} +20 -20
  64. package/packages.cjs +1 -1
  65. package/packages.d.ts +1 -1
  66. package/packages.js +165 -149
  67. package/proxy--aljNHvG.js +69 -0
  68. package/{proxy-7ib45Uo-.d.ts → proxy-CuXtzxSQ.d.ts} +1 -1
  69. package/proxy-oHfEx1cn.cjs +1 -0
  70. package/{storage-C8hBot2f.js → storage-C1nW5Tvh.js} +1 -1
  71. package/{storage-BW-jDLUL.cjs → storage-rXHvV2FU.cjs} +1 -1
  72. package/api-DQ-V4Lls.js +0 -220
  73. package/api-kHMHDGar.cjs +0 -3
  74. package/cloud-BQoppUw4.cjs +0 -1
  75. package/cloud-C8CeqUht.js +0 -130
  76. package/dgram-D2Or5f2e.cjs +0 -1
  77. package/extension-4BM5hKrn.cjs +0 -1
  78. package/extension-DVO10P3i.js +0 -78
  79. package/fs-BW5mVMmu.js +0 -340
  80. package/fs-DJm0bhjg.cjs +0 -1
  81. package/lib-ulyxIbTr.cjs +0 -53
  82. package/net-COzDDBnS.cjs +0 -1
  83. package/node-fs-BMR2yCEt.cjs +0 -1
  84. package/node-fs-DKfokOlh.js +0 -401
  85. package/proxy-B0gNjT8-.cjs +0 -1
  86. package/proxy-BpqvCJmA.js +0 -43
@@ -285,32 +285,36 @@ var D = () => typeof document > "u" ? !1 : document.documentElement.dataset[ae]
285
285
  }, fe = (e) => {
286
286
  let t = [...new Set((e ?? []).map(([e]) => e.trim().toLowerCase()).filter((e) => !j.includes(e)))];
287
287
  if (t.length) throw Error(`fetch: refusing to forge request header(s): ${t.join(", ")}`);
288
- }, pe = {
288
+ }, pe = [
289
+ "fkn.app",
290
+ "fkn.dev",
291
+ "sdbx.app"
292
+ ], me = (e) => pe.some((t) => e === t || e.endsWith(`.${t}`)), he = {
289
293
  scope: "network.fetch",
290
294
  category: "network",
291
295
  severity: 0,
292
296
  title: "Fetch data from other sites",
293
297
  description: "Lets the app download public data from other websites directly, past the usual cross-origin limits."
294
- }, me = {
298
+ }, ge = {
295
299
  scope: "network.fetchCredentialed",
296
300
  category: "network",
297
301
  severity: 3,
298
302
  unsafe: !0,
299
303
  title: "Fetch from other sites, signed in as you",
300
304
  description: "Lets the app fetch other sites using your logged-in session cookies, so it can read data only you should see."
301
- }, he = {
305
+ }, _e = {
302
306
  scope: "network.fetchLocal",
303
307
  category: "network",
304
308
  severity: 3,
305
309
  unsafe: !0,
306
310
  title: "Access devices on your local network",
307
311
  description: "Lets the app reach devices and services on your home or work network, which websites normally cannot touch."
308
- }, ge = (e) => {
312
+ }, ve = (e) => {
309
313
  let t = e.match(/^(\d+)\.(\d+)\.\d+\.\d+$/);
310
314
  if (!t) return !1;
311
315
  let [n, r] = [Number(t[1]), Number(t[2])];
312
316
  return n === 10 || n === 127 || n === 0 || n === 169 && r === 254 || n === 172 && r >= 16 && r <= 31 || n === 192 && r === 168;
313
- }, _e = (e) => {
317
+ }, ye = (e) => {
314
318
  let t;
315
319
  try {
316
320
  t = new URL(e);
@@ -318,27 +322,25 @@ var D = () => typeof document > "u" ? !1 : document.documentElement.dataset[ae]
318
322
  return !1;
319
323
  }
320
324
  let n = t.hostname.replace(/^\[|\]$/g, "").toLowerCase().replace(/\.$/, "");
321
- return n === "localhost" || n.endsWith(".localhost") || n.endsWith(".local") || n.endsWith(".internal") || n.endsWith(".home.arpa") ? !0 : n.includes(":") ? n === "::" || n === "::1" || n.startsWith("fc") || n.startsWith("fd") || /^fe[89ab]/.test(n) || n.startsWith("::ffff:") : ge(n);
322
- }, ve = ["fkn.app", "fkn.dev"], M = (e) => {
325
+ return n === "localhost" || n.endsWith(".localhost") || n.endsWith(".local") || n.endsWith(".internal") || n.endsWith(".home.arpa") ? !0 : n.includes(":") ? n === "::" || n === "::1" || n.startsWith("fc") || n.startsWith("fd") || /^fe[89ab]/.test(n) || n.startsWith("::ffff:") : ve(n);
326
+ }, M = (e) => {
323
327
  let t;
324
328
  try {
325
329
  t = new URL(e);
326
330
  } catch {
327
331
  return !1;
328
332
  }
329
- if (t.protocol === "chrome-extension:" || t.protocol === "moz-extension:") return !0;
330
- let n = t.hostname;
331
- return ve.some((e) => n === e || n.endsWith(`.${e}`));
333
+ return t.protocol === "chrome-extension:" || t.protocol === "moz-extension:" ? !0 : me(t.hostname);
332
334
  }, N = (e) => {
333
335
  if (M(e)) throw Error("fetch: refusing to target the extension's own pages or FKN platform domains");
334
- }, ye = (e) => {
336
+ }, be = (e) => {
335
337
  if (!e?.headers) return;
336
338
  let t = new Headers(e.headers), n = j.map((e) => {
337
339
  let n = t.get(e);
338
340
  return n === null || n === "" ? void 0 : [e, n];
339
341
  }).filter((e) => e !== void 0);
340
342
  return n.length ? n : void 0;
341
- }, be = async (e, t) => {
343
+ }, xe = async (e, t) => {
342
344
  let n = new Request(e, t);
343
345
  N(n.url);
344
346
  let r = n.body ? await n.arrayBuffer() : null;
@@ -349,25 +351,25 @@ var D = () => typeof document > "u" ? !1 : document.documentElement.dataset[ae]
349
351
  body: r,
350
352
  credentials: t?.credentials === "include" ? "include" : "omit",
351
353
  redirect: n.redirect,
352
- unsafeHeaders: ye(t),
354
+ unsafeHeaders: be(t),
353
355
  reason: t?.reason,
354
356
  signal: t?.signal ?? void 0
355
357
  });
356
- }, xe = {
358
+ }, Se = {
357
359
  scope: "network.readCookie",
358
360
  category: "network",
359
361
  severity: 3,
360
362
  unsafe: !0,
361
363
  title: "Read a site’s cookie",
362
364
  description: "Lets the app read a named cookie from another site, which can include the login token only that site should see."
363
- }, Se = { get: (e) => A.getCookie(e) }, Ce = {
365
+ }, Ce = { get: (e) => A.getCookie(e) }, we = {
364
366
  scope: "network.modifyRequestHeaders",
365
367
  category: "network",
366
368
  severity: 2,
367
369
  unsafe: !0,
368
370
  title: "Rewrite request headers to other sites",
369
371
  description: "Lets the app set or remove headers (like Origin and Referer) on this page’s own requests to the listed sites."
370
- }, we = (e) => A.setRequestHeaderRule(e), Te = (e) => A.removeRequestHeaderRule({ ruleId: e }), Ee = class extends Error {
372
+ }, Te = (e) => A.setRequestHeaderRule(e), Ee = (e) => A.removeRequestHeaderRule({ ruleId: e }), De = class extends Error {
371
373
  reason;
372
374
  filename;
373
375
  line;
@@ -376,7 +378,7 @@ var D = () => typeof document > "u" ? !1 : document.documentElement.dataset[ae]
376
378
  constructor(e, t, n, r, i) {
377
379
  super(`${e}:${n}:${r}: ${t}`), this.reason = t, this.filename = e, this.line = n, this.column = r, this.source = i;
378
380
  }
379
- }, De = class {
381
+ }, Oe = class {
380
382
  start;
381
383
  end;
382
384
  source;
@@ -456,7 +458,7 @@ function z(e, t) {
456
458
  value: t || null
457
459
  }), e;
458
460
  }
459
- var Oe = class {
461
+ var ke = class {
460
462
  level = 0;
461
463
  indentation = " ";
462
464
  compress = !1;
@@ -606,7 +608,7 @@ var Oe = class {
606
608
  declaration(e) {
607
609
  return this.compress ? this.emit(`${e.property}:${e.value}`, e.position) + this.emit(";") : e.property === "grid-template-areas" ? this.emit(this.indent()) + this.emit(e.property + ": " + e.value.split("\n").join("\n".padEnd(22) + this.indent()), e.position) + this.emit(";") : this.emit(this.indent()) + this.emit(`${e.property}: ${e.value}`, e.position) + this.emit(";");
608
610
  }
609
- }, ke = (e, t) => {
611
+ }, Ae = (e, t) => {
610
612
  t ||= {};
611
613
  let n = 1, r = 1;
612
614
  function i() {
@@ -614,14 +616,14 @@ var Oe = class {
614
616
  line: n,
615
617
  column: r
616
618
  };
617
- return (i) => (i.position = new De(e, {
619
+ return (i) => (i.position = new Oe(e, {
618
620
  line: n,
619
621
  column: r
620
622
  }, t?.source || ""), u(), i);
621
623
  }
622
624
  let a = [];
623
625
  function o(i) {
624
- let o = new Ee(t?.source || "", i, n, r, e);
626
+ let o = new De(t?.source || "", i, n, r, e);
625
627
  if (!t?.silent) throw o;
626
628
  a.push(o);
627
629
  }
@@ -1095,48 +1097,54 @@ var Oe = class {
1095
1097
  }
1096
1098
  };
1097
1099
  }());
1098
- }, Ae = (e, t) => new Oe(t || {}).compile(e), B = "LocatorError", V = "LocatorUnsupportedError", H = "LocatorDeniedError", U = (e) => typeof e == "object" && e ? e.name : void 0, W = (e) => Object.assign(Error(e), { name: B }), je = (e, t = "", n) => Object.assign(Error(e), {
1100
+ }, je = (e, t) => new ke(t || {}).compile(e), B = "LocatorError", V = "LocatorUnsupportedError", H = "LocatorDeniedError", Me = "LocatorInvalidError", U = (e) => typeof e == "object" && e ? e.name : void 0, W = (e) => Object.assign(Error(e), { name: B }), Ne = (e, t = "", n) => Object.assign(Error(e), {
1099
1101
  name: V,
1100
1102
  operation: t,
1101
1103
  backend: n
1102
- }), Me = (e, t) => je(`Locator operation not supported${t ? ` on the ${t} backend` : ""}: ${e}`, e, t), Ne = (e) => U(e) === V, Pe = (e) => U(e) === H, Fe = (e) => Pe(e) || Ne(e), G = (e) => {
1104
+ }), Pe = (e, t) => Ne(`Locator operation not supported${t ? ` on the ${t} backend` : ""}: ${e}`, e, t), Fe = (e, t) => Object.assign(Error(e), {
1105
+ name: H,
1106
+ operation: t
1107
+ }), Ie = (e, t) => Object.assign(Error(e), {
1108
+ name: Me,
1109
+ operation: t
1110
+ }), Le = (e) => U(e) === V, Re = (e) => U(e) === H, ze = (e) => U(e) === Me, Be = (e) => Re(e) || Le(e) || ze(e), G = (e) => {
1103
1111
  let t = (e.ownerDocument ?? e).defaultView;
1104
1112
  if (!t) throw W("the resolved element belongs to a document with no window");
1105
1113
  return t;
1106
- }, Ie = (e, t) => {
1114
+ }, Ve = (e, t) => {
1107
1115
  let n = e?.[t];
1108
1116
  return typeof n == "function" ? n : null;
1109
1117
  }, K = (e, t) => {
1110
1118
  if (typeof e != "object" || !e) return null;
1111
1119
  let n = (() => {
1112
1120
  try {
1113
- return Ie(G(e), t);
1121
+ return Ve(G(e), t);
1114
1122
  } catch {
1115
1123
  return null;
1116
1124
  }
1117
1125
  })();
1118
1126
  if (n && e instanceof n) return n;
1119
- let r = Ie(globalThis, t);
1127
+ let r = Ve(globalThis, t);
1120
1128
  return r && e instanceof r ? r : null;
1121
1129
  }, q = (e, t) => K(e, t) !== null, J = (e) => {
1122
1130
  if (e.length === 0) throw W("No elements found");
1123
1131
  if (e.length > 1) throw W(`Strict mode violation: locator resolved to ${e.length} elements`);
1124
1132
  return e[0];
1125
- }, Le = (e, t) => {
1133
+ }, He = (e, t) => {
1126
1134
  if (!q(e, t)) throw W(`Strict mode violation: expected ${t}, got <${e.tagName.toLowerCase()}>`);
1127
1135
  return e;
1128
- }, Re = (e) => e.tagName.toLowerCase(), ze = /* @__PURE__ */ new Set(), Be = (e) => {
1129
- ze.add(e);
1130
- }, Ve = /(?:^|[^\w-])(?:url|image|image-set|cross-fade|paint|element|expression)\s*\(/i, He = (e) => e.replace(/\\([0-9a-fA-F]{1,6})\s?/g, (e, t) => String.fromCodePoint(Number.parseInt(t, 16))).replace(/\\(.)/g, "$1"), Ue = (e) => !Ve.test(He(e.value)), We = /* @__PURE__ */ new Set([
1136
+ }, Ue = (e) => e.tagName.toLowerCase(), We = /* @__PURE__ */ new Set(), Ge = (e) => {
1137
+ We.add(e);
1138
+ }, Ke = /(?:^|[^\w-])(?:url|image|image-set|cross-fade|paint|element|expression)\s*\(/i, qe = (e) => e.replace(/\\([0-9a-fA-F]{1,6})\s?/g, (e, t) => String.fromCodePoint(Number.parseInt(t, 16))).replace(/\\(.)/g, "$1"), Je = (e) => !Ke.test(qe(e.value)), Ye = /* @__PURE__ */ new Set([
1131
1139
  P.import,
1132
1140
  P.fontFace,
1133
1141
  P.namespace,
1134
1142
  P.charset,
1135
1143
  P.document,
1136
1144
  P.comment
1137
- ]), Ge = (e) => {
1138
- if (We.has(e.type)) return null;
1139
- if (e.type === P.declaration) return Ue(e) ? e : null;
1145
+ ]), Xe = (e) => {
1146
+ if (Ye.has(e.type)) return null;
1147
+ if (e.type === P.declaration) return Je(e) ? e : null;
1140
1148
  let t = e, n = { ...t };
1141
1149
  for (let e of [
1142
1150
  "declarations",
@@ -1144,18 +1152,18 @@ var Oe = class {
1144
1152
  "keyframes"
1145
1153
  ]) {
1146
1154
  let r = t[e];
1147
- Array.isArray(r) && (n[e] = Ke(r));
1155
+ Array.isArray(r) && (n[e] = Ze(r));
1148
1156
  }
1149
1157
  return n;
1150
- }, Ke = (e) => e.map((e) => Ge(e)).filter((e) => e !== null), qe = (e) => {
1158
+ }, Ze = (e) => e.map((e) => Xe(e)).filter((e) => e !== null), Qe = (e) => {
1151
1159
  let t;
1152
1160
  try {
1153
- t = ke(e, { silent: !0 });
1161
+ t = Ae(e, { silent: !0 });
1154
1162
  } catch {
1155
1163
  return "";
1156
1164
  }
1157
- return t.stylesheet.rules = Ke(t.stylesheet.rules), Ae(t);
1158
- }, Je = (e, t) => {
1165
+ return t.stylesheet.rules = Ze(t.stylesheet.rules), je(t);
1166
+ }, $e = (e, t) => {
1159
1167
  let n = () => {
1160
1168
  t.parentNode || (e.head ?? e.documentElement).appendChild(t);
1161
1169
  };
@@ -1172,27 +1180,60 @@ var Oe = class {
1172
1180
  });
1173
1181
  let i = () => r.disconnect(), a = e.defaultView;
1174
1182
  a ? a.addEventListener("load", i, { once: !0 }) : setTimeout(i, 3e4);
1175
- }, Ye = { resolve: (e, t) => {
1183
+ }, et = { resolve: (e, t) => {
1176
1184
  let n = e.document.createElement("style");
1177
- n.textContent = t.noSanitize ? t.content : qe(t.content);
1185
+ n.textContent = t.noSanitize ? t.content : Qe(t.content);
1178
1186
  try {
1179
- Je(e.document, n);
1187
+ $e(e.document, n);
1180
1188
  } catch (e) {
1181
1189
  console.error(e);
1182
1190
  }
1183
- Be(n);
1184
- } }, Xe = (e, t) => {
1191
+ Ge(n);
1192
+ } }, tt = /* @__PURE__ */ new Set(["set-cookie", "set-cookie2"]), nt = (e) => {
1193
+ let t = [];
1194
+ return e.forEach((e, n) => {
1195
+ tt.has(n.toLowerCase()) || t.push([n, e]);
1196
+ }), t;
1197
+ }, Y = {
1198
+ kind: "frame",
1199
+ resolve: async (e, t, n = {}) => {
1200
+ if (typeof t != "string") throw Ie("fetch: url must be a string", "fetch");
1201
+ let r = G(e.document), i;
1202
+ try {
1203
+ i = new r.URL(t, e.document.baseURI).href;
1204
+ } catch {
1205
+ throw Ie(`fetch: not a valid url: ${t}`, "fetch");
1206
+ }
1207
+ let a = await r.fetch(i, {
1208
+ method: n.method ?? "GET",
1209
+ headers: n.headers,
1210
+ body: n.body ?? null,
1211
+ redirect: n.redirect ?? "follow",
1212
+ credentials: n.credentials ?? "include"
1213
+ });
1214
+ return {
1215
+ status: a.status,
1216
+ statusText: a.statusText,
1217
+ ok: a.ok,
1218
+ url: a.url,
1219
+ redirected: a.redirected,
1220
+ type: a.type,
1221
+ headers: nt(a.headers),
1222
+ body: await a.arrayBuffer()
1223
+ };
1224
+ }
1225
+ }, rt = (e, t) => {
1185
1226
  let n = e.getBoundingClientRect();
1186
1227
  return {
1187
1228
  clientX: n.left + n.width * (t?.x ?? .5),
1188
1229
  clientY: n.top + n.height * (t?.y ?? .5)
1189
1230
  };
1190
- }, Ze = { resolve: (e, t = {}) => {
1231
+ }, it = { resolve: (e, t = {}) => {
1191
1232
  let n = J(e.elements), r = G(n), i = {
1192
1233
  bubbles: !0,
1193
1234
  cancelable: !0,
1194
1235
  composed: !0,
1195
- ...Xe(n, t.position),
1236
+ ...rt(n, t.position),
1196
1237
  button: 0
1197
1238
  }, a = {
1198
1239
  ...i,
@@ -1216,12 +1257,12 @@ var Oe = class {
1216
1257
  ...i,
1217
1258
  buttons: 0
1218
1259
  }));
1219
- } }, Qe = { resolve: (e, t = {}) => {
1260
+ } }, at = { resolve: (e, t = {}) => {
1220
1261
  let n = J(e.elements), r = G(n), i = {
1221
1262
  bubbles: !0,
1222
1263
  cancelable: !0,
1223
1264
  composed: !0,
1224
- ...Xe(n, t.position)
1265
+ ...rt(n, t.position)
1225
1266
  }, a = {
1226
1267
  ...i,
1227
1268
  pointerType: "mouse",
@@ -1235,11 +1276,11 @@ var Oe = class {
1235
1276
  ...i,
1236
1277
  bubbles: !1
1237
1278
  })), n.dispatchEvent(new r.MouseEvent("mouseover", i)), n.dispatchEvent(new r.PointerEvent("pointermove", a)), n.dispatchEvent(new r.MouseEvent("mousemove", i));
1238
- } }, $e = (e, t) => {
1279
+ } }, ot = (e, t) => {
1239
1280
  e._valueTracker?.setValue("");
1240
1281
  let n = (K(e, "HTMLTextAreaElement") ?? K(e, "HTMLInputElement"))?.prototype, r = n && Object.getOwnPropertyDescriptor(n, "value")?.set;
1241
1282
  r ? r.call(e, t) : e.value = t;
1242
- }, et = (e, t) => {
1283
+ }, st = (e, t) => {
1243
1284
  if (e.type !== "range") return null;
1244
1285
  let n = Number(e.min || 0), r = Number(e.max || 100);
1245
1286
  if (!Number.isFinite(n) || !Number.isFinite(r) || r <= n) return null;
@@ -1276,71 +1317,71 @@ var Oe = class {
1276
1317
  buttons: 0
1277
1318
  }
1278
1319
  };
1279
- }, tt = { resolve: (e, t, n = {}) => {
1320
+ }, ct = { resolve: (e, t, n = {}) => {
1280
1321
  let r = J(e.elements), i = G(r), a = q(r, "HTMLInputElement");
1281
1322
  if (a || q(r, "HTMLTextAreaElement")) {
1282
- let e = r, n = a ? et(e, t) : null;
1283
- n && (r.dispatchEvent(new i.PointerEvent("pointerdown", n.pointerDown)), r.dispatchEvent(new i.MouseEvent("mousedown", n.mouseDown))), $e(e, t), r.dispatchEvent(new i.Event("input", { bubbles: !0 })), n && (r.dispatchEvent(new i.PointerEvent("pointerup", n.pointerUp)), r.dispatchEvent(new i.MouseEvent("mouseup", n.mouseUp))), r.dispatchEvent(new i.Event("change", { bubbles: !0 }));
1323
+ let e = r, n = a ? st(e, t) : null;
1324
+ n && (r.dispatchEvent(new i.PointerEvent("pointerdown", n.pointerDown)), r.dispatchEvent(new i.MouseEvent("mousedown", n.mouseDown))), ot(e, t), r.dispatchEvent(new i.Event("input", { bubbles: !0 })), n && (r.dispatchEvent(new i.PointerEvent("pointerup", n.pointerUp)), r.dispatchEvent(new i.MouseEvent("mouseup", n.mouseUp))), r.dispatchEvent(new i.Event("change", { bubbles: !0 }));
1284
1325
  return;
1285
1326
  }
1286
1327
  if (q(r, "HTMLElement") && r.isContentEditable) {
1287
1328
  r.textContent = t, r.dispatchEvent(new i.Event("input", { bubbles: !0 }));
1288
1329
  return;
1289
1330
  }
1290
- throw Error(`fill: element <${Re(r)}> is not fillable`);
1291
- } }, nt = { resolve: (e, t = {}) => J(e.elements).textContent }, rt = { resolve: (e, t, n = {}) => J(e.elements).getAttribute(t) }, it = { resolve: (e, t = {}) => {
1331
+ throw Error(`fill: element <${Ue(r)}> is not fillable`);
1332
+ } }, lt = { resolve: (e, t = {}) => J(e.elements).textContent }, ut = { resolve: (e, t, n = {}) => J(e.elements).getAttribute(t) }, dt = { resolve: (e, t = {}) => {
1292
1333
  let n = J(e.elements);
1293
1334
  if (!q(n, "HTMLElement")) return !0;
1294
1335
  let r = G(n).getComputedStyle(n);
1295
1336
  if (r?.display === "none" || r?.visibility === "hidden") return !1;
1296
1337
  let i = n.getBoundingClientRect();
1297
1338
  return i.width > 0 && i.height > 0;
1298
- } }, at = { resolve: (e, t = {}) => e.elements.length }, ot = { resolve: (e, t = {}) => e.elements.length > 0 }, Y = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
1339
+ } }, ft = { resolve: (e, t = {}) => e.elements.length }, pt = { resolve: (e, t = {}) => e.elements.length > 0 }, X = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
1299
1340
  __proto__: null,
1300
- click: Ze,
1301
- count: at,
1302
- exists: ot,
1303
- fill: tt,
1304
- getAttribute: rt,
1305
- hover: Qe,
1306
- isVisible: it,
1307
- textContent: nt
1308
- }, Symbol.toStringTag, { value: "Module" })), X = (e, t) => e.elements.flatMap((e) => [...e.querySelectorAll(t)]), Z = (e) => e.replaceAll("\"", "\\\""), st = {
1341
+ click: it,
1342
+ count: ft,
1343
+ exists: pt,
1344
+ fill: ct,
1345
+ getAttribute: ut,
1346
+ hover: at,
1347
+ isVisible: dt,
1348
+ textContent: lt
1349
+ }, Symbol.toStringTag, { value: "Module" })), Z = (e, t) => e.elements.flatMap((e) => [...e.querySelectorAll(t)]), Q = (e) => e.replaceAll("\"", "\\\""), mt = {
1309
1350
  to: "element",
1310
1351
  css: !0,
1311
- resolve: (e, t) => X(e, t),
1352
+ resolve: (e, t) => Z(e, t),
1312
1353
  render: (e) => ({
1313
1354
  fragment: typeof e == "string" ? e : "?",
1314
1355
  separator: "descend"
1315
1356
  })
1316
- }, ct = {
1357
+ }, ht = {
1317
1358
  to: "frame",
1318
1359
  css: !0,
1319
1360
  barrier: "down",
1320
- resolve: (e, t) => X(e, t),
1361
+ resolve: (e, t) => Z(e, t),
1321
1362
  render: (e) => ({
1322
1363
  fragment: typeof e == "string" ? e : "?",
1323
1364
  separator: "down"
1324
1365
  })
1325
- }, lt = {
1366
+ }, gt = {
1326
1367
  element: {
1327
1368
  selectors: {
1328
- locator: st,
1329
- frameLocator: ct,
1369
+ locator: mt,
1370
+ frameLocator: ht,
1330
1371
  getByRole: {
1331
1372
  to: "element",
1332
- resolve: (e, t) => X(e, `[role="${CSS.escape(t)}"]`),
1333
- render: (e) => ({ fragment: typeof e == "string" ? `[role="${Z(e)}"]` : "[role]" })
1373
+ resolve: (e, t) => Z(e, `[role="${CSS.escape(t)}"]`),
1374
+ render: (e) => ({ fragment: typeof e == "string" ? `[role="${Q(e)}"]` : "[role]" })
1334
1375
  },
1335
1376
  getByText: {
1336
1377
  to: "element",
1337
1378
  resolve: (e, t) => e.elements.flatMap((e) => [e, ...e.querySelectorAll("*")]).filter((e) => e.textContent?.includes(t)),
1338
- render: (e) => ({ fragment: typeof e == "string" ? `:has-text("${Z(e)}")` : ":has-text(...)" })
1379
+ render: (e) => ({ fragment: typeof e == "string" ? `:has-text("${Q(e)}")` : ":has-text(...)" })
1339
1380
  },
1340
1381
  getByTestId: {
1341
1382
  to: "element",
1342
- resolve: (e, t) => X(e, `[data-testid="${CSS.escape(t)}"]`),
1343
- render: (e) => ({ fragment: typeof e == "string" ? `[data-testid="${Z(e)}"]` : "[data-testid]" })
1383
+ resolve: (e, t) => Z(e, `[data-testid="${CSS.escape(t)}"]`),
1384
+ render: (e) => ({ fragment: typeof e == "string" ? `[data-testid="${Q(e)}"]` : "[data-testid]" })
1344
1385
  },
1345
1386
  first: {
1346
1387
  to: "element",
@@ -1357,20 +1398,20 @@ var Oe = class {
1357
1398
  }
1358
1399
  },
1359
1400
  operations: {
1360
- click: Ze,
1361
- fill: tt,
1362
- hover: Qe,
1363
- textContent: nt,
1364
- getAttribute: rt,
1365
- isVisible: it,
1366
- count: at,
1367
- exists: ot
1401
+ click: it,
1402
+ fill: ct,
1403
+ hover: at,
1404
+ textContent: lt,
1405
+ getAttribute: ut,
1406
+ isVisible: dt,
1407
+ count: ft,
1408
+ exists: pt
1368
1409
  }
1369
1410
  },
1370
1411
  frame: {
1371
1412
  selectors: {
1372
- locator: st,
1373
- frameLocator: ct,
1413
+ locator: mt,
1414
+ frameLocator: ht,
1374
1415
  owner: {
1375
1416
  to: "frame",
1376
1417
  barrier: "up",
@@ -1383,9 +1424,12 @@ var Oe = class {
1383
1424
  })
1384
1425
  }
1385
1426
  },
1386
- operations: { addStyleTag: Ye }
1427
+ operations: {
1428
+ addStyleTag: et,
1429
+ fetch: Y
1430
+ }
1387
1431
  }
1388
- }, ut = (e, t = lt) => ({
1432
+ }, _t = (e, t = gt) => ({
1389
1433
  element: {
1390
1434
  selectors: {
1391
1435
  ...t.element.selectors,
@@ -1406,29 +1450,29 @@ var Oe = class {
1406
1450
  ...e.frame?.operations
1407
1451
  }
1408
1452
  }
1409
- }), dt = 3e4, ft = 50, pt = (e) => {
1453
+ }), vt = 3e4, yt = 50, bt = (e) => {
1410
1454
  let t = e[e.length - 1];
1411
1455
  return typeof t == "object" && t ? t : void 0;
1412
- }, mt = (e) => {
1413
- let t = pt(e)?.timeout;
1414
- return typeof t == "number" ? t : dt;
1415
- }, ht = ({ executor: e, parts: t }) => ({ highlight: (n) => e.highlight(t, n).then(() => {}, () => {}) }), gt = async (e) => {
1456
+ }, xt = (e) => {
1457
+ let t = bt(e)?.timeout;
1458
+ return typeof t == "number" ? t : vt;
1459
+ }, St = ({ executor: e, parts: t }) => ({ highlight: (n) => e.highlight(t, n).then(() => {}, () => {}) }), Ct = async (e) => {
1416
1460
  let t = {
1417
1461
  parts: e.parts,
1418
1462
  operation: e.operation,
1419
1463
  args: e.args,
1420
1464
  phase: "ensure"
1421
1465
  };
1422
- await e.gate?.(t, ht(e));
1423
- }, _t = async (e) => {
1466
+ await e.gate?.(t, St(e));
1467
+ }, wt = async (e) => {
1424
1468
  let { executor: t, gate: n, parts: r, operation: i, args: a } = e;
1425
1469
  n && await n({
1426
1470
  parts: r,
1427
1471
  operation: i,
1428
1472
  args: a,
1429
1473
  phase: "execute"
1430
- }, ht(e));
1431
- let o = mt(a), s = Date.now() + o, c = /* @__PURE__ */ Error(`Locator timeout (${o}ms): ${i}`), { promise: l, reject: u } = Promise.withResolvers();
1474
+ }, St(e));
1475
+ let o = xt(a), s = Date.now() + o, c = /* @__PURE__ */ Error(`Locator timeout (${o}ms): ${i}`), { promise: l, reject: u } = Promise.withResolvers();
1432
1476
  l.catch(() => {});
1433
1477
  let d = setTimeout(() => u(c), o), f = c;
1434
1478
  try {
@@ -1436,49 +1480,55 @@ var Oe = class {
1436
1480
  return await Promise.race([t.execute(r, i, a), l]);
1437
1481
  } catch (e) {
1438
1482
  if (e === c) break;
1439
- if (Fe(e)) throw e;
1483
+ if (Be(e)) throw e;
1440
1484
  f = e;
1441
1485
  let t = s - Date.now();
1442
1486
  if (t <= 0) break;
1443
- await new Promise((e) => setTimeout(e, Math.min(ft, t)));
1487
+ await new Promise((e) => setTimeout(e, Math.min(yt, t)));
1444
1488
  }
1445
1489
  } finally {
1446
1490
  clearTimeout(d);
1447
1491
  }
1448
1492
  throw f;
1449
- }, vt = (e, t, n, r) => {
1493
+ }, Tt = (e, t, n, r) => {
1450
1494
  let i = {};
1451
- for (let [a, o] of Object.entries(t[n].selectors)) i[a] = (...i) => vt(e, t, o.to, [...r, {
1495
+ for (let [a, o] of Object.entries(t[n].selectors)) i[a] = (...i) => Tt(e, t, o.to, [...r, {
1452
1496
  kind: n,
1453
1497
  name: a,
1454
1498
  args: i
1455
1499
  }]);
1456
- for (let a of Object.keys(t[n].operations)) i[a] = (...t) => _t({
1500
+ for (let a of Object.keys(t[n].operations)) i[a] = (...t) => wt({
1457
1501
  ...e,
1458
1502
  parts: r,
1459
1503
  operation: a,
1460
1504
  args: t
1461
1505
  });
1462
- return i.ensure = (t, n = {}) => gt({
1506
+ return i.ensure = (t, n = {}) => Ct({
1463
1507
  ...e,
1464
1508
  parts: r,
1465
1509
  operation: t,
1466
1510
  args: [n]
1467
1511
  }), i;
1468
- }, yt = (e) => vt(e, e.modules ?? lt, "frame", []), bt = ut({
1512
+ }, Et = (e) => Tt(e, e.modules ?? gt, "frame", []), Dt = _t({
1469
1513
  element: { operations: {
1470
- click: { resolve: (e, t = {}) => Y.click.resolve(e, t) },
1471
- hover: { resolve: (e, t = {}) => Y.hover.resolve(e, t) },
1472
- fill: { resolve: (e, t, n = {}) => Y.fill.resolve(e, t, n) },
1473
- textContent: { resolve: (e, t = {}) => Y.textContent.resolve(e) },
1474
- getAttribute: { resolve: (e, t, n = {}) => Y.getAttribute.resolve(e, t) },
1475
- isVisible: { resolve: (e, t = {}) => Y.isVisible.resolve(e) },
1476
- count: { resolve: (e, t = {}) => Y.count.resolve(e) },
1477
- exists: { resolve: (e, t = {}) => Y.exists.resolve(e) },
1478
- videoElement: { resolve: (e, t = {}) => x(Le(J(e.elements), "HTMLVideoElement")) }
1514
+ click: { resolve: (e, t = {}) => X.click.resolve(e, t) },
1515
+ hover: { resolve: (e, t = {}) => X.hover.resolve(e, t) },
1516
+ fill: { resolve: (e, t, n = {}) => X.fill.resolve(e, t, n) },
1517
+ textContent: { resolve: (e, t = {}) => X.textContent.resolve(e) },
1518
+ getAttribute: { resolve: (e, t, n = {}) => X.getAttribute.resolve(e, t) },
1519
+ isVisible: { resolve: (e, t = {}) => X.isVisible.resolve(e) },
1520
+ count: { resolve: (e, t = {}) => X.count.resolve(e) },
1521
+ exists: { resolve: (e, t = {}) => X.exists.resolve(e) },
1522
+ videoElement: { resolve: (e, t = {}) => x(He(J(e.elements), "HTMLVideoElement")) }
1479
1523
  } },
1480
- frame: { operations: { addStyleTag: { resolve: (e, t) => Ye.resolve(e, t) } } }
1481
- }), Q = (e) => {
1524
+ frame: { operations: {
1525
+ addStyleTag: { resolve: (e, t) => et.resolve(e, t) },
1526
+ fetch: {
1527
+ resolve: (e, t, n = {}) => Y.resolve(e, t, n),
1528
+ kind: Y.kind
1529
+ }
1530
+ } }
1531
+ }), Ot = (e) => {
1482
1532
  if (!e || e === "about:blank") return !1;
1483
1533
  let t;
1484
1534
  try {
@@ -1486,30 +1536,27 @@ var Oe = class {
1486
1536
  } catch {
1487
1537
  return !1;
1488
1538
  }
1489
- if (t.protocol === "chrome-extension:" || t.protocol === "moz-extension:") return !0;
1490
- if (t.protocol === "about:") return !1;
1491
- let n = t.hostname, r = (e) => n === e || n.endsWith(`.${e}`);
1492
- return r("fkn.app") || r("fkn.dev") || r("sdbx.app");
1539
+ return t.protocol === "chrome-extension:" || t.protocol === "moz-extension:" ? !0 : t.protocol === "about:" ? !1 : me(t.hostname);
1493
1540
  }, $ = (e) => {
1494
- if (Q(e)) throw Error("attachFrame: refusing to target the extension's own pages or an FKN platform origin");
1495
- }, xt = ({ src: e, domains: t, lockdown: n }) => {
1541
+ if (Ot(e)) throw Error("attachFrame: refusing to target the extension's own pages or an FKN platform origin");
1542
+ }, kt = ({ src: e, domains: t, lockdown: n }) => {
1496
1543
  if (!(!n || t.length) && e && e !== "about:blank") throw Error("attachFrame: lockdown needs domains when the frame already has a src; pass domains or load it via goto");
1497
- }, St = {
1544
+ }, At = {
1498
1545
  scope: "embed.iframe",
1499
1546
  category: "embed",
1500
1547
  severity: 0,
1501
1548
  title: "Load another website inside this app",
1502
1549
  description: "Lets the app embed external pages directly inside its own view."
1503
- }, Ct = {
1550
+ }, jt = {
1504
1551
  scope: "embed.open",
1505
1552
  category: "embed",
1506
1553
  severity: 0,
1507
1554
  title: "Open a website inside this app",
1508
1555
  description: "Lets the app navigate to another site without leaving its window."
1509
- }, wt = (e) => {
1510
- let t = yt({
1556
+ }, Mt = (e) => {
1557
+ let t = Et({
1511
1558
  executor: e.executor,
1512
- modules: bt,
1559
+ modules: Dt,
1513
1560
  gate: e.gate
1514
1561
  }), n = (t, n = {}) => ($(t), e.goto(t, n)), r = () => e.url();
1515
1562
  return {
@@ -1517,21 +1564,21 @@ var Oe = class {
1517
1564
  goto: n,
1518
1565
  url: r
1519
1566
  };
1520
- }, Tt = "FKN_WEB_EXTENSION_ATTACH_FRAME_EVENT_KEY", Et = async ({ iframe: e, domains: t = [], syncCookies: n = !0, lockdown: r = !1 }) => {
1567
+ }, Nt = "FKN_WEB_EXTENSION_ATTACH_FRAME_EVENT_KEY", Pt = async ({ iframe: e, domains: t = [], syncCookies: n = !0, lockdown: r = !1 }) => {
1521
1568
  let i = crypto.randomUUID();
1522
- if ($(e.src), xt({
1569
+ if ($(e.src), kt({
1523
1570
  src: e.src,
1524
1571
  domains: t,
1525
1572
  lockdown: r
1526
1573
  }), await k(), !e.isConnected) throw Error("attachFrame: the iframe must be connected to the document before attaching");
1527
- e.dispatchEvent(new CustomEvent(Tt, { detail: i }));
1574
+ e.dispatchEvent(new CustomEvent(Nt, { detail: i }));
1528
1575
  let { executeLocator: a, highlightLocator: o, ensureLocatorPermission: s, goto: c } = await A.attachFrame({
1529
1576
  marker: i,
1530
1577
  domains: t,
1531
1578
  syncCookies: n,
1532
1579
  lockdown: r
1533
1580
  });
1534
- return wt({
1581
+ return Mt({
1535
1582
  executor: {
1536
1583
  execute: a,
1537
1584
  highlight: o
@@ -1543,10 +1590,10 @@ var Oe = class {
1543
1590
  }),
1544
1591
  url: () => e.src
1545
1592
  });
1546
- }, Dt = { request: (e) => A.requestPermissions(e.map((e) => ({
1593
+ }, Ft = { request: (e) => A.requestPermissions(e.map((e) => ({
1547
1594
  key: e.key,
1548
1595
  scope: e.scope ?? "",
1549
1596
  reason: e.reason
1550
1597
  }))) };
1551
1598
  //#endregion
1552
- export { fe as A, S as B, be as C, M as D, pe as E, oe as F, u as H, k as I, T as L, ue as M, E as N, _e as O, D as P, C as R, N as S, he as T, w as V, Ce as _, wt as a, Se as b, xt as c, Pe as d, Me as f, H as g, V as h, St as i, de as j, j as k, Q as l, Ne as m, Tt as n, Ct as o, Fe as p, Et as r, $ as s, Dt as t, B as u, Te as v, me as w, xe as x, we as y, x as z };
1599
+ export { j as A, x as B, N as C, he as D, _e as E, D as F, w as H, oe as I, k as L, de as M, ue as N, M as O, E as P, T as R, Se as S, ge as T, u as U, S as V, Fe as _, Mt as a, Te as b, kt as c, Be as d, Pe as f, B as g, H as h, At as i, fe as j, ye as k, Ot as l, V as m, Nt as n, jt as o, Re as p, Pt as r, $ as s, Ft as t, Le as u, we as v, xe as w, Ce as x, Ee as y, C as z };