@fkn/lib 0.9.40 → 0.9.42

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 (98) hide show
  1. package/account-generation-B-6Pn0b5.cjs +1 -0
  2. package/account-generation-XNWOvLea.js +28 -0
  3. package/account.cjs +1 -1
  4. package/account.d.ts +11 -0
  5. package/account.js +8 -20
  6. package/api--LOXTOpv.cjs +3 -0
  7. package/{api-Dp-2AT3u.js → api-DIgTslNb.js} +154 -114
  8. package/{api-BE5zPvFZ.d.ts → api-SwxtiYVU.d.ts} +38 -14
  9. package/api.cjs +1 -1
  10. package/api.d.ts +3 -3
  11. package/api.js +2 -2
  12. package/attach-policy.cjs +1 -1
  13. package/attach-policy.js +2 -2
  14. package/cloud/dns.d.ts +1 -1
  15. package/cloud/fetch.cjs +1 -1
  16. package/cloud/fetch.d.ts +1 -1
  17. package/cloud/fetch.js +1 -1
  18. package/cloud/fs/promises.d.ts +1 -1
  19. package/cloud/fs.cjs +1 -1
  20. package/cloud/fs.d.ts +4 -4
  21. package/cloud/fs.js +31 -24
  22. package/cloud/net.d.ts +1 -1
  23. package/cloud-868OlBKn.cjs +1 -0
  24. package/{cloud-5eldoFxK.d.ts → cloud-DUH-v10C.d.ts} +6 -4
  25. package/cloud-f3j4s8yZ.js +545 -0
  26. package/cloud.cjs +1 -1
  27. package/cloud.d.ts +4 -4
  28. package/cloud.js +2 -2
  29. package/{contract-Cvr_8gCL.d.ts → contract-CCxPKIC7.d.ts} +105 -13
  30. package/contract.d.ts +3 -2
  31. package/dgram.cjs +1 -1
  32. package/dgram.d.ts +2 -2
  33. package/dgram.js +1 -1
  34. package/dns.cjs +1 -1
  35. package/dns.d.ts +1 -1
  36. package/dns.js +1 -1
  37. package/extension-BOBuYwZc.js +92 -0
  38. package/extension-hoUs5yJ7.cjs +1 -0
  39. package/{extension-DMU-CwMw.d.ts → extension-yhwDSIiD.d.ts} +22 -3
  40. package/extension.cjs +1 -1
  41. package/extension.d.ts +3 -3
  42. package/extension.js +3 -3
  43. package/fs/promises.cjs +1 -1
  44. package/fs/promises.d.ts +1 -1
  45. package/fs/promises.js +1 -1
  46. package/fs-CVnmXRf7.js +513 -0
  47. package/{fs--NhtUyYa.d.ts → fs-D0MMRnHC.d.ts} +8 -4
  48. package/fs-p0bOOj5n.cjs +1 -0
  49. package/fs.cjs +1 -1
  50. package/fs.d.ts +4 -3
  51. package/fs.js +4 -2
  52. package/{hosts-9dYv63ud.cjs → hosts-GNBhZO3-.cjs} +1 -1
  53. package/{hosts-BzbzOhG8.js → hosts-t7CKGTRz.js} +4 -1
  54. package/http.d.ts +1 -1
  55. package/{index-D2CA-NX5.d.ts → index-BtFiGoVQ.d.ts} +465 -51
  56. package/{index-kuPqkS_-.d.ts → index-D2lvaQDs.d.ts} +28 -38
  57. package/index.cjs +1 -1
  58. package/index.d.ts +17 -17
  59. package/index.js +62 -59
  60. package/lib-CfdmsLoI.cjs +53 -0
  61. package/{lib-C4Eeg9eM.js → lib-DppqX10G.js} +470 -302
  62. package/{messages-C66ghz_A.d.ts → messages-CRcziTuC.d.ts} +17 -1
  63. package/messages.cjs +1 -1
  64. package/messages.d.ts +2 -2
  65. package/messages.js +2 -2
  66. package/{net-zThwNoA8.d.ts → net-DcLF-6E-.d.ts} +2 -2
  67. package/net.cjs +1 -1
  68. package/net.d.ts +1 -1
  69. package/net.js +1 -1
  70. package/{node-fs-BZy9bzKd.js → node-fs-CK2wWIYS.js} +140 -137
  71. package/node-fs-nfX7wisL.cjs +1 -0
  72. package/opfs.cjs +1 -1
  73. package/opfs.js +1 -1
  74. package/package.json +1 -1
  75. package/packages.cjs +1 -1
  76. package/packages.d.ts +1 -1
  77. package/packages.js +14 -14
  78. package/{proxy-Dc0gDOxz.d.ts → proxy-CE46SkyA.d.ts} +2 -2
  79. package/{proxy-DjoPtJH9.cjs → proxy-CFK-KiwE.cjs} +1 -1
  80. package/{proxy-DMTdQ4dN.js → proxy-Dixbk1WL.js} +1 -1
  81. package/rooms.cjs +1 -1
  82. package/rooms.d.ts +1 -1
  83. package/rooms.js +11 -11
  84. package/storage-BVr2Rb-d.d.ts +167 -0
  85. package/storage-D2cUJlVH.cjs +1 -0
  86. package/storage-Dn1gTLSZ.js +123 -0
  87. package/api-jOTOA-5n.cjs +0 -3
  88. package/cloud-BLv19j-W.js +0 -480
  89. package/cloud-D7aQY4GH.cjs +0 -1
  90. package/extension-B9v933cT.js +0 -89
  91. package/extension-D2zMdc2f.cjs +0 -1
  92. package/fs-CaQFRiIT.cjs +0 -1
  93. package/fs-D3IsGdnN.js +0 -360
  94. package/lib-BfAg9mHD.cjs +0 -53
  95. package/node-fs-BNTPsX5c.cjs +0 -1
  96. package/storage-BJd-mWHE.cjs +0 -1
  97. package/storage-DSvL-t80.js +0 -67
  98. package/storage-ZrY4Y4L5.d.ts +0 -88
@@ -26,5 +26,21 @@ declare const STORAGE_NOT_FOUND = "FKN_STORAGE_NOT_FOUND";
26
26
  * same-realm callers, which is the cheaper test when it is available.
27
27
  */
28
28
  declare const STORAGE_UNREACHABLE = "FKN_API_UNREACHABLE";
29
+ /**
30
+ * The account pin's refusals, as message prefixes the broker throws, for the same reason as the e2e
31
+ * messages above: osra keeps an Error's message and strips its code across the SharedWorker hop.
32
+ *
33
+ * `ACCOUNT_CHANGED_MESSAGE`: the api refused a call because the signed-in account is not the one its
34
+ * pin was taken under. `ACCOUNT_PIN_INVALID_MESSAGE`: the api could not read the pin at all.
35
+ * `ACCOUNT_PIN_UNSUPPORTED_MESSAGE`: some hop (the broker document or its shared worker) is older than
36
+ * the pin, so the call was refused rather than sent unpinned. None of the three is a sign-out.
37
+ */
38
+ declare const ACCOUNT_CHANGED_MESSAGE = "fkn:account-changed";
39
+ declare const ACCOUNT_PIN_INVALID_MESSAGE = "fkn:account-pin-invalid";
40
+ declare const ACCOUNT_PIN_UNSUPPORTED_MESSAGE = "fkn:account-pin-unsupported";
41
+ /** The code of `StorageAccountChangedError`: a call made under one account was refused under another. */
42
+ declare const STORAGE_ACCOUNT_CHANGED = "FKN_ACCOUNT_CHANGED";
43
+ /** The code of `StorageAccountPinUnsupportedError`: the broker cannot pin calls, so none was sent. */
44
+ declare const STORAGE_ACCOUNT_PIN_UNSUPPORTED = "FKN_ACCOUNT_PIN_UNSUPPORTED";
29
45
  //#endregion
30
- export { STORAGE_NOT_FOUND as a, E2E_STALE_EPOCH_MESSAGE as i, E2E_LOCKED_MESSAGE as n, STORAGE_UNREACHABLE as o, E2E_RETIRED_FORMAT_MESSAGE as r, E2E_INTEGRITY_MESSAGE as t };
46
+ export { E2E_LOCKED_MESSAGE as a, STORAGE_ACCOUNT_CHANGED as c, STORAGE_UNREACHABLE as d, E2E_INTEGRITY_MESSAGE as i, STORAGE_ACCOUNT_PIN_UNSUPPORTED as l, ACCOUNT_PIN_INVALID_MESSAGE as n, E2E_RETIRED_FORMAT_MESSAGE as o, ACCOUNT_PIN_UNSUPPORTED_MESSAGE as r, E2E_STALE_EPOCH_MESSAGE as s, ACCOUNT_CHANGED_MESSAGE as t, STORAGE_NOT_FOUND as u };
package/messages.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=`fkn:e2e-locked`,t=`fkn:e2e-stale-epoch: this file is encrypted under a previous key you reset`,n=`fkn:e2e-integrity: stored data failed its integrity check`,r=`fkn:e2e-retired-format: stored data is in a format this version no longer opens`,i=`FKN_STORAGE_NOT_FOUND`,a=`FKN_API_UNREACHABLE`;exports.E2E_INTEGRITY_MESSAGE=n,exports.E2E_LOCKED_MESSAGE=e,exports.E2E_RETIRED_FORMAT_MESSAGE=r,exports.E2E_STALE_EPOCH_MESSAGE=t,exports.STORAGE_NOT_FOUND=i,exports.STORAGE_UNREACHABLE=a;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=`fkn:e2e-locked`,t=`fkn:e2e-stale-epoch: this file is encrypted under a previous key you reset`,n=`fkn:e2e-integrity: stored data failed its integrity check`,r=`fkn:e2e-retired-format: stored data is in a format this version no longer opens`,i=`FKN_STORAGE_NOT_FOUND`,a=`FKN_API_UNREACHABLE`,o=`fkn:account-changed`,s=`fkn:account-pin-invalid`,c=`fkn:account-pin-unsupported`,l=`FKN_ACCOUNT_CHANGED`,u=`FKN_ACCOUNT_PIN_UNSUPPORTED`;exports.ACCOUNT_CHANGED_MESSAGE=o,exports.ACCOUNT_PIN_INVALID_MESSAGE=s,exports.ACCOUNT_PIN_UNSUPPORTED_MESSAGE=c,exports.E2E_INTEGRITY_MESSAGE=n,exports.E2E_LOCKED_MESSAGE=e,exports.E2E_RETIRED_FORMAT_MESSAGE=r,exports.E2E_STALE_EPOCH_MESSAGE=t,exports.STORAGE_ACCOUNT_CHANGED=l,exports.STORAGE_ACCOUNT_PIN_UNSUPPORTED=u,exports.STORAGE_NOT_FOUND=i,exports.STORAGE_UNREACHABLE=a;
package/messages.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { a as STORAGE_NOT_FOUND, i as E2E_STALE_EPOCH_MESSAGE, n as E2E_LOCKED_MESSAGE, o as STORAGE_UNREACHABLE, r as E2E_RETIRED_FORMAT_MESSAGE, t as E2E_INTEGRITY_MESSAGE } from "./messages-C66ghz_A.js";
2
- export { E2E_INTEGRITY_MESSAGE, E2E_LOCKED_MESSAGE, E2E_RETIRED_FORMAT_MESSAGE, E2E_STALE_EPOCH_MESSAGE, STORAGE_NOT_FOUND, STORAGE_UNREACHABLE };
1
+ import { a as E2E_LOCKED_MESSAGE, c as STORAGE_ACCOUNT_CHANGED, d as STORAGE_UNREACHABLE, i as E2E_INTEGRITY_MESSAGE, l as STORAGE_ACCOUNT_PIN_UNSUPPORTED, n as ACCOUNT_PIN_INVALID_MESSAGE, o as E2E_RETIRED_FORMAT_MESSAGE, r as ACCOUNT_PIN_UNSUPPORTED_MESSAGE, s as E2E_STALE_EPOCH_MESSAGE, t as ACCOUNT_CHANGED_MESSAGE, u as STORAGE_NOT_FOUND } from "./messages-CRcziTuC.js";
2
+ export { ACCOUNT_CHANGED_MESSAGE, ACCOUNT_PIN_INVALID_MESSAGE, ACCOUNT_PIN_UNSUPPORTED_MESSAGE, E2E_INTEGRITY_MESSAGE, E2E_LOCKED_MESSAGE, E2E_RETIRED_FORMAT_MESSAGE, E2E_STALE_EPOCH_MESSAGE, STORAGE_ACCOUNT_CHANGED, STORAGE_ACCOUNT_PIN_UNSUPPORTED, STORAGE_NOT_FOUND, STORAGE_UNREACHABLE };
package/messages.js CHANGED
@@ -1,4 +1,4 @@
1
1
  //#region src/messages.ts
