@ghostlytools/cli 1.3.1 → 1.3.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 (60) hide show
  1. package/dist/assets/{api-TiB5QSG9.js → api-SYPJgFRU.js} +2 -2
  2. package/dist/assets/{api-Dq2QXQDk.js → api-aup3Amud.js} +9 -9
  3. package/dist/assets/{api-Dq2QXQDk.js.map → api-aup3Amud.js.map} +1 -1
  4. package/dist/assets/{apiKit-CA2x5GJF.js → apiKit-DYkVEs6r.js} +25 -29
  5. package/dist/assets/apiKit-DYkVEs6r.js.map +1 -0
  6. package/dist/assets/{apps-C-T8jeji.js → apps-DcZKu29s.js} +1 -1
  7. package/dist/assets/{apps-BxV9i_Y4.js → apps-Rbk2HHXb.js} +2 -2
  8. package/dist/assets/{apps-BxV9i_Y4.js.map → apps-Rbk2HHXb.js.map} +1 -1
  9. package/dist/assets/{arkade-C_qDmHnm.js → arkade-CuWlNnCz.js} +4 -4
  10. package/dist/assets/arkade-CuWlNnCz.js.map +1 -0
  11. package/dist/assets/{backup-CnMN2oUK.js → backup-CJWLDHuS.js} +4 -4
  12. package/dist/assets/{backup-CnMN2oUK.js.map → backup-CJWLDHuS.js.map} +1 -1
  13. package/dist/assets/{backup-Bugnn3Ue.js → backup-CSMw2GHv.js} +1 -1
  14. package/dist/assets/bark_ffi_wasm_bg-EY2uc0Bx.js.map +1 -1
  15. package/dist/assets/buttons-CGRqZ7z0.js +2 -0
  16. package/dist/assets/{buttons-CvNBzh2S.js → buttons-QEnAGWoC.js} +3 -3
  17. package/dist/assets/{buttons-CvNBzh2S.js.map → buttons-QEnAGWoC.js.map} +1 -1
  18. package/dist/assets/{envelope-WjingYSc.js → envelope-K27mzoyu.js} +2 -2
  19. package/dist/assets/{envelope-WjingYSc.js.map → envelope-K27mzoyu.js.map} +1 -1
  20. package/dist/assets/fedimint_client_wasm_bg-BtHHlFpp.js.map +1 -1
  21. package/dist/assets/{groupFiles-IEUW3DQz.js → groupFiles-DHTrTA4I.js} +43 -16
  22. package/dist/assets/groupFiles-DHTrTA4I.js.map +1 -0
  23. package/dist/assets/{host-CWt-jtqz.js → host-C7hA-Za7.js} +102 -34
  24. package/dist/assets/host-C7hA-Za7.js.map +1 -0
  25. package/dist/assets/{hyperdhtRelay-CPYwSLLS.js → hyperdhtRelay-BVoWY2ua.js} +2 -2
  26. package/dist/assets/{hyperdhtRelay-CPYwSLLS.js.map → hyperdhtRelay-BVoWY2ua.js.map} +1 -1
  27. package/dist/assets/{irohWeb-4oChIOIp.js → irohWeb-BJPk9bMn.js} +2 -2
  28. package/dist/assets/{irohWeb-4oChIOIp.js.map → irohWeb-BJPk9bMn.js.map} +1 -1
  29. package/dist/assets/{main-DbqcdShN.js → main-DC8cUkDx.js} +14 -14
  30. package/dist/assets/{main-DbqcdShN.js.map → main-DC8cUkDx.js.map} +1 -1
  31. package/dist/assets/{mainline-ZkiOnevs.js → mainline-CxbxpoU4.js} +2 -2
  32. package/dist/assets/{mainline-ZkiOnevs.js.map → mainline-CxbxpoU4.js.map} +1 -1
  33. package/dist/assets/{networkReason-CetKkTPo.js → networkReason-D42iNuUB.js} +2 -2
  34. package/dist/assets/{networkReason-CetKkTPo.js.map → networkReason-D42iNuUB.js.map} +1 -1
  35. package/dist/assets/{nwc-CgkqyvsE.js → nwc-Cm4sYgLv.js} +3 -3
  36. package/dist/assets/{nwc-CgkqyvsE.js.map → nwc-Cm4sYgLv.js.map} +1 -1
  37. package/dist/assets/{nwcProvider-4eVz_8HP.js → nwcProvider-0D7vdPDd.js} +2 -2
  38. package/dist/assets/{nwcProvider-4eVz_8HP.js.map → nwcProvider-0D7vdPDd.js.map} +1 -1
  39. package/dist/assets/{registry-OBJBnHVQ.js → registry-CLolR0kM.js} +1 -1
  40. package/dist/assets/{registry-DlAKO0Fy.js → registry-CVdSZW5l.js} +3 -3
  41. package/dist/assets/{registry-DlAKO0Fy.js.map → registry-CVdSZW5l.js.map} +1 -1
  42. package/dist/assets/{resolve-CouHhCpJ.js → resolve-BnlEajYz.js} +2 -2
  43. package/dist/assets/{resolve-CouHhCpJ.js.map → resolve-BnlEajYz.js.map} +1 -1
  44. package/dist/assets/{server-Ss0gJ-nw.js → server-CJNEKxzE.js} +112 -33
  45. package/dist/assets/server-CJNEKxzE.js.map +1 -0
  46. package/dist/assets/{src-DDzSERyc.js → src-yMUQvdyL.js} +157 -141
  47. package/dist/assets/src-yMUQvdyL.js.map +1 -0
  48. package/dist/assets/{turnRefs-B87dtrHM.js → turnRefs-B2a8to9q.js} +2 -2
  49. package/dist/assets/{turnRefs-B87dtrHM.js.map → turnRefs-B2a8to9q.js.map} +1 -1
  50. package/dist/assets/{usdt-Fj8CQO2z.js → usdt-DesFeDiG.js} +3 -3
  51. package/dist/assets/{usdt-Fj8CQO2z.js.map → usdt-DesFeDiG.js.map} +1 -1
  52. package/dist/ghostly.mjs +1 -1
  53. package/package.json +1 -1
  54. package/dist/assets/apiKit-CA2x5GJF.js.map +0 -1
  55. package/dist/assets/arkade-C_qDmHnm.js.map +0 -1
  56. package/dist/assets/buttons-Bj7Vf7Pn.js +0 -2
  57. package/dist/assets/groupFiles-IEUW3DQz.js.map +0 -1
  58. package/dist/assets/host-CWt-jtqz.js.map +0 -1
  59. package/dist/assets/server-Ss0gJ-nw.js.map +0 -1
  60. package/dist/assets/src-DDzSERyc.js.map +0 -1
@@ -7226,6 +7226,8 @@ function parseCommit$1(raw) {
7226
7226
  sig: c.sig
7227
7227
  };
7228
7228
  }
7229
+ /** Only shape, no signature or parent: a commit as kept, its fields alone (anything else it carried dropped); null when malformed. */
7230
+ var parseGroupCommit = parseCommit$1;
7229
7231
  /** The roster a commit must carry, given the previous one; null when the change is not allowed. */
7230
7232
  function expectedRoster(previous, kind, by, subject) {
7231
7233
  if (kind === "create") return previous === null && !subject ? [[by, "admin"]] : null;
@@ -8854,6 +8856,139 @@ var RateWindow = class {
8854
8856
  }
8855
8857
  };
8856
8858
  //#endregion
