@thatopen/services 0.23.0 → 0.25.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.
- package/dist/cli.js +104 -0
- package/dist/cli.js.map +1 -1
- package/dist/core/documents.d.ts +37 -0
- package/dist/core/op-builder.d.ts +118 -0
- package/dist/index.cjs.js +2 -2
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.es.js +1340 -1068
- package/dist/index.es.js.map +1 -1
- package/docs/ai-quickstart.md +17 -1
- package/package.json +9 -1
package/dist/core/documents.d.ts
CHANGED
|
@@ -25,6 +25,20 @@ export interface DocumentDescriptor {
|
|
|
25
25
|
}
|
|
26
26
|
export declare const DOCUMENT_SCHEMA = "thatopen/document@1";
|
|
27
27
|
export declare const DOCUMENT_FILE = "document.json";
|
|
28
|
+
/**
|
|
29
|
+
* Formats whose native file IS its own definitive view (the PDF rule): when
|
|
30
|
+
* {@link ProjectDocuments.fromFile} converts one, the same fileId is written
|
|
31
|
+
* as `native` and as `views[0]`. Deliberately NOT here: 'ifc' — its proper 3D
|
|
32
|
+
* view is the processed frag, so a converted IFC without one shows "Process"
|
|
33
|
+
* instead of opening a worse view.
|
|
34
|
+
*/
|
|
35
|
+
export declare const SELF_VIEWING_FORMATS: string[];
|
|
36
|
+
/** One listed document: the folder, and what its descriptor says. */
|
|
37
|
+
export interface DocumentInfo {
|
|
38
|
+
/** The document folder's item id — the id interfaces know the document by. */
|
|
39
|
+
folderId: string;
|
|
40
|
+
descriptor: DocumentDescriptor;
|
|
41
|
+
}
|
|
28
42
|
/**
|
|
29
43
|
* Documents of one project. Get it from {@link EngineServicesClient.documents}.
|
|
30
44
|
* Every method takes the document's FOLDER id — the id interfaces know the
|
|
@@ -35,6 +49,29 @@ export declare class ProjectDocuments {
|
|
|
35
49
|
private readonly client;
|
|
36
50
|
readonly projectId: string;
|
|
37
51
|
constructor(client: EngineServicesClient, projectId: string);
|
|
52
|
+
/**
|
|
53
|
+
* Every document of the project: the folders that carry a descriptor.
|
|
54
|
+
* Plain folders and loose files simply do not appear. One folder listing
|
|
55
|
+
* for the project plus one file listing and one descriptor download per
|
|
56
|
+
* folder, fetched in parallel — the storage offers nothing cheaper yet.
|
|
57
|
+
*/
|
|
58
|
+
list(): Promise<DocumentInfo[]>;
|
|
59
|
+
/**
|
|
60
|
+
* Converts a loose file into a document: creates the document folder next
|
|
61
|
+
* to the file, moves the file inside (moving preserves its id), and writes
|
|
62
|
+
* the descriptor with the file as `native` — and as `views[0]` too when its
|
|
63
|
+
* format views itself ({@link SELF_VIEWING_FORMATS}; override per call with
|
|
64
|
+
* `selfView`).
|
|
65
|
+
*
|
|
66
|
+
* A file that carries a processed derivative (the old `derivedFileId` link
|
|
67
|
+
* in its version metadata — an IFC's frag, a LAS's potree) brings it along:
|
|
68
|
+
* the derivative moves into the same folder and becomes a view, so the
|
|
69
|
+
* document is born ready to visualize and the link concept retires.
|
|
70
|
+
*/
|
|
71
|
+
fromFile(fileId: string, options?: {
|
|
72
|
+
name?: string;
|
|
73
|
+
selfView?: boolean;
|
|
74
|
+
}): Promise<DocumentInfo>;
|
|
38
75
|
/**
|
|
39
76
|
* The document's descriptor, read and validated, or null when the folder
|
|
40
77
|
* has none yet (an old folder, or a plain folder that is not a document).
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authors an interoperability OPERATION — a set of deferred edits for one
|
|
3
|
+
* document — and hands back the bytes to upload as a suggestion's payload.
|
|
4
|
+
*
|
|
5
|
+
* WHY THIS EXISTS AND WHY IT LOOKS LIKE THIS. An operation is carried as a
|
|
6
|
+
* .frag with no geometry at all: the envelope in `Model.metadata`, and one
|
|
7
|
+
* geometry-less item per change whose attributes ARE the change. That was
|
|
8
|
+
* cheap on the C# side, which already had a writer, and it is the reason a
|
|
9
|
+
* converter had to be a console tool once: nothing in the browser could
|
|
10
|
+
* produce one. So the format stayed, and this builds it here instead.
|
|
11
|
+
*
|
|
12
|
+
* Nothing above this class needs to know any of that. You say add / set /
|
|
13
|
+
* remove and get bytes for {@link FlowDoc.suggest} or a recipe's result.
|
|
14
|
+
*
|
|
15
|
+
* WHAT IT DOES NOT DO. It does not translate. Attributes are written exactly
|
|
16
|
+
* as given, in the TARGET application's own terms and units, because data
|
|
17
|
+
* that gets translated on the way in has to be untranslated on the way out
|
|
18
|
+
* and the day somebody forgets a field nothing complains. Deciding what a
|
|
19
|
+
* Rhino layer means in Revit is the recipe's job; this only carries the
|
|
20
|
+
* answer.
|
|
21
|
+
*
|
|
22
|
+
* DEPENDENCIES, loaded at build() time and declared as OPTIONAL PEERS:
|
|
23
|
+
* `@thatopen/fragments` (the .frag schema) and `flatbuffers`. An app that
|
|
24
|
+
* authors operations has both already; everything else in this package works
|
|
25
|
+
* without them.
|
|
26
|
+
*/
|
|
27
|
+
/** The schema this writes. An applier that speaks a different one must refuse rather than guess. */
|
|
28
|
+
export declare const OP_SCHEMA = "revitflow/op@2";
|
|
29
|
+
export interface OperationTarget {
|
|
30
|
+
/** Platform project id. */
|
|
31
|
+
project: string;
|
|
32
|
+
/** Document name within the project — the model these edits are for. */
|
|
33
|
+
document: string;
|
|
34
|
+
/**
|
|
35
|
+
* The commit this was authored against. The elements named here existed
|
|
36
|
+
* then; by the time somebody applies it they may not, and the applier
|
|
37
|
+
* reports what it could not resolve.
|
|
38
|
+
*/
|
|
39
|
+
baseCommit: number;
|
|
40
|
+
/** Who authored it, for the history. */
|
|
41
|
+
author?: string;
|
|
42
|
+
/** Platform user id, so the same person is not two names depending on which tool wrote it. */
|
|
43
|
+
userId?: string;
|
|
44
|
+
/** Groups the operations one authored action produced across several models. */
|
|
45
|
+
batchId?: string;
|
|
46
|
+
title?: string;
|
|
47
|
+
}
|
|
48
|
+
/** Where an added item goes, and how it is turned, in the target's own terms. */
|
|
49
|
+
export interface Placement {
|
|
50
|
+
/** [x, y, z] in the TARGET model's own units and axes. Not converted here. */
|
|
51
|
+
position?: [number, number, number];
|
|
52
|
+
/** Degrees about Z, in the target's convention. */
|
|
53
|
+
rotationDeg?: number;
|
|
54
|
+
/**
|
|
55
|
+
* The id of the object that caused this change, in the AUTHOR's own terms —
|
|
56
|
+
* a Rhino guid, a row of a spreadsheet, whatever proposed it. Optional, and
|
|
57
|
+
* only useful to whoever wrote it: pass it when you expect to come back and
|
|
58
|
+
* find what you created.
|
|
59
|
+
*/
|
|
60
|
+
source?: string;
|
|
61
|
+
}
|
|
62
|
+
export declare class OperationBuilder {
|
|
63
|
+
private readonly target;
|
|
64
|
+
private readonly changes;
|
|
65
|
+
constructor(target: OperationTarget);
|
|
66
|
+
/** How many changes are queued. An operation with none is refused by `build`. */
|
|
67
|
+
get length(): number;
|
|
68
|
+
get batchId(): string | undefined;
|
|
69
|
+
get title(): string;
|
|
70
|
+
get author(): string;
|
|
71
|
+
get userId(): string | undefined;
|
|
72
|
+
get baseCommit(): number;
|
|
73
|
+
/**
|
|
74
|
+
* Create something. There is no id yet: the attributes describe what it is,
|
|
75
|
+
* the placement says where it goes, and the operation answers with the id
|
|
76
|
+
* it got.
|
|
77
|
+
*/
|
|
78
|
+
add(attrs: Record<string, string>, placement?: Placement): this;
|
|
79
|
+
/** Write attributes onto an item that already exists, named by the id the target published. */
|
|
80
|
+
set(item: string, attrs: Record<string, string>, placement?: Placement): this;
|
|
81
|
+
/** Delete an item. Whatever the target cascades along with it is reported, not guessed at here. */
|
|
82
|
+
remove(item: string): this;
|
|
83
|
+
/**
|
|
84
|
+
* A label for what this operation mostly does. Derived, never read to
|
|
85
|
+
* decide anything: one operation may add, set and remove at once and still
|
|
86
|
+
* be atomic, so what each change does is written on the change.
|
|
87
|
+
*/
|
|
88
|
+
get summary(): 'add' | 'set' | 'remove' | 'mixed';
|
|
89
|
+
/**
|
|
90
|
+
* The .frag bytes, zlib-deflated, ready to upload as the operation's
|
|
91
|
+
* payload.
|
|
92
|
+
*
|
|
93
|
+
* `opId` is taken rather than generated so the caller can put the same id
|
|
94
|
+
* in the queue entry it writes next ({@link Recipes} mints it before the
|
|
95
|
+
* run); an id this class invented and did not return would have to be dug
|
|
96
|
+
* back out of the bytes.
|
|
97
|
+
*/
|
|
98
|
+
build(opId: string): Promise<Uint8Array>;
|
|
99
|
+
/** Placement rides in the attributes, in the same string form the target published. */
|
|
100
|
+
private pack;
|
|
101
|
+
private requireId;
|
|
102
|
+
/**
|
|
103
|
+
* The buffer itself.
|
|
104
|
+
*
|
|
105
|
+
* Laid out exactly as the C# writer lays it out, because the add-in's
|
|
106
|
+
* reader is the one that has to accept both: items first and the container
|
|
107
|
+
* after, ids handed out by one monotonic counter, attributes as
|
|
108
|
+
* `[name, value, type]` JSON triples, and a Meshes table that exists but is
|
|
109
|
+
* empty.
|
|
110
|
+
*
|
|
111
|
+
* Empty rather than absent: the reader asks for it unconditionally, and a
|
|
112
|
+
* model that draws nothing is still a model. Nothing here gets a sample —
|
|
113
|
+
* an item with no triangles must not have one, because a sample's bounding
|
|
114
|
+
* box would then have no size and the reader turns a box into a "dimension"
|
|
115
|
+
* and rejects a falsy one.
|
|
116
|
+
*/
|
|
117
|
+
private flatbuffer;
|
|
118
|
+
}
|
package/dist/index.cjs.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";var ys=Object.defineProperty;var Ie=n=>{throw TypeError(n)};var ms=(n,t,e)=>t in n?ys(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e;var T=(n,t,e)=>ms(n,typeof t!="symbol"?t+"":t,e),Ut=(n,t,e)=>t.has(n)||Ie("Cannot "+e);var l=(n,t,e)=>(Ut(n,t,"read from private field"),e?e.call(n):t.get(n)),b=(n,t,e)=>t.has(n)?Ie("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(n):t.set(n,e),_=(n,t,e,s)=>(Ut(n,t,"write to private field"),s?s.call(n,e):t.set(n,e),e),a=(n,t,e)=>(Ut(n,t,"access private method"),e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const B=Object.create(null);B.open="0";B.close="1";B.ping="2";B.pong="3";B.message="4";B.upgrade="5";B.noop="6";const kt=Object.create(null);Object.keys(B).forEach(n=>{kt[B[n]]=n});const Yt={type:"error",data:"parser error"},De=typeof Blob=="function"||typeof Blob<"u"&&Object.prototype.toString.call(Blob)==="[object BlobConstructor]",Ue=typeof ArrayBuffer=="function",je=n=>typeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(n):n&&n.buffer instanceof ArrayBuffer,we=({type:n,data:t},e,s)=>De&&t instanceof Blob?e?s(t):Ce(t,s):Ue&&(t instanceof ArrayBuffer||je(t))?e?s(t):Ce(new Blob([t]),s):s(B[n]+(t||"")),Ce=(n,t)=>{const e=new FileReader;return e.onload=function(){const s=e.result.split(",")[1];t("b"+(s||""))},e.readAsDataURL(n)};function xe(n){return n instanceof Uint8Array?n:n instanceof ArrayBuffer?new Uint8Array(n):new Uint8Array(n.buffer,n.byteOffset,n.byteLength)}let jt;function gs(n,t){if(De&&n.data instanceof Blob)return n.data.arrayBuffer().then(xe).then(t);if(Ue&&(n.data instanceof ArrayBuffer||je(n.data)))return t(xe(n.data));we(n,!1,e=>{jt||(jt=new TextEncoder),t(jt.encode(e))})}const $e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",lt=typeof Uint8Array>"u"?[]:new Uint8Array(256);for(let n=0;n<$e.length;n++)lt[$e.charCodeAt(n)]=n;const ws=n=>{let t=n.length*.75,e=n.length,s,r=0,i,o,c,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=lt[n.charCodeAt(s)],o=lt[n.charCodeAt(s+1)],c=lt[n.charCodeAt(s+2)],u=lt[n.charCodeAt(s+3)],y[r++]=i<<2|o>>4,y[r++]=(o&15)<<4|c>>2,y[r++]=(c&3)<<6|u&63;return f},bs=typeof ArrayBuffer=="function",be=(n,t)=>{if(typeof n!="string")return{type:"message",data:Me(n,t)};const e=n.charAt(0);return e==="b"?{type:"message",data:_s(n.substring(1),t)}:kt[e]?n.length>1?{type:kt[e],data:n.substring(1)}:{type:kt[e]}:Yt},_s=(n,t)=>{if(bs){const e=ws(n);return Me(e,t)}else return{base64:!0,data:n}},Me=(n,t)=>{switch(t){case"blob":return n instanceof Blob?n:new Blob([n]);case"arraybuffer":default:return n instanceof ArrayBuffer?n:n.buffer}},He="",Es=(n,t)=>{const e=n.length,s=new Array(e);let r=0;n.forEach((i,o)=>{we(i,!1,c=>{s[o]=c,++r===e&&t(s.join(He))})})},vs=(n,t)=>{const e=n.split(He),s=[];for(let r=0;r<e.length;r++){const i=be(e[r],t);if(s.push(i),i.type==="error")break}return s};function Ts(){return new TransformStream({transform(n,t){gs(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 Mt;function vt(n){return n.reduce((t,e)=>t+e.length,0)}function Tt(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 Ss(n,t){Mt||(Mt=new TextDecoder);const e=[];let s=0,r=-1,i=!1;return new TransformStream({transform(o,c){for(e.push(o);;){if(s===0){if(vt(e)<1)break;const u=Tt(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(vt(e)<2)break;const u=Tt(e,2);r=new DataView(u.buffer,u.byteOffset,u.length).getUint16(0),s=3}else if(s===2){if(vt(e)<8)break;const u=Tt(e,8),f=new DataView(u.buffer,u.byteOffset,u.length),y=f.getUint32(0);if(y>Math.pow(2,21)-1){c.enqueue(Yt);break}r=y*Math.pow(2,32)+f.getUint32(4),s=3}else{if(vt(e)<r)break;const u=Tt(e,r);c.enqueue(be(i?u:Mt.decode(u),t)),s=0}if(r===0||r>n){c.enqueue(Yt);break}}}})}const Ge=4;function E(n){if(n)return ks(n)}function ks(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 Ft=typeof Promise=="function"&&typeof Promise.resolve=="function"?t=>Promise.resolve().then(t):(t,e)=>e(t,0),A=typeof self<"u"?self:typeof window<"u"?window:Function("return this")(),Os="arraybuffer";function Ve(n,...t){return t.reduce((e,s)=>(n.hasOwnProperty(s)&&(e[s]=n[s]),e),{})}const As=A.setTimeout,Is=A.clearTimeout;function qt(n,t){t.useNativeTimers?(n.setTimeoutFn=As.bind(A),n.clearTimeoutFn=Is.bind(A)):(n.setTimeoutFn=A.setTimeout.bind(A),n.clearTimeoutFn=A.clearTimeout.bind(A))}const Cs=1.33;function xs(n){return typeof n=="string"?$s(n):Math.ceil((n.byteLength||n.size)*Cs)}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 Je(){return Date.now().toString(36).substring(3)+Math.random().toString(36).substring(2,5)}function Rs(n){let t="";for(let e in n)n.hasOwnProperty(e)&&(t.length&&(t+="&"),t+=encodeURIComponent(e)+"="+encodeURIComponent(n[e]));return t}function Ns(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 Ps extends Error{constructor(t,e,s){super(t),this.description=e,this.context=s,this.type="TransportError"}}class _e extends E{constructor(t){super(),this.writable=!1,qt(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 Ps(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=be(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=Rs(t);return e.length?"?"+e:""}}class Bs extends _e{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)};vs(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,Es(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]=Je()),!this.supportsBinary&&!e.sid&&(e.b64=1),this.createUri(t,e)}}let Ye=!1;try{Ye=typeof XMLHttpRequest<"u"&&"withCredentials"in new XMLHttpRequest}catch{}const Ls=Ye;function Fs(){}class qs extends Bs{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 P extends E{constructor(t,e,s){super(),this.createRequest=t,qt(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=Ve(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=P.requestsCount++,P.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=Fs,t)try{this._xhr.abort()}catch{}typeof document<"u"&&delete P.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()}}P.requestsCount=0;P.requests={};if(typeof document<"u"){if(typeof attachEvent=="function")attachEvent("onunload",Re);else if(typeof addEventListener=="function"){const n="onpagehide"in A?"pagehide":"unload";addEventListener(n,Re,!1)}}function Re(){for(let n in P.requests)P.requests.hasOwnProperty(n)&&P.requests[n].abort()}const Ds=function(){const n=We({xdomain:!1});return n&&n.responseType!==null}();class Us extends qs{constructor(t){super(t);const e=t&&t.forceBase64;this.supportsBinary=Ds&&!e}request(t={}){return Object.assign(t,{xd:this.xd},this.opts),new P(We,this.uri(),t)}}function We(n){const t=n.xdomain;try{if(typeof XMLHttpRequest<"u"&&(!t||Ls))return new XMLHttpRequest}catch{}if(!t)try{return new A[["Active"].concat("Object").join("X")]("Microsoft.XMLHTTP")}catch{}}const Ke=typeof navigator<"u"&&typeof navigator.product=="string"&&navigator.product.toLowerCase()==="reactnative";class js extends _e{get name(){return"websocket"}doOpen(){const t=this.uri(),e=this.opts.protocols,s=Ke?{}:Ve(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;we(s,this.supportsBinary,i=>{try{this.doWrite(s,i)}catch{}r&&Ft(()=>{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]=Je()),this.supportsBinary||(e.b64=1),this.createUri(t,e)}}const Ht=A.WebSocket||A.MozWebSocket;class Ms extends js{createSocket(t,e,s){return Ke?new Ht(t,e,s):e?new Ht(t,e):new Ht(t)}doWrite(t,e){this.ws.send(e)}}class Hs extends _e{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=Ss(Number.MAX_SAFE_INTEGER,this.socket.binaryType),s=t.readable.pipeThrough(e).getReader(),r=Ts();r.readable.pipeTo(t.writable),this._writer=r.writable.getWriter();const i=()=>{s.read().then(({done:c,value:u})=>{c||(this.onPacket(u),i())}).catch(c=>{})};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&&Ft(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){var t;(t=this._transport)===null||t===void 0||t.close()}}const Gs={websocket:Ms,webtransport:Hs,polling:Us},Vs=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,Js=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];function Wt(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=Vs.exec(n||""),i={},o=14;for(;o--;)i[Js[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=Ys(i,i.path),i.queryKey=Ws(i,i.query),i}function Ys(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 Ws(n,t){const e={};return t.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function(s,r,i){r&&(e[r]=i)}),e}const Kt=typeof addEventListener=="function"&&typeof removeEventListener=="function",Ot=[];Kt&&addEventListener("offline",()=>{Ot.forEach(n=>n())},!1);class Y extends E{constructor(t,e){if(super(),this.binaryType=Os,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=Wt(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=Wt(e.host).host);qt(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=Ns(this.opts.query)),Kt&&(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"})},Ot.push(this._offlineEventListener))),this.opts.withCredentials&&(this._cookieJar=void 0),this._open()}createTransport(t){const e=Object.assign({},this.opts.query);e.EIO=Ge,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&&Y.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",Y.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+=xs(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,Ft(()=>{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(Y.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(),Kt&&(this._beforeunloadEventListener&&removeEventListener("beforeunload",this._beforeunloadEventListener,!1),this._offlineEventListener)){const s=Ot.indexOf(this._offlineEventListener);s!==-1&&Ot.splice(s,1)}this.readyState="closed",this.id=null,this.emitReserved("close",t,e),this.writeBuffer=[],this._prevBufferLen=0}}}Y.protocol=Ge;class Ks extends Y{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;Y.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;Y.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 $=new Error("probe error");$.transport=e.name,this.emitReserved("upgradeError",$)}}))};function i(){s||(s=!0,y(),e.close(),e=null)}const o=w=>{const $=new Error("probe error: "+w);$.transport=e.name,i(),this.emitReserved("upgradeError",$)};function c(){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",c),this.off("close",u),this.off("upgrading",f)};e.once("open",r),e.once("error",o),e.once("close",c),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 Xs=class extends Ks{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=>Gs[i]).filter(i=>!!i)),super(s?r:t,r)}};function zs(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=Wt(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 Qs=typeof ArrayBuffer=="function",Zs=n=>typeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(n):n.buffer instanceof ArrayBuffer,Xe=Object.prototype.toString,tn=typeof Blob=="function"||typeof Blob<"u"&&Xe.call(Blob)==="[object BlobConstructor]",en=typeof File=="function"||typeof File<"u"&&Xe.call(File)==="[object FileConstructor]";function Ee(n){return Qs&&(n instanceof ArrayBuffer||Zs(n))||tn&&n instanceof Blob||en&&n instanceof File}function At(n,t){if(!n||typeof n!="object")return!1;if(Array.isArray(n)){for(let e=0,s=n.length;e<s;e++)if(At(n[e]))return!0;return!1}if(Ee(n))return!0;if(n.toJSON&&typeof n.toJSON=="function"&&arguments.length===1)return At(n.toJSON(),!0);for(const e in n)if(Object.prototype.hasOwnProperty.call(n,e)&&At(n[e]))return!0;return!1}function sn(n){const t=[],e=n.data,s=n;return s.data=Xt(e,t),s.attachments=t.length,{packet:s,buffers:t}}function Xt(n,t){if(!n)return n;if(Ee(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]=Xt(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]=Xt(n[s],t));return e}return n}function nn(n,t){return n.data=zt(n.data,t),delete n.attachments,n}function zt(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]=zt(n[e],t);else if(typeof n=="object")for(const e in n)Object.prototype.hasOwnProperty.call(n,e)&&(n[e]=zt(n[e],t));return n}const rn=["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 on{constructor(t){this.replacer=t}encode(t){return(t.type===g.EVENT||t.type===g.ACK)&&At(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=sn(t),s=this.encodeAsString(e.packet),r=e.buffers;return r.unshift(s),r}}class ve 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 an(e),e.attachments===0&&super.emitReserved("decoded",e)):super.emitReserved("decoded",e)}else if(Ee(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 c=Number(o);if(!cn(c)||c<0)throw new Error("Illegal attachments");if(c>this.opts.maxAttachments)throw new Error("too many attachments");s.attachments=c}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(ve.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 Ne(e);case g.DISCONNECT:return e===void 0;case g.CONNECT_ERROR:return typeof e=="string"||Ne(e);case g.EVENT:case g.BINARY_EVENT:return Array.isArray(e)&&(typeof e[0]=="number"||typeof e[0]=="string"&&rn.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 an{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=nn(this.reconPack,this.buffers);return this.finishedReconstruction(),e}return null}finishedReconstruction(){this.reconPack=null,this.buffers=[]}}const cn=Number.isInteger||function(n){return typeof n=="number"&&isFinite(n)&&Math.floor(n)===n};function Ne(n){return Object.prototype.toString.call(n)==="[object Object]"}const hn=Object.freeze(Object.defineProperty({__proto__:null,Decoder:ve,Encoder:on,get PacketType(){return g}},Symbol.toStringTag,{value:"Module"}));function x(n,t,e){return n.on(t,e),function(){n.off(t,e)}}const ln=Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1});class ze 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=[x(t,"open",this.onopen.bind(this)),x(t,"packet",this.onpacket.bind(this)),x(t,"error",this.onerror.bind(this)),x(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(ln.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 c=(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&&!c||(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 c=0;c<this.sendBuffer.length;c++)this.sendBuffer[c].id===t&&this.sendBuffer.splice(c,1);e.call(this,new Error("operation has timed out"))},r),o=(...c)=>{this.io.clearTimeoutFn(i),e.apply(this,c)};o.withError=!0,this.acks[t]=o}emitWithAck(t,...e){return new Promise((s,r)=>{const i=(o,c)=>o?r(o):s(c);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 ct(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}ct.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};ct.prototype.reset=function(){this.attempts=0};ct.prototype.setMin=function(n){this.ms=n};ct.prototype.setMax=function(n){this.max=n};ct.prototype.setJitter=function(n){this.jitter=n};class Qt 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,qt(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 ct({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||hn;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 Xs(this.uri,this.opts);const e=this.engine,s=this;this._readyState="opening",this.skipReconnect=!1;const r=x(e,"open",function(){s.onopen(),t&&t()}),i=c=>{this.cleanup(),this._readyState="closed",this.emitReserved("error",c),t?t(c):this.maybeReconnectOnOpen()},o=x(e,"error",i);if(this._timeout!==!1){const c=this._timeout,u=this.setTimeoutFn(()=>{r(),i(new Error("timeout")),e.close()},c);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(x(t,"ping",this.onping.bind(this)),x(t,"data",this.ondata.bind(this)),x(t,"error",this.onerror.bind(this)),x(t,"close",this.onclose.bind(this)),x(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){Ft(()=>{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 ze(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 ht={};function pt(n,t){typeof n=="object"&&(t=n,n=void 0),t=t||{};const e=zs(n,t.path||"/socket.io"),s=e.source,r=e.id,i=e.path,o=ht[r]&&i in ht[r].nsps,c=t.forceNew||t["force new connection"]||t.multiplex===!1||o;let u;return c?u=new Qt(s,t):(ht[r]||(ht[r]=new Qt(s,t)),u=ht[r]),e.query&&!t.query&&(t.query=e.queryKey),u.socket(e.path,t)}Object.assign(pt,{Manager:Qt,Socket:ze,io:pt,connect:pt});const Pt="thatopen/document@1",Zt="document.json",Pe=()=>`v-${Date.now()}`;function un(n){return String(n._id??n.id??"")}var yt,te;class Te{constructor(t,e){b(this,yt);this.client=t,this.projectId=e}async descriptor(t){const e=await a(this,yt,te).call(this,t);if(!e)return null;const r=await(await this.client.downloadFile(e.id)).text();if(!r.trim())return null;let i;try{i=JSON.parse(r)}catch{return null}return dn(i)}async view(t,e){const s=await this.descriptor(t);if(!s)return null;for(const r of e){const i=s.views.find(o=>o.format===r);if(i)return i}return null}async addView(t,e){const s=await this.descriptor(t);if(!s)throw new Error("This folder has no document descriptor yet: call setDescriptor first.");s.views=[...s.views.filter(r=>r.format!==e.format),e],await this.setDescriptor(t,s)}async setDescriptor(t,e){const s={...e,schema:Pt,views:e.views??[]},r=new Blob([JSON.stringify(s)],{type:"application/json"}),i=await a(this,yt,te).call(this,t);if(i){await this.client.updateFile(i.id,{file:r,versionTag:Pe()});return}await this.client.createFile({file:r,name:Zt,versionTag:Pe(),parentFolderId:t,projectId:this.projectId})}}yt=new WeakSet,te=async function(t){const s=(await this.client.listFiles({folderId:t})).find(r=>String(r.name??"")===Zt);return s?{id:un(s)}:void 0};function dn(n){if(!n||typeof n!="object")return null;const t=n;if(t.schema!==Pt||typeof t.name!="string")return null;const e=Array.isArray(t.views)?t.views.filter(i=>!!i&&typeof i=="object"&&typeof i.fileId=="string"&&typeof i.format=="string"):[],s=t.native,r=!!s&&typeof s=="object"&&typeof s.fileId=="string"&&typeof s.format=="string";return{schema:Pt,name:t.name,...r?{native:{fileId:s.fileId,format:s.format}}:{},views:e}}class ee 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 Be="bimterop",se="revitflow_history.json",Q="revitflow_ops.json",Le="revitflow/ops@1",Qe="revitflow_model.frag",Ze="revitflow_",fn="bimterop-locks-anchor",St=()=>`v-${Date.now()}`;function ts(n,t){return n.filter(e=>String(e.parentId??"")===t)}function N(n){return String(n._id??n.id??"")}var C,mt,ne;class es{constructor(t,e){b(this,mt);b(this,C);this.client=t,this.projectId=e}async docs(){const t=await a(this,mt,ne).call(this);if(!t)return[];const e=await this.client.listFolders({parentFolderId:t,projectId:this.projectId}),s=[];for(const r of ts(e,t)){const i=String(r.name??""),o=i.indexOf("-");if(o<=0)continue;const u=(await this.client.listFiles({folderId:N(r)})).map(w=>String(w.name??"")),f=u.find(w=>w===Qe)??u.find(w=>w.endsWith(".frag")&&!w.startsWith(Ze)),y=u.includes(se)||u.includes(Q)||!!f;s.push({source:i.slice(0,o),docId:i.slice(o+1),folderId:N(r),modelName:f,...y?{}:{empty:!0}})}return s}doc(t,e){return new ss(this.client,this,t,e)}async rootFolderId(t=!1){if(l(this,C))return l(this,C);const e=await a(this,mt,ne).call(this);if(e)return e;if(!t)return;const s=await this.client.createFolder(Be,void 0,this.projectId);return _(this,C,N(s)),l(this,C)}}C=new WeakMap,mt=new WeakSet,ne=async function(){if(l(this,C))return l(this,C);const e=(await this.client.listFolders({projectId:this.projectId})).find(s=>String(s.name??"")===Be&&!s.parentId);return e&&_(this,C,N(e)),l(this,C)};var q,d,Z,tt,F,re,ut,et,ie,It,dt,Ct,oe,ns;class ss{constructor(t,e,s,r){b(this,d);b(this,q);this.client=t,this.project=e,this.source=s,this.docId=r}async timeline(){const t=await a(this,d,It).call(this);return Se((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,d,et).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 folderId(){return await a(this,d,F).call(this,!1)}async descriptor(){return await l(this,d,Z).descriptor(await a(this,d,F).call(this,!1))}async view(t){const e=await a(this,d,F).call(this,!1),s=await l(this,d,Z).descriptor(e);if(s){for(const i of t){const o=s.views.find(c=>c.format===i);if(o)return o}return null}if(!t.includes("frag"))return null;const r=await a(this,d,et).call(this);return r?{fileId:r.id,format:"frag"}:null}async addView(t){const e=await a(this,d,F).call(this,!0);if(await l(this,d,Z).descriptor(e)){await l(this,d,Z).addView(e,t);return}const r=await a(this,d,et).call(this);await l(this,d,Z).setDescriptor(e,{name:(r==null?void 0:r.name.replace(/\.frag$/,""))??l(this,d,tt),views:[t]})}async ownership(){const t=await a(this,d,ut).call(this,fn);if(!t)return[];const e=await this.client.getHiddenFilesByParent(t.id),s=await Promise.all(e.map(async o=>{try{const c=N(o),u=await this.client.downloadHiddenFile(c),f=JSON.parse(await u.text());return!f||typeof f!="object"||!("revitflowlock"in f)||!Array.isArray(f.keys)?null:{owner:String(f.user??""),keys:f.keys.filter(y=>typeof y=="string")}}catch{return null}})),r=new Set,i=new Map;for(const o of s)if(o)for(const c of o.keys){if(!c||r.has(c))continue;r.add(c);const u=i.get(o.owner)??[];u.push(c),i.set(o.owner,u)}return[...i.entries()].map(([o,c])=>({owner:o,elements:c}))}async sync(t){var c;const e=await a(this,d,F).call(this,!0);let s=await a(this,d,It).call(this)??{model:this.docId,commits:[]};const r=Fe(s.commits);if(t.expectedLatestGuid!==void 0&&(r==null?void 0:r.guid)!==t.expectedLatestGuid)throw new ee(t.expectedLatestGuid,r==null?void 0:r.guid);const i={guid:Bt(),...r?{parents:[r.guid]}:{},author:t.author,source:t.source,timestamp:new Date().toISOString(),...t.message?{message:t.message}:{},...t.userId?{userId:t.userId}:{},...(c=t.appliedOps)!=null&&c.length?{appliedOps:t.appliedOps}:{},changes:t.changes,counts:pn(t.changes)};if(t.model&&(await a(this,d,ns).call(this,e,t.model),i.full=!0),t.delta){const u=await a(this,d,et).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,d,It).call(this);if(o){s=o;const u=Fe(s.commits);if(t.expectedLatestGuid!==void 0&&(u==null?void 0:u.guid)!==t.expectedLatestGuid)throw new ee(t.expectedLatestGuid,u==null?void 0:u.guid);u&&!i.parents&&(i.parents=[u.guid])}return s.commits.push(i),await a(this,d,Ct).call(this,e,se,s),i}async suggestions(){const t=await a(this,d,dt).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,d,F).call(this,!0),s=await a(this,d,dt).call(this)??{schema:Le,ops:[]},r=await a(this,d,ut).call(this,Q),i={opId:t.opId??Bt(),to:t.to??this.source,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 c=r??await a(this,d,oe).call(this,e,Q,s),u=await this.client.createHiddenFile(t.payload,c.id);i.fragId=String(u._id??u.id)}const o=await a(this,d,dt).call(this)??s;return o.schema??(o.schema=Le),o.ops.push(i),await a(this,d,Ct).call(this,e,Q,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,d,F).call(this,!1);if(!s)throw new Error("This document has no suggestion queue.");const r=await a(this,d,dt).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,d,Ct).call(this,s,Q,r),i}}q=new WeakMap,d=new WeakSet,Z=function(){return new Te(this.client,this.project.projectId)},tt=function(){return`${this.source}-${this.docId}`},F=async function(t){if(l(this,q))return l(this,q);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=ts(s,e).find(o=>String(o.name??"")===l(this,d,tt));if(r)return _(this,q,N(r)),l(this,q);if(!t)throw new Error(`Document ${l(this,d,tt)} does not exist in this project.`);const i=await this.client.createFolder(l(this,d,tt),e,this.project.projectId);return _(this,q,N(i)),l(this,q)},re=async function(){const t=await a(this,d,F).call(this,!1);return(await this.client.listFiles({folderId:t})).map(s=>({id:N(s),name:String(s.name??"")}))},ut=async function(t){try{return(await a(this,d,re).call(this)).find(e=>e.name===t)}catch{return}},et=async function(){try{const t=await a(this,d,re).call(this);return t.find(e=>e.name===Qe)??t.find(e=>e.name.endsWith(".frag")&&!e.name.startsWith(Ze))}catch{return}},ie=async function(t){const e=await a(this,d,ut).call(this,t);if(!e)return;const r=await(await this.client.downloadFile(e.id)).text();if(r.trim())return JSON.parse(r)},It=function(){return a(this,d,ie).call(this,se)},dt=function(){return a(this,d,ie).call(this,Q)},Ct=async function(t,e,s){const r=new Blob([JSON.stringify(s)],{type:"application/json"}),i=await a(this,d,ut).call(this,e);return i?(await this.client.updateFile(i.id,{file:r,versionTag:St()}),i):await a(this,d,oe).call(this,t,e,s)},oe=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:St(),parentFolderId:t,projectId:this.project.projectId}),o=i.item;return{id:N(o??i),name:e}},ns=async function(t,e){const s=await a(this,d,et).call(this);if(s)return await this.client.updateFile(s.id,{file:e,versionTag:St()}),s;const r=`${l(this,d,tt)}.frag`,i=await this.client.createFile({file:e,name:r,versionTag:St(),parentFolderId:t,projectId:this.project.projectId}),o=i.item;return{id:N(o??i),name:r}};function pn(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 Se(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(),c=new Set;for(;o.length;){const f=o.pop();if(c.has(f.guid))continue;c.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)c.has(f.guid)||i.push(f);return i.forEach((f,y)=>f.ordinal=y),i}function Fe(n){const t=Se(n);return t[t.length-1]}function Bt(){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 H,gt,ae;class rs{constructor(t){b(this,gt);b(this,H,new Map);this.client=t}register(t){if(l(this,H).has(t.name))throw new Error(`A recipe named "${t.name}" is already registered.`);l(this,H).set(t.name,t)}list(t){return[...l(this,H).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,H).get(t)}async plan(t,e){const{base:s,opId:r,result:i}=await a(this,gt,ae).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,gt,ae).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}}}H=new WeakMap,gt=new WeakSet,ae=async function(t,e){const s=l(this,H).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=Bt(),c=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:c}};const ce=100;function yn(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 mn(n){if(!n||typeof n!="object")return;const t=n.retryAfter;return typeof t=="number"&&Number.isFinite(t)&&t>=0?t:void 0}class Dt extends Error{constructor(e,s,r,i){const o=yn(r);super(o.message??`${s||"Request failed"} (${e})`);T(this,"status");T(this,"code");T(this,"details");T(this,"body");T(this,"retryAfter");this.name="RequestError",this.status=e,this.code=o.code,this.details=o.details,this.body=r,this.retryAfter=i??mn(o.details)}}const R="item/folder",m="item",j="processor",gn="npm-registry",L="hidden",Gt="FILE",Vt="TOOL",Jt="APP",wn=500,qe=3e4,bn=.25,_n=n=>new Promise(t=>setTimeout(t,n));function En(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 vn(n){return n instanceof Dt?n.status===429||n.status>=500:!0}function Tn(n,t){const e=Math.min(wn*2**t,qe),s=e*bn*Math.random(),r=n instanceof Dt&&n.retryAfter!=null?n.retryAfter*1e3:void 0;return r!=null?Math.min(r,qe)+s:e+s}var h,he,p,M,wt,ft,xt,$t,le,ue,is;const Oe=class Oe{constructor(t,e,s){b(this,h);T(this,"apiUrl");T(this,"accessToken");T(this,"wsUrl");T(this,"retries");T(this,"useBearer");T(this,"builtInGlobals",null);T(this,"localServerUrl",null);T(this,"context");b(this,wt);const{retries:r=0,useBearer:i=!1,localServerUrl:o}=s||{};let c=e;if(c.charAt(c.length-1)==="/"&&(c=c.slice(0,-1)),this.apiUrl=`${c}/api`,this.accessToken=t,this.wsUrl=c,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 Oe(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,h,p).call(this,t,e,s)}async listFiles(t){const{folderId:e,archived:s,projectId:r}=t||{};return e?await a(this,h,p).call(this,"GET",`${R}/${e}/items`,{query:{itemType:Gt,archived:s}}):await a(this,h,p).call(this,"GET",`${m}`,{query:{itemType:Gt,archived:s,...r&&{projectId:r}}})}async getFile(t,e){return await a(this,h,ue).call(this,t,e)}async createFile(t){return await a(this,h,$t).call(this,t,Gt)}async updateFile(t,e){return await a(this,h,le).call(this,t,e)}async archiveFile(t){return await a(this,h,p).call(this,"DELETE",`${m}/${t}`)}async recoverFile(t){return await a(this,h,p).call(this,"PUT",`${m}/${t}/recover`)}async downloadFile(t,e){return await a(this,h,xt).call(this,t,e)}async getFileVersionMetadata(t,e,s){const{withDraft:r}=s||{};return await a(this,h,p).call(this,"GET",`${m}/${encodeURIComponent(t)}/version/${encodeURIComponent(e)}/metadata`,{query:{...r&&{withDraft:"true"}}})}async updateFileVersionMetadata(t,e,s){return await a(this,h,p).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,h,p).call(this,"DELETE",`${m}/${encodeURIComponent(t)}/version/${encodeURIComponent(e)}/metadata`)}async getFileVersionMetadataBatch(t,e){const{withDraft:s}=e||{};return await a(this,h,ft).call(this,t,async r=>(await a(this,h,p).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,h,p).call(this,"GET",R,{query:{parentFolderId:s,archived:e,...r&&{projectId:r}}})}async getFolder(t){return await a(this,h,p).call(this,"GET",`${R}/${t}`)}async getFoldersBatch(t){return await a(this,h,ft).call(this,t,async e=>(await a(this,h,p).call(this,"POST",`${m}/batch/folders`,{body:JSON.stringify({folderIds:e}),contentType:"application/json"})).results)}async createFolder(t,e,s){return await a(this,h,p).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,h,p).call(this,"PUT",`${R}/${t}`,{body:JSON.stringify({name:s}),contentType:"application/json"})}async archiveFolder(t){return await a(this,h,p).call(this,"DELETE",`${R}/${t}`)}async recoverFolder(t){return await a(this,h,p).call(this,"PUT",`${R}/${t}/recover`)}async downloadFolder(t){return await a(this,h,M).call(this,`${R}/${t}/download`)}async listComponents(t){const{folderId:e,ShowVersions:s,projectId:r}=t||{};return e?await a(this,h,p).call(this,"GET",`${R}/${e}/items`,{query:{itemType:Vt,...s&&{ShowVersions:s}}}):await a(this,h,p).call(this,"GET",`${m}`,{query:{itemType:Vt,...s&&{ShowVersions:s},...r&&{projectId:r}}})}async getComponent(t,e){return await a(this,h,ue).call(this,t,e)}async createComponent(t){const{componentProps:e}=t;return await a(this,h,$t).call(this,t,Vt,e)}async updateComponent(t,e){const{componentProps:s}=e;return await a(this,h,le).call(this,t,e,s)}async downloadComponent(t,e){return await a(this,h,xt).call(this,t,e)}async downloadComponentBundle(t,e){const{versionTag:s,withDraft:r}=e||{};return await a(this,h,M).call(this,`${m}/${t}/download/bundle`,{query:{...s&&{versionTag:s},...r&&{withDraft:r}}})}async archiveComponent(t){return await a(this,h,p).call(this,"DELETE",`${m}/${t}`)}async recoverComponent(t){return await a(this,h,p).call(this,"PUT",`${m}/${t}/recover`)}async getBuiltInComponent(t){return await(await a(this,h,M).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),c=o.map(w=>i[w]),f=new Function(...o,`${r}
|
|
2
|
-
return main;`)(...c),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,c;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(),(c=(o=this.context.appEventOrchestrator)==null?void 0:o.appLoaded)==null||c.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,h,p).call(this,"GET",`${R}/${e}/items`,{query:{itemType:Jt,...s&&{ShowVersions:s}}}):await a(this,h,p).call(this,"GET",`${m}`,{query:{itemType:Jt,...s&&{ShowVersions:s},...r&&{projectId:r}}})}async createApp(t){const{appProps:e}=t;return await a(this,h,$t).call(this,t,Jt,e)}async downloadApp(t,e){return await a(this,h,xt).call(this,t,e)}async downloadAppBundle(t,e){const{versionTag:s,withDraft:r}=e||{};return await a(this,h,M).call(this,`${m}/${t}/download/bundle`,{query:{...s&&{versionTag:s},...r&&{withDraft:r}}})}async archiveApp(t){return await a(this,h,p).call(this,"DELETE",`${m}/${t}`)}async getNpmCredentials(){return await a(this,h,p).call(this,"GET",`${gn}/credentials`)}async executeComponent(t,e,s){if(this.localServerUrl){const r=`${this.localServerUrl}/api/${j}/${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,h,p).call(this,"POST",`${j}/${t}/execute`,{body:JSON.stringify(e),query:{...s&&{versionTag:s}},contentType:"application/json"})}async abortExecution(t){if(this.localServerUrl){const e=`${this.localServerUrl}/api/${j}/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,h,p).call(this,"POST",`${j}/progress/${t}/abort`)}async listExecutions(t,e){if(this.localServerUrl){const s=e?`?projectId=${encodeURIComponent(e)}`:"",r=`${this.localServerUrl}/api/${j}/${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,h,p).call(this,"GET",`${j}/${t}/progress`,{query:{...e&&{projectId:e}}})}async getExecution(t){if(this.localServerUrl){const e=`${this.localServerUrl}/api/${j}/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,h,p).call(this,"GET",`${j}/progress/${t}`)}async onExecutionProgress(t,e){const s=this.localServerUrl??this.wsUrl,r=await pt(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)})}documents(t){return new Te(this,t)}history(t){return new es(this,t)}get recipes(){return l(this,wt)??_(this,wt,new rs(this)),l(this,wt)}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,h,p).call(this,"POST",`${m}/${L}`,{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,h,p).call(this,"POST",`${m}/${L}/batch`,{body:r})}async deleteHiddenFile(t){return await a(this,h,p).call(this,"DELETE",`${m}/${L}/${t}`)}async getHiddenFile(t){return await a(this,h,p).call(this,"GET",`${m}/${L}/${t}`)}async downloadHiddenFile(t){return await a(this,h,M).call(this,`${m}/${L}/${t}/download`)}async getHiddenFileSignedUrl(t,e){return await a(this,h,p).call(this,"GET",`${m}/${L}/${t}/signed-url`,{...e!=null&&{query:{expiresIn:e}}})}async getHiddenFileSignedUrlsBatch(t,e){return await a(this,h,ft).call(this,t,async s=>(await a(this,h,p).call(this,"POST",`${m}/${L}/signed-url/batch`,{body:JSON.stringify({hiddenFileIds:s,...e!=null&&{expiresIn:e}}),contentType:"application/json"})).results)}async getHiddenFilesByParent(t,e){return await a(this,h,p).call(this,"GET",`${m}/${t}/${L}`,{...e!=null&&{query:{tag:e}}})}async deleteHiddenFilesByParent(t){return await a(this,h,p).call(this,"DELETE",`${m}/${t}/${L}`)}async uploadItemIcon(t,e){const s=new FormData;return s.append("icon",e),await a(this,h,p).call(this,"PUT",`${m}/${t}/icon`,{body:s})}async getItemIcon(t){return await a(this,h,M).call(this,`${m}/${t}/icon`)}async removeItemIcon(t){return await a(this,h,p).call(this,"DELETE",`${m}/${t}/icon`)}async updateItem(t,e){return await a(this,h,p).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,h,p).call(this,"POST",`${m}/${t}/version`,{body:o})}async listVersions(t,e={}){return await a(this,h,p).call(this,"GET",`${m}/${encodeURIComponent(t)}/versions`,{query:e})}async listVersionsBatch(t,e={}){const{archived:s}=e;return await a(this,h,ft).call(this,t,async r=>(await a(this,h,p).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,h,p).call(this,"PUT",`${m}/${encodeURIComponent(t)}/version/${encodeURIComponent(e)}/archive`)}async recoverVersion(t,e){return await a(this,h,p).call(this,"PUT",`${m}/${encodeURIComponent(t)}/version/${encodeURIComponent(e)}/recover`)}async deleteVersion(t,e){return await a(this,h,p).call(this,"DELETE",`${m}/${encodeURIComponent(t)}/version/${encodeURIComponent(e)}`)}};h=new WeakSet,he=function(t){return`${this.apiUrl}/${t}`},p=async function(t,e,s){const{body:r,query:i,contentType:o,retries:c,responseType:u,retryAttempt:f}=s||{},y=a(this,h,he).call(this,e),w=a(this,h,is).call(this,i),$=await this.resolveAccessToken(),ps={...w,...this.useBearer?{}:{accessToken:$}};try{const I=await fetch(y+"?"+new URLSearchParams(ps).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(Et=>Et).catch(()=>"");throw new Dt(I.status,I.statusText,X,En(I))}return u==="blob"?await I.blob():I.json().then(X=>X).catch(()=>{})}catch(I){const X=c??this.retries;if(X>0&&vn(I)){const Et=f??0;return await _n(Tn(I,Et)),await a(this,h,p).call(this,t,e,{...s,retries:X-1,retryAttempt:Et+1})}throw I}},M=async function(t,e){const{query:s}=e||{},r=a(this,h,he).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}`}}})},wt=new WeakMap,ft=async function(t,e){if(!t.length)return[];const s=[];for(let i=0;i<t.length;i+=ce)s.push(t.slice(i,i+ce));return(await Promise.all(s.map(e))).flat()},xt=async function(t,e){const{versionTag:s,withDraft:r}=e||{};return await a(this,h,M).call(this,`${m}/${t}/download`,{query:{...s&&{versionTag:s},...r&&{withDraft:r}}})},$t=async function(t,e,s){const{name:r,versionTag:i,parentFolderId:o,projectId:c,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),c&&y.append("projectId",c),s&&y.append("extraProps",JSON.stringify(s)),f&&y.append("metadata",JSON.stringify(f)),await a(this,h,p).call(this,"POST",m,{body:y})},le=async function(t,e,s){const{name:r,versionTag:i,parentFolderId:o,file:c,metadata:u}=e;let f,y;if(c){const w=new FormData;w.append("file",c),i&&w.append("versionTag",i),s&&w.append("extraProps",JSON.stringify(s)),u&&w.append("metadata",JSON.stringify(u)),y=await a(this,h,p).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,h,p).call(this,"PUT",`${m}/${t}`,{body:$,contentType:"application/json"})}return{item:f,version:y}},ue=async function(t,e){const{showVersions:s=!1}=e||{};return await a(this,h,p).call(this,"GET",`${m}/${t}`,{query:{showVersions:s}})},is=function(t){return t&&Object.entries(t).filter(([,e])=>e!==void 0).reduce((e,[s,r])=>(e[s]=r,e),{})};let Lt=Oe;function os(){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 de="channel:",Sn=1e4;function Rt(n){try{n()}catch(t){console.error("[channel] a listener threw:",t)}}var D,k,O,nt,rt,it,S,fe,pe,st;class ke{constructor(t,e){b(this,S);b(this,D,!1);b(this,k,[]);b(this,O,[]);b(this,nt,new Set);b(this,rt,new Set);b(this,it,new Set);this.transport=t,this.controls=e}get joined(){return l(this,D)}get peers(){return l(this,k)}join(){return l(this,D)?Promise.resolve():a(this,S,fe).call(this,"joined",this.controls.join)}leave(){return!l(this,D)&&!l(this,O).some(t=>t.want==="joined")?Promise.resolve():a(this,S,fe).call(this,"left",this.controls.leave)}onChange(t){return l(this,nt).add(t),()=>void l(this,nt).delete(t)}onPeerJoined(t){return l(this,rt).add(t),()=>void l(this,rt).delete(t)}onPeerLeft(t){return l(this,it).add(t),()=>void l(this,it).delete(t)}applyJoined(){_(this,D,!0),a(this,S,pe).call(this,"joined"),a(this,S,st).call(this)}applyLeft(){_(this,D,!1),_(this,k,[]),a(this,S,pe).call(this,"left"),a(this,S,st).call(this)}applyPeers(t){_(this,k,t),a(this,S,st).call(this)}applyPeerJoined(t){!l(this,D)||l(this,k).some(e=>e.from===t.from)||(_(this,k,[...l(this,k),t]),l(this,rt).forEach(e=>Rt(()=>e(t))),a(this,S,st).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,it).forEach(s=>Rt(()=>s(e))),a(this,S,st).call(this))}failPending(t){const e=l(this,O);return _(this,O,[]),e.forEach(s=>{clearTimeout(s.timer),s.reject(t)}),e.length>0}post(t){this.transport.post(t)}}D=new WeakMap,k=new WeakMap,O=new WeakMap,nt=new WeakMap,rt=new WeakMap,it=new WeakMap,S=new WeakSet,fe=function(t,e){return new Promise((s,r)=>{const i={want:t,resolve:s,reject:r,timer:setTimeout(()=>{_(this,O,l(this,O).filter(o=>o!==i)),r(new Error(`The platform did not confirm ${t==="joined"?"joining":"leaving"} in time.`))},Sn)};l(this,O).push(i),this.transport.post({type:"APP_CHANNEL_CONTROL",...e})})},pe=function(t){const e=l(this,O).filter(s=>s.want===t);_(this,O,l(this,O).filter(s=>s.want!==t)),e.forEach(s=>{clearTimeout(s.timer),s.resolve()})},st=function(){l(this,nt).forEach(t=>Rt(t))};var ot;class as extends ke{constructor(e){super(e,{join:{action:"joinCollab"},leave:{action:"leaveCollab"}});b(this,ot,new Map)}on(e,s){const r=l(this,ot).get(e)??new Set;return r.add(s),l(this,ot).set(e,r),()=>void r.delete(s)}send(e,s){if(e.startsWith(de))throw new Error(`Message types starting with '${de}' 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,ot).get(e.type);if(!(s!=null&&s.size))return{handled:!1};const r=hs(e);return s.forEach(i=>Rt(()=>i(e.payload,r))),{handled:!0}}}ot=new WeakMap;var G;class cs extends ke{constructor(e,s){super(e,{join:{action:"joinExternal",kind:s},leave:{action:"leaveExternal",kind:s}});b(this,G,new Map);this.kind=s}on(e,s){if(l(this,G).has(e))throw new Error(`"${e}" already has a handler in this room. Remove it first.`);return l(this,G).set(e,s),()=>void l(this,G).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,G).size>0}async handle(e){const s=l(this,G).get(e.type);if(!s)return{handled:!1};try{return{handled:!0,value:await s(e.payload,hs(e))}}catch(r){return{handled:!0,error:r instanceof Error?r.message:String(r)}}}}G=new WeakMap;function hs(n){return{from:n.from,at:n.at,requestId:n.requestId,kind:n.kind}}function kn(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 K,bt,U,V,J,v,ye,Nt,us,ds,fs,me;class ls{constructor(t){b(this,v);b(this,K);b(this,bt);b(this,U);b(this,V,new Map);b(this,J,new Set);_(this,K,t),_(this,bt,t.listen(e=>void a(this,v,us).call(this,e)))}collab(){return l(this,U)??_(this,U,new as(l(this,K))),l(this,U)}external(t){const e=t??"";let s=l(this,V).get(e);return s||(s=new cs(l(this,K),t),l(this,V).set(e,s)),s}dispose(){l(this,bt).call(this)}}K=new WeakMap,bt=new WeakMap,U=new WeakMap,V=new WeakMap,J=new WeakMap,v=new WeakSet,ye=function(){return[...l(this,U)?[l(this,U)]:[],...l(this,V).values()]},Nt=function(t,e){if(t==="collab")return l(this,U);if(t==="external")return l(this,V).get(typeof e=="string"?e:"")},us=async function(t){const e=kn(t);if(e){if(e.type.startsWith(de)){a(this,v,ds).call(this,e);return}await a(this,v,fs).call(this,e)}},ds=function(t){var s,r,i;const e=t.payload??{};switch(t.type){case"channel:joined":(s=a(this,v,Nt).call(this,e.scope,e.kind))==null||s.applyJoined();break;case"channel:left":(r=a(this,v,Nt).call(this,e.scope,e.kind))==null||r.applyLeft();break;case"channel:peers":(i=a(this,v,Nt).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,U)]:[...l(this,V).values()].filter(c=>c.accepts("external",e.kind));for(const c of o)t.type==="channel:peer-joined"?c==null||c.applyPeerJoined({from:e.from,kind:e.kind}):c==null||c.applyPeerLeft(e.from);break}case"channel:error":{const o=new Error(String(t.payload));a(this,v,ye).call(this).map(u=>u.failPending(o)).some(Boolean)||console.error("[channel] error:",t.payload);break}}},fs=async function(t){const e=a(this,v,ye).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,v,me).call(this,t.requestId,o))}t.requestId&&t.scope==="external"&&e.length>0&&!s&&a(this,v,me).call(this,t.requestId,{handled:!0,error:`No handler for "${t.type}".`})},me=function(t,e){l(this,J).has(t)||(l(this,J).add(t),l(this,J).size>500&&l(this,J).delete(l(this,J).values().next().value),l(this,K).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 W="project",z="notifications";var at,_t;const Ae=class Ae extends Lt{constructor(e,s,r){super(typeof e=="string"?e:"",s,{...r,useBearer:!0});b(this,at);b(this,_t);typeof e=="function"&&_(this,at,e)}async resolveAccessToken(){return l(this,at)?await l(this,at).call(this):super.resolveAccessToken()}static fromPlatformContext(e){const s=(typeof window<"u"?window.__THATOPEN_CONTEXT__:null)||{appId:"",projectId:"",accessToken:"",apiUrl:""},r=new Ae(s.accessToken,s.apiUrl,e);return r.context=s,r}get channel(){return l(this,_t)??_(this,_t,new ls(os())),l(this,_t)}async listProjects(){return await this.request("GET",W)}async getProject(e){return await this.request("GET",`${W}/${e}`)}async getProjectData(e){return await this.request("GET",`${W}/${e}/data`)}async getAvatar(e){return await this.request("GET",`account/${e}/avatar`,{responseType:"blob"})}async checkPermission(e){return await this.request("GET",`${W}/permissions/check`,{query:e})}async checkPermissionBatch(e){return(await this.request("POST",`${W}/permissions/check/batch`,{body:JSON.stringify({checks:e}),contentType:"application/json"})).results}async getNotifications(e){return await this.request("GET",z,{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",`${z}/unread-count`)).count}async markNotificationsRead(e){return await this.request("POST",`${z}/mark-read`,{body:JSON.stringify({ids:e}),contentType:"application/json"})}async markAllNotificationsRead(){return await this.request("POST",`${z}/mark-all-read`)}async getNotificationSubscriptions(){return await this.request("GET",`${z}/subscriptions`)}async unsubscribeFromAutomation(e){return await this.request("DELETE",`${z}/subscriptions/${e}`)}async subscribeToAutomation(e,s,r){return await this.request("POST",`${W}/${e}/events/hooks/${s}/subscription`,{body:JSON.stringify(r??{}),contentType:"application/json"})}async updateAutomationSubscription(e,s,r){return await this.request("PATCH",`${W}/${e}/events/hooks/${s}/subscription`,{body:JSON.stringify(r),contentType:"application/json"})}async onNotification(e){const s=await this.resolveAccessToken(),r=pt(`${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()}};at=new WeakMap,_t=new WeakMap;let ge=Ae;const On={MAX_FIELDS:200,MAX_KEY_LENGTH:50,MAX_VALUE_LENGTH:50},An={uuid:"a3f82c1d-5b74-4e9a-bc30-d7e12f894a61"},In={uuid:"2c9f4e8d-3a1b-4c5e-9d7f-0a2b6c8e1d3f"},Cn={uuid:"b0b5e2a2-0b3a-4a6b-8b1c-0b1c4a6b8b1c"},xn={uuid:"d8f3a1c2-6b4e-4f9a-8c1d-2e7b5a9f3c60"},$n={uuid:"3f9c1a7e-6b2d-4e18-9a5c-7d0e2f4b6c81"},Rn={uuid:"2c4ae432-fc24-43e9-9783-0c960c674e96"},Nn={uuid:"6f3a9c2e-8b1d-4e6a-9c3f-1d7b5a8e2c4f"},Pn={uuid:"69af63aa-19ba-4fc7-b17b-75647bac1d76"},Bn={uuid:"234f1416-528d-452a-9cc9-a16c5239b2eb"};exports.CDEManager=An;exports.ChannelClient=ls;exports.ChannelRoom=ke;exports.ClashesManager=In;exports.CollabRoom=as;exports.DOCUMENT_FILE=Zt;exports.DOCUMENT_SCHEMA=Pt;exports.EngineServicesClient=Lt;exports.ExternalRoom=cs;exports.FileList=Cn;exports.FlowDoc=ss;exports.GISManager=xn;exports.GitHistoryManager=$n;exports.HelloWorld=Rn;exports.METADATA_LIMITS=On;exports.PlatformClient=ge;exports.ProjectDocuments=Te;exports.ProjectHistory=es;exports.ProjectManager=Nn;exports.Recipes=rs;exports.RequestError=Dt;exports.STORAGE_BATCH_MAX=ce;exports.StaleHistoryError=ee;exports.TopicsManager=Pn;exports.UIManager=Bn;exports.mintGuid=Bt;exports.orderByGraph=Se;exports.windowTransport=os;
|
|
1
|
+
"use strict";var or=Object.create;var Jt=Object.defineProperty;var ar=Object.getOwnPropertyDescriptor;var cr=Object.getOwnPropertyNames;var hr=Object.getPrototypeOf,lr=Object.prototype.hasOwnProperty;var De=r=>{throw TypeError(r)};var ur=(r,t,e)=>t in r?Jt(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e;var dr=(r,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of cr(t))!lr.call(r,n)&&n!==e&&Jt(r,n,{get:()=>t[n],enumerable:!(s=ar(t,n))||s.enumerable});return r};var Me=(r,t,e)=>(e=r!=null?or(hr(r)):{},dr(t||!r||!r.__esModule?Jt(e,"default",{value:r,enumerable:!0}):e,r));var I=(r,t,e)=>ur(r,typeof t!="symbol"?t+"":t,e),Yt=(r,t,e)=>t.has(r)||De("Cannot "+e);var u=(r,t,e)=>(Yt(r,t,"read from private field"),e?e.call(r):t.get(r)),b=(r,t,e)=>t.has(r)?De("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(r):t.set(r,e),_=(r,t,e,s)=>(Yt(r,t,"write to private field"),s?s.call(r,e):t.set(r,e),e),a=(r,t,e)=>(Yt(r,t,"access private method"),e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const F=Object.create(null);F.open="0";F.close="1";F.ping="2";F.pong="3";F.message="4";F.upgrade="5";F.noop="6";const xt=Object.create(null);Object.keys(F).forEach(r=>{xt[F[r]]=r});const te={type:"error",data:"parser error"},es=typeof Blob=="function"||typeof Blob<"u"&&Object.prototype.toString.call(Blob)==="[object BlobConstructor]",ss=typeof ArrayBuffer=="function",rs=r=>typeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(r):r&&r.buffer instanceof ArrayBuffer,Ie=({type:r,data:t},e,s)=>es&&t instanceof Blob?e?s(t):Ue(t,s):ss&&(t instanceof ArrayBuffer||rs(t))?e?s(t):Ue(new Blob([t]),s):s(F[r]+(t||"")),Ue=(r,t)=>{const e=new FileReader;return e.onload=function(){const s=e.result.split(",")[1];t("b"+(s||""))},e.readAsDataURL(r)};function je(r){return r instanceof Uint8Array?r:r instanceof ArrayBuffer?new Uint8Array(r):new Uint8Array(r.buffer,r.byteOffset,r.byteLength)}let Wt;function fr(r,t){if(es&&r.data instanceof Blob)return r.data.arrayBuffer().then(je).then(t);if(ss&&(r.data instanceof ArrayBuffer||rs(r.data)))return t(je(r.data));Ie(r,!1,e=>{Wt||(Wt=new TextEncoder),t(Wt.encode(e))})}const Ve="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",yt=typeof Uint8Array>"u"?[]:new Uint8Array(256);for(let r=0;r<Ve.length;r++)yt[Ve.charCodeAt(r)]=r;const pr=r=>{let t=r.length*.75,e=r.length,s,n=0,i,o,h,d;r[r.length-1]==="="&&(t--,r[r.length-2]==="="&&t--);const f=new ArrayBuffer(t),c=new Uint8Array(f);for(s=0;s<e;s+=4)i=yt[r.charCodeAt(s)],o=yt[r.charCodeAt(s+1)],h=yt[r.charCodeAt(s+2)],d=yt[r.charCodeAt(s+3)],c[n++]=i<<2|o>>4,c[n++]=(o&15)<<4|h>>2,c[n++]=(h&3)<<6|d&63;return f},yr=typeof ArrayBuffer=="function",Oe=(r,t)=>{if(typeof r!="string")return{type:"message",data:ns(r,t)};const e=r.charAt(0);return e==="b"?{type:"message",data:mr(r.substring(1),t)}:xt[e]?r.length>1?{type:xt[e],data:r.substring(1)}:{type:xt[e]}:te},mr=(r,t)=>{if(yr){const e=pr(r);return ns(e,t)}else return{base64:!0,data:r}},ns=(r,t)=>{switch(t){case"blob":return r instanceof Blob?r:new Blob([r]);case"arraybuffer":default:return r instanceof ArrayBuffer?r:r.buffer}},is="",gr=(r,t)=>{const e=r.length,s=new Array(e);let n=0;r.forEach((i,o)=>{Ie(i,!1,h=>{s[o]=h,++n===e&&t(s.join(is))})})},wr=(r,t)=>{const e=r.split(is),s=[];for(let n=0;n<e.length;n++){const i=Oe(e[n],t);if(s.push(i),i.type==="error")break}return s};function br(){return new TransformStream({transform(r,t){fr(r,e=>{const s=e.length;let n;if(s<126)n=new Uint8Array(1),new DataView(n.buffer).setUint8(0,s);else if(s<65536){n=new Uint8Array(3);const i=new DataView(n.buffer);i.setUint8(0,126),i.setUint16(1,s)}else{n=new Uint8Array(9);const i=new DataView(n.buffer);i.setUint8(0,127),i.setBigUint64(1,BigInt(s))}r.data&&typeof r.data!="string"&&(n[0]|=128),t.enqueue(n),t.enqueue(e)})}})}let Kt;function Ot(r){return r.reduce((t,e)=>t+e.length,0)}function At(r,t){if(r[0].length===t)return r.shift();const e=new Uint8Array(t);let s=0;for(let n=0;n<t;n++)e[n]=r[0][s++],s===r[0].length&&(r.shift(),s=0);return r.length&&s<r[0].length&&(r[0]=r[0].slice(s)),e}function _r(r,t){Kt||(Kt=new TextDecoder);const e=[];let s=0,n=-1,i=!1;return new TransformStream({transform(o,h){for(e.push(o);;){if(s===0){if(Ot(e)<1)break;const d=At(e,1);i=(d[0]&128)===128,n=d[0]&127,n<126?s=3:n===126?s=1:s=2}else if(s===1){if(Ot(e)<2)break;const d=At(e,2);n=new DataView(d.buffer,d.byteOffset,d.length).getUint16(0),s=3}else if(s===2){if(Ot(e)<8)break;const d=At(e,8),f=new DataView(d.buffer,d.byteOffset,d.length),c=f.getUint32(0);if(c>Math.pow(2,21)-1){h.enqueue(te);break}n=c*Math.pow(2,32)+f.getUint32(4),s=3}else{if(Ot(e)<n)break;const d=At(e,n);h.enqueue(Oe(i?d:Kt.decode(d),t)),s=0}if(n===0||n>r){h.enqueue(te);break}}}})}const os=4;function E(r){if(r)return Er(r)}function Er(r){for(var t in E.prototype)r[t]=E.prototype[t];return r}E.prototype.on=E.prototype.addEventListener=function(r,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+r]=this._callbacks["$"+r]||[]).push(t),this};E.prototype.once=function(r,t){function e(){this.off(r,e),t.apply(this,arguments)}return e.fn=t,this.on(r,e),this};E.prototype.off=E.prototype.removeListener=E.prototype.removeAllListeners=E.prototype.removeEventListener=function(r,t){if(this._callbacks=this._callbacks||{},arguments.length==0)return this._callbacks={},this;var e=this._callbacks["$"+r];if(!e)return this;if(arguments.length==1)return delete this._callbacks["$"+r],this;for(var s,n=0;n<e.length;n++)if(s=e[n],s===t||s.fn===t){e.splice(n,1);break}return e.length===0&&delete this._callbacks["$"+r],this};E.prototype.emit=function(r){this._callbacks=this._callbacks||{};for(var t=new Array(arguments.length-1),e=this._callbacks["$"+r],s=1;s<arguments.length;s++)t[s-1]=arguments[s];if(e){e=e.slice(0);for(var s=0,n=e.length;s<n;++s)e[s].apply(this,t)}return this};E.prototype.emitReserved=E.prototype.emit;E.prototype.listeners=function(r){return this._callbacks=this._callbacks||{},this._callbacks["$"+r]||[]};E.prototype.hasListeners=function(r){return!!this.listeners(r).length};const Ut=typeof Promise=="function"&&typeof Promise.resolve=="function"?t=>Promise.resolve().then(t):(t,e)=>e(t,0),R=typeof self<"u"?self:typeof window<"u"?window:Function("return this")(),vr="arraybuffer";function as(r,...t){return t.reduce((e,s)=>(r.hasOwnProperty(s)&&(e[s]=r[s]),e),{})}const Tr=R.setTimeout,Sr=R.clearTimeout;function jt(r,t){t.useNativeTimers?(r.setTimeoutFn=Tr.bind(R),r.clearTimeoutFn=Sr.bind(R)):(r.setTimeoutFn=R.setTimeout.bind(R),r.clearTimeoutFn=R.clearTimeout.bind(R))}const Ir=1.33;function Or(r){return typeof r=="string"?Ar(r):Math.ceil((r.byteLength||r.size)*Ir)}function Ar(r){let t=0,e=0;for(let s=0,n=r.length;s<n;s++)t=r.charCodeAt(s),t<128?e+=1:t<2048?e+=2:t<55296||t>=57344?e+=3:(s++,e+=4);return e}function cs(){return Date.now().toString(36).substring(3)+Math.random().toString(36).substring(2,5)}function kr(r){let t="";for(let e in r)r.hasOwnProperty(e)&&(t.length&&(t+="&"),t+=encodeURIComponent(e)+"="+encodeURIComponent(r[e]));return t}function Cr(r){let t={},e=r.split("&");for(let s=0,n=e.length;s<n;s++){let i=e[s].split("=");t[decodeURIComponent(i[0])]=decodeURIComponent(i[1])}return t}class xr extends Error{constructor(t,e,s){super(t),this.description=e,this.context=s,this.type="TransportError"}}class Ae extends E{constructor(t){super(),this.writable=!1,jt(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 xr(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=Oe(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=kr(t);return e.length?"?"+e:""}}class Rr extends Ae{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)};wr(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,gr(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]=cs()),!this.supportsBinary&&!e.sid&&(e.b64=1),this.createUri(t,e)}}let hs=!1;try{hs=typeof XMLHttpRequest<"u"&&"withCredentials"in new XMLHttpRequest}catch{}const $r=hs;function Nr(){}class Pr extends Rr{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",(n,i)=>{this.onError("xhr post error",n,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 L extends E{constructor(t,e,s){super(),this.createRequest=t,jt(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=as(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 n in this._opts.extraHeaders)this._opts.extraHeaders.hasOwnProperty(n)&&s.setRequestHeader(n,this._opts.extraHeaders[n])}}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 n;s.readyState===3&&((n=this._opts.cookieJar)===null||n===void 0||n.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(n){this.setTimeoutFn(()=>{this._onError(n)},0);return}typeof document<"u"&&(this._index=L.requestsCount++,L.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=Nr,t)try{this._xhr.abort()}catch{}typeof document<"u"&&delete L.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()}}L.requestsCount=0;L.requests={};if(typeof document<"u"){if(typeof attachEvent=="function")attachEvent("onunload",Ge);else if(typeof addEventListener=="function"){const r="onpagehide"in R?"pagehide":"unload";addEventListener(r,Ge,!1)}}function Ge(){for(let r in L.requests)L.requests.hasOwnProperty(r)&&L.requests[r].abort()}const Br=function(){const r=ls({xdomain:!1});return r&&r.responseType!==null}();class Lr extends Pr{constructor(t){super(t);const e=t&&t.forceBase64;this.supportsBinary=Br&&!e}request(t={}){return Object.assign(t,{xd:this.xd},this.opts),new L(ls,this.uri(),t)}}function ls(r){const t=r.xdomain;try{if(typeof XMLHttpRequest<"u"&&(!t||$r))return new XMLHttpRequest}catch{}if(!t)try{return new R[["Active"].concat("Object").join("X")]("Microsoft.XMLHTTP")}catch{}}const us=typeof navigator<"u"&&typeof navigator.product=="string"&&navigator.product.toLowerCase()==="reactnative";class Fr extends Ae{get name(){return"websocket"}doOpen(){const t=this.uri(),e=this.opts.protocols,s=us?{}:as(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(n){return this.emitReserved("error",n)}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],n=e===t.length-1;Ie(s,this.supportsBinary,i=>{try{this.doWrite(s,i)}catch{}n&&Ut(()=>{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]=cs()),this.supportsBinary||(e.b64=1),this.createUri(t,e)}}const Xt=R.WebSocket||R.MozWebSocket;class qr extends Fr{createSocket(t,e,s){return us?new Xt(t,e,s):e?new Xt(t,e):new Xt(t)}doWrite(t,e){this.ws.send(e)}}class Dr extends Ae{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=_r(Number.MAX_SAFE_INTEGER,this.socket.binaryType),s=t.readable.pipeThrough(e).getReader(),n=br();n.readable.pipeTo(t.writable),this._writer=n.writable.getWriter();const i=()=>{s.read().then(({done:h,value:d})=>{h||(this.onPacket(d),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],n=e===t.length-1;this._writer.write(s).then(()=>{n&&Ut(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){var t;(t=this._transport)===null||t===void 0||t.close()}}const Mr={websocket:qr,webtransport:Dr,polling:Lr},Ur=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,jr=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];function ee(r){if(r.length>8e3)throw"URI too long";const t=r,e=r.indexOf("["),s=r.indexOf("]");e!=-1&&s!=-1&&(r=r.substring(0,e)+r.substring(e,s).replace(/:/g,";")+r.substring(s,r.length));let n=Ur.exec(r||""),i={},o=14;for(;o--;)i[jr[o]]=n[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=Vr(i,i.path),i.queryKey=Gr(i,i.query),i}function Vr(r,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 Gr(r,t){const e={};return t.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function(s,n,i){n&&(e[n]=i)}),e}const se=typeof addEventListener=="function"&&typeof removeEventListener=="function",Rt=[];se&&addEventListener("offline",()=>{Rt.forEach(r=>r())},!1);class z extends E{constructor(t,e){if(super(),this.binaryType=vr,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=ee(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=ee(e.host).host);jt(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 n=s.prototype.name;this.transports.push(n),this._transportsByName[n]=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=Cr(this.opts.query)),se&&(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"})},Rt.push(this._offlineEventListener))),this.opts.withCredentials&&(this._cookieJar=void 0),this._open()}createTransport(t){const e=Object.assign({},this.opts.query);e.EIO=os,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&&z.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",z.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 n=this.writeBuffer[s].data;if(n&&(e+=Or(n)),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,Ut(()=>{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,n){if(typeof e=="function"&&(n=e,e=void 0),typeof s=="function"&&(n=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),n&&this.once("flush",n),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(z.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(),se&&(this._beforeunloadEventListener&&removeEventListener("beforeunload",this._beforeunloadEventListener,!1),this._offlineEventListener)){const s=Rt.indexOf(this._offlineEventListener);s!==-1&&Rt.splice(s,1)}this.readyState="closed",this.id=null,this.emitReserved("close",t,e),this.writeBuffer=[],this._prevBufferLen=0}}}z.protocol=os;class Hr extends z{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;z.priorWebsocketSuccess=!1;const n=()=>{s||(e.send([{type:"ping",data:"probe"}]),e.once("packet",g=>{if(!s)if(g.type==="pong"&&g.data==="probe"){if(this.upgrading=!0,this.emitReserved("upgrading",e),!e)return;z.priorWebsocketSuccess=e.name==="websocket",this.transport.pause(()=>{s||this.readyState!=="closed"&&(c(),this.setTransport(e),e.send([{type:"upgrade"}]),this.emitReserved("upgrade",e),e=null,this.upgrading=!1,this.flush())})}else{const v=new Error("probe error");v.transport=e.name,this.emitReserved("upgradeError",v)}}))};function i(){s||(s=!0,c(),e.close(),e=null)}const o=g=>{const v=new Error("probe error: "+g);v.transport=e.name,i(),this.emitReserved("upgradeError",v)};function h(){o("transport closed")}function d(){o("socket closed")}function f(g){e&&g.name!==e.name&&i()}const c=()=>{e.removeListener("open",n),e.removeListener("error",o),e.removeListener("close",h),this.off("close",d),this.off("upgrading",f)};e.once("open",n),e.once("error",o),e.once("close",h),this.once("close",d),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 Jr=class extends Hr{constructor(t,e={}){const s=typeof t=="object",n=s?{...t}:{...e};(!n.transports||n.transports&&typeof n.transports[0]=="string")&&(n.transports=(n.transports||["polling","websocket","webtransport"]).map(i=>Mr[i]).filter(i=>!!i)),super(s?n:t,n)}};function Yr(r,t="",e){let s=r;e=e||typeof location<"u"&&location,r==null&&(r=e.protocol+"//"+e.host),typeof r=="string"&&(r.charAt(0)==="/"&&(r.charAt(1)==="/"?r=e.protocol+r:r=e.host+r),/^(https?|wss?):\/\//.test(r)||(typeof e<"u"?r=e.protocol+"//"+r:r="https://"+r),s=ee(r)),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 Wr=typeof ArrayBuffer=="function",Kr=r=>typeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(r):r.buffer instanceof ArrayBuffer,ds=Object.prototype.toString,Xr=typeof Blob=="function"||typeof Blob<"u"&&ds.call(Blob)==="[object BlobConstructor]",zr=typeof File=="function"||typeof File<"u"&&ds.call(File)==="[object FileConstructor]";function ke(r){return Wr&&(r instanceof ArrayBuffer||Kr(r))||Xr&&r instanceof Blob||zr&&r instanceof File}function $t(r,t){if(!r||typeof r!="object")return!1;if(Array.isArray(r)){for(let e=0,s=r.length;e<s;e++)if($t(r[e]))return!0;return!1}if(ke(r))return!0;if(r.toJSON&&typeof r.toJSON=="function"&&arguments.length===1)return $t(r.toJSON(),!0);for(const e in r)if(Object.prototype.hasOwnProperty.call(r,e)&&$t(r[e]))return!0;return!1}function Qr(r){const t=[],e=r.data,s=r;return s.data=re(e,t),s.attachments=t.length,{packet:s,buffers:t}}function re(r,t){if(!r)return r;if(ke(r)){const e={_placeholder:!0,num:t.length};return t.push(r),e}else if(Array.isArray(r)){const e=new Array(r.length);for(let s=0;s<r.length;s++)e[s]=re(r[s],t);return e}else if(typeof r=="object"&&!(r instanceof Date)){const e={};for(const s in r)Object.prototype.hasOwnProperty.call(r,s)&&(e[s]=re(r[s],t));return e}return r}function Zr(r,t){return r.data=ne(r.data,t),delete r.attachments,r}function ne(r,t){if(!r)return r;if(r&&r._placeholder===!0){if(typeof r.num=="number"&&r.num>=0&&r.num<t.length)return t[r.num];throw new Error("illegal attachments")}else if(Array.isArray(r))for(let e=0;e<r.length;e++)r[e]=ne(r[e],t);else if(typeof r=="object")for(const e in r)Object.prototype.hasOwnProperty.call(r,e)&&(r[e]=ne(r[e],t));return r}const tn=["connect","connect_error","disconnect","disconnecting","newListener","removeListener"];var w;(function(r){r[r.CONNECT=0]="CONNECT",r[r.DISCONNECT=1]="DISCONNECT",r[r.EVENT=2]="EVENT",r[r.ACK=3]="ACK",r[r.CONNECT_ERROR=4]="CONNECT_ERROR",r[r.BINARY_EVENT=5]="BINARY_EVENT",r[r.BINARY_ACK=6]="BINARY_ACK"})(w||(w={}));class en{constructor(t){this.replacer=t}encode(t){return(t.type===w.EVENT||t.type===w.ACK)&&$t(t)?this.encodeAsBinary({type:t.type===w.EVENT?w.BINARY_EVENT:w.BINARY_ACK,nsp:t.nsp,data:t.data,id:t.id}):[this.encodeAsString(t)]}encodeAsString(t){let e=""+t.type;return(t.type===w.BINARY_EVENT||t.type===w.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=Qr(t),s=this.encodeAsString(e.packet),n=e.buffers;return n.unshift(s),n}}class Ce 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===w.BINARY_EVENT;s||e.type===w.BINARY_ACK?(e.type=s?w.EVENT:w.ACK,this.reconstructor=new sn(e),e.attachments===0&&super.emitReserved("decoded",e)):super.emitReserved("decoded",e)}else if(ke(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(w[s.type]===void 0)throw new Error("unknown packet type "+s.type);if(s.type===w.BINARY_EVENT||s.type===w.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(!rn(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 n=t.charAt(e+1);if(n!==""&&Number(n)==n){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(Ce.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 w.CONNECT:return He(e);case w.DISCONNECT:return e===void 0;case w.CONNECT_ERROR:return typeof e=="string"||He(e);case w.EVENT:case w.BINARY_EVENT:return Array.isArray(e)&&(typeof e[0]=="number"||typeof e[0]=="string"&&tn.indexOf(e[0])===-1);case w.ACK:case w.BINARY_ACK:return Array.isArray(e)}}destroy(){this.reconstructor&&(this.reconstructor.finishedReconstruction(),this.reconstructor=null)}}class sn{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=Zr(this.reconPack,this.buffers);return this.finishedReconstruction(),e}return null}finishedReconstruction(){this.reconPack=null,this.buffers=[]}}const rn=Number.isInteger||function(r){return typeof r=="number"&&isFinite(r)&&Math.floor(r)===r};function He(r){return Object.prototype.toString.call(r)==="[object Object]"}const nn=Object.freeze(Object.defineProperty({__proto__:null,Decoder:Ce,Encoder:en,get PacketType(){return w}},Symbol.toStringTag,{value:"Module"}));function N(r,t,e){return r.on(t,e),function(){r.off(t,e)}}const on=Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1});class fs 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=[N(t,"open",this.onopen.bind(this)),N(t,"packet",this.onpacket.bind(this)),N(t,"error",this.onerror.bind(this)),N(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,n,i;if(on.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:w.EVENT,data:e};if(o.options={},o.options.compress=this.flags.compress!==!1,typeof e[e.length-1]=="function"){const c=this.ids++,g=e.pop();this._registerAckCallback(c,g),o.id=c}const h=(n=(s=this.io.engine)===null||s===void 0?void 0:s.transport)===null||n===void 0?void 0:n.writable,d=this.connected&&!(!((i=this.io.engine)===null||i===void 0)&&i._hasPingExpired());return this.flags.volatile&&!h||(d?(this.notifyOutgoingListeners(o),this.packet(o)):this.sendBuffer.push(o)),this.flags={},this}_registerAckCallback(t,e){var s;const n=(s=this.flags.timeout)!==null&&s!==void 0?s:this._opts.ackTimeout;if(n===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"))},n),o=(...h)=>{this.io.clearTimeoutFn(i),e.apply(this,h)};o.withError=!0,this.acks[t]=o}emitWithAck(t,...e){return new Promise((s,n)=>{const i=(o,h)=>o?n(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((n,...i)=>(this._queue[0],n!==null?s.tryCount>this._opts.retries&&(this._queue.shift(),e&&e(n)):(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:w.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 w.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 w.EVENT:case w.BINARY_EVENT:this.onevent(t);break;case w.ACK:case w.BINARY_ACK:this.onack(t);break;case w.DISCONNECT:this.ondisconnect();break;case w.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(...n){s||(s=!0,e.packet({type:w.ACK,id:t,data:n}))}}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:w.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 ft(r){r=r||{},this.ms=r.min||100,this.max=r.max||1e4,this.factor=r.factor||2,this.jitter=r.jitter>0&&r.jitter<=1?r.jitter:0,this.attempts=0}ft.prototype.duration=function(){var r=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var t=Math.random(),e=Math.floor(t*this.jitter*r);r=Math.floor(t*10)&1?r+e:r-e}return Math.min(r,this.max)|0};ft.prototype.reset=function(){this.attempts=0};ft.prototype.setMin=function(r){this.ms=r};ft.prototype.setMax=function(r){this.max=r};ft.prototype.setJitter=function(r){this.jitter=r};class ie 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,jt(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 ft({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(e.timeout==null?2e4:e.timeout),this._readyState="closed",this.uri=t;const n=e.parser||nn;this.encoder=new n.Encoder,this.decoder=new n.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 Jr(this.uri,this.opts);const e=this.engine,s=this;this._readyState="opening",this.skipReconnect=!1;const n=N(e,"open",function(){s.onopen(),t&&t()}),i=h=>{this.cleanup(),this._readyState="closed",this.emitReserved("error",h),t?t(h):this.maybeReconnectOnOpen()},o=N(e,"error",i);if(this._timeout!==!1){const h=this._timeout,d=this.setTimeoutFn(()=>{n(),i(new Error("timeout")),e.close()},h);this.opts.autoUnref&&d.unref(),this.subs.push(()=>{this.clearTimeoutFn(d)})}return this.subs.push(n),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(N(t,"ping",this.onping.bind(this)),N(t,"data",this.ondata.bind(this)),N(t,"error",this.onerror.bind(this)),N(t,"close",this.onclose.bind(this)),N(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){Ut(()=>{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 fs(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(n=>{n?(t._reconnecting=!1,t.reconnect(),this.emitReserved("reconnect_error",n)):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 pt={};function bt(r,t){typeof r=="object"&&(t=r,r=void 0),t=t||{};const e=Yr(r,t.path||"/socket.io"),s=e.source,n=e.id,i=e.path,o=pt[n]&&i in pt[n].nsps,h=t.forceNew||t["force new connection"]||t.multiplex===!1||o;let d;return h?d=new ie(s,t):(pt[n]||(pt[n]=new ie(s,t)),d=pt[n]),e.query&&!t.query&&(t.query=e.queryKey),d.socket(e.path,t)}Object.assign(bt,{Manager:ie,Socket:fs,io:bt,connect:bt});const _t="thatopen/document@1",oe="document.json",ps=["pdf","txt","md","json","csv","tsv","frag"],Je=()=>`v-${Date.now()}`;function kt(r){return String(r._id??r.id??"")}var tt,ys,ae;class xe{constructor(t,e){b(this,tt);this.client=t,this.projectId=e}async list(){const t=await this.client.listFolders({projectId:this.projectId});return(await Promise.all(t.map(async s=>{const n=kt(s),i=await this.descriptor(n);return i?{folderId:n,descriptor:i}:null}))).filter(s=>s!==null)}async fromFile(t,e){const s=await this.client.getFile(t),n=String(s.name??""),i=Ye(n,s.fileExtension),o=(e==null?void 0:e.name)??n.replace(/\.[^.]+$/,"")??n,h=await this.client.createFolder(o,s.folderId?String(s.folderId):void 0,this.projectId),d=kt(h);await this.client.updateFile(t,{parentFolderId:d});const f=[],c=await a(this,tt,ys).call(this,s);if(c)try{const V=await this.client.getFile(c);await this.client.updateFile(c,{parentFolderId:d}),f.push({fileId:c,format:Ye(String(V.name??""),V.fileExtension)})}catch{}((e==null?void 0:e.selfView)??ps.includes(i))&&f.push({fileId:t,format:i});const v={schema:_t,name:o,native:{fileId:t,format:i},views:f};return await this.setDescriptor(d,v),{folderId:d,descriptor:v}}async descriptor(t){const e=await a(this,tt,ae).call(this,t);if(!e)return null;const n=await(await this.client.downloadFile(e.id)).text();if(!n.trim())return null;let i;try{i=JSON.parse(n)}catch{return null}return an(i)}async view(t,e){const s=await this.descriptor(t);if(!s)return null;for(const n of e){const i=s.views.find(o=>o.format===n);if(i)return i}return null}async addView(t,e){const s=await this.descriptor(t);if(!s)throw new Error("This folder has no document descriptor yet: call setDescriptor first.");s.views=[...s.views.filter(n=>n.format!==e.format),e],await this.setDescriptor(t,s)}async setDescriptor(t,e){const s={...e,schema:_t,views:e.views??[]},n=new Blob([JSON.stringify(s)],{type:"application/json"}),i=await a(this,tt,ae).call(this,t);if(i){await this.client.updateFile(i.id,{file:n,versionTag:Je()});return}await this.client.createFile({file:n,name:oe,versionTag:Je(),parentFolderId:t,projectId:this.projectId})}}tt=new WeakSet,ys=async function(t){const e=[...t.versions??[]].sort((s,n)=>String(n.createdAt??"").localeCompare(String(s.createdAt??"")));for(const s of e)try{const n=await this.client.getFileVersionMetadata(kt(t),s.tag),i=n==null?void 0:n.derivedFileId;if(typeof i=="string"&&i)return i}catch{}},ae=async function(t){const s=(await this.client.listFiles({folderId:t})).find(n=>String(n.name??"")===oe);return s?{id:kt(s)}:void 0};function Ye(r,t){const e=(t??"").replace(/^\./,"").toLowerCase();if(e)return e;const s=r.lastIndexOf(".");return s>0?r.slice(s+1).toLowerCase():""}function an(r){if(!r||typeof r!="object")return null;const t=r;if(t.schema!==_t||typeof t.name!="string")return null;const e=Array.isArray(t.views)?t.views.filter(i=>!!i&&typeof i=="object"&&typeof i.fileId=="string"&&typeof i.format=="string"):[],s=t.native,n=!!s&&typeof s=="object"&&typeof s.fileId=="string"&&typeof s.format=="string";return{schema:_t,name:t.name,...n?{native:{fileId:s.fileId,format:s.format}}:{},views:e}}class ce 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 We="bimterop",he="revitflow_history.json",rt="revitflow_ops.json",Ke="revitflow/ops@1",ms="revitflow_model.frag",gs="revitflow_",cn="bimterop-locks-anchor",Ct=()=>`v-${Date.now()}`;function ws(r,t){return r.filter(e=>String(e.parentId??"")===t)}function B(r){return String(r._id??r.id??"")}var $,Et,le;class bs{constructor(t,e){b(this,Et);b(this,$);this.client=t,this.projectId=e}async docs(){const t=await a(this,Et,le).call(this);if(!t)return[];const e=await this.client.listFolders({parentFolderId:t,projectId:this.projectId}),s=[];for(const n of ws(e,t)){const i=String(n.name??""),o=i.indexOf("-");if(o<=0)continue;const d=(await this.client.listFiles({folderId:B(n)})).map(g=>String(g.name??"")),f=d.find(g=>g===ms)??d.find(g=>g.endsWith(".frag")&&!g.startsWith(gs)),c=d.includes(he)||d.includes(rt)||!!f;s.push({source:i.slice(0,o),docId:i.slice(o+1),folderId:B(n),modelName:f,...c?{}:{empty:!0}})}return s}doc(t,e){return new _s(this.client,this,t,e)}async rootFolderId(t=!1){if(u(this,$))return u(this,$);const e=await a(this,Et,le).call(this);if(e)return e;if(!t)return;const s=await this.client.createFolder(We,void 0,this.projectId);return _(this,$,B(s)),u(this,$)}}$=new WeakMap,Et=new WeakSet,le=async function(){if(u(this,$))return u(this,$);const e=(await this.client.listFolders({projectId:this.projectId})).find(s=>String(s.name??"")===We&&!s.parentId);return e&&_(this,$,B(e)),u(this,$)};var M,p,nt,it,D,ue,mt,ot,de,Nt,gt,Pt,fe,Es;class _s{constructor(t,e,s,n){b(this,p);b(this,M);this.client=t,this.project=e,this.source=s,this.docId=n}async timeline(){const t=await a(this,p,Nt).call(this);return Re((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,ot).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 folderId(){return await a(this,p,D).call(this,!1)}async descriptor(){return await u(this,p,nt).descriptor(await a(this,p,D).call(this,!1))}async view(t){const e=await a(this,p,D).call(this,!1),s=await u(this,p,nt).descriptor(e);if(s){for(const i of t){const o=s.views.find(h=>h.format===i);if(o)return o}return null}if(!t.includes("frag"))return null;const n=await a(this,p,ot).call(this);return n?{fileId:n.id,format:"frag"}:null}async addView(t){const e=await a(this,p,D).call(this,!0);if(await u(this,p,nt).descriptor(e)){await u(this,p,nt).addView(e,t);return}const n=await a(this,p,ot).call(this);await u(this,p,nt).setDescriptor(e,{name:(n==null?void 0:n.name.replace(/\.frag$/,""))??u(this,p,it),views:[t]})}async ownership(){const t=await a(this,p,mt).call(this,cn);if(!t)return[];const e=await this.client.getHiddenFilesByParent(t.id),s=await Promise.all(e.map(async o=>{try{const h=B(o),d=await this.client.downloadHiddenFile(h),f=JSON.parse(await d.text());return!f||typeof f!="object"||!("revitflowlock"in f)||!Array.isArray(f.keys)?null:{owner:String(f.user??""),keys:f.keys.filter(c=>typeof c=="string")}}catch{return null}})),n=new Set,i=new Map;for(const o of s)if(o)for(const h of o.keys){if(!h||n.has(h))continue;n.add(h);const d=i.get(o.owner)??[];d.push(h),i.set(o.owner,d)}return[...i.entries()].map(([o,h])=>({owner:o,elements:h}))}async sync(t){var h;const e=await a(this,p,D).call(this,!0);let s=await a(this,p,Nt).call(this)??{model:this.docId,commits:[]};const n=Xe(s.commits);if(t.expectedLatestGuid!==void 0&&(n==null?void 0:n.guid)!==t.expectedLatestGuid)throw new ce(t.expectedLatestGuid,n==null?void 0:n.guid);const i={guid:Dt(),...n?{parents:[n.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:hn(t.changes)};if(t.model&&(await a(this,p,Es).call(this,e,t.model),i.full=!0),t.delta){const d=await a(this,p,ot).call(this);if(!d)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,d.id);i.deltaId=String(f._id??f.id)}const o=await a(this,p,Nt).call(this);if(o){s=o;const d=Xe(s.commits);if(t.expectedLatestGuid!==void 0&&(d==null?void 0:d.guid)!==t.expectedLatestGuid)throw new ce(t.expectedLatestGuid,d==null?void 0:d.guid);d&&!i.parents&&(i.parents=[d.guid])}return s.commits.push(i),await a(this,p,Pt).call(this,e,he,s),i}async suggestions(){const t=await a(this,p,gt).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,D).call(this,!0),s=await a(this,p,gt).call(this)??{schema:Ke,ops:[]},n=await a(this,p,mt).call(this,rt),i={opId:t.opId??Dt(),to:t.to??this.source,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=n??await a(this,p,fe).call(this,e,rt,s),d=await this.client.createHiddenFile(t.payload,h.id);i.fragId=String(d._id??d.id)}const o=await a(this,p,gt).call(this)??s;return o.schema??(o.schema=Ke),o.ops.push(i),await a(this,p,Pt).call(this,e,rt,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,D).call(this,!1);if(!s)throw new Error("This document has no suggestion queue.");const n=await a(this,p,gt).call(this),i=n==null?void 0:n.ops.find(o=>o.opId===t);if(!n||!i)throw new Error(`No suggestion ${t} in this document's queue.`);return Object.assign(i,e),await a(this,p,Pt).call(this,s,rt,n),i}}M=new WeakMap,p=new WeakSet,nt=function(){return new xe(this.client,this.project.projectId)},it=function(){return`${this.source}-${this.docId}`},D=async function(t){if(u(this,M))return u(this,M);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}),n=ws(s,e).find(o=>String(o.name??"")===u(this,p,it));if(n)return _(this,M,B(n)),u(this,M);if(!t)throw new Error(`Document ${u(this,p,it)} does not exist in this project.`);const i=await this.client.createFolder(u(this,p,it),e,this.project.projectId);return _(this,M,B(i)),u(this,M)},ue=async function(){const t=await a(this,p,D).call(this,!1);return(await this.client.listFiles({folderId:t})).map(s=>({id:B(s),name:String(s.name??"")}))},mt=async function(t){try{return(await a(this,p,ue).call(this)).find(e=>e.name===t)}catch{return}},ot=async function(){try{const t=await a(this,p,ue).call(this);return t.find(e=>e.name===ms)??t.find(e=>e.name.endsWith(".frag")&&!e.name.startsWith(gs))}catch{return}},de=async function(t){const e=await a(this,p,mt).call(this,t);if(!e)return;const n=await(await this.client.downloadFile(e.id)).text();if(n.trim())return JSON.parse(n)},Nt=function(){return a(this,p,de).call(this,he)},gt=function(){return a(this,p,de).call(this,rt)},Pt=async function(t,e,s){const n=new Blob([JSON.stringify(s)],{type:"application/json"}),i=await a(this,p,mt).call(this,e);return i?(await this.client.updateFile(i.id,{file:n,versionTag:Ct()}),i):await a(this,p,fe).call(this,t,e,s)},fe=async function(t,e,s){const n=new Blob([JSON.stringify(s)],{type:"application/json"}),i=await this.client.createFile({file:n,name:e,versionTag:Ct(),parentFolderId:t,projectId:this.project.projectId}),o=i.item;return{id:B(o??i),name:e}},Es=async function(t,e){const s=await a(this,p,ot).call(this);if(s)return await this.client.updateFile(s.id,{file:e,versionTag:Ct()}),s;const n=`${u(this,p,it)}.frag`,i=await this.client.createFile({file:e,name:n,versionTag:Ct(),parentFolderId:t,projectId:this.project.projectId}),o=i.item;return{id:B(o??i),name:n}};function hn(r){const t={added:0,modified:0,removed:0};for(const e of r)e.type==="create"?t.added++:e.type==="delete"?t.removed++:t.modified++;return t}function Re(r){var d;if(r.length<=1)return r.forEach((f,c)=>f.ordinal=c),[...r];const t=new Map(r.map(f=>[f.guid,f])),e=new Map,s=[];for(const f of r){const c=(d=f.parents)==null?void 0:d[0];if(c&&t.has(c)){const g=e.get(c)??[];g.push(f),e.set(c,g)}else s.push(f)}const n=(f,c)=>String(f.timestamp).localeCompare(String(c.timestamp));s.sort(n);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 c=(e.get(f.guid)??[]).sort(n);for(let g=c.length-1;g>=0;g--)o.push(c[g])}for(const f of r)h.has(f.guid)||i.push(f);return i.forEach((f,c)=>f.ordinal=c),i}function Xe(r){const t=Re(r);return t[t.length-1]}function Dt(){const r=globalThis.crypto;return r!=null&&r.randomUUID?r.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 Y,vt,pe;class vs{constructor(t){b(this,vt);b(this,Y,new Map);this.client=t}register(t){if(u(this,Y).has(t.name))throw new Error(`A recipe named "${t.name}" is already registered.`);u(this,Y).set(t.name,t)}list(t){return[...u(this,Y).values()].filter(s=>(!(t!=null&&t.to)||s.to===t.to)&&(!(t!=null&&t.input)||s.inputs.includes(t.input)))}get(t){return u(this,Y).get(t)}async plan(t,e){const{base:s,opId:n,result:i}=await a(this,vt,pe).call(this,t,e);return{opId:n,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:n,opId:i,result:o}=await a(this,vt,pe).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:n==null?void 0:n.guid}),result:o}}}Y=new WeakMap,vt=new WeakSet,pe=async function(t,e){const s=u(this,Y).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 n=this.client.history(e.projectId).doc(e.target.source,e.target.docId),i=await n.latest(),o=Dt(),h=await s.run({client:this.client,projectId:e.projectId,targetDoc:n,opId:o,input:e.input,settings:e.settings??{}});return{recipe:s,targetDoc:n,base:i,opId:o,result:h}};const ye=100;function ln(r){try{const t=JSON.parse(r);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 un(r){if(!r||typeof r!="object")return;const t=r.retryAfter;return typeof t=="number"&&Number.isFinite(t)&&t>=0?t:void 0}class Vt extends Error{constructor(e,s,n,i){const o=ln(n);super(o.message??`${s||"Request failed"} (${e})`);I(this,"status");I(this,"code");I(this,"details");I(this,"body");I(this,"retryAfter");this.name="RequestError",this.status=e,this.code=o.code,this.details=o.details,this.body=n,this.retryAfter=i??un(o.details)}}const P="item/folder",m="item",H="processor",dn="npm-registry",q="hidden",zt="FILE",Qt="TOOL",Zt="APP",fn=500,ze=3e4,pn=.25,yn=r=>new Promise(t=>setTimeout(t,r));function mn(r){var n,i;const t=(i=(n=r.headers)==null?void 0:n.get)==null?void 0:i.call(n,"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 gn(r){return r instanceof Vt?r.status===429||r.status>=500:!0}function wn(r,t){const e=Math.min(fn*2**t,ze),s=e*pn*Math.random(),n=r instanceof Vt&&r.retryAfter!=null?r.retryAfter*1e3:void 0;return n!=null?Math.min(n,ze)+s:e+s}var l,me,y,J,Tt,wt,Bt,Lt,ge,we,Ts;const Ne=class Ne{constructor(t,e,s){b(this,l);I(this,"apiUrl");I(this,"accessToken");I(this,"wsUrl");I(this,"retries");I(this,"useBearer");I(this,"builtInGlobals",null);I(this,"localServerUrl",null);I(this,"context");b(this,Tt);const{retries:n=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=n,this.useBearer=i,this.context={appId:"",projectId:"",accessToken:t,apiUrl:e},o){let d=o;d.charAt(d.length-1)==="/"&&(d=d.slice(0,-1)),this.localServerUrl=d}}static fromPlatformContext(t){const e=(typeof window<"u"?window.__THATOPEN_CONTEXT__:null)||{appId:"",projectId:"",accessToken:"",apiUrl:""},s=new Ne(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,l,y).call(this,t,e,s)}async listFiles(t){const{folderId:e,archived:s,projectId:n}=t||{};return e?await a(this,l,y).call(this,"GET",`${P}/${e}/items`,{query:{itemType:zt,archived:s}}):await a(this,l,y).call(this,"GET",`${m}`,{query:{itemType:zt,archived:s,...n&&{projectId:n}}})}async getFile(t,e){return await a(this,l,we).call(this,t,e)}async createFile(t){return await a(this,l,Lt).call(this,t,zt)}async updateFile(t,e){return await a(this,l,ge).call(this,t,e)}async archiveFile(t){return await a(this,l,y).call(this,"DELETE",`${m}/${t}`)}async recoverFile(t){return await a(this,l,y).call(this,"PUT",`${m}/${t}/recover`)}async downloadFile(t,e){return await a(this,l,Bt).call(this,t,e)}async getFileVersionMetadata(t,e,s){const{withDraft:n}=s||{};return await a(this,l,y).call(this,"GET",`${m}/${encodeURIComponent(t)}/version/${encodeURIComponent(e)}/metadata`,{query:{...n&&{withDraft:"true"}}})}async updateFileVersionMetadata(t,e,s){return await a(this,l,y).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,l,y).call(this,"DELETE",`${m}/${encodeURIComponent(t)}/version/${encodeURIComponent(e)}/metadata`)}async getFileVersionMetadataBatch(t,e){const{withDraft:s}=e||{};return await a(this,l,wt).call(this,t,async n=>(await a(this,l,y).call(this,"POST",`${m}/batch/version-metadata`,{body:JSON.stringify({entries:n,...s!==void 0&&{withDraft:s}}),contentType:"application/json"})).results)}async listFolders(t){const{archived:e,parentFolderId:s,projectId:n}=t||{};return await a(this,l,y).call(this,"GET",P,{query:{parentFolderId:s,archived:e,...n&&{projectId:n}}})}async getFolder(t){return await a(this,l,y).call(this,"GET",`${P}/${t}`)}async getFoldersBatch(t){return await a(this,l,wt).call(this,t,async e=>(await a(this,l,y).call(this,"POST",`${m}/batch/folders`,{body:JSON.stringify({folderIds:e}),contentType:"application/json"})).results)}async createFolder(t,e,s){return await a(this,l,y).call(this,"POST",P,{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,l,y).call(this,"PUT",`${P}/${t}`,{body:JSON.stringify({name:s}),contentType:"application/json"})}async archiveFolder(t){return await a(this,l,y).call(this,"DELETE",`${P}/${t}`)}async recoverFolder(t){return await a(this,l,y).call(this,"PUT",`${P}/${t}/recover`)}async downloadFolder(t){return await a(this,l,J).call(this,`${P}/${t}/download`)}async listComponents(t){const{folderId:e,ShowVersions:s,projectId:n}=t||{};return e?await a(this,l,y).call(this,"GET",`${P}/${e}/items`,{query:{itemType:Qt,...s&&{ShowVersions:s}}}):await a(this,l,y).call(this,"GET",`${m}`,{query:{itemType:Qt,...s&&{ShowVersions:s},...n&&{projectId:n}}})}async getComponent(t,e){return await a(this,l,we).call(this,t,e)}async createComponent(t){const{componentProps:e}=t;return await a(this,l,Lt).call(this,t,Qt,e)}async updateComponent(t,e){const{componentProps:s}=e;return await a(this,l,ge).call(this,t,e,s)}async downloadComponent(t,e){return await a(this,l,Bt).call(this,t,e)}async downloadComponentBundle(t,e){const{versionTag:s,withDraft:n}=e||{};return await a(this,l,J).call(this,`${m}/${t}/download/bundle`,{query:{...s&&{versionTag:s},...n&&{withDraft:n}}})}async archiveComponent(t){return await a(this,l,y).call(this,"DELETE",`${m}/${t}`)}async recoverComponent(t){return await a(this,l,y).call(this,"PUT",`${m}/${t}/recover`)}async getBuiltInComponent(t){return await(await a(this,l,J).call(this,`built-in/${t}/bundle`)).text()}async initBuiltInComponent(t,e,s){const n=await this.getBuiltInComponent(t.uuid),i=s??this.builtInGlobals??(typeof window<"u"?window.ThatOpenCompany:{})??{},o=Object.keys(i),h=o.map(g=>i[g]),f=new Function(...o,`${n}
|
|
2
|
+
return main;`)(...h),c=(f==null?void 0:f.componentDefinition)??f;e.get(c)}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,n=t.BUI;if(!(s!=null&&s.Components))throw new Error("globals.OBC must include Components");if(!(n!=null&&n.Manager))throw new Error("globals.BUI must include Manager");const i=new s.Components;return n.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,n;(n=(s=this.context.appEventOrchestrator)==null?void 0:s.appError)==null||n.call(s,t,e)}async listApps(t){const{folderId:e,ShowVersions:s,projectId:n}=t||{};return e?await a(this,l,y).call(this,"GET",`${P}/${e}/items`,{query:{itemType:Zt,...s&&{ShowVersions:s}}}):await a(this,l,y).call(this,"GET",`${m}`,{query:{itemType:Zt,...s&&{ShowVersions:s},...n&&{projectId:n}}})}async createApp(t){const{appProps:e}=t;return await a(this,l,Lt).call(this,t,Zt,e)}async downloadApp(t,e){return await a(this,l,Bt).call(this,t,e)}async downloadAppBundle(t,e){const{versionTag:s,withDraft:n}=e||{};return await a(this,l,J).call(this,`${m}/${t}/download/bundle`,{query:{...s&&{versionTag:s},...n&&{withDraft:n}}})}async archiveApp(t){return await a(this,l,y).call(this,"DELETE",`${m}/${t}`)}async getNpmCredentials(){return await a(this,l,y).call(this,"GET",`${dn}/credentials`)}async executeComponent(t,e,s){if(this.localServerUrl){const n=`${this.localServerUrl}/api/${H}/${t}/execute`,i=await fetch(n,{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,l,y).call(this,"POST",`${H}/${t}/execute`,{body:JSON.stringify(e),query:{...s&&{versionTag:s}},contentType:"application/json"})}async abortExecution(t){if(this.localServerUrl){const e=`${this.localServerUrl}/api/${H}/progress/${t}/abort`,s=await fetch(e,{method:"POST"});if(!s.ok){const n=await s.text().catch(()=>"");throw new Error(`Local server request failed: ${s.status} - ${n}`)}return await s.json()}return await a(this,l,y).call(this,"POST",`${H}/progress/${t}/abort`)}async listExecutions(t,e){if(this.localServerUrl){const s=e?`?projectId=${encodeURIComponent(e)}`:"",n=`${this.localServerUrl}/api/${H}/${t}/progress${s}`,i=await fetch(n);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,l,y).call(this,"GET",`${H}/${t}/progress`,{query:{...e&&{projectId:e}}})}async getExecution(t){if(this.localServerUrl){const e=`${this.localServerUrl}/api/${H}/progress/${t}`,s=await fetch(e);if(!s.ok){const n=await s.text().catch(()=>"");throw new Error(`Local server request failed: ${s.status} - ${n}`)}return await s.json()}return await a(this,l,y).call(this,"GET",`${H}/progress/${t}`)}async onExecutionProgress(t,e){const s=this.localServerUrl??this.wsUrl,n=await bt(s,{auth:{accessToken:this.accessToken},transports:["websocket"]});n.on("connect",function(){n.emit("executionSubscription",JSON.stringify({executionId:t})),n.on("execution",i=>{e(i)})}),n.on("connect_error",function(i){console.log(i)})}documents(t){return new xe(this,t)}history(t){return new bs(this,t)}get recipes(){return u(this,Tt)??_(this,Tt,new vs(this)),u(this,Tt)}async createHiddenFile(t,e,s){const n=new FormData;return n.append("file",t),n.append("parentItemId",e),s!=null&&n.append("tag",s),await a(this,l,y).call(this,"POST",`${m}/${q}`,{body:n})}async createHiddenFilesBatch(t,e,s){const n=new FormData;for(const i of t)n.append("files",i);return n.append("parentItemId",e),s!=null&&n.append("tag",s),await a(this,l,y).call(this,"POST",`${m}/${q}/batch`,{body:n})}async deleteHiddenFile(t){return await a(this,l,y).call(this,"DELETE",`${m}/${q}/${t}`)}async getHiddenFile(t){return await a(this,l,y).call(this,"GET",`${m}/${q}/${t}`)}async downloadHiddenFile(t){return await a(this,l,J).call(this,`${m}/${q}/${t}/download`)}async getHiddenFileSignedUrl(t,e){return await a(this,l,y).call(this,"GET",`${m}/${q}/${t}/signed-url`,{...e!=null&&{query:{expiresIn:e}}})}async getHiddenFileSignedUrlsBatch(t,e){return await a(this,l,wt).call(this,t,async s=>(await a(this,l,y).call(this,"POST",`${m}/${q}/signed-url/batch`,{body:JSON.stringify({hiddenFileIds:s,...e!=null&&{expiresIn:e}}),contentType:"application/json"})).results)}async getHiddenFilesByParent(t,e){return await a(this,l,y).call(this,"GET",`${m}/${t}/${q}`,{...e!=null&&{query:{tag:e}}})}async deleteHiddenFilesByParent(t){return await a(this,l,y).call(this,"DELETE",`${m}/${t}/${q}`)}async uploadItemIcon(t,e){const s=new FormData;return s.append("icon",e),await a(this,l,y).call(this,"PUT",`${m}/${t}/icon`,{body:s})}async getItemIcon(t){return await a(this,l,J).call(this,`${m}/${t}/icon`)}async removeItemIcon(t){return await a(this,l,y).call(this,"DELETE",`${m}/${t}/icon`)}async updateItem(t,e){return await a(this,l,y).call(this,"PUT",`${m}/${t}`,{body:JSON.stringify(e),contentType:"application/json"})}async createVersion(t,e,s,n,i){const o=new FormData;return o.append("file",e),o.append("versionTag",s),n&&o.append("extraProps",JSON.stringify(n)),i&&o.append("metadata",JSON.stringify(i)),await a(this,l,y).call(this,"POST",`${m}/${t}/version`,{body:o})}async listVersions(t,e={}){return await a(this,l,y).call(this,"GET",`${m}/${encodeURIComponent(t)}/versions`,{query:e})}async listVersionsBatch(t,e={}){const{archived:s}=e;return await a(this,l,wt).call(this,t,async n=>(await a(this,l,y).call(this,"POST",`${m}/batch/versions`,{body:JSON.stringify({itemIds:n,...s!==void 0&&{archived:s}}),contentType:"application/json"})).results)}async archiveVersion(t,e){return await a(this,l,y).call(this,"PUT",`${m}/${encodeURIComponent(t)}/version/${encodeURIComponent(e)}/archive`)}async recoverVersion(t,e){return await a(this,l,y).call(this,"PUT",`${m}/${encodeURIComponent(t)}/version/${encodeURIComponent(e)}/recover`)}async deleteVersion(t,e){return await a(this,l,y).call(this,"DELETE",`${m}/${encodeURIComponent(t)}/version/${encodeURIComponent(e)}`)}};l=new WeakSet,me=function(t){return`${this.apiUrl}/${t}`},y=async function(t,e,s){const{body:n,query:i,contentType:o,retries:h,responseType:d,retryAttempt:f}=s||{},c=a(this,l,me).call(this,e),g=a(this,l,Ts).call(this,i),v=await this.resolveAccessToken(),V={...g,...this.useBearer?{}:{accessToken:v}};try{const O=await fetch(c+"?"+new URLSearchParams(V).toString(),{method:t,headers:{Accept:"application/json",...o&&{"Content-Type":o},...this.useBearer&&{Authorization:`Bearer ${v}`}},...n&&{body:n}});if(!O.ok){const k=await O.text().then(et=>et).catch(()=>"");throw new Vt(O.status,O.statusText,k,mn(O))}return d==="blob"?await O.blob():O.json().then(k=>k).catch(()=>{})}catch(O){const k=h??this.retries;if(k>0&&gn(O)){const et=f??0;return await yn(wn(O,et)),await a(this,l,y).call(this,t,e,{...s,retries:k-1,retryAttempt:et+1})}throw O}},J=async function(t,e){const{query:s}=e||{},n=a(this,l,me).call(this,t),i=await this.resolveAccessToken(),o={...s,...this.useBearer?{}:{accessToken:i}};return await fetch(n+"?"+new URLSearchParams(o).toString(),{method:"GET",...this.useBearer&&{headers:{Authorization:`Bearer ${i}`}}})},Tt=new WeakMap,wt=async function(t,e){if(!t.length)return[];const s=[];for(let i=0;i<t.length;i+=ye)s.push(t.slice(i,i+ye));return(await Promise.all(s.map(e))).flat()},Bt=async function(t,e){const{versionTag:s,withDraft:n}=e||{};return await a(this,l,J).call(this,`${m}/${t}/download`,{query:{...s&&{versionTag:s},...n&&{withDraft:n}}})},Lt=async function(t,e,s){const{name:n,versionTag:i,parentFolderId:o,projectId:h,file:d,metadata:f}=t,c=new FormData;return c.append("file",d),c.append("name",n),c.append("versionTag",i),c.append("itemType",e),o&&c.append("folderId",o),h&&c.append("projectId",h),s&&c.append("extraProps",JSON.stringify(s)),f&&c.append("metadata",JSON.stringify(f)),await a(this,l,y).call(this,"POST",m,{body:c})},ge=async function(t,e,s){const{name:n,versionTag:i,parentFolderId:o,file:h,metadata:d}=e;let f,c;if(h){const g=new FormData;g.append("file",h),i&&g.append("versionTag",i),s&&g.append("extraProps",JSON.stringify(s)),d&&g.append("metadata",JSON.stringify(d)),c=await a(this,l,y).call(this,"POST",`${m}/${t}/version`,{body:g})}if(n||o){const g={...n&&{name:n},...o&&{folderId:o}},v=JSON.stringify(g);f=await a(this,l,y).call(this,"PUT",`${m}/${t}`,{body:v,contentType:"application/json"})}return{item:f,version:c}},we=async function(t,e){const{showVersions:s=!1}=e||{};return await a(this,l,y).call(this,"GET",`${m}/${t}`,{query:{showVersions:s}})},Ts=function(t){return t&&Object.entries(t).filter(([,e])=>e!==void 0).reduce((e,[s,n])=>(e[s]=n,e),{})};let Mt=Ne;function Ss(){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:r=>window.parent.postMessage(r,"*"),listen:r=>{const t=e=>{e.source===window.parent&&r(e.data)};return window.addEventListener("message",t),()=>window.removeEventListener("message",t)}}}const be="channel:",bn=1e4;function Ft(r){try{r()}catch(t){console.error("[channel] a listener threw:",t)}}var U,C,x,ct,ht,lt,A,_e,Ee,at;class $e{constructor(t,e){b(this,A);b(this,U,!1);b(this,C,[]);b(this,x,[]);b(this,ct,new Set);b(this,ht,new Set);b(this,lt,new Set);this.transport=t,this.controls=e}get joined(){return u(this,U)}get peers(){return u(this,C)}join(){return u(this,U)?Promise.resolve():a(this,A,_e).call(this,"joined",this.controls.join)}leave(){return!u(this,U)&&!u(this,x).some(t=>t.want==="joined")?Promise.resolve():a(this,A,_e).call(this,"left",this.controls.leave)}onChange(t){return u(this,ct).add(t),()=>void u(this,ct).delete(t)}onPeerJoined(t){return u(this,ht).add(t),()=>void u(this,ht).delete(t)}onPeerLeft(t){return u(this,lt).add(t),()=>void u(this,lt).delete(t)}applyJoined(){_(this,U,!0),a(this,A,Ee).call(this,"joined"),a(this,A,at).call(this)}applyLeft(){_(this,U,!1),_(this,C,[]),a(this,A,Ee).call(this,"left"),a(this,A,at).call(this)}applyPeers(t){_(this,C,t),a(this,A,at).call(this)}applyPeerJoined(t){!u(this,U)||u(this,C).some(e=>e.from===t.from)||(_(this,C,[...u(this,C),t]),u(this,ht).forEach(e=>Ft(()=>e(t))),a(this,A,at).call(this))}applyPeerLeft(t){const e=u(this,C).find(s=>s.from===t);e&&(_(this,C,u(this,C).filter(s=>s.from!==t)),u(this,lt).forEach(s=>Ft(()=>s(e))),a(this,A,at).call(this))}failPending(t){const e=u(this,x);return _(this,x,[]),e.forEach(s=>{clearTimeout(s.timer),s.reject(t)}),e.length>0}post(t){this.transport.post(t)}}U=new WeakMap,C=new WeakMap,x=new WeakMap,ct=new WeakMap,ht=new WeakMap,lt=new WeakMap,A=new WeakSet,_e=function(t,e){return new Promise((s,n)=>{const i={want:t,resolve:s,reject:n,timer:setTimeout(()=>{_(this,x,u(this,x).filter(o=>o!==i)),n(new Error(`The platform did not confirm ${t==="joined"?"joining":"leaving"} in time.`))},bn)};u(this,x).push(i),this.transport.post({type:"APP_CHANNEL_CONTROL",...e})})},Ee=function(t){const e=u(this,x).filter(s=>s.want===t);_(this,x,u(this,x).filter(s=>s.want!==t)),e.forEach(s=>{clearTimeout(s.timer),s.resolve()})},at=function(){u(this,ct).forEach(t=>Ft(t))};var ut;class Is extends $e{constructor(e){super(e,{join:{action:"joinCollab"},leave:{action:"leaveCollab"}});b(this,ut,new Map)}on(e,s){const n=u(this,ut).get(e)??new Set;return n.add(s),u(this,ut).set(e,n),()=>void n.delete(s)}send(e,s){if(e.startsWith(be))throw new Error(`Message types starting with '${be}' 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=u(this,ut).get(e.type);if(!(s!=null&&s.size))return{handled:!1};const n=As(e);return s.forEach(i=>Ft(()=>i(e.payload,n))),{handled:!0}}}ut=new WeakMap;var W;class Os extends $e{constructor(e,s){super(e,{join:{action:"joinExternal",kind:s},leave:{action:"leaveExternal",kind:s}});b(this,W,new Map);this.kind=s}on(e,s){if(u(this,W).has(e))throw new Error(`"${e}" already has a handler in this room. Remove it first.`);return u(this,W).set(e,s),()=>void u(this,W).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 u(this,W).size>0}async handle(e){const s=u(this,W).get(e.type);if(!s)return{handled:!1};try{return{handled:!0,value:await s(e.payload,As(e))}}catch(n){return{handled:!0,error:n instanceof Error?n.message:String(n)}}}}W=new WeakMap;function As(r){return{from:r.from,at:r.at,requestId:r.requestId,kind:r.kind}}function _n(r){const t=r;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 Z,St,j,K,X,T,ve,qt,Cs,xs,Rs,Te;class ks{constructor(t){b(this,T);b(this,Z);b(this,St);b(this,j);b(this,K,new Map);b(this,X,new Set);_(this,Z,t),_(this,St,t.listen(e=>void a(this,T,Cs).call(this,e)))}collab(){return u(this,j)??_(this,j,new Is(u(this,Z))),u(this,j)}external(t){const e=t??"";let s=u(this,K).get(e);return s||(s=new Os(u(this,Z),t),u(this,K).set(e,s)),s}dispose(){u(this,St).call(this)}}Z=new WeakMap,St=new WeakMap,j=new WeakMap,K=new WeakMap,X=new WeakMap,T=new WeakSet,ve=function(){return[...u(this,j)?[u(this,j)]:[],...u(this,K).values()]},qt=function(t,e){if(t==="collab")return u(this,j);if(t==="external")return u(this,K).get(typeof e=="string"?e:"")},Cs=async function(t){const e=_n(t);if(e){if(e.type.startsWith(be)){a(this,T,xs).call(this,e);return}await a(this,T,Rs).call(this,e)}},xs=function(t){var s,n,i;const e=t.payload??{};switch(t.type){case"channel:joined":(s=a(this,T,qt).call(this,e.scope,e.kind))==null||s.applyJoined();break;case"channel:left":(n=a(this,T,qt).call(this,e.scope,e.kind))==null||n.applyLeft();break;case"channel:peers":(i=a(this,T,qt).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"?[u(this,j)]:[...u(this,K).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,ve).call(this).map(d=>d.failPending(o)).some(Boolean)||console.error("[channel] error:",t.payload);break}}},Rs=async function(t){const e=a(this,T,ve).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,Te).call(this,t.requestId,o))}t.requestId&&t.scope==="external"&&e.length>0&&!s&&a(this,T,Te).call(this,t.requestId,{handled:!0,error:`No handler for "${t.type}".`})},Te=function(t,e){u(this,X).has(t)||(u(this,X).add(t),u(this,X).size>500&&u(this,X).delete(u(this,X).values().next().value),u(this,Z).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 Q="project",st="notifications";var dt,It;const Pe=class Pe extends Mt{constructor(e,s,n){super(typeof e=="string"?e:"",s,{...n,useBearer:!0});b(this,dt);b(this,It);typeof e=="function"&&_(this,dt,e)}async resolveAccessToken(){return u(this,dt)?await u(this,dt).call(this):super.resolveAccessToken()}static fromPlatformContext(e){const s=(typeof window<"u"?window.__THATOPEN_CONTEXT__:null)||{appId:"",projectId:"",accessToken:"",apiUrl:""},n=new Pe(s.accessToken,s.apiUrl,e);return n.context=s,n}get channel(){return u(this,It)??_(this,It,new ks(Ss())),u(this,It)}async listProjects(){return await this.request("GET",Q)}async getProject(e){return await this.request("GET",`${Q}/${e}`)}async getProjectData(e){return await this.request("GET",`${Q}/${e}/data`)}async getAvatar(e){return await this.request("GET",`account/${e}/avatar`,{responseType:"blob"})}async checkPermission(e){return await this.request("GET",`${Q}/permissions/check`,{query:e})}async checkPermissionBatch(e){return(await this.request("POST",`${Q}/permissions/check/batch`,{body:JSON.stringify({checks:e}),contentType:"application/json"})).results}async getNotifications(e){return await this.request("GET",st,{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",`${st}/unread-count`)).count}async markNotificationsRead(e){return await this.request("POST",`${st}/mark-read`,{body:JSON.stringify({ids:e}),contentType:"application/json"})}async markAllNotificationsRead(){return await this.request("POST",`${st}/mark-all-read`)}async getNotificationSubscriptions(){return await this.request("GET",`${st}/subscriptions`)}async unsubscribeFromAutomation(e){return await this.request("DELETE",`${st}/subscriptions/${e}`)}async subscribeToAutomation(e,s,n){return await this.request("POST",`${Q}/${e}/events/hooks/${s}/subscription`,{body:JSON.stringify(n??{}),contentType:"application/json"})}async updateAutomationSubscription(e,s,n){return await this.request("PATCH",`${Q}/${e}/events/hooks/${s}/subscription`,{body:JSON.stringify(n),contentType:"application/json"})}async onNotification(e){const s=await this.resolveAccessToken(),n=bt(`${this.socketOrigin}/notifications`,{auth:{accessToken:s},transports:["websocket"]});return n.on("notification.created",i=>e({type:"created",id:i==null?void 0:i.id})),n.on("notification.read",i=>e({type:"read",id:i==null?void 0:i.id})),n.on("notifications.allRead",i=>e({type:"allRead",batch:i==null?void 0:i.batch})),()=>n.disconnect()}};dt=new WeakMap,It=new WeakMap;let Se=Pe;const En="flow:",vn="flow:op",Tn="flow:source",$s="revitflow/op@2",Qe="REVITFLOWCHANGE",Ze="REVITFLOWOPERATION";class Sn{constructor(t){I(this,"changes",[]);this.target=t}get length(){return this.changes.length}get batchId(){return this.target.batchId}get title(){return this.target.title??`${this.changes.length} change(s)`}get author(){return this.target.author??"app"}get userId(){return this.target.userId}get baseCommit(){return this.target.baseCommit}add(t,e={}){return this.changes.push({op:"add",attrs:this.pack(t,e)}),this}set(t,e,s={}){return this.requireId(t,"set"),this.changes.push({op:"set",item:t,attrs:this.pack(e,s)}),this}remove(t){return this.requireId(t,"remove"),this.changes.push({op:"remove",item:t,attrs:{}}),this}get summary(){const t=new Set(this.changes.map(e=>e.op));return t.size===1?[...t][0]:"mixed"}async build(t){if(this.changes.length===0)throw new Error("An operation with no changes is not an operation. Add at least one.");const e={schema:$s,opId:t,batchId:this.batchId??t,targetProject:this.target.project,targetDocument:this.target.document,baseCommit:this.baseCommit,author:this.author,...this.userId?{userId:this.userId}:{},title:this.title,summary:this.summary},[s,n]=await In();return On(this.flatbuffer(s,n,t,JSON.stringify(e)))}pack(t,e){const s={};for(const[n,i]of Object.entries(t??{}))n.startsWith(En)||(s[n]=String(i));return e.position&&(s.Position=e.position.map(ts).join(",")),e.rotationDeg!==void 0&&(s.Rotation=ts(e.rotationDeg)),e.source&&(s[Tn]=e.source),s}requireId(t,e){if(!t||!t.trim())throw new Error(`A '${e}' has to name the item it acts on.`)}flatbuffer(t,e,s,n){const{Attribute:i,Meshes:o,Model:h,SpatialStructure:d,Transform:f}=e,c=new t.Builder(1024),g=this.changes.length,v=new Uint32Array(g);let V=1;for(let S=0;S<g;S++)v[S]=V++;const O=V++,k=S=>(S(c,0),c.endVector()),et=o.createShellsVector(c,[]),Ns=o.createCircleExtrusionsVector(c,[]),Ps=k(o.startSamplesVector),Bs=k(o.startRepresentationsVector),Ls=k(o.startMaterialsVector),Fs=k(o.startLocalTransformsVector),qs=k(o.startGlobalTransformsVector),Ds=o.createMeshesItemsVector(c,[]),Ms=o.createMaterialIdsVector(c,[]),Us=o.createRepresentationIdsVector(c,[]),js=o.createSampleIdsVector(c,[]),Vs=o.createLocalTransformIdsVector(c,[]),Gs=o.createGlobalTransformIdsVector(c,[]);o.startMeshes(c),o.addCoordinates(c,f.createTransform(c,0,0,0,1,0,0,0,1,0)),o.addGlobalTransforms(c,qs),o.addShells(c,et),o.addRepresentations(c,Bs),o.addSamples(c,Ps),o.addLocalTransforms(c,Fs),o.addMaterials(c,Ls),o.addCircleExtrusions(c,Ns),o.addMeshesItems(c,Ds),o.addRepresentationIds(c,Us),o.addSampleIds(c,js),o.addMaterialIds(c,Ms),o.addLocalTransformIds(c,Vs),o.addGlobalTransformIds(c,Gs);const Hs=o.endMeshes(c),Js=c.createString(n),Gt=new Set,Ht=[];for(const S of this.changes){const G=[],rr={[vn]:S.op,...S.attrs};for(const[nr,ir]of Object.entries(rr)){const qe=JSON.stringify([nr,ir,"IFCTEXT"]);Gt.add(qe),G.push(c.createString(qe))}Ht.push(i.createAttribute(c,i.createDataVector(c,G)))}{const S=JSON.stringify(["Name",s,"IFCLABEL"]);Gt.add(S);const G=i.createDataVector(c,[c.createString(S)]);Ht.push(i.createAttribute(c,G))}const Ys=h.createAttributesVector(c,Ht),Ws=h.createUniqueAttributesVector(c,[...Gt].map(S=>c.createString(S))),Be=this.changes.map(()=>c.createString(Qe));Be.push(c.createString(Ze));const Ks=h.createCategoriesVector(c,Be),Le=[],Fe=[];this.changes.forEach((S,G)=>{S.item&&(Le.push(c.createString(S.item)),Fe.push(v[G]))});const Xs=h.createGuidsVector(c,Le),zs=h.createGuidsItemsVector(c,Fe),Qs=h.createLocalIdsVector(c,[...v,O]),Zs=this.changes.map((S,G)=>d.createSpatialStructure(c,v[G],c.createString(Qe),0)),tr=d.createSpatialStructure(c,O,c.createString(Ze),d.createChildrenVector(c,Zs)),er=c.createString(s);h.startModel(c),h.addMeshes(c,Hs),h.addMetadata(c,Js),h.addAttributes(c,Ys),h.addUniqueAttributes(c,Ws),h.addLocalIds(c,Qs),h.addCategories(c,Ks),h.addGuidsItems(c,zs),h.addGuids(c,Xs),h.addGuid(c,er),h.addSpatialStructure(c,tr),h.addMaxLocalId(c,V);const sr=h.endModel(c);return h.finishModelBuffer(c,sr),c.asUint8Array()}}async function In(){try{return await Promise.all([import("flatbuffers"),import("@thatopen/fragments")])}catch(r){throw new Error(`OperationBuilder needs the optional peers \`flatbuffers\` and \`@thatopen/fragments\` installed — add them to the app that authors operations. (${r instanceof Error?r.message:String(r)})`)}}function ts(r){return Number.isFinite(r)?String(r):"0"}async function On(r){const t=new Blob([r]).stream().pipeThrough(new CompressionStream("deflate"));return new Uint8Array(await new Response(t).arrayBuffer())}const An={MAX_FIELDS:200,MAX_KEY_LENGTH:50,MAX_VALUE_LENGTH:50},kn={uuid:"a3f82c1d-5b74-4e9a-bc30-d7e12f894a61"},Cn={uuid:"2c9f4e8d-3a1b-4c5e-9d7f-0a2b6c8e1d3f"},xn={uuid:"b0b5e2a2-0b3a-4a6b-8b1c-0b1c4a6b8b1c"},Rn={uuid:"d8f3a1c2-6b4e-4f9a-8c1d-2e7b5a9f3c60"},$n={uuid:"3f9c1a7e-6b2d-4e18-9a5c-7d0e2f4b6c81"},Nn={uuid:"2c4ae432-fc24-43e9-9783-0c960c674e96"},Pn={uuid:"6f3a9c2e-8b1d-4e6a-9c3f-1d7b5a8e2c4f"},Bn={uuid:"69af63aa-19ba-4fc7-b17b-75647bac1d76"},Ln={uuid:"234f1416-528d-452a-9cc9-a16c5239b2eb"};exports.CDEManager=kn;exports.ChannelClient=ks;exports.ChannelRoom=$e;exports.ClashesManager=Cn;exports.CollabRoom=Is;exports.DOCUMENT_FILE=oe;exports.DOCUMENT_SCHEMA=_t;exports.EngineServicesClient=Mt;exports.ExternalRoom=Os;exports.FileList=xn;exports.FlowDoc=_s;exports.GISManager=Rn;exports.GitHistoryManager=$n;exports.HelloWorld=Nn;exports.METADATA_LIMITS=An;exports.OP_SCHEMA=$s;exports.OperationBuilder=Sn;exports.PlatformClient=Se;exports.ProjectDocuments=xe;exports.ProjectHistory=bs;exports.ProjectManager=Pn;exports.Recipes=vs;exports.RequestError=Vt;exports.SELF_VIEWING_FORMATS=ps;exports.STORAGE_BATCH_MAX=ye;exports.StaleHistoryError=ce;exports.TopicsManager=Bn;exports.UIManager=Ln;exports.mintGuid=Dt;exports.orderByGraph=Re;exports.windowTransport=Ss;
|
|
3
3
|
//# sourceMappingURL=index.cjs.js.map
|