2
- var e = "fkn:e2e-locked", t = "fkn:e2e-stale-epoch: this file is encrypted under a previous key you reset", n = "fkn:e2e-integrity: stored data failed its integrity check", r = "fkn:e2e-retired-format: stored data is in a format this version no longer opens", i = "FKN_STORAGE_NOT_FOUND", a = "FKN_API_UNREACHABLE";
2
+ var e = "fkn:e2e-locked", t = "fkn:e2e-stale-epoch: this file is encrypted under a previous key you reset", n = "fkn:e2e-integrity: stored data failed its integrity check", r = "fkn:e2e-retired-format: stored data is in a format this version no longer opens", i = "FKN_STORAGE_NOT_FOUND", a = "FKN_API_UNREACHABLE", o = "fkn:account-changed", s = "fkn:account-pin-invalid", c = "fkn:account-pin-unsupported", l = "FKN_ACCOUNT_CHANGED", u = "FKN_ACCOUNT_PIN_UNSUPPORTED";
3
3
  //#endregion
4
- export { n as E2E_INTEGRITY_MESSAGE, e as E2E_LOCKED_MESSAGE, r as E2E_RETIRED_FORMAT_MESSAGE, t as E2E_STALE_EPOCH_MESSAGE, i as STORAGE_NOT_FOUND, a as STORAGE_UNREACHABLE };
4
+ export { o as ACCOUNT_CHANGED_MESSAGE, s as ACCOUNT_PIN_INVALID_MESSAGE, c as ACCOUNT_PIN_UNSUPPORTED_MESSAGE, n as E2E_INTEGRITY_MESSAGE, e as E2E_LOCKED_MESSAGE, r as E2E_RETIRED_FORMAT_MESSAGE, t as E2E_STALE_EPOCH_MESSAGE, l as STORAGE_ACCOUNT_CHANGED, u as STORAGE_ACCOUNT_PIN_UNSUPPORTED, i as STORAGE_NOT_FOUND, a as STORAGE_UNREACHABLE };
@@ -1,6 +1,6 @@
1
1
  import { o as TcpSocketOption } from "./wire-Gbo-D74t.js";
2
- import { St as TcpSocketResult, U as Resolvers, bt as TcpSocketListenerResult } from "./contract-Cvr_8gCL.js";
3
- import "./api-BE5zPvFZ.js";
2
+ import { Ct as TcpSocketListenerResult, K as Resolvers, Tt as TcpSocketResult } from "./contract-CCxPKIC7.js";
3
+ import "./api-SwxtiYVU.js";
4
4
  import { AddressInfo, ListenOptions, Server, ServerOpts, Socket, SocketConnectOpts, SocketConstructorOpts } from "net";
5
5
  import { DuplexOptions, Stream } from "stream";
6
6
  import { EventEmitter } from "events";
