@fkn/lib 0.9.54 → 0.9.56

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 (68) hide show
  1. package/{account-generation-CTB1J33G.js → account-generation-D3jlXBbM.js} +1 -1
  2. package/{account-generation-DOuApHq5.cjs → account-generation-DkrSMafa.cjs} +1 -1
  3. package/{account-storage-D1RiskV6.js → account-storage-BBL440_m.js} +2 -2
  4. package/{account-storage-CL0wLuQw.cjs → account-storage-C1VL6fpb.cjs} +1 -1
  5. package/account.cjs +1 -1
  6. package/account.d.ts +1 -1
  7. package/account.js +2 -2
  8. package/{api-C-VvG5P-.d.ts → api-BSpQkgnM.d.ts} +361 -25
  9. package/api-BmaUJUUp.cjs +3 -0
  10. package/{api-BYtMzj8u.js → api-DEfkbHGB.js} +93 -81
  11. package/api.cjs +1 -1
  12. package/api.d.ts +2 -2
  13. package/api.js +1 -1
  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.cjs +1 -1
  19. package/cloud/fs.js +1 -1
  20. package/cloud/net.d.ts +1 -1
  21. package/{cloud-S8hQywqV.d.ts → cloud-BslRIoKs.d.ts} +2 -2
  22. package/{cloud-CI6WMBPa.cjs → cloud-C_EPPfe_.cjs} +1 -1
  23. package/{cloud-8sJ1Sg8n.js → cloud-DTpFBbBH.js} +2 -2
  24. package/cloud.cjs +1 -1
  25. package/cloud.d.ts +3 -3
  26. package/cloud.js +2 -2
  27. package/{contract-CMQOic3K.d.ts → contract-DFycgFJK.d.ts} +131 -8
  28. package/contract.d.ts +2 -2
  29. package/dgram.cjs +1 -1
  30. package/dgram.d.ts +2 -2
  31. package/dgram.js +1 -1
  32. package/dns.cjs +1 -1
  33. package/dns.d.ts +1 -1
  34. package/dns.js +1 -1
  35. package/{extension-BmqjgSIQ.js → extension-C13d41tq.js} +2 -2
  36. package/{extension-BXI3MVXw.cjs → extension-DA_Fx3Lx.cjs} +1 -1
  37. package/extension.cjs +1 -1
  38. package/extension.js +1 -1
  39. package/fs/promises.cjs +1 -1
  40. package/fs/promises.js +1 -1
  41. package/{fs-CPU00CI3.cjs → fs-C7ByWYF9.cjs} +1 -1
  42. package/{fs-ohcMNiu2.js → fs-gryDP9qw.js} +2 -2
  43. package/fs.cjs +1 -1
  44. package/fs.js +2 -2
  45. package/http.d.ts +1 -1
  46. package/index.cjs +1 -1
  47. package/index.d.ts +2 -2
  48. package/index.js +4 -4
  49. package/{net-B8YQuB9E.d.ts → net-eEjhJ0AE.d.ts} +2 -2
  50. package/net.cjs +1 -1
  51. package/net.d.ts +1 -1
  52. package/net.js +1 -1
  53. package/package.json +1 -1
  54. package/packages.cjs +1 -1
  55. package/packages.d.ts +1 -1
  56. package/packages.js +1 -1
  57. package/{proxy-ClDBa5il.d.ts → proxy-8hIHeEHD.d.ts} +2 -2
  58. package/{proxy-CL8j00ao.cjs → proxy-Blzm-Dc1.cjs} +1 -1
  59. package/{proxy-vAsYHMIa.js → proxy-C2HY5Ybc.js} +1 -1
  60. package/react.cjs +1 -1
  61. package/react.js +1 -1
  62. package/rooms.cjs +1 -1
  63. package/rooms.d.ts +43 -9
  64. package/rooms.js +154 -92
  65. package/storage.cjs +1 -1
  66. package/storage.d.ts +1 -1
  67. package/storage.js +3 -3
  68. package/api-Csb5b8dE.cjs +0 -3
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-Csb5b8dE.cjs"),n=require("./busy-BXbVH595.cjs"),r=require("./utils-BpHmMkIR.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.t,isIPv4:()=>r.n,isIPv6:()=>r.r}),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){return 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.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.o(...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.o(...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=l,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.t,isIPv4:r.n,isIPv6:r.r};exports.Server=c,exports.Socket=s,exports._default=f,exports.default=f,exports.connect=l,exports.createConnection=u,exports.createServer=d,exports.isIP=r.t,exports.isIPv4=r.n,exports.isIPv6=r.r,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-BmaUJUUp.cjs"),n=require("./busy-BXbVH595.cjs"),r=require("./utils-BpHmMkIR.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.t,isIPv4:()=>r.n,isIPv6:()=>r.r}),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){return 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.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.o(...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.o(...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=l,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.t,isIPv4:r.n,isIPv6:r.r};exports.Server=c,exports.Socket=s,exports._default=f,exports.default=f,exports.connect=l,exports.createConnection=u,exports.createServer=d,exports.isIP=r.t,exports.isIPv4=r.n,exports.isIPv6=r.r,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-B8YQuB9E.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-eEjhJ0AE.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 { s as t } from "./api-BYtMzj8u.js";
2
+ import { s as t } from "./api-DEfkbHGB.js";
3
3
  import { t as n } from "./busy-DsMWrSzc.js";
4
4
  import { n as r, o as i, r as a, t as o } from "./utils-Cyq8uJiy.js";
5
5
  import "./wire.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fkn/lib",
3
- "version": "0.9.54",
3
+ "version": "0.9.56",
4
4
  "license": "SEE LICENSE IN LICENSE",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
package/packages.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./rolldown-runtime-BIInC43l.cjs"),t=require("./api-Csb5b8dE.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)}}};exports.attach=M,exports.connect=E,exports.hide=T,exports.install=m,exports.isVisible=K,exports.list=h,exports.mount=j,exports.onConnect=G,exports.onVisibilityChange=q,exports.pick=p,exports.search=f,exports.show=w,Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return i}}),exports.uninstall=g;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./rolldown-runtime-BIInC43l.cjs"),t=require("./api-BmaUJUUp.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)}}};exports.attach=M,exports.connect=E,exports.hide=T,exports.install=m,exports.isVisible=K,exports.list=h,exports.mount=j,exports.onConnect=G,exports.onVisibilityChange=q,exports.pick=p,exports.search=f,exports.show=w,Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return i}}),exports.uninstall=g;
package/packages.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { At as SurfaceRect, E as InstalledPackage, F as PackageResult, G as Radii, I as PackagesErrorCode, P as PackageQuery, R as PickOptions, T as InstallOptions, m as ConnectOptions, z as Placement } from "./contract-CMQOic3K.js";
1
+ import { E as InstalledPackage, F as PackageResult, G as Radii, I as PackagesErrorCode, P as PackageQuery, Pt as SurfaceRect, R as PickOptions, T as InstallOptions, m as ConnectOptions, z as Placement } from "./contract-DFycgFJK.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 };
package/packages.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { t as e } from "./rolldown-runtime-Dy4uBu1J.js";
2
- import { c as t, l as n, o as r, u as i } from "./api-BYtMzj8u.js";
2
+ import { c as t, l as n, o as r, u as i } from "./api-DEfkbHGB.js";
3
3
  import { i as a, t as o } from "./busy-DsMWrSzc.js";
