@fkn/lib 0.9.67 → 0.9.68

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 (38) hide show
  1. package/{account-DBagcNfd.d.ts → account-CXUwroRM.d.ts} +1 -1
  2. package/account.d.ts +2 -2
  3. package/{api-BlYVLNjo.d.ts → api-DhwJz0vo.d.ts} +35 -1
  4. package/api.d.ts +2 -2
  5. package/cloud/dgram.d.ts +1 -1
  6. package/cloud/dns.d.ts +2 -2
  7. package/cloud/fetch.d.ts +1 -1
  8. package/cloud/http.d.ts +1 -1
  9. package/cloud/net.d.ts +1 -1
  10. package/{cloud-BCRo1U9I.d.ts → cloud-P8d7GYmM.d.ts} +5 -5
  11. package/cloud.d.ts +6 -6
  12. package/{contract-CJk3vE9P.d.ts → contract-CDdIE_Es.d.ts} +49 -2
  13. package/contract.d.ts +1 -1
  14. package/{dgram-DSgktX7M.d.ts → dgram-CPQqam5Z.d.ts} +3 -3
  15. package/dgram.d.ts +1 -1
  16. package/{dns-BwS2LM9b.d.ts → dns-_NCe2YLS.d.ts} +1 -1
  17. package/dns.d.ts +2 -2
  18. package/{http-D8ulR5RD.d.ts → http-D3wvnIVo.d.ts} +1 -1
  19. package/http.d.ts +1 -1
  20. package/index.cjs +1 -1
  21. package/index.d.ts +11 -11
  22. package/index.js +1 -1
  23. package/{net-BCEAHCZe.d.ts → net-v_6ythjK.d.ts} +3 -3
  24. package/net.d.ts +1 -1
  25. package/package.json +1 -1
  26. package/packages-CTqprdnz.cjs +1 -0
  27. package/{packages-Cws_rcgf.js → packages-CrD5Sa28.js} +72 -69
  28. package/{packages-BlJK4kSJ.d.ts → packages-SwO4CxMl.d.ts} +19 -6
  29. package/packages.cjs +1 -1
  30. package/packages.d.ts +3 -3
  31. package/packages.js +1 -1
  32. package/{proxy-CfgavvzR.d.ts → proxy-CzP07me0.d.ts} +2 -2
  33. package/{relay-choice-D5Jeevab.d.ts → relay-choice-DB1F7bcn.d.ts} +1 -1
  34. package/{rooms-0vp7HaAY.d.ts → rooms-3XplwXzb.d.ts} +1 -1
  35. package/rooms.d.ts +2 -2
  36. package/{storage-CidJUc0x.d.ts → storage-C38adB-z.d.ts} +1 -1
  37. package/storage.d.ts +2 -2
  38. package/packages-DT8vPB5_.cjs +0 -1
@@ -1,4 +1,4 @@
1
- import { a as AccountChange } from "./contract-CJk3vE9P.js";
1
+ import { a as AccountChange } from "./contract-CDdIE_Es.js";
2
2
  declare namespace account_d_exports {
3
3
  export { AccountChange, AccountInfo, info, login, logout, onChange };
4
4
  }
package/account.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- import { a as AccountChange } from "./contract-CJk3vE9P.js";
2
- import { a as logout, i as login, o as onChange, r as info, t as AccountInfo } from "./account-DBagcNfd.js";
1
+ import { a as AccountChange } from "./contract-CDdIE_Es.js";
2
+ import { a as logout, i as login, o as onChange, r as info, t as AccountInfo } from "./account-CXUwroRM.js";
3
3
  export { type AccountChange, AccountInfo, info, login, logout, onChange };
@@ -1,5 +1,5 @@
1
1
  import { D as RelayChoice } from "./index-HMfzm6dF.js";
2
- import { D as IpFamily, H as ProxyFetchInput, I as PackagesErrorCode, N as OverlayState, Nt as StoragePutWire, P as PackageQuery, Q as RoomClaimOptions, R as PickOptions, T as InstallOptions, Ut as UdpDatagram, V as ProxyFetchInit, Vt as TcpSocketOptions, Wt as UdpSocketOptions, X as Resolvers, Xt as WriteData, a as AccountChange, at as RoomJoinOptions, b as FrameConsentAnswer, c as AdoptRequest, d as ConflictRequest, dt as RoomPermission, ht as RoomsErrorCode, kt as StorageErrorCode, l as AdoptState, m as ConnectOptions, mt as RoomType, o as AccountPinOptions, p as ConnectAvailability, rt as RoomEvent, st as RoomMailbox, u as ConflictChoice, ut as RoomOpenOptions, x as FrameConsentRequest, z as Placement, zt as TcpSocketListenerOptions } from "./contract-CJk3vE9P.js";
2
+ import { D as IpFamily, H as ProxyFetchInput, I as PackagesErrorCode, N as OverlayState, Nt as StoragePutWire, P as PackageQuery, Q as RoomClaimOptions, R as PickOptions, T as InstallOptions, Ut as UdpDatagram, V as ProxyFetchInit, Vt as TcpSocketOptions, Wt as UdpSocketOptions, X as Resolvers, Xt as WriteData, a as AccountChange, at as RoomJoinOptions, b as FrameConsentAnswer, c as AdoptRequest, d as ConflictRequest, dt as RoomPermission, ht as RoomsErrorCode, kt as StorageErrorCode, l as AdoptState, m as ConnectOptions, mt as RoomType, o as AccountPinOptions, p as ConnectAvailability, rt as RoomEvent, st as RoomMailbox, u as ConflictChoice, ut as RoomOpenOptions, x as FrameConsentRequest, z as Placement, zt as TcpSocketListenerOptions } from "./contract-CDdIE_Es.js";
3
3
  import { o as TcpSocketOption, x as UdpSocketOption } from "./wire-DhmLnYEU.js";
4
4
  import { Remote } from "osra";
5
5
  type EpochListener<T> = (remote: T, epoch: number) => void;
@@ -248,10 +248,26 @@ declare const onApiEpoch: (listener: EpochListener<{
248
248
  version: string | null;
249
249
  installedAt: number;
250
250
  appId?: string;
251
+ temporary?: true;
251
252
  };
252
253
  } | {
253
254
  declined: true;
254
255
  }>;