8859
+ //#region ../core/src/image.ts
8860
+ var IMAGE_LIMITS = {
8861
+ /** Pixels on either side: the most a JPEG can say, well past what anyone sends as a picture. */
8862
+ maxEdge: 65535,
8863
+ /** How much of a file is read for its size: past a JPEG's EXIF, thumbnails and colour profile. */
8864
+ headBytes: 262144
8865
+ };
8866
+ /** Whether a file is a picture, by its type. */
8867
+ function isImageMime(mime) {
8868
+ return mime.split(";")[0].trim().toLowerCase().startsWith("image/");
8869
+ }
8870
+ var edge = (n) => typeof n === "number" && Number.isSafeInteger(n) && n > 0 && n <= IMAGE_LIMITS.maxEdge;
8871
+ /** A peer's `image` description, or undefined when it is not one. It never refuses the file. */
8872
+ function parseImageMeta(value, mime) {
8873
+ if (mime !== void 0 && !isImageMime(mime)) return void 0;
8874
+ if (!value || typeof value !== "object" || Array.isArray(value)) return void 0;
8875
+ const { width, height } = value;
8876
+ return edge(width) && edge(height) ? {
8877
+ width,
8878
+ height
8879
+ } : void 0;
8880
+ }
8881
+ var u16be = (b, at) => b[at] << 8 | b[at + 1];
8882
+ var u16le = (b, at) => b[at] | b[at + 1] << 8;
8883
+ var u24le = (b, at) => b[at] | b[at + 1] << 8 | b[at + 2] << 16;
8884
+ var u32be = (b, at) => (b[at] << 24 >>> 0) + (b[at + 1] << 16) + (b[at + 2] << 8) + b[at + 3];
8885
+ var ascii = (b, at, text) => [...text].every((c, i) => b[at + i] === c.charCodeAt(0));
8886
+ var sized = (width, height) => edge(width) && edge(height) ? {
8887
+ width,
8888
+ height
8889
+ } : void 0;
8890
+ /** SOFn markers: every frame type but DHT (C4), JPG (C8) and DAC (CC). */
8891
+ var JPEG_FRAME = /* @__PURE__ */ new Set([
8892
+ 192,
8893
+ 193,
8894
+ 194,
8895
+ 195,
8896
+ 197,
8897
+ 198,
8898
+ 199,
8899
+ 201,
8900
+ 202,
8901
+ 203,
8902
+ 205,
8903
+ 206,
8904
+ 207
8905
+ ]);
8906
+ /** The EXIF orientation in an APP1 segment's TIFF block (1 when it says none). */
8907
+ function exifOrientation(b, tiff, end) {
8908
+ if (tiff + 8 > end) return 1;
8909
+ const little = ascii(b, tiff, "II");
8910
+ if (!little && !ascii(b, tiff, "MM")) return 1;
8911
+ const u16 = (at) => little ? u16le(b, at) : u16be(b, at);
8912
+ const u32 = (at) => little ? u16le(b, at) + u16le(b, at + 2) * 65536 : u32be(b, at);
8913
+ if (u16(tiff + 2) !== 42) return 1;
8914
+ const ifd = tiff + u32(tiff + 4);
8915
+ if (ifd + 2 > end) return 1;
8916
+ const count = u16(ifd);
8917
+ for (let i = 0; i < count; i++) {
8918
+ const entry = ifd + 2 + i * 12;
8919
+ if (entry + 12 > end) return 1;
8920
+ if (u16(entry) === 274) {
8921
+ const value = u16(entry + 8);
8922
+ return value >= 1 && value <= 8 ? value : 1;
8923
+ }
8924
+ }
8925
+ return 1;
8926
+ }
8927
+ function jpegSize(b) {
8928
+ let at = 2, orientation = 1;
8929
+ while (at + 4 <= b.length) {
8930
+ if (b[at] !== 255) return void 0;
8931
+ const marker = b[at + 1];
8932
+ if (marker === 255) {
8933
+ at++;
8934
+ continue;
8935
+ }
8936
+ if (marker === 1 || marker >= 208 && marker <= 215) {
8937
+ at += 2;
8938
+ continue;
8939
+ }
8940
+ if (marker === 217 || marker === 218) return void 0;
8941
+ const length = u16be(b, at + 2);
8942
+ if (length < 2) return void 0;
8943
+ const end = Math.min(b.length, at + 2 + length);
8944
+ if (marker === 225 && ascii(b, at + 4, "Exif\0\0")) orientation = exifOrientation(b, at + 10, end);
8945
+ if (JPEG_FRAME.has(marker)) {
8946
+ if (at + 9 > b.length) return void 0;
8947
+ const height = u16be(b, at + 5), width = u16be(b, at + 7);
8948
+ return orientation >= 5 ? sized(height, width) : sized(width, height);
8949
+ }
8950
+ at += 2 + length;
8951
+ }
8952
+ }
8953
+ function webpSize(b) {
8954
+ if (b.length < 30) return void 0;
8955
+ if (ascii(b, 12, "VP8 ")) {
8956
+ if (b[23] !== 157 || b[24] !== 1 || b[25] !== 42) return void 0;
8957
+ return sized(u16le(b, 26) & 16383, u16le(b, 28) & 16383);
8958
+ }
8959
+ if (ascii(b, 12, "VP8L")) {
8960
+ if (b[20] !== 47) return void 0;
8961
+ const bits = b[21] | b[22] << 8 | b[23] << 16 | b[24] << 24;
8962
+ return sized((bits & 16383) + 1, (bits >>> 14 & 16383) + 1);
8963
+ }
8964
+ if (ascii(b, 12, "VP8X")) return sized(u24le(b, 24) + 1, u24le(b, 27) + 1);
8965
+ }
8966
+ /**
8967
+ * A picture's size as it is shown, read from its first bytes (PNG, JPEG, GIF, WebP), or undefined when they do not
8968
+ * say. Only the header is read: a JPEG whose frame header sits past `IMAGE_LIMITS.headBytes` goes without.
8969
+ */
8970
+ function imageSize(head) {
8971
+ const b = head;
8972
+ try {
8973
+ if (b.length >= 24 && b[0] === 137 && ascii(b, 1, "PNG\r\n\n") && ascii(b, 12, "IHDR")) return sized(u32be(b, 16), u32be(b, 20));
8974
+ if (b.length >= 10 && (ascii(b, 0, "GIF87a") || ascii(b, 0, "GIF89a"))) return sized(u16le(b, 6), u16le(b, 8));
8975
+ if (b.length >= 4 && b[0] === 255 && b[1] === 216 && b[2] === 255) return jpegSize(b);
8976
+ if (b.length >= 16 && ascii(b, 0, "RIFF") && ascii(b, 8, "WEBP")) return webpSize(b);
8977
+ } catch {}
8978
+ }
8979
+ /**
8980
+ * The description a picture is sent with, read from the start of the file, or undefined when it is not a picture
8981
+ * or its first bytes do not say (it then goes without one).
8982
+ */
8983
+ async function readImageMeta(source, mime) {
8984
+ if (!isImageMime(mime)) return void 0;
8985
+ try {
8986
+ return imageSize(new Uint8Array(await source.slice(0, IMAGE_LIMITS.headBytes).arrayBuffer()));
8987
+ } catch {
8988
+ return;
8989
+ }
8990
+ }
8991
+ //#endregion
8857
8992
  //#region ../core/src/video.ts
