@thatopen/services 0.20.0 → 0.22.0

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.
@@ -83,6 +83,13 @@ export interface FlowDocInfo {
83
83
  docId: string;
84
84
  /** The visible model file's name, when one exists yet. */
85
85
  modelName?: string;
86
+ /**
87
+ * True when the folder exists but holds neither history, model nor
88
+ * suggestion queue — a document somebody connected and never synced (a
89
+ * plugin mid-first-publish, or an abandoned start). A legitimate state,
90
+ * listed rather than hidden; apps decide whether to show it dimmed.
91
+ */
92
+ empty?: boolean;
86
93
  }
87
94
  /** What `sync` needs: the change list plus whatever the writer knows. */
88
95
  export interface SyncInput {
@@ -107,6 +114,12 @@ export interface SyncInput {
107
114
  }
108
115
  /** What `suggest` needs. */
109
116
  export interface SuggestInput {
117
+ /**
118
+ * The suggestion's id, when the caller minted it up front — a payload
119
+ * (envelope `revitflow/op@2`) carries the opId INSIDE, so whoever builds
120
+ * one needs the id before this call. Minted here when absent.
121
+ */
122
+ opId?: string;
110
123
  title: string;
111
124
  /** add | set | remove | mixed. */
112
125
  verb: string;
@@ -202,3 +215,5 @@ export declare class FlowDoc {
202
215
  * once more than one application writes. Fills `ordinal`.
203
216
  */
204
217
  export declare function orderByGraph(versions: FlowVersion[]): FlowVersion[];
218
+ /** A random v4 guid, for version guids and suggestion opIds. */
219
+ export declare function mintGuid(): string;
@@ -1,23 +1,68 @@
1
1
  import { EngineServicesClient } from './client';
2
2
  import { FlowDoc, FlowSuggestion } from './history';
3
3
 
4
+ /**
5
+ * How a settings property says "this names something that EXISTS". Put it on
6
+ * the property as `x-existing` inside {@link RecipeManifest.settingsSchema}:
7
+ * the app resolves the candidates and renders a list — people pick, they
8
+ * never type the name of a thing that exists.
9
+ *
10
+ * Resolving the candidates is the APP's job today (reading `doc.model()` of
11
+ * the target, or the declared source file, takes the fragments toolkit, which
12
+ * the SDK does not carry). The kinds are stable so nothing changes for
13
+ * recipes when a shared reader lands in that toolkit.
14
+ */
15
+ export interface ExistingLookup {
16
+ /** What kind of existing thing: 'document' | 'family-type' | 'level' | 'layer' | 'workset'… */
17
+ of: string;
18
+ /** Where it exists: the target document, or the declared source. Default 'target'. */
19
+ from?: 'target' | 'source';
20
+ /**
21
+ * Narrows the candidates: attribute equals value, against the attribute
22
+ * names EXACTLY as the native application publishes them, no case
23
+ * normalization. Prefer the stable machine fields over display names —
24
+ * Revit's `Category` text is localized per install ("Armazón estructural"),
25
+ * so a column filter is `{ CategoryId: '-2001330' }`, never
26
+ * `{ Category: 'Columns' }`.
27
+ */
28
+ where?: Record<string, string>;
29
+ }
4
30
  /** What a recipe declares about itself. Shown in catalogs, checked by apps. */
5
31
  export interface RecipeManifest {
6
32
  /** Machine name, unique in a catalog: 'rhino-points-to-revit-columns'. */
7
33
  name: string;
34
+ /** The human name a card shows: 'Rhino points to Revit columns'. */
35
+ title?: string;
8
36
  /** The one sentence a non-programmer reads: what it converts into what. */
9
37
  description: string;
38
+ /** The long-form explanation an app renders, as markdown. */
39
+ doc?: string;
10
40
  /** The native application whose language it writes: 'revit', 'autocad'… */
11
41
  to: string;
12
42
  /** The input kinds it understands: 'rhino-model', 'platform-elements', 'points', 'csv'… */
13
43
  inputs: string[];
44
+ /**
45
+ * What the app should offer as the input picker, when the input is a thing
46
+ * of the project rather than inline data: another connected document, or a
47
+ * project file (then `extensions` narrows the listing). The picked value is
48
+ * what arrives as `input`, and what `x-existing: { from: 'source' }`
49
+ * lookups read.
50
+ */
51
+ source?: {
52
+ kind: 'document';
53
+ source?: string;
54
+ } | {
55
+ kind: 'project-file';
56
+ extensions?: string[];
57
+ };
14
58
  /** Where it runs by default. Browser unless it must run unattended. */
15
59
  runtime?: 'browser' | 'cloud';
16
60
  /**
17
61
  * JSON Schema for `settings`. Apps generate the settings form from it, so
18
62
  * anything that names an EXISTING thing (a target document, a family, a
19
- * level) must be an enum the app can fill — people pick, they never type
20
- * names of things that exist.
63
+ * level) carries `x-existing` ({@link ExistingLookup}) and renders as a
64
+ * list the app fills — people pick, they never type names of things that
65
+ * exist. Free text is only for what a person invents.
21
66
  */
22
67
  settingsSchema?: Record<string, unknown>;
23
68
  /**
@@ -35,6 +80,12 @@ export interface RecipeContext<Settings = Record<string, unknown>> {
35
80
  projectId: string;
36
81
  /** The document the suggestion is for. Read its timeline/model if needed. */
37
82
  targetDoc: FlowDoc;
83
+ /**
84
+ * The suggestion's id, minted BEFORE the run: the payload envelope
85
+ * (`revitflow/op@2`) carries the opId inside, so the builder needs it.
86
+ * When the run is only a plan, nothing is queued and the id is discarded.
87
+ */
88
+ opId: string;
38
89
  /** The declared input, already fetched by the caller (bytes, ids, rows…). */
39
90
  input: unknown;
40
91
  settings: Settings;
@@ -62,6 +113,22 @@ export interface RecipeRunOutcome {
62
113
  suggestion: FlowSuggestion;
63
114
  result: RecipeResult;
64
115
  }
116
+ /**
117
+ * What {@link Recipes.plan} returns: everything needed to queue EXACTLY what
118
+ * was planned, without running the recipe again — the payload already embeds
119
+ * this `opId`. Hand it to {@link Recipes.queue} when the person confirms.
120
+ */
121
+ export interface RecipePlan {
122
+ opId: string;
123
+ projectId: string;
124
+ target: {
125
+ source: string;
126
+ docId: string;
127
+ };
128
+ /** The head the plan was built against, for the suggestion's base. */
129
+ baseCommitGuid?: string;
130
+ result: RecipeResult;
131
+ }
65
132
  /**
66
133
  * The local recipe registry and runner. Reach it as `client.recipes`.
67
134
  */
@@ -79,20 +146,39 @@ export declare class Recipes {
79
146
  /** A registered recipe by name, or undefined. */
80
147
  get(name: string): RecipeManifest | undefined;
81
148
  /**
82
- * Runs a recipe and queues its suggestion on the target document. Safe to
83
- * call freely: nothing touches the native application until its owner
84
- * accepts the suggestion there.
149
+ * Runs a recipe WITHOUT queueing anything: the dry pass. Returns a
150
+ * {@link RecipePlan} — the result to show (title, tallies, targets) plus
151
+ * everything {@link queue} needs to queue EXACTLY this, payload and opId
152
+ * included, with no second run. Discard it and the plan never happened.
153
+ */
154
+ plan<S>(name: string, options: RecipeRunOptions<S>): Promise<RecipePlan>;
155
+ /**
156
+ * Queues exactly what {@link plan} planned: same opId, same payload, no
157
+ * second execution. The pair plan → confirm → queue is the UI flow; `run`
158
+ * is the one-shot shortcut.
85
159
  */
86
- run<S>(name: string, options: {
87
- projectId: string;
88
- /** The target document, as `client.history(projectId).docs()` lists it. */
89
- target: {
90
- source: string;
91
- docId: string;
92
- };
93
- input?: unknown;
94
- settings?: S;
160
+ queue(plan: RecipePlan, options: {
95
161
  author: string;
96
162
  userId?: string;
97
163
  }): Promise<RecipeRunOutcome>;
164
+ /**
165
+ * Runs a recipe and queues its suggestion on the target document. Safe to
166
+ * call freely: nothing touches the native application until its owner
167
+ * accepts the suggestion there. Use {@link plan} first when the app wants
168
+ * to show the tallies before queueing.
169
+ */
170
+ run<S>(name: string, options: RecipeRunOptions<S>): Promise<RecipeRunOutcome>;
171
+ }
172
+ /** The options {@link Recipes.plan} and {@link Recipes.run} share. */
173
+ export interface RecipeRunOptions<S = Record<string, unknown>> {
174
+ projectId: string;
175
+ /** The target document, as `client.history(projectId).docs()` lists it. */
176
+ target: {
177
+ source: string;
178
+ docId: string;
179
+ };
180
+ input?: unknown;
181
+ settings?: S;
182
+ author: string;
183
+ userId?: string;
98
184
  }
package/dist/index.cjs.js CHANGED
@@ -1,3 +1,3 @@
1
- "use strict";var ns=Object.defineProperty;var we=n=>{throw TypeError(n)};var rs=(n,t,e)=>t in n?ns(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e;var v=(n,t,e)=>rs(n,typeof t!="symbol"?t+"":t,e),Bt=(n,t,e)=>t.has(n)||we("Cannot "+e);var l=(n,t,e)=>(Bt(n,t,"read from private field"),e?e.call(n):t.get(n)),_=(n,t,e)=>t.has(n)?we("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(n):t.set(n,e),b=(n,t,e,s)=>(Bt(n,t,"write to private field"),s?s.call(n,e):t.set(n,e),e),a=(n,t,e)=>(Bt(n,t,"access private method"),e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const P=Object.create(null);P.open="0";P.close="1";P.ping="2";P.pong="3";P.message="4";P.upgrade="5";P.noop="6";const bt=Object.create(null);Object.keys(P).forEach(n=>{bt[P[n]]=n});const jt={type:"error",data:"parser error"},$e=typeof Blob=="function"||typeof Blob<"u"&&Object.prototype.toString.call(Blob)==="[object BlobConstructor]",Re=typeof ArrayBuffer=="function",Ce=n=>typeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(n):n&&n.buffer instanceof ArrayBuffer,he=({type:n,data:t},e,s)=>$e&&t instanceof Blob?e?s(t):_e(t,s):Re&&(t instanceof ArrayBuffer||Ce(t))?e?s(t):_e(new Blob([t]),s):s(P[n]+(t||"")),_e=(n,t)=>{const e=new FileReader;return e.onload=function(){const s=e.result.split(",")[1];t("b"+(s||""))},e.readAsDataURL(n)};function be(n){return n instanceof Uint8Array?n:n instanceof ArrayBuffer?new Uint8Array(n):new Uint8Array(n.buffer,n.byteOffset,n.byteLength)}let Lt;function is(n,t){if($e&&n.data instanceof Blob)return n.data.arrayBuffer().then(be).then(t);if(Re&&(n.data instanceof ArrayBuffer||Ce(n.data)))return t(be(n.data));he(n,!1,e=>{Lt||(Lt=new TextEncoder),t(Lt.encode(e))})}const Ee="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",ot=typeof Uint8Array>"u"?[]:new Uint8Array(256);for(let n=0;n<Ee.length;n++)ot[Ee.charCodeAt(n)]=n;const os=n=>{let t=n.length*.75,e=n.length,s,r=0,i,o,h,u;n[n.length-1]==="="&&(t--,n[n.length-2]==="="&&t--);const f=new ArrayBuffer(t),y=new Uint8Array(f);for(s=0;s<e;s+=4)i=ot[n.charCodeAt(s)],o=ot[n.charCodeAt(s+1)],h=ot[n.charCodeAt(s+2)],u=ot[n.charCodeAt(s+3)],y[r++]=i<<2|o>>4,y[r++]=(o&15)<<4|h>>2,y[r++]=(h&3)<<6|u&63;return f},as=typeof ArrayBuffer=="function",le=(n,t)=>{if(typeof n!="string")return{type:"message",data:Ne(n,t)};const e=n.charAt(0);return e==="b"?{type:"message",data:cs(n.substring(1),t)}:bt[e]?n.length>1?{type:bt[e],data:n.substring(1)}:{type:bt[e]}:jt},cs=(n,t)=>{if(as){const e=os(n);return Ne(e,t)}else return{base64:!0,data:n}},Ne=(n,t)=>{switch(t){case"blob":return n instanceof Blob?n:new Blob([n]);case"arraybuffer":default:return n instanceof ArrayBuffer?n:n.buffer}},Pe="",hs=(n,t)=>{const e=n.length,s=new Array(e);let r=0;n.forEach((i,o)=>{he(i,!1,h=>{s[o]=h,++r===e&&t(s.join(Pe))})})},ls=(n,t)=>{const e=n.split(Pe),s=[];for(let r=0;r<e.length;r++){const i=le(e[r],t);if(s.push(i),i.type==="error")break}return s};function us(){return new TransformStream({transform(n,t){is(n,e=>{const s=e.length;let r;if(s<126)r=new Uint8Array(1),new DataView(r.buffer).setUint8(0,s);else if(s<65536){r=new Uint8Array(3);const i=new DataView(r.buffer);i.setUint8(0,126),i.setUint16(1,s)}else{r=new Uint8Array(9);const i=new DataView(r.buffer);i.setUint8(0,127),i.setBigUint64(1,BigInt(s))}n.data&&typeof n.data!="string"&&(r[0]|=128),t.enqueue(r),t.enqueue(e)})}})}let Ft;function gt(n){return n.reduce((t,e)=>t+e.length,0)}function wt(n,t){if(n[0].length===t)return n.shift();const e=new Uint8Array(t);let s=0;for(let r=0;r<t;r++)e[r]=n[0][s++],s===n[0].length&&(n.shift(),s=0);return n.length&&s<n[0].length&&(n[0]=n[0].slice(s)),e}function ds(n,t){Ft||(Ft=new TextDecoder);const e=[];let s=0,r=-1,i=!1;return new TransformStream({transform(o,h){for(e.push(o);;){if(s===0){if(gt(e)<1)break;const u=wt(e,1);i=(u[0]&128)===128,r=u[0]&127,r<126?s=3:r===126?s=1:s=2}else if(s===1){if(gt(e)<2)break;const u=wt(e,2);r=new DataView(u.buffer,u.byteOffset,u.length).getUint16(0),s=3}else if(s===2){if(gt(e)<8)break;const u=wt(e,8),f=new DataView(u.buffer,u.byteOffset,u.length),y=f.getUint32(0);if(y>Math.pow(2,21)-1){h.enqueue(jt);break}r=y*Math.pow(2,32)+f.getUint32(4),s=3}else{if(gt(e)<r)break;const u=wt(e,r);h.enqueue(le(i?u:Ft.decode(u),t)),s=0}if(r===0||r>n){h.enqueue(jt);break}}}})}const Be=4;function E(n){if(n)return fs(n)}function fs(n){for(var t in E.prototype)n[t]=E.prototype[t];return n}E.prototype.on=E.prototype.addEventListener=function(n,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+n]=this._callbacks["$"+n]||[]).push(t),this};E.prototype.once=function(n,t){function e(){this.off(n,e),t.apply(this,arguments)}return e.fn=t,this.on(n,e),this};E.prototype.off=E.prototype.removeListener=E.prototype.removeAllListeners=E.prototype.removeEventListener=function(n,t){if(this._callbacks=this._callbacks||{},arguments.length==0)return this._callbacks={},this;var e=this._callbacks["$"+n];if(!e)return this;if(arguments.length==1)return delete this._callbacks["$"+n],this;for(var s,r=0;r<e.length;r++)if(s=e[r],s===t||s.fn===t){e.splice(r,1);break}return e.length===0&&delete this._callbacks["$"+n],this};E.prototype.emit=function(n){this._callbacks=this._callbacks||{};for(var t=new Array(arguments.length-1),e=this._callbacks["$"+n],s=1;s<arguments.length;s++)t[s-1]=arguments[s];if(e){e=e.slice(0);for(var s=0,r=e.length;s<r;++s)e[s].apply(this,t)}return this};E.prototype.emitReserved=E.prototype.emit;E.prototype.listeners=function(n){return this._callbacks=this._callbacks||{},this._callbacks["$"+n]||[]};E.prototype.hasListeners=function(n){return!!this.listeners(n).length};const Ct=typeof Promise=="function"&&typeof Promise.resolve=="function"?t=>Promise.resolve().then(t):(t,e)=>e(t,0),O=typeof self<"u"?self:typeof window<"u"?window:Function("return this")(),ps="arraybuffer";function Le(n,...t){return t.reduce((e,s)=>(n.hasOwnProperty(s)&&(e[s]=n[s]),e),{})}const ys=O.setTimeout,ms=O.clearTimeout;function Nt(n,t){t.useNativeTimers?(n.setTimeoutFn=ys.bind(O),n.clearTimeoutFn=ms.bind(O)):(n.setTimeoutFn=O.setTimeout.bind(O),n.clearTimeoutFn=O.clearTimeout.bind(O))}const gs=1.33;function ws(n){return typeof n=="string"?_s(n):Math.ceil((n.byteLength||n.size)*gs)}function _s(n){let t=0,e=0;for(let s=0,r=n.length;s<r;s++)t=n.charCodeAt(s),t<128?e+=1:t<2048?e+=2:t<55296||t>=57344?e+=3:(s++,e+=4);return e}function Fe(){return Date.now().toString(36).substring(3)+Math.random().toString(36).substring(2,5)}function bs(n){let t="";for(let e in n)n.hasOwnProperty(e)&&(t.length&&(t+="&"),t+=encodeURIComponent(e)+"="+encodeURIComponent(n[e]));return t}function Es(n){let t={},e=n.split("&");for(let s=0,r=e.length;s<r;s++){let i=e[s].split("=");t[decodeURIComponent(i[0])]=decodeURIComponent(i[1])}return t}class Ts extends Error{constructor(t,e,s){super(t),this.description=e,this.context=s,this.type="TransportError"}}class ue extends E{constructor(t){super(),this.writable=!1,Nt(this,t),this.opts=t,this.query=t.query,this.socket=t.socket,this.supportsBinary=!t.forceBase64}onError(t,e,s){return super.emitReserved("error",new Ts(t,e,s)),this}open(){return this.readyState="opening",this.doOpen(),this}close(){return(this.readyState==="opening"||this.readyState==="open")&&(this.doClose(),this.onClose()),this}send(t){this.readyState==="open"&&this.write(t)}onOpen(){this.readyState="open",this.writable=!0,super.emitReserved("open")}onData(t){const e=le(t,this.socket.binaryType);this.onPacket(e)}onPacket(t){super.emitReserved("packet",t)}onClose(t){this.readyState="closed",super.emitReserved("close",t)}pause(t){}createUri(t,e={}){return t+"://"+this._hostname()+this._port()+this.opts.path+this._query(e)}_hostname(){const t=this.opts.hostname;return t.indexOf(":")===-1?t:"["+t+"]"}_port(){return this.opts.port&&(this.opts.secure&&Number(this.opts.port)!==443||!this.opts.secure&&Number(this.opts.port)!==80)?":"+this.opts.port:""}_query(t){const e=bs(t);return e.length?"?"+e:""}}class vs extends ue{constructor(){super(...arguments),this._polling=!1}get name(){return"polling"}doOpen(){this._poll()}pause(t){this.readyState="pausing";const e=()=>{this.readyState="paused",t()};if(this._polling||!this.writable){let s=0;this._polling&&(s++,this.once("pollComplete",function(){--s||e()})),this.writable||(s++,this.once("drain",function(){--s||e()}))}else e()}_poll(){this._polling=!0,this.doPoll(),this.emitReserved("poll")}onData(t){const e=s=>{if(this.readyState==="opening"&&s.type==="open"&&this.onOpen(),s.type==="close")return this.onClose({description:"transport closed by the server"}),!1;this.onPacket(s)};ls(t,this.socket.binaryType).forEach(e),this.readyState!=="closed"&&(this._polling=!1,this.emitReserved("pollComplete"),this.readyState==="open"&&this._poll())}doClose(){const t=()=>{this.write([{type:"close"}])};this.readyState==="open"?t():this.once("open",t)}write(t){this.writable=!1,hs(t,e=>{this.doWrite(e,()=>{this.writable=!0,this.emitReserved("drain")})})}uri(){const t=this.opts.secure?"https":"http",e=this.query||{};return this.opts.timestampRequests!==!1&&(e[this.opts.timestampParam]=Fe()),!this.supportsBinary&&!e.sid&&(e.b64=1),this.createUri(t,e)}}let qe=!1;try{qe=typeof XMLHttpRequest<"u"&&"withCredentials"in new XMLHttpRequest}catch{}const Ss=qe;function ks(){}class As extends vs{constructor(t){if(super(t),typeof location<"u"){const e=location.protocol==="https:";let s=location.port;s||(s=e?"443":"80"),this.xd=typeof location<"u"&&t.hostname!==location.hostname||s!==t.port}}doWrite(t,e){const s=this.request({method:"POST",data:t});s.on("success",e),s.on("error",(r,i)=>{this.onError("xhr post error",r,i)})}doPoll(){const t=this.request();t.on("data",this.onData.bind(this)),t.on("error",(e,s)=>{this.onError("xhr poll error",e,s)}),this.pollXhr=t}}class N extends E{constructor(t,e,s){super(),this.createRequest=t,Nt(this,s),this._opts=s,this._method=s.method||"GET",this._uri=e,this._data=s.data!==void 0?s.data:null,this._create()}_create(){var t;const e=Le(this._opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");e.xdomain=!!this._opts.xd;const s=this._xhr=this.createRequest(e);try{s.open(this._method,this._uri,!0);try{if(this._opts.extraHeaders){s.setDisableHeaderCheck&&s.setDisableHeaderCheck(!0);for(let r in this._opts.extraHeaders)this._opts.extraHeaders.hasOwnProperty(r)&&s.setRequestHeader(r,this._opts.extraHeaders[r])}}catch{}if(this._method==="POST")try{s.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch{}try{s.setRequestHeader("Accept","*/*")}catch{}(t=this._opts.cookieJar)===null||t===void 0||t.addCookies(s),"withCredentials"in s&&(s.withCredentials=this._opts.withCredentials),this._opts.requestTimeout&&(s.timeout=this._opts.requestTimeout),s.onreadystatechange=()=>{var r;s.readyState===3&&((r=this._opts.cookieJar)===null||r===void 0||r.parseCookies(s.getResponseHeader("set-cookie"))),s.readyState===4&&(s.status===200||s.status===1223?this._onLoad():this.setTimeoutFn(()=>{this._onError(typeof s.status=="number"?s.status:0)},0))},s.send(this._data)}catch(r){this.setTimeoutFn(()=>{this._onError(r)},0);return}typeof document<"u"&&(this._index=N.requestsCount++,N.requests[this._index]=this)}_onError(t){this.emitReserved("error",t,this._xhr),this._cleanup(!0)}_cleanup(t){if(!(typeof this._xhr>"u"||this._xhr===null)){if(this._xhr.onreadystatechange=ks,t)try{this._xhr.abort()}catch{}typeof document<"u"&&delete N.requests[this._index],this._xhr=null}}_onLoad(){const t=this._xhr.responseText;t!==null&&(this.emitReserved("data",t),this.emitReserved("success"),this._cleanup())}abort(){this._cleanup()}}N.requestsCount=0;N.requests={};if(typeof document<"u"){if(typeof attachEvent=="function")attachEvent("onunload",Te);else if(typeof addEventListener=="function"){const n="onpagehide"in O?"pagehide":"unload";addEventListener(n,Te,!1)}}function Te(){for(let n in N.requests)N.requests.hasOwnProperty(n)&&N.requests[n].abort()}const Os=function(){const n=Ue({xdomain:!1});return n&&n.responseType!==null}();class Is extends As{constructor(t){super(t);const e=t&&t.forceBase64;this.supportsBinary=Os&&!e}request(t={}){return Object.assign(t,{xd:this.xd},this.opts),new N(Ue,this.uri(),t)}}function Ue(n){const t=n.xdomain;try{if(typeof XMLHttpRequest<"u"&&(!t||Ss))return new XMLHttpRequest}catch{}if(!t)try{return new O[["Active"].concat("Object").join("X")]("Microsoft.XMLHTTP")}catch{}}const De=typeof navigator<"u"&&typeof navigator.product=="string"&&navigator.product.toLowerCase()==="reactnative";class xs extends ue{get name(){return"websocket"}doOpen(){const t=this.uri(),e=this.opts.protocols,s=De?{}:Le(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(s.headers=this.opts.extraHeaders);try{this.ws=this.createSocket(t,e,s)}catch(r){return this.emitReserved("error",r)}this.ws.binaryType=this.socket.binaryType,this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{this.opts.autoUnref&&this.ws._socket.unref(),this.onOpen()},this.ws.onclose=t=>this.onClose({description:"websocket connection closed",context:t}),this.ws.onmessage=t=>this.onData(t.data),this.ws.onerror=t=>this.onError("websocket error",t)}write(t){this.writable=!1;for(let e=0;e<t.length;e++){const s=t[e],r=e===t.length-1;he(s,this.supportsBinary,i=>{try{this.doWrite(s,i)}catch{}r&&Ct(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){typeof this.ws<"u"&&(this.ws.onerror=()=>{},this.ws.close(),this.ws=null)}uri(){const t=this.opts.secure?"wss":"ws",e=this.query||{};return this.opts.timestampRequests&&(e[this.opts.timestampParam]=Fe()),this.supportsBinary||(e.b64=1),this.createUri(t,e)}}const qt=O.WebSocket||O.MozWebSocket;class $s extends xs{createSocket(t,e,s){return De?new qt(t,e,s):e?new qt(t,e):new qt(t)}doWrite(t,e){this.ws.send(e)}}class Rs extends ue{get name(){return"webtransport"}doOpen(){try{this._transport=new WebTransport(this.createUri("https"),this.opts.transportOptions[this.name])}catch(t){return this.emitReserved("error",t)}this._transport.closed.then(()=>{this.onClose()}).catch(t=>{this.onError("webtransport error",t)}),this._transport.ready.then(()=>{this._transport.createBidirectionalStream().then(t=>{const e=ds(Number.MAX_SAFE_INTEGER,this.socket.binaryType),s=t.readable.pipeThrough(e).getReader(),r=us();r.readable.pipeTo(t.writable),this._writer=r.writable.getWriter();const i=()=>{s.read().then(({done:h,value:u})=>{h||(this.onPacket(u),i())}).catch(h=>{})};i();const o={type:"open"};this.query.sid&&(o.data=`{"sid":"${this.query.sid}"}`),this._writer.write(o).then(()=>this.onOpen())})})}write(t){this.writable=!1;for(let e=0;e<t.length;e++){const s=t[e],r=e===t.length-1;this._writer.write(s).then(()=>{r&&Ct(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){var t;(t=this._transport)===null||t===void 0||t.close()}}const Cs={websocket:$s,webtransport:Rs,polling:Is},Ns=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,Ps=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];function Ht(n){if(n.length>8e3)throw"URI too long";const t=n,e=n.indexOf("["),s=n.indexOf("]");e!=-1&&s!=-1&&(n=n.substring(0,e)+n.substring(e,s).replace(/:/g,";")+n.substring(s,n.length));let r=Ns.exec(n||""),i={},o=14;for(;o--;)i[Ps[o]]=r[o]||"";return e!=-1&&s!=-1&&(i.source=t,i.host=i.host.substring(1,i.host.length-1).replace(/;/g,":"),i.authority=i.authority.replace("[","").replace("]","").replace(/;/g,":"),i.ipv6uri=!0),i.pathNames=Bs(i,i.path),i.queryKey=Ls(i,i.query),i}function Bs(n,t){const e=/\/{2,9}/g,s=t.replace(e,"/").split("/");return(t.slice(0,1)=="/"||t.length===0)&&s.splice(0,1),t.slice(-1)=="/"&&s.splice(s.length-1,1),s}function Ls(n,t){const e={};return t.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function(s,r,i){r&&(e[r]=i)}),e}const Gt=typeof addEventListener=="function"&&typeof removeEventListener=="function",Et=[];Gt&&addEventListener("offline",()=>{Et.forEach(n=>n())},!1);class V extends E{constructor(t,e){if(super(),this.binaryType=ps,this.writeBuffer=[],this._prevBufferLen=0,this._pingInterval=-1,this._pingTimeout=-1,this._maxPayload=-1,this._pingTimeoutTime=1/0,t&&typeof t=="object"&&(e=t,t=null),t){const s=Ht(t);e.hostname=s.host,e.secure=s.protocol==="https"||s.protocol==="wss",e.port=s.port,s.query&&(e.query=s.query)}else e.host&&(e.hostname=Ht(e.host).host);Nt(this,e),this.secure=e.secure!=null?e.secure:typeof location<"u"&&location.protocol==="https:",e.hostname&&!e.port&&(e.port=this.secure?"443":"80"),this.hostname=e.hostname||(typeof location<"u"?location.hostname:"localhost"),this.port=e.port||(typeof location<"u"&&location.port?location.port:this.secure?"443":"80"),this.transports=[],this._transportsByName={},e.transports.forEach(s=>{const r=s.prototype.name;this.transports.push(r),this._transportsByName[r]=s}),this.opts=Object.assign({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},e),this.opts.path=this.opts.path.replace(/\/$/,"")+(this.opts.addTrailingSlash?"/":""),typeof this.opts.query=="string"&&(this.opts.query=Es(this.opts.query)),Gt&&(this.opts.closeOnBeforeunload&&(this._beforeunloadEventListener=()=>{this.transport&&(this.transport.removeAllListeners(),this.transport.close())},addEventListener("beforeunload",this._beforeunloadEventListener,!1)),this.hostname!=="localhost"&&(this._offlineEventListener=()=>{this._onClose("transport close",{description:"network connection lost"})},Et.push(this._offlineEventListener))),this.opts.withCredentials&&(this._cookieJar=void 0),this._open()}createTransport(t){const e=Object.assign({},this.opts.query);e.EIO=Be,e.transport=t,this.id&&(e.sid=this.id);const s=Object.assign({},this.opts,{query:e,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[t]);return new this._transportsByName[t](s)}_open(){if(this.transports.length===0){this.setTimeoutFn(()=>{this.emitReserved("error","No transports available")},0);return}const t=this.opts.rememberUpgrade&&V.priorWebsocketSuccess&&this.transports.indexOf("websocket")!==-1?"websocket":this.transports[0];this.readyState="opening";const e=this.createTransport(t);e.open(),this.setTransport(e)}setTransport(t){this.transport&&this.transport.removeAllListeners(),this.transport=t,t.on("drain",this._onDrain.bind(this)).on("packet",this._onPacket.bind(this)).on("error",this._onError.bind(this)).on("close",e=>this._onClose("transport close",e))}onOpen(){this.readyState="open",V.priorWebsocketSuccess=this.transport.name==="websocket",this.emitReserved("open"),this.flush()}_onPacket(t){if(this.readyState==="opening"||this.readyState==="open"||this.readyState==="closing")switch(this.emitReserved("packet",t),this.emitReserved("heartbeat"),t.type){case"open":this.onHandshake(JSON.parse(t.data));break;case"ping":this._sendPacket("pong"),this.emitReserved("ping"),this.emitReserved("pong"),this._resetPingTimeout();break;case"error":const e=new Error("server error");e.code=t.data,this._onError(e);break;case"message":this.emitReserved("data",t.data),this.emitReserved("message",t.data);break}}onHandshake(t){this.emitReserved("handshake",t),this.id=t.sid,this.transport.query.sid=t.sid,this._pingInterval=t.pingInterval,this._pingTimeout=t.pingTimeout,this._maxPayload=t.maxPayload,this.onOpen(),this.readyState!=="closed"&&this._resetPingTimeout()}_resetPingTimeout(){this.clearTimeoutFn(this._pingTimeoutTimer);const t=this._pingInterval+this._pingTimeout;this._pingTimeoutTime=Date.now()+t,this._pingTimeoutTimer=this.setTimeoutFn(()=>{this._onClose("ping timeout")},t),this.opts.autoUnref&&this._pingTimeoutTimer.unref()}_onDrain(){this.writeBuffer.splice(0,this._prevBufferLen),this._prevBufferLen=0,this.writeBuffer.length===0?this.emitReserved("drain"):this.flush()}flush(){if(this.readyState!=="closed"&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){const t=this._getWritablePackets();this.transport.send(t),this._prevBufferLen=t.length,this.emitReserved("flush")}}_getWritablePackets(){if(!(this._maxPayload&&this.transport.name==="polling"&&this.writeBuffer.length>1))return this.writeBuffer;let e=1;for(let s=0;s<this.writeBuffer.length;s++){const r=this.writeBuffer[s].data;if(r&&(e+=ws(r)),s>0&&e>this._maxPayload)return this.writeBuffer.slice(0,s);e+=2}return this.writeBuffer}_hasPingExpired(){if(!this._pingTimeoutTime)return!0;const t=Date.now()>this._pingTimeoutTime;return t&&(this._pingTimeoutTime=0,Ct(()=>{this._onClose("ping timeout")},this.setTimeoutFn)),t}write(t,e,s){return this._sendPacket("message",t,e,s),this}send(t,e,s){return this._sendPacket("message",t,e,s),this}_sendPacket(t,e,s,r){if(typeof e=="function"&&(r=e,e=void 0),typeof s=="function"&&(r=s,s=null),this.readyState==="closing"||this.readyState==="closed")return;s=s||{},s.compress=s.compress!==!1;const i={type:t,data:e,options:s};this.emitReserved("packetCreate",i),this.writeBuffer.push(i),r&&this.once("flush",r),this.flush()}close(){const t=()=>{this._onClose("forced close"),this.transport.close()},e=()=>{this.off("upgrade",e),this.off("upgradeError",e),t()},s=()=>{this.once("upgrade",e),this.once("upgradeError",e)};return(this.readyState==="opening"||this.readyState==="open")&&(this.readyState="closing",this.writeBuffer.length?this.once("drain",()=>{this.upgrading?s():t()}):this.upgrading?s():t()),this}_onError(t){if(V.priorWebsocketSuccess=!1,this.opts.tryAllTransports&&this.transports.length>1&&this.readyState==="opening")return this.transports.shift(),this._open();this.emitReserved("error",t),this._onClose("transport error",t)}_onClose(t,e){if(this.readyState==="opening"||this.readyState==="open"||this.readyState==="closing"){if(this.clearTimeoutFn(this._pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),Gt&&(this._beforeunloadEventListener&&removeEventListener("beforeunload",this._beforeunloadEventListener,!1),this._offlineEventListener)){const s=Et.indexOf(this._offlineEventListener);s!==-1&&Et.splice(s,1)}this.readyState="closed",this.id=null,this.emitReserved("close",t,e),this.writeBuffer=[],this._prevBufferLen=0}}}V.protocol=Be;class Fs extends V{constructor(){super(...arguments),this._upgrades=[]}onOpen(){if(super.onOpen(),this.readyState==="open"&&this.opts.upgrade)for(let t=0;t<this._upgrades.length;t++)this._probe(this._upgrades[t])}_probe(t){let e=this.createTransport(t),s=!1;V.priorWebsocketSuccess=!1;const r=()=>{s||(e.send([{type:"ping",data:"probe"}]),e.once("packet",w=>{if(!s)if(w.type==="pong"&&w.data==="probe"){if(this.upgrading=!0,this.emitReserved("upgrading",e),!e)return;V.priorWebsocketSuccess=e.name==="websocket",this.transport.pause(()=>{s||this.readyState!=="closed"&&(y(),this.setTransport(e),e.send([{type:"upgrade"}]),this.emitReserved("upgrade",e),e=null,this.upgrading=!1,this.flush())})}else{const R=new Error("probe error");R.transport=e.name,this.emitReserved("upgradeError",R)}}))};function i(){s||(s=!0,y(),e.close(),e=null)}const o=w=>{const R=new Error("probe error: "+w);R.transport=e.name,i(),this.emitReserved("upgradeError",R)};function h(){o("transport closed")}function u(){o("socket closed")}function f(w){e&&w.name!==e.name&&i()}const y=()=>{e.removeListener("open",r),e.removeListener("error",o),e.removeListener("close",h),this.off("close",u),this.off("upgrading",f)};e.once("open",r),e.once("error",o),e.once("close",h),this.once("close",u),this.once("upgrading",f),this._upgrades.indexOf("webtransport")!==-1&&t!=="webtransport"?this.setTimeoutFn(()=>{s||e.open()},200):e.open()}onHandshake(t){this._upgrades=this._filterUpgrades(t.upgrades),super.onHandshake(t)}_filterUpgrades(t){const e=[];for(let s=0;s<t.length;s++)~this.transports.indexOf(t[s])&&e.push(t[s]);return e}}let qs=class extends Fs{constructor(t,e={}){const s=typeof t=="object",r=s?{...t}:{...e};(!r.transports||r.transports&&typeof r.transports[0]=="string")&&(r.transports=(r.transports||["polling","websocket","webtransport"]).map(i=>Cs[i]).filter(i=>!!i)),super(s?r:t,r)}};function Us(n,t="",e){let s=n;e=e||typeof location<"u"&&location,n==null&&(n=e.protocol+"//"+e.host),typeof n=="string"&&(n.charAt(0)==="/"&&(n.charAt(1)==="/"?n=e.protocol+n:n=e.host+n),/^(https?|wss?):\/\//.test(n)||(typeof e<"u"?n=e.protocol+"//"+n:n="https://"+n),s=Ht(n)),s.port||(/^(http|ws)$/.test(s.protocol)?s.port="80":/^(http|ws)s$/.test(s.protocol)&&(s.port="443")),s.path=s.path||"/";const i=s.host.indexOf(":")!==-1?"["+s.host+"]":s.host;return s.id=s.protocol+"://"+i+":"+s.port+t,s.href=s.protocol+"://"+i+(e&&e.port===s.port?"":":"+s.port),s}const Ds=typeof ArrayBuffer=="function",Ms=n=>typeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(n):n.buffer instanceof ArrayBuffer,Me=Object.prototype.toString,js=typeof Blob=="function"||typeof Blob<"u"&&Me.call(Blob)==="[object BlobConstructor]",Hs=typeof File=="function"||typeof File<"u"&&Me.call(File)==="[object FileConstructor]";function de(n){return Ds&&(n instanceof ArrayBuffer||Ms(n))||js&&n instanceof Blob||Hs&&n instanceof File}function Tt(n,t){if(!n||typeof n!="object")return!1;if(Array.isArray(n)){for(let e=0,s=n.length;e<s;e++)if(Tt(n[e]))return!0;return!1}if(de(n))return!0;if(n.toJSON&&typeof n.toJSON=="function"&&arguments.length===1)return Tt(n.toJSON(),!0);for(const e in n)if(Object.prototype.hasOwnProperty.call(n,e)&&Tt(n[e]))return!0;return!1}function Gs(n){const t=[],e=n.data,s=n;return s.data=Vt(e,t),s.attachments=t.length,{packet:s,buffers:t}}function Vt(n,t){if(!n)return n;if(de(n)){const e={_placeholder:!0,num:t.length};return t.push(n),e}else if(Array.isArray(n)){const e=new Array(n.length);for(let s=0;s<n.length;s++)e[s]=Vt(n[s],t);return e}else if(typeof n=="object"&&!(n instanceof Date)){const e={};for(const s in n)Object.prototype.hasOwnProperty.call(n,s)&&(e[s]=Vt(n[s],t));return e}return n}function Vs(n,t){return n.data=Jt(n.data,t),delete n.attachments,n}function Jt(n,t){if(!n)return n;if(n&&n._placeholder===!0){if(typeof n.num=="number"&&n.num>=0&&n.num<t.length)return t[n.num];throw new Error("illegal attachments")}else if(Array.isArray(n))for(let e=0;e<n.length;e++)n[e]=Jt(n[e],t);else if(typeof n=="object")for(const e in n)Object.prototype.hasOwnProperty.call(n,e)&&(n[e]=Jt(n[e],t));return n}const Js=["connect","connect_error","disconnect","disconnecting","newListener","removeListener"];var g;(function(n){n[n.CONNECT=0]="CONNECT",n[n.DISCONNECT=1]="DISCONNECT",n[n.EVENT=2]="EVENT",n[n.ACK=3]="ACK",n[n.CONNECT_ERROR=4]="CONNECT_ERROR",n[n.BINARY_EVENT=5]="BINARY_EVENT",n[n.BINARY_ACK=6]="BINARY_ACK"})(g||(g={}));class Ys{constructor(t){this.replacer=t}encode(t){return(t.type===g.EVENT||t.type===g.ACK)&&Tt(t)?this.encodeAsBinary({type:t.type===g.EVENT?g.BINARY_EVENT:g.BINARY_ACK,nsp:t.nsp,data:t.data,id:t.id}):[this.encodeAsString(t)]}encodeAsString(t){let e=""+t.type;return(t.type===g.BINARY_EVENT||t.type===g.BINARY_ACK)&&(e+=t.attachments+"-"),t.nsp&&t.nsp!=="/"&&(e+=t.nsp+","),t.id!=null&&(e+=t.id),t.data!=null&&(e+=JSON.stringify(t.data,this.replacer)),e}encodeAsBinary(t){const e=Gs(t),s=this.encodeAsString(e.packet),r=e.buffers;return r.unshift(s),r}}class fe extends E{constructor(t){super(),this.opts=Object.assign({reviver:void 0,maxAttachments:10},typeof t=="function"?{reviver:t}:t)}add(t){let e;if(typeof t=="string"){if(this.reconstructor)throw new Error("got plaintext data when reconstructing a packet");e=this.decodeString(t);const s=e.type===g.BINARY_EVENT;s||e.type===g.BINARY_ACK?(e.type=s?g.EVENT:g.ACK,this.reconstructor=new Ws(e),e.attachments===0&&super.emitReserved("decoded",e)):super.emitReserved("decoded",e)}else if(de(t)||t.base64)if(this.reconstructor)e=this.reconstructor.takeBinaryData(t),e&&(this.reconstructor=null,super.emitReserved("decoded",e));else throw new Error("got binary data when not reconstructing a packet");else throw new Error("Unknown type: "+t)}decodeString(t){let e=0;const s={type:Number(t.charAt(0))};if(g[s.type]===void 0)throw new Error("unknown packet type "+s.type);if(s.type===g.BINARY_EVENT||s.type===g.BINARY_ACK){const i=e+1;for(;t.charAt(++e)!=="-"&&e!=t.length;);const o=t.substring(i,e);if(o!=Number(o)||t.charAt(e)!=="-")throw new Error("Illegal attachments");const h=Number(o);if(!Xs(h)||h<0)throw new Error("Illegal attachments");if(h>this.opts.maxAttachments)throw new Error("too many attachments");s.attachments=h}if(t.charAt(e+1)==="/"){const i=e+1;for(;++e&&!(t.charAt(e)===","||e===t.length););s.nsp=t.substring(i,e)}else s.nsp="/";const r=t.charAt(e+1);if(r!==""&&Number(r)==r){const i=e+1;for(;++e;){const o=t.charAt(e);if(o==null||Number(o)!=o){--e;break}if(e===t.length)break}s.id=Number(t.substring(i,e+1))}if(t.charAt(++e)){const i=this.tryParse(t.substr(e));if(fe.isPayloadValid(s.type,i))s.data=i;else throw new Error("invalid payload")}return s}tryParse(t){try{return JSON.parse(t,this.opts.reviver)}catch{return!1}}static isPayloadValid(t,e){switch(t){case g.CONNECT:return ve(e);case g.DISCONNECT:return e===void 0;case g.CONNECT_ERROR:return typeof e=="string"||ve(e);case g.EVENT:case g.BINARY_EVENT:return Array.isArray(e)&&(typeof e[0]=="number"||typeof e[0]=="string"&&Js.indexOf(e[0])===-1);case g.ACK:case g.BINARY_ACK:return Array.isArray(e)}}destroy(){this.reconstructor&&(this.reconstructor.finishedReconstruction(),this.reconstructor=null)}}class Ws{constructor(t){this.packet=t,this.buffers=[],this.reconPack=t}takeBinaryData(t){if(this.buffers.push(t),this.buffers.length===this.reconPack.attachments){const e=Vs(this.reconPack,this.buffers);return this.finishedReconstruction(),e}return null}finishedReconstruction(){this.reconPack=null,this.buffers=[]}}const Xs=Number.isInteger||function(n){return typeof n=="number"&&isFinite(n)&&Math.floor(n)===n};function ve(n){return Object.prototype.toString.call(n)==="[object Object]"}const Ks=Object.freeze(Object.defineProperty({__proto__:null,Decoder:fe,Encoder:Ys,get PacketType(){return g}},Symbol.toStringTag,{value:"Module"}));function $(n,t,e){return n.on(t,e),function(){n.off(t,e)}}const zs=Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1});class je extends E{constructor(t,e,s){super(),this.connected=!1,this.recovered=!1,this.receiveBuffer=[],this.sendBuffer=[],this._queue=[],this._queueSeq=0,this.ids=0,this.acks={},this.flags={},this.io=t,this.nsp=e,s&&s.auth&&(this.auth=s.auth),this._opts=Object.assign({},s),this.io._autoConnect&&this.open()}get disconnected(){return!this.connected}subEvents(){if(this.subs)return;const t=this.io;this.subs=[$(t,"open",this.onopen.bind(this)),$(t,"packet",this.onpacket.bind(this)),$(t,"error",this.onerror.bind(this)),$(t,"close",this.onclose.bind(this))]}get active(){return!!this.subs}connect(){return this.connected?this:(this.subEvents(),this.io._reconnecting||this.io.open(),this.io._readyState==="open"&&this.onopen(),this)}open(){return this.connect()}send(...t){return t.unshift("message"),this.emit.apply(this,t),this}emit(t,...e){var s,r,i;if(zs.hasOwnProperty(t))throw new Error('"'+t.toString()+'" is a reserved event name');if(e.unshift(t),this._opts.retries&&!this.flags.fromQueue&&!this.flags.volatile)return this._addToQueue(e),this;const o={type:g.EVENT,data:e};if(o.options={},o.options.compress=this.flags.compress!==!1,typeof e[e.length-1]=="function"){const y=this.ids++,w=e.pop();this._registerAckCallback(y,w),o.id=y}const h=(r=(s=this.io.engine)===null||s===void 0?void 0:s.transport)===null||r===void 0?void 0:r.writable,u=this.connected&&!(!((i=this.io.engine)===null||i===void 0)&&i._hasPingExpired());return this.flags.volatile&&!h||(u?(this.notifyOutgoingListeners(o),this.packet(o)):this.sendBuffer.push(o)),this.flags={},this}_registerAckCallback(t,e){var s;const r=(s=this.flags.timeout)!==null&&s!==void 0?s:this._opts.ackTimeout;if(r===void 0){this.acks[t]=e;return}const i=this.io.setTimeoutFn(()=>{delete this.acks[t];for(let h=0;h<this.sendBuffer.length;h++)this.sendBuffer[h].id===t&&this.sendBuffer.splice(h,1);e.call(this,new Error("operation has timed out"))},r),o=(...h)=>{this.io.clearTimeoutFn(i),e.apply(this,h)};o.withError=!0,this.acks[t]=o}emitWithAck(t,...e){return new Promise((s,r)=>{const i=(o,h)=>o?r(o):s(h);i.withError=!0,e.push(i),this.emit(t,...e)})}_addToQueue(t){let e;typeof t[t.length-1]=="function"&&(e=t.pop());const s={id:this._queueSeq++,tryCount:0,pending:!1,args:t,flags:Object.assign({fromQueue:!0},this.flags)};t.push((r,...i)=>(this._queue[0],r!==null?s.tryCount>this._opts.retries&&(this._queue.shift(),e&&e(r)):(this._queue.shift(),e&&e(null,...i)),s.pending=!1,this._drainQueue())),this._queue.push(s),this._drainQueue()}_drainQueue(t=!1){if(!this.connected||this._queue.length===0)return;const e=this._queue[0];e.pending&&!t||(e.pending=!0,e.tryCount++,this.flags=e.flags,this.emit.apply(this,e.args))}packet(t){t.nsp=this.nsp,this.io._packet(t)}onopen(){typeof this.auth=="function"?this.auth(t=>{this._sendConnectPacket(t)}):this._sendConnectPacket(this.auth)}_sendConnectPacket(t){this.packet({type:g.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},t):t})}onerror(t){this.connected||this.emitReserved("connect_error",t)}onclose(t,e){this.connected=!1,delete this.id,this.emitReserved("disconnect",t,e),this._clearAcks()}_clearAcks(){Object.keys(this.acks).forEach(t=>{if(!this.sendBuffer.some(s=>String(s.id)===t)){const s=this.acks[t];delete this.acks[t],s.withError&&s.call(this,new Error("socket has been disconnected"))}})}onpacket(t){if(t.nsp===this.nsp)switch(t.type){case g.CONNECT:t.data&&t.data.sid?this.onconnect(t.data.sid,t.data.pid):this.emitReserved("connect_error",new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case g.EVENT:case g.BINARY_EVENT:this.onevent(t);break;case g.ACK:case g.BINARY_ACK:this.onack(t);break;case g.DISCONNECT:this.ondisconnect();break;case g.CONNECT_ERROR:this.destroy();const s=new Error(t.data.message);s.data=t.data.data,this.emitReserved("connect_error",s);break}}onevent(t){const e=t.data||[];t.id!=null&&e.push(this.ack(t.id)),this.connected?this.emitEvent(e):this.receiveBuffer.push(Object.freeze(e))}emitEvent(t){if(this._anyListeners&&this._anyListeners.length){const e=this._anyListeners.slice();for(const s of e)s.apply(this,t)}super.emit.apply(this,t),this._pid&&t.length&&typeof t[t.length-1]=="string"&&(this._lastOffset=t[t.length-1])}ack(t){const e=this;let s=!1;return function(...r){s||(s=!0,e.packet({type:g.ACK,id:t,data:r}))}}onack(t){const e=this.acks[t.id];typeof e=="function"&&(delete this.acks[t.id],e.withError&&t.data.unshift(null),e.apply(this,t.data))}onconnect(t,e){this.id=t,this.recovered=e&&this._pid===e,this._pid=e,this.connected=!0,this.emitBuffered(),this._drainQueue(!0),this.emitReserved("connect")}emitBuffered(){this.receiveBuffer.forEach(t=>this.emitEvent(t)),this.receiveBuffer=[],this.sendBuffer.forEach(t=>{this.notifyOutgoingListeners(t),this.packet(t)}),this.sendBuffer=[]}ondisconnect(){this.destroy(),this.onclose("io server disconnect")}destroy(){this.subs&&(this.subs.forEach(t=>t()),this.subs=void 0),this.io._destroy(this)}disconnect(){return this.connected&&this.packet({type:g.DISCONNECT}),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}close(){return this.disconnect()}compress(t){return this.flags.compress=t,this}get volatile(){return this.flags.volatile=!0,this}timeout(t){return this.flags.timeout=t,this}onAny(t){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(t),this}prependAny(t){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(t),this}offAny(t){if(!this._anyListeners)return this;if(t){const e=this._anyListeners;for(let s=0;s<e.length;s++)if(t===e[s])return e.splice(s,1),this}else this._anyListeners=[];return this}listenersAny(){return this._anyListeners||[]}onAnyOutgoing(t){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.push(t),this}prependAnyOutgoing(t){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.unshift(t),this}offAnyOutgoing(t){if(!this._anyOutgoingListeners)return this;if(t){const e=this._anyOutgoingListeners;for(let s=0;s<e.length;s++)if(t===e[s])return e.splice(s,1),this}else this._anyOutgoingListeners=[];return this}listenersAnyOutgoing(){return this._anyOutgoingListeners||[]}notifyOutgoingListeners(t){if(this._anyOutgoingListeners&&this._anyOutgoingListeners.length){const e=this._anyOutgoingListeners.slice();for(const s of e)s.apply(this,t.data)}}}function nt(n){n=n||{},this.ms=n.min||100,this.max=n.max||1e4,this.factor=n.factor||2,this.jitter=n.jitter>0&&n.jitter<=1?n.jitter:0,this.attempts=0}nt.prototype.duration=function(){var n=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var t=Math.random(),e=Math.floor(t*this.jitter*n);n=Math.floor(t*10)&1?n+e:n-e}return Math.min(n,this.max)|0};nt.prototype.reset=function(){this.attempts=0};nt.prototype.setMin=function(n){this.ms=n};nt.prototype.setMax=function(n){this.max=n};nt.prototype.setJitter=function(n){this.jitter=n};class Yt extends E{constructor(t,e){var s;super(),this.nsps={},this.subs=[],t&&typeof t=="object"&&(e=t,t=void 0),e=e||{},e.path=e.path||"/socket.io",this.opts=e,Nt(this,e),this.reconnection(e.reconnection!==!1),this.reconnectionAttempts(e.reconnectionAttempts||1/0),this.reconnectionDelay(e.reconnectionDelay||1e3),this.reconnectionDelayMax(e.reconnectionDelayMax||5e3),this.randomizationFactor((s=e.randomizationFactor)!==null&&s!==void 0?s:.5),this.backoff=new nt({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(e.timeout==null?2e4:e.timeout),this._readyState="closed",this.uri=t;const r=e.parser||Ks;this.encoder=new r.Encoder,this.decoder=new r.Decoder,this._autoConnect=e.autoConnect!==!1,this._autoConnect&&this.open()}reconnection(t){return arguments.length?(this._reconnection=!!t,t||(this.skipReconnect=!0),this):this._reconnection}reconnectionAttempts(t){return t===void 0?this._reconnectionAttempts:(this._reconnectionAttempts=t,this)}reconnectionDelay(t){var e;return t===void 0?this._reconnectionDelay:(this._reconnectionDelay=t,(e=this.backoff)===null||e===void 0||e.setMin(t),this)}randomizationFactor(t){var e;return t===void 0?this._randomizationFactor:(this._randomizationFactor=t,(e=this.backoff)===null||e===void 0||e.setJitter(t),this)}reconnectionDelayMax(t){var e;return t===void 0?this._reconnectionDelayMax:(this._reconnectionDelayMax=t,(e=this.backoff)===null||e===void 0||e.setMax(t),this)}timeout(t){return arguments.length?(this._timeout=t,this):this._timeout}maybeReconnectOnOpen(){!this._reconnecting&&this._reconnection&&this.backoff.attempts===0&&this.reconnect()}open(t){if(~this._readyState.indexOf("open"))return this;this.engine=new qs(this.uri,this.opts);const e=this.engine,s=this;this._readyState="opening",this.skipReconnect=!1;const r=$(e,"open",function(){s.onopen(),t&&t()}),i=h=>{this.cleanup(),this._readyState="closed",this.emitReserved("error",h),t?t(h):this.maybeReconnectOnOpen()},o=$(e,"error",i);if(this._timeout!==!1){const h=this._timeout,u=this.setTimeoutFn(()=>{r(),i(new Error("timeout")),e.close()},h);this.opts.autoUnref&&u.unref(),this.subs.push(()=>{this.clearTimeoutFn(u)})}return this.subs.push(r),this.subs.push(o),this}connect(t){return this.open(t)}onopen(){this.cleanup(),this._readyState="open",this.emitReserved("open");const t=this.engine;this.subs.push($(t,"ping",this.onping.bind(this)),$(t,"data",this.ondata.bind(this)),$(t,"error",this.onerror.bind(this)),$(t,"close",this.onclose.bind(this)),$(this.decoder,"decoded",this.ondecoded.bind(this)))}onping(){this.emitReserved("ping")}ondata(t){try{this.decoder.add(t)}catch(e){this.onclose("parse error",e)}}ondecoded(t){Ct(()=>{this.emitReserved("packet",t)},this.setTimeoutFn)}onerror(t){this.emitReserved("error",t)}socket(t,e){let s=this.nsps[t];return s?this._autoConnect&&!s.active&&s.connect():(s=new je(this,t,e),this.nsps[t]=s),s}_destroy(t){const e=Object.keys(this.nsps);for(const s of e)if(this.nsps[s].active)return;this._close()}_packet(t){const e=this.encoder.encode(t);for(let s=0;s<e.length;s++)this.engine.write(e[s],t.options)}cleanup(){this.subs.forEach(t=>t()),this.subs.length=0,this.decoder.destroy()}_close(){this.skipReconnect=!0,this._reconnecting=!1,this.onclose("forced close")}disconnect(){return this._close()}onclose(t,e){var s;this.cleanup(),(s=this.engine)===null||s===void 0||s.close(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",t,e),this._reconnection&&!this.skipReconnect&&this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;const t=this;if(this.backoff.attempts>=this._reconnectionAttempts)this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{const e=this.backoff.duration();this._reconnecting=!0;const s=this.setTimeoutFn(()=>{t.skipReconnect||(this.emitReserved("reconnect_attempt",t.backoff.attempts),!t.skipReconnect&&t.open(r=>{r?(t._reconnecting=!1,t.reconnect(),this.emitReserved("reconnect_error",r)):t.onreconnect()}))},e);this.opts.autoUnref&&s.unref(),this.subs.push(()=>{this.clearTimeoutFn(s)})}}onreconnect(){const t=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",t)}}const rt={};function ut(n,t){typeof n=="object"&&(t=n,n=void 0),t=t||{};const e=Us(n,t.path||"/socket.io"),s=e.source,r=e.id,i=e.path,o=rt[r]&&i in rt[r].nsps,h=t.forceNew||t["force new connection"]||t.multiplex===!1||o;let u;return h?u=new Yt(s,t):(rt[r]||(rt[r]=new Yt(s,t)),u=rt[r]),e.query&&!t.query&&(t.query=e.queryKey),u.socket(e.path,t)}Object.assign(ut,{Manager:Yt,Socket:je,io:ut,connect:ut});class Wt extends Error{constructor(t,e){super(`The document history advanced while this version was being prepared: expected head ${t}, found ${e??"none"}. Read the timeline again and rebuild on the new head.`),this.expectedGuid=t,this.actualGuid=e,this.name="StaleHistoryError"}}const Se="bimterop",ke="revitflow_history.json",it="revitflow_ops.json",Ae="revitflow/ops@1",Qs="revitflow_model.frag",Zs="revitflow_",_t=()=>`v-${Date.now()}`;function Y(n){return String(n._id??n.id??"")}var x,dt,Xt;class He{constructor(t,e){_(this,dt);_(this,x);this.client=t,this.projectId=e}async docs(){const t=await a(this,dt,Xt).call(this);if(!t)return[];const e=await this.client.listFolders({parentFolderId:t,projectId:this.projectId}),s=[];for(const r of e){const i=String(r.name??""),o=i.indexOf("-");o<=0||s.push({source:i.slice(0,o),docId:i.slice(o+1),modelName:void 0})}return s}doc(t,e){return new Ge(this.client,this,t,e)}async rootFolderId(t=!1){if(l(this,x))return l(this,x);const e=await a(this,dt,Xt).call(this);if(e)return e;if(!t)return;const s=await this.client.createFolder(Se,void 0,this.projectId);return b(this,x,Y(s)),l(this,x)}}x=new WeakMap,dt=new WeakSet,Xt=async function(){if(l(this,x))return l(this,x);const e=(await this.client.listFolders({projectId:this.projectId})).find(s=>String(s.name??"")===Se&&!s.parentId);return e&&b(this,x,Y(e)),l(this,x)};var L,p,at,ct,Kt,vt,St,zt,kt,ht,At,Qt,Ve;class Ge{constructor(t,e,s,r){_(this,p);_(this,L);this.client=t,this.project=e,this.source=s,this.docId=r}async timeline(){const t=await a(this,p,kt).call(this);return pe((t==null?void 0:t.commits)??[])}async latest(){const t=await this.timeline();return t.length?t[t.length-1]:null}async delta(t){if(!t.deltaId)throw new Error(`Version ${t.guid} carries no delta: it is a full export — read model() instead.`);return await(await this.client.downloadHiddenFile(t.deltaId)).blob()}async model(){const t=await a(this,p,St).call(this);if(!t)throw new Error(`Document ${this.source}-${this.docId} has no model file yet.`);return await(await this.client.downloadFile(t.id)).blob()}async sync(t){var h;const e=await a(this,p,ct).call(this,!0);let s=await a(this,p,kt).call(this)??{model:this.docId,commits:[]};const r=Oe(s.commits);if(t.expectedLatestGuid!==void 0&&(r==null?void 0:r.guid)!==t.expectedLatestGuid)throw new Wt(t.expectedLatestGuid,r==null?void 0:r.guid);const i={guid:Ie(),...r?{parents:[r.guid]}:{},author:t.author,source:t.source,timestamp:new Date().toISOString(),...t.message?{message:t.message}:{},...t.userId?{userId:t.userId}:{},...(h=t.appliedOps)!=null&&h.length?{appliedOps:t.appliedOps}:{},changes:t.changes,counts:tn(t.changes)};if(t.model&&(await a(this,p,Ve).call(this,e,t.model),i.full=!0),t.delta){const u=await a(this,p,St).call(this);if(!u)throw new Error("A delta needs the model file to hang from: sync a full model first.");const f=await this.client.createHiddenFile(t.delta,u.id);i.deltaId=String(f._id??f.id)}const o=await a(this,p,kt).call(this);if(o){s=o;const u=Oe(s.commits);if(t.expectedLatestGuid!==void 0&&(u==null?void 0:u.guid)!==t.expectedLatestGuid)throw new Wt(t.expectedLatestGuid,u==null?void 0:u.guid);u&&!i.parents&&(i.parents=[u.guid])}return s.commits.push(i),await a(this,p,At).call(this,e,ke,s),i}async suggestions(){const t=await a(this,p,ht).call(this);return(t==null?void 0:t.ops)??[]}async pendingSuggestions(){return(await this.suggestions()).filter(t=>t.state==="pending")}async suggest(t){const e=await a(this,p,ct).call(this,!0),s=await a(this,p,ht).call(this)??{schema:Ae,ops:[]},r=await a(this,p,vt).call(this,it),i={opId:Ie(),title:t.title,verb:t.verb,author:t.author,createdAt:new Date().toISOString(),state:"pending",...t.targets!==void 0?{targets:t.targets}:{},...t.batchId?{batchId:t.batchId}:{},...t.userId?{userId:t.userId}:{},...t.baseCommitGuid?{baseCommitGuid:t.baseCommitGuid}:{}};if(t.payload){const h=r??await a(this,p,Qt).call(this,e,it,s),u=await this.client.createHiddenFile(t.payload,h.id);i.fragId=String(u._id??u.id)}const o=await a(this,p,ht).call(this)??s;return o.schema??(o.schema=Ae),o.ops.push(i),await a(this,p,At).call(this,e,it,o),i}async suggestionPayload(t){if(!t.fragId)throw new Error(`Suggestion ${t.opId} carries no payload.`);return await(await this.client.downloadHiddenFile(t.fragId)).blob()}async resolveSuggestion(t,e){const s=await a(this,p,ct).call(this,!1);if(!s)throw new Error("This document has no suggestion queue.");const r=await a(this,p,ht).call(this),i=r==null?void 0:r.ops.find(o=>o.opId===t);if(!r||!i)throw new Error(`No suggestion ${t} in this document's queue.`);return Object.assign(i,e),await a(this,p,At).call(this,s,it,r),i}}L=new WeakMap,p=new WeakSet,at=function(){return`${this.source}-${this.docId}`},ct=async function(t){if(l(this,L))return l(this,L);const e=await this.project.rootFolderId(t);if(!e)throw new Error(`Project ${this.project.projectId} has no connected documents yet.`);const r=(await this.client.listFolders({parentFolderId:e,projectId:this.project.projectId})).find(o=>String(o.name??"")===l(this,p,at));if(r)return b(this,L,Y(r)),l(this,L);if(!t)throw new Error(`Document ${l(this,p,at)} does not exist in this project.`);const i=await this.client.createFolder(l(this,p,at),e,this.project.projectId);return b(this,L,Y(i)),l(this,L)},Kt=async function(){const t=await a(this,p,ct).call(this,!1);return(await this.client.listFiles({folderId:t})).map(s=>({id:Y(s),name:String(s.name??"")}))},vt=async function(t){try{return(await a(this,p,Kt).call(this)).find(e=>e.name===t)}catch{return}},St=async function(){try{const t=await a(this,p,Kt).call(this);return t.find(e=>e.name===Qs)??t.find(e=>e.name.endsWith(".frag")&&!e.name.startsWith(Zs))}catch{return}},zt=async function(t){const e=await a(this,p,vt).call(this,t);if(!e)return;const r=await(await this.client.downloadFile(e.id)).text();if(r.trim())return JSON.parse(r)},kt=function(){return a(this,p,zt).call(this,ke)},ht=function(){return a(this,p,zt).call(this,it)},At=async function(t,e,s){const r=new Blob([JSON.stringify(s)],{type:"application/json"}),i=await a(this,p,vt).call(this,e);return i?(await this.client.updateFile(i.id,{file:r,versionTag:_t()}),i):await a(this,p,Qt).call(this,t,e,s)},Qt=async function(t,e,s){const r=new Blob([JSON.stringify(s)],{type:"application/json"}),i=await this.client.createFile({file:r,name:e,versionTag:_t(),parentFolderId:t,projectId:this.project.projectId}),o=i.item;return{id:Y(o??i),name:e}},Ve=async function(t,e){const s=await a(this,p,St).call(this);if(s)return await this.client.updateFile(s.id,{file:e,versionTag:_t()}),s;const r=`${l(this,p,at)}.frag`,i=await this.client.createFile({file:e,name:r,versionTag:_t(),parentFolderId:t,projectId:this.project.projectId}),o=i.item;return{id:Y(o??i),name:r}};function tn(n){const t={added:0,modified:0,removed:0};for(const e of n)e.type==="create"?t.added++:e.type==="delete"?t.removed++:t.modified++;return t}function pe(n){var u;if(n.length<=1)return n.forEach((f,y)=>f.ordinal=y),[...n];const t=new Map(n.map(f=>[f.guid,f])),e=new Map,s=[];for(const f of n){const y=(u=f.parents)==null?void 0:u[0];if(y&&t.has(y)){const w=e.get(y)??[];w.push(f),e.set(y,w)}else s.push(f)}const r=(f,y)=>String(f.timestamp).localeCompare(String(y.timestamp));s.sort(r);const i=[],o=[...s].reverse(),h=new Set;for(;o.length;){const f=o.pop();if(h.has(f.guid))continue;h.add(f.guid),i.push(f);const y=(e.get(f.guid)??[]).sort(r);for(let w=y.length-1;w>=0;w--)o.push(y[w])}for(const f of n)h.has(f.guid)||i.push(f);return i.forEach((f,y)=>f.ordinal=y),i}function Oe(n){const t=pe(n);return t[t.length-1]}function Ie(){const n=globalThis.crypto;return n!=null&&n.randomUUID?n.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,t=>{const e=Math.random()*16|0;return(t==="x"?e:e&3|8).toString(16)})}var M;class Je{constructor(t){_(this,M,new Map);this.client=t}register(t){if(l(this,M).has(t.name))throw new Error(`A recipe named "${t.name}" is already registered.`);l(this,M).set(t.name,t)}list(t){return[...l(this,M).values()].filter(s=>(!(t!=null&&t.to)||s.to===t.to)&&(!(t!=null&&t.input)||s.inputs.includes(t.input)))}get(t){return l(this,M).get(t)}async run(t,e){const s=l(this,M).get(t);if(!s)throw new Error(`No recipe named "${t}" is registered.`);if(s.to!==e.target.source)throw new Error(`Recipe "${t}" writes ${s.to}, but the target document belongs to ${e.target.source}.`);const r=this.client.history(e.projectId).doc(e.target.source,e.target.docId),i=await r.latest(),o=await s.run({client:this.client,projectId:e.projectId,targetDoc:r,input:e.input,settings:e.settings??{}});return{suggestion:await r.suggest({title:o.title,verb:o.verb,author:e.author,payload:o.payload,targets:o.targets,userId:e.userId,baseCommitGuid:i==null?void 0:i.guid}),result:o}}}M=new WeakMap;const Zt=100;function en(n){try{const t=JSON.parse(n);if(t&&typeof t=="object"){const e=t;return{message:typeof e.message=="string"?e.message:void 0,code:typeof e.code=="string"?e.code:void 0,details:e.details}}}catch{}return{}}function sn(n){if(!n||typeof n!="object")return;const t=n.retryAfter;return typeof t=="number"&&Number.isFinite(t)&&t>=0?t:void 0}class Pt extends Error{constructor(e,s,r,i){const o=en(r);super(o.message??`${s||"Request failed"} (${e})`);v(this,"status");v(this,"code");v(this,"details");v(this,"body");v(this,"retryAfter");this.name="RequestError",this.status=e,this.code=o.code,this.details=o.details,this.body=r,this.retryAfter=i??sn(o.details)}}const C="item/folder",m="item",U="processor",nn="npm-registry",B="hidden",Ut="FILE",Dt="TOOL",Mt="APP",rn=500,xe=3e4,on=.25,an=n=>new Promise(t=>setTimeout(t,n));function cn(n){var r,i;const t=(i=(r=n.headers)==null?void 0:r.get)==null?void 0:i.call(r,"Retry-After");if(!t)return;const e=Number(t);if(Number.isFinite(e))return Math.max(0,e);const s=Date.parse(t);if(!Number.isNaN(s))return Math.max(0,(s-Date.now())/1e3)}function hn(n){return n instanceof Pt?n.status===429||n.status>=500:!0}function ln(n,t){const e=Math.min(rn*2**t,xe),s=e*on*Math.random(),r=n instanceof Pt&&n.retryAfter!=null?n.retryAfter*1e3:void 0;return r!=null?Math.min(r,xe)+s:e+s}var c,te,d,D,ft,lt,Ot,It,ee,se,Ye;const me=class me{constructor(t,e,s){_(this,c);v(this,"apiUrl");v(this,"accessToken");v(this,"wsUrl");v(this,"retries");v(this,"useBearer");v(this,"builtInGlobals",null);v(this,"localServerUrl",null);v(this,"context");_(this,ft);const{retries:r=0,useBearer:i=!1,localServerUrl:o}=s||{};let h=e;if(h.charAt(h.length-1)==="/"&&(h=h.slice(0,-1)),this.apiUrl=`${h}/api`,this.accessToken=t,this.wsUrl=h,this.retries=r,this.useBearer=i,this.context={appId:"",projectId:"",accessToken:t,apiUrl:e},o){let u=o;u.charAt(u.length-1)==="/"&&(u=u.slice(0,-1)),this.localServerUrl=u}}static fromPlatformContext(t){const e=(typeof window<"u"?window.__THATOPEN_CONTEXT__:null)||{appId:"",projectId:"",accessToken:"",apiUrl:""},s=new me(e.accessToken,e.apiUrl,{...t,useBearer:!0});return s.context=e,s}setRetries(t){this.retries=t}setBuiltInGlobals(t){this.builtInGlobals=t}get socketOrigin(){return this.wsUrl.split("?")[0]}async resolveAccessToken(){return this.accessToken}async request(t,e,s){return a(this,c,d).call(this,t,e,s)}async listFiles(t){const{folderId:e,archived:s,projectId:r}=t||{};return e?await a(this,c,d).call(this,"GET",`${C}/${e}/items`,{query:{itemType:Ut,archived:s}}):await a(this,c,d).call(this,"GET",`${m}`,{query:{itemType:Ut,archived:s,...r&&{projectId:r}}})}async getFile(t,e){return await a(this,c,se).call(this,t,e)}async createFile(t){return await a(this,c,It).call(this,t,Ut)}async updateFile(t,e){return await a(this,c,ee).call(this,t,e)}async archiveFile(t){return await a(this,c,d).call(this,"DELETE",`${m}/${t}`)}async recoverFile(t){return await a(this,c,d).call(this,"PUT",`${m}/${t}/recover`)}async downloadFile(t,e){return await a(this,c,Ot).call(this,t,e)}async getFileVersionMetadata(t,e,s){const{withDraft:r}=s||{};return await a(this,c,d).call(this,"GET",`${m}/${encodeURIComponent(t)}/version/${encodeURIComponent(e)}/metadata`,{query:{...r&&{withDraft:"true"}}})}async updateFileVersionMetadata(t,e,s){return await a(this,c,d).call(this,"PUT",`${m}/${encodeURIComponent(t)}/version/${encodeURIComponent(e)}/metadata`,{body:JSON.stringify({metadata:s}),contentType:"application/json"})}async deleteFileVersionMetadata(t,e){return await a(this,c,d).call(this,"DELETE",`${m}/${encodeURIComponent(t)}/version/${encodeURIComponent(e)}/metadata`)}async getFileVersionMetadataBatch(t,e){const{withDraft:s}=e||{};return await a(this,c,lt).call(this,t,async r=>(await a(this,c,d).call(this,"POST",`${m}/batch/version-metadata`,{body:JSON.stringify({entries:r,...s!==void 0&&{withDraft:s}}),contentType:"application/json"})).results)}async listFolders(t){const{archived:e,parentFolderId:s,projectId:r}=t||{};return await a(this,c,d).call(this,"GET",C,{query:{parentFolderId:s,archived:e,...r&&{projectId:r}}})}async getFolder(t){return await a(this,c,d).call(this,"GET",`${C}/${t}`)}async getFoldersBatch(t){return await a(this,c,lt).call(this,t,async e=>(await a(this,c,d).call(this,"POST",`${m}/batch/folders`,{body:JSON.stringify({folderIds:e}),contentType:"application/json"})).results)}async createFolder(t,e,s){return await a(this,c,d).call(this,"POST",C,{body:JSON.stringify({name:t,...e&&{parentId:e},...s&&{projectId:s}}),contentType:"application/json"})}async updateFolder(t,e){const{name:s}=e;return await a(this,c,d).call(this,"PUT",`${C}/${t}`,{body:JSON.stringify({name:s}),contentType:"application/json"})}async archiveFolder(t){return await a(this,c,d).call(this,"DELETE",`${C}/${t}`)}async recoverFolder(t){return await a(this,c,d).call(this,"PUT",`${C}/${t}/recover`)}async downloadFolder(t){return await a(this,c,D).call(this,`${C}/${t}/download`)}async listComponents(t){const{folderId:e,ShowVersions:s,projectId:r}=t||{};return e?await a(this,c,d).call(this,"GET",`${C}/${e}/items`,{query:{itemType:Dt,...s&&{ShowVersions:s}}}):await a(this,c,d).call(this,"GET",`${m}`,{query:{itemType:Dt,...s&&{ShowVersions:s},...r&&{projectId:r}}})}async getComponent(t,e){return await a(this,c,se).call(this,t,e)}async createComponent(t){const{componentProps:e}=t;return await a(this,c,It).call(this,t,Dt,e)}async updateComponent(t,e){const{componentProps:s}=e;return await a(this,c,ee).call(this,t,e,s)}async downloadComponent(t,e){return await a(this,c,Ot).call(this,t,e)}async downloadComponentBundle(t,e){const{versionTag:s,withDraft:r}=e||{};return await a(this,c,D).call(this,`${m}/${t}/download/bundle`,{query:{...s&&{versionTag:s},...r&&{withDraft:r}}})}async archiveComponent(t){return await a(this,c,d).call(this,"DELETE",`${m}/${t}`)}async recoverComponent(t){return await a(this,c,d).call(this,"PUT",`${m}/${t}/recover`)}async getBuiltInComponent(t){return await(await a(this,c,D).call(this,`built-in/${t}/bundle`)).text()}async initBuiltInComponent(t,e,s){const r=await this.getBuiltInComponent(t.uuid),i=s??this.builtInGlobals??(typeof window<"u"?window.ThatOpenCompany:{})??{},o=Object.keys(i),h=o.map(w=>i[w]),f=new Function(...o,`${r}
2
- return main;`)(...h),y=(f==null?void 0:f.componentDefinition)??f;e.get(y)}async initBuiltInComponents(t,...e){await Promise.all(e.map(s=>this.initBuiltInComponent(s,t)))}async setup(t,...e){var o,h;const s=t.OBC,r=t.BUI;if(!(s!=null&&s.Components))throw new Error("globals.OBC must include Components");if(!(r!=null&&r.Manager))throw new Error("globals.BUI must include Manager");const i=new s.Components;return r.Manager.init(),this.setBuiltInGlobals(t),await this.initBuiltInComponents(i,...e),i.init(),(h=(o=this.context.appEventOrchestrator)==null?void 0:o.appLoaded)==null||h.call(o),{components:i}}throwError(t,e){var s,r;(r=(s=this.context.appEventOrchestrator)==null?void 0:s.appError)==null||r.call(s,t,e)}async listApps(t){const{folderId:e,ShowVersions:s,projectId:r}=t||{};return e?await a(this,c,d).call(this,"GET",`${C}/${e}/items`,{query:{itemType:Mt,...s&&{ShowVersions:s}}}):await a(this,c,d).call(this,"GET",`${m}`,{query:{itemType:Mt,...s&&{ShowVersions:s},...r&&{projectId:r}}})}async createApp(t){const{appProps:e}=t;return await a(this,c,It).call(this,t,Mt,e)}async downloadApp(t,e){return await a(this,c,Ot).call(this,t,e)}async downloadAppBundle(t,e){const{versionTag:s,withDraft:r}=e||{};return await a(this,c,D).call(this,`${m}/${t}/download/bundle`,{query:{...s&&{versionTag:s},...r&&{withDraft:r}}})}async archiveApp(t){return await a(this,c,d).call(this,"DELETE",`${m}/${t}`)}async getNpmCredentials(){return await a(this,c,d).call(this,"GET",`${nn}/credentials`)}async executeComponent(t,e,s){if(this.localServerUrl){const r=`${this.localServerUrl}/api/${U}/${t}/execute`,i=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!i.ok){const o=await i.text().catch(()=>"");throw new Error(`Local server request failed: ${i.status} - ${o}`)}return await i.json()}return await a(this,c,d).call(this,"POST",`${U}/${t}/execute`,{body:JSON.stringify(e),query:{...s&&{versionTag:s}},contentType:"application/json"})}async abortExecution(t){if(this.localServerUrl){const e=`${this.localServerUrl}/api/${U}/progress/${t}/abort`,s=await fetch(e,{method:"POST"});if(!s.ok){const r=await s.text().catch(()=>"");throw new Error(`Local server request failed: ${s.status} - ${r}`)}return await s.json()}return await a(this,c,d).call(this,"POST",`${U}/progress/${t}/abort`)}async listExecutions(t,e){if(this.localServerUrl){const s=e?`?projectId=${encodeURIComponent(e)}`:"",r=`${this.localServerUrl}/api/${U}/${t}/progress${s}`,i=await fetch(r);if(!i.ok){const o=await i.text().catch(()=>"");throw new Error(`Local server request failed: ${i.status} - ${o}`)}return await i.json()}return await a(this,c,d).call(this,"GET",`${U}/${t}/progress`,{query:{...e&&{projectId:e}}})}async getExecution(t){if(this.localServerUrl){const e=`${this.localServerUrl}/api/${U}/progress/${t}`,s=await fetch(e);if(!s.ok){const r=await s.text().catch(()=>"");throw new Error(`Local server request failed: ${s.status} - ${r}`)}return await s.json()}return await a(this,c,d).call(this,"GET",`${U}/progress/${t}`)}async onExecutionProgress(t,e){const s=this.localServerUrl??this.wsUrl,r=await ut(s,{auth:{accessToken:this.accessToken},transports:["websocket"]});r.on("connect",function(){r.emit("executionSubscription",JSON.stringify({executionId:t})),r.on("execution",i=>{e(i)})}),r.on("connect_error",function(i){console.log(i)})}history(t){return new He(this,t)}get recipes(){return l(this,ft)??b(this,ft,new Je(this)),l(this,ft)}async createHiddenFile(t,e,s){const r=new FormData;return r.append("file",t),r.append("parentItemId",e),s!=null&&r.append("tag",s),await a(this,c,d).call(this,"POST",`${m}/${B}`,{body:r})}async createHiddenFilesBatch(t,e,s){const r=new FormData;for(const i of t)r.append("files",i);return r.append("parentItemId",e),s!=null&&r.append("tag",s),await a(this,c,d).call(this,"POST",`${m}/${B}/batch`,{body:r})}async deleteHiddenFile(t){return await a(this,c,d).call(this,"DELETE",`${m}/${B}/${t}`)}async getHiddenFile(t){return await a(this,c,d).call(this,"GET",`${m}/${B}/${t}`)}async downloadHiddenFile(t){return await a(this,c,D).call(this,`${m}/${B}/${t}/download`)}async getHiddenFileSignedUrl(t,e){return await a(this,c,d).call(this,"GET",`${m}/${B}/${t}/signed-url`,{...e!=null&&{query:{expiresIn:e}}})}async getHiddenFileSignedUrlsBatch(t,e){return await a(this,c,lt).call(this,t,async s=>(await a(this,c,d).call(this,"POST",`${m}/${B}/signed-url/batch`,{body:JSON.stringify({hiddenFileIds:s,...e!=null&&{expiresIn:e}}),contentType:"application/json"})).results)}async getHiddenFilesByParent(t,e){return await a(this,c,d).call(this,"GET",`${m}/${t}/${B}`,{...e!=null&&{query:{tag:e}}})}async deleteHiddenFilesByParent(t){return await a(this,c,d).call(this,"DELETE",`${m}/${t}/${B}`)}async uploadItemIcon(t,e){const s=new FormData;return s.append("icon",e),await a(this,c,d).call(this,"PUT",`${m}/${t}/icon`,{body:s})}async getItemIcon(t){return await a(this,c,D).call(this,`${m}/${t}/icon`)}async removeItemIcon(t){return await a(this,c,d).call(this,"DELETE",`${m}/${t}/icon`)}async updateItem(t,e){return await a(this,c,d).call(this,"PUT",`${m}/${t}`,{body:JSON.stringify(e),contentType:"application/json"})}async createVersion(t,e,s,r,i){const o=new FormData;return o.append("file",e),o.append("versionTag",s),r&&o.append("extraProps",JSON.stringify(r)),i&&o.append("metadata",JSON.stringify(i)),await a(this,c,d).call(this,"POST",`${m}/${t}/version`,{body:o})}async listVersions(t,e={}){return await a(this,c,d).call(this,"GET",`${m}/${encodeURIComponent(t)}/versions`,{query:e})}async listVersionsBatch(t,e={}){const{archived:s}=e;return await a(this,c,lt).call(this,t,async r=>(await a(this,c,d).call(this,"POST",`${m}/batch/versions`,{body:JSON.stringify({itemIds:r,...s!==void 0&&{archived:s}}),contentType:"application/json"})).results)}async archiveVersion(t,e){return await a(this,c,d).call(this,"PUT",`${m}/${encodeURIComponent(t)}/version/${encodeURIComponent(e)}/archive`)}async recoverVersion(t,e){return await a(this,c,d).call(this,"PUT",`${m}/${encodeURIComponent(t)}/version/${encodeURIComponent(e)}/recover`)}async deleteVersion(t,e){return await a(this,c,d).call(this,"DELETE",`${m}/${encodeURIComponent(t)}/version/${encodeURIComponent(e)}`)}};c=new WeakSet,te=function(t){return`${this.apiUrl}/${t}`},d=async function(t,e,s){const{body:r,query:i,contentType:o,retries:h,responseType:u,retryAttempt:f}=s||{},y=a(this,c,te).call(this,e),w=a(this,c,Ye).call(this,i),R=await this.resolveAccessToken(),ss={...w,...this.useBearer?{}:{accessToken:R}};try{const I=await fetch(y+"?"+new URLSearchParams(ss).toString(),{method:t,headers:{Accept:"application/json",...o&&{"Content-Type":o},...this.useBearer&&{Authorization:`Bearer ${R}`}},...r&&{body:r}});if(!I.ok){const X=await I.text().then(mt=>mt).catch(()=>"");throw new Pt(I.status,I.statusText,X,cn(I))}return u==="blob"?await I.blob():I.json().then(X=>X).catch(()=>{})}catch(I){const X=h??this.retries;if(X>0&&hn(I)){const mt=f??0;return await an(ln(I,mt)),await a(this,c,d).call(this,t,e,{...s,retries:X-1,retryAttempt:mt+1})}throw I}},D=async function(t,e){const{query:s}=e||{},r=a(this,c,te).call(this,t),i=await this.resolveAccessToken(),o={...s,...this.useBearer?{}:{accessToken:i}};return await fetch(r+"?"+new URLSearchParams(o).toString(),{method:"GET",...this.useBearer&&{headers:{Authorization:`Bearer ${i}`}}})},ft=new WeakMap,lt=async function(t,e){if(!t.length)return[];const s=[];for(let i=0;i<t.length;i+=Zt)s.push(t.slice(i,i+Zt));return(await Promise.all(s.map(e))).flat()},Ot=async function(t,e){const{versionTag:s,withDraft:r}=e||{};return await a(this,c,D).call(this,`${m}/${t}/download`,{query:{...s&&{versionTag:s},...r&&{withDraft:r}}})},It=async function(t,e,s){const{name:r,versionTag:i,parentFolderId:o,projectId:h,file:u,metadata:f}=t,y=new FormData;return y.append("file",u),y.append("name",r),y.append("versionTag",i),y.append("itemType",e),o&&y.append("folderId",o),h&&y.append("projectId",h),s&&y.append("extraProps",JSON.stringify(s)),f&&y.append("metadata",JSON.stringify(f)),await a(this,c,d).call(this,"POST",m,{body:y})},ee=async function(t,e,s){const{name:r,versionTag:i,parentFolderId:o,file:h,metadata:u}=e;let f,y;if(h){const w=new FormData;w.append("file",h),i&&w.append("versionTag",i),s&&w.append("extraProps",JSON.stringify(s)),u&&w.append("metadata",JSON.stringify(u)),y=await a(this,c,d).call(this,"POST",`${m}/${t}/version`,{body:w})}if(r||o){const w={...r&&{name:r},...o&&{folderId:o}},R=JSON.stringify(w);f=await a(this,c,d).call(this,"PUT",`${m}/${t}`,{body:R,contentType:"application/json"})}return{item:f,version:y}},se=async function(t,e){const{showVersions:s=!1}=e||{};return await a(this,c,d).call(this,"GET",`${m}/${t}`,{query:{showVersions:s}})},Ye=function(t){return t&&Object.entries(t).filter(([,e])=>e!==void 0).reduce((e,[s,r])=>(e[s]=r,e),{})};let Rt=me;function We(){if(typeof window>"u"||window.parent===window)throw new Error("client.channel only works inside a That Open app, which runs in an iframe of the platform.");return{post:n=>window.parent.postMessage(n,"*"),listen:n=>{const t=e=>{e.source===window.parent&&n(e.data)};return window.addEventListener("message",t),()=>window.removeEventListener("message",t)}}}const ne="channel:",un=1e4;function xt(n){try{n()}catch(t){console.error("[channel] a listener threw:",t)}}var F,k,A,Q,Z,tt,S,re,ie,z;class ye{constructor(t,e){_(this,S);_(this,F,!1);_(this,k,[]);_(this,A,[]);_(this,Q,new Set);_(this,Z,new Set);_(this,tt,new Set);this.transport=t,this.controls=e}get joined(){return l(this,F)}get peers(){return l(this,k)}join(){return l(this,F)?Promise.resolve():a(this,S,re).call(this,"joined",this.controls.join)}leave(){return!l(this,F)&&!l(this,A).some(t=>t.want==="joined")?Promise.resolve():a(this,S,re).call(this,"left",this.controls.leave)}onChange(t){return l(this,Q).add(t),()=>void l(this,Q).delete(t)}onPeerJoined(t){return l(this,Z).add(t),()=>void l(this,Z).delete(t)}onPeerLeft(t){return l(this,tt).add(t),()=>void l(this,tt).delete(t)}applyJoined(){b(this,F,!0),a(this,S,ie).call(this,"joined"),a(this,S,z).call(this)}applyLeft(){b(this,F,!1),b(this,k,[]),a(this,S,ie).call(this,"left"),a(this,S,z).call(this)}applyPeers(t){b(this,k,t),a(this,S,z).call(this)}applyPeerJoined(t){!l(this,F)||l(this,k).some(e=>e.from===t.from)||(b(this,k,[...l(this,k),t]),l(this,Z).forEach(e=>xt(()=>e(t))),a(this,S,z).call(this))}applyPeerLeft(t){const e=l(this,k).find(s=>s.from===t);e&&(b(this,k,l(this,k).filter(s=>s.from!==t)),l(this,tt).forEach(s=>xt(()=>s(e))),a(this,S,z).call(this))}failPending(t){const e=l(this,A);return b(this,A,[]),e.forEach(s=>{clearTimeout(s.timer),s.reject(t)}),e.length>0}post(t){this.transport.post(t)}}F=new WeakMap,k=new WeakMap,A=new WeakMap,Q=new WeakMap,Z=new WeakMap,tt=new WeakMap,S=new WeakSet,re=function(t,e){return new Promise((s,r)=>{const i={want:t,resolve:s,reject:r,timer:setTimeout(()=>{b(this,A,l(this,A).filter(o=>o!==i)),r(new Error(`The platform did not confirm ${t==="joined"?"joining":"leaving"} in time.`))},un)};l(this,A).push(i),this.transport.post({type:"APP_CHANNEL_CONTROL",...e})})},ie=function(t){const e=l(this,A).filter(s=>s.want===t);b(this,A,l(this,A).filter(s=>s.want!==t)),e.forEach(s=>{clearTimeout(s.timer),s.resolve()})},z=function(){l(this,Q).forEach(t=>xt(t))};var et;class Xe extends ye{constructor(e){super(e,{join:{action:"joinCollab"},leave:{action:"leaveCollab"}});_(this,et,new Map)}on(e,s){const r=l(this,et).get(e)??new Set;return r.add(s),l(this,et).set(e,r),()=>void r.delete(s)}send(e,s){if(e.startsWith(ne))throw new Error(`Message types starting with '${ne}' are reserved.`);this.joined&&this.post({type:"APP_CHANNEL_PUBLISH",message:{type:e,payload:s}})}accepts(e){return e===void 0||e==="collab"}async handle(e){const s=l(this,et).get(e.type);if(!(s!=null&&s.size))return{handled:!1};const r=ze(e);return s.forEach(i=>xt(()=>i(e.payload,r))),{handled:!0}}}et=new WeakMap;var j;class Ke extends ye{constructor(e,s){super(e,{join:{action:"joinExternal",kind:s},leave:{action:"leaveExternal",kind:s}});_(this,j,new Map);this.kind=s}on(e,s){if(l(this,j).has(e))throw new Error(`"${e}" already has a handler in this room. Remove it first.`);return l(this,j).set(e,s),()=>void l(this,j).delete(e)}accepts(e,s){return e!==void 0&&e!=="external"?!1:this.kind===void 0||e===void 0||this.kind===s}get hasHandlers(){return l(this,j).size>0}async handle(e){const s=l(this,j).get(e.type);if(!s)return{handled:!1};try{return{handled:!0,value:await s(e.payload,ze(e))}}catch(r){return{handled:!0,error:r instanceof Error?r.message:String(r)}}}}j=new WeakMap;function ze(n){return{from:n.from,at:n.at,requestId:n.requestId,kind:n.kind}}function dn(n){const t=n;if((t==null?void 0:t.type)!=="THATOPEN_CHANNEL_MESSAGE")return null;const e=t.message;return!e||typeof e.type!="string"?null:{type:e.type,requestId:typeof e.requestId=="string"?e.requestId:void 0,payload:e.payload,at:typeof e.at=="number"?e.at:Date.now(),from:typeof e.from=="string"?e.from:"",scope:e.scope==="collab"||e.scope==="external"?e.scope:void 0,kind:typeof e.kind=="string"?e.kind:void 0}}var W,pt,q,H,G,T,oe,$t,Ze,ts,es,ae;class Qe{constructor(t){_(this,T);_(this,W);_(this,pt);_(this,q);_(this,H,new Map);_(this,G,new Set);b(this,W,t),b(this,pt,t.listen(e=>void a(this,T,Ze).call(this,e)))}collab(){return l(this,q)??b(this,q,new Xe(l(this,W))),l(this,q)}external(t){const e=t??"";let s=l(this,H).get(e);return s||(s=new Ke(l(this,W),t),l(this,H).set(e,s)),s}dispose(){l(this,pt).call(this)}}W=new WeakMap,pt=new WeakMap,q=new WeakMap,H=new WeakMap,G=new WeakMap,T=new WeakSet,oe=function(){return[...l(this,q)?[l(this,q)]:[],...l(this,H).values()]},$t=function(t,e){if(t==="collab")return l(this,q);if(t==="external")return l(this,H).get(typeof e=="string"?e:"")},Ze=async function(t){const e=dn(t);if(e){if(e.type.startsWith(ne)){a(this,T,ts).call(this,e);return}await a(this,T,es).call(this,e)}},ts=function(t){var s,r,i;const e=t.payload??{};switch(t.type){case"channel:joined":(s=a(this,T,$t).call(this,e.scope,e.kind))==null||s.applyJoined();break;case"channel:left":(r=a(this,T,$t).call(this,e.scope,e.kind))==null||r.applyLeft();break;case"channel:peers":(i=a(this,T,$t).call(this,e.scope,e.kind))==null||i.applyPeers(e.peers??[]);break;case"channel:peer-joined":case"channel:peer-left":{if(!e.from)break;const o=e.scope==="collab"?[l(this,q)]:[...l(this,H).values()].filter(h=>h.accepts("external",e.kind));for(const h of o)t.type==="channel:peer-joined"?h==null||h.applyPeerJoined({from:e.from,kind:e.kind}):h==null||h.applyPeerLeft(e.from);break}case"channel:error":{const o=new Error(String(t.payload));a(this,T,oe).call(this).map(u=>u.failPending(o)).some(Boolean)||console.error("[channel] error:",t.payload);break}}},es=async function(t){const e=a(this,T,oe).call(this).filter(i=>i.accepts(t.scope,t.kind));let s=!1;for(const i of e){const o=await i.handle(t);o.handled&&(s=!0,t.requestId&&a(this,T,ae).call(this,t.requestId,o))}t.requestId&&t.scope==="external"&&e.length>0&&!s&&a(this,T,ae).call(this,t.requestId,{handled:!0,error:`No handler for "${t.type}".`})},ae=function(t,e){l(this,G).has(t)||(l(this,G).add(t),l(this,G).size>500&&l(this,G).delete(l(this,G).values().next().value),l(this,W).post({type:"APP_CHANNEL_PUBLISH",message:{type:e.error===void 0?"reply":"reply-error",requestId:t,payload:e.error===void 0?e.value:{error:e.error}}}))};const J="project",K="notifications";var st,yt;const ge=class ge extends Rt{constructor(e,s,r){super(typeof e=="string"?e:"",s,{...r,useBearer:!0});_(this,st);_(this,yt);typeof e=="function"&&b(this,st,e)}async resolveAccessToken(){return l(this,st)?await l(this,st).call(this):super.resolveAccessToken()}static fromPlatformContext(e){const s=(typeof window<"u"?window.__THATOPEN_CONTEXT__:null)||{appId:"",projectId:"",accessToken:"",apiUrl:""},r=new ge(s.accessToken,s.apiUrl,e);return r.context=s,r}get channel(){return l(this,yt)??b(this,yt,new Qe(We())),l(this,yt)}async listProjects(){return await this.request("GET",J)}async getProject(e){return await this.request("GET",`${J}/${e}`)}async getProjectData(e){return await this.request("GET",`${J}/${e}/data`)}async getAvatar(e){return await this.request("GET",`account/${e}/avatar`,{responseType:"blob"})}async checkPermission(e){return await this.request("GET",`${J}/permissions/check`,{query:e})}async checkPermissionBatch(e){return(await this.request("POST",`${J}/permissions/check/batch`,{body:JSON.stringify({checks:e}),contentType:"application/json"})).results}async getNotifications(e){return await this.request("GET",K,{query:{...(e==null?void 0:e.cursor)!==void 0&&{cursor:e.cursor},...(e==null?void 0:e.limit)!==void 0&&{limit:String(e.limit)}}})}async getUnreadNotificationCount(){return(await this.request("GET",`${K}/unread-count`)).count}async markNotificationsRead(e){return await this.request("POST",`${K}/mark-read`,{body:JSON.stringify({ids:e}),contentType:"application/json"})}async markAllNotificationsRead(){return await this.request("POST",`${K}/mark-all-read`)}async getNotificationSubscriptions(){return await this.request("GET",`${K}/subscriptions`)}async unsubscribeFromAutomation(e){return await this.request("DELETE",`${K}/subscriptions/${e}`)}async subscribeToAutomation(e,s,r){return await this.request("POST",`${J}/${e}/events/hooks/${s}/subscription`,{body:JSON.stringify(r??{}),contentType:"application/json"})}async updateAutomationSubscription(e,s,r){return await this.request("PATCH",`${J}/${e}/events/hooks/${s}/subscription`,{body:JSON.stringify(r),contentType:"application/json"})}async onNotification(e){const s=await this.resolveAccessToken(),r=ut(`${this.socketOrigin}/notifications`,{auth:{accessToken:s},transports:["websocket"]});return r.on("notification.created",i=>e({type:"created",id:i==null?void 0:i.id})),r.on("notification.read",i=>e({type:"read",id:i==null?void 0:i.id})),r.on("notifications.allRead",i=>e({type:"allRead",batch:i==null?void 0:i.batch})),()=>r.disconnect()}};st=new WeakMap,yt=new WeakMap;let ce=ge;const fn={MAX_FIELDS:200,MAX_KEY_LENGTH:50,MAX_VALUE_LENGTH:50},pn={uuid:"a3f82c1d-5b74-4e9a-bc30-d7e12f894a61"},yn={uuid:"2c9f4e8d-3a1b-4c5e-9d7f-0a2b6c8e1d3f"},mn={uuid:"b0b5e2a2-0b3a-4a6b-8b1c-0b1c4a6b8b1c"},gn={uuid:"d8f3a1c2-6b4e-4f9a-8c1d-2e7b5a9f3c60"},wn={uuid:"3f9c1a7e-6b2d-4e18-9a5c-7d0e2f4b6c81"},_n={uuid:"2c4ae432-fc24-43e9-9783-0c960c674e96"},bn={uuid:"6f3a9c2e-8b1d-4e6a-9c3f-1d7b5a8e2c4f"},En={uuid:"69af63aa-19ba-4fc7-b17b-75647bac1d76"},Tn={uuid:"234f1416-528d-452a-9cc9-a16c5239b2eb"};exports.CDEManager=pn;exports.ChannelClient=Qe;exports.ChannelRoom=ye;exports.ClashesManager=yn;exports.CollabRoom=Xe;exports.EngineServicesClient=Rt;exports.ExternalRoom=Ke;exports.FileList=mn;exports.FlowDoc=Ge;exports.GISManager=gn;exports.GitHistoryManager=wn;exports.HelloWorld=_n;exports.METADATA_LIMITS=fn;exports.PlatformClient=ce;exports.ProjectHistory=He;exports.ProjectManager=bn;exports.Recipes=Je;exports.RequestError=Pt;exports.STORAGE_BATCH_MAX=Zt;exports.StaleHistoryError=Wt;exports.TopicsManager=En;exports.UIManager=Tn;exports.orderByGraph=pe;exports.windowTransport=We;
1
+ "use strict";var cs=Object.defineProperty;var Te=n=>{throw TypeError(n)};var hs=(n,t,e)=>t in n?cs(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e;var v=(n,t,e)=>hs(n,typeof t!="symbol"?t+"":t,e),Ft=(n,t,e)=>t.has(n)||Te("Cannot "+e);var l=(n,t,e)=>(Ft(n,t,"read from private field"),e?e.call(n):t.get(n)),b=(n,t,e)=>t.has(n)?Te("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(n):t.set(n,e),_=(n,t,e,s)=>(Ft(n,t,"write to private field"),s?s.call(n,e):t.set(n,e),e),a=(n,t,e)=>(Ft(n,t,"access private method"),e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const P=Object.create(null);P.open="0";P.close="1";P.ping="2";P.pong="3";P.message="4";P.upgrade="5";P.noop="6";const Et=Object.create(null);Object.keys(P).forEach(n=>{Et[P[n]]=n});const Gt={type:"error",data:"parser error"},Re=typeof Blob=="function"||typeof Blob<"u"&&Object.prototype.toString.call(Blob)==="[object BlobConstructor]",Ne=typeof ArrayBuffer=="function",Pe=n=>typeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(n):n&&n.buffer instanceof ArrayBuffer,fe=({type:n,data:t},e,s)=>Re&&t instanceof Blob?e?s(t):ve(t,s):Ne&&(t instanceof ArrayBuffer||Pe(t))?e?s(t):ve(new Blob([t]),s):s(P[n]+(t||"")),ve=(n,t)=>{const e=new FileReader;return e.onload=function(){const s=e.result.split(",")[1];t("b"+(s||""))},e.readAsDataURL(n)};function Se(n){return n instanceof Uint8Array?n:n instanceof ArrayBuffer?new Uint8Array(n):new Uint8Array(n.buffer,n.byteOffset,n.byteLength)}let qt;function ls(n,t){if(Re&&n.data instanceof Blob)return n.data.arrayBuffer().then(Se).then(t);if(Ne&&(n.data instanceof ArrayBuffer||Pe(n.data)))return t(Se(n.data));fe(n,!1,e=>{qt||(qt=new TextEncoder),t(qt.encode(e))})}const ke="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",ot=typeof Uint8Array>"u"?[]:new Uint8Array(256);for(let n=0;n<ke.length;n++)ot[ke.charCodeAt(n)]=n;const us=n=>{let t=n.length*.75,e=n.length,s,r=0,i,o,h,u;n[n.length-1]==="="&&(t--,n[n.length-2]==="="&&t--);const f=new ArrayBuffer(t),p=new Uint8Array(f);for(s=0;s<e;s+=4)i=ot[n.charCodeAt(s)],o=ot[n.charCodeAt(s+1)],h=ot[n.charCodeAt(s+2)],u=ot[n.charCodeAt(s+3)],p[r++]=i<<2|o>>4,p[r++]=(o&15)<<4|h>>2,p[r++]=(h&3)<<6|u&63;return f},ds=typeof ArrayBuffer=="function",pe=(n,t)=>{if(typeof n!="string")return{type:"message",data:Be(n,t)};const e=n.charAt(0);return e==="b"?{type:"message",data:fs(n.substring(1),t)}:Et[e]?n.length>1?{type:Et[e],data:n.substring(1)}:{type:Et[e]}:Gt},fs=(n,t)=>{if(ds){const e=us(n);return Be(e,t)}else return{base64:!0,data:n}},Be=(n,t)=>{switch(t){case"blob":return n instanceof Blob?n:new Blob([n]);case"arraybuffer":default:return n instanceof ArrayBuffer?n:n.buffer}},Le="",ps=(n,t)=>{const e=n.length,s=new Array(e);let r=0;n.forEach((i,o)=>{fe(i,!1,h=>{s[o]=h,++r===e&&t(s.join(Le))})})},ys=(n,t)=>{const e=n.split(Le),s=[];for(let r=0;r<e.length;r++){const i=pe(e[r],t);if(s.push(i),i.type==="error")break}return s};function ms(){return new TransformStream({transform(n,t){ls(n,e=>{const s=e.length;let r;if(s<126)r=new Uint8Array(1),new DataView(r.buffer).setUint8(0,s);else if(s<65536){r=new Uint8Array(3);const i=new DataView(r.buffer);i.setUint8(0,126),i.setUint16(1,s)}else{r=new Uint8Array(9);const i=new DataView(r.buffer);i.setUint8(0,127),i.setBigUint64(1,BigInt(s))}n.data&&typeof n.data!="string"&&(r[0]|=128),t.enqueue(r),t.enqueue(e)})}})}let Dt;function wt(n){return n.reduce((t,e)=>t+e.length,0)}function bt(n,t){if(n[0].length===t)return n.shift();const e=new Uint8Array(t);let s=0;for(let r=0;r<t;r++)e[r]=n[0][s++],s===n[0].length&&(n.shift(),s=0);return n.length&&s<n[0].length&&(n[0]=n[0].slice(s)),e}function gs(n,t){Dt||(Dt=new TextDecoder);const e=[];let s=0,r=-1,i=!1;return new TransformStream({transform(o,h){for(e.push(o);;){if(s===0){if(wt(e)<1)break;const u=bt(e,1);i=(u[0]&128)===128,r=u[0]&127,r<126?s=3:r===126?s=1:s=2}else if(s===1){if(wt(e)<2)break;const u=bt(e,2);r=new DataView(u.buffer,u.byteOffset,u.length).getUint16(0),s=3}else if(s===2){if(wt(e)<8)break;const u=bt(e,8),f=new DataView(u.buffer,u.byteOffset,u.length),p=f.getUint32(0);if(p>Math.pow(2,21)-1){h.enqueue(Gt);break}r=p*Math.pow(2,32)+f.getUint32(4),s=3}else{if(wt(e)<r)break;const u=bt(e,r);h.enqueue(pe(i?u:Dt.decode(u),t)),s=0}if(r===0||r>n){h.enqueue(Gt);break}}}})}const Fe=4;function E(n){if(n)return ws(n)}function ws(n){for(var t in E.prototype)n[t]=E.prototype[t];return n}E.prototype.on=E.prototype.addEventListener=function(n,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+n]=this._callbacks["$"+n]||[]).push(t),this};E.prototype.once=function(n,t){function e(){this.off(n,e),t.apply(this,arguments)}return e.fn=t,this.on(n,e),this};E.prototype.off=E.prototype.removeListener=E.prototype.removeAllListeners=E.prototype.removeEventListener=function(n,t){if(this._callbacks=this._callbacks||{},arguments.length==0)return this._callbacks={},this;var e=this._callbacks["$"+n];if(!e)return this;if(arguments.length==1)return delete this._callbacks["$"+n],this;for(var s,r=0;r<e.length;r++)if(s=e[r],s===t||s.fn===t){e.splice(r,1);break}return e.length===0&&delete this._callbacks["$"+n],this};E.prototype.emit=function(n){this._callbacks=this._callbacks||{};for(var t=new Array(arguments.length-1),e=this._callbacks["$"+n],s=1;s<arguments.length;s++)t[s-1]=arguments[s];if(e){e=e.slice(0);for(var s=0,r=e.length;s<r;++s)e[s].apply(this,t)}return this};E.prototype.emitReserved=E.prototype.emit;E.prototype.listeners=function(n){return this._callbacks=this._callbacks||{},this._callbacks["$"+n]||[]};E.prototype.hasListeners=function(n){return!!this.listeners(n).length};const Pt=typeof Promise=="function"&&typeof Promise.resolve=="function"?t=>Promise.resolve().then(t):(t,e)=>e(t,0),O=typeof self<"u"?self:typeof window<"u"?window:Function("return this")(),bs="arraybuffer";function qe(n,...t){return t.reduce((e,s)=>(n.hasOwnProperty(s)&&(e[s]=n[s]),e),{})}const _s=O.setTimeout,Es=O.clearTimeout;function Bt(n,t){t.useNativeTimers?(n.setTimeoutFn=_s.bind(O),n.clearTimeoutFn=Es.bind(O)):(n.setTimeoutFn=O.setTimeout.bind(O),n.clearTimeoutFn=O.clearTimeout.bind(O))}const Ts=1.33;function vs(n){return typeof n=="string"?Ss(n):Math.ceil((n.byteLength||n.size)*Ts)}function Ss(n){let t=0,e=0;for(let s=0,r=n.length;s<r;s++)t=n.charCodeAt(s),t<128?e+=1:t<2048?e+=2:t<55296||t>=57344?e+=3:(s++,e+=4);return e}function De(){return Date.now().toString(36).substring(3)+Math.random().toString(36).substring(2,5)}function ks(n){let t="";for(let e in n)n.hasOwnProperty(e)&&(t.length&&(t+="&"),t+=encodeURIComponent(e)+"="+encodeURIComponent(n[e]));return t}function As(n){let t={},e=n.split("&");for(let s=0,r=e.length;s<r;s++){let i=e[s].split("=");t[decodeURIComponent(i[0])]=decodeURIComponent(i[1])}return t}class Os extends Error{constructor(t,e,s){super(t),this.description=e,this.context=s,this.type="TransportError"}}class ye extends E{constructor(t){super(),this.writable=!1,Bt(this,t),this.opts=t,this.query=t.query,this.socket=t.socket,this.supportsBinary=!t.forceBase64}onError(t,e,s){return super.emitReserved("error",new Os(t,e,s)),this}open(){return this.readyState="opening",this.doOpen(),this}close(){return(this.readyState==="opening"||this.readyState==="open")&&(this.doClose(),this.onClose()),this}send(t){this.readyState==="open"&&this.write(t)}onOpen(){this.readyState="open",this.writable=!0,super.emitReserved("open")}onData(t){const e=pe(t,this.socket.binaryType);this.onPacket(e)}onPacket(t){super.emitReserved("packet",t)}onClose(t){this.readyState="closed",super.emitReserved("close",t)}pause(t){}createUri(t,e={}){return t+"://"+this._hostname()+this._port()+this.opts.path+this._query(e)}_hostname(){const t=this.opts.hostname;return t.indexOf(":")===-1?t:"["+t+"]"}_port(){return this.opts.port&&(this.opts.secure&&Number(this.opts.port)!==443||!this.opts.secure&&Number(this.opts.port)!==80)?":"+this.opts.port:""}_query(t){const e=ks(t);return e.length?"?"+e:""}}class Is extends ye{constructor(){super(...arguments),this._polling=!1}get name(){return"polling"}doOpen(){this._poll()}pause(t){this.readyState="pausing";const e=()=>{this.readyState="paused",t()};if(this._polling||!this.writable){let s=0;this._polling&&(s++,this.once("pollComplete",function(){--s||e()})),this.writable||(s++,this.once("drain",function(){--s||e()}))}else e()}_poll(){this._polling=!0,this.doPoll(),this.emitReserved("poll")}onData(t){const e=s=>{if(this.readyState==="opening"&&s.type==="open"&&this.onOpen(),s.type==="close")return this.onClose({description:"transport closed by the server"}),!1;this.onPacket(s)};ys(t,this.socket.binaryType).forEach(e),this.readyState!=="closed"&&(this._polling=!1,this.emitReserved("pollComplete"),this.readyState==="open"&&this._poll())}doClose(){const t=()=>{this.write([{type:"close"}])};this.readyState==="open"?t():this.once("open",t)}write(t){this.writable=!1,ps(t,e=>{this.doWrite(e,()=>{this.writable=!0,this.emitReserved("drain")})})}uri(){const t=this.opts.secure?"https":"http",e=this.query||{};return this.opts.timestampRequests!==!1&&(e[this.opts.timestampParam]=De()),!this.supportsBinary&&!e.sid&&(e.b64=1),this.createUri(t,e)}}let Ue=!1;try{Ue=typeof XMLHttpRequest<"u"&&"withCredentials"in new XMLHttpRequest}catch{}const xs=Ue;function Cs(){}class $s extends Is{constructor(t){if(super(t),typeof location<"u"){const e=location.protocol==="https:";let s=location.port;s||(s=e?"443":"80"),this.xd=typeof location<"u"&&t.hostname!==location.hostname||s!==t.port}}doWrite(t,e){const s=this.request({method:"POST",data:t});s.on("success",e),s.on("error",(r,i)=>{this.onError("xhr post error",r,i)})}doPoll(){const t=this.request();t.on("data",this.onData.bind(this)),t.on("error",(e,s)=>{this.onError("xhr poll error",e,s)}),this.pollXhr=t}}class N extends E{constructor(t,e,s){super(),this.createRequest=t,Bt(this,s),this._opts=s,this._method=s.method||"GET",this._uri=e,this._data=s.data!==void 0?s.data:null,this._create()}_create(){var t;const e=qe(this._opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");e.xdomain=!!this._opts.xd;const s=this._xhr=this.createRequest(e);try{s.open(this._method,this._uri,!0);try{if(this._opts.extraHeaders){s.setDisableHeaderCheck&&s.setDisableHeaderCheck(!0);for(let r in this._opts.extraHeaders)this._opts.extraHeaders.hasOwnProperty(r)&&s.setRequestHeader(r,this._opts.extraHeaders[r])}}catch{}if(this._method==="POST")try{s.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch{}try{s.setRequestHeader("Accept","*/*")}catch{}(t=this._opts.cookieJar)===null||t===void 0||t.addCookies(s),"withCredentials"in s&&(s.withCredentials=this._opts.withCredentials),this._opts.requestTimeout&&(s.timeout=this._opts.requestTimeout),s.onreadystatechange=()=>{var r;s.readyState===3&&((r=this._opts.cookieJar)===null||r===void 0||r.parseCookies(s.getResponseHeader("set-cookie"))),s.readyState===4&&(s.status===200||s.status===1223?this._onLoad():this.setTimeoutFn(()=>{this._onError(typeof s.status=="number"?s.status:0)},0))},s.send(this._data)}catch(r){this.setTimeoutFn(()=>{this._onError(r)},0);return}typeof document<"u"&&(this._index=N.requestsCount++,N.requests[this._index]=this)}_onError(t){this.emitReserved("error",t,this._xhr),this._cleanup(!0)}_cleanup(t){if(!(typeof this._xhr>"u"||this._xhr===null)){if(this._xhr.onreadystatechange=Cs,t)try{this._xhr.abort()}catch{}typeof document<"u"&&delete N.requests[this._index],this._xhr=null}}_onLoad(){const t=this._xhr.responseText;t!==null&&(this.emitReserved("data",t),this.emitReserved("success"),this._cleanup())}abort(){this._cleanup()}}N.requestsCount=0;N.requests={};if(typeof document<"u"){if(typeof attachEvent=="function")attachEvent("onunload",Ae);else if(typeof addEventListener=="function"){const n="onpagehide"in O?"pagehide":"unload";addEventListener(n,Ae,!1)}}function Ae(){for(let n in N.requests)N.requests.hasOwnProperty(n)&&N.requests[n].abort()}const Rs=function(){const n=Me({xdomain:!1});return n&&n.responseType!==null}();class Ns extends $s{constructor(t){super(t);const e=t&&t.forceBase64;this.supportsBinary=Rs&&!e}request(t={}){return Object.assign(t,{xd:this.xd},this.opts),new N(Me,this.uri(),t)}}function Me(n){const t=n.xdomain;try{if(typeof XMLHttpRequest<"u"&&(!t||xs))return new XMLHttpRequest}catch{}if(!t)try{return new O[["Active"].concat("Object").join("X")]("Microsoft.XMLHTTP")}catch{}}const je=typeof navigator<"u"&&typeof navigator.product=="string"&&navigator.product.toLowerCase()==="reactnative";class Ps extends ye{get name(){return"websocket"}doOpen(){const t=this.uri(),e=this.opts.protocols,s=je?{}:qe(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(s.headers=this.opts.extraHeaders);try{this.ws=this.createSocket(t,e,s)}catch(r){return this.emitReserved("error",r)}this.ws.binaryType=this.socket.binaryType,this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{this.opts.autoUnref&&this.ws._socket.unref(),this.onOpen()},this.ws.onclose=t=>this.onClose({description:"websocket connection closed",context:t}),this.ws.onmessage=t=>this.onData(t.data),this.ws.onerror=t=>this.onError("websocket error",t)}write(t){this.writable=!1;for(let e=0;e<t.length;e++){const s=t[e],r=e===t.length-1;fe(s,this.supportsBinary,i=>{try{this.doWrite(s,i)}catch{}r&&Pt(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){typeof this.ws<"u"&&(this.ws.onerror=()=>{},this.ws.close(),this.ws=null)}uri(){const t=this.opts.secure?"wss":"ws",e=this.query||{};return this.opts.timestampRequests&&(e[this.opts.timestampParam]=De()),this.supportsBinary||(e.b64=1),this.createUri(t,e)}}const Ut=O.WebSocket||O.MozWebSocket;class Bs extends Ps{createSocket(t,e,s){return je?new Ut(t,e,s):e?new Ut(t,e):new Ut(t)}doWrite(t,e){this.ws.send(e)}}class Ls extends ye{get name(){return"webtransport"}doOpen(){try{this._transport=new WebTransport(this.createUri("https"),this.opts.transportOptions[this.name])}catch(t){return this.emitReserved("error",t)}this._transport.closed.then(()=>{this.onClose()}).catch(t=>{this.onError("webtransport error",t)}),this._transport.ready.then(()=>{this._transport.createBidirectionalStream().then(t=>{const e=gs(Number.MAX_SAFE_INTEGER,this.socket.binaryType),s=t.readable.pipeThrough(e).getReader(),r=ms();r.readable.pipeTo(t.writable),this._writer=r.writable.getWriter();const i=()=>{s.read().then(({done:h,value:u})=>{h||(this.onPacket(u),i())}).catch(h=>{})};i();const o={type:"open"};this.query.sid&&(o.data=`{"sid":"${this.query.sid}"}`),this._writer.write(o).then(()=>this.onOpen())})})}write(t){this.writable=!1;for(let e=0;e<t.length;e++){const s=t[e],r=e===t.length-1;this._writer.write(s).then(()=>{r&&Pt(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){var t;(t=this._transport)===null||t===void 0||t.close()}}const Fs={websocket:Bs,webtransport:Ls,polling:Ns},qs=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,Ds=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];function Vt(n){if(n.length>8e3)throw"URI too long";const t=n,e=n.indexOf("["),s=n.indexOf("]");e!=-1&&s!=-1&&(n=n.substring(0,e)+n.substring(e,s).replace(/:/g,";")+n.substring(s,n.length));let r=qs.exec(n||""),i={},o=14;for(;o--;)i[Ds[o]]=r[o]||"";return e!=-1&&s!=-1&&(i.source=t,i.host=i.host.substring(1,i.host.length-1).replace(/;/g,":"),i.authority=i.authority.replace("[","").replace("]","").replace(/;/g,":"),i.ipv6uri=!0),i.pathNames=Us(i,i.path),i.queryKey=Ms(i,i.query),i}function Us(n,t){const e=/\/{2,9}/g,s=t.replace(e,"/").split("/");return(t.slice(0,1)=="/"||t.length===0)&&s.splice(0,1),t.slice(-1)=="/"&&s.splice(s.length-1,1),s}function Ms(n,t){const e={};return t.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function(s,r,i){r&&(e[r]=i)}),e}const Jt=typeof addEventListener=="function"&&typeof removeEventListener=="function",Tt=[];Jt&&addEventListener("offline",()=>{Tt.forEach(n=>n())},!1);class J extends E{constructor(t,e){if(super(),this.binaryType=bs,this.writeBuffer=[],this._prevBufferLen=0,this._pingInterval=-1,this._pingTimeout=-1,this._maxPayload=-1,this._pingTimeoutTime=1/0,t&&typeof t=="object"&&(e=t,t=null),t){const s=Vt(t);e.hostname=s.host,e.secure=s.protocol==="https"||s.protocol==="wss",e.port=s.port,s.query&&(e.query=s.query)}else e.host&&(e.hostname=Vt(e.host).host);Bt(this,e),this.secure=e.secure!=null?e.secure:typeof location<"u"&&location.protocol==="https:",e.hostname&&!e.port&&(e.port=this.secure?"443":"80"),this.hostname=e.hostname||(typeof location<"u"?location.hostname:"localhost"),this.port=e.port||(typeof location<"u"&&location.port?location.port:this.secure?"443":"80"),this.transports=[],this._transportsByName={},e.transports.forEach(s=>{const r=s.prototype.name;this.transports.push(r),this._transportsByName[r]=s}),this.opts=Object.assign({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},e),this.opts.path=this.opts.path.replace(/\/$/,"")+(this.opts.addTrailingSlash?"/":""),typeof this.opts.query=="string"&&(this.opts.query=As(this.opts.query)),Jt&&(this.opts.closeOnBeforeunload&&(this._beforeunloadEventListener=()=>{this.transport&&(this.transport.removeAllListeners(),this.transport.close())},addEventListener("beforeunload",this._beforeunloadEventListener,!1)),this.hostname!=="localhost"&&(this._offlineEventListener=()=>{this._onClose("transport close",{description:"network connection lost"})},Tt.push(this._offlineEventListener))),this.opts.withCredentials&&(this._cookieJar=void 0),this._open()}createTransport(t){const e=Object.assign({},this.opts.query);e.EIO=Fe,e.transport=t,this.id&&(e.sid=this.id);const s=Object.assign({},this.opts,{query:e,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[t]);return new this._transportsByName[t](s)}_open(){if(this.transports.length===0){this.setTimeoutFn(()=>{this.emitReserved("error","No transports available")},0);return}const t=this.opts.rememberUpgrade&&J.priorWebsocketSuccess&&this.transports.indexOf("websocket")!==-1?"websocket":this.transports[0];this.readyState="opening";const e=this.createTransport(t);e.open(),this.setTransport(e)}setTransport(t){this.transport&&this.transport.removeAllListeners(),this.transport=t,t.on("drain",this._onDrain.bind(this)).on("packet",this._onPacket.bind(this)).on("error",this._onError.bind(this)).on("close",e=>this._onClose("transport close",e))}onOpen(){this.readyState="open",J.priorWebsocketSuccess=this.transport.name==="websocket",this.emitReserved("open"),this.flush()}_onPacket(t){if(this.readyState==="opening"||this.readyState==="open"||this.readyState==="closing")switch(this.emitReserved("packet",t),this.emitReserved("heartbeat"),t.type){case"open":this.onHandshake(JSON.parse(t.data));break;case"ping":this._sendPacket("pong"),this.emitReserved("ping"),this.emitReserved("pong"),this._resetPingTimeout();break;case"error":const e=new Error("server error");e.code=t.data,this._onError(e);break;case"message":this.emitReserved("data",t.data),this.emitReserved("message",t.data);break}}onHandshake(t){this.emitReserved("handshake",t),this.id=t.sid,this.transport.query.sid=t.sid,this._pingInterval=t.pingInterval,this._pingTimeout=t.pingTimeout,this._maxPayload=t.maxPayload,this.onOpen(),this.readyState!=="closed"&&this._resetPingTimeout()}_resetPingTimeout(){this.clearTimeoutFn(this._pingTimeoutTimer);const t=this._pingInterval+this._pingTimeout;this._pingTimeoutTime=Date.now()+t,this._pingTimeoutTimer=this.setTimeoutFn(()=>{this._onClose("ping timeout")},t),this.opts.autoUnref&&this._pingTimeoutTimer.unref()}_onDrain(){this.writeBuffer.splice(0,this._prevBufferLen),this._prevBufferLen=0,this.writeBuffer.length===0?this.emitReserved("drain"):this.flush()}flush(){if(this.readyState!=="closed"&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){const t=this._getWritablePackets();this.transport.send(t),this._prevBufferLen=t.length,this.emitReserved("flush")}}_getWritablePackets(){if(!(this._maxPayload&&this.transport.name==="polling"&&this.writeBuffer.length>1))return this.writeBuffer;let e=1;for(let s=0;s<this.writeBuffer.length;s++){const r=this.writeBuffer[s].data;if(r&&(e+=vs(r)),s>0&&e>this._maxPayload)return this.writeBuffer.slice(0,s);e+=2}return this.writeBuffer}_hasPingExpired(){if(!this._pingTimeoutTime)return!0;const t=Date.now()>this._pingTimeoutTime;return t&&(this._pingTimeoutTime=0,Pt(()=>{this._onClose("ping timeout")},this.setTimeoutFn)),t}write(t,e,s){return this._sendPacket("message",t,e,s),this}send(t,e,s){return this._sendPacket("message",t,e,s),this}_sendPacket(t,e,s,r){if(typeof e=="function"&&(r=e,e=void 0),typeof s=="function"&&(r=s,s=null),this.readyState==="closing"||this.readyState==="closed")return;s=s||{},s.compress=s.compress!==!1;const i={type:t,data:e,options:s};this.emitReserved("packetCreate",i),this.writeBuffer.push(i),r&&this.once("flush",r),this.flush()}close(){const t=()=>{this._onClose("forced close"),this.transport.close()},e=()=>{this.off("upgrade",e),this.off("upgradeError",e),t()},s=()=>{this.once("upgrade",e),this.once("upgradeError",e)};return(this.readyState==="opening"||this.readyState==="open")&&(this.readyState="closing",this.writeBuffer.length?this.once("drain",()=>{this.upgrading?s():t()}):this.upgrading?s():t()),this}_onError(t){if(J.priorWebsocketSuccess=!1,this.opts.tryAllTransports&&this.transports.length>1&&this.readyState==="opening")return this.transports.shift(),this._open();this.emitReserved("error",t),this._onClose("transport error",t)}_onClose(t,e){if(this.readyState==="opening"||this.readyState==="open"||this.readyState==="closing"){if(this.clearTimeoutFn(this._pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),Jt&&(this._beforeunloadEventListener&&removeEventListener("beforeunload",this._beforeunloadEventListener,!1),this._offlineEventListener)){const s=Tt.indexOf(this._offlineEventListener);s!==-1&&Tt.splice(s,1)}this.readyState="closed",this.id=null,this.emitReserved("close",t,e),this.writeBuffer=[],this._prevBufferLen=0}}}J.protocol=Fe;class js extends J{constructor(){super(...arguments),this._upgrades=[]}onOpen(){if(super.onOpen(),this.readyState==="open"&&this.opts.upgrade)for(let t=0;t<this._upgrades.length;t++)this._probe(this._upgrades[t])}_probe(t){let e=this.createTransport(t),s=!1;J.priorWebsocketSuccess=!1;const r=()=>{s||(e.send([{type:"ping",data:"probe"}]),e.once("packet",w=>{if(!s)if(w.type==="pong"&&w.data==="probe"){if(this.upgrading=!0,this.emitReserved("upgrading",e),!e)return;J.priorWebsocketSuccess=e.name==="websocket",this.transport.pause(()=>{s||this.readyState!=="closed"&&(p(),this.setTransport(e),e.send([{type:"upgrade"}]),this.emitReserved("upgrade",e),e=null,this.upgrading=!1,this.flush())})}else{const $=new Error("probe error");$.transport=e.name,this.emitReserved("upgradeError",$)}}))};function i(){s||(s=!0,p(),e.close(),e=null)}const o=w=>{const $=new Error("probe error: "+w);$.transport=e.name,i(),this.emitReserved("upgradeError",$)};function h(){o("transport closed")}function u(){o("socket closed")}function f(w){e&&w.name!==e.name&&i()}const p=()=>{e.removeListener("open",r),e.removeListener("error",o),e.removeListener("close",h),this.off("close",u),this.off("upgrading",f)};e.once("open",r),e.once("error",o),e.once("close",h),this.once("close",u),this.once("upgrading",f),this._upgrades.indexOf("webtransport")!==-1&&t!=="webtransport"?this.setTimeoutFn(()=>{s||e.open()},200):e.open()}onHandshake(t){this._upgrades=this._filterUpgrades(t.upgrades),super.onHandshake(t)}_filterUpgrades(t){const e=[];for(let s=0;s<t.length;s++)~this.transports.indexOf(t[s])&&e.push(t[s]);return e}}let Hs=class extends js{constructor(t,e={}){const s=typeof t=="object",r=s?{...t}:{...e};(!r.transports||r.transports&&typeof r.transports[0]=="string")&&(r.transports=(r.transports||["polling","websocket","webtransport"]).map(i=>Fs[i]).filter(i=>!!i)),super(s?r:t,r)}};function Gs(n,t="",e){let s=n;e=e||typeof location<"u"&&location,n==null&&(n=e.protocol+"//"+e.host),typeof n=="string"&&(n.charAt(0)==="/"&&(n.charAt(1)==="/"?n=e.protocol+n:n=e.host+n),/^(https?|wss?):\/\//.test(n)||(typeof e<"u"?n=e.protocol+"//"+n:n="https://"+n),s=Vt(n)),s.port||(/^(http|ws)$/.test(s.protocol)?s.port="80":/^(http|ws)s$/.test(s.protocol)&&(s.port="443")),s.path=s.path||"/";const i=s.host.indexOf(":")!==-1?"["+s.host+"]":s.host;return s.id=s.protocol+"://"+i+":"+s.port+t,s.href=s.protocol+"://"+i+(e&&e.port===s.port?"":":"+s.port),s}const Vs=typeof ArrayBuffer=="function",Js=n=>typeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(n):n.buffer instanceof ArrayBuffer,He=Object.prototype.toString,Ys=typeof Blob=="function"||typeof Blob<"u"&&He.call(Blob)==="[object BlobConstructor]",Ws=typeof File=="function"||typeof File<"u"&&He.call(File)==="[object FileConstructor]";function me(n){return Vs&&(n instanceof ArrayBuffer||Js(n))||Ys&&n instanceof Blob||Ws&&n instanceof File}function vt(n,t){if(!n||typeof n!="object")return!1;if(Array.isArray(n)){for(let e=0,s=n.length;e<s;e++)if(vt(n[e]))return!0;return!1}if(me(n))return!0;if(n.toJSON&&typeof n.toJSON=="function"&&arguments.length===1)return vt(n.toJSON(),!0);for(const e in n)if(Object.prototype.hasOwnProperty.call(n,e)&&vt(n[e]))return!0;return!1}function Xs(n){const t=[],e=n.data,s=n;return s.data=Yt(e,t),s.attachments=t.length,{packet:s,buffers:t}}function Yt(n,t){if(!n)return n;if(me(n)){const e={_placeholder:!0,num:t.length};return t.push(n),e}else if(Array.isArray(n)){const e=new Array(n.length);for(let s=0;s<n.length;s++)e[s]=Yt(n[s],t);return e}else if(typeof n=="object"&&!(n instanceof Date)){const e={};for(const s in n)Object.prototype.hasOwnProperty.call(n,s)&&(e[s]=Yt(n[s],t));return e}return n}function Ks(n,t){return n.data=Wt(n.data,t),delete n.attachments,n}function Wt(n,t){if(!n)return n;if(n&&n._placeholder===!0){if(typeof n.num=="number"&&n.num>=0&&n.num<t.length)return t[n.num];throw new Error("illegal attachments")}else if(Array.isArray(n))for(let e=0;e<n.length;e++)n[e]=Wt(n[e],t);else if(typeof n=="object")for(const e in n)Object.prototype.hasOwnProperty.call(n,e)&&(n[e]=Wt(n[e],t));return n}const zs=["connect","connect_error","disconnect","disconnecting","newListener","removeListener"];var g;(function(n){n[n.CONNECT=0]="CONNECT",n[n.DISCONNECT=1]="DISCONNECT",n[n.EVENT=2]="EVENT",n[n.ACK=3]="ACK",n[n.CONNECT_ERROR=4]="CONNECT_ERROR",n[n.BINARY_EVENT=5]="BINARY_EVENT",n[n.BINARY_ACK=6]="BINARY_ACK"})(g||(g={}));class Qs{constructor(t){this.replacer=t}encode(t){return(t.type===g.EVENT||t.type===g.ACK)&&vt(t)?this.encodeAsBinary({type:t.type===g.EVENT?g.BINARY_EVENT:g.BINARY_ACK,nsp:t.nsp,data:t.data,id:t.id}):[this.encodeAsString(t)]}encodeAsString(t){let e=""+t.type;return(t.type===g.BINARY_EVENT||t.type===g.BINARY_ACK)&&(e+=t.attachments+"-"),t.nsp&&t.nsp!=="/"&&(e+=t.nsp+","),t.id!=null&&(e+=t.id),t.data!=null&&(e+=JSON.stringify(t.data,this.replacer)),e}encodeAsBinary(t){const e=Xs(t),s=this.encodeAsString(e.packet),r=e.buffers;return r.unshift(s),r}}class ge extends E{constructor(t){super(),this.opts=Object.assign({reviver:void 0,maxAttachments:10},typeof t=="function"?{reviver:t}:t)}add(t){let e;if(typeof t=="string"){if(this.reconstructor)throw new Error("got plaintext data when reconstructing a packet");e=this.decodeString(t);const s=e.type===g.BINARY_EVENT;s||e.type===g.BINARY_ACK?(e.type=s?g.EVENT:g.ACK,this.reconstructor=new Zs(e),e.attachments===0&&super.emitReserved("decoded",e)):super.emitReserved("decoded",e)}else if(me(t)||t.base64)if(this.reconstructor)e=this.reconstructor.takeBinaryData(t),e&&(this.reconstructor=null,super.emitReserved("decoded",e));else throw new Error("got binary data when not reconstructing a packet");else throw new Error("Unknown type: "+t)}decodeString(t){let e=0;const s={type:Number(t.charAt(0))};if(g[s.type]===void 0)throw new Error("unknown packet type "+s.type);if(s.type===g.BINARY_EVENT||s.type===g.BINARY_ACK){const i=e+1;for(;t.charAt(++e)!=="-"&&e!=t.length;);const o=t.substring(i,e);if(o!=Number(o)||t.charAt(e)!=="-")throw new Error("Illegal attachments");const h=Number(o);if(!tn(h)||h<0)throw new Error("Illegal attachments");if(h>this.opts.maxAttachments)throw new Error("too many attachments");s.attachments=h}if(t.charAt(e+1)==="/"){const i=e+1;for(;++e&&!(t.charAt(e)===","||e===t.length););s.nsp=t.substring(i,e)}else s.nsp="/";const r=t.charAt(e+1);if(r!==""&&Number(r)==r){const i=e+1;for(;++e;){const o=t.charAt(e);if(o==null||Number(o)!=o){--e;break}if(e===t.length)break}s.id=Number(t.substring(i,e+1))}if(t.charAt(++e)){const i=this.tryParse(t.substr(e));if(ge.isPayloadValid(s.type,i))s.data=i;else throw new Error("invalid payload")}return s}tryParse(t){try{return JSON.parse(t,this.opts.reviver)}catch{return!1}}static isPayloadValid(t,e){switch(t){case g.CONNECT:return Oe(e);case g.DISCONNECT:return e===void 0;case g.CONNECT_ERROR:return typeof e=="string"||Oe(e);case g.EVENT:case g.BINARY_EVENT:return Array.isArray(e)&&(typeof e[0]=="number"||typeof e[0]=="string"&&zs.indexOf(e[0])===-1);case g.ACK:case g.BINARY_ACK:return Array.isArray(e)}}destroy(){this.reconstructor&&(this.reconstructor.finishedReconstruction(),this.reconstructor=null)}}class Zs{constructor(t){this.packet=t,this.buffers=[],this.reconPack=t}takeBinaryData(t){if(this.buffers.push(t),this.buffers.length===this.reconPack.attachments){const e=Ks(this.reconPack,this.buffers);return this.finishedReconstruction(),e}return null}finishedReconstruction(){this.reconPack=null,this.buffers=[]}}const tn=Number.isInteger||function(n){return typeof n=="number"&&isFinite(n)&&Math.floor(n)===n};function Oe(n){return Object.prototype.toString.call(n)==="[object Object]"}const en=Object.freeze(Object.defineProperty({__proto__:null,Decoder:ge,Encoder:Qs,get PacketType(){return g}},Symbol.toStringTag,{value:"Module"}));function C(n,t,e){return n.on(t,e),function(){n.off(t,e)}}const sn=Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1});class Ge extends E{constructor(t,e,s){super(),this.connected=!1,this.recovered=!1,this.receiveBuffer=[],this.sendBuffer=[],this._queue=[],this._queueSeq=0,this.ids=0,this.acks={},this.flags={},this.io=t,this.nsp=e,s&&s.auth&&(this.auth=s.auth),this._opts=Object.assign({},s),this.io._autoConnect&&this.open()}get disconnected(){return!this.connected}subEvents(){if(this.subs)return;const t=this.io;this.subs=[C(t,"open",this.onopen.bind(this)),C(t,"packet",this.onpacket.bind(this)),C(t,"error",this.onerror.bind(this)),C(t,"close",this.onclose.bind(this))]}get active(){return!!this.subs}connect(){return this.connected?this:(this.subEvents(),this.io._reconnecting||this.io.open(),this.io._readyState==="open"&&this.onopen(),this)}open(){return this.connect()}send(...t){return t.unshift("message"),this.emit.apply(this,t),this}emit(t,...e){var s,r,i;if(sn.hasOwnProperty(t))throw new Error('"'+t.toString()+'" is a reserved event name');if(e.unshift(t),this._opts.retries&&!this.flags.fromQueue&&!this.flags.volatile)return this._addToQueue(e),this;const o={type:g.EVENT,data:e};if(o.options={},o.options.compress=this.flags.compress!==!1,typeof e[e.length-1]=="function"){const p=this.ids++,w=e.pop();this._registerAckCallback(p,w),o.id=p}const h=(r=(s=this.io.engine)===null||s===void 0?void 0:s.transport)===null||r===void 0?void 0:r.writable,u=this.connected&&!(!((i=this.io.engine)===null||i===void 0)&&i._hasPingExpired());return this.flags.volatile&&!h||(u?(this.notifyOutgoingListeners(o),this.packet(o)):this.sendBuffer.push(o)),this.flags={},this}_registerAckCallback(t,e){var s;const r=(s=this.flags.timeout)!==null&&s!==void 0?s:this._opts.ackTimeout;if(r===void 0){this.acks[t]=e;return}const i=this.io.setTimeoutFn(()=>{delete this.acks[t];for(let h=0;h<this.sendBuffer.length;h++)this.sendBuffer[h].id===t&&this.sendBuffer.splice(h,1);e.call(this,new Error("operation has timed out"))},r),o=(...h)=>{this.io.clearTimeoutFn(i),e.apply(this,h)};o.withError=!0,this.acks[t]=o}emitWithAck(t,...e){return new Promise((s,r)=>{const i=(o,h)=>o?r(o):s(h);i.withError=!0,e.push(i),this.emit(t,...e)})}_addToQueue(t){let e;typeof t[t.length-1]=="function"&&(e=t.pop());const s={id:this._queueSeq++,tryCount:0,pending:!1,args:t,flags:Object.assign({fromQueue:!0},this.flags)};t.push((r,...i)=>(this._queue[0],r!==null?s.tryCount>this._opts.retries&&(this._queue.shift(),e&&e(r)):(this._queue.shift(),e&&e(null,...i)),s.pending=!1,this._drainQueue())),this._queue.push(s),this._drainQueue()}_drainQueue(t=!1){if(!this.connected||this._queue.length===0)return;const e=this._queue[0];e.pending&&!t||(e.pending=!0,e.tryCount++,this.flags=e.flags,this.emit.apply(this,e.args))}packet(t){t.nsp=this.nsp,this.io._packet(t)}onopen(){typeof this.auth=="function"?this.auth(t=>{this._sendConnectPacket(t)}):this._sendConnectPacket(this.auth)}_sendConnectPacket(t){this.packet({type:g.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},t):t})}onerror(t){this.connected||this.emitReserved("connect_error",t)}onclose(t,e){this.connected=!1,delete this.id,this.emitReserved("disconnect",t,e),this._clearAcks()}_clearAcks(){Object.keys(this.acks).forEach(t=>{if(!this.sendBuffer.some(s=>String(s.id)===t)){const s=this.acks[t];delete this.acks[t],s.withError&&s.call(this,new Error("socket has been disconnected"))}})}onpacket(t){if(t.nsp===this.nsp)switch(t.type){case g.CONNECT:t.data&&t.data.sid?this.onconnect(t.data.sid,t.data.pid):this.emitReserved("connect_error",new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case g.EVENT:case g.BINARY_EVENT:this.onevent(t);break;case g.ACK:case g.BINARY_ACK:this.onack(t);break;case g.DISCONNECT:this.ondisconnect();break;case g.CONNECT_ERROR:this.destroy();const s=new Error(t.data.message);s.data=t.data.data,this.emitReserved("connect_error",s);break}}onevent(t){const e=t.data||[];t.id!=null&&e.push(this.ack(t.id)),this.connected?this.emitEvent(e):this.receiveBuffer.push(Object.freeze(e))}emitEvent(t){if(this._anyListeners&&this._anyListeners.length){const e=this._anyListeners.slice();for(const s of e)s.apply(this,t)}super.emit.apply(this,t),this._pid&&t.length&&typeof t[t.length-1]=="string"&&(this._lastOffset=t[t.length-1])}ack(t){const e=this;let s=!1;return function(...r){s||(s=!0,e.packet({type:g.ACK,id:t,data:r}))}}onack(t){const e=this.acks[t.id];typeof e=="function"&&(delete this.acks[t.id],e.withError&&t.data.unshift(null),e.apply(this,t.data))}onconnect(t,e){this.id=t,this.recovered=e&&this._pid===e,this._pid=e,this.connected=!0,this.emitBuffered(),this._drainQueue(!0),this.emitReserved("connect")}emitBuffered(){this.receiveBuffer.forEach(t=>this.emitEvent(t)),this.receiveBuffer=[],this.sendBuffer.forEach(t=>{this.notifyOutgoingListeners(t),this.packet(t)}),this.sendBuffer=[]}ondisconnect(){this.destroy(),this.onclose("io server disconnect")}destroy(){this.subs&&(this.subs.forEach(t=>t()),this.subs=void 0),this.io._destroy(this)}disconnect(){return this.connected&&this.packet({type:g.DISCONNECT}),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}close(){return this.disconnect()}compress(t){return this.flags.compress=t,this}get volatile(){return this.flags.volatile=!0,this}timeout(t){return this.flags.timeout=t,this}onAny(t){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(t),this}prependAny(t){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(t),this}offAny(t){if(!this._anyListeners)return this;if(t){const e=this._anyListeners;for(let s=0;s<e.length;s++)if(t===e[s])return e.splice(s,1),this}else this._anyListeners=[];return this}listenersAny(){return this._anyListeners||[]}onAnyOutgoing(t){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.push(t),this}prependAnyOutgoing(t){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.unshift(t),this}offAnyOutgoing(t){if(!this._anyOutgoingListeners)return this;if(t){const e=this._anyOutgoingListeners;for(let s=0;s<e.length;s++)if(t===e[s])return e.splice(s,1),this}else this._anyOutgoingListeners=[];return this}listenersAnyOutgoing(){return this._anyOutgoingListeners||[]}notifyOutgoingListeners(t){if(this._anyOutgoingListeners&&this._anyOutgoingListeners.length){const e=this._anyOutgoingListeners.slice();for(const s of e)s.apply(this,t.data)}}}function rt(n){n=n||{},this.ms=n.min||100,this.max=n.max||1e4,this.factor=n.factor||2,this.jitter=n.jitter>0&&n.jitter<=1?n.jitter:0,this.attempts=0}rt.prototype.duration=function(){var n=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var t=Math.random(),e=Math.floor(t*this.jitter*n);n=Math.floor(t*10)&1?n+e:n-e}return Math.min(n,this.max)|0};rt.prototype.reset=function(){this.attempts=0};rt.prototype.setMin=function(n){this.ms=n};rt.prototype.setMax=function(n){this.max=n};rt.prototype.setJitter=function(n){this.jitter=n};class Xt extends E{constructor(t,e){var s;super(),this.nsps={},this.subs=[],t&&typeof t=="object"&&(e=t,t=void 0),e=e||{},e.path=e.path||"/socket.io",this.opts=e,Bt(this,e),this.reconnection(e.reconnection!==!1),this.reconnectionAttempts(e.reconnectionAttempts||1/0),this.reconnectionDelay(e.reconnectionDelay||1e3),this.reconnectionDelayMax(e.reconnectionDelayMax||5e3),this.randomizationFactor((s=e.randomizationFactor)!==null&&s!==void 0?s:.5),this.backoff=new rt({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(e.timeout==null?2e4:e.timeout),this._readyState="closed",this.uri=t;const r=e.parser||en;this.encoder=new r.Encoder,this.decoder=new r.Decoder,this._autoConnect=e.autoConnect!==!1,this._autoConnect&&this.open()}reconnection(t){return arguments.length?(this._reconnection=!!t,t||(this.skipReconnect=!0),this):this._reconnection}reconnectionAttempts(t){return t===void 0?this._reconnectionAttempts:(this._reconnectionAttempts=t,this)}reconnectionDelay(t){var e;return t===void 0?this._reconnectionDelay:(this._reconnectionDelay=t,(e=this.backoff)===null||e===void 0||e.setMin(t),this)}randomizationFactor(t){var e;return t===void 0?this._randomizationFactor:(this._randomizationFactor=t,(e=this.backoff)===null||e===void 0||e.setJitter(t),this)}reconnectionDelayMax(t){var e;return t===void 0?this._reconnectionDelayMax:(this._reconnectionDelayMax=t,(e=this.backoff)===null||e===void 0||e.setMax(t),this)}timeout(t){return arguments.length?(this._timeout=t,this):this._timeout}maybeReconnectOnOpen(){!this._reconnecting&&this._reconnection&&this.backoff.attempts===0&&this.reconnect()}open(t){if(~this._readyState.indexOf("open"))return this;this.engine=new Hs(this.uri,this.opts);const e=this.engine,s=this;this._readyState="opening",this.skipReconnect=!1;const r=C(e,"open",function(){s.onopen(),t&&t()}),i=h=>{this.cleanup(),this._readyState="closed",this.emitReserved("error",h),t?t(h):this.maybeReconnectOnOpen()},o=C(e,"error",i);if(this._timeout!==!1){const h=this._timeout,u=this.setTimeoutFn(()=>{r(),i(new Error("timeout")),e.close()},h);this.opts.autoUnref&&u.unref(),this.subs.push(()=>{this.clearTimeoutFn(u)})}return this.subs.push(r),this.subs.push(o),this}connect(t){return this.open(t)}onopen(){this.cleanup(),this._readyState="open",this.emitReserved("open");const t=this.engine;this.subs.push(C(t,"ping",this.onping.bind(this)),C(t,"data",this.ondata.bind(this)),C(t,"error",this.onerror.bind(this)),C(t,"close",this.onclose.bind(this)),C(this.decoder,"decoded",this.ondecoded.bind(this)))}onping(){this.emitReserved("ping")}ondata(t){try{this.decoder.add(t)}catch(e){this.onclose("parse error",e)}}ondecoded(t){Pt(()=>{this.emitReserved("packet",t)},this.setTimeoutFn)}onerror(t){this.emitReserved("error",t)}socket(t,e){let s=this.nsps[t];return s?this._autoConnect&&!s.active&&s.connect():(s=new Ge(this,t,e),this.nsps[t]=s),s}_destroy(t){const e=Object.keys(this.nsps);for(const s of e)if(this.nsps[s].active)return;this._close()}_packet(t){const e=this.encoder.encode(t);for(let s=0;s<e.length;s++)this.engine.write(e[s],t.options)}cleanup(){this.subs.forEach(t=>t()),this.subs.length=0,this.decoder.destroy()}_close(){this.skipReconnect=!0,this._reconnecting=!1,this.onclose("forced close")}disconnect(){return this._close()}onclose(t,e){var s;this.cleanup(),(s=this.engine)===null||s===void 0||s.close(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",t,e),this._reconnection&&!this.skipReconnect&&this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;const t=this;if(this.backoff.attempts>=this._reconnectionAttempts)this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{const e=this.backoff.duration();this._reconnecting=!0;const s=this.setTimeoutFn(()=>{t.skipReconnect||(this.emitReserved("reconnect_attempt",t.backoff.attempts),!t.skipReconnect&&t.open(r=>{r?(t._reconnecting=!1,t.reconnect(),this.emitReserved("reconnect_error",r)):t.onreconnect()}))},e);this.opts.autoUnref&&s.unref(),this.subs.push(()=>{this.clearTimeoutFn(s)})}}onreconnect(){const t=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",t)}}const it={};function ut(n,t){typeof n=="object"&&(t=n,n=void 0),t=t||{};const e=Gs(n,t.path||"/socket.io"),s=e.source,r=e.id,i=e.path,o=it[r]&&i in it[r].nsps,h=t.forceNew||t["force new connection"]||t.multiplex===!1||o;let u;return h?u=new Xt(s,t):(it[r]||(it[r]=new Xt(s,t)),u=it[r]),e.query&&!t.query&&(t.query=e.queryKey),u.socket(e.path,t)}Object.assign(ut,{Manager:Xt,Socket:Ge,io:ut,connect:ut});class Kt extends Error{constructor(t,e){super(`The document history advanced while this version was being prepared: expected head ${t}, found ${e??"none"}. Read the timeline again and rebuild on the new head.`),this.expectedGuid=t,this.actualGuid=e,this.name="StaleHistoryError"}}const Ie="bimterop",zt="revitflow_history.json",z="revitflow_ops.json",xe="revitflow/ops@1",Ve="revitflow_model.frag",Je="revitflow_",_t=()=>`v-${Date.now()}`;function Ye(n,t){return n.filter(e=>String(e.parentId??"")===t)}function M(n){return String(n._id??n.id??"")}var x,dt,Qt;class We{constructor(t,e){b(this,dt);b(this,x);this.client=t,this.projectId=e}async docs(){const t=await a(this,dt,Qt).call(this);if(!t)return[];const e=await this.client.listFolders({parentFolderId:t,projectId:this.projectId}),s=[];for(const r of Ye(e,t)){const i=String(r.name??""),o=i.indexOf("-");if(o<=0)continue;const u=(await this.client.listFiles({folderId:M(r)})).map(w=>String(w.name??"")),f=u.find(w=>w===Ve)??u.find(w=>w.endsWith(".frag")&&!w.startsWith(Je)),p=u.includes(zt)||u.includes(z)||!!f;s.push({source:i.slice(0,o),docId:i.slice(o+1),modelName:f,...p?{}:{empty:!0}})}return s}doc(t,e){return new Xe(this.client,this,t,e)}async rootFolderId(t=!1){if(l(this,x))return l(this,x);const e=await a(this,dt,Qt).call(this);if(e)return e;if(!t)return;const s=await this.client.createFolder(Ie,void 0,this.projectId);return _(this,x,M(s)),l(this,x)}}x=new WeakMap,dt=new WeakSet,Qt=async function(){if(l(this,x))return l(this,x);const e=(await this.client.listFolders({projectId:this.projectId})).find(s=>String(s.name??"")===Ie&&!s.parentId);return e&&_(this,x,M(e)),l(this,x)};var L,y,at,ct,Zt,St,kt,te,At,ht,Ot,ee,Ke;class Xe{constructor(t,e,s,r){b(this,y);b(this,L);this.client=t,this.project=e,this.source=s,this.docId=r}async timeline(){const t=await a(this,y,At).call(this);return we((t==null?void 0:t.commits)??[])}async latest(){const t=await this.timeline();return t.length?t[t.length-1]:null}async delta(t){if(!t.deltaId)throw new Error(`Version ${t.guid} carries no delta: it is a full export — read model() instead.`);return await(await this.client.downloadHiddenFile(t.deltaId)).blob()}async model(){const t=await a(this,y,kt).call(this);if(!t)throw new Error(`Document ${this.source}-${this.docId} has no model file yet.`);return await(await this.client.downloadFile(t.id)).blob()}async sync(t){var h;const e=await a(this,y,ct).call(this,!0);let s=await a(this,y,At).call(this)??{model:this.docId,commits:[]};const r=Ce(s.commits);if(t.expectedLatestGuid!==void 0&&(r==null?void 0:r.guid)!==t.expectedLatestGuid)throw new Kt(t.expectedLatestGuid,r==null?void 0:r.guid);const i={guid:Rt(),...r?{parents:[r.guid]}:{},author:t.author,source:t.source,timestamp:new Date().toISOString(),...t.message?{message:t.message}:{},...t.userId?{userId:t.userId}:{},...(h=t.appliedOps)!=null&&h.length?{appliedOps:t.appliedOps}:{},changes:t.changes,counts:nn(t.changes)};if(t.model&&(await a(this,y,Ke).call(this,e,t.model),i.full=!0),t.delta){const u=await a(this,y,kt).call(this);if(!u)throw new Error("A delta needs the model file to hang from: sync a full model first.");const f=await this.client.createHiddenFile(t.delta,u.id);i.deltaId=String(f._id??f.id)}const o=await a(this,y,At).call(this);if(o){s=o;const u=Ce(s.commits);if(t.expectedLatestGuid!==void 0&&(u==null?void 0:u.guid)!==t.expectedLatestGuid)throw new Kt(t.expectedLatestGuid,u==null?void 0:u.guid);u&&!i.parents&&(i.parents=[u.guid])}return s.commits.push(i),await a(this,y,Ot).call(this,e,zt,s),i}async suggestions(){const t=await a(this,y,ht).call(this);return(t==null?void 0:t.ops)??[]}async pendingSuggestions(){return(await this.suggestions()).filter(t=>t.state==="pending")}async suggest(t){const e=await a(this,y,ct).call(this,!0),s=await a(this,y,ht).call(this)??{schema:xe,ops:[]},r=await a(this,y,St).call(this,z),i={opId:t.opId??Rt(),title:t.title,verb:t.verb,author:t.author,createdAt:new Date().toISOString(),state:"pending",...t.targets!==void 0?{targets:t.targets}:{},...t.batchId?{batchId:t.batchId}:{},...t.userId?{userId:t.userId}:{},...t.baseCommitGuid?{baseCommitGuid:t.baseCommitGuid}:{}};if(t.payload){const h=r??await a(this,y,ee).call(this,e,z,s),u=await this.client.createHiddenFile(t.payload,h.id);i.fragId=String(u._id??u.id)}const o=await a(this,y,ht).call(this)??s;return o.schema??(o.schema=xe),o.ops.push(i),await a(this,y,Ot).call(this,e,z,o),i}async suggestionPayload(t){if(!t.fragId)throw new Error(`Suggestion ${t.opId} carries no payload.`);return await(await this.client.downloadHiddenFile(t.fragId)).blob()}async resolveSuggestion(t,e){const s=await a(this,y,ct).call(this,!1);if(!s)throw new Error("This document has no suggestion queue.");const r=await a(this,y,ht).call(this),i=r==null?void 0:r.ops.find(o=>o.opId===t);if(!r||!i)throw new Error(`No suggestion ${t} in this document's queue.`);return Object.assign(i,e),await a(this,y,Ot).call(this,s,z,r),i}}L=new WeakMap,y=new WeakSet,at=function(){return`${this.source}-${this.docId}`},ct=async function(t){if(l(this,L))return l(this,L);const e=await this.project.rootFolderId(t);if(!e)throw new Error(`Project ${this.project.projectId} has no connected documents yet.`);const s=await this.client.listFolders({parentFolderId:e,projectId:this.project.projectId}),r=Ye(s,e).find(o=>String(o.name??"")===l(this,y,at));if(r)return _(this,L,M(r)),l(this,L);if(!t)throw new Error(`Document ${l(this,y,at)} does not exist in this project.`);const i=await this.client.createFolder(l(this,y,at),e,this.project.projectId);return _(this,L,M(i)),l(this,L)},Zt=async function(){const t=await a(this,y,ct).call(this,!1);return(await this.client.listFiles({folderId:t})).map(s=>({id:M(s),name:String(s.name??"")}))},St=async function(t){try{return(await a(this,y,Zt).call(this)).find(e=>e.name===t)}catch{return}},kt=async function(){try{const t=await a(this,y,Zt).call(this);return t.find(e=>e.name===Ve)??t.find(e=>e.name.endsWith(".frag")&&!e.name.startsWith(Je))}catch{return}},te=async function(t){const e=await a(this,y,St).call(this,t);if(!e)return;const r=await(await this.client.downloadFile(e.id)).text();if(r.trim())return JSON.parse(r)},At=function(){return a(this,y,te).call(this,zt)},ht=function(){return a(this,y,te).call(this,z)},Ot=async function(t,e,s){const r=new Blob([JSON.stringify(s)],{type:"application/json"}),i=await a(this,y,St).call(this,e);return i?(await this.client.updateFile(i.id,{file:r,versionTag:_t()}),i):await a(this,y,ee).call(this,t,e,s)},ee=async function(t,e,s){const r=new Blob([JSON.stringify(s)],{type:"application/json"}),i=await this.client.createFile({file:r,name:e,versionTag:_t(),parentFolderId:t,projectId:this.project.projectId}),o=i.item;return{id:M(o??i),name:e}},Ke=async function(t,e){const s=await a(this,y,kt).call(this);if(s)return await this.client.updateFile(s.id,{file:e,versionTag:_t()}),s;const r=`${l(this,y,at)}.frag`,i=await this.client.createFile({file:e,name:r,versionTag:_t(),parentFolderId:t,projectId:this.project.projectId}),o=i.item;return{id:M(o??i),name:r}};function nn(n){const t={added:0,modified:0,removed:0};for(const e of n)e.type==="create"?t.added++:e.type==="delete"?t.removed++:t.modified++;return t}function we(n){var u;if(n.length<=1)return n.forEach((f,p)=>f.ordinal=p),[...n];const t=new Map(n.map(f=>[f.guid,f])),e=new Map,s=[];for(const f of n){const p=(u=f.parents)==null?void 0:u[0];if(p&&t.has(p)){const w=e.get(p)??[];w.push(f),e.set(p,w)}else s.push(f)}const r=(f,p)=>String(f.timestamp).localeCompare(String(p.timestamp));s.sort(r);const i=[],o=[...s].reverse(),h=new Set;for(;o.length;){const f=o.pop();if(h.has(f.guid))continue;h.add(f.guid),i.push(f);const p=(e.get(f.guid)??[]).sort(r);for(let w=p.length-1;w>=0;w--)o.push(p[w])}for(const f of n)h.has(f.guid)||i.push(f);return i.forEach((f,p)=>f.ordinal=p),i}function Ce(n){const t=we(n);return t[t.length-1]}function Rt(){const n=globalThis.crypto;return n!=null&&n.randomUUID?n.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,t=>{const e=Math.random()*16|0;return(t==="x"?e:e&3|8).toString(16)})}var j,ft,se;class ze{constructor(t){b(this,ft);b(this,j,new Map);this.client=t}register(t){if(l(this,j).has(t.name))throw new Error(`A recipe named "${t.name}" is already registered.`);l(this,j).set(t.name,t)}list(t){return[...l(this,j).values()].filter(s=>(!(t!=null&&t.to)||s.to===t.to)&&(!(t!=null&&t.input)||s.inputs.includes(t.input)))}get(t){return l(this,j).get(t)}async plan(t,e){const{base:s,opId:r,result:i}=await a(this,ft,se).call(this,t,e);return{opId:r,projectId:e.projectId,target:e.target,...s!=null&&s.guid?{baseCommitGuid:s.guid}:{},result:i}}async queue(t,e){return{suggestion:await this.client.history(t.projectId).doc(t.target.source,t.target.docId).suggest({opId:t.opId,title:t.result.title,verb:t.result.verb,author:e.author,payload:t.result.payload,targets:t.result.targets,userId:e.userId,baseCommitGuid:t.baseCommitGuid}),result:t.result}}async run(t,e){const{targetDoc:s,base:r,opId:i,result:o}=await a(this,ft,se).call(this,t,e);return{suggestion:await s.suggest({opId:i,title:o.title,verb:o.verb,author:e.author,payload:o.payload,targets:o.targets,userId:e.userId,baseCommitGuid:r==null?void 0:r.guid}),result:o}}}j=new WeakMap,ft=new WeakSet,se=async function(t,e){const s=l(this,j).get(t);if(!s)throw new Error(`No recipe named "${t}" is registered.`);if(s.to!==e.target.source)throw new Error(`Recipe "${t}" writes ${s.to}, but the target document belongs to ${e.target.source}.`);const r=this.client.history(e.projectId).doc(e.target.source,e.target.docId),i=await r.latest(),o=Rt(),h=await s.run({client:this.client,projectId:e.projectId,targetDoc:r,opId:o,input:e.input,settings:e.settings??{}});return{recipe:s,targetDoc:r,base:i,opId:o,result:h}};const ne=100;function rn(n){try{const t=JSON.parse(n);if(t&&typeof t=="object"){const e=t;return{message:typeof e.message=="string"?e.message:void 0,code:typeof e.code=="string"?e.code:void 0,details:e.details}}}catch{}return{}}function on(n){if(!n||typeof n!="object")return;const t=n.retryAfter;return typeof t=="number"&&Number.isFinite(t)&&t>=0?t:void 0}class Lt extends Error{constructor(e,s,r,i){const o=rn(r);super(o.message??`${s||"Request failed"} (${e})`);v(this,"status");v(this,"code");v(this,"details");v(this,"body");v(this,"retryAfter");this.name="RequestError",this.status=e,this.code=o.code,this.details=o.details,this.body=r,this.retryAfter=i??on(o.details)}}const R="item/folder",m="item",D="processor",an="npm-registry",B="hidden",Mt="FILE",jt="TOOL",Ht="APP",cn=500,$e=3e4,hn=.25,ln=n=>new Promise(t=>setTimeout(t,n));function un(n){var r,i;const t=(i=(r=n.headers)==null?void 0:r.get)==null?void 0:i.call(r,"Retry-After");if(!t)return;const e=Number(t);if(Number.isFinite(e))return Math.max(0,e);const s=Date.parse(t);if(!Number.isNaN(s))return Math.max(0,(s-Date.now())/1e3)}function dn(n){return n instanceof Lt?n.status===429||n.status>=500:!0}function fn(n,t){const e=Math.min(cn*2**t,$e),s=e*hn*Math.random(),r=n instanceof Lt&&n.retryAfter!=null?n.retryAfter*1e3:void 0;return r!=null?Math.min(r,$e)+s:e+s}var c,re,d,U,pt,lt,It,xt,ie,oe,Qe;const _e=class _e{constructor(t,e,s){b(this,c);v(this,"apiUrl");v(this,"accessToken");v(this,"wsUrl");v(this,"retries");v(this,"useBearer");v(this,"builtInGlobals",null);v(this,"localServerUrl",null);v(this,"context");b(this,pt);const{retries:r=0,useBearer:i=!1,localServerUrl:o}=s||{};let h=e;if(h.charAt(h.length-1)==="/"&&(h=h.slice(0,-1)),this.apiUrl=`${h}/api`,this.accessToken=t,this.wsUrl=h,this.retries=r,this.useBearer=i,this.context={appId:"",projectId:"",accessToken:t,apiUrl:e},o){let u=o;u.charAt(u.length-1)==="/"&&(u=u.slice(0,-1)),this.localServerUrl=u}}static fromPlatformContext(t){const e=(typeof window<"u"?window.__THATOPEN_CONTEXT__:null)||{appId:"",projectId:"",accessToken:"",apiUrl:""},s=new _e(e.accessToken,e.apiUrl,{...t,useBearer:!0});return s.context=e,s}setRetries(t){this.retries=t}setBuiltInGlobals(t){this.builtInGlobals=t}get socketOrigin(){return this.wsUrl.split("?")[0]}async resolveAccessToken(){return this.accessToken}async request(t,e,s){return a(this,c,d).call(this,t,e,s)}async listFiles(t){const{folderId:e,archived:s,projectId:r}=t||{};return e?await a(this,c,d).call(this,"GET",`${R}/${e}/items`,{query:{itemType:Mt,archived:s}}):await a(this,c,d).call(this,"GET",`${m}`,{query:{itemType:Mt,archived:s,...r&&{projectId:r}}})}async getFile(t,e){return await a(this,c,oe).call(this,t,e)}async createFile(t){return await a(this,c,xt).call(this,t,Mt)}async updateFile(t,e){return await a(this,c,ie).call(this,t,e)}async archiveFile(t){return await a(this,c,d).call(this,"DELETE",`${m}/${t}`)}async recoverFile(t){return await a(this,c,d).call(this,"PUT",`${m}/${t}/recover`)}async downloadFile(t,e){return await a(this,c,It).call(this,t,e)}async getFileVersionMetadata(t,e,s){const{withDraft:r}=s||{};return await a(this,c,d).call(this,"GET",`${m}/${encodeURIComponent(t)}/version/${encodeURIComponent(e)}/metadata`,{query:{...r&&{withDraft:"true"}}})}async updateFileVersionMetadata(t,e,s){return await a(this,c,d).call(this,"PUT",`${m}/${encodeURIComponent(t)}/version/${encodeURIComponent(e)}/metadata`,{body:JSON.stringify({metadata:s}),contentType:"application/json"})}async deleteFileVersionMetadata(t,e){return await a(this,c,d).call(this,"DELETE",`${m}/${encodeURIComponent(t)}/version/${encodeURIComponent(e)}/metadata`)}async getFileVersionMetadataBatch(t,e){const{withDraft:s}=e||{};return await a(this,c,lt).call(this,t,async r=>(await a(this,c,d).call(this,"POST",`${m}/batch/version-metadata`,{body:JSON.stringify({entries:r,...s!==void 0&&{withDraft:s}}),contentType:"application/json"})).results)}async listFolders(t){const{archived:e,parentFolderId:s,projectId:r}=t||{};return await a(this,c,d).call(this,"GET",R,{query:{parentFolderId:s,archived:e,...r&&{projectId:r}}})}async getFolder(t){return await a(this,c,d).call(this,"GET",`${R}/${t}`)}async getFoldersBatch(t){return await a(this,c,lt).call(this,t,async e=>(await a(this,c,d).call(this,"POST",`${m}/batch/folders`,{body:JSON.stringify({folderIds:e}),contentType:"application/json"})).results)}async createFolder(t,e,s){return await a(this,c,d).call(this,"POST",R,{body:JSON.stringify({name:t,...e&&{parentId:e},...s&&{projectId:s}}),contentType:"application/json"})}async updateFolder(t,e){const{name:s}=e;return await a(this,c,d).call(this,"PUT",`${R}/${t}`,{body:JSON.stringify({name:s}),contentType:"application/json"})}async archiveFolder(t){return await a(this,c,d).call(this,"DELETE",`${R}/${t}`)}async recoverFolder(t){return await a(this,c,d).call(this,"PUT",`${R}/${t}/recover`)}async downloadFolder(t){return await a(this,c,U).call(this,`${R}/${t}/download`)}async listComponents(t){const{folderId:e,ShowVersions:s,projectId:r}=t||{};return e?await a(this,c,d).call(this,"GET",`${R}/${e}/items`,{query:{itemType:jt,...s&&{ShowVersions:s}}}):await a(this,c,d).call(this,"GET",`${m}`,{query:{itemType:jt,...s&&{ShowVersions:s},...r&&{projectId:r}}})}async getComponent(t,e){return await a(this,c,oe).call(this,t,e)}async createComponent(t){const{componentProps:e}=t;return await a(this,c,xt).call(this,t,jt,e)}async updateComponent(t,e){const{componentProps:s}=e;return await a(this,c,ie).call(this,t,e,s)}async downloadComponent(t,e){return await a(this,c,It).call(this,t,e)}async downloadComponentBundle(t,e){const{versionTag:s,withDraft:r}=e||{};return await a(this,c,U).call(this,`${m}/${t}/download/bundle`,{query:{...s&&{versionTag:s},...r&&{withDraft:r}}})}async archiveComponent(t){return await a(this,c,d).call(this,"DELETE",`${m}/${t}`)}async recoverComponent(t){return await a(this,c,d).call(this,"PUT",`${m}/${t}/recover`)}async getBuiltInComponent(t){return await(await a(this,c,U).call(this,`built-in/${t}/bundle`)).text()}async initBuiltInComponent(t,e,s){const r=await this.getBuiltInComponent(t.uuid),i=s??this.builtInGlobals??(typeof window<"u"?window.ThatOpenCompany:{})??{},o=Object.keys(i),h=o.map(w=>i[w]),f=new Function(...o,`${r}
2
+ return main;`)(...h),p=(f==null?void 0:f.componentDefinition)??f;e.get(p)}async initBuiltInComponents(t,...e){await Promise.all(e.map(s=>this.initBuiltInComponent(s,t)))}async setup(t,...e){var o,h;const s=t.OBC,r=t.BUI;if(!(s!=null&&s.Components))throw new Error("globals.OBC must include Components");if(!(r!=null&&r.Manager))throw new Error("globals.BUI must include Manager");const i=new s.Components;return r.Manager.init(),this.setBuiltInGlobals(t),await this.initBuiltInComponents(i,...e),i.init(),(h=(o=this.context.appEventOrchestrator)==null?void 0:o.appLoaded)==null||h.call(o),{components:i}}throwError(t,e){var s,r;(r=(s=this.context.appEventOrchestrator)==null?void 0:s.appError)==null||r.call(s,t,e)}async listApps(t){const{folderId:e,ShowVersions:s,projectId:r}=t||{};return e?await a(this,c,d).call(this,"GET",`${R}/${e}/items`,{query:{itemType:Ht,...s&&{ShowVersions:s}}}):await a(this,c,d).call(this,"GET",`${m}`,{query:{itemType:Ht,...s&&{ShowVersions:s},...r&&{projectId:r}}})}async createApp(t){const{appProps:e}=t;return await a(this,c,xt).call(this,t,Ht,e)}async downloadApp(t,e){return await a(this,c,It).call(this,t,e)}async downloadAppBundle(t,e){const{versionTag:s,withDraft:r}=e||{};return await a(this,c,U).call(this,`${m}/${t}/download/bundle`,{query:{...s&&{versionTag:s},...r&&{withDraft:r}}})}async archiveApp(t){return await a(this,c,d).call(this,"DELETE",`${m}/${t}`)}async getNpmCredentials(){return await a(this,c,d).call(this,"GET",`${an}/credentials`)}async executeComponent(t,e,s){if(this.localServerUrl){const r=`${this.localServerUrl}/api/${D}/${t}/execute`,i=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!i.ok){const o=await i.text().catch(()=>"");throw new Error(`Local server request failed: ${i.status} - ${o}`)}return await i.json()}return await a(this,c,d).call(this,"POST",`${D}/${t}/execute`,{body:JSON.stringify(e),query:{...s&&{versionTag:s}},contentType:"application/json"})}async abortExecution(t){if(this.localServerUrl){const e=`${this.localServerUrl}/api/${D}/progress/${t}/abort`,s=await fetch(e,{method:"POST"});if(!s.ok){const r=await s.text().catch(()=>"");throw new Error(`Local server request failed: ${s.status} - ${r}`)}return await s.json()}return await a(this,c,d).call(this,"POST",`${D}/progress/${t}/abort`)}async listExecutions(t,e){if(this.localServerUrl){const s=e?`?projectId=${encodeURIComponent(e)}`:"",r=`${this.localServerUrl}/api/${D}/${t}/progress${s}`,i=await fetch(r);if(!i.ok){const o=await i.text().catch(()=>"");throw new Error(`Local server request failed: ${i.status} - ${o}`)}return await i.json()}return await a(this,c,d).call(this,"GET",`${D}/${t}/progress`,{query:{...e&&{projectId:e}}})}async getExecution(t){if(this.localServerUrl){const e=`${this.localServerUrl}/api/${D}/progress/${t}`,s=await fetch(e);if(!s.ok){const r=await s.text().catch(()=>"");throw new Error(`Local server request failed: ${s.status} - ${r}`)}return await s.json()}return await a(this,c,d).call(this,"GET",`${D}/progress/${t}`)}async onExecutionProgress(t,e){const s=this.localServerUrl??this.wsUrl,r=await ut(s,{auth:{accessToken:this.accessToken},transports:["websocket"]});r.on("connect",function(){r.emit("executionSubscription",JSON.stringify({executionId:t})),r.on("execution",i=>{e(i)})}),r.on("connect_error",function(i){console.log(i)})}history(t){return new We(this,t)}get recipes(){return l(this,pt)??_(this,pt,new ze(this)),l(this,pt)}async createHiddenFile(t,e,s){const r=new FormData;return r.append("file",t),r.append("parentItemId",e),s!=null&&r.append("tag",s),await a(this,c,d).call(this,"POST",`${m}/${B}`,{body:r})}async createHiddenFilesBatch(t,e,s){const r=new FormData;for(const i of t)r.append("files",i);return r.append("parentItemId",e),s!=null&&r.append("tag",s),await a(this,c,d).call(this,"POST",`${m}/${B}/batch`,{body:r})}async deleteHiddenFile(t){return await a(this,c,d).call(this,"DELETE",`${m}/${B}/${t}`)}async getHiddenFile(t){return await a(this,c,d).call(this,"GET",`${m}/${B}/${t}`)}async downloadHiddenFile(t){return await a(this,c,U).call(this,`${m}/${B}/${t}/download`)}async getHiddenFileSignedUrl(t,e){return await a(this,c,d).call(this,"GET",`${m}/${B}/${t}/signed-url`,{...e!=null&&{query:{expiresIn:e}}})}async getHiddenFileSignedUrlsBatch(t,e){return await a(this,c,lt).call(this,t,async s=>(await a(this,c,d).call(this,"POST",`${m}/${B}/signed-url/batch`,{body:JSON.stringify({hiddenFileIds:s,...e!=null&&{expiresIn:e}}),contentType:"application/json"})).results)}async getHiddenFilesByParent(t,e){return await a(this,c,d).call(this,"GET",`${m}/${t}/${B}`,{...e!=null&&{query:{tag:e}}})}async deleteHiddenFilesByParent(t){return await a(this,c,d).call(this,"DELETE",`${m}/${t}/${B}`)}async uploadItemIcon(t,e){const s=new FormData;return s.append("icon",e),await a(this,c,d).call(this,"PUT",`${m}/${t}/icon`,{body:s})}async getItemIcon(t){return await a(this,c,U).call(this,`${m}/${t}/icon`)}async removeItemIcon(t){return await a(this,c,d).call(this,"DELETE",`${m}/${t}/icon`)}async updateItem(t,e){return await a(this,c,d).call(this,"PUT",`${m}/${t}`,{body:JSON.stringify(e),contentType:"application/json"})}async createVersion(t,e,s,r,i){const o=new FormData;return o.append("file",e),o.append("versionTag",s),r&&o.append("extraProps",JSON.stringify(r)),i&&o.append("metadata",JSON.stringify(i)),await a(this,c,d).call(this,"POST",`${m}/${t}/version`,{body:o})}async listVersions(t,e={}){return await a(this,c,d).call(this,"GET",`${m}/${encodeURIComponent(t)}/versions`,{query:e})}async listVersionsBatch(t,e={}){const{archived:s}=e;return await a(this,c,lt).call(this,t,async r=>(await a(this,c,d).call(this,"POST",`${m}/batch/versions`,{body:JSON.stringify({itemIds:r,...s!==void 0&&{archived:s}}),contentType:"application/json"})).results)}async archiveVersion(t,e){return await a(this,c,d).call(this,"PUT",`${m}/${encodeURIComponent(t)}/version/${encodeURIComponent(e)}/archive`)}async recoverVersion(t,e){return await a(this,c,d).call(this,"PUT",`${m}/${encodeURIComponent(t)}/version/${encodeURIComponent(e)}/recover`)}async deleteVersion(t,e){return await a(this,c,d).call(this,"DELETE",`${m}/${encodeURIComponent(t)}/version/${encodeURIComponent(e)}`)}};c=new WeakSet,re=function(t){return`${this.apiUrl}/${t}`},d=async function(t,e,s){const{body:r,query:i,contentType:o,retries:h,responseType:u,retryAttempt:f}=s||{},p=a(this,c,re).call(this,e),w=a(this,c,Qe).call(this,i),$=await this.resolveAccessToken(),as={...w,...this.useBearer?{}:{accessToken:$}};try{const I=await fetch(p+"?"+new URLSearchParams(as).toString(),{method:t,headers:{Accept:"application/json",...o&&{"Content-Type":o},...this.useBearer&&{Authorization:`Bearer ${$}`}},...r&&{body:r}});if(!I.ok){const X=await I.text().then(gt=>gt).catch(()=>"");throw new Lt(I.status,I.statusText,X,un(I))}return u==="blob"?await I.blob():I.json().then(X=>X).catch(()=>{})}catch(I){const X=h??this.retries;if(X>0&&dn(I)){const gt=f??0;return await ln(fn(I,gt)),await a(this,c,d).call(this,t,e,{...s,retries:X-1,retryAttempt:gt+1})}throw I}},U=async function(t,e){const{query:s}=e||{},r=a(this,c,re).call(this,t),i=await this.resolveAccessToken(),o={...s,...this.useBearer?{}:{accessToken:i}};return await fetch(r+"?"+new URLSearchParams(o).toString(),{method:"GET",...this.useBearer&&{headers:{Authorization:`Bearer ${i}`}}})},pt=new WeakMap,lt=async function(t,e){if(!t.length)return[];const s=[];for(let i=0;i<t.length;i+=ne)s.push(t.slice(i,i+ne));return(await Promise.all(s.map(e))).flat()},It=async function(t,e){const{versionTag:s,withDraft:r}=e||{};return await a(this,c,U).call(this,`${m}/${t}/download`,{query:{...s&&{versionTag:s},...r&&{withDraft:r}}})},xt=async function(t,e,s){const{name:r,versionTag:i,parentFolderId:o,projectId:h,file:u,metadata:f}=t,p=new FormData;return p.append("file",u),p.append("name",r),p.append("versionTag",i),p.append("itemType",e),o&&p.append("folderId",o),h&&p.append("projectId",h),s&&p.append("extraProps",JSON.stringify(s)),f&&p.append("metadata",JSON.stringify(f)),await a(this,c,d).call(this,"POST",m,{body:p})},ie=async function(t,e,s){const{name:r,versionTag:i,parentFolderId:o,file:h,metadata:u}=e;let f,p;if(h){const w=new FormData;w.append("file",h),i&&w.append("versionTag",i),s&&w.append("extraProps",JSON.stringify(s)),u&&w.append("metadata",JSON.stringify(u)),p=await a(this,c,d).call(this,"POST",`${m}/${t}/version`,{body:w})}if(r||o){const w={...r&&{name:r},...o&&{folderId:o}},$=JSON.stringify(w);f=await a(this,c,d).call(this,"PUT",`${m}/${t}`,{body:$,contentType:"application/json"})}return{item:f,version:p}},oe=async function(t,e){const{showVersions:s=!1}=e||{};return await a(this,c,d).call(this,"GET",`${m}/${t}`,{query:{showVersions:s}})},Qe=function(t){return t&&Object.entries(t).filter(([,e])=>e!==void 0).reduce((e,[s,r])=>(e[s]=r,e),{})};let Nt=_e;function Ze(){if(typeof window>"u"||window.parent===window)throw new Error("client.channel only works inside a That Open app, which runs in an iframe of the platform.");return{post:n=>window.parent.postMessage(n,"*"),listen:n=>{const t=e=>{e.source===window.parent&&n(e.data)};return window.addEventListener("message",t),()=>window.removeEventListener("message",t)}}}const ae="channel:",pn=1e4;function Ct(n){try{n()}catch(t){console.error("[channel] a listener threw:",t)}}var F,k,A,Z,tt,et,S,ce,he,Q;class be{constructor(t,e){b(this,S);b(this,F,!1);b(this,k,[]);b(this,A,[]);b(this,Z,new Set);b(this,tt,new Set);b(this,et,new Set);this.transport=t,this.controls=e}get joined(){return l(this,F)}get peers(){return l(this,k)}join(){return l(this,F)?Promise.resolve():a(this,S,ce).call(this,"joined",this.controls.join)}leave(){return!l(this,F)&&!l(this,A).some(t=>t.want==="joined")?Promise.resolve():a(this,S,ce).call(this,"left",this.controls.leave)}onChange(t){return l(this,Z).add(t),()=>void l(this,Z).delete(t)}onPeerJoined(t){return l(this,tt).add(t),()=>void l(this,tt).delete(t)}onPeerLeft(t){return l(this,et).add(t),()=>void l(this,et).delete(t)}applyJoined(){_(this,F,!0),a(this,S,he).call(this,"joined"),a(this,S,Q).call(this)}applyLeft(){_(this,F,!1),_(this,k,[]),a(this,S,he).call(this,"left"),a(this,S,Q).call(this)}applyPeers(t){_(this,k,t),a(this,S,Q).call(this)}applyPeerJoined(t){!l(this,F)||l(this,k).some(e=>e.from===t.from)||(_(this,k,[...l(this,k),t]),l(this,tt).forEach(e=>Ct(()=>e(t))),a(this,S,Q).call(this))}applyPeerLeft(t){const e=l(this,k).find(s=>s.from===t);e&&(_(this,k,l(this,k).filter(s=>s.from!==t)),l(this,et).forEach(s=>Ct(()=>s(e))),a(this,S,Q).call(this))}failPending(t){const e=l(this,A);return _(this,A,[]),e.forEach(s=>{clearTimeout(s.timer),s.reject(t)}),e.length>0}post(t){this.transport.post(t)}}F=new WeakMap,k=new WeakMap,A=new WeakMap,Z=new WeakMap,tt=new WeakMap,et=new WeakMap,S=new WeakSet,ce=function(t,e){return new Promise((s,r)=>{const i={want:t,resolve:s,reject:r,timer:setTimeout(()=>{_(this,A,l(this,A).filter(o=>o!==i)),r(new Error(`The platform did not confirm ${t==="joined"?"joining":"leaving"} in time.`))},pn)};l(this,A).push(i),this.transport.post({type:"APP_CHANNEL_CONTROL",...e})})},he=function(t){const e=l(this,A).filter(s=>s.want===t);_(this,A,l(this,A).filter(s=>s.want!==t)),e.forEach(s=>{clearTimeout(s.timer),s.resolve()})},Q=function(){l(this,Z).forEach(t=>Ct(t))};var st;class ts extends be{constructor(e){super(e,{join:{action:"joinCollab"},leave:{action:"leaveCollab"}});b(this,st,new Map)}on(e,s){const r=l(this,st).get(e)??new Set;return r.add(s),l(this,st).set(e,r),()=>void r.delete(s)}send(e,s){if(e.startsWith(ae))throw new Error(`Message types starting with '${ae}' are reserved.`);this.joined&&this.post({type:"APP_CHANNEL_PUBLISH",message:{type:e,payload:s}})}accepts(e){return e===void 0||e==="collab"}async handle(e){const s=l(this,st).get(e.type);if(!(s!=null&&s.size))return{handled:!1};const r=ss(e);return s.forEach(i=>Ct(()=>i(e.payload,r))),{handled:!0}}}st=new WeakMap;var H;class es extends be{constructor(e,s){super(e,{join:{action:"joinExternal",kind:s},leave:{action:"leaveExternal",kind:s}});b(this,H,new Map);this.kind=s}on(e,s){if(l(this,H).has(e))throw new Error(`"${e}" already has a handler in this room. Remove it first.`);return l(this,H).set(e,s),()=>void l(this,H).delete(e)}accepts(e,s){return e!==void 0&&e!=="external"?!1:this.kind===void 0||e===void 0||this.kind===s}get hasHandlers(){return l(this,H).size>0}async handle(e){const s=l(this,H).get(e.type);if(!s)return{handled:!1};try{return{handled:!0,value:await s(e.payload,ss(e))}}catch(r){return{handled:!0,error:r instanceof Error?r.message:String(r)}}}}H=new WeakMap;function ss(n){return{from:n.from,at:n.at,requestId:n.requestId,kind:n.kind}}function yn(n){const t=n;if((t==null?void 0:t.type)!=="THATOPEN_CHANNEL_MESSAGE")return null;const e=t.message;return!e||typeof e.type!="string"?null:{type:e.type,requestId:typeof e.requestId=="string"?e.requestId:void 0,payload:e.payload,at:typeof e.at=="number"?e.at:Date.now(),from:typeof e.from=="string"?e.from:"",scope:e.scope==="collab"||e.scope==="external"?e.scope:void 0,kind:typeof e.kind=="string"?e.kind:void 0}}var W,yt,q,G,V,T,le,$t,rs,is,os,ue;class ns{constructor(t){b(this,T);b(this,W);b(this,yt);b(this,q);b(this,G,new Map);b(this,V,new Set);_(this,W,t),_(this,yt,t.listen(e=>void a(this,T,rs).call(this,e)))}collab(){return l(this,q)??_(this,q,new ts(l(this,W))),l(this,q)}external(t){const e=t??"";let s=l(this,G).get(e);return s||(s=new es(l(this,W),t),l(this,G).set(e,s)),s}dispose(){l(this,yt).call(this)}}W=new WeakMap,yt=new WeakMap,q=new WeakMap,G=new WeakMap,V=new WeakMap,T=new WeakSet,le=function(){return[...l(this,q)?[l(this,q)]:[],...l(this,G).values()]},$t=function(t,e){if(t==="collab")return l(this,q);if(t==="external")return l(this,G).get(typeof e=="string"?e:"")},rs=async function(t){const e=yn(t);if(e){if(e.type.startsWith(ae)){a(this,T,is).call(this,e);return}await a(this,T,os).call(this,e)}},is=function(t){var s,r,i;const e=t.payload??{};switch(t.type){case"channel:joined":(s=a(this,T,$t).call(this,e.scope,e.kind))==null||s.applyJoined();break;case"channel:left":(r=a(this,T,$t).call(this,e.scope,e.kind))==null||r.applyLeft();break;case"channel:peers":(i=a(this,T,$t).call(this,e.scope,e.kind))==null||i.applyPeers(e.peers??[]);break;case"channel:peer-joined":case"channel:peer-left":{if(!e.from)break;const o=e.scope==="collab"?[l(this,q)]:[...l(this,G).values()].filter(h=>h.accepts("external",e.kind));for(const h of o)t.type==="channel:peer-joined"?h==null||h.applyPeerJoined({from:e.from,kind:e.kind}):h==null||h.applyPeerLeft(e.from);break}case"channel:error":{const o=new Error(String(t.payload));a(this,T,le).call(this).map(u=>u.failPending(o)).some(Boolean)||console.error("[channel] error:",t.payload);break}}},os=async function(t){const e=a(this,T,le).call(this).filter(i=>i.accepts(t.scope,t.kind));let s=!1;for(const i of e){const o=await i.handle(t);o.handled&&(s=!0,t.requestId&&a(this,T,ue).call(this,t.requestId,o))}t.requestId&&t.scope==="external"&&e.length>0&&!s&&a(this,T,ue).call(this,t.requestId,{handled:!0,error:`No handler for "${t.type}".`})},ue=function(t,e){l(this,V).has(t)||(l(this,V).add(t),l(this,V).size>500&&l(this,V).delete(l(this,V).values().next().value),l(this,W).post({type:"APP_CHANNEL_PUBLISH",message:{type:e.error===void 0?"reply":"reply-error",requestId:t,payload:e.error===void 0?e.value:{error:e.error}}}))};const Y="project",K="notifications";var nt,mt;const Ee=class Ee extends Nt{constructor(e,s,r){super(typeof e=="string"?e:"",s,{...r,useBearer:!0});b(this,nt);b(this,mt);typeof e=="function"&&_(this,nt,e)}async resolveAccessToken(){return l(this,nt)?await l(this,nt).call(this):super.resolveAccessToken()}static fromPlatformContext(e){const s=(typeof window<"u"?window.__THATOPEN_CONTEXT__:null)||{appId:"",projectId:"",accessToken:"",apiUrl:""},r=new Ee(s.accessToken,s.apiUrl,e);return r.context=s,r}get channel(){return l(this,mt)??_(this,mt,new ns(Ze())),l(this,mt)}async listProjects(){return await this.request("GET",Y)}async getProject(e){return await this.request("GET",`${Y}/${e}`)}async getProjectData(e){return await this.request("GET",`${Y}/${e}/data`)}async getAvatar(e){return await this.request("GET",`account/${e}/avatar`,{responseType:"blob"})}async checkPermission(e){return await this.request("GET",`${Y}/permissions/check`,{query:e})}async checkPermissionBatch(e){return(await this.request("POST",`${Y}/permissions/check/batch`,{body:JSON.stringify({checks:e}),contentType:"application/json"})).results}async getNotifications(e){return await this.request("GET",K,{query:{...(e==null?void 0:e.cursor)!==void 0&&{cursor:e.cursor},...(e==null?void 0:e.limit)!==void 0&&{limit:String(e.limit)}}})}async getUnreadNotificationCount(){return(await this.request("GET",`${K}/unread-count`)).count}async markNotificationsRead(e){return await this.request("POST",`${K}/mark-read`,{body:JSON.stringify({ids:e}),contentType:"application/json"})}async markAllNotificationsRead(){return await this.request("POST",`${K}/mark-all-read`)}async getNotificationSubscriptions(){return await this.request("GET",`${K}/subscriptions`)}async unsubscribeFromAutomation(e){return await this.request("DELETE",`${K}/subscriptions/${e}`)}async subscribeToAutomation(e,s,r){return await this.request("POST",`${Y}/${e}/events/hooks/${s}/subscription`,{body:JSON.stringify(r??{}),contentType:"application/json"})}async updateAutomationSubscription(e,s,r){return await this.request("PATCH",`${Y}/${e}/events/hooks/${s}/subscription`,{body:JSON.stringify(r),contentType:"application/json"})}async onNotification(e){const s=await this.resolveAccessToken(),r=ut(`${this.socketOrigin}/notifications`,{auth:{accessToken:s},transports:["websocket"]});return r.on("notification.created",i=>e({type:"created",id:i==null?void 0:i.id})),r.on("notification.read",i=>e({type:"read",id:i==null?void 0:i.id})),r.on("notifications.allRead",i=>e({type:"allRead",batch:i==null?void 0:i.batch})),()=>r.disconnect()}};nt=new WeakMap,mt=new WeakMap;let de=Ee;const mn={MAX_FIELDS:200,MAX_KEY_LENGTH:50,MAX_VALUE_LENGTH:50},gn={uuid:"a3f82c1d-5b74-4e9a-bc30-d7e12f894a61"},wn={uuid:"2c9f4e8d-3a1b-4c5e-9d7f-0a2b6c8e1d3f"},bn={uuid:"b0b5e2a2-0b3a-4a6b-8b1c-0b1c4a6b8b1c"},_n={uuid:"d8f3a1c2-6b4e-4f9a-8c1d-2e7b5a9f3c60"},En={uuid:"3f9c1a7e-6b2d-4e18-9a5c-7d0e2f4b6c81"},Tn={uuid:"2c4ae432-fc24-43e9-9783-0c960c674e96"},vn={uuid:"6f3a9c2e-8b1d-4e6a-9c3f-1d7b5a8e2c4f"},Sn={uuid:"69af63aa-19ba-4fc7-b17b-75647bac1d76"},kn={uuid:"234f1416-528d-452a-9cc9-a16c5239b2eb"};exports.CDEManager=gn;exports.ChannelClient=ns;exports.ChannelRoom=be;exports.ClashesManager=wn;exports.CollabRoom=ts;exports.EngineServicesClient=Nt;exports.ExternalRoom=es;exports.FileList=bn;exports.FlowDoc=Xe;exports.GISManager=_n;exports.GitHistoryManager=En;exports.HelloWorld=Tn;exports.METADATA_LIMITS=mn;exports.PlatformClient=de;exports.ProjectHistory=We;exports.ProjectManager=vn;exports.Recipes=ze;exports.RequestError=Lt;exports.STORAGE_BATCH_MAX=ne;exports.StaleHistoryError=Kt;exports.TopicsManager=Sn;exports.UIManager=kn;exports.mintGuid=Rt;exports.orderByGraph=we;exports.windowTransport=Ze;
3
3
  //# sourceMappingURL=index.cjs.js.map