256
+ installTemporary?: ((uri: string, options?: InstallOptions | undefined) => Promise<{
257
+ error: PackagesErrorCode;
258
+ message: string;
259
+ } | {
260
+ installed: {
261
+ uri: string;
262
+ name: string;
263
+ version: string | null;
264
+ installedAt: number;
265
+ appId?: string;
266
+ temporary?: true;
267
+ };
268
+ } | {
269
+ declined: true;
270
+ }>) | undefined;
255
271
  frame: (uri: string) => Promise<{
256
272
  error: PackagesErrorCode;
257
273
  message: string;
@@ -270,6 +286,7 @@ declare const onApiEpoch: (listener: EpochListener<{
270
286
  version: string | null;
271
287
  installedAt: number;
272
288
  appId?: string;
289
+ temporary?: true;
273
290
  }[];
274
291
  }>;
275
292
  uninstall: (uri: string) => Promise<{
@@ -1632,10 +1649,26 @@ declare const currentApiEpoch: () => {
1632
1649
  version: string | null;
1633
1650
  installedAt: number;
1634
1651
  appId?: string;
1652
+ temporary?: true;
1635
1653
  };
1636
1654
  } | {
1637
1655
  declined: true;
1638
1656
  }>;
1657
+ installTemporary?: ((uri: string, options?: InstallOptions | undefined) => Promise<{
1658
+ error: PackagesErrorCode;
1659
+ message: string;
1660
+ } | {
1661
+ installed: {
1662
+ uri: string;
1663
+ name: string;
1664
+ version: string | null;
1665
+ installedAt: number;
1666
+ appId?: string;
1667
+ temporary?: true;
1668
+ };
1669
+ } | {
1670
+ declined: true;
1671
+ }>) | undefined;
1639
1672
  frame: (uri: string) => Promise<{
1640
1673
  error: PackagesErrorCode;
1641
1674
  message: string;
@@ -1654,6 +1687,7 @@ declare const currentApiEpoch: () => {
1654
1687
  version: string | null;
1655
1688
  installedAt: number;
1656
1689
  appId?: string;
1690
+ temporary?: true;
1657
1691
  }[];
1658
1692
  }>;
1659
1693
  uninstall: (uri: string) => Promise<{
package/api.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- import { X as Resolvers } from "./contract-CJk3vE9P.js";
2
- import { a as apiLastCall, c as currentApiEpoch, i as apiInFlight, l as hasTransport, n as BrokerUnreachableError, o as apiPromise, r as OwnChannelUnavailableError, s as apiWithin, t as API_DEADLINE_MS, u as onApiEpoch } from "./api-BlYVLNjo.js";
1
+ import { X as Resolvers } from "./contract-CDdIE_Es.js";
2
+ import { a as apiLastCall, c as currentApiEpoch, i as apiInFlight, l as hasTransport, n as BrokerUnreachableError, o as apiPromise, r as OwnChannelUnavailableError, s as apiWithin, t as API_DEADLINE_MS, u as onApiEpoch } from "./api-DhwJz0vo.js";
3
3
  export { API_DEADLINE_MS, BrokerUnreachableError, OwnChannelUnavailableError, type Resolvers, apiInFlight, apiLastCall, apiPromise, apiWithin, currentApiEpoch, hasTransport, onApiEpoch };
package/cloud/dgram.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { n as _default, r as createSocket, t as Socket } from "../dgram-DSgktX7M.js";
1
+ import { n as _default, r as createSocket, t as Socket } from "../dgram-CPQqam5Z.js";
2
2
  export { Socket, createSocket, _default as default };
package/cloud/dns.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- import { s as AddressLookupResult } from "../contract-CJk3vE9P.js";
2
- import { n as lookup } from "../dns-BwS2LM9b.js";
1
+ import { s as AddressLookupResult } from "../contract-CDdIE_Es.js";
2
+ import { n as lookup } from "../dns-_NCe2YLS.js";
3
3
  export { type AddressLookupResult, lookup };
package/cloud/fetch.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { t as cloudFetch } from "../proxy-CfgavvzR.js";
1
+ import { t as cloudFetch } from "../proxy-CzP07me0.js";
2
2
  export { cloudFetch as fetch };
package/cloud/http.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { a as IncomingMessage, c as RequestListener, d as ServerResponse, f as ServerResponseOptions, g as globalAgent, h as get, i as HTTPParser, l as STATUS_CODES, m as createServer, n as ClientRequest, o as METHODS, p as _default, r as ClientRequestArgs, s as ParsedHead, t as Agent, u as Server, v as request } from "../http-D8ulR5RD.js";
1
+ import { a as IncomingMessage, c as RequestListener, d as ServerResponse, f as ServerResponseOptions, g as globalAgent, h as get, i as HTTPParser, l as STATUS_CODES, m as createServer, n as ClientRequest, o as METHODS, p as _default, r as ClientRequestArgs, s as ParsedHead, t as Agent, u as Server, v as request } from "../http-D3wvnIVo.js";
2
2
  export { Agent, ClientRequest, ClientRequestArgs, HTTPParser, IncomingMessage, METHODS, ParsedHead, RequestListener, STATUS_CODES, Server, ServerResponse, ServerResponseOptions, _default, _default as default, createServer, get, globalAgent, request };
package/cloud/net.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { a as createConnection, c as isIP, i as connect, l as isIPv4, n as Socket, o as createServer, r as _default, t as Server, u as isIPv6 } from "../net-BCEAHCZe.js";
1
+ import { a as createConnection, c as isIP, i as connect, l as isIPv4, n as Socket, o as createServer, r as _default, t as Server, u as isIPv6 } from "../net-v_6ythjK.js";
2
2
  export { Server, Socket, _default, _default as default, connect, createConnection, createServer, isIP, isIPv4, isIPv6 };
@@ -1,10 +1,10 @@
1
1
  import { r as AttachFrameFunction } from "./index-HMfzm6dF.js";
2
- import { t as cloudFetch } from "./proxy-CfgavvzR.js";
3
- import { t as dns_d_exports } from "./dns-BwS2LM9b.js";
2
+ import { t as cloudFetch } from "./proxy-CzP07me0.js";
3
+ import { t as dns_d_exports } from "./dns-_NCe2YLS.js";
4
4
  import { n as fs_d_exports } from "./fs-ChOYC6VD.js";
5
- import { s as net_d_exports } from "./net-BCEAHCZe.js";
6
- import { i as dgram_d_exports } from "./dgram-DSgktX7M.js";
7
- import { _ as http_d_exports } from "./http-D8ulR5RD.js";
5
+ import { s as net_d_exports } from "./net-v_6ythjK.js";
6
+ import { i as dgram_d_exports } from "./dgram-CPQqam5Z.js";
7
+ import { _ as http_d_exports } from "./http-D3wvnIVo.js";
8
8
  /**
9
9
  * Attaches the render proxy to an iframe the app mounted, or opens it in a window of its own with
10
10
  * `{ window }`. A window opens before the first await, so call this directly in a click handler.
package/cloud.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- import { t as cloudFetch } from "./proxy-CfgavvzR.js";
2
- import { a as attachFrame, i as quota, r as QuotaStatus, t as available } from "./cloud-BCRo1U9I.js";
3
- import { t as dns_d_exports } from "./dns-BwS2LM9b.js";
1
+ import { t as cloudFetch } from "./proxy-CzP07me0.js";
2
+ import { a as attachFrame, i as quota, r as QuotaStatus, t as available } from "./cloud-P8d7GYmM.js";
3
+ import { t as dns_d_exports } from "./dns-_NCe2YLS.js";
4
4
  import { n as fs_d_exports } from "./fs-ChOYC6VD.js";
5
- import { s as net_d_exports } from "./net-BCEAHCZe.js";
6
- import { i as dgram_d_exports } from "./dgram-DSgktX7M.js";
7
- import { _ as http_d_exports } from "./http-D8ulR5RD.js";
5
+ import { s as net_d_exports } from "./net-v_6ythjK.js";
6
+ import { i as dgram_d_exports } from "./dgram-CPQqam5Z.js";
7
+ import { _ as http_d_exports } from "./http-D3wvnIVo.js";
8
8
  export { type QuotaStatus, attachFrame, available, dgram_d_exports as dgram, dns_d_exports as dns, cloudFetch as fetch, fs_d_exports as fs, http_d_exports as http, net_d_exports as net, quota };
@@ -500,6 +500,11 @@ type InstalledPackage = {
500
500
  installedAt: number;
501
501
  /** the app id this pin last verified as, version-free. Absent until a verified resolve has run. */
502
502
  appId?: string;
503
+ /**
504
+ * `true` on a temporary install (`InstallOptions.temporary`), absent on a kept one and on anything an
505
+ * older fkn.app answers, so read it with `=== true`. A package both kept and temporary reads as kept.
506
+ */
507
+ temporary?: true;
503
508
  };
504
509
  type PickOptions = {
505
510
  /** untrusted, rendered as text in the picker header */
@@ -514,9 +519,41 @@ type InstallOptions = {
514
519
  /**
515
520
  * Re-pin an existing record to whatever the source now calls latest, instead of answering the
516
521
  * record already held. A host page pinning its own package on every load is what this exists for.
517
- * An unreachable source keeps the record rather than dropping it.
522
+ * An unreachable source keeps the record rather than dropping it. A temporary install stays temporary.
518
523
  */
519
524
  latest?: boolean;
525
+ /**
526
+ * Install for this tab only, writing no install record. The package connects, mounts and lists like a
527
+ * kept one, and asks exactly what a kept install asks: the confirm, or with `noConfirm` the notice.
528
+ *
529
+ * It lasts as long as the tab: a reload keeps it, another tab does not have it, and closing the tab
530
+ * ends it. The exceptions are the browser's own copies of a tab: on Chromium, Duplicate Tab, Reopen
531
+ * Closed Tab and a `window.open` that keeps its opener carry it along, and the copy then lives on its
532
+ * own. A link's `target=_blank` carries nothing, and neither does Firefox's `window.open`.
533
+ *
534
+ * Signing out of the app ends it, on the app's other websites too wherever the sign out reaches them.
535
+ * One installed after the sign out stays until the next one.
536
+ *
537
+ * Within one tab it follows the app between its websites fkn.dev holds as verified, as long as they
538
+ * share a site (anime.fkn.app to movies.fkn.app). A website on another domain reads other storage and
539
+ * does not have it, so carry the package on the link there and install it again.
540
+ *
541
+ * Over a package already kept this changes nothing and answers the kept record. `install()` without
542
+ * this option, and without `latest`, keeps a temporary package, behind what a kept install asks, and
543
+ * replaces the temporary record. To turn a kept install temporary, uninstall it and install it
544
+ * temporary at the version it had. That ends its connections, so connect again, and takes it off the
545
+ * app's other tabs. An install that fails there, offline say, leaves the package uninstalled.
546
+ *
547
+ * ```ts
548
+ * await packages.uninstall(uri)
549
+ * await packages.install(uri, { temporary: true, noConfirm: true, version: kept.version ?? undefined })
550
+ * ```
551
+ *
552
+ * An older fkn.app cannot do this, and `install` then throws a PackagesError with code 'unsupported'
553
+ * and installs nothing. To know beforehand, which the uninstall above needs, ask
554
+ * `await packages.supportsTemporary?.() === true`: the `?.` covers an @fkn/lib older than this option.
555
+ */
556
+ temporary?: boolean;
520
557
  };
521
558
  type ConnectOptions = {
522
559
  /** opaque contract tag delivered to the package's onConnect, e.g. 'stub-source@1' */
@@ -541,7 +578,7 @@ type Placement = {
541
578
  /** the placeholder's corner radii, so the frame follows a rounded container */
542
579
  radius?: Radii;
543
580
  };
544
- type PackagesErrorCode = 'invalid' | 'not-installed' | 'unaddressable' | 'timeout' | 'unavailable' | 'denied';
581
+ type PackagesErrorCode = 'invalid' | 'not-installed' | 'unaddressable' | 'timeout' | 'unavailable' | 'denied' | 'unsupported';
545
582
  type PackagesFail = {
546
583
  error: PackagesErrorCode;
547
584
  message: string;
@@ -1393,6 +1430,16 @@ type Resolvers = {
1393
1430
  } | {
1394
1431
  declined: true;
1395
1432
  }>;
1433
+ /**
1434
+ * `install` with `temporary: true`. A member of its own, and a function, because that is what the
1435
+ * lib's facade can detect: a broker predating it reads undefined and is never asked, where its
1436
+ * `install` would ignore the option and keep the package.
1437
+ */
1438
+ installTemporary?: (uri: string, options?: InstallOptions) => Promise<PackagesFail | {
1439
+ installed: InstalledPackage;
1440
+ } | {
1441
+ declined: true;
1442
+ }>;
1396
1443
  frame: (uri: string) => Promise<PackagesFail | MountDescriptor>;
1397
1444
  list: () => Promise<{
1398
1445
  results: InstalledPackage[];
package/contract.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  import { D as RelayChoice, d as CookieMatchWire, u as ClearCookiesWire } from "./index-HMfzm6dF.js";
2
- import { $ as RoomCreateOptions, A as MiddleGotoOptions, At as StorageFail, B as ProxyFetch, Bt as TcpSocketListenerResult, C as FrameMessageRelay, Ct as SetOverlayHost, D as IpFamily, Dt as ShellJarUnreachable, E as InstalledPackage, Et as ShellGotoOptions, F as PackageResult, Ft as StoredHandle, G as RELAY_HEADER, Gt as UdpSocketResult, H as ProxyFetchInput, Ht as TcpSocketResult, I as PackagesErrorCode, It as StoredObject, J as Radii, Jt as WINDOW_JAR_MODE_TIMEOUT_MS, K as RELAY_UNAVAILABLE, Kt as WINDOW_HANDSHAKE_TIMEOUT_MS, L as PackagesFail, Lt as StoredPage, M as OverlayRect, Mt as StoragePutOptions, N as OverlayState, Nt as StoragePutWire, O as JAR_ANCHOR_MESSAGE, Ot as StorageEntry, P as PackageQuery, Pt as StorageQuota, Q as RoomClaimOptions, Qt as JarSeedCookie, R as PickOptions, Rt as SurfaceRect, S as FrameFetchScope, St as STORAGE_REFUSALS, T as InstallOptions, Tt as ShellFrameMessage, U as Quota, Ut as UdpDatagram, V as ProxyFetchInit, Vt as TcpSocketOptions, W as RELAY_CHOICE_UNSUPPORTED, Wt as UdpSocketOptions, X as Resolvers, Xt as WriteData, Y as RelayResolution, Yt as WindowMiddleControl, Z as RoomBacklog, Zt as JarSeed, _ as DnsLookup, _t as SHELL_ATTACH_ERROR, a as AccountChange, at as RoomJoinOptions, b as FrameConsentAnswer, bt as SHELL_JAR_MESSAGE, c as AdoptRequest, ct as RoomMember, d as ConflictRequest, dt as RoomPermission, et as RoomDefaults, f as ConflictSide, ft as RoomPermissions, g as DisplayLevel, gt as RoomsFail, h as DisplayCause, ht as RoomsErrorCode, i as Account, it as RoomHandle, j as MountDescriptor, jt as StorageProgress, k as MiddleControl, kt as StorageErrorCode, l as AdoptState, lt as RoomMessage, m as ConnectOptions, mt as RoomType, n as ATTACH_WINDOW_KEY, nt as RoomEnvelope, o as AccountPinOptions, ot as RoomJson, p as ConnectAvailability, pt as RoomSchema, q as ROOM_TEMPORARY_MS, qt as WINDOW_HELLO_TIMEOUT_MS, r as ATTACH_WINDOW_MESSAGE, rt as RoomEvent, s as AddressLookupResult, st as RoomMailbox, t as ATTACH_FRAME_KEY, tt as RoomEnd, u as ConflictChoice, ut as RoomOpenOptions, v as EncryptionState, vt as SHELL_CONTROL_KEY, w as HiddenSurface, wt as ShellControl, x as FrameConsentRequest, xt as SHELL_JAR_UNREACHABLE, y as FRAME_MESSAGE, yt as SHELL_FRAME_MESSAGE, z as Placement, zt as TcpSocketListenerOptions } from "./contract-CJk3vE9P.js";
2
+ import { $ as RoomCreateOptions, A as MiddleGotoOptions, At as StorageFail, B as ProxyFetch, Bt as TcpSocketListenerResult, C as FrameMessageRelay, Ct as SetOverlayHost, D as IpFamily, Dt as ShellJarUnreachable, E as InstalledPackage, Et as ShellGotoOptions, F as PackageResult, Ft as StoredHandle, G as RELAY_HEADER, Gt as UdpSocketResult, H as ProxyFetchInput, Ht as TcpSocketResult, I as PackagesErrorCode, It as StoredObject, J as Radii, Jt as WINDOW_JAR_MODE_TIMEOUT_MS, K as RELAY_UNAVAILABLE, Kt as WINDOW_HANDSHAKE_TIMEOUT_MS, L as PackagesFail, Lt as StoredPage, M as OverlayRect, Mt as StoragePutOptions, N as OverlayState, Nt as StoragePutWire, O as JAR_ANCHOR_MESSAGE, Ot as StorageEntry, P as PackageQuery, Pt as StorageQuota, Q as RoomClaimOptions, Qt as JarSeedCookie, R as PickOptions, Rt as SurfaceRect, S as FrameFetchScope, St as STORAGE_REFUSALS, T as InstallOptions, Tt as ShellFrameMessage, U as Quota, Ut as UdpDatagram, V as ProxyFetchInit, Vt as TcpSocketOptions, W as RELAY_CHOICE_UNSUPPORTED, Wt as UdpSocketOptions, X as Resolvers, Xt as WriteData, Y as RelayResolution, Yt as WindowMiddleControl, Z as RoomBacklog, Zt as JarSeed, _ as DnsLookup, _t as SHELL_ATTACH_ERROR, a as AccountChange, at as RoomJoinOptions, b as FrameConsentAnswer, bt as SHELL_JAR_MESSAGE, c as AdoptRequest, ct as RoomMember, d as ConflictRequest, dt as RoomPermission, et as RoomDefaults, f as ConflictSide, ft as RoomPermissions, g as DisplayLevel, gt as RoomsFail, h as DisplayCause, ht as RoomsErrorCode, i as Account, it as RoomHandle, j as MountDescriptor, jt as StorageProgress, k as MiddleControl, kt as StorageErrorCode, l as AdoptState, lt as RoomMessage, m as ConnectOptions, mt as RoomType, n as ATTACH_WINDOW_KEY, nt as RoomEnvelope, o as AccountPinOptions, ot as RoomJson, p as ConnectAvailability, pt as RoomSchema, q as ROOM_TEMPORARY_MS, qt as WINDOW_HELLO_TIMEOUT_MS, r as ATTACH_WINDOW_MESSAGE, rt as RoomEvent, s as AddressLookupResult, st as RoomMailbox, t as ATTACH_FRAME_KEY, tt as RoomEnd, u as ConflictChoice, ut as RoomOpenOptions, v as EncryptionState, vt as SHELL_CONTROL_KEY, w as HiddenSurface, wt as ShellControl, x as FrameConsentRequest, xt as SHELL_JAR_UNREACHABLE, y as FRAME_MESSAGE, yt as SHELL_FRAME_MESSAGE, z as Placement, zt as TcpSocketListenerOptions } from "./contract-CDdIE_Es.js";
3
3
  import { o as TcpSocketOption, x as UdpSocketOption } from "./wire-DhmLnYEU.js";
4
4
  export { ATTACH_FRAME_KEY, ATTACH_WINDOW_KEY, ATTACH_WINDOW_MESSAGE, Account, AccountChange, AccountPinOptions, AddressLookupResult, AdoptRequest, AdoptState, type ClearCookiesWire, ConflictChoice, ConflictRequest, ConflictSide, ConnectAvailability, ConnectOptions, type CookieMatchWire, DisplayCause, DisplayLevel, DnsLookup, EncryptionState, FRAME_MESSAGE, FrameConsentAnswer, FrameConsentRequest, FrameFetchScope, FrameMessageRelay, HiddenSurface, InstallOptions, InstalledPackage, IpFamily, JAR_ANCHOR_MESSAGE, type JarSeed, type JarSeedCookie, MiddleControl, MiddleGotoOptions, MountDescriptor, OverlayRect, OverlayState, PackageQuery, PackageResult, PackagesErrorCode, PackagesFail, PickOptions, Placement, ProxyFetch, ProxyFetchInit, ProxyFetchInput, Quota, RELAY_CHOICE_UNSUPPORTED, RELAY_HEADER, RELAY_UNAVAILABLE, ROOM_TEMPORARY_MS, Radii, type RelayChoice, RelayResolution, Resolvers, RoomBacklog, RoomClaimOptions, RoomCreateOptions, RoomDefaults, RoomEnd, RoomEnvelope, RoomEvent, RoomHandle, RoomJoinOptions, RoomJson, RoomMailbox, RoomMember, RoomMessage, RoomOpenOptions, RoomPermission, RoomPermissions, RoomSchema, RoomType, RoomsErrorCode, RoomsFail, SHELL_ATTACH_ERROR, SHELL_CONTROL_KEY, SHELL_FRAME_MESSAGE, SHELL_JAR_MESSAGE, SHELL_JAR_UNREACHABLE, STORAGE_REFUSALS, SetOverlayHost, ShellControl, ShellFrameMessage, ShellGotoOptions, ShellJarUnreachable, StorageEntry, StorageErrorCode, StorageFail, StorageProgress, StoragePutOptions, StoragePutWire, StorageQuota, StoredHandle, StoredObject, StoredPage, SurfaceRect, TcpSocketListenerOptions, TcpSocketListenerResult, type TcpSocketOption, TcpSocketOptions, TcpSocketResult, UdpDatagram, type UdpSocketOption, UdpSocketOptions, UdpSocketResult, WINDOW_HANDSHAKE_TIMEOUT_MS, WINDOW_HELLO_TIMEOUT_MS, WINDOW_JAR_MODE_TIMEOUT_MS, WindowMiddleControl, WriteData };
@@ -1,8 +1,8 @@
1
1
  import { D as RelayChoice } from "./index-HMfzm6dF.js";
2
- import { Gt as UdpSocketResult, X as Resolvers } from "./contract-CJk3vE9P.js";
2
+ import { Gt as UdpSocketResult, X as Resolvers } from "./contract-CDdIE_Es.js";
3
3
  import { x as UdpSocketOption } from "./wire-DhmLnYEU.js";
4
- import "./api-BlYVLNjo.js";
5
- import { t as RelayOption } from "./relay-choice-D5Jeevab.js";
4
+ import "./api-DhwJz0vo.js";
5
+ import { t as RelayOption } from "./relay-choice-DB1F7bcn.js";
6
6
  import { Buffer } from "buffer";
7
7
  import { AddressInfo } from "net";
8
8
  import { BindOptions, RemoteInfo, Socket as Socket$1, SocketOptions, SocketType } from "dgram";
package/dgram.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { n as _default, r as createSocket, t as Socket } from "./dgram-DSgktX7M.js";
1
+ import { n as _default, r as createSocket, t as Socket } from "./dgram-CPQqam5Z.js";
2
2
  export { Socket, createSocket, _default as default };
@@ -1,4 +1,4 @@
1
- import { s as AddressLookupResult } from "./contract-CJk3vE9P.js";
1
+ import { s as AddressLookupResult } from "./contract-CDdIE_Es.js";
2
2
  declare namespace dns_d_exports {
3
3
  export { AddressLookupResult, lookup };
4
4
  }
package/dns.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- import { s as AddressLookupResult } from "./contract-CJk3vE9P.js";
2
- import { n as lookup } from "./dns-BwS2LM9b.js";
1
+ import { s as AddressLookupResult } from "./contract-CDdIE_Es.js";
2
+ import { n as lookup } from "./dns-_NCe2YLS.js";
3
3
  export { type AddressLookupResult, lookup };
@@ -1,5 +1,5 @@
1
1
  import { D as RelayChoice } from "./index-HMfzm6dF.js";
2
- import { n as Socket, t as Server$1 } from "./net-BCEAHCZe.js";
2
+ import { n as Socket, t as Server$1 } from "./net-v_6ythjK.js";
3
3
  import { Buffer } from "buffer";
4
4
  import { Stream } from "stream";
5
5
  import { IncomingHttpHeaders, OutgoingHttpHeaders, RequestOptions } from "http";
package/http.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { a as IncomingMessage, c as RequestListener, d as ServerResponse, f as ServerResponseOptions, g as globalAgent, h as get, i as HTTPParser, l as STATUS_CODES, m as createServer, n as ClientRequest, o as METHODS, p as _default, r as ClientRequestArgs, s as ParsedHead, t as Agent, u as Server, v as request } from "./http-D8ulR5RD.js";
1
+ import { a as IncomingMessage, c as RequestListener, d as ServerResponse, f as ServerResponseOptions, g as globalAgent, h as get, i as HTTPParser, l as STATUS_CODES, m as createServer, n as ClientRequest, o as METHODS, p as _default, r as ClientRequestArgs, s as ParsedHead, t as Agent, u as Server, v as request } from "./http-D3wvnIVo.js";
2
2
  export { Agent, ClientRequest, ClientRequestArgs, HTTPParser, IncomingMessage, METHODS, ParsedHead, RequestListener, STATUS_CODES, Server, ServerResponse, ServerResponseOptions, _default, _default as default, createServer, get, globalAgent, request };
package/index.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./rolldown-runtime-BIInC43l.cjs"),t=require("./lib-_WDKIXcj.cjs"),n=require("./extension-Dn64NfoU.cjs"),r=require("./api-DrvhPN56.cjs"),i=require("./busy-BXbVH595.cjs"),a=require("./contract.cjs"),o=require("./relay-choice-JC_JJY_M.cjs"),s=require("./cloud-r8DsgB1W.cjs"),c=require("./dns-2v96zoEh.cjs"),l=require("./net-Dk2kqtgE.cjs"),u=require("./dgram-D9ljiUFh.cjs"),d=require("./http-BE3UBktN.cjs"),f=require("./desktop-vXKU4wEK.cjs"),p=require("./account-m2iCmNui.cjs"),m=require("./fs--MLHvMW-.cjs"),h=require("./opfs-DuXvTgIl.cjs"),g=require("./packages-DT8vPB5_.cjs"),_=require("./rooms-DHFS9cwA.cjs"),v=require("./storage-BCjYihUO.cjs"),y=require("./connect-button-BpXDs7tw.cjs");let b=require("osra");var x=(async e=>{let{kind:n,cookies:r}=t.o(e);if(n===`window`){let n=e;return r===`native`?t.a(n):s.i(n)}let i=e;return r===`native`?S(i):s.i(i)}),S=e=>(s.a(e),t.a(e)),C=`https://fkn.app`,w=async(e,t)=>{if(typeof window>`u`)throw Error(`FKN @fkn/lib: relayWorker must be called from the main thread`);let n=await r.f;if(!n)throw Error(`FKN @fkn/lib: relayWorker found no FKN transport in this realm`);r.d(),i.r(`relayed worker`,t?.unregisterSignal);let a=n.emit instanceof MessagePort?{}:{originA:t?.originA??C,originB:t?.originB??`*`};(0,b.relay)(n,e,{key:`fkn-api`,...a,unregisterSignal:t?.unregisterSignal})},T=async()=>typeof window>`u`?!1:(await r.o).connect.prompt(location.origin).catch(()=>!1),E=async()=>typeof window>`u`?null:(await r.o).relay.prompt().catch(()=>null),D=new Set,O=e=>(D.add(e),()=>{D.delete(e)}),k=()=>{if(D.size===0)return!1;for(let e of[...D])try{e()}catch{}return!0},A=(e,t)=>{if(typeof e?.onUpdateTaken==`function`)return Promise.resolve(e.onUpdateTaken(t))},j=e.t({applyUpdate:()=>W,busyReasons:()=>U,onUpdate:()=>R,onUpdateTaken:()=>z,updateReady:()=>M}),M=async()=>typeof window>`u`?!1:r.o.then(e=>e.shell?.updateReady()).then(e=>e===!0).catch(()=>!1),N=new Set,P=!1,F=()=>{P=!0;for(let e of[...N])try{e()}catch{}},I=0,L=()=>{let e=r.c();e&&N.size!==0&&I!==e.epoch&&(I=e.epoch,P=!1,Promise.resolve(e.remote.shell?.onUpdate(F)).catch(()=>{I===e.epoch&&(I=0)}))};typeof window<`u`&&r.u(L);var R=async e=>{if(typeof window>`u`)return()=>{};if(N.add(e),P)try{e()}catch{}return L(),()=>{N.delete(e)}},z=e=>typeof window>`u`?()=>{}:O(e),B=0,V=!1,H=()=>{if(!k()&&!V){V=!0;try{location.reload()}catch{}}};typeof window<`u`&&r.u(()=>{let e=r.c();if(!e||B===e.epoch)return;B=e.epoch;let t=A(e.remote.shell,H);t?t.catch(()=>{B===e.epoch&&(B=0)}):B=0});var U=()=>i.n(),W=async()=>typeof window>`u`?!1:r.o.then(e=>e.shell?.applyUpdate()).then(e=>e===!0).catch(()=>!1);exports.ATTACH_FRAME_EVENT_KEY=t.i,exports.BACKGROUND_STOPPED=n.a,exports.CATEGORIES=t.w,exports.EXTENSION_ABI=t.st,exports.ExtensionOperationUnsupportedError=t.ct,exports.ExtensionOutdatedError=t.lt,exports.FORGEABLE_HEADERS=t.Q,exports.FrameWindowBlockedError=t.g,exports.FrameWindowRefusedError=t._,exports.LOCATOR_DENIED=t.A,exports.LOCATOR_ERROR=t.P,exports.LOCATOR_INVALID=t.I,exports.LOCATOR_UNSUPPORTED=t.D,exports.MAX_REASON_LENGTH=t.X,exports.PERMISSION_DENIED=t.t,exports.RELAY_UNAVAILABLE=a.RELAY_UNAVAILABLE,exports.REQUIRED_EXTENSION_ABI=t.ut,exports.TimeoutError=t.E,Object.defineProperty(exports,"account",{enumerable:!0,get:function(){return p.t}}),exports.assertAttachableFrameUrl=t.x,exports.assertFetchableUrl=t.U,exports.assertForgeableHeaders=t.$,exports.assertLockdownApplicable=t.S,exports.assertOneCookieIdentity=t.et,exports.attachFrame=x,exports.attachFramePermission=t.v,exports.box=t.pt,Object.defineProperty(exports,"cloud",{enumerable:!0,get:function(){return s.n}}),exports.connect=T,exports.connectButtonUrl=y.t,exports.cookies=t.V,exports.createFrame=t.y,exports.createVideoElementHandle=t.mt,Object.defineProperty(exports,"desktop",{enumerable:!0,get:function(){return f.n}}),Object.defineProperty(exports,"dgram",{enumerable:!0,get:function(){return u.i}}),Object.defineProperty(exports,"dns",{enumerable:!0,get:function(){return c.t}}),Object.defineProperty(exports,"extension",{enumerable:!0,get:function(){return n.t}}),exports.fetch=n.n,exports.fetchCredentialedPermission=t.G,exports.fetchLocalPermission=t.K,exports.fetchPermission=t.q,Object.defineProperty(exports,"fs",{enumerable:!0,get:function(){return m.u}}),exports.gotoPermission=t.b,exports.handleRevivableModules=t.ft,exports.hasForgedCookie=t.tt,Object.defineProperty(exports,"http",{enumerable:!0,get:function(){return d.p}}),exports.isBackgroundStopped=n.o,exports.isBlockedFetchUrl=t.J,exports.isBlockedFrameUrl=t.C,exports.isExtensionExposed=t.rt,exports.isLocalNetworkUrl=t.Y,exports.isLocatorDenied=t.F,exports.isLocatorInvalid=t.M,exports.isLocatorUnsupported=t.O,exports.isPermissionDenied=t.n,exports.isRelayUnavailable=o.n,exports.isTerminalError=t.L,exports.isType=t.ht,exports.modifyRequestHeadersPermission=t.R,Object.defineProperty(exports,"net",{enumerable:!0,get:function(){return l.s}}),Object.defineProperty(exports,"opfs",{enumerable:!0,get:function(){return h.f}}),Object.defineProperty(exports,"packages",{enumerable:!0,get:function(){return g.u}}),exports.permissions=t.r,exports.promptInstall=n.i,exports.promptRelay=E,exports.readCookiePermission=t.H,exports.readExtensionHandshake=t.it,exports.relayOf=o.r,exports.relayWorker=w,exports.removeRequestHeaderRule=t.z,exports.revive=t.gt,Object.defineProperty(exports,"rooms",{enumerable:!0,get:function(){return _.a}}),exports.setMissingExtensionHandler=t.at,exports.setRequestHeaderRule=t.B,Object.defineProperty(exports,"shell",{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,"storage",{enumerable:!0,get:function(){return v.o}}),exports.supportsOperation=t.dt,exports.type=t._t,exports.waitForExtensionExposure=t.ot;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./rolldown-runtime-BIInC43l.cjs"),t=require("./lib-_WDKIXcj.cjs"),n=require("./extension-Dn64NfoU.cjs"),r=require("./api-DrvhPN56.cjs"),i=require("./busy-BXbVH595.cjs"),a=require("./contract.cjs"),o=require("./relay-choice-JC_JJY_M.cjs"),s=require("./cloud-r8DsgB1W.cjs"),c=require("./dns-2v96zoEh.cjs"),l=require("./net-Dk2kqtgE.cjs"),u=require("./dgram-D9ljiUFh.cjs"),d=require("./http-BE3UBktN.cjs"),f=require("./desktop-vXKU4wEK.cjs"),p=require("./account-m2iCmNui.cjs"),m=require("./fs--MLHvMW-.cjs"),h=require("./opfs-DuXvTgIl.cjs"),g=require("./packages-CTqprdnz.cjs"),_=require("./rooms-DHFS9cwA.cjs"),v=require("./storage-BCjYihUO.cjs"),y=require("./connect-button-BpXDs7tw.cjs");let b=require("osra");var x=(async e=>{let{kind:n,cookies:r}=t.o(e);if(n===`window`){let n=e;return r===`native`?t.a(n):s.i(n)}let i=e;return r===`native`?S(i):s.i(i)}),S=e=>(s.a(e),t.a(e)),C=`https://fkn.app`,w=async(e,t)=>{if(typeof window>`u`)throw Error(`FKN @fkn/lib: relayWorker must be called from the main thread`);let n=await r.f;if(!n)throw Error(`FKN @fkn/lib: relayWorker found no FKN transport in this realm`);r.d(),i.r(`relayed worker`,t?.unregisterSignal);let a=n.emit instanceof MessagePort?{}:{originA:t?.originA??C,originB:t?.originB??`*`};(0,b.relay)(n,e,{key:`fkn-api`,...a,unregisterSignal:t?.unregisterSignal})},T=async()=>typeof window>`u`?!1:(await r.o).connect.prompt(location.origin).catch(()=>!1),E=async()=>typeof window>`u`?null:(await r.o).relay.prompt().catch(()=>null),D=new Set,O=e=>(D.add(e),()=>{D.delete(e)}),k=()=>{if(D.size===0)return!1;for(let e of[...D])try{e()}catch{}return!0},A=(e,t)=>{if(typeof e?.onUpdateTaken==`function`)return Promise.resolve(e.onUpdateTaken(t))},j=e.t({applyUpdate:()=>W,busyReasons:()=>U,onUpdate:()=>R,onUpdateTaken:()=>z,updateReady:()=>M}),M=async()=>typeof window>`u`?!1:r.o.then(e=>e.shell?.updateReady()).then(e=>e===!0).catch(()=>!1),N=new Set,P=!1,F=()=>{P=!0;for(let e of[...N])try{e()}catch{}},I=0,L=()=>{let e=r.c();e&&N.size!==0&&I!==e.epoch&&(I=e.epoch,P=!1,Promise.resolve(e.remote.shell?.onUpdate(F)).catch(()=>{I===e.epoch&&(I=0)}))};typeof window<`u`&&r.u(L);var R=async e=>{if(typeof window>`u`)return()=>{};if(N.add(e),P)try{e()}catch{}return L(),()=>{N.delete(e)}},z=e=>typeof window>`u`?()=>{}:O(e),B=0,V=!1,H=()=>{if(!k()&&!V){V=!0;try{location.reload()}catch{}}};typeof window<`u`&&r.u(()=>{let e=r.c();if(!e||B===e.epoch)return;B=e.epoch;let t=A(e.remote.shell,H);t?t.catch(()=>{B===e.epoch&&(B=0)}):B=0});var U=()=>i.n(),W=async()=>typeof window>`u`?!1:r.o.then(e=>e.shell?.applyUpdate()).then(e=>e===!0).catch(()=>!1);exports.ATTACH_FRAME_EVENT_KEY=t.i,exports.BACKGROUND_STOPPED=n.a,exports.CATEGORIES=t.w,exports.EXTENSION_ABI=t.st,exports.ExtensionOperationUnsupportedError=t.ct,exports.ExtensionOutdatedError=t.lt,exports.FORGEABLE_HEADERS=t.Q,exports.FrameWindowBlockedError=t.g,exports.FrameWindowRefusedError=t._,exports.LOCATOR_DENIED=t.A,exports.LOCATOR_ERROR=t.P,exports.LOCATOR_INVALID=t.I,exports.LOCATOR_UNSUPPORTED=t.D,exports.MAX_REASON_LENGTH=t.X,exports.PERMISSION_DENIED=t.t,exports.RELAY_UNAVAILABLE=a.RELAY_UNAVAILABLE,exports.REQUIRED_EXTENSION_ABI=t.ut,exports.TimeoutError=t.E,Object.defineProperty(exports,"account",{enumerable:!0,get:function(){return p.t}}),exports.assertAttachableFrameUrl=t.x,exports.assertFetchableUrl=t.U,exports.assertForgeableHeaders=t.$,exports.assertLockdownApplicable=t.S,exports.assertOneCookieIdentity=t.et,exports.attachFrame=x,exports.attachFramePermission=t.v,exports.box=t.pt,Object.defineProperty(exports,"cloud",{enumerable:!0,get:function(){return s.n}}),exports.connect=T,exports.connectButtonUrl=y.t,exports.cookies=t.V,exports.createFrame=t.y,exports.createVideoElementHandle=t.mt,Object.defineProperty(exports,"desktop",{enumerable:!0,get:function(){return f.n}}),Object.defineProperty(exports,"dgram",{enumerable:!0,get:function(){return u.i}}),Object.defineProperty(exports,"dns",{enumerable:!0,get:function(){return c.t}}),Object.defineProperty(exports,"extension",{enumerable:!0,get:function(){return n.t}}),exports.fetch=n.n,exports.fetchCredentialedPermission=t.G,exports.fetchLocalPermission=t.K,exports.fetchPermission=t.q,Object.defineProperty(exports,"fs",{enumerable:!0,get:function(){return m.u}}),exports.gotoPermission=t.b,exports.handleRevivableModules=t.ft,exports.hasForgedCookie=t.tt,Object.defineProperty(exports,"http",{enumerable:!0,get:function(){return d.p}}),exports.isBackgroundStopped=n.o,exports.isBlockedFetchUrl=t.J,exports.isBlockedFrameUrl=t.C,exports.isExtensionExposed=t.rt,exports.isLocalNetworkUrl=t.Y,exports.isLocatorDenied=t.F,exports.isLocatorInvalid=t.M,exports.isLocatorUnsupported=t.O,exports.isPermissionDenied=t.n,exports.isRelayUnavailable=o.n,exports.isTerminalError=t.L,exports.isType=t.ht,exports.modifyRequestHeadersPermission=t.R,Object.defineProperty(exports,"net",{enumerable:!0,get:function(){return l.s}}),Object.defineProperty(exports,"opfs",{enumerable:!0,get:function(){return h.f}}),Object.defineProperty(exports,"packages",{enumerable:!0,get:function(){return g.u}}),exports.permissions=t.r,exports.promptInstall=n.i,exports.promptRelay=E,exports.readCookiePermission=t.H,exports.readExtensionHandshake=t.it,exports.relayOf=o.r,exports.relayWorker=w,exports.removeRequestHeaderRule=t.z,exports.revive=t.gt,Object.defineProperty(exports,"rooms",{enumerable:!0,get:function(){return _.a}}),exports.setMissingExtensionHandler=t.at,exports.setRequestHeaderRule=t.B,Object.defineProperty(exports,"shell",{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,"storage",{enumerable:!0,get:function(){return v.o}}),exports.supportsOperation=t.dt,exports.type=t._t,exports.waitForExtensionExposure=t.ot;
package/index.d.ts CHANGED
@@ -1,19 +1,19 @@
1
1
  import { $ as Gate, A as WindowFrame, B as CATEGORIES, C as FrameWindowRefusal, D as RelayChoice, E as Locator, F as CategoryRequest, G as RemoteVideoElement, H as PermissionCategory, I as LegacyPermissionRequest, J as createVideoElementHandle, K as VideoElementState, L as PermissionGrant, M as createFrame, N as gotoPermission, O as StorageState, P as CategoryGrant, Q as Executor, R as PermissionRequest, S as FrameWindowOptions, T as GotoOptions, U as handleRevivableModules, V as CategoryMeta, W as BoxedVideoElement, X as revive, Y as isType, Z as type, _ as FrameEventMap, a as AttachCookies, b as FramePostMessageOptions, c as BlankPage, d as CookieMatchWire, et as GateTools, f as Frame, g as FrameEventListener, h as FrameDocumentEvent, i as AddScriptTagOptions, j as attachFramePermission, k as StorageStateCookie, l as ClearCookiesOptions, m as FrameBackendEvent, nt as SelectorPart, o as AttachFrameOptions, p as FrameBackend, q as box, r as AttachFrameFunction, s as AttachWindowOptions, t as ATTACH_FRAME_EVENT_KEY, tt as OperationRequest, u as ClearCookiesWire, v as FrameLocator, w as FrameWindowRefusedError, x as FrameWindowBlockedError, y as FrameMessageEvent, z as permissions } from "./index-HMfzm6dF.js";
2
2
  import { $ as isLocatorDenied, A as setRequestHeaderRule, B as fetchLocalPermission, C as assertAttachableFrameUrl, D as RequestHeaderRule, E as HeaderOperation, F as FetchInit, G as assertForgeableHeaders, H as isBlockedFetchUrl, I as ProxyFetchRequest, J as LOCATOR_DENIED, K as assertOneCookieIdentity, L as assertFetchableUrl, M as SiteCookie, N as cookies, O as modifyRequestHeadersPermission, P as readCookiePermission, Q as TimeoutError, S as MAX_REASON_LENGTH, T as isBlockedFrameUrl, U as isLocalNetworkUrl, V as fetchPermission, W as FORGEABLE_HEADERS, X as LOCATOR_INVALID, Y as LOCATOR_ERROR, Z as LOCATOR_UNSUPPORTED, _ as BackgroundStoppedError, b as PermissionDeniedError, c as setMissingExtensionHandler, d as ExtensionHandshake, et as isLocatorInvalid, f as ExtensionOperationUnsupportedError, g as BACKGROUND_STOPPED, h as supportsOperation, i as promptInstall, j as CookieDetails, k as removeRequestHeaderRule, l as waitForExtensionExposure, m as REQUIRED_EXTENSION_ABI, n as fetch, nt as isTerminalError, o as isExtensionExposed, p as ExtensionOutdatedError, q as hasForgedCookie, s as readExtensionHandshake, t as extension_d_exports, tt as isLocatorUnsupported, u as EXTENSION_ABI, v as isBackgroundStopped, w as assertLockdownApplicable, x as isPermissionDenied, y as PERMISSION_DENIED, z as fetchCredentialedPermission } from "./extension-Kzx83mrR.js";
3
- import { K as RELAY_UNAVAILABLE } from "./contract-CJk3vE9P.js";
4
- import { n as account_d_exports } from "./account-DBagcNfd.js";
5
- import { n as cloud_d_exports } from "./cloud-BCRo1U9I.js";
6
- import { t as dns_d_exports } from "./dns-BwS2LM9b.js";
3
+ import { K as RELAY_UNAVAILABLE } from "./contract-CDdIE_Es.js";
4
+ import { n as account_d_exports } from "./account-CXUwroRM.js";
5
+ import { n as cloud_d_exports } from "./cloud-P8d7GYmM.js";
6
+ import { t as dns_d_exports } from "./dns-_NCe2YLS.js";
7
7
  import { u as index_d_exports } from "./index-D6GPJ4Ow.js";
8
- import { i as relayOf, n as RelayUnavailableError, r as isRelayUnavailable } from "./relay-choice-D5Jeevab.js";
9
- import { s as net_d_exports } from "./net-BCEAHCZe.js";
10
- import { i as dgram_d_exports } from "./dgram-DSgktX7M.js";
11
- import { _ as http_d_exports } from "./http-D8ulR5RD.js";
8
+ import { i as relayOf, n as RelayUnavailableError, r as isRelayUnavailable } from "./relay-choice-DB1F7bcn.js";
9
+ import { s as net_d_exports } from "./net-v_6ythjK.js";
10
+ import { i as dgram_d_exports } from "./dgram-CPQqam5Z.js";
11
+ import { _ as http_d_exports } from "./http-D3wvnIVo.js";
12
12
  import { n as desktop_d_exports } from "./desktop-DOubT4ES.js";
13
13
  import { c as index_d_exports$1 } from "./index-CUWTpQKP.js";
14
- import { S as packages_d_exports } from "./packages-BlJK4kSJ.js";
15
- import { s as rooms_d_exports } from "./rooms-0vp7HaAY.js";
16
- import { c as storage_d_exports } from "./storage-CidJUc0x.js";
14
+ import { S as packages_d_exports } from "./packages-SwO4CxMl.js";
15
+ import { s as rooms_d_exports } from "./rooms-3XplwXzb.js";
16
+ import { c as storage_d_exports } from "./storage-C38adB-z.js";
17
17
  import { t as connectButtonUrl } from "./connect-button-2FmOM8ai.js";
18
18
  /**
19
19
  * Attaches FKN to an iframe the app mounted, or with `{ window }` opens the attachment in a window
package/index.js CHANGED
@@ -14,7 +14,7 @@ import { n as je } from "./desktop-xTT7ciGX.js";
14
14
  import { t as Me } from "./account-Uh0-1Cbp.js";
15
15
  import { u as Ne } from "./fs-Cw7CcUhx.js";
16
16
  import { f as Pe } from "./opfs-D3pYzYRc.js";
17
- import { u as Fe } from "./packages-Cws_rcgf.js";
17
+ import { u as Fe } from "./packages-CrD5Sa28.js";
18
18
  import { a as Ie } from "./rooms-DP5stTEr.js";
19
19
  import { o as Le } from "./storage-BhfImh_2.js";
20
20
  import { t as Re } from "./connect-button-C1wKkIhh.js";
@@ -1,8 +1,8 @@
1
1
  import { D as RelayChoice } from "./index-HMfzm6dF.js";
2
- import { Bt as TcpSocketListenerResult, Ht as TcpSocketResult, X as Resolvers } from "./contract-CJk3vE9P.js";
2
+ import { Bt as TcpSocketListenerResult, Ht as TcpSocketResult, X as Resolvers } from "./contract-CDdIE_Es.js";
3
3
  import { o as TcpSocketOption } from "./wire-DhmLnYEU.js";
4
- import "./api-BlYVLNjo.js";
5
- import { t as RelayOption } from "./relay-choice-D5Jeevab.js";
4
+ import "./api-DhwJz0vo.js";
5
+ import { t as RelayOption } from "./relay-choice-DB1F7bcn.js";
6
6
  import { AddressInfo, ListenOptions, Server, ServerOpts, Socket, SocketConnectOpts, SocketConstructorOpts } from "net";
7
7
  import { BindOptions } from "dgram";
8
8
  import { DuplexOptions, Stream } from "stream";
package/net.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { a as createConnection, c as isIP, i as connect, l as isIPv4, n as Socket, o as createServer, r as _default, t as Server, u as isIPv6 } from "./net-BCEAHCZe.js";
1
+ import { a as createConnection, c as isIP, i as connect, l as isIPv4, n as Socket, o as createServer, r as _default, t as Server, u as isIPv6 } from "./net-v_6ythjK.js";
2
2
  export { Server, Socket, _default, _default as default, connect, createConnection, createServer, isIP, isIPv4, isIPv6 };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fkn/lib",
3
- "version": "0.9.67",
3
+ "version": "0.9.68",
4
4
  "license": "SEE LICENSE IN LICENSE",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -0,0 +1 @@
1
+ const e=require("./rolldown-runtime-BIInC43l.cjs"),t=require("./api-DrvhPN56.cjs"),n=require("./busy-BXbVH595.cjs");let r=require("osra");var i=e.t({attach:()=>N,connect:()=>D,hide:()=>E,install:()=>m,isVisible:()=>q,list:()=>g,mount:()=>M,onConnect:()=>K,onVisibilityChange:()=>J,pick:()=>p,search:()=>f,show:()=>T,supportsTemporary:()=>h,uninstall:()=>_}),a=`fkn-packages-connection`,o=`https://fkn.app`,s=3e4,c=(e,t)=>Object.assign(Error(t),{code:e}),l=async()=>{if(!t.l)throw c(`unavailable`,`packages: no FKN transport in this realm - use relayWorker to bridge workers`);return t.o},u=(e,t,n)=>(0,r.expose)(e??{},{transport:t,key:a,unregisterSignal:n}),d=async(e,t,n={})=>{let{signal:r,closed:i}=n;if(r?.aborted)throw c(`unavailable`,`packages.connect: aborted before connecting`);let a=new AbortController;r&&r.addEventListener(`abort`,()=>a.abort(r.reason),{once:!0});let o=new AbortController,l=new Promise((e,n)=>{let a=setTimeout(()=>n(c(`timeout`,`packages.connect: the package did not complete the connection`)),s);o.signal.addEventListener(`abort`,()=>clearTimeout(a),{once:!0}),t.addEventListener(`message`,e=>{if(e.data?.type===`fkn-packages-nack`){let t=e.data.message;n(c(`unavailable`,typeof t==`string`&&t?t:`packages.connect: the package refused the connection`))}},{signal:o.signal}),t.start(),r&&r.addEventListener(`abort`,()=>n(c(`unavailable`,`packages.connect: aborted before connecting`)),{once:!0,signal:o.signal}),i?.then(()=>n(c(`unavailable`,`packages.connect: the package closed before connecting`)))});try{return await Promise.race([u(e,t,a.signal),l])}catch(e){a.abort(e);try{t.close()}catch{}throw e}finally{o.abort()}},f=async e=>{let t=await(await l()).packages.search(e);if(`error`in t)throw c(t.error,t.message);return t.results},p=async(e,t)=>{let n=await(await l()).packages.pick(e,t);if(`error`in n)throw c(n.error,n.message);return`declined`in n?[]:n.results},m=async(e,t)=>{let{packages:n}=await l(),r=t?.temporary?n.installTemporary:n.install;if(!r)throw c(`unsupported`,`packages.install: this fkn.app cannot install a package temporarily`);let i=await r(e,t);if(`error`in i)throw c(i.error,i.message);return`declined`in i?null:i.installed},h=async()=>typeof(await l()).packages.installTemporary==`function`,g=async()=>(await(await l()).packages.list()).results,_=async e=>{let t=await(await l()).packages.uninstall(e);if(`error`in t)throw c(t.error,t.message)},v=({x:e,y:t,width:n,height:r})=>({x:Math.round(e),y:Math.round(t),width:Math.round(n),height:Math.round(r)}),y=(e,t)=>{let n=Math.max(e.x,t.x),r=Math.max(e.y,t.y);return{x:n,y:r,width:Math.max(0,Math.min(e.x+e.width,t.x+t.width)-n),height:Math.max(0,Math.min(e.y+e.height,t.y+t.height)-r)}},b=(e,t)=>{let n=t;for(let t=e.parentElement;t;t=t.parentElement){let e=getComputedStyle(t);if((e.overflowX!==`visible`||e.overflowY!==`visible`)&&(n=y(n,v(t.getBoundingClientRect())),n.width===0||n.height===0))break}return n},x=e=>{let t=getComputedStyle(e),n=[t.borderTopLeftRadius,t.borderTopRightRadius,t.borderBottomRightRadius,t.borderBottomLeftRadius];if(n.some(e=>e.includes(`%`)||e.includes(` `)))return;let r=n.map(e=>{let t=Number.parseFloat(e);return Number.isFinite(t)&&t>0?t:0});return r.some(e=>e>0)?r:void 0},S=(e,t)=>{if(!e)return!1;let n=(e,t)=>e===t||!!e&&!!t&&e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height;return n(e.rect,t.rect)&&n(e.clip,t.clip)&&((e,t)=>e===t||!!e&&!!t&&e.every((e,n)=>e===t[n]))(e.radius,t.radius)},C=new Map;n.i(`package view`,()=>C.size>0);var w=async(e,t)=>{let n=C.get(e);if(n){for(let e of n)t&&e.element!==t||(e.stop(),n.delete(e));if(n.size>0)return;C.delete(e)}let r=await(await l()).packages.hide(e);if(`error`in r)throw c(r.error,r.message)},T=async(e,t)=>{let{element:n,rect:r}=t;if(!n&&!r)throw c(`invalid`,`packages.show: pass an element or a rect`);let i=(await l()).packages,a=()=>{if(!n)return{rect:v(r)};let e=v(n.getBoundingClientRect());return{rect:e,clip:b(n,e),radius:x(n)}},o=!0,s,u=0,d=async t=>{s=t;let n=await i.show(e,t);if(`error`in n)throw o=!1,c(n.error,n.message)};await d(a());let f=()=>{if(!o)return;let e=a();S(s,e)||d(e).catch(()=>{}),u=requestAnimationFrame(f)};n&&(u=requestAnimationFrame(f));let p={element:n,stop:()=>{o=!1,cancelAnimationFrame(u)}},m=C.get(e)??new Set;return m.add(p),C.set(e,m),{hide:()=>{w(e,n).catch(()=>{})},refresh:()=>{if(!o)return;let e=a();S(s,e)||d(e).catch(()=>{})}}},E=async(e,t={})=>w(e,t.element),D=(async(e,r={})=>{let i=await(await l()).packages.connect(e,{protocol:r.protocol,...r.path===void 0?{}:{path:r.path}});if(`error`in i)throw c(i.error,i.message);let a=n.t(`package connection`),o=t.c()?.epoch??0,s=t.u((e,t)=>{t!==o&&(a(),s())});Promise.resolve(i.closed).then(()=>{a(),s()},()=>{a(),s()});let{port:u,closed:f}=i;if(r.raw)return{closed:f,port:u};let p=await d(r.payload,u,{signal:r.signal,closed:f});return r.signal&&r.signal.addEventListener(`abort`,()=>{try{u.postMessage({type:`fkn-packages-disconnect`})}catch{}},{once:!0}),{remote:p,closed:f,port:u}}),O=[`allow-scripts`,`allow-same-origin`],k=e=>{let t=e.getAttribute(`sandbox`);if(t!==null){let e=new Set(t.toLowerCase().split(/\s+/).filter(Boolean)),n=O.filter(t=>!e.has(t));if(n.length)throw c(`invalid`,`packages.mount: the iframe's sandbox attribute must include ${n.join(` and `)}, or the package cannot start`)}if(globalThis.crossOriginIsolated&&!new Set((e.getAttribute(`allow`)??``).toLowerCase().split(`;`).map(e=>e.trim().split(/\s+/)[0]).filter(Boolean)).has(`cross-origin-isolated`))throw c(`invalid`,`packages.mount: this page is cross-origin isolated, so the iframe's allow attribute must include 'cross-origin-isolated' to hand that down to the package`)},A=3e4,j=(e,t)=>new Promise((n,r)=>{let i=e=>{clearTimeout(o),window.removeEventListener(`message`,a),e?r(e):n()},a=n=>{if(n.source!==e.contentWindow||n.origin!==t)return;let r=n.data;if(r?.type===`fkn-packages-ready`)return i();r?.type===`fkn-packages-failed`&&i(c(`unavailable`,typeof r.message==`string`&&r.message?r.message:`packages.mount: the package failed to boot`))},o=setTimeout(()=>i(c(`timeout`,`packages.mount: the package did not register a connection handler`)),A);window.addEventListener(`message`,a)}),M=async(e,t)=>{let{iframe:r}=t;if(!(r instanceof HTMLIFrameElement))throw c(`invalid`,`packages.mount: pass the iframe to load the package into`);if(!r.isConnected)throw c(`invalid`,`packages.mount: the iframe must be in the document before mounting into it`);k(r);let i=await(await l()).packages.frame(e);if(`error`in i)throw c(i.error,i.message);r.src=i.url;let a={done:!1},o=()=>{},s=new Promise(e=>{o=e}),u=n.t(`mounted package`),f=()=>{if(!a.done){a.done=!0,u();try{r.contentWindow?.postMessage({type:`fkn-packages-close`},i.origin)}catch{}r.src=`about:blank`,o()}};try{await j(r,i.origin)}catch(e){throw f(),e}let p=new MessageChannel,m=r.contentWindow;if(!m)throw f(),c(`unavailable`,`packages.mount: the frame was detached before it could connect`);m.postMessage({type:`fkn-packages-port`,from:i.from,protocol:t.protocol,uri:i.uri,name:i.name,version:i.version},i.origin,[p.port2]);try{m.postMessage({type:`fkn-packages-visibility`,visible:!0},i.origin)}catch{}if(t.raw)return{closed:s,port:p.port1,frame:r,unmount:f};try{return{remote:await d(t.payload,p.port1,{signal:t.signal,closed:s}),closed:s,port:p.port1,frame:r,unmount:f}}catch(e){throw f(),e}},N=(e,t,n)=>d(t,e,{signal:n?.signal}),P=null,F=!1,I=new Set,L=[],R=new Map,z=!1,B=!1,V=e=>{let t=R.get(e);t&&(R.delete(e),t())},H=(e,t)=>{try{e.postMessage({type:`fkn-packages-nack`,message:t})}catch{}try{e.close()}catch{}},U=async(e,t)=>{let{port:n,...r}=e;e.port.addEventListener(`message`,t=>{t.data?.type===`fkn-packages-disconnect`&&V(e.port)});let i;try{i=await t.createPayload(r)}catch(t){throw H(e.port,t instanceof Error?t.message:`the package failed to produce a connection`),t}let a=new Promise(t=>R.set(e.port,t)),o=await u(i,e.port);t.handler?.({...r,remote:o,closed:a,port:e.port})},W=()=>{z||typeof window>`u`||window.parent===window||(z=!0,window.addEventListener(`message`,e=>{if(e.source!==window.parent)return;let t=e.data;if(t?.type===`fkn-packages-port`){let n=e.ports[0];if(!n)return;let r={port:n,from:typeof t.from==`string`?t.from:``,brokered:e.origin===o,protocol:typeof t.protocol==`string`?t.protocol:null,uri:typeof t.uri==`string`?t.uri:``,name:typeof t.name==`string`?t.name:``,version:typeof t.version==`string`?t.version:``};P?U(r,P).catch(e=>console.warn(`packages.onConnect:`,e)):L.push(r)}if(t?.type===`fkn-packages-close`)for(let e of[...R.keys()])V(e);if(t?.type===`fkn-packages-visibility`){F=t.visible===!0;for(let e of I)try{e(F)}catch{}}}))},G=()=>{B||typeof window>`u`||window.parent===window||(B=!0,window.parent.postMessage({type:`fkn-packages-ready`},`*`))},K=(e,t)=>{if(typeof window>`u`)return{unsubscribe:()=>{}};W();let n={createPayload:e,handler:t};for(P=n,G();L.length&&P===n;)U(L.shift(),n).catch(e=>console.warn(`packages.onConnect:`,e));return{unsubscribe:()=>{P===n&&(P=null)}}},q=()=>F,J=e=>{if(typeof window>`u`)return{unsubscribe:()=>{}};W(),I.add(e);try{e(F)}catch{}return{unsubscribe:()=>{I.delete(e)}}};Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return q}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return K}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,"h",{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return J}}),Object.defineProperty(exports,"m",{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"p",{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return i}});
@@ -4,19 +4,20 @@ import { i as a, t as o } from "./busy-C1JPjoZ_.js";
4
4
  import { expose as s } from "osra";
5
5
  // src/packages.ts
6
6
  var c = /* @__PURE__ */ e({
7
- attach: () => I,
8
- connect: () => A,
9
- hide: () => k,
7
+ attach: () => L,
8
+ connect: () => j,
9
+ hide: () => A,
10
10
  install: () => v,
11
- isVisible: () => X,
12
- list: () => y,
13
- mount: () => F,
14
- onConnect: () => Y,
15
- onVisibilityChange: () => Z,
11
+ isVisible: () => Z,
12
+ list: () => b,
13
+ mount: () => I,
14
+ onConnect: () => X,
15
+ onVisibilityChange: () => Q,
16
16
  pick: () => _,
17
17
  search: () => g,
18
- show: () => O,
19
- uninstall: () => b
18
+ show: () => k,
19
+ supportsTemporary: () => y,
20
+ uninstall: () => x
20
21
  }), l = "fkn-packages-connection", u = "https://fkn.app", d = 3e4, f = (e, t) => Object.assign(Error(t), { code: e }), p = async () => {
21
22
  if (!n) throw f("unavailable", "packages: no FKN transport in this realm - use relayWorker to bridge workers");
22
23
  return r;
@@ -61,18 +62,20 @@ var c = /* @__PURE__ */ e({
61
62
  if ("error" in n) throw f(n.error, n.message);
62
63
  return "declined" in n ? [] : n.results;
63
64
  }, v = async (e, t) => {
64
- let n = await (await p()).packages.install(e, t);
65
- if ("error" in n) throw f(n.error, n.message);
66
- return "declined" in n ? null : n.installed;
67
- }, y = async () => (await (await p()).packages.list()).results, b = async (e) => {
65
+ let { packages: n } = await p(), r = t?.temporary ? n.installTemporary : n.install;
66
+ if (!r) throw f("unsupported", "packages.install: this fkn.app cannot install a package temporarily");
67
+ let i = await r(e, t);
68
+ if ("error" in i) throw f(i.error, i.message);
69
+ return "declined" in i ? null : i.installed;
70
+ }, y = async () => typeof (await p()).packages.installTemporary == "function", b = async () => (await (await p()).packages.list()).results, x = async (e) => {
68
71
  let t = await (await p()).packages.uninstall(e);
69
72
  if ("error" in t) throw f(t.error, t.message);
70
- }, x = ({ x: e, y: t, width: n, height: r }) => ({
73
+ }, S = ({ x: e, y: t, width: n, height: r }) => ({
71
74
  x: Math.round(e),
72
75
  y: Math.round(t),
73
76
  width: Math.round(n),
74
77
  height: Math.round(r)
75
- }), S = (e, t) => {
78
+ }), C = (e, t) => {
76
79
  let n = Math.max(e.x, t.x), r = Math.max(e.y, t.y);
77
80
  return {
78
81
  x: n,
@@ -80,14 +83,14 @@ var c = /* @__PURE__ */ e({
80
83
  width: Math.max(0, Math.min(e.x + e.width, t.x + t.width) - n),
81
84
  height: Math.max(0, Math.min(e.y + e.height, t.y + t.height) - r)
82
85
  };
83
- }, C = (e, t) => {
86
+ }, w = (e, t) => {
84
87
  let n = t;
85
88
  for (let t = e.parentElement; t; t = t.parentElement) {
86
89
  let e = getComputedStyle(t);
87
- if ((e.overflowX !== "visible" || e.overflowY !== "visible") && (n = S(n, x(t.getBoundingClientRect())), n.width === 0 || n.height === 0)) break;
90
+ if ((e.overflowX !== "visible" || e.overflowY !== "visible") && (n = C(n, S(t.getBoundingClientRect())), n.width === 0 || n.height === 0)) break;
88
91
  }
89
92
  return n;
90
- }, w = (e) => {
93
+ }, T = (e) => {
91
94
  let t = getComputedStyle(e), n = [
92
95
  t.borderTopLeftRadius,
93
96
  t.borderTopRightRadius,
@@ -100,31 +103,31 @@ var c = /* @__PURE__ */ e({
100
103
  return Number.isFinite(t) && t > 0 ? t : 0;
101
104
  });
102
105
  return r.some((e) => e > 0) ? r : void 0;
103
- }, T = (e, t) => {
106
+ }, E = (e, t) => {
104
107
  if (!e) return !1;
105
108
  let n = (e, t) => e === t || !!e && !!t && e.x === t.x && e.y === t.y && e.width === t.width && e.height === t.height;
106
109
  return n(e.rect, t.rect) && n(e.clip, t.clip) && ((e, t) => e === t || !!e && !!t && e.every((e, n) => e === t[n]))(e.radius, t.radius);
107
- }, E = /* @__PURE__ */ new Map();
108
- a("package view", () => E.size > 0);
109
- var D = async (e, t) => {
110
- let n = E.get(e);
110
+ }, D = /* @__PURE__ */ new Map();
111
+ a("package view", () => D.size > 0);
112
+ var O = async (e, t) => {
113
+ let n = D.get(e);
111
114
  if (n) {
112
115
  for (let e of n) t && e.element !== t || (e.stop(), n.delete(e));
113
116
  if (n.size > 0) return;
114
- E.delete(e);
117
+ D.delete(e);
115
118
  }
116
119
  let r = await (await p()).packages.hide(e);
117
120
  if ("error" in r) throw f(r.error, r.message);
118
- }, O = async (e, t) => {
121
+ }, k = async (e, t) => {
119
122
  let { element: n, rect: r } = t;
120
123
  if (!n && !r) throw f("invalid", "packages.show: pass an element or a rect");
121
124
  let i = (await p()).packages, a = () => {
122
- if (!n) return { rect: x(r) };
123
- let e = x(n.getBoundingClientRect());
125
+ if (!n) return { rect: S(r) };
126
+ let e = S(n.getBoundingClientRect());
124
127
  return {
125
128
  rect: e,
126
- clip: C(n, e),
127
- radius: w(n)
129
+ clip: w(n, e),
130
+ radius: T(n)
128
131
  };
129
132
  }, o = !0, s, c = 0, l = async (t) => {
130
133
  s = t;
@@ -135,7 +138,7 @@ var D = async (e, t) => {
135
138
  let u = () => {
136
139
  if (!o) return;
137
140
  let e = a();
138
- T(s, e) || l(e).catch(() => {}), c = requestAnimationFrame(u);
141
+ E(s, e) || l(e).catch(() => {}), c = requestAnimationFrame(u);
139
142
  };
140
143
  n && (c = requestAnimationFrame(u));
141
144
  let d = {
@@ -143,18 +146,18 @@ var D = async (e, t) => {
143
146
  stop: () => {
144
147
  o = !1, cancelAnimationFrame(c);
145
148
  }
146
- }, m = E.get(e) ?? /* @__PURE__ */ new Set();
147
- return m.add(d), E.set(e, m), {
149
+ }, m = D.get(e) ?? /* @__PURE__ */ new Set();
150
+ return m.add(d), D.set(e, m), {
148
151
  hide: () => {
149
- D(e, n).catch(() => {});
152
+ O(e, n).catch(() => {});
150
153
  },
151
154
  refresh: () => {
152
155
  if (!o) return;
153
156
  let e = a();
154
- T(s, e) || l(e).catch(() => {});
157
+ E(s, e) || l(e).catch(() => {});
155
158
  }
156
159
  };
157
- }, k = async (e, t = {}) => D(e, t.element), A = (async (e, n = {}) => {
160
+ }, A = async (e, t = {}) => O(e, t.element), j = (async (e, n = {}) => {
158
161
  let r = await (await p()).packages.connect(e, {
159
162
  protocol: n.protocol,
160
163
  ...n.path === void 0 ? {} : { path: n.path }
@@ -186,14 +189,14 @@ var D = async (e, t) => {
186
189
  closed: u,
187
190
  port: l
188
191
  };
189
- }), j = ["allow-scripts", "allow-same-origin"], M = (e) => {
192
+ }), M = ["allow-scripts", "allow-same-origin"], N = (e) => {
190
193
  let t = e.getAttribute("sandbox");
191
194
  if (t !== null) {
192
- let e = new Set(t.toLowerCase().split(/\s+/).filter(Boolean)), n = j.filter((t) => !e.has(t));
195
+ let e = new Set(t.toLowerCase().split(/\s+/).filter(Boolean)), n = M.filter((t) => !e.has(t));
193
196
  if (n.length) throw f("invalid", `packages.mount: the iframe's sandbox attribute must include ${n.join(" and ")}, or the package cannot start`);
194
197
  }
195
198
  if (globalThis.crossOriginIsolated && !new Set((e.getAttribute("allow") ?? "").toLowerCase().split(";").map((e) => e.trim().split(/\s+/)[0]).filter(Boolean)).has("cross-origin-isolated")) throw f("invalid", "packages.mount: this page is cross-origin isolated, so the iframe's allow attribute must include 'cross-origin-isolated' to hand that down to the package");
196
- }, N = 3e4, P = (e, t) => new Promise((n, r) => {
199
+ }, P = 3e4, F = (e, t) => new Promise((n, r) => {
197
200
  let i = (e) => {
198
201
  clearTimeout(o), window.removeEventListener("message", a), e ? r(e) : n();
199
202
  }, a = (n) => {
@@ -201,13 +204,13 @@ var D = async (e, t) => {
201
204
  let r = n.data;
202
205
  if (r?.type === "fkn-packages-ready") return i();
203
206
  r?.type === "fkn-packages-failed" && i(f("unavailable", typeof r.message == "string" && r.message ? r.message : "packages.mount: the package failed to boot"));
204
- }, o = setTimeout(() => i(f("timeout", "packages.mount: the package did not register a connection handler")), N);
207
+ }, o = setTimeout(() => i(f("timeout", "packages.mount: the package did not register a connection handler")), P);
205
208
  window.addEventListener("message", a);
206
- }), F = async (e, t) => {
209
+ }), I = async (e, t) => {
207
210
  let { iframe: n } = t;
208
211
  if (!(n instanceof HTMLIFrameElement)) throw f("invalid", "packages.mount: pass the iframe to load the package into");
209
212
  if (!n.isConnected) throw f("invalid", "packages.mount: the iframe must be in the document before mounting into it");
210
- M(n);
213
+ N(n);
211
214
  let r = await (await p()).packages.frame(e);
212
215
  if ("error" in r) throw f(r.error, r.message);
213
216
  n.src = r.url;
@@ -223,7 +226,7 @@ var D = async (e, t) => {
223
226
  }
224
227
  };
225
228
  try {
226
- await P(n, r.origin);
229
+ await F(n, r.origin);
227
230
  } catch (e) {
228
231
  throw l(), e;
229
232
  }
@@ -263,10 +266,10 @@ var D = async (e, t) => {
263
266
  } catch (e) {
264
267
  throw l(), e;
265
268
  }
266
- }, I = (e, t, n) => h(t, e, { signal: n?.signal }), L = null, R = !1, z = /* @__PURE__ */ new Set(), B = [], V = /* @__PURE__ */ new Map(), H = !1, U = !1, W = (e) => {
267
- let t = V.get(e);
268
- t && (V.delete(e), t());
269
- }, G = (e, t) => {
269
+ }, L = (e, t, n) => h(t, e, { signal: n?.signal }), R = null, z = !1, B = /* @__PURE__ */ new Set(), V = [], H = /* @__PURE__ */ new Map(), U = !1, W = !1, G = (e) => {
270
+ let t = H.get(e);
271
+ t && (H.delete(e), t());
272
+ }, K = (e, t) => {
270
273
  try {
271
274
  e.postMessage({
272
275
  type: "fkn-packages-nack",
@@ -276,26 +279,26 @@ var D = async (e, t) => {
276
279
  try {
277
280
  e.close();
278
281
  } catch {}
279
- }, K = async (e, t) => {
282
+ }, q = async (e, t) => {
280
283
  let { port: n, ...r } = e;
281
284
  e.port.addEventListener("message", (t) => {
282
- t.data?.type === "fkn-packages-disconnect" && W(e.port);
285
+ t.data?.type === "fkn-packages-disconnect" && G(e.port);
283
286
  });
284
287
  let i;
285
288
  try {
286
289
  i = await t.createPayload(r);
287
290
  } catch (t) {
288
- throw G(e.port, t instanceof Error ? t.message : "the package failed to produce a connection"), t;
291
+ throw K(e.port, t instanceof Error ? t.message : "the package failed to produce a connection"), t;
289
292
  }
290
- let a = new Promise((t) => V.set(e.port, t)), o = await m(i, e.port);
293
+ let a = new Promise((t) => H.set(e.port, t)), o = await m(i, e.port);
291
294
  t.handler?.({
292
295
  ...r,
293
296
  remote: o,
294
297
  closed: a,
295
298
  port: e.port
296
299
  });
297
- }, q = () => {
298
- H || typeof window > "u" || window.parent === window || (H = !0, window.addEventListener("message", (e) => {
300
+ }, J = () => {
301
+ U || typeof window > "u" || window.parent === window || (U = !0, window.addEventListener("message", (e) => {
299
302
  if (e.source !== window.parent) return;
300
303
  let t = e.data;
301
304
  if (t?.type === "fkn-packages-port") {
@@ -310,37 +313,37 @@ var D = async (e, t) => {
310
313
  name: typeof t.name == "string" ? t.name : "",
311
314
  version: typeof t.version == "string" ? t.version : ""
312
315
  };
313
- L ? K(r, L).catch((e) => console.warn("packages.onConnect:", e)) : B.push(r);
316
+ R ? q(r, R).catch((e) => console.warn("packages.onConnect:", e)) : V.push(r);
314
317
  }
315
- if (t?.type === "fkn-packages-close") for (let e of [...V.keys()]) W(e);
318
+ if (t?.type === "fkn-packages-close") for (let e of [...H.keys()]) G(e);
316
319
  if (t?.type === "fkn-packages-visibility") {
317
- R = t.visible === !0;
318
- for (let e of z) try {
319
- e(R);
320
+ z = t.visible === !0;
321
+ for (let e of B) try {
322
+ e(z);
320
323
  } catch {}
321
324
  }
322
325
  }));
323
- }, J = () => {
324
- U || typeof window > "u" || window.parent === window || (U = !0, window.parent.postMessage({ type: "fkn-packages-ready" }, "*"));
325
- }, Y = (e, t) => {
326
+ }, Y = () => {
327
+ W || typeof window > "u" || window.parent === window || (W = !0, window.parent.postMessage({ type: "fkn-packages-ready" }, "*"));
328
+ }, X = (e, t) => {
326
329
  if (typeof window > "u") return { unsubscribe: () => {} };
327
- q();
330
+ J();
328
331
  let n = {
329
332
  createPayload: e,
330
333
  handler: t
331
334
  };
332
- for (L = n, J(); B.length && L === n;) K(B.shift(), n).catch((e) => console.warn("packages.onConnect:", e));
335
+ for (R = n, Y(); V.length && R === n;) q(V.shift(), n).catch((e) => console.warn("packages.onConnect:", e));
333
336
  return { unsubscribe: () => {
334
- L === n && (L = null);
337
+ R === n && (R = null);
335
338
  } };
336
- }, X = () => R, Z = (e) => {
339
+ }, Z = () => z, Q = (e) => {
337
340
  if (typeof window > "u") return { unsubscribe: () => {} };
338
- q(), z.add(e);
341
+ J(), B.add(e);
339
342
  try {
340
- e(R);
343
+ e(z);
341
344
  } catch {}
342
345
  return { unsubscribe: () => {
343
- z.delete(e);
346
+ B.delete(e);
344
347
  } };
345
348
  };
346
- export { X as a, Y as c, _ as d, g as f, v as i, Z as l, b as m, A as n, y as o, O as p, k as r, F as s, I as t, c as u };
349
+ export { Z as a, X as c, _ as d, g as f, x as h, v as i, Q as l, y as m, j as n, b as o, k as p, A as r, I as s, L as t, c as u };
@@ -1,7 +1,7 @@
1
- import { E as InstalledPackage, F as PackageResult, I as PackagesErrorCode, J as Radii, P as PackageQuery, R as PickOptions, Rt as SurfaceRect, T as InstallOptions, m as ConnectOptions, z as Placement } from "./contract-CJk3vE9P.js";
1
+ import { E as InstalledPackage, F as PackageResult, I as PackagesErrorCode, J as Radii, P as PackageQuery, R as PickOptions, Rt as SurfaceRect, T as InstallOptions, m as ConnectOptions, z as Placement } from "./contract-CDdIE_Es.js";
2
2
  import { Remote } from "osra";
3
3
  declare namespace packages_d_exports {
4
- export { AppConnectOptions, Connect, ConnectOptions, ConnectPayload, IncomingConnection, IncomingConnectionInfo, InstallOptions, InstalledPackage, MountOptions, MountedPackage, PackageConnection, PackageQuery, PackageResult, PackageView, PackagesError, PackagesErrorCode, PickOptions, Placement, Radii, RawPackageConnection, ShowOptions, SurfaceRect, attach, connect, hide, install, isVisible, list, mount, onConnect, onVisibilityChange, pick, search, show, uninstall };
4
+ export { AppConnectOptions, Connect, ConnectOptions, ConnectPayload, IncomingConnection, IncomingConnectionInfo, InstallOptions, InstalledPackage, MountOptions, MountedPackage, PackageConnection, PackageQuery, PackageResult, PackageView, PackagesError, PackagesErrorCode, PickOptions, Placement, Radii, RawPackageConnection, ShowOptions, SurfaceRect, attach, connect, hide, install, isVisible, list, mount, onConnect, onVisibilityChange, pick, search, show, supportsTemporary, uninstall };
5
5
  }
6
6
  type PackagesError = Error & {
7
7
  code: PackagesErrorCode;
@@ -10,11 +10,24 @@ type PackagesError = Error & {
10
10
  declare const search: (query: PackageQuery) => Promise<PackageResult[]>;
11
11
  /** FKN-rendered picker over the same search; resolves the user's selection, already installed. [] on cancel. */
12
12
  declare const pick: (query: PackageQuery, options?: PickOptions) => Promise<PackageResult[]>;
13
- /** Install a package for this app behind an FKN-rendered confirm, or with `{ noConfirm: true }` for a notice instead of a prompt. Resolves null when the user declines. */
13
+ /**
14
+ * Install a package for this app behind an FKN-rendered confirm, or with `{ noConfirm: true }` for a
15
+ * notice instead of a prompt. Resolves null when the user declines.
16
+ *
17
+ * `{ temporary: true }` installs it for this tab only, with no install record: see
18
+ * `InstallOptions.temporary`. Throws a PackagesError with code 'unsupported', having installed nothing,
19
+ * on an fkn.app too old to hold that, so an app never ends up keeping what it asked not to keep.
20
+ */
14
21
  declare const install: (uri: string, options?: InstallOptions) => Promise<InstalledPackage | null>;
15
- /** The packages installed by this app. */
22
+ /**
23
+ * Whether fkn.app can install a package temporarily, asked with no install attempted. False on an
24
+ * fkn.app older than `InstallOptions.temporary`; on an @fkn/lib older than it this export is undefined,
25
+ * so `await packages.supportsTemporary?.() === true` holds for both.
26
+ */
27
+ declare const supportsTemporary: () => Promise<boolean>;
28
+ /** The packages installed by this app, kept and temporary. A temporary one reads `temporary: true`. */
16
29
  declare const list: () => Promise<InstalledPackage[]>;
17
- /** Uninstall a package from this app; its frames and connections are torn down. */
30
+ /** Uninstall a package from this app, kept or temporary; its frames and connections are torn down. */
18
31
  declare const uninstall: (uri: string) => Promise<void>;
19
32
  type ShowOptions = {
20
33
  /**
@@ -152,4 +165,4 @@ declare const isVisible: () => boolean;
152
165
  declare const onVisibilityChange: (handler: (visible: boolean) => void) => {
153
166
  unsubscribe: () => void;
154
167
  };
155
- export { pick as C, uninstall as E, packages_d_exports as S, show as T, isVisible as _, IncomingConnectionInfo as a, onConnect as b, PackageConnection as c, RawPackageConnection as d, ShowOptions as f, install as g, hide as h, IncomingConnection as i, PackageView as l, connect as m, Connect as n, MountOptions as o, attach as p, ConnectPayload as r, MountedPackage as s, AppConnectOptions as t, PackagesError as u, list as v, search as w, onVisibilityChange as x, mount as y };
168
+ export { pick as C, uninstall as D, supportsTemporary as E, packages_d_exports as S, show as T, isVisible as _, IncomingConnectionInfo as a, onConnect as b, PackageConnection as c, RawPackageConnection as d, ShowOptions as f, install as g, hide as h, IncomingConnection as i, PackageView as l, connect as m, Connect as n, MountOptions as o, attach as p, ConnectPayload as r, MountedPackage as s, AppConnectOptions as t, PackagesError as u, list as v, search as w, onVisibilityChange as x, mount as y };
package/packages.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./packages-DT8vPB5_.cjs");exports.attach=e.t,exports.connect=e.n,exports.hide=e.r,exports.install=e.i,exports.isVisible=e.a,exports.list=e.o,exports.mount=e.s,exports.onConnect=e.c,exports.onVisibilityChange=e.l,exports.pick=e.d,exports.search=e.f,exports.show=e.p,exports.uninstall=e.m;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./packages-CTqprdnz.cjs");exports.attach=e.t,exports.connect=e.n,exports.hide=e.r,exports.install=e.i,exports.isVisible=e.a,exports.list=e.o,exports.mount=e.s,exports.onConnect=e.c,exports.onVisibilityChange=e.l,exports.pick=e.d,exports.search=e.f,exports.show=e.p,exports.supportsTemporary=e.m,exports.uninstall=e.h;
package/packages.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- import { E as InstalledPackage, F as PackageResult, I as PackagesErrorCode, J as Radii, P as PackageQuery, R as PickOptions, Rt as SurfaceRect, T as InstallOptions, m as ConnectOptions, z as Placement } from "./contract-CJk3vE9P.js";
2
- import { C as pick, E as uninstall, T as show, _ as isVisible, a as IncomingConnectionInfo, b as onConnect, c as PackageConnection, d as RawPackageConnection, f as ShowOptions, g as install, h as hide, i as IncomingConnection, l as PackageView, m as connect, n as Connect, o as MountOptions, p as attach, r as ConnectPayload, s as MountedPackage, t as AppConnectOptions, u as PackagesError, v as list, w as search, x as onVisibilityChange, y as mount } from "./packages-BlJK4kSJ.js";
3
- export { AppConnectOptions, Connect, type ConnectOptions, ConnectPayload, IncomingConnection, IncomingConnectionInfo, type InstallOptions, type InstalledPackage, MountOptions, MountedPackage, PackageConnection, type PackageQuery, type PackageResult, PackageView, PackagesError, type PackagesErrorCode, type PickOptions, type Placement, type Radii, RawPackageConnection, ShowOptions, type SurfaceRect, attach, connect, hide, install, isVisible, list, mount, onConnect, onVisibilityChange, pick, search, show, uninstall };
1
+ import { E as InstalledPackage, F as PackageResult, I as PackagesErrorCode, J as Radii, P as PackageQuery, R as PickOptions, Rt as SurfaceRect, T as InstallOptions, m as ConnectOptions, z as Placement } from "./contract-CDdIE_Es.js";
2
+ import { C as pick, D as uninstall, E as supportsTemporary, T as show, _ as isVisible, a as IncomingConnectionInfo, b as onConnect, c as PackageConnection, d as RawPackageConnection, f as ShowOptions, g as install, h as hide, i as IncomingConnection, l as PackageView, m as connect, n as Connect, o as MountOptions, p as attach, r as ConnectPayload, s as MountedPackage, t as AppConnectOptions, u as PackagesError, v as list, w as search, x as onVisibilityChange, y as mount } from "./packages-SwO4CxMl.js";
3
+ export { AppConnectOptions, Connect, type ConnectOptions, ConnectPayload, IncomingConnection, IncomingConnectionInfo, type InstallOptions, type InstalledPackage, MountOptions, MountedPackage, PackageConnection, type PackageQuery, type PackageResult, PackageView, PackagesError, type PackagesErrorCode, type PickOptions, type Placement, type Radii, RawPackageConnection, ShowOptions, type SurfaceRect, attach, connect, hide, install, isVisible, list, mount, onConnect, onVisibilityChange, pick, search, show, supportsTemporary, uninstall };
package/packages.js CHANGED
@@ -1 +1 @@
1
- export { t as attach, n as connect, r as hide, i as install, a as isVisible, o as list, s as mount, c as onConnect, l as onVisibilityChange, d as pick, f as search, p as show, m as uninstall } from "./packages-Cws_rcgf.js";
1
+ export { t as attach, n as connect, r as hide, i as install, a as isVisible, o as list, s as mount, c as onConnect, l as onVisibilityChange, d as pick, f as search, p as show, m as supportsTemporary, h as uninstall } from "./packages-CrD5Sa28.js";
@@ -1,5 +1,5 @@
1
- import { X as Resolvers } from "./contract-CJk3vE9P.js";
2
- import "./api-BlYVLNjo.js";
1
+ import { X as Resolvers } from "./contract-CDdIE_Es.js";
2
+ import "./api-DhwJz0vo.js";
3
3
  type ProxyFetch = Resolvers['cloud']['fetch'];
4
4
  type FetchParameters = Parameters<ProxyFetch>;
5
5
  declare const cloudFetch: (input: FetchParameters[0], init?: FetchParameters[1]) => Promise<Response>;
@@ -1,5 +1,5 @@
1
1
  import { D as RelayChoice, f as Frame } from "./index-HMfzm6dF.js";
2
- import { K as RELAY_UNAVAILABLE } from "./contract-CJk3vE9P.js";
2
+ import { K as RELAY_UNAVAILABLE } from "./contract-CDdIE_Es.js";
3
3
  import { Server, Socket } from "net";
4
4
  import { Socket as Socket$1 } from "dgram";
5
5
  /** What `net.connect`, `net.createServer`, `dgram.createSocket` and `http.request` take beside Node's own options; Node ignores it. */
@@ -1,4 +1,4 @@
1
- import { $ as RoomCreateOptions, Q as RoomClaimOptions, Z as RoomBacklog, at as RoomJoinOptions, ct as RoomMember, dt as RoomPermission, et as RoomDefaults, ft as RoomPermissions, ht as RoomsErrorCode, lt as RoomMessage, mt as RoomType, nt as RoomEnvelope, ot as RoomJson, pt as RoomSchema, rt as RoomEvent, st as RoomMailbox, tt as RoomEnd, ut as RoomOpenOptions } from "./contract-CJk3vE9P.js";
1
+ import { $ as RoomCreateOptions, Q as RoomClaimOptions, Z as RoomBacklog, at as RoomJoinOptions, ct as RoomMember, dt as RoomPermission, et as RoomDefaults, ft as RoomPermissions, ht as RoomsErrorCode, lt as RoomMessage, mt as RoomType, nt as RoomEnvelope, ot as RoomJson, pt as RoomSchema, rt as RoomEvent, st as RoomMailbox, tt as RoomEnd, ut as RoomOpenOptions } from "./contract-CDdIE_Es.js";
2
2
  declare namespace rooms_d_exports {
3
3
  export { RoomClaimOptions as ClaimOptions, RoomCreateOptions as CreateOptions, RoomJoinOptions as JoinOptions, RoomOpenOptions as OpenOptions, Room, RoomBacklog, RoomDefaults, RoomEnd, RoomEnvelope, RoomEvent, RoomJson, RoomMailbox, RoomMember, RoomMessage, RoomPermission, RoomPermissions, RoomSchema, RoomType, RoomsError, RoomsErrorCode, available, create, join, open };
4
4
  }
package/rooms.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- import { $ as RoomCreateOptions, Q as RoomClaimOptions, Z as RoomBacklog, at as RoomJoinOptions, ct as RoomMember, dt as RoomPermission, et as RoomDefaults, ft as RoomPermissions, ht as RoomsErrorCode, lt as RoomMessage, mt as RoomType, nt as RoomEnvelope, ot as RoomJson, pt as RoomSchema, rt as RoomEvent, st as RoomMailbox, tt as RoomEnd, ut as RoomOpenOptions } from "./contract-CJk3vE9P.js";
2
- import { a as join, i as create, n as RoomsError, o as open, r as available, t as Room } from "./rooms-0vp7HaAY.js";
1
+ import { $ as RoomCreateOptions, Q as RoomClaimOptions, Z as RoomBacklog, at as RoomJoinOptions, ct as RoomMember, dt as RoomPermission, et as RoomDefaults, ft as RoomPermissions, ht as RoomsErrorCode, lt as RoomMessage, mt as RoomType, nt as RoomEnvelope, ot as RoomJson, pt as RoomSchema, rt as RoomEvent, st as RoomMailbox, tt as RoomEnd, ut as RoomOpenOptions } from "./contract-CDdIE_Es.js";
2
+ import { a as join, i as create, n as RoomsError, o as open, r as available, t as Room } from "./rooms-3XplwXzb.js";
3
3
  export { type RoomClaimOptions as ClaimOptions, type RoomCreateOptions as CreateOptions, type RoomJoinOptions as JoinOptions, type RoomOpenOptions as OpenOptions, Room, type RoomBacklog, type RoomDefaults, type RoomEnd, type RoomEnvelope, type RoomEvent, type RoomJson, type RoomMailbox, type RoomMember, type RoomMessage, type RoomPermission, type RoomPermissions, type RoomSchema, type RoomType, RoomsError, type RoomsErrorCode, available, create, join, open };
@@ -1,4 +1,4 @@
1
- import { It as StoredObject, Lt as StoredPage, Mt as StoragePutOptions, jt as StorageProgress, kt as StorageErrorCode } from "./contract-CJk3vE9P.js";
1
+ import { It as StoredObject, Lt as StoredPage, Mt as StoragePutOptions, jt as StorageProgress, kt as StorageErrorCode } from "./contract-CDdIE_Es.js";
2
2
  declare namespace storage_d_exports {
3
3
  export { StorageError, StorageErrorCode, StorageProgress, StoragePutOptions, StoredBlob, StoredObject, StoredPage, available, remove as delete, get, list, put };
4
4
  }
package/storage.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- import { It as StoredObject, Lt as StoredPage, Mt as StoragePutOptions, jt as StorageProgress, kt as StorageErrorCode } from "./contract-CJk3vE9P.js";
2
- import { a as list, i as get, n as StoredBlob, o as put, r as available, s as remove, t as StorageError } from "./storage-CidJUc0x.js";
1
+ import { It as StoredObject, Lt as StoredPage, Mt as StoragePutOptions, jt as StorageProgress, kt as StorageErrorCode } from "./contract-CDdIE_Es.js";
2
+ import { a as list, i as get, n as StoredBlob, o as put, r as available, s as remove, t as StorageError } from "./storage-C38adB-z.js";
3
3
  export { StorageError, type StorageErrorCode, type StorageProgress, type StoragePutOptions, StoredBlob, type StoredObject, type StoredPage, available, remove as delete, get, list, put };
@@ -1 +0,0 @@
1
- const e=require("./rolldown-runtime-BIInC43l.cjs"),t=require("./api-DrvhPN56.cjs"),n=require("./busy-BXbVH595.cjs");let r=require("osra");var i=e.t({attach:()=>M,connect:()=>E,hide:()=>T,install:()=>m,isVisible:()=>K,list:()=>h,mount:()=>j,onConnect:()=>G,onVisibilityChange:()=>q,pick:()=>p,search:()=>f,show:()=>w,uninstall:()=>g}),a=`fkn-packages-connection`,o=`https://fkn.app`,s=3e4,c=(e,t)=>Object.assign(Error(t),{code:e}),l=async()=>{if(!t.l)throw c(`unavailable`,`packages: no FKN transport in this realm - use relayWorker to bridge workers`);return t.o},u=(e,t,n)=>(0,r.expose)(e??{},{transport:t,key:a,unregisterSignal:n}),d=async(e,t,n={})=>{let{signal:r,closed:i}=n;if(r?.aborted)throw c(`unavailable`,`packages.connect: aborted before connecting`);let a=new AbortController;r&&r.addEventListener(`abort`,()=>a.abort(r.reason),{once:!0});let o=new AbortController,l=new Promise((e,n)=>{let a=setTimeout(()=>n(c(`timeout`,`packages.connect: the package did not complete the connection`)),s);o.signal.addEventListener(`abort`,()=>clearTimeout(a),{once:!0}),t.addEventListener(`message`,e=>{if(e.data?.type===`fkn-packages-nack`){let t=e.data.message;n(c(`unavailable`,typeof t==`string`&&t?t:`packages.connect: the package refused the connection`))}},{signal:o.signal}),t.start(),r&&r.addEventListener(`abort`,()=>n(c(`unavailable`,`packages.connect: aborted before connecting`)),{once:!0,signal:o.signal}),i?.then(()=>n(c(`unavailable`,`packages.connect: the package closed before connecting`)))});try{return await Promise.race([u(e,t,a.signal),l])}catch(e){a.abort(e);try{t.close()}catch{}throw e}finally{o.abort()}},f=async e=>{let t=await(await l()).packages.search(e);if(`error`in t)throw c(t.error,t.message);return t.results},p=async(e,t)=>{let n=await(await l()).packages.pick(e,t);if(`error`in n)throw c(n.error,n.message);return`declined`in n?[]:n.results},m=async(e,t)=>{let n=await(await l()).packages.install(e,t);if(`error`in n)throw c(n.error,n.message);return`declined`in n?null:n.installed},h=async()=>(await(await l()).packages.list()).results,g=async e=>{let t=await(await l()).packages.uninstall(e);if(`error`in t)throw c(t.error,t.message)},_=({x:e,y:t,width:n,height:r})=>({x:Math.round(e),y:Math.round(t),width:Math.round(n),height:Math.round(r)}),v=(e,t)=>{let n=Math.max(e.x,t.x),r=Math.max(e.y,t.y);return{x:n,y:r,width:Math.max(0,Math.min(e.x+e.width,t.x+t.width)-n),height:Math.max(0,Math.min(e.y+e.height,t.y+t.height)-r)}},y=(e,t)=>{let n=t;for(let t=e.parentElement;t;t=t.parentElement){let e=getComputedStyle(t);if((e.overflowX!==`visible`||e.overflowY!==`visible`)&&(n=v(n,_(t.getBoundingClientRect())),n.width===0||n.height===0))break}return n},b=e=>{let t=getComputedStyle(e),n=[t.borderTopLeftRadius,t.borderTopRightRadius,t.borderBottomRightRadius,t.borderBottomLeftRadius];if(n.some(e=>e.includes(`%`)||e.includes(` `)))return;let r=n.map(e=>{let t=Number.parseFloat(e);return Number.isFinite(t)&&t>0?t:0});return r.some(e=>e>0)?r:void 0},x=(e,t)=>{if(!e)return!1;let n=(e,t)=>e===t||!!e&&!!t&&e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height;return n(e.rect,t.rect)&&n(e.clip,t.clip)&&((e,t)=>e===t||!!e&&!!t&&e.every((e,n)=>e===t[n]))(e.radius,t.radius)},S=new Map;n.i(`package view`,()=>S.size>0);var C=async(e,t)=>{let n=S.get(e);if(n){for(let e of n)t&&e.element!==t||(e.stop(),n.delete(e));if(n.size>0)return;S.delete(e)}let r=await(await l()).packages.hide(e);if(`error`in r)throw c(r.error,r.message)},w=async(e,t)=>{let{element:n,rect:r}=t;if(!n&&!r)throw c(`invalid`,`packages.show: pass an element or a rect`);let i=(await l()).packages,a=()=>{if(!n)return{rect:_(r)};let e=_(n.getBoundingClientRect());return{rect:e,clip:y(n,e),radius:b(n)}},o=!0,s,u=0,d=async t=>{s=t;let n=await i.show(e,t);if(`error`in n)throw o=!1,c(n.error,n.message)};await d(a());let f=()=>{if(!o)return;let e=a();x(s,e)||d(e).catch(()=>{}),u=requestAnimationFrame(f)};n&&(u=requestAnimationFrame(f));let p={element:n,stop:()=>{o=!1,cancelAnimationFrame(u)}},m=S.get(e)??new Set;return m.add(p),S.set(e,m),{hide:()=>{C(e,n).catch(()=>{})},refresh:()=>{if(!o)return;let e=a();x(s,e)||d(e).catch(()=>{})}}},T=async(e,t={})=>C(e,t.element),E=(async(e,r={})=>{let i=await(await l()).packages.connect(e,{protocol:r.protocol,...r.path===void 0?{}:{path:r.path}});if(`error`in i)throw c(i.error,i.message);let a=n.t(`package connection`),o=t.c()?.epoch??0,s=t.u((e,t)=>{t!==o&&(a(),s())});Promise.resolve(i.closed).then(()=>{a(),s()},()=>{a(),s()});let{port:u,closed:f}=i;if(r.raw)return{closed:f,port:u};let p=await d(r.payload,u,{signal:r.signal,closed:f});return r.signal&&r.signal.addEventListener(`abort`,()=>{try{u.postMessage({type:`fkn-packages-disconnect`})}catch{}},{once:!0}),{remote:p,closed:f,port:u}}),D=[`allow-scripts`,`allow-same-origin`],O=e=>{let t=e.getAttribute(`sandbox`);if(t!==null){let e=new Set(t.toLowerCase().split(/\s+/).filter(Boolean)),n=D.filter(t=>!e.has(t));if(n.length)throw c(`invalid`,`packages.mount: the iframe's sandbox attribute must include ${n.join(` and `)}, or the package cannot start`)}if(globalThis.crossOriginIsolated&&!new Set((e.getAttribute(`allow`)??``).toLowerCase().split(`;`).map(e=>e.trim().split(/\s+/)[0]).filter(Boolean)).has(`cross-origin-isolated`))throw c(`invalid`,`packages.mount: this page is cross-origin isolated, so the iframe's allow attribute must include 'cross-origin-isolated' to hand that down to the package`)},k=3e4,A=(e,t)=>new Promise((n,r)=>{let i=e=>{clearTimeout(o),window.removeEventListener(`message`,a),e?r(e):n()},a=n=>{if(n.source!==e.contentWindow||n.origin!==t)return;let r=n.data;if(r?.type===`fkn-packages-ready`)return i();r?.type===`fkn-packages-failed`&&i(c(`unavailable`,typeof r.message==`string`&&r.message?r.message:`packages.mount: the package failed to boot`))},o=setTimeout(()=>i(c(`timeout`,`packages.mount: the package did not register a connection handler`)),k);window.addEventListener(`message`,a)}),j=async(e,t)=>{let{iframe:r}=t;if(!(r instanceof HTMLIFrameElement))throw c(`invalid`,`packages.mount: pass the iframe to load the package into`);if(!r.isConnected)throw c(`invalid`,`packages.mount: the iframe must be in the document before mounting into it`);O(r);let i=await(await l()).packages.frame(e);if(`error`in i)throw c(i.error,i.message);r.src=i.url;let a={done:!1},o=()=>{},s=new Promise(e=>{o=e}),u=n.t(`mounted package`),f=()=>{if(!a.done){a.done=!0,u();try{r.contentWindow?.postMessage({type:`fkn-packages-close`},i.origin)}catch{}r.src=`about:blank`,o()}};try{await A(r,i.origin)}catch(e){throw f(),e}let p=new MessageChannel,m=r.contentWindow;if(!m)throw f(),c(`unavailable`,`packages.mount: the frame was detached before it could connect`);m.postMessage({type:`fkn-packages-port`,from:i.from,protocol:t.protocol,uri:i.uri,name:i.name,version:i.version},i.origin,[p.port2]);try{m.postMessage({type:`fkn-packages-visibility`,visible:!0},i.origin)}catch{}if(t.raw)return{closed:s,port:p.port1,frame:r,unmount:f};try{return{remote:await d(t.payload,p.port1,{signal:t.signal,closed:s}),closed:s,port:p.port1,frame:r,unmount:f}}catch(e){throw f(),e}},M=(e,t,n)=>d(t,e,{signal:n?.signal}),N=null,P=!1,F=new Set,I=[],L=new Map,R=!1,z=!1,B=e=>{let t=L.get(e);t&&(L.delete(e),t())},V=(e,t)=>{try{e.postMessage({type:`fkn-packages-nack`,message:t})}catch{}try{e.close()}catch{}},H=async(e,t)=>{let{port:n,...r}=e;e.port.addEventListener(`message`,t=>{t.data?.type===`fkn-packages-disconnect`&&B(e.port)});let i;try{i=await t.createPayload(r)}catch(t){throw V(e.port,t instanceof Error?t.message:`the package failed to produce a connection`),t}let a=new Promise(t=>L.set(e.port,t)),o=await u(i,e.port);t.handler?.({...r,remote:o,closed:a,port:e.port})},U=()=>{R||typeof window>`u`||window.parent===window||(R=!0,window.addEventListener(`message`,e=>{if(e.source!==window.parent)return;let t=e.data;if(t?.type===`fkn-packages-port`){let n=e.ports[0];if(!n)return;let r={port:n,from:typeof t.from==`string`?t.from:``,brokered:e.origin===o,protocol:typeof t.protocol==`string`?t.protocol:null,uri:typeof t.uri==`string`?t.uri:``,name:typeof t.name==`string`?t.name:``,version:typeof t.version==`string`?t.version:``};N?H(r,N).catch(e=>console.warn(`packages.onConnect:`,e)):I.push(r)}if(t?.type===`fkn-packages-close`)for(let e of[...L.keys()])B(e);if(t?.type===`fkn-packages-visibility`){P=t.visible===!0;for(let e of F)try{e(P)}catch{}}}))},W=()=>{z||typeof window>`u`||window.parent===window||(z=!0,window.parent.postMessage({type:`fkn-packages-ready`},`*`))},G=(e,t)=>{if(typeof window>`u`)return{unsubscribe:()=>{}};U();let n={createPayload:e,handler:t};for(N=n,W();I.length&&N===n;)H(I.shift(),n).catch(e=>console.warn(`packages.onConnect:`,e));return{unsubscribe:()=>{N===n&&(N=null)}}},K=()=>P,q=e=>{if(typeof window>`u`)return{unsubscribe:()=>{}};U(),F.add(e);try{e(P)}catch{}return{unsubscribe:()=>{F.delete(e)}}};Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return K}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return G}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return q}}),Object.defineProperty(exports,"m",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,"p",{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return i}});