8858
8993
  var VIDEO_LIMITS = {
8859
8994
  /** The poster's bytes: with the rest of an offer, a frame stays far below the 60 KiB a session carries. */
@@ -8877,7 +9012,8 @@ var JPEG_START = [
8877
9012
  ];
8878
9013
  /**
8879
9014
  * A peer's `video` description, or undefined when it is not one. It never refuses the file. A poster that is
8880
- * too large or not a JPEG is dropped on its own; the length and size are kept.
9015
+ * too large, not a JPEG, or says it is more pixels than a sender draws (`posterEdge`) is dropped on its own; the
9016
+ * length and size are kept. It is shown before the file is accepted, so a few bytes must not ask for a huge bitmap.
8881
9017
  */
8882
9018
  function parseVideoMeta(value, mime) {
8883
9019
  if (mime !== void 0 && !isVideoMime(mime)) return void 0;
@@ -8893,7 +9029,8 @@ function parseVideoMeta(value, mime) {
8893
9029
  };
8894
9030
  if (typeof poster === "string" && poster.length <= Math.ceil(VIDEO_LIMITS.maxPosterBytes * 4 / 3) && BASE64URL.test(poster)) try {
8895
9031
  const bytes = fromBase64Url(poster);
8896
- if (bytes.length <= VIDEO_LIMITS.maxPosterBytes && JPEG_START.every((b, i) => bytes[i] === b)) meta.poster = poster;
9032
+ const size = bytes.length <= VIDEO_LIMITS.maxPosterBytes && JPEG_START.every((b, i) => bytes[i] === b) ? imageSize(bytes) : void 0;
9033
+ if (size && Math.max(size.width, size.height) <= VIDEO_LIMITS.posterEdge) meta.poster = poster;
8897
9034
  } catch {}
8898
9035
  return meta;
8899
9036
  }
@@ -9198,139 +9335,6 @@ var FileTransfers = class {
9198
9335
  }
9199
9336
  };
9200
9337
  //#endregion
9201
- //#region ../core/src/image.ts
9202
- var IMAGE_LIMITS = {
9203
- /** Pixels on either side: the most a JPEG can say, well past what anyone sends as a picture. */
9204
- maxEdge: 65535,
9205
- /** How much of a file is read for its size: past a JPEG's EXIF, thumbnails and colour profile. */
9206
- headBytes: 262144
9207
- };
9208
- /** Whether a file is a picture, by its type. */
9209
- function isImageMime(mime) {
9210
- return mime.split(";")[0].trim().toLowerCase().startsWith("image/");
9211
- }
9212
- var edge = (n) => typeof n === "number" && Number.isSafeInteger(n) && n > 0 && n <= IMAGE_LIMITS.maxEdge;
9213
- /** A peer's `image` description, or undefined when it is not one. It never refuses the file. */
9214
- function parseImageMeta(value, mime) {
9215
- if (mime !== void 0 && !isImageMime(mime)) return void 0;
9216
- if (!value || typeof value !== "object" || Array.isArray(value)) return void 0;
9217
- const { width, height } = value;
9218
- return edge(width) && edge(height) ? {
9219
- width,
9220
- height
9221
- } : void 0;
9222
- }
9223
- var u16be = (b, at) => b[at] << 8 | b[at + 1];
9224
- var u16le = (b, at) => b[at] | b[at + 1] << 8;
9225
- var u24le = (b, at) => b[at] | b[at + 1] << 8 | b[at + 2] << 16;
9226
- var u32be = (b, at) => (b[at] << 24 >>> 0) + (b[at + 1] << 16) + (b[at + 2] << 8) + b[at + 3];
9227
- var ascii = (b, at, text) => [...text].every((c, i) => b[at + i] === c.charCodeAt(0));
9228
- var sized = (width, height) => edge(width) && edge(height) ? {
9229
- width,
9230
- height
9231
- } : void 0;
9232
- /** SOFn markers: every frame type but DHT (C4), JPG (C8) and DAC (CC). */
9233
- var JPEG_FRAME = /* @__PURE__ */ new Set([
9234
- 192,
9235
- 193,
9236
- 194,
9237
- 195,
9238
- 197,
9239
- 198,
9240
- 199,
9241
- 201,
9242
- 202,
9243
- 203,
9244
- 205,
9245
- 206,
9246
- 207
9247
- ]);
9248
- /** The EXIF orientation in an APP1 segment's TIFF block (1 when it says none). */
9249
- function exifOrientation(b, tiff, end) {
9250
- if (tiff + 8 > end) return 1;
9251
- const little = ascii(b, tiff, "II");
9252
- if (!little && !ascii(b, tiff, "MM")) return 1;
9253
- const u16 = (at) => little ? u16le(b, at) : u16be(b, at);
9254
- const u32 = (at) => little ? u16le(b, at) + u16le(b, at + 2) * 65536 : u32be(b, at);
9255
- if (u16(tiff + 2) !== 42) return 1;
9256
- const ifd = tiff + u32(tiff + 4);
9257
- if (ifd + 2 > end) return 1;
9258
- const count = u16(ifd);
9259
- for (let i = 0; i < count; i++) {
9260
- const entry = ifd + 2 + i * 12;
9261
- if (entry + 12 > end) return 1;
9262
- if (u16(entry) === 274) {
9263
- const value = u16(entry + 8);
9264
- return value >= 1 && value <= 8 ? value : 1;
9265
- }
9266
- }
9267
- return 1;
9268
- }
9269
- function jpegSize(b) {
9270
- let at = 2, orientation = 1;
9271
- while (at + 4 <= b.length) {
9272
- if (b[at] !== 255) return void 0;
9273
- const marker = b[at + 1];
9274
- if (marker === 255) {
9275
- at++;
9276
- continue;
9277
- }
9278
- if (marker === 1 || marker >= 208 && marker <= 215) {
9279
- at += 2;
9280
- continue;
9281
- }
9282
- if (marker === 217 || marker === 218) return void 0;
9283
- const length = u16be(b, at + 2);
9284
- if (length < 2) return void 0;
9285
- const end = Math.min(b.length, at + 2 + length);
9286
- if (marker === 225 && ascii(b, at + 4, "Exif\0\0")) orientation = exifOrientation(b, at + 10, end);
9287
- if (JPEG_FRAME.has(marker)) {
9288
- if (at + 9 > b.length) return void 0;
9289
- const height = u16be(b, at + 5), width = u16be(b, at + 7);
9290
- return orientation >= 5 ? sized(height, width) : sized(width, height);
9291
- }
9292
- at += 2 + length;
9293
- }
9294
- }
9295
- function webpSize(b) {
9296
- if (b.length < 30) return void 0;
9297
- if (ascii(b, 12, "VP8 ")) {
9298
- if (b[23] !== 157 || b[24] !== 1 || b[25] !== 42) return void 0;
9299
- return sized(u16le(b, 26) & 16383, u16le(b, 28) & 16383);
9300
- }
9301
- if (ascii(b, 12, "VP8L")) {
9302
- if (b[20] !== 47) return void 0;
9303
- const bits = b[21] | b[22] << 8 | b[23] << 16 | b[24] << 24;
9304
- return sized((bits & 16383) + 1, (bits >>> 14 & 16383) + 1);
9305
- }
9306
- if (ascii(b, 12, "VP8X")) return sized(u24le(b, 24) + 1, u24le(b, 27) + 1);
9307
- }
9308
- /**
9309
- * A picture's size as it is shown, read from its first bytes (PNG, JPEG, GIF, WebP), or undefined when they do not
9310
- * say. Only the header is read: a JPEG whose frame header sits past `IMAGE_LIMITS.headBytes` goes without.
9311
- */
9312
- function imageSize(head) {
9313
- const b = head;
9314
- try {
9315
- if (b.length >= 24 && b[0] === 137 && ascii(b, 1, "PNG\r\n\n") && ascii(b, 12, "IHDR")) return sized(u32be(b, 16), u32be(b, 20));
9316
- if (b.length >= 10 && (ascii(b, 0, "GIF87a") || ascii(b, 0, "GIF89a"))) return sized(u16le(b, 6), u16le(b, 8));
9317
- if (b.length >= 4 && b[0] === 255 && b[1] === 216 && b[2] === 255) return jpegSize(b);
9318
- if (b.length >= 16 && ascii(b, 0, "RIFF") && ascii(b, 8, "WEBP")) return webpSize(b);
9319
- } catch {}
9320
- }
9321
- /**
9322
- * The description a picture is sent with, read from the start of the file, or undefined when it is not a picture
9323
- * or its first bytes do not say (it then goes without one).
9324
- */
9325
- async function readImageMeta(source, mime) {
9326
- if (!isImageMime(mime)) return void 0;
9327
- try {
9328
- return imageSize(new Uint8Array(await source.slice(0, IMAGE_LIMITS.headBytes).arrayBuffer()));
9329
- } catch {
9330
- return;
9331
- }
9332
- }
9333
- //#endregion
9334
9338
  //#region ../core/src/dhtFiles.ts