package/net.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("./rolldown-runtime-BIInC43l.cjs"),t=require("./api-jOTOA-5n.cjs"),n=require("./busy-Dv8wzE5M.cjs"),r=require("./utils-BvgGdrgN.cjs");require("./wire.cjs");let i=require("stream"),a=require("events");var o=e.t({Server:()=>c,Socket:()=>s,_default:()=>f,connect:()=>l,createConnection:()=>u,createServer:()=>d,default:()=>f,isIP:()=>r.r,isIPv4:()=>r.i,isIPv6:()=>r.a}),s=class extends i.Stream.Duplex{_localAddress;_remoteAddress;_webVPNTcpSocketPromise;constructor(e){if(e?.fd!==void 0)throw Error(`FKN WebVPN does not support file descriptors`);super(e),e?.connection&&this.__webvpn_tcp_socket_init__(e.connection)}_busyRelease;__webvpn_tcp_socket_init__(e,t){if(this._busyRelease??=n.t(`tcp socket`),t&&(this._localAddress={address:t.localAddress,family:t.localFamily,port:t.localPort},this._remoteAddress={address:t.remoteAddress,family:t.remoteFamily,port:t.remotePort}),this._webVPNTcpSocketPromise=e.then(e=>{let t=e.dataReadableStream.getReader(),n=e.dataWritableStream.getWriter();return this._localAddress={address:e.localAddress,family:e.localFamily,port:e.localPort},this._remoteAddress={address:e.remoteAddress,family:e.remoteFamily,port:e.remotePort},{...e,reader:t,writer:n}}).catch(e=>{this.emit(`error`,e)}),!this._webVPNTcpSocketPromise)throw Error(`Socket not connected`);return this._webVPNTcpSocketPromise.then(e=>{if(!e){this._busyRelease?.();return}this.emit(`connect`)}),this._webVPNTcpSocketPromise}_read(e){if(!this._webVPNTcpSocketPromise)throw Error(`Socket not connected`);this._webVPNTcpSocketPromise.then(e=>{if(!e){this.push(null);return}e.reader.read().then(({value:e,done:t})=>{if(t){this.push(null);return}this._restartTimeoutTimer(),this.push(e)}).catch(e=>{this.destroy(e)})})}_write(e,t,n){if(!this._webVPNTcpSocketPromise){n(Error(`Socket not connected`));return}this._webVPNTcpSocketPromise.then(async t=>{if(!t)throw Error(`Socket not connected`);await t.writer.ready,await t.writer.write(e),this._restartTimeoutTimer(),n()}).catch(n)}connect(...e){let n=r.c(...e),i=this.__webvpn_tcp_socket_init__(t.o(`an outbound tcp socket`).then(e=>e.cloud.webvpn.tcpSocket({remoteAddress:n.host??`localhost`,remotePort:n.port})));return n.callback&&i.then(e=>{e&&n.callback.call(this)}),this}_final(e){if(!this._webVPNTcpSocketPromise){e();return}this._webVPNTcpSocketPromise.then(async e=>{e&&await e.writer.close()}).then(()=>e(),t=>e(t))}_destroy(e,t){if(this._timeoutTimer&&clearTimeout(this._timeoutTimer),this._busyRelease?.(),!this._webVPNTcpSocketPromise){t(e);return}this._webVPNTcpSocketPromise.then(async e=>{e&&await(this._resetRequested?e.resetAndDestroy():e.destroy())}).then(()=>t(e),()=>t(e))}destroySoon(){if(this.writableFinished){this.destroy();return}this.once(`finish`,()=>this.destroy()),this.end()}_resetRequested=!1;resetAndDestroy(){return this._resetRequested=!0,this.destroy(),this}_timeoutMs;_timeoutTimer;_restartTimeoutTimer(){this._timeoutTimer&&clearTimeout(this._timeoutTimer),this._timeoutMs&&(this._timeoutTimer=setTimeout(()=>this.emit(`timeout`),this._timeoutMs))}setTimeout(e,t){return t&&this.on(`timeout`,t),this._timeoutMs=e,this._restartTimeoutTimer(),this}setNoDelay(e){let t=e??!0;return this._setTcpOption({type:0,value:t}),this}setKeepAlive(e,t){let n=e??!1,r=t!==void 0&&t>0?Math.max(1,Math.round(t/1e3)):0;return this._setTcpOption({type:2,enabled:n,initialDelaySeconds:r}),this}setSendBufferSize(e){return this._setTcpOption({type:3,value:e}),this}setRecvBufferSize(e){return this._setTcpOption({type:4,value:e}),this}_typeOfService;getTypeOfService(){return this._typeOfService??0}setTypeOfService(e){return this._typeOfService=e,this}_setTcpOption(e){if(!this._webVPNTcpSocketPromise){this.emit(`error`,Error(`Cannot set socket option before connect`));return}this._webVPNTcpSocketPromise.then(async t=>{if(t)try{await t.setOption(e)}catch(e){this.emit(`error`,e)}})}write(e,t,...n){return super.write(e,t,...n)}address(){return this._localAddress??{}}unref(){return this}ref(){return this}autoSelectFamilyAttemptedAddresses;bufferSize;bytesRead;bytesWritten;connecting;pending;get localAddress(){if(!this._localAddress)throw Error(`Socket is not connected`);return this._localAddress.address}get localPort(){if(!this._localAddress)throw Error(`Socket is not connected`);return this._localAddress.port}get localFamily(){if(!this._localAddress)throw Error(`Socket is not connected`);return this._localAddress.family}readyState;get remoteAddress(){if(!this._remoteAddress)throw Error(`Socket is not connected`);return this._remoteAddress.address}get remotePort(){if(!this._remoteAddress)throw Error(`Socket is not connected`);return this._remoteAddress.port}get remoteFamily(){if(!this._remoteAddress)throw Error(`Socket is not connected`);return this._remoteAddress.family}timeout},c=class extends a.EventEmitter{_localAddress;_webVPNTcpSocketListenerPromise;constructor(e,t){super(e),t&&this.on(`connection`,t),e?.connection&&this.__webvpn_tcp_socket_listener_init__(e.connection)}_busyRelease;__webvpn_tcp_socket_listener_init__(e){return this._busyRelease??=n.t(`tcp server`),this._webVPNTcpSocketListenerPromise=e.then(e=>(this._localAddress={address:e.localAddress,family:e.localFamily,port:e.localPort},e)).catch(e=>{this.emit(`error`,e)}),this._webVPNTcpSocketListenerPromise.then(e=>{if(!e){this._busyRelease?.();return}this.emit(`listening`)}),this._webVPNTcpSocketListenerPromise}listen(...e){let n=r.c(...e);this._closeEmitted=!1;let i=e=>{let t=new s;t.__webvpn_tcp_socket_init__(Promise.resolve(e),e),this.emit(`connection`,t)},a=e=>{this._localAddress=void 0;try{e&&this.listenerCount(`error`)>0&&this.emit(`error`,e)}finally{this._emitClose()}},o=e=>t.o(`a tcp listener`).then(t=>t.cloud.webvpn.tcpSocketListener({localAddress:e,localPort:n.port,onConnection:i,onClose:a})),c=n.host?o(n.host):o(`::`).catch(()=>o(`0.0.0.0`)),l=this.__webvpn_tcp_socket_listener_init__(c);return n.callback&&l.then(e=>{e&&n.callback.call(this)}),this}_closeEmitted=!1;_emitClose(){this._closeEmitted||(this._closeEmitted=!0,this._busyRelease?.(),this.emit(`close`))}close(e){return this._webVPNTcpSocketListenerPromise&&this._webVPNTcpSocketListenerPromise.then(async t=>{if(t)try{await t.close(),this._localAddress=void 0,this._emitClose(),e&&e()}catch(t){this._localAddress=void 0,this._emitClose(),e&&e(t)}}),this}address(){return this._localAddress??null}getConnections(e){throw Error(`Method not implemented.`)}ref(){return this}unref(){return this}maxConnections;connections;listening;async[Symbol.asyncDispose](){}},l=(e,t)=>new s().connect(e,t),u=(e,t)=>new s().connect(e,t),d=(e,t)=>{typeof e==`function`&&(t=e,e=void 0);let n=new c(e);return t&&n.on(`connection`,t),n},f={Socket:s,Server:c,connect:l,createConnection:u,createServer:d,isIP:r.r,isIPv4:r.i,isIPv6:r.a};exports.Server=c,exports.Socket=s,exports._default=f,exports.default=f,exports.connect=l,exports.createConnection=u,exports.createServer=d,exports.isIP=r.r,exports.isIPv4=r.i,exports.isIPv6=r.a,Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return o}});
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("./rolldown-runtime-BIInC43l.cjs"),t=require("./api--LOXTOpv.cjs"),n=require("./busy-Dv8wzE5M.cjs"),r=require("./utils-BvgGdrgN.cjs");require("./wire.cjs");let i=require("stream"),a=require("events");var o=e.t({Server:()=>c,Socket:()=>s,_default:()=>f,connect:()=>l,createConnection:()=>u,createServer:()=>d,default:()=>f,isIP:()=>r.r,isIPv4:()=>r.i,isIPv6:()=>r.a}),s=class extends i.Stream.Duplex{_localAddress;_remoteAddress;_webVPNTcpSocketPromise;constructor(e){if(e?.fd!==void 0)throw Error(`FKN WebVPN does not support file descriptors`);super(e),e?.connection&&this.__webvpn_tcp_socket_init__(e.connection)}_busyRelease;__webvpn_tcp_socket_init__(e,t){if(this._busyRelease??=n.t(`tcp socket`),t&&(this._localAddress={address:t.localAddress,family:t.localFamily,port:t.localPort},this._remoteAddress={address:t.remoteAddress,family:t.remoteFamily,port:t.remotePort}),this._webVPNTcpSocketPromise=e.then(e=>{let t=e.dataReadableStream.getReader(),n=e.dataWritableStream.getWriter();return this._localAddress={address:e.localAddress,family:e.localFamily,port:e.localPort},this._remoteAddress={address:e.remoteAddress,family:e.remoteFamily,port:e.remotePort},{...e,reader:t,writer:n}}).catch(e=>{this.emit(`error`,e)}),!this._webVPNTcpSocketPromise)throw Error(`Socket not connected`);return this._webVPNTcpSocketPromise.then(e=>{if(!e){this._busyRelease?.();return}this.emit(`connect`)}),this._webVPNTcpSocketPromise}_read(e){if(!this._webVPNTcpSocketPromise)throw Error(`Socket not connected`);this._webVPNTcpSocketPromise.then(e=>{if(!e){this.push(null);return}e.reader.read().then(({value:e,done:t})=>{if(t){this.push(null);return}this._restartTimeoutTimer(),this.push(e)}).catch(e=>{this.destroy(e)})})}_write(e,t,n){if(!this._webVPNTcpSocketPromise){n(Error(`Socket not connected`));return}this._webVPNTcpSocketPromise.then(async t=>{if(!t)throw Error(`Socket not connected`);await t.writer.ready,await t.writer.write(e),this._restartTimeoutTimer(),n()}).catch(n)}connect(...e){let n=r.c(...e),i=this.__webvpn_tcp_socket_init__(t.s(`an outbound tcp socket`).then(e=>e.cloud.webvpn.tcpSocket({remoteAddress:n.host??`localhost`,remotePort:n.port})));return n.callback&&i.then(e=>{e&&n.callback.call(this)}),this}_final(e){if(!this._webVPNTcpSocketPromise){e();return}this._webVPNTcpSocketPromise.then(async e=>{e&&await e.writer.close()}).then(()=>e(),t=>e(t))}_destroy(e,t){if(this._timeoutTimer&&clearTimeout(this._timeoutTimer),this._busyRelease?.(),!this._webVPNTcpSocketPromise){t(e);return}this._webVPNTcpSocketPromise.then(async e=>{e&&await(this._resetRequested?e.resetAndDestroy():e.destroy())}).then(()=>t(e),()=>t(e))}destroySoon(){if(this.writableFinished){this.destroy();return}this.once(`finish`,()=>this.destroy()),this.end()}_resetRequested=!1;resetAndDestroy(){return this._resetRequested=!0,this.destroy(),this}_timeoutMs;_timeoutTimer;_restartTimeoutTimer(){this._timeoutTimer&&clearTimeout(this._timeoutTimer),this._timeoutMs&&(this._timeoutTimer=setTimeout(()=>this.emit(`timeout`),this._timeoutMs))}setTimeout(e,t){return t&&this.on(`timeout`,t),this._timeoutMs=e,this._restartTimeoutTimer(),this}setNoDelay(e){let t=e??!0;return this._setTcpOption({type:0,value:t}),this}setKeepAlive(e,t){let n=e??!1,r=t!==void 0&&t>0?Math.max(1,Math.round(t/1e3)):0;return this._setTcpOption({type:2,enabled:n,initialDelaySeconds:r}),this}setSendBufferSize(e){return this._setTcpOption({type:3,value:e}),this}setRecvBufferSize(e){return this._setTcpOption({type:4,value:e}),this}_typeOfService;getTypeOfService(){return this._typeOfService??0}setTypeOfService(e){return this._typeOfService=e,this}_setTcpOption(e){if(!this._webVPNTcpSocketPromise){this.emit(`error`,Error(`Cannot set socket option before connect`));return}this._webVPNTcpSocketPromise.then(async t=>{if(t)try{await t.setOption(e)}catch(e){this.emit(`error`,e)}})}write(e,t,...n){return super.write(e,t,...n)}address(){return this._localAddress??{}}unref(){return this}ref(){return this}autoSelectFamilyAttemptedAddresses;bufferSize;bytesRead;bytesWritten;connecting;pending;get localAddress(){if(!this._localAddress)throw Error(`Socket is not connected`);return this._localAddress.address}get localPort(){if(!this._localAddress)throw Error(`Socket is not connected`);return this._localAddress.port}get localFamily(){if(!this._localAddress)throw Error(`Socket is not connected`);return this._localAddress.family}readyState;get remoteAddress(){if(!this._remoteAddress)throw Error(`Socket is not connected`);return this._remoteAddress.address}get remotePort(){if(!this._remoteAddress)throw Error(`Socket is not connected`);return this._remoteAddress.port}get remoteFamily(){if(!this._remoteAddress)throw Error(`Socket is not connected`);return this._remoteAddress.family}timeout},c=class extends a.EventEmitter{_localAddress;_webVPNTcpSocketListenerPromise;constructor(e,t){super(e),t&&this.on(`connection`,t),e?.connection&&this.__webvpn_tcp_socket_listener_init__(e.connection)}_busyRelease;__webvpn_tcp_socket_listener_init__(e){return this._busyRelease??=n.t(`tcp server`),this._webVPNTcpSocketListenerPromise=e.then(e=>(this._localAddress={address:e.localAddress,family:e.localFamily,port:e.localPort},e)).catch(e=>{this.emit(`error`,e)}),this._webVPNTcpSocketListenerPromise.then(e=>{if(!e){this._busyRelease?.();return}this.emit(`listening`)}),this._webVPNTcpSocketListenerPromise}listen(...e){let n=r.c(...e);this._closeEmitted=!1;let i=e=>{let t=new s;t.__webvpn_tcp_socket_init__(Promise.resolve(e),e),this.emit(`connection`,t)},a=e=>{this._localAddress=void 0;try{e&&this.listenerCount(`error`)>0&&this.emit(`error`,e)}finally{this._emitClose()}},o=e=>t.s(`a tcp listener`).then(t=>t.cloud.webvpn.tcpSocketListener({localAddress:e,localPort:n.port,onConnection:i,onClose:a})),c=n.host?o(n.host):o(`::`).catch(()=>o(`0.0.0.0`)),l=this.__webvpn_tcp_socket_listener_init__(c);return n.callback&&l.then(e=>{e&&n.callback.call(this)}),this}_closeEmitted=!1;_emitClose(){this._closeEmitted||(this._closeEmitted=!0,this._busyRelease?.(),this.emit(`close`))}close(e){return this._webVPNTcpSocketListenerPromise&&this._webVPNTcpSocketListenerPromise.then(async t=>{if(t)try{await t.close(),this._localAddress=void 0,this._emitClose(),e&&e()}catch(t){this._localAddress=void 0,this._emitClose(),e&&e(t)}}),this}address(){return this._localAddress??null}getConnections(e){throw Error(`Method not implemented.`)}ref(){return this}unref(){return this}maxConnections;connections;listening;async[Symbol.asyncDispose](){}},l=(e,t)=>new s().connect(e,t),u=(e,t)=>new s().connect(e,t),d=(e,t)=>{typeof e==`function`&&(t=e,e=void 0);let n=new c(e);return t&&n.on(`connection`,t),n},f={Socket:s,Server:c,connect:l,createConnection:u,createServer:d,isIP:r.r,isIPv4:r.i,isIPv6:r.a};exports.Server=c,exports.Socket=s,exports._default=f,exports.default=f,exports.connect=l,exports.createConnection=u,exports.createServer=d,exports.isIP=r.r,exports.isIPv4=r.i,exports.isIPv6=r.a,Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return o}});
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-zThwNoA8.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-DcLF-6E-.js";
2
2
  export { Server, Socket, _default, _default as default, connect, createConnection, createServer, isIP, isIPv4, isIPv6 };
package/net.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { t as e } from "./rolldown-runtime-Dy4uBu1J.js";
2
- import { o as t } from "./api-Dp-2AT3u.js";
2
+ import { s as t } from "./api-DIgTslNb.js";
3
3
  import { t as n } from "./busy-B189uX--.js";
4
4
  import { a as r, c as i, i as a, r as o } from "./utils-C-cAd4r4.js";
5
5
  import "./wire.js";
@@ -77,9 +77,9 @@ var n = {
77
77
  let n = /* @__PURE__ */ new Map([["", {
78
78
  kind: "dir",
79
79
  mtimeMs: 0
80
- }]]), l = /* @__PURE__ */ new Set(), u = /* @__PURE__ */ new Set();
80
+ }]]), l = /* @__PURE__ */ new Map(), u = /* @__PURE__ */ new Map(), d = () => t.captureAccount ? { pin: t.captureAccount() } : {};
81
81
  e("unsaved files", () => l.size > 0 || u.size > 0);