4
4
  import { expose as s } from "osra";
5
5
  //#region src/packages.ts
@@ -1,5 +1,5 @@
1
- import { K as Resolvers } from "./contract-CMQOic3K.js";
2
- import "./api-C-VvG5P-.js";
1
+ import { K as Resolvers } from "./contract-DFycgFJK.js";
2
+ import "./api-BSpQkgnM.js";
3
3
  //#region src/proxy.d.ts
4
4
  type ProxyFetch = Resolvers['cloud']['fetch'];
5
5
  type FetchParameters = Parameters<ProxyFetch>;
@@ -1 +1 @@
1
- const e=require("./api-Csb5b8dE.cjs"),t=require("./busy-BXbVH595.cjs");var n=typeof FinalizationRegistry>`u`?void 0:new FinalizationRegistry(e=>e()),r=e=>{let r=e.body;if(!r)return e;let i=t.t(`streamed response`),a=r.getReader(),o=new ReadableStream({pull:async e=>{try{let{done:t,value:n}=await a.read();if(t){i(),e.close();return}e.enqueue(n)}catch(t){i(),e.error(t)}},cancel:async e=>{i(),await a.cancel(e).catch(()=>{})}}),s=new Response(o,{status:e.status,statusText:e.statusText,headers:e.headers});return n?.register(s,i),s},i=async e=>{if(e!=null)return typeof e==`string`||e instanceof ArrayBuffer||ArrayBuffer.isView(e)?e:new Request(`https://body.invalid/`,{method:`POST`,body:e,duplex:`half`}).arrayBuffer()},a=async e=>{if(e.method===`GET`||e.method===`HEAD`)return;let t=await e.clone().arrayBuffer();return t.byteLength?t:void 0},o=async(t,n)=>{if(e.p(t),typeof t==`object`&&t&&!(t instanceof URL)&&typeof t.url==`string`){let o=t,s={};o.headers.forEach((e,t)=>{s[t]=e});let c=await i(n?.body===void 0?await a(o):n.body);return e.o.then(e=>e.cloud.fetch(o.url,{...n,method:n?.method??o.method,headers:n?.headers??s,body:c})).then(r)}let o=t instanceof URL?t.href:t,s=await i(n?.body);return e.o.then(e=>e.cloud.fetch(o,n?.body===void 0?n:{...n,body:s})).then(r)};Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return o}});
1
+ const e=require("./api-BmaUJUUp.cjs"),t=require("./busy-BXbVH595.cjs");var n=typeof FinalizationRegistry>`u`?void 0:new FinalizationRegistry(e=>e()),r=e=>{let r=e.body;if(!r)return e;let i=t.t(`streamed response`),a=r.getReader(),o=new ReadableStream({pull:async e=>{try{let{done:t,value:n}=await a.read();if(t){i(),e.close();return}e.enqueue(n)}catch(t){i(),e.error(t)}},cancel:async e=>{i(),await a.cancel(e).catch(()=>{})}}),s=new Response(o,{status:e.status,statusText:e.statusText,headers:e.headers});return n?.register(s,i),s},i=async e=>{if(e!=null)return typeof e==`string`||e instanceof ArrayBuffer||ArrayBuffer.isView(e)?e:new Request(`https://body.invalid/`,{method:`POST`,body:e,duplex:`half`}).arrayBuffer()},a=async e=>{if(e.method===`GET`||e.method===`HEAD`)return;let t=await e.clone().arrayBuffer();return t.byteLength?t:void 0},o=async(t,n)=>{if(e.p(t),typeof t==`object`&&t&&!(t instanceof URL)&&typeof t.url==`string`){let o=t,s={};o.headers.forEach((e,t)=>{s[t]=e});let c=await i(n?.body===void 0?await a(o):n.body);return e.o.then(e=>e.cloud.fetch(o.url,{...n,method:n?.method??o.method,headers:n?.headers??s,body:c})).then(r)}let o=t instanceof URL?t.href:t,s=await i(n?.body);return e.o.then(e=>e.cloud.fetch(o,n?.body===void 0?n:{...n,body:s})).then(r)};Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return o}});
@@ -1,4 +1,4 @@
1
- import { o as e, p as t } from "./api-BYtMzj8u.js";
1
+ import { o as e, p as t } from "./api-DEfkbHGB.js";
2
2
  import { t as n } from "./busy-DsMWrSzc.js";