9335
9339
  /**
9336
9340
  * A file's bubble on the DHT floor (WISP 403 § Files): while the contact is away, a file's offer (its name, size, type,
@@ -16930,7 +16934,7 @@ var CarriedTransport = class {
16930
16934
  var GROUP_FILE_LIMITS = {
16931
16935
  /** The largest file a group takes. */
16932
16936
  maxBytes: 104857600,
16933
- /** A file this size or smaller is fetched without asking (voice messages always are, up to `VOICE_LIMITS`). */
16937
+ /** A file this size or smaller is fetched without asking, a voice message too (one recorded is well inside it). */
16934
16938
  autoBytes: 8388608,
16935
16939
  /** What a device keeps of a group's files it fetched without asking; past it, every file is asked about. */
16936
16940
  autoBytesPerGroup: 268435456,
@@ -16964,6 +16968,11 @@ var GROUP_FILE_LIMITS = {
16964
16968
  * left for the next holder too.
16965
16969
  */
16966
16970
  wantWaitMs: 3e4,
16971
+ /**
16972
+ * How long a served transfer with all its bytes confirmed waits for the member's word that its check passed once the
16973
+ * member's next want has overtaken it.
16974
+ */
16975
+ doneWaitMs: 5e3,
16967
16976
  /** A file session closes this long after its last transfer ends. */
16968
16977
  sessionIdleMs: 6e4,
16969
16978
  /** File sessions opening at once, and open at once, all groups together. */
@@ -17053,11 +17062,11 @@ function groupFileFallback(file) {
17053
17062
  return `${fileMessageText(file)} (${formatFileSize(file.size)}): update Ghostly to get files in groups`;
17054
17063
  }
17055
17064
  /**
17056
- * Whether a device fetches a file by itself (WISP 503 § Automatic and asked downloads): a voice message always, any
17057
- * other file up to `autoBytes` while what it took that way from the group stays within `autoBytesPerGroup`.
17065
+ * Whether a device fetches a file by itself (WISP 503 § Automatic and asked downloads): up to `autoBytes` while what
17066
+ * it took that way from the group stays within `autoBytesPerGroup`. A voice message too: one recorded (15 minutes at
17067
+ * most, about 3.6 MB) always fits, and a bigger file the author called a voice message is asked about like any other.
17058
17068
  */
17059
17069
  function fetchesByItself(file, keptAutomatically, limits = GROUP_FILE_LIMITS) {
17060
- if (file.voice) return true;
17061
17070
  return file.size <= limits.autoBytes && keptAutomatically + file.size <= limits.autoBytesPerGroup;
17062
17071
  }
17063
17072
  //#endregion
@@ -22304,6 +22313,10 @@ function parsePayParams(body, destination) {
22304
22313
  if (body.tag !== "payRequest") throw new Error(`${destination.domain} answered with something other than a pay request${typeof body.tag === "string" ? ` (${reason(body.tag)})` : ""}`);
22305
22314
  if (typeof body.callback !== "string") throw new Error("The pay request has no callback");
22306
22315
  const callback = acceptUrl(body.callback);
22316
+ if (callback.host !== new URL(destination.url).host) {
22317
+ if (callback.protocol !== "https:") throw new Error("Lightning addresses and LNURLs must use HTTPS");
22318
+ if (isLocalHost(callback.hostname)) throw new Error(`${destination.domain} asks for the invoice at a local address`);
22319
+ }
22307
22320
  const { minSendable, maxSendable, metadata, commentAllowed } = body;
22308
22321
  if (!Number.isSafeInteger(minSendable) || !Number.isSafeInteger(maxSendable) || minSendable <= 0 || maxSendable < minSendable) throw new Error("The pay request has invalid amount limits");
22309
22322
  const minSat = Math.ceil(minSendable / 1e3), maxSat = Math.floor(maxSendable / 1e3);
@@ -22722,6 +22735,8 @@ function assertTokenUnits(amount) {
22722
22735
  function assertWholeSats(amount) {
22723
22736
  if (!Number.isSafeInteger(amount) || amount <= 0 || amount > 0x775f05a074000) throw new Error("Enter a positive whole amount in sats");
22724
22737
  }
22738
+ /** Arkade and Bark addresses are bech32m with `ark` on Bitcoin and `tark` on the test networks (one case only). */
22739
+ var arkAddressPrefix = (network) => network === "bitcoin" ? "ark1" : "tark1";
22725
22740
  function validatePaymentTarget(value, now = Date.now()) {
22726
22741
  if (!value || typeof value !== "object") throw new Error("Invalid payment target");
22727
22742
  const t = value;
@@ -22760,6 +22775,7 @@ function validatePaymentTarget(value, now = Date.now()) {
22760
22775
  "regtest"
22761
22776
  ].includes(t.network)) throw new Error("Unsupported Bark network");
22762
22777
  if (typeof t.address !== "string" || !t.address || t.address.length > 4096 || typeof t.provider !== "string" || t.provider.length > 512) throw new Error("Invalid payment destination");
22778
+ if ((t.method === "arkade" || t.method === "bark") && (t.address !== t.address.toLowerCase() && t.address !== t.address.toUpperCase() || !t.address.toLowerCase().startsWith(arkAddressPrefix(t.network)))) throw new Error(`That is not an Ark address on ${t.network === "bitcoin" ? "Bitcoin" : t.network}`);
22763
22779
  if (t.method !== "bitcoin" && t.method !== "fedimint" && t.method !== "spark") {
22764
22780
  const url = new URL(t.provider);
22765
22781
  if (url.username || url.password || url.search || url.hash || url.protocol !== "https:" && !(url.protocol === "http:" && [
@@ -30986,6 +31002,6 @@ function appStoreDecision(held, read) {
30986
31002
  return read.digest === held.digest ? "same" : "equivocation";
30987
31003
  }
30988
31004
  //#endregion
30989
- export { COMMUNITY_EDIT_FRAME as $, cardUrl as $a, budgetRetryMs as $c, PeerProofs as $i, GROUP_WANT_FRAME as $n, HTTP_SERVICE_PROTO as $o, deviceWakeRequest as $r, enrollCancelFrame as $s, didDhtFromPublicKey as $t, CommunitySession as A, COMMUNITY_REACTION_FRAME as Aa, TURN_PUT_WINDOW_MS as Ac, normalizeDomain as Ai, pubkyProofPath as An, DirectPathWatch as Ao, rankHubs as Ar, handoffStreamKey as As, verifyAtprotoRecordProof as At, knockRecords as B, wireReaction as Ba, signTurnPacket as Bc, IDENTITY_MAX_EVIDENCE as Bi, isFederationId as Bn, LIMITS as Bo, TYPING_REFRESH_MS as Br, readHandoffVerified as Bs, didWebDocumentUrl as Bt, sha256Paced as C, EDIT_BUFFER_MS as Ca, deviceEchoNonce as Cc, decodeDnsResponse as Ci, PUBKY_PROOF_MAX_BYTES as Cn, GROUP_MEMBER_CAP as Co, freshHubs as Cr, handoffEphemeral as Cs, atprotoProofRkey as Ct, openGroupTyping as D, parseLinkPreview as Da, newDeviceSetSecret as Dc, encodeDnsQuery as Di, normalizePubkyKey as Dn, rosterHas as Do, mergeLobby as Dr, handoffPakeFrame as Ds, parseAtprotoDidDocument as Dt, groupTypingEpoch as E, dhtEditId as Ea, devicePingFrame as Ec, domainWellKnownFile as Ei, newPubkyProofFolder as En, commitHash as Eo, mergeBeacon as Er, handoffOfferFrame as Es, normalizeAtprotoHandle as Et, KNOCK_TTL_MS as F, queueReaction as Fa, TURN_LAST_SEQUENCE as Fc, wellKnownUrl as Fi, decodeBolt11 as Fn, presenceSeenAt as Fo, ChatFiles as Fr, readHandoffDone as Fs, checkDidJws as Ft, groupWakeFrame as G, ITEM_STATES as Ga, turnStatedVerifier as Gc, boundVerifiedIdentity as Gi, LIVENESS_PING_MS as Gn, answersOffer as Go, PIN_LIMITS as Gr, setAckFrame as Gs, normalizeDid as Gt, readKnocks as H, readReply as Ha, turnInstance as Hc, IDENTITY_REVOCATION_LABEL as Hi, parseFedimintRequestPayload as Hn, encodeControl as Ho, sanitizeTypingStatus as Hr, SET_ACK as Hs, didWebFileNames as Ht, decodeGroupEntryLink as I, reactionEmoji as Ia, TURN_MAX as Ic, CapsExchange as Ii, ENDPOINT as In, GhostlyHttpError as Io, FILE_LIMITS as Ir, readHandoffHave as Is, checkDidSignature as It, GROUP_LIMITS as J, RUN_RESULTS as Ja, RelayTransport as Jc, identityStatement as Ji, pairedMessageFrame as Jn, callSignalHeardAt as Jo, pinIsNewer as Jr, verifySetUpdate as Js, parseDidSignaturePaste as Jt, groupWakes as K, PR_CHECKS as Ka, turnVerifierMark as Kc, emptyIdentityLedger as Ki, PAIRED_FRAME_TOO_LARGE as Kn, buildSdpFromSignal as Ko, mayPin as Kr, setUpdateFrame as Ks, parseDid as Kt, encodeGroupEntryLink as L, reactionIsNewer as La, firstDeviceSetSecret as Lc, DHT_TEXT_CAPABILITY as Li, cashuRequestPayload as Ln, formatLocalTarget as Lo, transferEnded as Lr, readHandoffHello as Ls, didGhostlyServiceEntry as Lt, communityHasFrame as M, REACTION_LIMITS as Ma, TURN_SETTLE_MS as Mc, recordsFromWellKnown as Mi, pubkyHomeserverOf as Mn, DHT_POLL_INTERVALS as Mo, readBeaconHead as Mr, newHandoffId as Ms, DID_FILE_MAX_BYTES as Mt, decodeCommunityLink as N, ReactionWindow as Na, classifyTurnRead as Nc, recordsName as Ni, requestLnurlInvoice as Nn, EXPECT_PEER_MS as No, readLobby as Nr, readHandoffAck as Ns, DID_JWS_MAX_LENGTH as Nt, sealGroupTyping as O, forwardedAgain as Oa, seedSigner as Oc, isPublicAddress as Oi, pubkyProofCapability as On, verifyCommitSignature as Oo, newerHead as Or, handoffReleaseFrame as Os, shortAtprotoDid as Ot, encodeCommunityLink as P, nextReactionNumber as Pa, turnPutSummary as Pc, txtValue as Pi, resolveLightningDestination as Pn, RELAY_POLL_INTERVALS as Po, shouldBeHub as Pr, readHandoffCancel as Ps, DidError as Pt, frameBytes as Q, cardLine as Qa, traceLink as Qc, lastSharedWithMe as Qi, GROUP_HAVE_FRAME as Qn, emptyLinkRecords as Qo, WakeLimiter as Qr, ENROLL_PROOF as Qs, didDhtDocument as Qt, entryParams as R, readReaction as Ra, nextTurnPosition as Rc, capsDescriptors as Ri, fedimintRequestPayload as Rn, parseLocalTarget as Ro, transferStalled as Rr, readHandoffPake as Rs, didJwsAlg as Rt, readAppBundleAsync as S, parseVideoMeta as Sa, deviceEchoFrame as Sc, DOMAIN_FILE_MAX_BYTES as Si, isBitcoinAddress as Sn, readCanonicalJson as So, doorHubs as Sr, handoffDigest as Ss, atprotoProofRecord as St, GroupTypingBoard as T, RateWindow as Ta, deviceLinkPairing as Tc, domainTxtRecord as Ti, isPubkyProofFolder as Tn, MEMBER_KEY as To, lobbyRecords as Tr, handoffManifestFrames as Ts, isAtprotoDid as Tt, GROUP_WAKE_FRAME as U, replySnippet as Ua, turnKeys as Uc, IdentityCheckUnavailable as Ui, GhostLink as Un, CALL_SIGNAL_MAX_AGE_MS as Uo, typingActivity as Ur, SET_UPDATE as Us, didWebFileUrl as Ut, mergeKnocks as V, pairedReplyAuthor as Va, signTurnRelease as Vc, IDENTITY_MAX_VALIDITY as Vi, parseCashuRequestPayload as Vn, decodeControl as Vo, TypingSender as Vr, sealHandoffPiece as Vs, didWebFile as Vt, GroupWakeLimiter as W, BUTTON_ID as Wa, turnName as Wc, IdentityExchange as Wi, INVITE_TAKEN as Wn, RTC_CONFIG as Wo, GROUP_PIN_FRAME as Wr, readSetUpdate as Ws, didWebHost as Wt, GROUP_READ_NOTE as X, appCardId as Xa, normalizeRelayUrl as Xc, receivedIdentityStatus as Xi, engineText as Xn, parseCallSignal as Xo, readPin as Xr, ENROLL_GRANT as Xs, staticDidDocument as Xt, GROUP_REACTED_FRAME as Y, STATUS_CARD_LIMITS as Ya, currentRelays as Yc, newIdentityBinding as Yi, engineError as Yn, extractParamsFromSdp as Yo, pinNumberHolds as Yr, ENROLL_DONE as Ys, signingKeys as Yt, GroupSession as Z, buttonLabelClash as Za, setLinkTraceSink as Zc, revokesIdentity as Zi, GROUP_FILE_LIMITS as Zn, signalHasVideo as Zo, WAKE_CALL_INTERVAL_MS as Zr, ENROLL_HELLO as Zs, strictBase64Url as Zt, assembleAppBundle as _, VOICE_LIMITS as _a, inviteOwnership as _c, HoldKeys as _i, randomBytes as _l, walletNetworkOf as _n, readAppRevocations as _o, meshHubs as _r, handoffBusyFrame as _s, ATPROTO_DECLARED_SCOPE as _t, planAppUpdate as a, irohRelayUrl as aa, enrollProofFrame as ac, vapidKeysMatch as ai, newerPacket as al, EVM_TEST_CHAINS as an, heardTime as ao, readGroupHave as ar, HANDOFF_HAVE as as, groupName as at, pacer as b, parseVoiceMeta as ba, ENROLL_CAPABILITY as bc, newMailbox as bi, utf8Decode as bl, sparkAddressKind as bn, canonicalJson as bo, beaconKeys as br, handoffContextProof as bs, ATPROTO_PROOF_SCOPE as bt, readAppStore as c, peekDhtMailbox as ca, verifyEnrollProof as cc, isAppVersion as ci, createIdentity as cl, SEPOLIA_TEST_USDT as cn, APP_PREFIXES as co, CarriedTransport as cr, HANDOFF_PAKE as cs, SshSigError as ct, APP_BUNDLE_LIMITS as d, parseImageMeta as da, readDeviceInvite as dc, EDIT_CAPABILITY as di, publicKeyFromZ32 as dl, USDT_PUBLIC_RPC as dn, appRef as do, SIGNAL_HOLD_MS as dr, HANDOFF_TIMINGS as ds, sameSshKey as dt, emptyProofLedger as ea, enrollCancelReason as ec, newWakeToken as ei, isDiscoveryBudgetError as el, encodeDidDhtDeactivated as en, checkStatusCard as eo, GROUP_WANT_NO_FRAME as er, LEGACY_SERVICES as es, GROUP_EDIT_FRAME as et, APP_BUNDLE_MAGIC as f, readImageMeta as fa, OwnInviteError as fc, STATUS_CARD_CAPABILITY as fi, verify as fl, WALLET_NETWORKS as fn, checkAppRevokeStatement as fo, SIGNAL_REPLY_MS as fr, HANDOFF_VERIFIED as fs, sshSignCommand as ft, appViewOf as g, PLAYABLE_AUDIO as ga, inviteLink as gc, HOLD_LIMITS as gi, fromBase64Url as gl, validatePaymentTarget as gn, readAppRevocation as go, mayBeHub as gr, handoffAttemptSucceeded as gs, decodeAnyBitcoinAddress as gt, appDigest as h, sanitizeMime as ha, encodeInviteCode as hc, HOLD_DATED_BACK_MS as hi, bytesEqual as hl, formatPaymentAmount as hn, isAppRef as ho, MESH_HUBS as hr, handoffAttemptFailed as hs, BitcoinAddressError as ht, checkAppBeforeRun as i, irohDescriptor as ia, enrollHelloFrame as ic, checkPushEndpoint as ii, createRelayPayload as il, ETHEREUM_USDT as in, claimedTime as io, readGroupFileMeta as ir, HANDOFF_DONE as is, mentionsMember as it, GROUP_READ_NOTE_COMMUNITY as j, GROUP_REACTION_FRAME as ja, TURN_RAISE_READ_TIMEOUT_MS as jc, recordsFromTxt as ji, homeserverWebEndpoint as jn, AWAITING_PEER_MS as jo, readBeacon as jr, handoffVersions as js, DID_DOCUMENT_MAX_BYTES as jt, COMMUNITY_LIMITS as k, readForwarded as ka, webCryptoSigner as kc, nip05RootKey as ki, pubkyProofFile as kn, edgeParams as ko, pickHubs as kr, handoffRetryAfter as ks, AtprotoProofError as kt, readAppStoreSteps as l, DHT_FILE_CAPABILITY as la, createDeviceInvite as lc, APPS_CAPABILITY as li, identityFromSeed as ll, SEPOLIA_TEST_USDT_FAUCET as ln, APP_STATEMENT_LIMITS as lo, GROUP_SIGNAL_FRAME as lr, HANDOFF_PIECE_BYTES as ls, parseSshPublicKey as lt, APP_PERMISSIONS as m, sanitizeFileName as ma, decodeInviteCode as mc, HOLD_CAPABILITY as mi, sanitizeAvatar as ml, assertWholeSats as mn, isAppKey as mo, readGroupSignal as mr, handoffAttemptAllowed as ms, verifyBitcoinMessage as mt, appStoreDecision as n, TRANSPORTS as na, enrollDoneFrame as nc, relayRequest as ni, PacketTooLargeError as nl, resolveDidDht as nn, statusCardText as no, groupFileFallback as nr, HANDOFF_ACK as ns, carryMentions as nt, APP_STORE_LIMITS as o, DHT_FILE_TOO_LARGE as oa, readEnrollGrant as oc, APP_DATA_MAX_BYTES as oi, openRelayPayload as ol, ONCHAIN_PROVIDER as on, receivedTimestamp as oo, readGroupWant as or, HANDOFF_HELLO as os, SSHSIG_MAX_ARMOR as ot, APP_ICON_PATH as p, formatFileSize as pa, createChatInvite as pc, UPGRADE_CAPABILITY as pi, MAX_AVATAR_LENGTH as pl, assertTokenUnits as pn, isAppHash as po, groupSignalFrame as pr, filePartName as ps, verifySshSignature as pt, parseGroupWakeFrame as q, PR_STATES as qa, DEFAULT_RELAYS as qc, identityRevocationValue as qi, pairedMessageFits as qn, callRtcConfig as qo, nextPinNumber as qr, signTombstone as qs, parseDidDocument as qt, appUpdateDecision as r, automaticTransport as ra, enrollGrantFrame as rc, wakeRequest as ri, RELAY_PAYLOAD_MAX_BYTES as rl, signDidDhtPacket as rn, arrivalKey as ro, isGroupMessageId as rr, HANDOFF_CANCEL as rs, parseCommunityEdit as rt, checkAppStoreIndex as s, DHT_MESSAGE_TTL as sa, readEnrollHello as sc, chatAppId as si, parseRelayPayload as sl, PaymentPreflightError as sn, shownTime as so, readGroupWantNo as sr, HANDOFF_OFFER as ss, SSHSIG_NAMESPACE as st, appRevocationFor as t, validExternalKey as ta, enrollDigits as tc, parseWakeFrame as ti, withRequestOptions as tl, encodeDidDhtPacket as tn, sameButtonText as to, fetchesByItself as tr, serviceIdFromName as ts, GROUP_EDIT_TEXT_BYTES as tt, signAppStore as u, dhtFileId as ua, deviceInviteJoinerParams as uc, BUTTONS_CAPABILITY as ui, identityFromSeedB64 as ul, TEST_USDT_FAUCET_AMOUNT as un, appFingerprint as uo, SIGNAL_FRESH_MS as ur, HANDOFF_REQUEST as us, parseSshSignature as ut, checkAppManifest as v, baseMime as va, ownInviteRefusal as vc, HoldRefusedError as vi, toBase64Url as vl, SPARK_NETWORKS as vn, signAppObject as vo, pickMeshHubs as vr, handoffCancelFrame as vs, ATPROTO_FULL_SCOPE as vt, GROUP_TYPING_FRAME as w, EDIT_RATE_WINDOW_MS as wa, deviceKeyZ32 as wc, dnsProofName as wi, isPubkyKey as wn, MAX_GROUP_CHAIN as wo, lobbyKeys as wr, handoffHelloFrame as ws, checkAtprotoProofRecord as wt, readAppBundle as x, voicePeaksOf as xa, HANDOFF_CAPABILITY as xc, readManifest as xi, utf8Encode as xl, sparkInvoiceDetails as xn, canonicalJsonBytes as xo, beaconRecords as xr, handoffDataFrame as xs, atprotoDidMethod as xt, isAppUrl as y, fileMessageText as ya, DEVICES_CAPABILITY as yc, isHoldUrl as yi, toZ32 as yl, SPARK_PROVIDER as yn, signAppRevocation as yo, COMMUNITY_TOPOLOGY as yr, handoffContext as ys, ATPROTO_PROOF_COLLECTION as yt, knockIdentity as z, validReactionNumber as za, readTurnPacket as zc, dialDescriptors as zi, findEndpoint as zn, webLocalFetch as zo, TYPING_KINDS as zr, readHandoffTurnFrame as zs, didSignedMessages as zt };
31005
+ export { COMMUNITY_EDIT_FRAME as $, cardLine as $a, normalizeRelayUrl as $c, lastSharedWithMe as $i, GROUP_HAVE_FRAME as $n, parseCallSignal as $o, WakeLimiter as $r, ENROLL_GRANT as $s, didDhtFromPublicKey as $t, CommunitySession as A, readForwarded as Aa, newDeviceSetSecret as Ac, nip05RootKey as Ai, pubkyProofFile as An, rosterHas as Ao, pickHubs as Ar, handoffPakeFrame as As, verifyAtprotoRecordProof as At, knockRecords as B, validReactionNumber as Ba, firstDeviceSetSecret as Bc, dialDescriptors as Bi, findEndpoint as Bn, formatLocalTarget as Bo, TYPING_KINDS as Br, readHandoffHello as Bs, didWebDocumentUrl as Bt, sha256Paced as C, readImageMeta as Ca, ENROLL_CAPABILITY as Cc, DOMAIN_FILE_MAX_BYTES as Ci, utf8Decode as Cl, isBitcoinAddress as Cn, readCanonicalJson as Co, doorHubs as Cr, handoffContextProof as Cs, atprotoProofRkey as Ct, openGroupTyping as D, dhtEditId as Da, deviceKeyZ32 as Dc, domainWellKnownFile as Di, newPubkyProofFolder as Dn, commitHash as Do, mergeBeacon as Dr, handoffHelloFrame as Ds, parseAtprotoDidDocument as Dt, groupTypingEpoch as E, RateWindow as Ea, deviceEchoNonce as Ec, domainTxtRecord as Ei, isPubkyProofFolder as En, MEMBER_KEY as Eo, lobbyRecords as Er, handoffEphemeral as Es, normalizeAtprotoHandle as Et, KNOCK_TTL_MS as F, nextReactionNumber as Fa, TURN_SETTLE_MS as Fc, txtValue as Fi, resolveLightningDestination as Fn, DHT_POLL_INTERVALS as Fo, shouldBeHub as Fr, newHandoffId as Fs, checkDidJws as Ft, groupWakeFrame as G, BUTTON_ID as Ga, turnInstance as Gc, IdentityExchange as Gi, INVITE_TAKEN as Gn, encodeControl as Go, GROUP_PIN_FRAME as Gr, SET_ACK as Gs, normalizeDid as Gt, readKnocks as H, pairedReplyAuthor as Ha, readTurnPacket as Hc, IDENTITY_MAX_VALIDITY as Hi, parseCashuRequestPayload as Hn, webLocalFetch as Ho, TypingSender as Hr, readHandoffTurnFrame as Hs, didWebFileNames as Ht, decodeGroupEntryLink as I, queueReaction as Ia, classifyTurnRead as Ic, wellKnownUrl as Ii, decodeBolt11 as In, EXPECT_PEER_MS as Io, ChatFiles as Ir, readHandoffAck as Is, checkDidSignature as It, GROUP_LIMITS as J, PR_STATES as Ja, turnStatedVerifier as Jc, identityRevocationValue as Ji, pairedMessageFits as Jn, answersOffer as Jo, nextPinNumber as Jr, setAckFrame as Js, parseDidSignaturePaste as Jt, groupWakes as K, ITEM_STATES as Ka, turnKeys as Kc, boundVerifiedIdentity as Ki, LIVENESS_PING_MS as Kn, CALL_SIGNAL_MAX_AGE_MS as Ko, PIN_LIMITS as Kr, SET_UPDATE as Ks, parseDid as Kt, encodeGroupEntryLink as L, reactionEmoji as La, turnPutSummary as Lc, CapsExchange as Li, ENDPOINT as Ln, RELAY_POLL_INTERVALS as Lo, FILE_LIMITS as Lr, readHandoffCancel as Ls, didGhostlyServiceEntry as Lt, communityHasFrame as M, GROUP_REACTION_FRAME as Ma, webCryptoSigner as Mc, recordsFromTxt as Mi, homeserverWebEndpoint as Mn, edgeParams as Mo, readBeacon as Mr, handoffRetryAfter as Ms, DID_FILE_MAX_BYTES as Mt, decodeCommunityLink as N, REACTION_LIMITS as Na, TURN_PUT_WINDOW_MS as Nc, recordsFromWellKnown as Ni, pubkyHomeserverOf as Nn, DirectPathWatch as No, readBeaconHead as Nr, handoffStreamKey as Ns, DID_JWS_MAX_LENGTH as Nt, sealGroupTyping as O, parseLinkPreview as Oa, deviceLinkPairing as Oc, encodeDnsQuery as Oi, normalizePubkyKey as On, parseGroupCommit as Oo, mergeLobby as Or, handoffManifestFrames as Os, shortAtprotoDid as Ot, encodeCommunityLink as P, ReactionWindow as Pa, TURN_RAISE_READ_TIMEOUT_MS as Pc, recordsName as Pi, requestLnurlInvoice as Pn, AWAITING_PEER_MS as Po, readLobby as Pr, handoffVersions as Ps, DidError as Pt, frameBytes as Q, buttonLabelClash as Qa, currentRelays as Qc, revokesIdentity as Qi, GROUP_FILE_LIMITS as Qn, extractParamsFromSdp as Qo, WAKE_CALL_INTERVAL_MS as Qr, ENROLL_DONE as Qs, didDhtDocument as Qt, entryParams as R, reactionIsNewer as Ra, TURN_LAST_SEQUENCE as Rc, DHT_TEXT_CAPABILITY as Ri, cashuRequestPayload as Rn, presenceSeenAt as Ro, transferEnded as Rr, readHandoffDone as Rs, didJwsAlg as Rt, readAppBundleAsync as S, parseImageMeta as Sa, DEVICES_CAPABILITY as Sc, readManifest as Si, toZ32 as Sl, sparkInvoiceDetails as Sn, canonicalJsonBytes as So, beaconRecords as Sr, handoffContext as Ss, atprotoProofRecord as St, GroupTypingBoard as T, EDIT_RATE_WINDOW_MS as Ta, deviceEchoFrame as Tc, dnsProofName as Ti, isPubkyKey as Tn, MAX_GROUP_CHAIN as To, lobbyKeys as Tr, handoffDigest as Ts, isAtprotoDid as Tt, GROUP_WAKE_FRAME as U, readReply as Ua, signTurnPacket as Uc, IDENTITY_REVOCATION_LABEL as Ui, parseFedimintRequestPayload as Un, LIMITS as Uo, sanitizeTypingStatus as Ur, readHandoffVerified as Us, didWebFileUrl as Ut, mergeKnocks as V, wireReaction as Va, nextTurnPosition as Vc, IDENTITY_MAX_EVIDENCE as Vi, isFederationId as Vn, parseLocalTarget as Vo, TYPING_REFRESH_MS as Vr, readHandoffPake as Vs, didWebFile as Vt, GroupWakeLimiter as W, replySnippet as Wa, signTurnRelease as Wc, IdentityCheckUnavailable as Wi, GhostLink as Wn, decodeControl as Wo, typingActivity as Wr, sealHandoffPiece as Ws, didWebHost as Wt, GROUP_READ_NOTE as X, STATUS_CARD_LIMITS as Xa, DEFAULT_RELAYS as Xc, newIdentityBinding as Xi, engineError as Xn, callRtcConfig as Xo, pinNumberHolds as Xr, signTombstone as Xs, staticDidDocument as Xt, GROUP_REACTED_FRAME as Y, RUN_RESULTS as Ya, turnVerifierMark as Yc, identityStatement as Yi, pairedMessageFrame as Yn, buildSdpFromSignal as Yo, pinIsNewer as Yr, setUpdateFrame as Ys, signingKeys as Yt, GroupSession as Z, appCardId as Za, RelayTransport as Zc, receivedIdentityStatus as Zi, engineText as Zn, callSignalHeardAt as Zo, readPin as Zr, verifySetUpdate as Zs, strictBase64Url as Zt, assembleAppBundle as _, baseMime as _a, decodeInviteCode as _c, HOLD_LIMITS as _i, sanitizeAvatar as _l, validatePaymentTarget as _n, readAppRevocation as _o, mayBeHub as _r, handoffAttemptAllowed as _s, ATPROTO_DECLARED_SCOPE as _t, planAppUpdate as a, irohDescriptor as aa, enrollDoneFrame as ac, checkPushEndpoint as ai, PacketTooLargeError as al, EVM_TEST_CHAINS as an, claimedTime as ao, readGroupFileMeta as ar, HANDOFF_ACK as as, groupName as at, pacer as b, voicePeaksOf as ba, inviteOwnership as bc, isHoldUrl as bi, randomBytes as bl, SPARK_PROVIDER as bn, signAppRevocation as bo, COMMUNITY_TOPOLOGY as br, handoffBusyFrame as bs, ATPROTO_PROOF_SCOPE as bt, readAppStore as c, DHT_MESSAGE_TTL as ca, enrollProofFrame as cc, chatAppId as ci, newerPacket as cl, SEPOLIA_TEST_USDT as cn, shownTime as co, readGroupWantNo as cr, HANDOFF_HAVE as cs, SshSigError as ct, APP_BUNDLE_LIMITS as d, dhtFileId as da, verifyEnrollProof as dc, BUTTONS_CAPABILITY as di, createIdentity as dl, USDT_PUBLIC_RPC as dn, appFingerprint as do, SIGNAL_FRESH_MS as dr, HANDOFF_PAKE as ds, sameSshKey as dt, PeerProofs as ea, ENROLL_HELLO as ec, deviceWakeRequest as ei, setLinkTraceSink as el, encodeDidDhtDeactivated as en, cardUrl as eo, GROUP_WANT_FRAME as er, signalHasVideo as es, GROUP_EDIT_FRAME as et, APP_BUNDLE_MAGIC as f, formatFileSize as fa, createDeviceInvite as fc, EDIT_CAPABILITY as fi, identityFromSeed as fl, WALLET_NETWORKS as fn, appRef as fo, SIGNAL_HOLD_MS as fr, HANDOFF_PIECE_BYTES as fs, sshSignCommand as ft, appViewOf as g, VOICE_LIMITS as ga, createChatInvite as gc, HOLD_DATED_BACK_MS as gi, MAX_AVATAR_LENGTH as gl, formatPaymentAmount as gn, isAppRef as go, MESH_HUBS as gr, filePartName as gs, decodeAnyBitcoinAddress as gt, appDigest as h, PLAYABLE_AUDIO as ha, OwnInviteError as hc, HOLD_CAPABILITY as hi, verify as hl, assertWholeSats as hn, isAppKey as ho, readGroupSignal as hr, HANDOFF_VERIFIED as hs, BitcoinAddressError as ht, checkAppBeforeRun as i, automaticTransport as ia, enrollDigits as ic, wakeRequest as ii, withRequestOptions as il, ETHEREUM_USDT as in, arrivalKey as io, isGroupMessageId as ir, serviceIdFromName as is, mentionsMember as it, GROUP_READ_NOTE_COMMUNITY as j, COMMUNITY_REACTION_FRAME as ja, seedSigner as jc, normalizeDomain as ji, pubkyProofPath as jn, verifyCommitSignature as jo, rankHubs as jr, handoffReleaseFrame as js, DID_DOCUMENT_MAX_BYTES as jt, COMMUNITY_LIMITS as k, forwardedAgain as ka, devicePingFrame as kc, isPublicAddress as ki, pubkyProofCapability as kn, rosterAdmin as ko, newerHead as kr, handoffOfferFrame as ks, AtprotoProofError as kt, readAppStoreSteps as l, peekDhtMailbox as la, readEnrollGrant as lc, isAppVersion as li, openRelayPayload as ll, SEPOLIA_TEST_USDT_FAUCET as ln, APP_PREFIXES as lo, CarriedTransport as lr, HANDOFF_HELLO as ls, parseSshPublicKey as lt, APP_PERMISSIONS as m, sanitizeMime as ma, readDeviceInvite as mc, UPGRADE_CAPABILITY as mi, publicKeyFromZ32 as ml, assertTokenUnits as mn, isAppHash as mo, groupSignalFrame as mr, HANDOFF_TIMINGS as ms, verifyBitcoinMessage as mt, appStoreDecision as n, validExternalKey as na, enrollCancelFrame as nc, parseWakeFrame as ni, budgetRetryMs as nl, resolveDidDht as nn, sameButtonText as no, fetchesByItself as nr, HTTP_SERVICE_PROTO as ns, carryMentions as nt, APP_STORE_LIMITS as o, irohRelayUrl as oa, enrollGrantFrame as oc, vapidKeysMatch as oi, RELAY_PAYLOAD_MAX_BYTES as ol, ONCHAIN_PROVIDER as on, heardTime as oo, readGroupHave as or, HANDOFF_CANCEL as os, SSHSIG_MAX_ARMOR as ot, APP_ICON_PATH as p, sanitizeFileName as pa, deviceInviteJoinerParams as pc, STATUS_CARD_CAPABILITY as pi, identityFromSeedB64 as pl, arkAddressPrefix as pn, checkAppRevokeStatement as po, SIGNAL_REPLY_MS as pr, HANDOFF_REQUEST as ps, verifySshSignature as pt, parseGroupWakeFrame as q, PR_CHECKS as qa, turnName as qc, emptyIdentityLedger as qi, PAIRED_FRAME_TOO_LARGE as qn, RTC_CONFIG as qo, mayPin as qr, readSetUpdate as qs, parseDidDocument as qt, appUpdateDecision as r, TRANSPORTS as ra, enrollCancelReason as rc, relayRequest as ri, isDiscoveryBudgetError as rl, signDidDhtPacket as rn, statusCardText as ro, groupFileFallback as rr, LEGACY_SERVICES as rs, parseCommunityEdit as rt, checkAppStoreIndex as s, DHT_FILE_TOO_LARGE as sa, enrollHelloFrame as sc, APP_DATA_MAX_BYTES as si, createRelayPayload as sl, PaymentPreflightError as sn, receivedTimestamp as so, readGroupWant as sr, HANDOFF_DONE as ss, SSHSIG_NAMESPACE as st, appRevocationFor as t, emptyProofLedger as ta, ENROLL_PROOF as tc, newWakeToken as ti, traceLink as tl, encodeDidDhtPacket as tn, checkStatusCard as to, GROUP_WANT_NO_FRAME as tr, emptyLinkRecords as ts, GROUP_EDIT_TEXT_BYTES as tt, signAppStore as u, DHT_FILE_CAPABILITY as ua, readEnrollHello as uc, APPS_CAPABILITY as ui, parseRelayPayload as ul, TEST_USDT_FAUCET_AMOUNT as un, APP_STATEMENT_LIMITS as uo, GROUP_SIGNAL_FRAME as ur, HANDOFF_OFFER as us, parseSshSignature as ut, checkAppManifest as v, fileMessageText as va, encodeInviteCode as vc, HoldKeys as vi, bytesEqual as vl, walletNetworkOf as vn, readAppRevocations as vo, meshHubs as vr, handoffAttemptFailed as vs, ATPROTO_FULL_SCOPE as vt, GROUP_TYPING_FRAME as w, EDIT_BUFFER_MS as wa, HANDOFF_CAPABILITY as wc, decodeDnsResponse as wi, utf8Encode as wl, PUBKY_PROOF_MAX_BYTES as wn, GROUP_MEMBER_CAP as wo, freshHubs as wr, handoffDataFrame as ws, checkAtprotoProofRecord as wt, readAppBundle as x, parseVideoMeta as xa, ownInviteRefusal as xc, newMailbox as xi, toBase64Url as xl, sparkAddressKind as xn, canonicalJson as xo, beaconKeys as xr, handoffCancelFrame as xs, atprotoDidMethod as xt, isAppUrl as y, parseVoiceMeta as ya, inviteLink as yc, HoldRefusedError as yi, fromBase64Url as yl, SPARK_NETWORKS as yn, signAppObject as yo, pickMeshHubs as yr, handoffAttemptSucceeded as ys, ATPROTO_PROOF_COLLECTION as yt, knockIdentity as z, readReaction as za, TURN_MAX as zc, capsDescriptors as zi, fedimintRequestPayload as zn, GhostlyHttpError as zo, transferStalled as zr, readHandoffHave as zs, didSignedMessages as zt };
30990
31006
 
30991
- //# sourceMappingURL=src-DDzSERyc.js.map
31007
+ //# sourceMappingURL=src-yMUQvdyL.js.map