82
- let d = /* @__PURE__ */ new Set(), f = () => Date.now(), p = (e) => {
82
+ let f = /* @__PURE__ */ new Set(), p = () => Date.now(), m = (e) => {
83
83
  if (!e) return;
84
84
  let t = e.split("/"), r = "";
85
85
  for (let e of t) {
@@ -87,93 +87,96 @@ var n = {
87
87
  let t = n.get(r);
88
88
  if (!t) n.set(r, {
89
89
  kind: "dir",
90
- mtimeMs: f()
90
+ mtimeMs: p()
91
91
  });
92
92
  else if (t.kind === "file") throw o("ENOTDIR", r, "mkdir");
93
93
  }
94
- }, m, h = 0, g = async () => {
95
- let e = await t.list().catch(() => []), r = /* @__PURE__ */ new Set(), i = !1;
96
- for (let a of e) {
97
- let e = s(a.path);
98
- if (r.add(e), !u.has(e) && (!l.has(e) || d.has(e))) try {
99
- let r = await (await t.readFile(a.path)).arrayBuffer();
100
- if (u.has(e) || l.has(e) && !d.has(e)) continue;
101
- p(c(e));
102
- let i = Date.parse(a.updatedAt ?? "");
103
- n.set(e, {
94
+ }, h, g = 0, _ = async () => {
95
+ let e = d(), r = await t.list(e).catch(() => []), i = /* @__PURE__ */ new Set(), a = !1;
96
+ for (let o of r) {
97
+ let r = s(o.path);
98
+ if (i.add(r), !u.has(r) && (!l.has(r) || f.has(r))) try {
99
+ let i = await (await t.readFile(o.path, e)).arrayBuffer();
100
+ if (u.has(r) || l.has(r) && !f.has(r)) continue;
101
+ m(c(r));
102
+ let a = Date.parse(o.updatedAt ?? "");
103
+ n.set(r, {
104
104
  kind: "file",
105
- data: new Uint8Array(r),
106
- mtimeMs: Number.isFinite(i) ? i : f(),
107
- contentType: a.contentType ?? void 0
108
- }), d.delete(e), l.delete(e);
105
+ data: new Uint8Array(i),
106
+ mtimeMs: Number.isFinite(a) ? a : p(),
107
+ contentType: o.contentType ?? void 0
108
+ }), f.delete(r), l.delete(r);
109
109
  } catch {
110
- i = !0, d.add(e);
110
+ a = !0, f.add(r);
111
111
  }
112
112
  }
113
- for (let e of d) r.has(e) || d.delete(e);
114
- h = i ? Date.now() : 0;
115
- }, _ = () => (m && (h === 0 || Date.now() - h < 5e3) || (m = g()), m), v = async () => {
116
- m = void 0, h = 0, await _();
117
- }, y = async () => {
118
- let e = [...l].map(async (e) => {
119
- if (d.has(e)) return;
120
- let i = n.get(e);
121
- if (i?.kind !== "file") {
113
+ for (let e of f) i.has(e) || f.delete(e);
114
+ g = a ? Date.now() : 0;
115
+ }, v = () => (h && (g === 0 || Date.now() - g < 5e3) || (h = _()), h), y = async () => {
116
+ h = void 0, g = 0, await v();
117
+ }, b = async () => {
118
+ let e = [...l].map(async ([e, i]) => {
119
+ if (f.has(e)) return;
120
+ let a = n.get(e);
121
+ if (a?.kind !== "file") {
122
122
  l.delete(e);
123
123
  return;
124
124
  }
125
- let a = i.data, o = r(e, i.contentType);
125
+ let o = a.data, s = r(e, a.contentType);
126
126
  try {
127
- await t.writeFile(e, a, o ? { contentType: o } : void 0);
127
+ await t.writeFile(e, o, s ? {
128
+ contentType: s,
129
+ ...i
130
+ } : i);
128
131
  let r = n.get(e);
129
- r?.kind === "file" && r.data === a && l.delete(e);
132
+ r?.kind === "file" && r.data === o && l.delete(e);
130
133
  } catch {}
131
- }), i = [...u].map(async (e) => {
134
+ }), i = [...u].map(async ([e, n]) => {
132
135
  try {
133
- await t.remove(e), u.delete(e);
136
+ await t.remove(e, n), u.get(e) === n && u.delete(e);
134
137
  } catch {}
135
138
  });
136
139
  await Promise.all([...e, ...i]);
137
- }, b, x = () => {
138
- b ||= setTimeout(() => {
139
- b = void 0, y().catch(() => {});
140
+ }, x, S = () => {
141
+ x ||= setTimeout(() => {
142
+ x = void 0, b().catch(() => {});
140
143
  }, 250);
141
144
  };
142
145
  typeof addEventListener < "u" && (addEventListener("pagehide", () => {
143
- y().catch(() => {});
146
+ b().catch(() => {});
144
147
  }), addEventListener("visibilitychange", () => {
145
- typeof document < "u" && document.visibilityState === "hidden" && y().catch(() => {});
148
+ typeof document < "u" && document.visibilityState === "hidden" && b().catch(() => {});
146
149
  }));
147
- let S = (e) => e.kind === "file" ? i(e.data.byteLength, e.mtimeMs) : a(e.mtimeMs), C = (e) => Object.assign(/* @__PURE__ */ Error(`storage: ${e} exists but could not be read, retry once its scope is available`), { code: "FKN_E2E_LOCKED" }), w = (e) => {
150
+ let C = (e) => e.kind === "file" ? i(e.data.byteLength, e.mtimeMs) : a(e.mtimeMs), w = (e) => Object.assign(/* @__PURE__ */ Error(`storage: ${e} exists but could not be read, retry once its scope is available`), { code: "FKN_E2E_LOCKED" }), T = (e) => {
148
151
  let t = s(e);
149
- return n.has(t) || d.has(t);
150
- }, T = (e) => {
151
- let t = s(e), r = n.get(t);
152
- if (!r) throw d.has(t) ? C(e) : o("ENOENT", e, "stat");
153
- return S(r);
152
+ return n.has(t) || f.has(t);
154
153
  }, E = (e) => {
155
154
  let t = s(e), r = n.get(t);
156
- if (!r) throw d.has(t) ? C(e) : o("ENOENT", e, "open");
155
+ if (!r) throw f.has(t) ? w(e) : o("ENOENT", e, "stat");
156
+ return C(r);
157
+ }, D = (e) => {
158
+ let t = s(e), r = n.get(t);
159
+ if (!r) throw f.has(t) ? w(e) : o("ENOENT", e, "open");
157
160
  if (r.kind === "dir") throw o("EISDIR", e, "read");
158
161
  return r.data;
159
- }, D = (e, t) => {
162
+ }, O = (e, t) => {
160
163
  let n = new Uint8Array(e.byteLength + t.byteLength);
161
164
  return n.set(e, 0), n.set(t, e.byteLength), n;
162
- }, O = (e, t, r, i) => {
165
+ }, k = (e, t, r, i) => {
163
166
  let a = s(e);
164
167
  if (!a) throw o("EISDIR", e, "open");
165
- if (d.has(a)) throw C(e);
166
- let m = n.get(a);
167
- if (m?.kind === "dir") throw o("EISDIR", e, "open");
168
- p(c(a));
169
- let h = r && m?.kind === "file" ? D(m.data, t) : t;
168
+ if (f.has(a)) throw w(e);
169
+ let h = n.get(a);
170
+ if (h?.kind === "dir") throw o("EISDIR", e, "open");
171
+ m(c(a));
172
+ let g = r && h?.kind === "file" ? O(h.data, t) : t;
170
173
  n.set(a, {
171
174
  kind: "file",
172
- data: h,
173
- mtimeMs: f(),
174
- contentType: i ?? (m?.kind === "file" ? m.contentType : void 0)
175
- }), l.add(a), u.delete(a), x();
176
- }, k = (e, t) => {
175
+ data: g,
176
+ mtimeMs: p(),
177
+ contentType: i ?? (h?.kind === "file" ? h.contentType : void 0)
178
+ }), l.set(a, d()), u.delete(a), S();
179
+ }, A = (e, t) => {
177
180
  let r = s(e);
178
181
  if (r) {
179
182
  if (n.has(r)) {
@@ -181,76 +184,76 @@ var n = {
181
184
  throw o("EEXIST", e, "mkdir");
182
185
  }
183
186
  if (!t && !n.has(c(r))) throw o("ENOENT", e, "mkdir");
184
- p(r);
187
+ m(r);
185
188
  }
186
- }, A = (e) => {
189
+ }, j = (e) => {
187
190
  let t = s(e), r = n.get(t);
188
191
  if (!r) throw o("ENOENT", e, "scandir");
189
192
  if (r.kind === "file") throw o("ENOTDIR", e, "scandir");
190
193
  let i = t ? `${t}/` : "", a = /* @__PURE__ */ new Set();
191
- for (let e of [...n.keys(), ...d]) {
194
+ for (let e of [...n.keys(), ...f]) {
192
195
  if (!e || !e.startsWith(i)) continue;
193
196
  let t = e.slice(i.length);
194
197
  t && a.add(t.split("/")[0]);
195
198
  }
196
199
  return [...a];
197
- }, j = (e, { op: t, recursive: r, force: i }) => {
198
- let a = s(e), c = n.get(a);
199
- if (!c && d.has(a)) {
200
+ }, M = (e, { op: t, recursive: r, force: i }) => {
201
+ let a = d(), c = s(e), p = n.get(c);
202
+ if (!p && f.has(c)) {
200
203
  if (t === "rmdir") throw o("ENOTDIR", e, "rmdir");
201
- d.delete(a), l.delete(a), u.add(a), x();
204
+ f.delete(c), l.delete(c), u.set(c, a), S();
202
205
  return;
203
206
  }
204
- if (!c) {
207
+ if (!p) {
205
208
  if (i || t === "rmdir" && r) return;
206
209
  throw o("ENOENT", e, t === "rmdir" ? "rmdir" : "unlink");
207
210
  }
208
- if (t === "unlink" && c.kind === "dir") throw o("EISDIR", e, "unlink");
209
- if (t === "rmdir" && c.kind === "file") throw o("ENOTDIR", e, "rmdir");
210
- if (t === "rm" && c.kind === "dir" && !r) throw o("ERR_FS_EISDIR", e, "rm");
211
- let f = `${a}/`, p = [...n.keys()].filter((e) => e.startsWith(f));
212
- if (p.length && !r) throw o("ENOTEMPTY", e, "rmdir");
213
- for (let e of [a, ...p]) {
211
+ if (t === "unlink" && p.kind === "dir") throw o("EISDIR", e, "unlink");
212
+ if (t === "rmdir" && p.kind === "file") throw o("ENOTDIR", e, "rmdir");
213
+ if (t === "rm" && p.kind === "dir" && !r) throw o("ERR_FS_EISDIR", e, "rm");
214
+ let m = `${c}/`, h = [...n.keys()].filter((e) => e.startsWith(m));
215
+ if (h.length && !r) throw o("ENOTEMPTY", e, "rmdir");
216
+ for (let e of [c, ...h]) {
214
217
  let t = n.get(e);
215
- n.delete(e), t?.kind === "file" && (l.delete(e), u.add(e));
218
+ n.delete(e), t?.kind === "file" && (l.delete(e), u.set(e, a));
216
219
  }
217
- x();
220
+ S();
218
221
  };
219
222
  return {
220
- mount: _,
221
- remount: v,
222
- flush: y,
223
- exists: w,
224
- stat: T,
225
- readFile: E,
226
- writeFile: O,
227
- mkdir: k,
228
- readdir: A,
229
- remove: j,
223
+ mount: v,
224
+ remount: y,
225
+ flush: b,
226
+ exists: T,
227
+ stat: E,
228
+ readFile: D,
229
+ writeFile: k,
230
+ mkdir: A,
231
+ readdir: j,
232
+ remove: M,
230
233
  rename: (e, t) => {
231
- let r = s(e), i = s(t);
232
- if (!r) throw o("EBUSY", e, "rename");
233
- if (i === r || i.startsWith(`${r}/`)) throw o("EINVAL", e, "rename");
234
- if (d.has(r)) throw C(e);
235
- if (d.has(i)) throw C(t);
236
- let a = n.get(r);
237
- if (!a) throw o("ENOENT", e, "rename");
238
- let f = n.get(i);
239
- if (f) {
240
- if (f.kind !== a.kind) throw o(a.kind === "dir" ? "ENOTDIR" : "EISDIR", t, "rename");
241
- j(i, {
234
+ let r = d(), i = s(e), a = s(t);
235
+ if (!i) throw o("EBUSY", e, "rename");
236
+ if (a === i || a.startsWith(`${i}/`)) throw o("EINVAL", e, "rename");
237
+ if (f.has(i)) throw w(e);
238
+ if (f.has(a)) throw w(t);
239
+ let p = n.get(i);
240
+ if (!p) throw o("ENOENT", e, "rename");
241
+ let h = n.get(a);
242
+ if (h) {
243
+ if (h.kind !== p.kind) throw o(p.kind === "dir" ? "ENOTDIR" : "EISDIR", t, "rename");
244
+ M(a, {
242
245
  op: "rm",
243
246
  recursive: !0,
244
247
  force: !0
245
248
  });
246
249
  }
247
- p(c(i));
248
- let m = `${r}/`, h = [r, ...[...n.keys()].filter((e) => e.startsWith(m))];
249
- for (let e of h) {
250
- let t = i + e.slice(r.length), a = n.get(e);
251
- n.set(t, a), n.delete(e), a.kind === "file" && (l.add(t), u.delete(t), l.delete(e), u.add(e));
250
+ m(c(a));
251
+ let g = `${i}/`, _ = [i, ...[...n.keys()].filter((e) => e.startsWith(g))];
252
+ for (let e of _) {
253
+ let t = a + e.slice(i.length), o = n.get(e);
254
+ n.set(t, o), n.delete(e), o.kind === "file" && (l.set(t, r), u.delete(t), l.delete(e), u.set(e, r));
252
255
  }
253
- x();
256
+ S();
254
257
  }
255
258
  };
256
259
  }, g = (e, t) => typeof e == "function" ? e : t, _ = (e) => typeof e == "function" ? void 0 : e, v = (e, t) => {
@@ -330,18 +333,18 @@ var n = {
330
333
  remount: t.remount
331
334
  };
332
335
  }, b = (e) => {
333
- let t = async (t, n) => {
336
+ let t = () => e.captureAccount ? { pin: e.captureAccount() } : {}, n = async (t, n) => {
334
337
  let r = await e.readFile(l(t));
335
338
  return p(new Uint8Array(await r.arrayBuffer()), n);
336
- }, n = async (t, n, i) => {
339
+ }, c = async (t, n, i) => {
337
340
  let a = l(t), o = r(a, d(i));
338
341
  await e.writeFile(a, m(n, i), o ? { contentType: o } : void 0);
339
- }, c = (t) => e.remove(l(t)), u = async (t, n) => {
340
- let r = s(l(t)), i = s(l(n));
341
- if (r === i) return;
342
- let a = await e.readFile(r);
343
- await e.writeFile(i, a), await e.remove(r);
344
- }, f = async (t) => {
342
+ }, u = (t) => e.remove(l(t)), f = async (n, r) => {
343
+ let i = t(), a = s(l(n)), o = s(l(r));
344
+ if (a === o) return;
345
+ let c = await e.readFile(a, i);
346
+ await e.writeFile(o, c, i), await e.remove(a, i);
347
+ }, h = async (t) => {
345
348
  let n = s(l(t)), r = n ? `${n}/` : "", i = /* @__PURE__ */ new Set();
346
349
  for (let t of await e.list()) {
347
350
  let e = s(t.path);
@@ -350,18 +353,18 @@ var n = {
350
353
  n && i.add(n.split("/")[0]);
351
354
  }
352
355
  return [...i];
353
- }, h = async (e, t) => {}, y = async (t, n) => {
354
- let r = s(l(t));
355
- if (!n?.recursive) {
356
- await e.remove(l(t));
356
+ }, y = async (e, t) => {}, b = async (n, r) => {
357
+ let i = t(), a = s(l(n));
358
+ if (!r?.recursive) {
359
+ await e.remove(l(n), i);
357
360
  return;
358
361
  }
359
- let i = `${r}/`, a = await e.list();
360
- await Promise.all(a.filter((e) => {
362
+ let o = `${a}/`, c = await e.list(i);
363
+ await Promise.all(c.filter((e) => {
361
364
  let t = s(e.path);
362
- return t === r || t.startsWith(i);
363
- }).map((t) => e.remove(t.path).catch(() => {})));
364
- }, b = async (t) => {
365
+ return t === a || t.startsWith(o);
366
+ }).map((t) => e.remove(t.path, i).catch(() => {})));
367
+ }, x = async (t) => {
365
368
  let n = s(l(t)), r = await e.list(), c = r.find((e) => s(e.path) === n);
366
369
  if (c) {
367
370
  let e = Date.parse(c.updatedAt ?? "");
@@ -369,32 +372,32 @@ var n = {
369
372
  }
370
373
  if (r.some((e) => s(e.path).startsWith(`${n}/`))) return a();
371
374
  throw o("ENOENT", l(t), "stat");
372
- }, x = {
373
- readFile: t,
374
- writeFile: n,
375
- unlink: c,
376
- rename: u,
377
- readdir: f,
378
- mkdir: h,
379
- rm: y,
380
- rmdir: y,
381
- stat: b,
382
- lstat: b,
375
+ }, S = {
376
+ readFile: n,
377
+ writeFile: c,
378
+ unlink: u,
379
+ rename: f,
380
+ readdir: h,
381
+ mkdir: y,
382
+ rm: b,
383
+ rmdir: b,
384
+ stat: x,
385
+ lstat: x,
383
386
  access: async (e) => {
384
- await b(e);
387
+ await x(e);
385
388
  }
386
389
  };
387
390
  return {
388
391
  available: e.available,
389
- promises: x,
390
- readFile: (e, n, r) => v(t(e, _(n)), g(n, r)),
391
- writeFile: (e, t, r, i) => v(n(e, t, _(r)), g(r, i)),
392
- unlink: (e, t) => v(c(e), t),
393
- rename: (e, t, n) => v(u(e, t), n),
394
- readdir: (e, t, n) => v(f(e), g(t, n)),
395
- mkdir: (e, t, n) => v(h(), g(t, n)),
396
- rm: (e, t, n) => v(y(e, _(t)), g(t, n)),
397
- stat: (e, t) => v(b(e), t)
392
+ promises: S,
393
+ readFile: (e, t, r) => v(n(e, _(t)), g(t, r)),
394
+ writeFile: (e, t, n, r) => v(c(e, t, _(n)), g(n, r)),
395
+ unlink: (e, t) => v(u(e), t),
396
+ rename: (e, t, n) => v(f(e, t), n),
397
+ readdir: (e, t, n) => v(h(e), g(t, n)),
398
+ mkdir: (e, t, n) => v(y(), g(t, n)),
399
+ rm: (e, t, n) => v(b(e, _(t)), g(t, n)),
400
+ stat: (e, t) => v(x(e), t)
398
401
  };
399
402
  };
400
403
  function x(e, t) {
@@ -0,0 +1 @@
1
+ const e=require("./busy-Dv8wzE5M.cjs");let t=require("buffer");var n={json:`application/json`,txt:`text/plain`,html:`text/html`,htm:`text/html`,css:`text/css`,js:`text/javascript`,mjs:`text/javascript`,xml:`application/xml`,csv:`text/csv`,md:`text/markdown`,svg:`image/svg+xml`,png:`image/png`,jpg:`image/jpeg`,jpeg:`image/jpeg`,gif:`image/gif`,webp:`image/webp`,pdf:`application/pdf`,wasm:`application/wasm`},r=(e,t)=>{if(t)return t;let r=e.split(`/`).pop()??``,i=r.lastIndexOf(`.`);if(!(i<=0))return n[r.slice(i+1).toLowerCase()]},i=(e,t)=>({size:e,mtimeMs:t,mtime:new Date(t),atimeMs:t,ctimeMs:t,mode:420,isFile:()=>!0,isDirectory:()=>!1,isSymbolicLink:()=>!1}),a=(e=0)=>({size:0,mtimeMs:e,mtime:new Date(e),atimeMs:e,ctimeMs:e,mode:493,isFile:()=>!1,isDirectory:()=>!0,isSymbolicLink:()=>!1}),o=(e,t,n)=>{let r=Error(`${e}: ${{ENOENT:`no such file or directory`,EEXIST:`file already exists`,ENOTDIR:`not a directory`,EISDIR:`illegal operation on a directory`,ENOTEMPTY:`directory not empty`,ERR_FS_EISDIR:`is a directory`}[e]??e}, ${n} '${t}'`);return r.code=e,r.path=t,r.syscall=n,r},s=e=>{let t=[];for(let n of e.split(`/`))if(n&&n!==`.`){if(n===`..`){t.pop();continue}t.push(n)}return t.join(`/`)},c=e=>e.split(`/`).slice(0,-1).join(`/`),l=e=>typeof e==`string`?e:e instanceof URL?decodeURIComponent(e.pathname):e.toString(),u=e=>typeof e==`string`?e:e?.encoding??void 0,d=e=>typeof e==`object`?e?.contentType:void 0,f=e=>typeof e==`object`&&!!e?.recursive,p=(e,n)=>{let r=u(n);return r?t.Buffer.from(e).toString(r):t.Buffer.from(e)},m=(e,n)=>{if(typeof e==`string`)return new Uint8Array(t.Buffer.from(e,u(n)??`utf8`));if(e instanceof Uint8Array)return e.slice();if(e instanceof ArrayBuffer)return new Uint8Array(e).slice();if(ArrayBuffer.isView(e))return new Uint8Array(e.buffer,e.byteOffset,e.byteLength).slice();throw TypeError(`The "data" argument must be of type string, Buffer, TypedArray, or DataView`)},h=t=>{let n=new Map([[``,{kind:`dir`,mtimeMs:0}]]),l=new Map,u=new Map,d=()=>t.captureAccount?{pin:t.captureAccount()}:{};e.r(`unsaved files`,()=>l.size>0||u.size>0);let f=new Set,p=()=>Date.now(),m=e=>{if(!e)return;let t=e.split(`/`),r=``;for(let e of t){r=r?`${r}/${e}`:e;let t=n.get(r);if(!t)n.set(r,{kind:`dir`,mtimeMs:p()});else if(t.kind===`file`)throw o(`ENOTDIR`,r,`mkdir`)}},h,g=0,_=async()=>{let e=d(),r=await t.list(e).catch(()=>[]),i=new Set,a=!1;for(let o of r){let r=s(o.path);if(i.add(r),!u.has(r)&&(!l.has(r)||f.has(r)))try{let i=await(await t.readFile(o.path,e)).arrayBuffer();if(u.has(r)||l.has(r)&&!f.has(r))continue;m(c(r));let a=Date.parse(o.updatedAt??``);n.set(r,{kind:`file`,data:new Uint8Array(i),mtimeMs:Number.isFinite(a)?a:p(),contentType:o.contentType??void 0}),f.delete(r),l.delete(r)}catch{a=!0,f.add(r)}}for(let e of f)i.has(e)||f.delete(e);g=a?Date.now():0},v=()=>(h&&(g===0||Date.now()-g<5e3)||(h=_()),h),y=async()=>{h=void 0,g=0,await v()},b=async()=>{let e=[...l].map(async([e,i])=>{if(f.has(e))return;let a=n.get(e);if(a?.kind!==`file`){l.delete(e);return}let o=a.data,s=r(e,a.contentType);try{await t.writeFile(e,o,s?{contentType:s,...i}:i);let r=n.get(e);r?.kind===`file`&&r.data===o&&l.delete(e)}catch{}}),i=[...u].map(async([e,n])=>{try{await t.remove(e,n),u.get(e)===n&&u.delete(e)}catch{}});await Promise.all([...e,...i])},x,S=()=>{x||=setTimeout(()=>{x=void 0,b().catch(()=>{})},250)};typeof addEventListener<`u`&&(addEventListener(`pagehide`,()=>{b().catch(()=>{})}),addEventListener(`visibilitychange`,()=>{typeof document<`u`&&document.visibilityState===`hidden`&&b().catch(()=>{})}));let C=e=>e.kind===`file`?i(e.data.byteLength,e.mtimeMs):a(e.mtimeMs),w=e=>Object.assign(Error(`storage: ${e} exists but could not be read, retry once its scope is available`),{code:`FKN_E2E_LOCKED`}),T=e=>{let t=s(e);return n.has(t)||f.has(t)},E=e=>{let t=s(e),r=n.get(t);if(!r)throw f.has(t)?w(e):o(`ENOENT`,e,`stat`);return C(r)},D=e=>{let t=s(e),r=n.get(t);if(!r)throw f.has(t)?w(e):o(`ENOENT`,e,`open`);if(r.kind===`dir`)throw o(`EISDIR`,e,`read`);return r.data},O=(e,t)=>{let n=new Uint8Array(e.byteLength+t.byteLength);return n.set(e,0),n.set(t,e.byteLength),n},k=(e,t,r,i)=>{let a=s(e);if(!a)throw o(`EISDIR`,e,`open`);if(f.has(a))throw w(e);let h=n.get(a);if(h?.kind===`dir`)throw o(`EISDIR`,e,`open`);m(c(a));let g=r&&h?.kind===`file`?O(h.data,t):t;n.set(a,{kind:`file`,data:g,mtimeMs:p(),contentType:i??(h?.kind===`file`?h.contentType:void 0)}),l.set(a,d()),u.delete(a),S()},A=(e,t)=>{let r=s(e);if(r){if(n.has(r)){if(t)return;throw o(`EEXIST`,e,`mkdir`)}if(!t&&!n.has(c(r)))throw o(`ENOENT`,e,`mkdir`);m(r)}},j=e=>{let t=s(e),r=n.get(t);if(!r)throw o(`ENOENT`,e,`scandir`);if(r.kind===`file`)throw o(`ENOTDIR`,e,`scandir`);let i=t?`${t}/`:``,a=new Set;for(let e of[...n.keys(),...f]){if(!e||!e.startsWith(i))continue;let t=e.slice(i.length);t&&a.add(t.split(`/`)[0])}return[...a]},M=(e,{op:t,recursive:r,force:i})=>{let a=d(),c=s(e),p=n.get(c);if(!p&&f.has(c)){if(t===`rmdir`)throw o(`ENOTDIR`,e,`rmdir`);f.delete(c),l.delete(c),u.set(c,a),S();return}if(!p){if(i||t===`rmdir`&&r)return;throw o(`ENOENT`,e,t===`rmdir`?`rmdir`:`unlink`)}if(t===`unlink`&&p.kind===`dir`)throw o(`EISDIR`,e,`unlink`);if(t===`rmdir`&&p.kind===`file`)throw o(`ENOTDIR`,e,`rmdir`);if(t===`rm`&&p.kind===`dir`&&!r)throw o(`ERR_FS_EISDIR`,e,`rm`);let m=`${c}/`,h=[...n.keys()].filter(e=>e.startsWith(m));if(h.length&&!r)throw o(`ENOTEMPTY`,e,`rmdir`);for(let e of[c,...h]){let t=n.get(e);n.delete(e),t?.kind===`file`&&(l.delete(e),u.set(e,a))}S()};return{mount:v,remount:y,flush:b,exists:T,stat:E,readFile:D,writeFile:k,mkdir:A,readdir:j,remove:M,rename:(e,t)=>{let r=d(),i=s(e),a=s(t);if(!i)throw o(`EBUSY`,e,`rename`);if(a===i||a.startsWith(`${i}/`))throw o(`EINVAL`,e,`rename`);if(f.has(i))throw w(e);if(f.has(a))throw w(t);let p=n.get(i);if(!p)throw o(`ENOENT`,e,`rename`);let h=n.get(a);if(h){if(h.kind!==p.kind)throw o(p.kind===`dir`?`ENOTDIR`:`EISDIR`,t,`rename`);M(a,{op:`rm`,recursive:!0,force:!0})}m(c(a));let g=`${i}/`,_=[i,...[...n.keys()].filter(e=>e.startsWith(g))];for(let e of _){let t=a+e.slice(i.length),o=n.get(e);n.set(t,o),n.delete(e),o.kind===`file`&&(l.set(t,r),u.delete(t),l.delete(e),u.set(e,r))}S()}}},g=(e,t)=>typeof e==`function`?e:t,_=e=>typeof e==`function`?void 0:e,v=(e,t)=>{e.then(e=>t(null,e),e=>t(e))},y=e=>{let t=h(e),n=(e,n)=>p(t.readFile(l(e)),n),r=(e,n,r)=>t.writeFile(l(e),m(n,r),!1,d(r)),i=(e,n,r)=>t.writeFile(l(e),m(n,r),!0,d(r)),a=e=>t.exists(l(e)),s=e=>t.stat(l(e)),c=e=>t.readdir(l(e)),u=(e,n)=>t.mkdir(l(e),f(n)),v=(e,n)=>t.remove(l(e),{op:`rm`,...n}),y=(e,n)=>t.remove(l(e),{op:`rmdir`,...n}),b=e=>t.remove(l(e),{op:`unlink`}),x=(e,n)=>t.rename(l(e),l(n)),S=(e,n)=>{t.mount().finally(()=>{let t;try{t=e()}catch(e){n(e);return}n(null,t)})},C=e=>t.mount().then(()=>e());return{available:e.available,readFileSync:n,writeFileSync:r,appendFileSync:i,existsSync:a,statSync:s,lstatSync:s,readdirSync:c,mkdirSync:u,rmSync:v,rmdirSync:y,unlinkSync:b,renameSync:x,readFile:(e,n,r)=>S(()=>p(t.readFile(l(e)),_(n)),g(n,r)),writeFile:(e,n,r,i)=>S(()=>t.writeFile(l(e),m(n,_(r)),!1,d(_(r))),g(r,i)),appendFile:(e,n,r,i)=>S(()=>t.writeFile(l(e),m(n,_(r)),!0,d(_(r))),g(r,i)),stat:(e,n)=>S(()=>t.stat(l(e)),n),readdir:(e,n,r)=>S(()=>t.readdir(l(e)),g(n,r)),mkdir:(e,n,r)=>S(()=>t.mkdir(l(e),f(_(n))),g(n,r)),rm:(e,n,r)=>S(()=>t.remove(l(e),{op:`rm`,..._(n)}),g(n,r)),unlink:(e,n)=>S(()=>t.remove(l(e),{op:`unlink`}),n),rename:(e,n,r)=>S(()=>t.rename(l(e),l(n)),r),exists:(e,n)=>{t.mount().finally(()=>n(t.exists(l(e))))},promises:{readFile:(e,n)=>C(()=>p(t.readFile(l(e)),n)),writeFile:(e,n,r)=>C(()=>t.writeFile(l(e),m(n,r),!1,d(r))),appendFile:(e,n,r)=>C(()=>t.writeFile(l(e),m(n,r),!0,d(r))),stat:e=>C(()=>t.stat(l(e))),lstat:e=>C(()=>t.stat(l(e))),readdir:e=>C(()=>t.readdir(l(e))),mkdir:(e,n)=>C(()=>t.mkdir(l(e),f(n))),rm:(e,n)=>C(()=>t.remove(l(e),{op:`rm`,...n})),rmdir:(e,n)=>C(()=>t.remove(l(e),{op:`rmdir`,...n})),unlink:e=>C(()=>t.remove(l(e),{op:`unlink`})),rename:(e,n)=>C(()=>t.rename(l(e),l(n))),access:e=>C(()=>{if(!t.exists(l(e)))throw o(`ENOENT`,l(e),`access`)})},mount:t.mount,flush:t.flush,remount:t.remount}},b=e=>{let t=()=>e.captureAccount?{pin:e.captureAccount()}:{},n=async(t,n)=>{let r=await e.readFile(l(t));return p(new Uint8Array(await r.arrayBuffer()),n)},c=async(t,n,i)=>{let a=l(t),o=r(a,d(i));await e.writeFile(a,m(n,i),o?{contentType:o}:void 0)},u=t=>e.remove(l(t)),f=async(n,r)=>{let i=t(),a=s(l(n)),o=s(l(r));if(a===o)return;let c=await e.readFile(a,i);await e.writeFile(o,c,i),await e.remove(a,i)},h=async t=>{let n=s(l(t)),r=n?`${n}/`:``,i=new Set;for(let t of await e.list()){let e=s(t.path);if(r&&!e.startsWith(r))continue;let n=e.slice(r.length);n&&i.add(n.split(`/`)[0])}return[...i]},y=async(e,t)=>{},b=async(n,r)=>{let i=t(),a=s(l(n));if(!r?.recursive){await e.remove(l(n),i);return}let o=`${a}/`,c=await e.list(i);await Promise.all(c.filter(e=>{let t=s(e.path);return t===a||t.startsWith(o)}).map(t=>e.remove(t.path,i).catch(()=>{})))},x=async t=>{let n=s(l(t)),r=await e.list(),c=r.find(e=>s(e.path)===n);if(c){let e=Date.parse(c.updatedAt??``);return i(c.size,Number.isFinite(e)?e:0)}if(r.some(e=>s(e.path).startsWith(`${n}/`)))return a();throw o(`ENOENT`,l(t),`stat`)},S={readFile:n,writeFile:c,unlink:u,rename:f,readdir:h,mkdir:y,rm:b,rmdir:b,stat:x,lstat:x,access:async e=>{await x(e)}};return{available:e.available,promises:S,readFile:(e,t,r)=>v(n(e,_(t)),g(t,r)),writeFile:(e,t,n,r)=>v(c(e,t,_(n)),g(n,r)),unlink:(e,t)=>v(u(e),t),rename:(e,t,n)=>v(f(e,t),n),readdir:(e,t,n)=>v(h(e),g(t,n)),mkdir:(e,t,n)=>v(y(),g(t,n)),rm:(e,t,n)=>v(b(e,_(t)),g(t,n)),stat:(e,t)=>v(x(e),t)}};function x(e,t){return t.memfs?y(e):b(e)}Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return x}});
package/opfs.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("./rolldown-runtime-BIInC43l.cjs"),t=require("./node-fs-BNTPsX5c.cjs"),n=require("./opfs-CXMESVLc.cjs");var r=e.t({appendFile:()=>b,appendFileSync:()=>c,available:()=>a,default:()=>i,exists:()=>D,existsSync:()=>l,flush:()=>A,lstatSync:()=>d,mkdir:()=>C,mkdirSync:()=>p,mount:()=>k,promises:()=>O,readFile:()=>v,readFileSync:()=>o,readdir:()=>S,readdirSync:()=>f,remount:()=>j,rename:()=>E,renameSync:()=>_,rm:()=>w,rmSync:()=>m,rmdirSync:()=>h,stat:()=>x,statSync:()=>u,unlink:()=>T,unlinkSync:()=>g,writeFile:()=>y,writeFileSync:()=>s}),i=t.t(n.r,{memfs:!0}),{available:a,readFileSync:o,writeFileSync:s,appendFileSync:c,existsSync:l,statSync:u,lstatSync:d,readdirSync:f,mkdirSync:p,rmSync:m,rmdirSync:h,unlinkSync:g,renameSync:_,readFile:v,writeFile:y,appendFile:b,stat:x,readdir:S,mkdir:C,rm:w,unlink:T,rename:E,exists:D,promises:O,mount:k,flush:A,remount:j}=i;exports.appendFile=b,exports.appendFileSync=c,exports.available=a,exports.default=i,exports.exists=D,exports.existsSync=l,exports.flush=A,exports.lstatSync=d,exports.mkdir=C,exports.mkdirSync=p,exports.mount=k,exports.promises=O,exports.readFile=v,exports.readFileSync=o,exports.readdir=S,exports.readdirSync=f,exports.remount=j,exports.rename=E,exports.renameSync=_,exports.rm=w,exports.rmSync=m,exports.rmdirSync=h,exports.stat=x,exports.statSync=u,Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return r}}),exports.unlink=T,exports.unlinkSync=g,exports.writeFile=y,exports.writeFileSync=s;
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("./rolldown-runtime-BIInC43l.cjs"),t=require("./node-fs-nfX7wisL.cjs"),n=require("./opfs-CXMESVLc.cjs");var r=e.t({appendFile:()=>b,appendFileSync:()=>c,available:()=>a,default:()=>i,exists:()=>D,existsSync:()=>l,flush:()=>A,lstatSync:()=>d,mkdir:()=>C,mkdirSync:()=>p,mount:()=>k,promises:()=>O,readFile:()=>v,readFileSync:()=>o,readdir:()=>S,readdirSync:()=>f,remount:()=>j,rename:()=>E,renameSync:()=>_,rm:()=>w,rmSync:()=>m,rmdirSync:()=>h,stat:()=>x,statSync:()=>u,unlink:()=>T,unlinkSync:()=>g,writeFile:()=>y,writeFileSync:()=>s}),i=t.t(n.r,{memfs:!0}),{available:a,readFileSync:o,writeFileSync:s,appendFileSync:c,existsSync:l,statSync:u,lstatSync:d,readdirSync:f,mkdirSync:p,rmSync:m,rmdirSync:h,unlinkSync:g,renameSync:_,readFile:v,writeFile:y,appendFile:b,stat:x,readdir:S,mkdir:C,rm:w,unlink:T,rename:E,exists:D,promises:O,mount:k,flush:A,remount:j}=i;exports.appendFile=b,exports.appendFileSync=c,exports.available=a,exports.default=i,exports.exists=D,exports.existsSync=l,exports.flush=A,exports.lstatSync=d,exports.mkdir=C,exports.mkdirSync=p,exports.mount=k,exports.promises=O,exports.readFile=v,exports.readFileSync=o,exports.readdir=S,exports.readdirSync=f,exports.remount=j,exports.rename=E,exports.renameSync=_,exports.rm=w,exports.rmSync=m,exports.rmdirSync=h,exports.stat=x,exports.statSync=u,Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return r}}),exports.unlink=T,exports.unlinkSync=g,exports.writeFile=y,exports.writeFileSync=s;
package/opfs.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { t as e } from "./rolldown-runtime-Dy4uBu1J.js";
2
- import { t } from "./node-fs-BZy9bzKd.js";
2
+ import { t } from "./node-fs-CK2wWIYS.js";
3
3
  import { r as n } from "./opfs-D0goLAQW.js";
4
4
  //#region src/opfs/index.ts
5
5
  var r = /* @__PURE__ */ e({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fkn/lib",
3
- "version": "0.9.40",
3
+ "version": "0.9.42",
4
4
  "main": "index.js",
5
5
  "types": "index.d.ts",
6
6
  "type": "module",
package/packages.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./rolldown-runtime-BIInC43l.cjs"),t=require("./api-jOTOA-5n.cjs"),n=require("./busy-Dv8wzE5M.cjs");let r=require("osra");var i=e.t({attach:()=>j,connect:()=>T,hide:()=>w,install:()=>p,isVisible:()=>G,list:()=>m,mount:()=>A,onConnect:()=>W,onVisibilityChange:()=>K,pick:()=>f,search:()=>d,show:()=>C,uninstall:()=>h}),a=`fkn-packages-connection`,o=3e4,s=(e,t)=>Object.assign(Error(t),{code:e}),c=async()=>{if(!t.c)throw s(`unavailable`,`packages: no FKN transport in this realm - use relayWorker to bridge workers`);return t.a},l=(e,t,n)=>(0,r.expose)(e??{},{transport:t,key:a,unregisterSignal:n}),u=async(e,t,n={})=>{let{signal:r,closed:i}=n;if(r?.aborted)throw s(`unavailable`,`packages.connect: aborted before connecting`);let a=new AbortController;r&&r.addEventListener(`abort`,()=>a.abort(r.reason),{once:!0});let c=new AbortController,u=new Promise((e,n)=>{let a=setTimeout(()=>n(s(`timeout`,`packages.connect: the package did not complete the connection`)),o);c.signal.addEventListener(`abort`,()=>clearTimeout(a),{once:!0}),t.addEventListener(`message`,e=>{if(e.data?.type===`fkn-packages-nack`){let t=e.data.message;n(s(`unavailable`,typeof t==`string`&&t?t:`packages.connect: the package refused the connection`))}},{signal:c.signal}),t.start(),r&&r.addEventListener(`abort`,()=>n(s(`unavailable`,`packages.connect: aborted before connecting`)),{once:!0,signal:c.signal}),i?.then(()=>n(s(`unavailable`,`packages.connect: the package closed before connecting`)))});try{return await Promise.race([l(e,t,a.signal),u])}catch(e){a.abort(e);try{t.close()}catch{}throw e}finally{c.abort()}},d=async e=>{let t=await(await c()).packages.search(e);if(`error`in t)throw s(t.error,t.message);return t.results},f=async(e,t)=>{let n=await(await c()).packages.pick(e,t);if(`error`in n)throw s(n.error,n.message);return`declined`in n?[]:n.results},p=async(e,t)=>{let n=await(await c()).packages.install(e,t);if(`error`in n)throw s(n.error,n.message);return`declined`in n?null:n.installed},m=async()=>(await(await c()).packages.list()).results,h=async e=>{let t=await(await c()).packages.uninstall(e);if(`error`in t)throw s(t.error,t.message)},g=({x:e,y:t,width:n,height:r})=>({x:Math.round(e),y:Math.round(t),width:Math.round(n),height:Math.round(r)}),_=(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)}},v=(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=_(n,g(t.getBoundingClientRect())),n.width===0||n.height===0))break}return n},y=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},b=(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)},x=new Map;n.r(`package view`,()=>x.size>0);var S=async(e,t)=>{let n=x.get(e);if(n){for(let e of n)t&&e.element!==t||(e.stop(),n.delete(e));if(n.size>0)return;x.delete(e)}let r=await(await c()).packages.hide(e);if(`error`in r)throw s(r.error,r.message)},C=async(e,t)=>{let{element:n,rect:r}=t;if(!n&&!r)throw s(`invalid`,`packages.show: pass an element or a rect`);let i=(await c()).packages,a=()=>{if(!n)return{rect:g(r)};let e=g(n.getBoundingClientRect());return{rect:e,clip:v(n,e),radius:y(n)}},o=!0,l,u=0,d=async t=>{l=t;let n=await i.show(e,t);if(`error`in n)throw o=!1,s(n.error,n.message)};await d(a());let f=()=>{if(!o)return;let e=a();b(l,e)||d(e).catch(()=>{}),u=requestAnimationFrame(f)};n&&(u=requestAnimationFrame(f));let p={element:n,stop:()=>{o=!1,cancelAnimationFrame(u)}},m=x.get(e)??new Set;return m.add(p),x.set(e,m),{hide:()=>{S(e,n).catch(()=>{})},refresh:()=>{if(!o)return;let e=a();b(l,e)||d(e).catch(()=>{})}}},w=async(e,t={})=>S(e,t.element),T=(async(e,r={})=>{let i=await(await c()).packages.connect(e,{protocol:r.protocol,...r.path===void 0?{}:{path:r.path}});if(`error`in i)throw s(i.error,i.message);let a=n.t(`package connection`),o=t.s()?.epoch??0,l=t.l((e,t)=>{t!==o&&(a(),l())});Promise.resolve(i.closed).then(()=>{a(),l()},()=>{a(),l()});let{port:d,closed:f}=i;if(r.raw)return{closed:f,port:d};let p=await u(r.payload,d,{signal:r.signal,closed:f});return r.signal&&r.signal.addEventListener(`abort`,()=>{try{d.postMessage({type:`fkn-packages-disconnect`})}catch{}},{once:!0}),{remote:p,closed:f,port:d}}),E=[`allow-scripts`,`allow-same-origin`],D=e=>{let t=e.getAttribute(`sandbox`);if(t!==null){let e=new Set(t.toLowerCase().split(/\s+/).filter(Boolean)),n=E.filter(t=>!e.has(t));if(n.length)throw s(`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 s(`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`)},O=3e4,k=(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(s(`unavailable`,typeof r.message==`string`&&r.message?r.message:`packages.mount: the package failed to boot`))},o=setTimeout(()=>i(s(`timeout`,`packages.mount: the package did not register a connection handler`)),O);window.addEventListener(`message`,a)}),A=async(e,t)=>{let{iframe:r}=t;if(!(r instanceof HTMLIFrameElement))throw s(`invalid`,`packages.mount: pass the iframe to load the package into`);if(!r.isConnected)throw s(`invalid`,`packages.mount: the iframe must be in the document before mounting into it`);D(r);let i=await(await c()).packages.frame(e);if(`error`in i)throw s(i.error,i.message);r.src=i.url;let a={done:!1},o=()=>{},l=new Promise(e=>{o=e}),d=n.t(`mounted package`),f=()=>{if(!a.done){a.done=!0,d();try{r.contentWindow?.postMessage({type:`fkn-packages-close`},i.origin)}catch{}r.src=`about:blank`,o()}};try{await k(r,i.origin)}catch(e){throw f(),e}let p=new MessageChannel,m=r.contentWindow;if(!m)throw f(),s(`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:l,port:p.port1,frame:r,unmount:f};try{return{remote:await u(t.payload,p.port1,{signal:t.signal,closed:l}),closed:l,port:p.port1,frame:r,unmount:f}}catch(e){throw f(),e}},j=(e,t,n)=>u(t,e,{signal:n?.signal}),M=null,N=!1,P=new Set,F=[],I=new Map,L=!1,R=!1,z=e=>{let t=I.get(e);t&&(I.delete(e),t())},B=(e,t)=>{try{e.postMessage({type:`fkn-packages-nack`,message:t})}catch{}try{e.close()}catch{}},V=async(e,t)=>{let{port:n,...r}=e;e.port.addEventListener(`message`,t=>{t.data?.type===`fkn-packages-disconnect`&&z(e.port)});let i;try{i=await t.createPayload(r)}catch(t){throw B(e.port,t instanceof Error?t.message:`the package failed to produce a connection`),t}let a=new Promise(t=>I.set(e.port,t)),o=await l(i,e.port);t.handler?.({...r,remote:o,closed:a,port:e.port})},H=()=>{L||typeof window>`u`||window.parent===window||(L=!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:``,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:``};M?V(r,M).catch(e=>console.warn(`packages.onConnect:`,e)):F.push(r)}if(t?.type===`fkn-packages-close`)for(let e of[...I.keys()])z(e);if(t?.type===`fkn-packages-visibility`){N=t.visible===!0;for(let e of P)try{e(N)}catch{}}}))},U=()=>{R||typeof window>`u`||window.parent===window||(R=!0,window.parent.postMessage({type:`fkn-packages-ready`},`*`))},W=(e,t)=>{if(typeof window>`u`)return{unsubscribe:()=>{}};H();let n={createPayload:e,handler:t};for(M=n,U();F.length&&M===n;)V(F.shift(),n).catch(e=>console.warn(`packages.onConnect:`,e));return{unsubscribe:()=>{M===n&&(M=null)}}},G=()=>N,K=e=>{if(typeof window>`u`)return{unsubscribe:()=>{}};H(),P.add(e);try{e(N)}catch{}return{unsubscribe:()=>{P.delete(e)}}};exports.attach=j,exports.connect=T,exports.hide=w,exports.install=p,exports.isVisible=G,exports.list=m,exports.mount=A,exports.onConnect=W,exports.onVisibilityChange=K,exports.pick=f,exports.search=d,exports.show=C,Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return i}}),exports.uninstall=h;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./rolldown-runtime-BIInC43l.cjs"),t=require("./api--LOXTOpv.cjs"),n=require("./busy-Dv8wzE5M.cjs");let r=require("osra");var i=e.t({attach:()=>j,connect:()=>T,hide:()=>w,install:()=>p,isVisible:()=>G,list:()=>m,mount:()=>A,onConnect:()=>W,onVisibilityChange:()=>K,pick:()=>f,search:()=>d,show:()=>C,uninstall:()=>h}),a=`fkn-packages-connection`,o=3e4,s=(e,t)=>Object.assign(Error(t),{code:e}),c=async()=>{if(!t.l)throw s(`unavailable`,`packages: no FKN transport in this realm - use relayWorker to bridge workers`);return t.o},l=(e,t,n)=>(0,r.expose)(e??{},{transport:t,key:a,unregisterSignal:n}),u=async(e,t,n={})=>{let{signal:r,closed:i}=n;if(r?.aborted)throw s(`unavailable`,`packages.connect: aborted before connecting`);let a=new AbortController;r&&r.addEventListener(`abort`,()=>a.abort(r.reason),{once:!0});let c=new AbortController,u=new Promise((e,n)=>{let a=setTimeout(()=>n(s(`timeout`,`packages.connect: the package did not complete the connection`)),o);c.signal.addEventListener(`abort`,()=>clearTimeout(a),{once:!0}),t.addEventListener(`message`,e=>{if(e.data?.type===`fkn-packages-nack`){let t=e.data.message;n(s(`unavailable`,typeof t==`string`&&t?t:`packages.connect: the package refused the connection`))}},{signal:c.signal}),t.start(),r&&r.addEventListener(`abort`,()=>n(s(`unavailable`,`packages.connect: aborted before connecting`)),{once:!0,signal:c.signal}),i?.then(()=>n(s(`unavailable`,`packages.connect: the package closed before connecting`)))});try{return await Promise.race([l(e,t,a.signal),u])}catch(e){a.abort(e);try{t.close()}catch{}throw e}finally{c.abort()}},d=async e=>{let t=await(await c()).packages.search(e);if(`error`in t)throw s(t.error,t.message);return t.results},f=async(e,t)=>{let n=await(await c()).packages.pick(e,t);if(`error`in n)throw s(n.error,n.message);return`declined`in n?[]:n.results},p=async(e,t)=>{let n=await(await c()).packages.install(e,t);if(`error`in n)throw s(n.error,n.message);return`declined`in n?null:n.installed},m=async()=>(await(await c()).packages.list()).results,h=async e=>{let t=await(await c()).packages.uninstall(e);if(`error`in t)throw s(t.error,t.message)},g=({x:e,y:t,width:n,height:r})=>({x:Math.round(e),y:Math.round(t),width:Math.round(n),height:Math.round(r)}),_=(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)}},v=(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=_(n,g(t.getBoundingClientRect())),n.width===0||n.height===0))break}return n},y=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},b=(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)},x=new Map;n.r(`package view`,()=>x.size>0);var S=async(e,t)=>{let n=x.get(e);if(n){for(let e of n)t&&e.element!==t||(e.stop(),n.delete(e));if(n.size>0)return;x.delete(e)}let r=await(await c()).packages.hide(e);if(`error`in r)throw s(r.error,r.message)},C=async(e,t)=>{let{element:n,rect:r}=t;if(!n&&!r)throw s(`invalid`,`packages.show: pass an element or a rect`);let i=(await c()).packages,a=()=>{if(!n)return{rect:g(r)};let e=g(n.getBoundingClientRect());return{rect:e,clip:v(n,e),radius:y(n)}},o=!0,l,u=0,d=async t=>{l=t;let n=await i.show(e,t);if(`error`in n)throw o=!1,s(n.error,n.message)};await d(a());let f=()=>{if(!o)return;let e=a();b(l,e)||d(e).catch(()=>{}),u=requestAnimationFrame(f)};n&&(u=requestAnimationFrame(f));let p={element:n,stop:()=>{o=!1,cancelAnimationFrame(u)}},m=x.get(e)??new Set;return m.add(p),x.set(e,m),{hide:()=>{S(e,n).catch(()=>{})},refresh:()=>{if(!o)return;let e=a();b(l,e)||d(e).catch(()=>{})}}},w=async(e,t={})=>S(e,t.element),T=(async(e,r={})=>{let i=await(await c()).packages.connect(e,{protocol:r.protocol,...r.path===void 0?{}:{path:r.path}});if(`error`in i)throw s(i.error,i.message);let a=n.t(`package connection`),o=t.c()?.epoch??0,l=t.u((e,t)=>{t!==o&&(a(),l())});Promise.resolve(i.closed).then(()=>{a(),l()},()=>{a(),l()});let{port:d,closed:f}=i;if(r.raw)return{closed:f,port:d};let p=await u(r.payload,d,{signal:r.signal,closed:f});return r.signal&&r.signal.addEventListener(`abort`,()=>{try{d.postMessage({type:`fkn-packages-disconnect`})}catch{}},{once:!0}),{remote:p,closed:f,port:d}}),E=[`allow-scripts`,`allow-same-origin`],D=e=>{let t=e.getAttribute(`sandbox`);if(t!==null){let e=new Set(t.toLowerCase().split(/\s+/).filter(Boolean)),n=E.filter(t=>!e.has(t));if(n.length)throw s(`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 s(`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`)},O=3e4,k=(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(s(`unavailable`,typeof r.message==`string`&&r.message?r.message:`packages.mount: the package failed to boot`))},o=setTimeout(()=>i(s(`timeout`,`packages.mount: the package did not register a connection handler`)),O);window.addEventListener(`message`,a)}),A=async(e,t)=>{let{iframe:r}=t;if(!(r instanceof HTMLIFrameElement))throw s(`invalid`,`packages.mount: pass the iframe to load the package into`);if(!r.isConnected)throw s(`invalid`,`packages.mount: the iframe must be in the document before mounting into it`);D(r);let i=await(await c()).packages.frame(e);if(`error`in i)throw s(i.error,i.message);r.src=i.url;let a={done:!1},o=()=>{},l=new Promise(e=>{o=e}),d=n.t(`mounted package`),f=()=>{if(!a.done){a.done=!0,d();try{r.contentWindow?.postMessage({type:`fkn-packages-close`},i.origin)}catch{}r.src=`about:blank`,o()}};try{await k(r,i.origin)}catch(e){throw f(),e}let p=new MessageChannel,m=r.contentWindow;if(!m)throw f(),s(`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:l,port:p.port1,frame:r,unmount:f};try{return{remote:await u(t.payload,p.port1,{signal:t.signal,closed:l}),closed:l,port:p.port1,frame:r,unmount:f}}catch(e){throw f(),e}},j=(e,t,n)=>u(t,e,{signal:n?.signal}),M=null,N=!1,P=new Set,F=[],I=new Map,L=!1,R=!1,z=e=>{let t=I.get(e);t&&(I.delete(e),t())},B=(e,t)=>{try{e.postMessage({type:`fkn-packages-nack`,message:t})}catch{}try{e.close()}catch{}},V=async(e,t)=>{let{port:n,...r}=e;e.port.addEventListener(`message`,t=>{t.data?.type===`fkn-packages-disconnect`&&z(e.port)});let i;try{i=await t.createPayload(r)}catch(t){throw B(e.port,t instanceof Error?t.message:`the package failed to produce a connection`),t}let a=new Promise(t=>I.set(e.port,t)),o=await l(i,e.port);t.handler?.({...r,remote:o,closed:a,port:e.port})},H=()=>{L||typeof window>`u`||window.parent===window||(L=!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:``,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:``};M?V(r,M).catch(e=>console.warn(`packages.onConnect:`,e)):F.push(r)}if(t?.type===`fkn-packages-close`)for(let e of[...I.keys()])z(e);if(t?.type===`fkn-packages-visibility`){N=t.visible===!0;for(let e of P)try{e(N)}catch{}}}))},U=()=>{R||typeof window>`u`||window.parent===window||(R=!0,window.parent.postMessage({type:`fkn-packages-ready`},`*`))},W=(e,t)=>{if(typeof window>`u`)return{unsubscribe:()=>{}};H();let n={createPayload:e,handler:t};for(M=n,U();F.length&&M===n;)V(F.shift(),n).catch(e=>console.warn(`packages.onConnect:`,e));return{unsubscribe:()=>{M===n&&(M=null)}}},G=()=>N,K=e=>{if(typeof window>`u`)return{unsubscribe:()=>{}};H(),P.add(e);try{e(N)}catch{}return{unsubscribe:()=>{P.delete(e)}}};exports.attach=j,exports.connect=T,exports.hide=w,exports.install=p,exports.isVisible=G,exports.list=m,exports.mount=A,exports.onConnect=W,exports.onVisibilityChange=K,exports.pick=f,exports.search=d,exports.show=C,Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return i}}),exports.uninstall=h;
package/packages.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { C as InstallOptions, F as PickOptions, H as Radii, I as Placement, M as PackageResult, N as PackagesErrorCode, f as ConnectOptions, j as PackageQuery, vt as SurfaceRect, w as InstalledPackage } from "./contract-Cvr_8gCL.js";
1
+ import { E as InstalledPackage, F as PackageResult, G as Radii, I as PackagesErrorCode, P as PackageQuery, R as PickOptions, T as InstallOptions, m as ConnectOptions, xt as SurfaceRect, z as Placement } from "./contract-CCxPKIC7.js";
2
2
  import { Remote } from "osra";
3
3
  declare namespace packages_d_exports {
4
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 };