3
3
  //#region src/proxy.ts
4
4
  var r = typeof FinalizationRegistry > "u" ? void 0 : new FinalizationRegistry((e) => e()), i = (e) => {
package/react.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./connect-button-BpXDs7tw.cjs");let t=require("react");var n=({className:n,style:r}={})=>(0,t.createElement)(`iframe`,{src:e.t(),title:`Connect your FKN account`,className:n,style:{border:`none`,width:150,height:40,background:`transparent`,colorScheme:`normal`,...r}});exports.ConnectButton=n,exports.connectButtonUrl=e.t;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./connect-button-BpXDs7tw.cjs");let t=require("react");var n=({className:n,style:r}={})=>(0,t.createElement)(`iframe`,{src:e.t(),title:`Sign in to FKN`,className:n,style:{border:`none`,width:150,height:40,background:`transparent`,colorScheme:`normal`,...r}});exports.ConnectButton=n,exports.connectButtonUrl=e.t;
package/react.js CHANGED
@@ -3,7 +3,7 @@ import { createElement as t } from "react";
3
3
  //#region src/react.ts
4
4
  var n = ({ className: n, style: r } = {}) => t("iframe", {
5
5
  src: e(),
6
- title: "Connect your FKN account",
6
+ title: "Sign in to FKN",
7
7
  className: n,
8
8
  style: {
9
9
  border: "none",
package/rooms.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./rolldown-runtime-BIInC43l.cjs"),t=require("./api-Csb5b8dE.cjs"),n=require("./busy-BXbVH595.cjs"),r=require("./contract.cjs");var i=e.t({available:()=>_,create:()=>b,join:()=>x,open:()=>y}),a={wrongKey:`rooms: wrong room key`,inviteNoKey:`rooms: the invite carries no key`,badName:`rooms: the name is not one a room can have`,badKeyOption:`rooms: the key is not 32 bytes base64url`,noSuchMember:`rooms: no such member`,noSuchMessage:`rooms: no such message`,roomFull:`rooms: the room is full`,tooManyConnections:`rooms: too many connections`,tooManyBlocks:`rooms: too many blocks`,tooManyClaims:`rooms: too many claims`,mailboxFull:`rooms: the mailbox is full`,outOfStorage:`rooms: the owner is out of storage`,outOfQuota:`rooms: out of daily bandwidth`,blocked:`rooms: you are blocked from this room`,cannotSend:`rooms: you cannot send here`,permissionDenied:`rooms: permission denied`,notOwner:`rooms: not the room owner`,ownerNotRemovable:`rooms: the owner cannot be removed`,ownerKeepsEvery:`rooms: the owner keeps every permission`,removeYourself:`rooms: you cannot remove yourself`,needsAccount:`rooms: claiming needs an account`,nameClaimed:`rooms: the name is claimed`,notClaimed:`rooms: the room is not claimed`,noMailbox:`rooms: the room keeps no messages`,badLimit:`rooms: the limit is out of range`,badDescription:`rooms: the description is not one a claim can carry`,notClaimer:`rooms: only the app that claimed the room can describe it`,notReleaser:`rooms: only the app that claimed the room can release it`,notClaimingApp:`rooms: only the app that claimed the room can change it`,badTemporary:`rooms: the temporary duration is not one a claim can carry`,notTemporaryClaimer:`rooms: only the app that claimed the room can set when it expires`,temporaryUnavailable:`rooms: temporary claims are not available`,mailboxUnavailable:`rooms: the mailbox switch is not available`,guestUnavailable:`rooms: guest joins are not available`,tooFast:`rooms: sending too fast`,tooLarge:`rooms: the message is too large`,unavailable:`rooms: rooms are unavailable`,notEnabled:`rooms: rooms are not available`,alreadyJoined:`rooms: already joined`,notJoined:`rooms: not joined`,malformed:`rooms: malformed frame`,ended:`rooms: the room has ended`},o=(e,t)=>Object.assign(Error(t),{code:e}),s=e=>e instanceof Error&&typeof e.code==`string`,c={send:!0,receive:!0,maxMessageBytes:262144},l=()=>({messages:0,bytes:0,cap:5e8,archived:!1}),u=async()=>{if(!t.l)return;let e=(await t.s(`a room`).catch(()=>void 0))?.rooms;return typeof e?.open==`function`?e:void 0},d=()=>{throw o(`unavailable`,a.unavailable)},f=e=>e===`blocked`?`blocked`:e===`not-found`?`ended`:`unavailable`,p=e=>{if(e!==void 0&&e!==!1)return e===!0?r.ROOM_TEMPORARY_MS.default:typeof e!=`number`||!Number.isInteger(e)?null:e>=r.ROOM_TEMPORARY_MS.min&&e<=r.ROOM_TEMPORARY_MS.max?e:null},m=(e,t)=>{let n=t?e?.guest:e;return typeof n?.join==`function`?n:void 0},h=e=>{let t=e?.guest;if(t!==void 0&&typeof t!=`boolean`)throw o(`invalid`,a.malformed);return t===!0},g=async(e,r)=>{let i=e.invite,u=e,d=0,h=e.self,g=e.owner,_=e.claimed,v=e.mailbox,y=0,b=await e.defaults().catch(()=>c),x=!1,S=new Set,C=new Set,w=n.t(`room`),T=()=>{},E=()=>{},D=new Promise(e=>{E=e}),O=e=>{let t=[...C];C.clear();for(let n of t)try{n(e)}catch{}},k=e=>{x||(x=!0,T(),S.clear(),w(),O(o(`closed`,a.ended)),E({reason:e}))},A=e=>{if(x)return;let t=e;if(t.type===`defaults`&&(b=t.defaults),t.type===`permissions`&&t.id===h.id&&(h={id:h.id,permissions:t.permissions,maxMessageBytes:t.maxMessageBytes}),t.type===`claim`){y+=1;let e=t.claimed&&t.mailbox!==!1;t={type:`claim`,claimed:t.claimed,owner:t.owner,mailbox:e},_=t.claimed,g=t.owner,v=e?l():null}for(let e of[...S])try{e(t)}catch{}},j=(e,t)=>{Promise.resolve(e.on(A)).catch(()=>{}),Promise.resolve(e.closed).then(e=>{t===d&&k(e.reason)},()=>{})},M=async(e,t)=>{let n=m(e,r);if(!n)return k(`unavailable`);let a=await n.join(i).catch(()=>void 0);if(x||t!==d)return;if(!a)return k(`unavailable`);if(`error`in a)return k(f(a.error));if(a.self.id!==h.id)return Promise.resolve(a.leave()).catch(()=>{}),k(`unavailable`);u=a,h=a.self,g=a.owner,_=a.claimed,v=a.mailbox,j(a,t);let o=await a.defaults().catch(()=>void 0);o&&!x&&t===d&&(b=o)};T=t.u((e,t)=>{let n=d;d=t,!(x||n===0||n===t)&&(O(o(`unavailable`,a.unavailable)),M(e.rooms,t))}),j(e,d);let N=async e=>{if(x)throw o(`closed`,a.ended);let t=()=>{},n=new Promise((e,n)=>{t=n});C.add(t);try{return await Promise.race([Promise.resolve(e(u)),n])}catch(e){throw s(e)?e:o(`unavailable`,a.unavailable)}finally{C.delete(t)}},P=async e=>{let t=await N(e);if(`error`in t)throw o(t.error,t.message)},F=async e=>{let t=await N(e);if(typeof t==`object`&&t&&`error`in t)throw o(t.error,t.message);return t};return{id:e.id,name:e.name,key:e.key,invite:i,get self(){return h},get owner(){return g},get claimed(){return _},get mailbox(){return v},defaults:()=>b,members:()=>N(e=>e.members()),send:e=>P(t=>t.send(e)),edit:(e,t)=>P(n=>n.edit(e,t)),delete:(e,t)=>P(n=>n.delete(e,t)),backlog:(e,t)=>F(n=>n.backlog(e,t)),setDefault:(e,t)=>P(n=>n.setDefault(e,t)),limit:(e,t)=>P(n=>n.limit(e,t)),grant:(e,t)=>P(n=>n.grant(e,t)),revoke:(e,t)=>P(n=>n.revoke(e,t)),remove:e=>P(t=>t.remove(e)),block:e=>P(t=>t.block(e)),unblock:e=>P(t=>t.unblock(e)),claim:async e=>{let t=e?.description;if(t!==void 0&&typeof t!=`string`)throw o(`invalid`,a.badDescription);let n=p(e?.temporary);if(n===null)throw o(`invalid`,a.badTemporary);let r=e?.mailbox;if(r!==void 0&&typeof r!=`boolean`)throw o(`invalid`,a.malformed);let i={...t===void 0?{}:{description:t},...n===void 0?{}:{temporary:n},...r===void 0?{}:{mailbox:r}};return Object.keys(i).length===0?P(e=>e.claim()):P(e=>{if(n!==void 0&&e.temporaryClaims!==!0)throw o(`unavailable`,a.temporaryUnavailable);if(r===!1&&e.mailboxSwitch!==!0)throw o(`unavailable`,a.mailboxUnavailable);return e.claim(i)})},setMailbox:async e=>{if(typeof e!=`boolean`)throw o(`invalid`,a.malformed);let t=y;await P(t=>{if(t.mailboxSwitch!==!0)throw o(`unavailable`,a.mailboxUnavailable);return t.setMailbox(e)}),y===t&&(e?v===null&&(v=l()):v=null)},release:()=>P(e=>e.release()),usage:async()=>{let e=await F(e=>e.usage());return v=e,e},on:async e=>x?()=>{}:(S.add(e),()=>{S.delete(e)}),leave:async()=>{await Promise.resolve(u.leave()).catch(()=>{}),k(`left`)},closed:D}},_=async()=>{let e=await u();return e?e.available().catch(()=>!1):!1},v=async(e,t)=>{let n=await u();if(!n)throw o(`unavailable`,a.unavailable);let r=m(n,e);if(!r)throw o(`unavailable`,a.guestUnavailable);let i=await t(r).catch(d);if(`error`in i)throw o(i.error,i.message);return g(i,e)},y=async(e,t)=>{if(typeof e!=`string`||e.length===0||e.length>72)throw o(`invalid`,a.badName);return v(h(t),n=>n.open(e,t))},b=async e=>v(h(e),t=>t.create(e)),x=async(e,t)=>{let n=typeof e==`string`?e.indexOf(`.`):-1;if(n<=0||n===e.length-1)throw o(`invalid`,a.inviteNoKey);return v(h(t),n=>n.join(e,t))};exports.available=_,exports.create=b,exports.join=x,exports.open=y,Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return i}});
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./rolldown-runtime-BIInC43l.cjs"),t=require("./api-BmaUJUUp.cjs"),n=require("./busy-BXbVH595.cjs"),r=require("./contract.cjs");var i=e.t({available:()=>S,create:()=>T,join:()=>E,open:()=>w}),a={wrongKey:`rooms: wrong room key`,inviteNoKey:`rooms: the invite carries no key`,badName:`rooms: the name is not one a room can have`,badKeyOption:`rooms: the key is not 32 bytes base64url`,noSuchMember:`rooms: no such member`,noSuchMessage:`rooms: no such message`,roomFull:`rooms: the room is full`,tooManyConnections:`rooms: too many connections`,tooManyBlocks:`rooms: too many blocks`,tooManyClaims:`rooms: too many claims`,mailboxFull:`rooms: the mailbox is full`,outOfStorage:`rooms: the owner is out of storage`,outOfQuota:`rooms: out of daily bandwidth`,blocked:`rooms: you are blocked from this room`,cannotSend:`rooms: you cannot send here`,permissionDenied:`rooms: permission denied`,notOwner:`rooms: not the room owner`,ownerNotRemovable:`rooms: the owner cannot be removed`,ownerKeepsEvery:`rooms: the owner keeps every permission`,removeYourself:`rooms: you cannot remove yourself`,needsAccount:`rooms: claiming needs an account`,nameClaimed:`rooms: the name is claimed`,notClaimed:`rooms: the room is not claimed`,noMailbox:`rooms: the room keeps no messages`,badLimit:`rooms: the limit is out of range`,badDescription:`rooms: the description is not one a claim can carry`,notClaimer:`rooms: only the app that claimed the room can describe it`,notReleaser:`rooms: only the app that claimed the room can release it`,notClaimingApp:`rooms: only the app that claimed the room can change it`,badTemporary:`rooms: the temporary duration is not one a claim can carry`,notTemporaryClaimer:`rooms: only the app that claimed the room can set when it expires`,temporaryUnavailable:`rooms: temporary claims are not available`,mailboxUnavailable:`rooms: the mailbox switch is not available`,guestUnavailable:`rooms: guest joins are not available`,schemasUnavailable:`rooms: room schemas are not available`,badSchema:`rooms: the schema is not one a room can take`,newerSchema:`rooms: the room holds a newer schema`,noSchema:`rooms: the room has no schema`,misfit:`rooms: the message does not fit the room's schema`,ownerSends:`rooms: only the owner sends this type`,accountSends:`rooms: sending this needs an account`,perAccount:`rooms: you have as many of these here as the room allows`,tooFast:`rooms: sending too fast`,tooLarge:`rooms: the message is too large`,unavailable:`rooms: rooms are unavailable`,notEnabled:`rooms: rooms are not available`,alreadyJoined:`rooms: already joined`,notJoined:`rooms: not joined`,malformed:`rooms: malformed frame`,ended:`rooms: the room has ended`},o=(e,t)=>Object.assign(Error(t),{code:e}),s=e=>e instanceof Error&&typeof e.code==`string`,c={send:!0,receive:!0,maxMessageBytes:262144},l=2048,u=()=>({messages:0,bytes:0,cap:5e8,archived:!1}),d=async()=>{if(!t.l)return;let e=(await t.s(`a room`).catch(()=>void 0))?.rooms;return typeof e?.open==`function`?e:void 0},f=()=>{throw o(`unavailable`,a.unavailable)},p=e=>e===`blocked`?`blocked`:e===`not-found`?`ended`:`unavailable`,m=e=>{if(e!==void 0&&e!==!1)return e===!0?r.ROOM_TEMPORARY_MS.default:typeof e!=`number`||!Number.isInteger(e)?null:e>=r.ROOM_TEMPORARY_MS.min&&e<=r.ROOM_TEMPORARY_MS.max?e:null},h=(e,t)=>{let n=t?e?.guest:e;return typeof n?.join==`function`?n:void 0},g=e=>{let t;try{t=JSON.stringify(e)}catch{}let n=t===void 0?void 0:JSON.parse(t),r=typeof n==`object`&&!!n&&!Array.isArray(n)&&typeof n.type==`string`;if(t===void 0||!r||t.length>l)throw o(`invalid`,a.misfit);return t},_=e=>{let t;try{t=JSON.parse(JSON.stringify(e))}catch{}if(typeof t!=`object`||!t||Array.isArray(t))throw o(`invalid`,a.badSchema);return t},v=e=>e?.schema===void 0?e:{...e,schema:_(e.schema)},y=e=>{if(e.schemas!==!0)throw o(`unavailable`,a.schemasUnavailable);return e},b=e=>{let t=e?.guest;if(t!==void 0&&typeof t!=`boolean`)throw o(`invalid`,a.malformed);return t===!0},x=async(e,r)=>{let i=e.invite,l=e,d=0,f=e.self,v=e.owner,b=e.claimed,x=e.mailbox,S=0,C=await e.defaults().catch(()=>c),w=e.schemas===!0?await Promise.resolve(e.schema()).catch(()=>null):null,T=0,E=!1,D=new Set,O=new Set,k=n.t(`room`),A=()=>{},j=()=>{},M=new Promise(e=>{j=e}),N=e=>{let t=[...O];O.clear();for(let n of t)try{n(e)}catch{}},P=e=>{E||(E=!0,A(),D.clear(),k(),N(o(`closed`,a.ended)),j({reason:e}))},F=e=>{if(E)return;let t=e;if(t.type===`defaults`&&(C=t.defaults),t.type===`schema`&&(T+=1,w=t.schema),t.type===`message`||t.type===`edited`){let e={...t.message,envelope:t.message.envelope??null};t=t.type===`message`?{...t,message:e}:{type:`edited`,message:e}}if(t.type===`permissions`&&t.id===f.id&&(f={id:f.id,permissions:t.permissions,maxMessageBytes:t.maxMessageBytes}),t.type===`claim`){S+=1;let e=t.claimed&&t.mailbox!==!1;t={type:`claim`,claimed:t.claimed,owner:t.owner,mailbox:e},b=t.claimed,v=t.owner,x=e?u():null}for(let e of[...D])try{e(t)}catch{}},I=(e,t)=>{Promise.resolve(e.on(F)).catch(()=>{}),Promise.resolve(e.closed).then(e=>{t===d&&P(e.reason)},()=>{})},L=async(e,t)=>{let n=h(e,r);if(!n)return P(`unavailable`);let a=await n.join(i).catch(()=>void 0);if(E||t!==d)return;if(!a)return P(`unavailable`);if(`error`in a)return P(p(a.error));if(a.self.id!==f.id)return Promise.resolve(a.leave()).catch(()=>{}),P(`unavailable`);l=a,f=a.self,v=a.owner,b=a.claimed,x=a.mailbox,I(a,t);let o=await a.defaults().catch(()=>void 0);if(o&&!E&&t===d&&(C=o),a.schemas!==!0)return;let s=await Promise.resolve(a.schema()).catch(()=>void 0);s!==void 0&&!E&&t===d&&(w=s)};A=t.u((e,t)=>{let n=d;d=t,!(E||n===0||n===t)&&(N(o(`unavailable`,a.unavailable)),L(e.rooms,t))}),I(e,d);let R=async e=>{if(E)throw o(`closed`,a.ended);let t=()=>{},n=new Promise((e,n)=>{t=n});O.add(t);try{return await Promise.race([Promise.resolve(e(l)),n])}catch(e){throw s(e)?e:o(`unavailable`,a.unavailable)}finally{O.delete(t)}},z=async e=>{let t=await R(e);if(`error`in t)throw o(t.error,t.message)},B=async e=>{let t=await R(e);if(typeof t==`object`&&t&&`error`in t)throw o(t.error,t.message);return t};return{id:e.id,name:e.name,key:e.key,invite:i,get self(){return f},get owner(){return v},get claimed(){return b},get mailbox(){return x},defaults:()=>C,members:()=>R(e=>e.members()),schema:()=>w,send:async(e,t)=>{if(t===void 0)return z(t=>t.send(e));let n=g(t);return z(t=>y(t).send(e,n))},edit:async(e,t,n)=>{if(n===void 0)return z(n=>n.edit(e,t));let r=g(n);return z(n=>y(n).edit(e,t,r))},setSchema:async e=>{let t=_(e),n=T;await z(e=>y(e).setSchema(t)),T===n&&(w=t)},delete:(e,t)=>z(n=>n.delete(e,t)),backlog:(e,t)=>B(n=>n.backlog(e,t)),setDefault:(e,t)=>z(n=>n.setDefault(e,t)),limit:(e,t)=>z(n=>n.limit(e,t)),grant:(e,t)=>z(n=>n.grant(e,t)),revoke:(e,t)=>z(n=>n.revoke(e,t)),remove:e=>z(t=>t.remove(e)),block:e=>z(t=>t.block(e)),unblock:e=>z(t=>t.unblock(e)),claim:async e=>{let t=e?.description;if(t!==void 0&&typeof t!=`string`)throw o(`invalid`,a.badDescription);let n=m(e?.temporary);if(n===null)throw o(`invalid`,a.badTemporary);let r=e?.mailbox;if(r!==void 0&&typeof r!=`boolean`)throw o(`invalid`,a.malformed);let i={...t===void 0?{}:{description:t},...n===void 0?{}:{temporary:n},...r===void 0?{}:{mailbox:r}};return Object.keys(i).length===0?z(e=>e.claim()):z(e=>{if(n!==void 0&&e.temporaryClaims!==!0)throw o(`unavailable`,a.temporaryUnavailable);if(r===!1&&e.mailboxSwitch!==!0)throw o(`unavailable`,a.mailboxUnavailable);return e.claim(i)})},setMailbox:async e=>{if(typeof e!=`boolean`)throw o(`invalid`,a.malformed);let t=S;await z(t=>{if(t.mailboxSwitch!==!0)throw o(`unavailable`,a.mailboxUnavailable);return t.setMailbox(e)}),S===t&&(e?x===null&&(x=u()):x=null)},release:()=>z(e=>e.release()),usage:async()=>{let e=await B(e=>e.usage());return x=e,e},on:async e=>E?()=>{}:(D.add(e),()=>{D.delete(e)}),leave:async()=>{await Promise.resolve(l.leave()).catch(()=>{}),P(`left`)},closed:M}},S=async()=>{let e=await d();return e?e.available().catch(()=>!1):!1},C=async(e,t,n)=>{let r=await d();if(!r)throw o(`unavailable`,a.unavailable);let i=h(r,e);if(!i)throw o(`unavailable`,a.guestUnavailable);let s=await n(i).catch(f);if(`error`in s)throw o(s.error,s.message);if(t?.schema!==void 0&&s.schemas!==!0)throw await Promise.resolve(s.leave()).catch(()=>{}),o(`unavailable`,a.schemasUnavailable);return x(s,e)},w=async(e,t)=>{if(typeof e!=`string`||e.length===0||e.length>72)throw o(`invalid`,a.badName);let n=b(t),r=v(t);return C(n,r,t=>t.open(e,r))},T=async e=>{let t=b(e),n=v(e);return C(t,n,e=>e.create(n))},E=async(e,t)=>{let n=typeof e==`string`?e.indexOf(`.`):-1;if(n<=0||n===e.length-1)throw o(`invalid`,a.inviteNoKey);return C(b(t),void 0,n=>n.join(e,t))};exports.available=S,exports.create=T,exports.join=E,exports.open=w,Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return i}});
package/rooms.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { J as RoomClaimOptions, Q as RoomEvent, X as RoomDefaults, Y as RoomCreateOptions, Z as RoomEnd, at as RoomPermission, et as RoomJoinOptions, it as RoomOpenOptions, nt as RoomMember, ot as RoomPermissions, q as RoomBacklog, rt as RoomMessage, st as RoomsErrorCode, tt as RoomMailbox } from "./contract-CMQOic3K.js";
1
+ import { $ as RoomEvent, J as RoomClaimOptions, Q as RoomEnvelope, X as RoomDefaults, Y as RoomCreateOptions, Z as RoomEnd, at as RoomMessage, ct as RoomPermissions, dt as RoomsErrorCode, it as RoomMember, lt as RoomSchema, nt as RoomJson, ot as RoomOpenOptions, q as RoomBacklog, rt as RoomMailbox, st as RoomPermission, tt as RoomJoinOptions, ut as RoomType } from "./contract-DFycgFJK.js";
2
2
  declare namespace rooms_d_exports {
3
- export { RoomClaimOptions as ClaimOptions, RoomCreateOptions as CreateOptions, RoomJoinOptions as JoinOptions, RoomOpenOptions as OpenOptions, Room, RoomBacklog, RoomDefaults, RoomEnd, RoomEvent, RoomMailbox, RoomMember, RoomMessage, RoomPermission, RoomPermissions, RoomsError, RoomsErrorCode, available, create, join, open };
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
  }
5
5
  /** Thrown by every member of this namespace. Match on `code`, never on the message. */
6
6
  export type RoomsError = Error & {
@@ -33,14 +33,48 @@ export type Room = {
33
33
  readonly mailbox: RoomMailbox | null;
34
34
  defaults: () => RoomDefaults;
35
35
  members: () => Promise<RoomMember[]>;
36
- /** sealed before it leaves the browser. Rejects `too-large` past `self.maxMessageBytes` on the wire, never truncates. */
37
- send: (text: string) => Promise<void>;
36
+ /** the room's schema as the room last said, null for a room without one */
37
+ schema: () => RoomSchema | null;
38
38
  /**
39
- * replaces a stored message's text: one of your own, or any as the owner. On a room claimed under an
40
- * app's scope, from another app of the claim's account, it is refused `denied` (`rooms: only the app
41
- * that claimed the room can change it`), the account's own messages included, as `claim` says.
39
+ * `text` is sealed before it leaves the browser. Rejects `too-large` past `self.maxMessageBytes` on the
40
+ * wire, never truncates.
41
+ *
42
+ * In a room with a schema `envelope` is required: it goes in plain beside the sealed text, which may be
43
+ * empty, and the sealed text opens only under it. The app chooses what is sealed at each send: put in
44
+ * the envelope only what every member and FKN may read, and the rest in `text`. The lib writes it with
45
+ * `JSON.stringify` and refuses `invalid` (`rooms: the message does not fit the room's schema`), with
46
+ * nothing sent, one that is not a JSON object with a string `type` or is past 2,048 characters; the room
47
+ * refuses the same for an envelope that does not fit its type, or a send without one. The size counted
48
+ * is the envelope's text and the sealed text together, against `self.maxMessageBytes` and the type's
49
+ * `maxBytes`. The type's sender rule refuses `denied` (`rooms: only the owner sends this type`, `rooms:
50
+ * sending this needs an account`), its per-account limit `full` (`rooms: you have as many of these
51
+ * here as the room allows`), and the room's cap `storage` (`rooms: the mailbox is full`).
52
+ *
53
+ * Without a schema an envelope is refused `invalid` (`rooms: the room has no schema`). An fkn.app older
54
+ * than room schemas refuses one `unavailable` (`rooms: room schemas are not available`) with nothing
55
+ * sent; a send without one goes as before.
56
+ */
57
+ send: (text: string, envelope?: RoomEnvelope) => Promise<void>;
58
+ /**
59
+ * replaces a stored message's text: one of your own, or any as the owner. Checked exactly as a send is,
60
+ * `send` and the rate limits included; in a room with a schema `envelope` is required and names the
61
+ * message's own type, so a message stored before the room had a schema is deleted rather than edited.
62
+ * On a room claimed under an app's scope, from another app of the claim's account, it is refused
63
+ * `denied` (`rooms: only the app that claimed the room can change it`), the account's own messages
64
+ * included, as `claim` says.
65
+ */
66
+ edit: (seq: number, text: string, envelope?: RoomEnvelope) => Promise<void>;
67
+ /**
68
+ * replaces the room's schema with one of a higher `version`, from the next send on; everyone present
69
+ * hears a `schema` event. The same schema at the same `version` resolves and changes nothing, so set it
70
+ * on every open. A lower `version`, or another schema at the same one, is refused `invalid` (`rooms: the
71
+ * room holds a newer schema`), and one the room cannot take `invalid` (`rooms: the schema is not one a
72
+ * room can take`). From the owner only (`denied`, `rooms: not the room owner`), and on a room claimed
73
+ * under an app's scope only through the app that claimed it (`denied`, `rooms: only the app that
74
+ * claimed the room can change it`), as `claim` says. A schema is never removed. An fkn.app older than
75
+ * room schemas refuses it `unavailable` (`rooms: room schemas are not available`).
42
76
  */
43
- edit: (seq: number, text: string) => Promise<void>;
77
+ setSchema: (schema: RoomSchema) => Promise<void>;
44
78
  /**
45
79
  * drops stored messages: one of your own, or any range as the owner. On a room claimed under an app's
46
80
  * scope, from another app of the claim's account, it is refused `denied` (`rooms: only the app that
@@ -177,4 +211,4 @@ export declare const create: (options?: RoomCreateOptions) => Promise<Room>;
177
211
  /** `invite` is `room.invite`: a key and a room id joined by a dot. */
178
212
  export declare const join: (invite: string, options?: RoomJoinOptions) => Promise<Room>;
179
213
  //#endregion
180
- export { type RoomClaimOptions as ClaimOptions, type RoomCreateOptions as CreateOptions, type RoomJoinOptions as JoinOptions, type RoomOpenOptions as OpenOptions, type RoomBacklog, type RoomDefaults, type RoomEnd, type RoomEvent, type RoomMailbox, type RoomMember, type RoomMessage, type RoomPermission, type RoomPermissions, type RoomsErrorCode, rooms_d_exports as t };
214
+ export { type RoomClaimOptions as ClaimOptions, type RoomCreateOptions as CreateOptions, type RoomJoinOptions as JoinOptions, type RoomOpenOptions as OpenOptions, 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, type RoomsErrorCode, rooms_d_exports as t };