@inweb/client
Version:
JavaScript REST API client for the Open Cloud Server
25 lines (23 loc) • 49.7 kB
JavaScript
///////////////////////////////////////////////////////////////////////////////
// Copyright (C) 2002-2026, Open Design Alliance (the "Alliance").
// All rights reserved.
//
// This software and its documentation and related materials are owned by
// the Alliance. The software may only be incorporated into application
// programs owned by members of the Alliance, subject to a signed
// Membership Agreement and Supplemental Software License Agreement with the
// Alliance. The structure and organization of this software are the valuable
// trade secrets of the Alliance and its suppliers. The software is also
// protected by copyright law and international treaty provisions. Application
// programs incorporating this software must include the following statement
// with their copyright notices:
//
// This application incorporates Open Design Alliance software pursuant to a
// license agreement with Open Design Alliance.
// Open Design Alliance Copyright (C) 2002-2026 by Open Design Alliance.
// All rights reserved.
//
// By use of this software, its documentation or related materials, you
// acknowledge and accept the above terms.
///////////////////////////////////////////////////////////////////////////////
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(((t="undefined"!=typeof globalThis?globalThis:t||self).ODA=t.ODA||{},t.ODA.Api=t.ODA.Api||{}))}(this,function(t){"use strict";class e{constructor(t,e,s={}){this.path=t,this.httpClient=e,this.headers=s}appendVersionParam(t){if(void 0===this._useVersion)return t;const e=t.includes("?")?"&":"?";return`${t}${e}version=${this._useVersion}`}getEndpointPath(t){return this.appendVersionParam(`${this.path}${t}`)}get(t,e){return this.httpClient.get(this.getEndpointPath(t),{signal:e,headers:this.headers})}post(t,e){return this.httpClient.post(this.getEndpointPath(t),e,{headers:this.headers})}put(t,e){return this.httpClient.put(this.getEndpointPath(t),e,{headers:this.headers})}delete(t){return this.httpClient.delete(this.getEndpointPath(t),{headers:this.headers})}useVersion(t){return this._useVersion=t,this}}const s={100:"Continue",101:"Switching Protocols",102:"Processing",103:"Early Hints",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",207:"Multi-Status",208:"Already Reported",226:"IM Used",300:"Multiple Choices",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",307:"Temporary Redirect",308:"Permanent Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Time-out",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Payload Too Large",414:"URI Too Long",415:"Unsupported Media Type",416:"Range Not Satisfiable",417:"Expectation Failed",418:"I'm a teapot",421:"Misdirected Request",422:"Unprocessable Entity",423:"Locked",424:"Failed Dependency",425:"Too Early",426:"Upgrade Required",428:"Precondition Required",429:"Too Many Requests",431:"Header Fields Too Large",451:"Unavailable For Legal Reasons",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported",506:"Variant Also Negotiates",507:"Insufficient Storage",508:"Loop Detected",509:"Bandwidth Limit Exceeded",510:"Not Extended",511:"Network Authentication Required"};function r(t){return s[t]||`Error ${t}`}function i(t,e="400"){try{return JSON.parse(t).description}catch{return e}}class n extends Error{constructor(t,e){super(e||r(t)),this.name="FetchError",this.status=t,this.statusText=r(t)}}class a extends e{constructor(t,e){super(`${e.path}/downloads`,e.httpClient),this._data=t,this._file=e}get assembly(){return this._file}get data(){return this._data}set data(t){this._data=t}get database(){return this.data.database}get default(){return this.data.default}get file(){return this._file}get fileId(){return this.data.fileId}get geometry(){return this.data.geometry}get id(){return this.data.id}get name(){return this.data.name}get type(){return this.file.type}get version(){return this.data.version}getModels(){return Promise.resolve([this])}getModelTransformMatrix(t){return this.file.getModelTransformMatrix(t)}setModelTransformMatrix(t,e){return this.file.setModelTransformMatrix(t,e).then(()=>this)}getViewpoints(){return this._file.getViewpoints().then(t=>t.filter(({custom_fields:t={}})=>t.modelId===this.id||t.modelName===this.name))}saveViewpoint(t){return this._file.saveViewpoint({...t,custom_fields:{...t.custom_fields,modelId:this.id,modelName:this.name}})}deleteViewpoint(t){return this._file.deleteViewpoint(t)}getSnapshot(t){return this._file.getSnapshot(t)}getSnapshotData(t,e){return this._file.getSnapshotData(t,e)}downloadResource(t,e,s){return this._file.downloadResource(t,e,s)}downloadResourceRange(t,e,s,r,i){return this._file.downloadResourceRange(t,e,s,r,i)}getReferences(t){return this._file.getReferences(t)}}function o(t,e="|"){return"string"==typeof t&&(t=t.split(",")),Array.isArray(t)&&(t=t.filter(t=>t).join(e)),"string"==typeof t&&(t=t.trim()),t.toString()}function h(t,e){return new Promise(s=>{let r=0;const i=()=>{clearTimeout(r),s(!0)};r=window.setTimeout(()=>{e.removeEventListener("abort",i),s(!1)},t||0),e.addEventListener("abort",i,{once:!0})})}async function d(t,e={}){var s,r,i;const n=e.timeout||6e5,a=e.interval||3e3,o=null!==(s=e.signal)&&void 0!==s?s:(new AbortController).signal,d=null!==(r=e.abortError)&&void 0!==r?r:new DOMException("Aborted","AbortError"),l=null!==(i=e.timeoutError)&&void 0!==i?i:new DOMException("Timeout","TimeoutError"),u=performance.now()+n;let p=n/a;do{if(await t(e))return Promise.resolve(e.result);if(await h(a,o)||o.aborted)return Promise.reject(d)}while(performance.now()<u&&--p>0);return Promise.reject(l)}function l(t){if("string"==typeof t){const e=t.indexOf("--");-1!==e&&(t=t.slice(e));const s=t.split("--").map(t=>t.split("=").map(t=>t.split(" ")).flat()).filter(t=>t[0]).map(t=>t.concat([""]));return Object.fromEntries(s)}return t||{}}function u(t,e="",s=""){var r;return t&&"string"!=typeof t?u(null!==(r=t.firstName)&&void 0!==r?r:t.name,t.lastName,t.userName):`${null!=t?t:""} ${null!=e?e:""}`.trim()||s}function p(t=""){const e=t.split(" ").filter(t=>t);return e.reduce((t,s,r)=>(0!==r&&r!==e.length-1||(t+=s.charAt(0)),t),"").toUpperCase()}class c extends e{constructor(t,e,s){super(`${e}/clashes/${t.id}`,s),this.data=t}get clearance(){return this.data.clearance}get createdAt(){return this.data.createdAt}get data(){return this._data}set data(t){this._data=t,this._data.owner.avatarUrl=`${this.httpClient.serverUrl}/users/${this._data.owner.userId}/avatar`,this._data.owner.fullName=u(this._data.owner),this._data.owner.initials=p(this._data.owner.fullName)}get id(){return this.data.id}get lastModifiedAt(){return this.data.lastModifiedAt}get name(){return this.data.name}set name(t){this.data.name=t}get owner(){return this.data.owner}get selectionSetA(){return this.data.selectionSetA}get selectionTypeA(){return this.data.selectionTypeA}get selectionSetB(){return this.data.selectionSetB}get selectionTypeB(){return this.data.selectionTypeB}get status(){return this.data.status}get tolerance(){return this.data.tolerance}async checkout(){const t=await this.get("");return this.data=await t.json(),this}async update(t){const e=await this.put("",t);return this.data=await e.json(),this}delete(){return super.delete("").then(t=>t.json())}save(){return this.update(this.data)}waitForDone(t){return d(()=>this.checkout().then(e=>{var s;const r=["done","failed"].includes(e.status);return(null===(s=null==t?void 0:t.onCheckout)||void 0===s?void 0:s.call(t,e,r))||r}),t).then(()=>this)}getReport(){return this.get("/report").then(t=>t.json())}}class g extends e{constructor(t,e){super(`/assemblies/${t.id}`,e),this.data=t}get activeVersion(){return this.data.activeVersion}get associatedFiles(){return this.data.associatedFiles}get created(){return this.data.created}get data(){return this._data}set data(t){var e,s;this._data=t,this._data.owner.avatarUrl=`${this.httpClient.serverUrl}/users/${this._data.owner.userId}/avatar`,this._data.owner.fullName=u(this._data.owner),this._data.owner.initials=p(this._data.owner.fullName),null!==(e=(s=this._data).associatedFiles)&&void 0!==e||(s.associatedFiles=[]),this._data.associatedFiles.forEach(t=>t.link=`${this.httpClient.serverUrl}/files/${t.fileId}`)}get files(){return this.data.files}get geometryType(){return"done"===this.status?"vsfx":""}get id(){return this.data.id}get name(){return this.data.name}set name(t){this.data.name=t}get originalAssemblyId(){return this.data.originalAssemblyId}get owner(){return this.data.owner}get previewUrl(){return this.data.previewUrl||""}get relatedJobs(){return this.data.relatedJobs}get status(){return this.data.status}get type(){return"assembly"}get version(){return this.data.version}get versions(){return this.data.versions}async checkout(){const t=await this.get("");return this.data=await t.json(),this}async update(t){const e=await this.put("",t);return this.data=await e.json(),this}delete(){return super.delete("").then(t=>t.json())}save(){return this.update(this.data)}setPreview(t){return console.warn("Assembly does not support preview"),Promise.resolve(this)}deletePreview(){return console.warn("Assembly does not support preview"),Promise.resolve(this)}getModels(){return this.get("/geometry").then(t=>t.json()).then(t=>t.map(t=>new a(t,this)))}getModelTransformMatrix(t){return this.data.transform[t]}setModelTransformMatrix(t,e){const s={...this.data.transform};return s[t]=e,this.update({transform:s})}getProperties(t,e=!1){const s=new URLSearchParams;t&&(Array.isArray(t)&&(t=t.join(",")),"string"==typeof t&&(t=t.trim()),t&&s.set("handles",t)),e&&s.set("group","true");let r=s.toString();return r&&(r="?"+r),this.get(`/properties${r}`).then(t=>t.json())}searchProperties(t){return this.post("/properties/search",t).then(t=>t.json())}getCdaTree(){return this.get("/properties/tree").then(t=>t.json())}getViewpoints(){return this.get("/viewpoints").then(t=>t.json()).then(t=>t.result)}saveViewpoint(t){return this.post("/viewpoints",t).then(t=>t.json())}deleteViewpoint(t){return super.delete(`/viewpoints/${t}`).then(t=>t.json())}getSnapshot(t){return this.get(`/viewpoints/${t}/snapshot`).then(t=>t.text())}getSnapshotData(t,e){return this.get(`/viewpoints/${t}/bitmaps/${e}`).then(t=>t.text())}downloadResource(t,e,s){return this.httpClient.downloadFile(this.getEndpointPath(`/downloads/${t}`),e,{signal:s,headers:this.headers}).then(t=>t.arrayBuffer())}downloadResourceRange(t,e,s,r,i){return this.httpClient.downloadFileRange(this.getEndpointPath(`/downloads/${t}${e?"?requestId="+e:""}`),e,s,r,{signal:i,headers:this.headers}).then(t=>t.arrayBuffer())}async getReferences(t){const s=new e("/files",this.httpClient,this.headers);return{id:"",references:await Promise.all(this.associatedFiles.map(t=>`/${t.fileId}/references`).map(e=>s.get(e,t).then(t=>t.json()))).then(t=>t.map(t=>t.references)).then(t=>t.reduce((t,e)=>[...e,...t],[])).then(t=>[...new Set(t.map(JSON.stringify))].map(t=>JSON.parse(t)))}}waitForDone(t){return d(()=>this.checkout().then(e=>{var s;const r=["done","failed"].includes(e.status);return(null===(s=null==t?void 0:t.onCheckout)||void 0===s?void 0:s.call(t,e,r))||r}),t).then(()=>this)}getClashTests(t,e,s,r,i,n){const a=new URLSearchParams;t>0&&a.set("start",t.toString()),e>0&&a.set("limit",e.toString()),s&&a.set("name",s),r&&(r=o(r))&&a.set("id",r),void 0!==i&&a.set("sortBy",i?"desc":"asc"),n&&a.set("sortField",n);let h=a.toString();return h&&(h="?"+h),this.get(`/clashes${h}`).then(t=>t.json()).then(t=>({...t,result:t.result.map(t=>new c(t,this.path,this.httpClient))}))}getClashTest(t){return this.get(`/clashes/${t}`).then(t=>t.json()).then(t=>new c(t,this.path,this.httpClient))}createClashTest(t,e,s,r,i,n){const{tolerance:a,clearance:o,waitForDone:h}=null!=n?n:{};return Array.isArray(r)||(r=[r]),Array.isArray(i)||(i=[i]),this.post("/clashes",{name:t,selectionTypeA:e,selectionTypeB:s,selectionSetA:r,selectionSetB:i,tolerance:a,clearance:o}).then(t=>t.json()).then(t=>new c(t,this.path,this.httpClient)).then(t=>h?t.waitForDone(n):t)}deleteClashTest(t){return super.delete(`/clashes/${t}`).then(t=>t.json())}updateVersion(t,e={waitForDone:!1}){return Promise.reject(new Error("Assembly version support will be implemented in a future release"))}getVersions(){return Promise.resolve(void 0)}getVersion(t){return Promise.reject(new n(404))}deleteVersion(t){return Promise.reject(new n(404))}setActiveVersion(t){return this.update({activeVersion:t})}createSharedLink(t){return Promise.reject(new Error("Assembly shared link will be implemented in a future release"))}getSharedLink(){return Promise.resolve(void 0)}deleteSharedLink(){return Promise.reject(new n(404))}}class m{constructor(){this._listeners={}}addEventListener(t,e){return void 0===this._listeners[t]&&(this._listeners[t]=[]),this._listeners[t].push(e),this}removeEventListener(t,e){if(void 0===this._listeners[t])return this;const s=this._listeners[t].filter(t=>t!==e);return 0!==s.length?this._listeners[t]=s:delete this._listeners[t],this}removeAllListeners(t){return t?delete this._listeners[t]:this._listeners={},this}emitEvent(t){if(void 0===this._listeners[t.type])return!1;return this._listeners[t.type].slice().forEach(e=>e.call(this,t)),!0}on(t,e){return this.addEventListener(t,e)}off(t,e){return this.removeEventListener(t,e)}emit(t,...e){return"string"==typeof t?this.emitEvent({type:t,args:e}):"object"==typeof t&&this.emitEvent(t)}}function w(t){if(!t.ok)switch(t.status){case 400:return t.text().then(t=>(console.error(t),Promise.reject(new n(400,i(t)))));case 500:return t.text().then(t=>(console.error(i(t,t)),Promise.reject(new n(500))));default:return Promise.reject(new n(t.status))}return Promise.resolve(t)}function f(t,e={method:"GET"}){const s={...e.headers};let r;return delete s["Content-Type"],Object.keys(s).filter(t=>void 0===s[t]).forEach(t=>delete s[t]),"POST"!==e.method&&"PUT"!==e.method||(e.body instanceof FormData?r=e.body:e.body instanceof Blob?(r=new FormData,r.append("file",e.body)):e.body instanceof ArrayBuffer?(r=new FormData,r.append("file",new Blob([e.body]))):"object"==typeof e.body?(r=JSON.stringify(e.body),s["Content-Type"]="application/json"):"string"==typeof e.body&&(r=e.body,s["Content-Type"]="text/plain")),fetch(t,{...e,headers:s,body:r}).then(w)}function v(t,e={method:"GET"}){return new Promise((s,r)=>{const a=new XMLHttpRequest;a.open(e.method,t,!0);for(const t in e.headers)a.setRequestHeader(t,e.headers[t]);function o(t){return t.lengthComputable?t.loaded/t.total:1}a.upload.onprogress=t=>e.uploadProgress&&e.uploadProgress(o(t)),a.onprogress=t=>e.downloadProgress&&e.downloadProgress(o(t)),a.onloadend=t=>function(t){if(0===t.status)return Promise.reject(new n(0,"Network error"));if(t.status<200||t.status>299)switch(t.status){case 400:return console.error(t.responseText),Promise.reject(new n(400,i(t.responseText)));case 500:return console.error(i(t.responseText,t.responseText)),Promise.reject(new n(500));default:return Promise.reject(new n(t.status))}return Promise.resolve(t)}(t.target).then(s,r),a.send(e.body)})}class y{constructor(t){this.headers={},this.signInUserId="",this.signInUserIsAdmin=!1,this.serverUrl=t}get(t,e={}){return f(`${this.serverUrl}${t}`,{...e,method:"GET",headers:{...this.headers,...e.headers}})}post(t,e,s={}){return f(`${this.serverUrl}${t}`,{...s,method:"POST",headers:{...this.headers,...s.headers},body:e})}put(t,e,s={}){return f(`${this.serverUrl}${t}`,{...s,method:"PUT",headers:{...this.headers,...s.headers},body:e})}delete(t,e={}){return f(`${this.serverUrl}${t}`,{...e,method:"DELETE",headers:{...this.headers,...e.headers}})}uploadFile(t,e,s,r={}){const i=new FormData;return i.append("file",e),v(`${this.serverUrl}${t}`,{method:"POST",headers:{...this.headers,...r.headers},body:i,uploadProgress:s})}async downloadFile(t,e,s={}){const r=await this.get(t,s);if(!e)return r;const i=r.headers.get("Content-Length"),n=parseInt(i||"",10)||1,a=new ReadableStream({async start(t){const s=r.body.getReader();let i=0;for(;;){const{done:r,value:a}=await s.read();if(r)break;t.enqueue(a),i+=a.length,e(i/n,a)}t.close()}});return new Response(a)}async downloadFileRange(t,e,s,r,i={}){const n={...i.headers,Range:"bytes="+s.map(t=>`${t.begin}-${t.end}`).join(",")},a=await this.get(t,{...i,headers:n});if(!r)return a;const o=a.headers.get("content-length"),h=parseInt(o||"",10)||1,d=new ReadableStream({async start(t){const e=a.body.getReader();let i=0,n=0,o=0;for(;;){const{done:a,value:d}=await e.read();if(a)break;t.enqueue(d),i+=d.length;let l=d.length,u=0;for(;l>0;){const t=s[n],e=t.end-t.begin+1-o;if(l<e){const e=d.subarray(u,u+l);r(i/h,e,t.requestId),o+=l,l=0}else{const s=d.subarray(u,u+e);r(i/h,s,t.requestId),u+=e,l-=e,n++,o=0}}}t.close()}});return new Response(d)}}class C extends e{constructor(t,e,s){super(`/files/${e}/permissions/${t.id}`,s),this.data=t}get actions(){return this.data.actions}set actions(t){this._data.actions=t}get data(){return this._data}set data(t){this._data=t}get id(){return this.data.id}get grantedTo(){return this.data.grantedTo}set grantedTo(t){this.data.grantedTo=t}get public(){return this.data.public}set public(t){this.data.public=t}async checkout(){const t=await this.get("");return this.data=await t.json(),this}async update(t){const e=await this.put("",t);return this.data=await e.json(),this}delete(){return super.delete("").then(t=>t.json())}save(){return this.update(this.data)}}class j extends e{constructor(t,e){super(`/jobs/${t.id}`,e),this.data=t}get assemblyId(){return this.data.assemblyId}get authorId(){return this.data.authorId}get createdAt(){return this.data.createdAt}get data(){return this._data}set data(t){this._data=t}get done(){return"done"===this.data.status||"failed"===this.data.status}get fileId(){return this.data.fileId}get id(){return this.data.id}get lastUpdate(){return this.data.lastUpdate}get outputFormat(){return this.data.outputFormat}get parameters(){return this.data.parameters}get status(){return this.data.status}get statusMessage(){return this.data.statusMessage}get startedAt(){return this.data.startedAt}async checkout(){const t=await this.get("");return this.data=await t.json(),this}async update(t){const e=await this.put("",t);return this.data=await e.json(),this}delete(){return super.delete("").then(t=>t.json())}waitForDone(t){return d(()=>this.checkout().then(e=>{var s;const r=["done","failed"].includes(e.status);return(null===(s=null==t?void 0:t.onCheckout)||void 0===s?void 0:s.call(t,e,r))||r}),t).then(()=>this)}}class _ extends e{constructor(t,e){super(`/shares/${t.token}`,e),this.data=t}get createdAt(){return this.data.createdAt}get data(){return this._data}set data(t){this._data=t}get permissions(){return this.data.permissions}set permissions(t){this.data.permissions={...this.data.permissions,...t}}get token(){return this.data.token}get url(){return this.data.url}async checkout(){const t=await this.get("");return this.data=await t.json(),this}async update(t){const e=await this.put("",t);return this.data=await e.json(),this}delete(){return super.delete("").then(t=>t.json())}save(){return this.update(this.data)}}class $ extends e{constructor(t,e){super(`/files/${t.id}`,e),this.data=t}get activeVersion(){return this.data.activeVersion}get created(){return this.data.created}get customFields(){return this.data.customFields}set customFields(t){this.data.customFields=t}get data(){return this._data}set data(t){var e,s,r,i,n,a,o,h,d,l,c,g,m,w,f,v,y,C,j,_,$,P,U;this._data=t,this._data.previewUrl=t.preview?`${this.httpClient.serverUrl}${this.path}/preview?updated=${t.updatedAt}`:"","string"==typeof this._data.owner&&(this._data.owner={userId:this._data.owner}),null!==(e=(w=this._data).owner)&&void 0!==e||(w.owner={}),this._data.owner.avatarUrl=`${this.httpClient.serverUrl}/users/${this._data.owner.userId}/avatar`,this._data.owner.fullName=u(this._data.owner),this._data.owner.initials=p(this._data.owner.fullName),null!==(s=(f=this._data).status)&&void 0!==s||(f.status={}),null!==(r=(v=this._data.status).geometry)&&void 0!==r||(v.geometry={state:null!==(i=this._data.geometryStatus)&&void 0!==i?i:"none"}),null!==(n=(y=this._data.status).properties)&&void 0!==n||(y.properties={state:null!==(a=this._data.propertiesStatus)&&void 0!==a?a:"none"}),null!==(o=(C=this._data.status).validation)&&void 0!==o||(C.validation={state:null!==(h=this._data.validationStatus)&&void 0!==h?h:"none"}),null!==(d=(j=this._data).updatedBy)&&void 0!==d||(j.updatedBy={}),this._data.updatedBy.avatarUrl=`${this.httpClient.serverUrl}/users/${this._data.updatedBy.userId}/avatar`,this._data.updatedBy.fullName=u(this._data.updatedBy),this._data.updatedBy.initials=p(this._data.updatedBy.fullName),null!==(l=(_=this._data).versions)&&void 0!==l||(_.versions=[{...t}]),null!==(c=($=this._data.status).geometryGltf)&&void 0!==c||($.geometryGltf={state:"none"}),null!==(g=(P=this._data).isFileDeleted)&&void 0!==g||(P.isFileDeleted=!1),null!==(m=(U=this._data).sharedLinkToken)&&void 0!==m||(U.sharedLinkToken=null)}get exports(){return this.data.exports}get geometryType(){return"done"===this.status.geometryGltf.state?"gltf":"done"===this.status.geometry.state?"vsfx":""}get id(){return this.data.id}get isFileDeleted(){return this.data.isFileDeleted}get name(){return this.data.name}set name(t){this.data.name=t}get originalFileId(){return this.data.originalFileId}get owner(){return this.data.owner}get previewUrl(){return this.data.previewUrl}get size(){return this.data.size}get sizeTotal(){return this.data.sizeTotal}get sharedLinkToken(){return this.data.sharedLinkToken}get status(){return this.data.status}get type(){return this.data.type}get updatedAt(){return this.data.updatedAt}get updatedBy(){return this.data.updatedBy}get version(){return this.data.version}get versions(){return this.data.versions}async checkout(){const t=await this.get("");return this.data=await t.json(),this}async update(t){const e=await this.put("",t);return this.data=await e.json(),this}delete(){return super.delete("").then(t=>t.json())}save(){return this.update(this.data)}async setPreview(t){if(t){const e=await this.post("/preview",t);this.data=await e.json()}else await this.deletePreview();return this}async deletePreview(){const t=await super.delete("/preview");return this.data=await t.json(),this}getModels(){return this.get("/geometry").then(t=>t.json()).then(t=>t.map(t=>new a(t,this)))}getModelTransformMatrix(t){}setModelTransformMatrix(t,e){return console.warn("File does not support model transformation"),Promise.resolve(this)}getProperties(t,e=!1){const s=new URLSearchParams;t&&(Array.isArray(t)&&(t=t.join(",")),"string"==typeof t&&(t=t.trim()),t&&s.set("handles",t)),e&&s.set("group","true");let r=s.toString();return r&&(r="?"+r),this.get(`/properties${r}`).then(t=>t.json())}searchProperties(t){return this.post("/properties/search",t).then(t=>t.json())}getCdaTree(){return this.get("/properties/tree").then(t=>t.json())}getViewpoints(){return this.get("/viewpoints").then(t=>t.json()).then(t=>t.result)}saveViewpoint(t){return this.post("/viewpoints",t).then(t=>t.json())}deleteViewpoint(t){return super.delete(`/viewpoints/${t}`).then(t=>t.json())}getSnapshot(t){return this.get(`/viewpoints/${t}/snapshot`).then(t=>t.text())}getSnapshotData(t,e){return this.get(`/viewpoints/${t}/bitmaps/${e}`).then(t=>t.text())}download(t,e){return this.httpClient.downloadFile(this.getEndpointPath("/downloads"),t,{signal:e,headers:this.headers}).then(t=>t.arrayBuffer())}downloadResource(t,e,s){return this.httpClient.downloadFile(this.getEndpointPath(`/downloads/${t}`),e,{signal:s,headers:this.headers}).then(t=>t.arrayBuffer())}downloadResourceRange(t,e,s,r,i){return this.httpClient.downloadFileRange(this.getEndpointPath(`/downloads/${t}${e?"?requestId="+e:""}`),e,s,r,{signal:i,headers:this.headers}).then(t=>t.arrayBuffer())}getReferences(t){return this.get("/references",t).then(t=>t.json())}setReferences(t){return this.put("/references",t).then(t=>t.json())}createJob(t,s){return new e("/jobs",this.httpClient,this.headers).post(this.appendVersionParam(""),{fileId:this.id,outputFormat:t,parameters:l(s)}).then(t=>t.json()).then(t=>new j(t,this.httpClient))}extractGeometry(t,e){return this.createJob("gltf"===t?"geometryGltf":"geometry",e)}extractProperties(t){return this.createJob("properties",t)}validate(t){return this.createJob("validation",t)}waitForDone(t,e,s){const r=Array.isArray(t)?t:[t];void 0===e&&(e=!0);return d(()=>this.checkout().then(t=>{var i;const n=r.filter(e=>{const s=t.status[e]||{};return["none","done","failed"].includes(s.state||"none")}),a=e?n.length===r.length:n.length>0;return(null===(i=null==s?void 0:s.onCheckout)||void 0===i?void 0:i.call(s,t,a))||a}),s).then(()=>this)}getPermissions(){return this.get("/permissions").then(t=>t.json()).then(t=>t.map(t=>new C(t,this.id,this.httpClient)))}getPermission(t){return this.get(`/permissions/${t}`).then(t=>t.json()).then(t=>new C(t,this.id,this.httpClient))}createPermission(t,e,s=!1){return this.post("/permissions",{actions:Array.isArray(t)?t:[t],grantedTo:Array.isArray(e)?e:[e],public:s}).then(t=>t.json()).then(t=>new C(t,this.id,this.httpClient))}deletePermission(t){return super.delete(`/permissions/${t}`).then(t=>t.json())}async uploadVersion(t,e={waitForDone:!1}){const s=await this.httpClient.uploadFile(this.getEndpointPath("/versions"),t,s=>{var r;return null===(r=e.onProgress)||void 0===r?void 0:r.call(e,s,t)},{headers:this.headers}).then(t=>JSON.parse(t.responseText)).then(t=>new $(t,this.httpClient));let r="";"none"!==this.versions[0].status.geometryGltf.state&&(r="gltf"),"none"!==this.versions[0].status.geometry.state&&(r="vsfx"),void 0===(e={...e}).geometry&&(e.geometry=""!==r),void 0===e.properties&&(e.properties="none"!==this.versions[0].status.properties.state);const i=[];return e.geometry&&i.push((await s.extractGeometry(r)).outputFormat),e.properties&&i.push((await s.extractProperties()).outputFormat),i.length>0&&(e.waitForDone?await s.waitForDone(i,!0,e):await s.checkout()),await this.checkout(),s}getVersions(){return this.get("/versions").then(t=>t.json()).then(t=>t.map(t=>new $(t,this.httpClient))).then(t=>t.map(t=>t.id==t.originalFileId?t.useVersion(0):t))}getVersion(t){return this.get(`/versions/${t}`).then(t=>t.json()).then(t=>new $(t,this.httpClient)).then(t=>t.id==t.originalFileId?t.useVersion(0):t)}async deleteVersion(t){const e=await super.delete(`/versions/${t}`),s=await e.json();return await this.checkout(),s}setActiveVersion(t){return this.update({activeVersion:t})}useVersion(t){return super.useVersion(t)}async deleteSource(){const t=await super.delete("/source");return this.data=await t.json(),this}async createSharedLink(t){const s=new e("/shares",this.httpClient,this.headers),r=await s.post("",{fileId:this.id,permissions:t}),i=await r.json();return await this.checkout(),new _(i,this.httpClient)}async getSharedLink(){if(!this.sharedLinkToken)return Promise.resolve(void 0);const t=new e("/shares",this.httpClient,this.headers),s=await t.get(`/${this.sharedLinkToken}`),r=await s.json();return new _(r,this.httpClient)}async deleteSharedLink(){const t=new e("/shares",this.httpClient,this.headers),s=await t.delete(`/${this.sharedLinkToken}`),r=await s.json();return await this.checkout(),r}}class P extends e{constructor(t,e,s){super("",s),this.projectId=e,this.data=t}get description(){return this.data.description}set description(t){this._data.description=t}get data(){return this._data}set data(t){this._data=t,this.path=`/projects/${this.projectId}/roles/${t.name}`}get name(){return this.data.name}set name(t){this._data.name=t}get permissions(){return this.data.permissions}set permissions(t){this.data.permissions=t||{}}async checkout(){const t=await this.get("");return this.data=await t.json(),this}async update(t){const e=await this.put("",t);return this.data=await e.json(),this}delete(){return super.delete("").then(t=>t.json())}save(){return this.update(this.data)}}class U extends e{constructor(t,e,s){super(`/projects/${e}/members/${t.id}`,s),this.data=t}get data(){return this._data}set data(t){this._data=t,this._data.user.avatarUrl=`${this.httpClient.serverUrl}/users/${this._data.user.userId}/avatar`,this._data.user.fullName=u(this._data.user),this._data.user.initials=p(this._data.user.fullName)}get id(){return this.data.id}get role(){return this.data.role}set role(t){this.data.role=t}get type(){return this.data.type}get user(){return this.data.user}async checkout(){const t=await this.get("");return this.data=await t.json(),this}async update(t){const e=await this.put("",t);return this.data=await e.json(),this}delete(){return super.delete("").then(t=>t.json())}save(){return this.update(this.data)}}class b extends e{constructor(t,e){super(`/projects/${t.id}`,e),this.data=t}get authorization(){return this.data.authorization}get createdAt(){return this.data.createdAt}get customFields(){return this.data.customFields}set customFields(t){this.data.customFields=t}get data(){return this._data}set data(t){this._data=t,this._data.previewUrl=t.avatarUrl?`${this.httpClient.serverUrl}/projects/${this._data.id}/preview?updated=${t.updatedAt}`:"",this._data.owner.avatarUrl=`${this.httpClient.serverUrl}/users/${this._data.owner.userId}/avatar`,this._data.owner.fullName=u(this._data.owner),this._data.owner.initials=p(this._data.owner.fullName)}get description(){return this.data.description}set description(t){this.data.description=t}get endDate(){return this.data.endDate}set endDate(t){this.data.endDate=t instanceof Date?t.toISOString():t}get id(){return this.data.id}get memberCount(){return this.data.memberCount}get modelCount(){return this.data.modelCount}get name(){return this.data.name}set name(t){this.data.name=t}get owner(){return this.data.owner}get previewUrl(){return this._data.previewUrl}get public(){return this.data.public}set public(t){this.data.public=t}get startDate(){return this.data.startDate}set startDate(t){this.data.startDate=t instanceof Date?t.toISOString():t}get topicCount(){return this.data.topicCount}get updatedAt(){return this.data.updatedAt}async checkout(){const t=await this.get("");return this.data=await t.json(),this}async update(t){const e=await this.put("",t);return this.data=await e.json(),this}delete(){return super.delete("").then(t=>t.text()).then(t=>{try{return JSON.parse(t)}catch{return{id:this.id}}})}save(){return this.update(this.data)}async setPreview(t){if(t){const e=await this.post("/preview",t);this.data=await e.json()}else await this.deletePreview();return this}async deletePreview(){const t=await super.delete("/preview");return this.data=await t.json(),this}getRoles(){return this.get("/roles").then(t=>t.json()).then(t=>t.map(t=>new P(t,this.id,this.httpClient)))}getRole(t){return this.get(`/roles/${t}`).then(t=>t.json()).then(t=>new P(t,this.id,this.httpClient))}createRole(t,e,s){return this.post("/roles",{name:t,description:e,permissions:s||{}}).then(t=>t.json()).then(t=>new P(t,this.id,this.httpClient))}deleteRole(t){return super.delete(`/roles/${t}`).then(t=>t.json())}getMembers(){return this.get("/members").then(t=>t.json()).then(t=>t.map(t=>new U(t,this.id,this.httpClient)))}getMember(t){return this.get(`/members/${t}`).then(t=>t.json()).then(t=>new U(t,this.id,this.httpClient))}addMember(t,e){return this.post("/members",{userId:t,role:e}).then(t=>t.json()).then(t=>new U(t,this.id,this.httpClient))}removeMember(t){return super.delete(`/members/${t}`).then(t=>t.json())}getFilesInformation(){return new e("/bcf/3.0/projects",this.httpClient,this.headers).get(`/${this.id}/files_information`).then(t=>t.json()).then(t=>(t.forEach(t=>{const e=e=>(t.display_information.find(t=>t.field_display_name===e)||{}).field_value,s=`${this.httpClient.serverUrl}/files/${t.file.reference}/preview`,r=`${this.httpClient.serverUrl}/users/${e("Owner")}/avatar`,i=u(e("Owner First Name"),e("Owner Last Name"),e("Owner User Name")),n=p(i);t.display_information.push({field_display_name:"Preview URL",field_value:s}),t.display_information.push({field_display_name:"Owner Avatar URL",field_value:r}),t.display_information.push({field_display_name:"Owner Full Name",field_value:i}),t.display_information.push({field_display_name:"Owner Initials",field_value:n});const a=`${this.httpClient.serverUrl}/users/${e("Updated By")}/avatar`,o=u(e("Updated By First Name"),e("Updated By Last Name"),e("Updated By User Name")),h=p(o);t.display_information.push({field_display_name:"Updated By Avatar URL",field_value:a}),t.display_information.push({field_display_name:"Updated By Full Name",field_value:o}),t.display_information.push({field_display_name:"Updated By Initials",field_value:h});const d=e("Geometry Status"),l=e("GeometryGltf Status"),c="done"===d?"vsfx":"done"===l?"gltf":"";t.display_information.push({field_display_name:"Geometry Type",field_value:c})}),t))}getModels(){return this.getFilesInformation().then(t=>t.map(t=>t.file.reference)).then(t=>new e("/files",this.httpClient,this.headers).get(`?id=${o(t)}`)).then(t=>t.json()).then(t=>t.result.map(t=>new $(t,this.httpClient)))}async addModel(t,s){const r=new e("/files",this.httpClient,this.headers),i=await r.get(`/${t}`).then(t=>t.json()).then(t=>new $(t,this.httpClient)),n=[{project:{id:this.id,name:this.name}}];return await i.createPermission(s,n),i}async removeModel(t){const s=new e("/files",this.httpClient,this.headers),r=await s.get(`/${t}`).then(t=>t.json()).then(t=>new $(t,this.httpClient)),i=await r.getPermissions();return await Promise.allSettled(i.filter(t=>t.grantedTo.some(t=>{var e;return(null===(e=t.project)||void 0===e?void 0:e.id)===this.id})).map(t=>t.delete())),r}}class I extends e{constructor(t,e){super("",e),this.data=t}get avatarUrl(){return this._data.avatarUrl}get canCreateProject(){return this.data.canCreateProject}set canCreateProject(t){this._data.canCreateProject=t}get createAt(){return this.data.createAt}get customFields(){return this.data.customFields}set customFields(t){this._data.customFields=t}get data(){return this._data}set data(t){this._data=t,this._data.avatarUrl=t.avatarImage?`${this.httpClient.serverUrl}/users/${this._data.id}/avatar?updated=${t.lastModified}`:"",this._data.fullName=u(this._data),this._data.initials=p(this._data.fullName)}get email(){return this.data.email}set email(t){this._data.email=t}get emailConfirmationId(){return this.data.emailConfirmationId}get firstName(){return this.data.firstName}set firstName(t){this._data.firstName=t}get fullName(){return this.data.fullName}get id(){return this.data.id}get initials(){return this.data.initials}get isAdmin(){return this.data.isAdmin}set isAdmin(t){this._data.isAdmin=t}get isEmailConfirmed(){return this.data.isEmailConfirmed}get lastModified(){return this.data.lastModified}get lastName(){return this.data.lastName}set lastName(t){this._data.lastName=t}get lastSignIn(){return this.data.lastSignIn}get projectsLimit(){return this.data.projectsLimit}set projectsLimit(t){this._data.projectsLimit=t}get providerType(){return this.data.providerType}get storageLimit(){return this.data.storageLimit}set storageLimit(t){this._data.storageLimit=t}get storageUsed(){return this.data.storageUsed}get token(){return this.data.tokenInfo.token}get userName(){return this.data.userName}set userName(t){this._data.userName=t}async checkout(){if(this.httpClient.signInUserIsAdmin){const t=await this.get(`/users/${this.id}`),e=await t.json();this.data={id:e.id,...e.userBrief}}else{if(this.id!==this.httpClient.signInUserId)return Promise.reject(new n(403));{const t=await this.get("/user"),e=await t.json();this.data={id:this.id,...e}}}return this}async update(t){if(this.httpClient.signInUserIsAdmin){const e=await this.put(`/users/${this.id}`,{isAdmin:t.isAdmin,userBrief:t}),s=await e.json();this.data={id:s.id,...s.userBrief}}else{if(this.id!==this.httpClient.signInUserId)return Promise.reject(new n(403));{const e=await this.put("/user",t),s=await e.json();this.data={id:this.id,...s}}}return this}delete(){return this.httpClient.signInUserIsAdmin?super.delete(`/users/${this.id}`).then(t=>t.json()).then(t=>(this.id===this.httpClient.signInUserId&&(delete this.httpClient.headers.Authorization,this.httpClient.signInUserId="",this.httpClient.signInUserIsAdmin=!1),t)):Promise.reject(new n(403))}save(){return this.update(this.data)}async setAvatar(t){if(t)if(this.httpClient.signInUserIsAdmin){const e=await this.post(`/users/${this.id}/avatar`,t),s=await e.json();this.data={id:s.id,...s.userBrief}}else{if(this.id!==this.httpClient.signInUserId)return Promise.reject(new n(403));{const e=await this.post("/user/avatar",t),s=await e.json();this.data={id:this.id,...s}}}else await this.deleteAvatar();return this}async deleteAvatar(){if(this.httpClient.signInUserIsAdmin){const t=await super.delete(`/users/${this.id}/avatar`),e=await t.json();this.data={id:e.id,...e.userBrief}}else{if(this.id!==this.httpClient.signInUserId)return Promise.reject(new n(403));{const t=await super.delete("/user/avatar"),e=await t.json();this.data={id:this.id,...e}}}return this}async changePassword(t,e){if(this.httpClient.signInUserIsAdmin){const e=await this.put(`/users/${this.id}/password`,{new:t}),s=await e.json();this.data={id:s.id,...s.userBrief}}else{if(this.id!==this.httpClient.signInUserId)return Promise.reject(new n(403));{const s=await this.put("/user/password",{old:e,new:t}),r=await s.json();this.data={id:this.id,...r}}}return this}}class A extends e{constructor(t,e){super(`/oauth/clients/${t.clientId}`,e),this.data=t}get authUrl(){return this.data.authUrl}get accessTokenUrl(){return this.data.accessTokenUrl}get clientId(){return this.data.clientId}get createdAt(){return this.data.createdAt}get description(){return this.data.description}set description(t){this._data.description=t}get data(){return this._data}set data(t){this._data=t}get name(){return this.data.name}set name(t){this._data.name=t}get redirectUrl(){return this.data.redirectUrl}set redirectUrl(t){this.data.redirectUrl=t}get secret(){return this.data.secret}get updatedAt(){return this.data.updatedAt}async checkout(){const t=await this.get("");return this.data=await t.json(),this}async update(t){const e=await this.put("",t);return this.data=await e.json(),this}delete(){return super.delete("").then(t=>t.json())}save(){return this.update(this.data)}async revoke(){return await this.post("/revoke"),this}}class S extends ${constructor(t,e,s){super(t.file,s),this.path=`/shares/${t.file.sharedLinkToken}`,this.headers={"InWeb-Password":e}}async checkout(){const t=await this.get("/info"),e=await t.json();return this.data=e.file,this}async update(t){const e=await this.put("/info",t);return this.data=await e.json(),this}getVersions(){return Promise.resolve(void 0)}useVersion(t){return this}}class F extends e{constructor(t,e){super(`/plugins/${t.name}/${t.version}`,e),this.data=t}get author(){return this.data.author}get data(){return this._data}set data(t){this._data=t}get description(){return this.data.description}get enabled(){return this.data.enabled}get homepage(){return this.data.homepage}get id(){return this.data.id}get license(){return this.data.license}get name(){return this.data.name}get permissions(){return this.data.permissions}get pluginType(){return this.data.pluginType}get version(){return this.data.version}async checkout(){const t=await this.get("");return this.data=await t.json(),this}delete(){return super.delete("").then(t=>t.json())}async enable(){const t=await this.put("/enable");return this.data=await t.json(),this}async disable(){const t=await this.put("/disable");return this.data=await t.json(),this}download(t,e){return this.httpClient.downloadFile(this.getEndpointPath("/download"),t,{signal:e,headers:this.headers}).then(t=>t.arrayBuffer())}getManifest(){return this.get("/manifest").then(t=>t.json())}getSettings(){return this.get("/settings").then(t=>t.json())}updateSettings(t){return this.post("/settings",t).then(t=>t.json())}executeCommand(t,s){return new e(`/plugins/${this.name}/commands`,this.httpClient,this.headers).post(`/${t}?version=${this.version}`,s).then(t=>t.json())}}t.Assembly=g,t.ClashTest=c,t.Client=class extends m{constructor(t={}){super(),this._serverUrl="",this._httpClient=new y(""),this._user=null,this.eventEmitter=this,this.configure(t)}get serverUrl(){return this._serverUrl}get httpClient(){return this._httpClient}configure(t){return this._serverUrl=(t.serverUrl||"").replace(/\/+$/,""),this._httpClient.serverUrl=this.serverUrl,this.clearCurrentUser(),this}version(){return this.httpClient.get("/version").then(t=>t.json()).then(t=>({...t,server:t.version,client:"27.5.0"}))}registerUser(t,e,s){return this.httpClient.post("/register",{email:t,password:e,userName:null!=s?s:(t+"").split("@").shift()}).then(t=>t.json())}resendConfirmationEmail(t,e){return this.httpClient.post("/register/email-confirmation",{email:t,password:e}).then(t=>t.json())}confirmUserEmail(t){return this.httpClient.get(`/register/email-confirmation/${t}`).then(t=>t.json())}async signInWithEmail(t,e){const s=btoa(unescape(encodeURIComponent(t+":"+e)));this.httpClient.headers.Authorization="Basic "+s;const r=await this.httpClient.get("/token"),i=await r.json();return this.setCurrentUser(i)}async signInWithToken(t){this.httpClient.headers.Authorization=t;const e=await this.httpClient.get("/user"),s=await e.json();return this.setCurrentUser(s)}signOut(){this.clearCurrentUser()}setCurrentUser(t){return this._user=new I(t,this.httpClient),this.httpClient.headers.Authorization=t.tokenInfo.token,this.httpClient.signInUserId=this._user.id,this.httpClient.signInUserIsAdmin=this._user.isAdmin,this._user}clearCurrentUser(){this._user=null,delete this.httpClient.headers.Authorization,this.httpClient.signInUserId="",this.httpClient.signInUserIsAdmin=!1}getCurrentUser(){return this._user&&!this.httpClient.signInUserId&&(this._user=null),this._user}getIdentityProviders(){return this.httpClient.get("/identity").then(t=>t.json())}getServerSettings(){return this.httpClient.get("/settings").then(t=>t.json())}updateServerSettings(t){return this.httpClient.put("/settings",t).then(t=>t.json())}getOAuthClients(t,e){const s=new URLSearchParams;t>0&&s.set("start",t.toString()),e>0&&s.set("limit",e.toString());let r=s.toString();return r&&(r="?"+r),this.httpClient.get(`/oauth/clients${r}`).then(t=>t.json()).then(t=>({...t,result:t.result.map(t=>new A(t,this.httpClient))}))}getOAuthClient(t){return this.httpClient.get(`/oauth/clients/${t}`).then(t=>t.json()).then(t=>new A(t,this.httpClient))}createOAuthClient(t,e,s){return this.httpClient.post("/oauth/clients",{name:t,redirectUrl:e,description:s}).then(t=>t.json()).then(t=>new A(t,this.httpClient))}deleteOAuthClient(t){return this.httpClient.delete(`/oauth/clients/${t}`).then(t=>t.json())}getUsers(){return this.httpClient.get("/users").then(t=>t.json()).then(t=>t.map(t=>({id:t.id,...t.userBrief}))).then(t=>t.map(t=>new I(t,this.httpClient)))}getUser(t){return this.httpClient.signInUserIsAdmin?this.httpClient.get(`/users/${t}`).then(t=>t.json()).then(t=>({id:t.id,...t.userBrief})).then(t=>new I(t,this.httpClient)):t===this.httpClient.signInUserId?this.httpClient.get("/user").then(t=>t.json()).then(e=>({id:t,...e})).then(t=>new I(t,this.httpClient)):Promise.reject(new n(403))}createUser(t,e,s={}){const{isAdmin:r,userName:i,...n}=s;return this.httpClient.post("/users",{isAdmin:r,userBrief:{...n,email:t,userName:null!=i?i:(t+"").split("@").shift()},password:e}).then(t=>t.json()).then(t=>({id:t.id,...t.userBrief})).then(t=>new I(t,this.httpClient))}deleteUser(t){return this.httpClient.signInUserIsAdmin?this.httpClient.delete(`/users/${t}`).then(t=>t.json()).then(e=>(t===this.httpClient.signInUserId&&this.clearCurrentUser(),e)):Promise.reject(new n(403))}getFiles(t,e,s,r,i,n,a,h){const d=new URLSearchParams;t>0&&d.set("start",t.toString()),e>0&&d.set("limit",e.toString()),s&&d.set("name",s),r&&(r=o(r))&&d.set("ext",r.toLowerCase()),i&&(i=o(i))&&d.set("id",i),void 0!==n&&d.set("sortBy",n?"desc":"asc"),a&&d.set("sortField",a),h&&d.set("shared","true");let l=d.toString();return l&&(l="?"+l),this.httpClient.get(`/files${l}`).then(t=>t.json()).then(t=>({...t,result:t.result.map(t=>new $(t,this.httpClient))}))}getFile(t){return this.httpClient.get(`/files/${t}`).then(t=>t.json()).then(t=>new $(t,this.httpClient))}async uploadFile(t,e={geometry:!0,properties:!1,waitForDone:!1}){const s=await this.httpClient.uploadFile("/files",t,s=>{var r;this.emitEvent({type:"uploadprogress",data:s,file:t}),null===(r=e.onProgress)||void 0===r||r.call(e,s,t)}).then(t=>JSON.parse(t.responseText)).then(t=>new $(t,this.httpClient)),r="string"==typeof e.geometry?e.geometry:"vsfx",i=e.jobParameters||{},n=[];return e.geometry&&n.push((await s.extractGeometry(r,i.geometry)).outputFormat),e.properties&&n.push((await s.extractProperties(i.properties)).outputFormat),n.length>0&&(e.waitForDone?await s.waitForDone(n,!0,e):await s.checkout()),s}deleteFile(t){return this.httpClient.delete(`/files/${t}`).then(t=>t.json())}downloadFile(t,e,s){return this.httpClient.downloadFile(`/files/${t}/downloads`,e,{signal:s}).then(t=>t.arrayBuffer())}getJobs(t,e,s,r,i){const n=new URLSearchParams;s>0&&n.set("start",s.toString()),e>0&&n.set("limit",e.toString()),t&&(t=o(t))&&n.set("status",t.toLowerCase()),void 0!==r&&n.set("sortBy",r?"desc":"asc"),i&&n.set("sortField",i);let a=n.toString();return a&&(a="?"+a),this.httpClient.get(`/jobs${a}`).then(t=>t.json()).then(t=>({...t,result:t.result.map(t=>new j(t,this.httpClient))}))}getJob(t){return this.httpClient.get(`/jobs/${t}`).then(t=>t.json()).then(t=>new j(t,this.httpClient))}createJob(t,e,s){return this.httpClient.post("/jobs",{fileId:t,outputFormat:e,parameters:l(s)}).then(t=>t.json()).then(t=>new j(t,this.httpClient))}deleteJob(t){return this.httpClient.delete(`/jobs/${t}`).then(t=>t.json())}getAssemblies(t,e,s,r,i,n){const a=new URLSearchParams;t>0&&a.set("start",t.toString()),e>0&&a.set("limit",e.toString()),s&&a.set("name",s),r&&(r=o(r))&&a.set("id",r),void 0!==i&&a.set("sortBy",i?"desc":"asc"),n&&a.set("sortField",n);let h=a.toString();return h&&(h="?"+h),this.httpClient.get(`/assemblies${h}`).then(t=>t.json()).then(t=>({...t,result:t.result.map(t=>new g(t,this.httpClient))}))}getAssembly(t){return this.httpClient.get(`/assemblies/${t}`).then(t=>t.json()).then(t=>new g(t,this.httpClient))}createAssembly(t,e,s={}){const r=s.jobParameters||{};return this.httpClient.post("/assemblies",{name:e,files:t,jobParameters:{geometry:l(r.geometry),properties:l(r.properties)}}).then(t=>t.json()).then(t=>new g(t,this.httpClient)).then(t=>s.waitForDone?t.waitForDone(s):t)}deleteAssembly(t){return this.httpClient.delete(`/assemblies/${t}`).then(t=>t.json())}getProjects(t,e,s,r,i,n){const a=new URLSearchParams;t>0&&a.set("start",t.toString()),e>0&&a.set("limit",e.toString()),s&&a.set("name",s),r&&(r=o(r))&&a.set("id",r),void 0!==i&&a.set("sortBy",i?"desc":"asc"),n&&a.set("sortField",n);let h=a.toString();return h&&(h="?"+h),this.httpClient.get(`/projects${h}`).then(t=>t.json()).then(i=>{if(Array.isArray(i)){let n=i;if(r&&(n=n.filter(t=>r.includes(t.id))),s&&(n=n.filter(t=>t.name.includes(s))),e>0){const s=t>0?t:0;n=n.slice(s,s+e)}return{allSize:i.length,start:t,limit:e,result:n,size:n.length}}return i}).then(t=>({...t,result:t.result.map(t=>new b(t,this.httpClient))}))}getProject(t){return this.httpClient.get(`/projects/${t}`).then(t=>t.json()).then(t=>new b(t,this.httpClient))}createProject(t,e,s,r){return this.httpClient.post("/projects",{name:t,description:e,startDate:s instanceof Date?s.toISOString():s,endDate:r instanceof Date?r.toISOString():r}).then(t=>t.json()).then(t=>new b(t,this.httpClient))}deleteProject(t){return this.httpClient.delete(`/projects/${t}`).then(t=>t.text()).then(e=>{try{return JSON.parse(e)}catch{return{id:t}}})}getSharedLink(t){return this.httpClient.get(`/shares/${t}`).then(t=>t.json()).then(t=>new _(t,this.httpClient))}createSharedLink(t,e){return this.httpClient.post("/shares",{fileId:t,permissions:e}).then(t=>t.json()).then(t=>new _(t,this.httpClient))}deleteSharedLink(t){return this.httpClient.delete(`/shares/${t}`).then(t=>t.json())}getSharedFile(t,e){return this.httpClient.get(`/shares/${t}/info`,{headers:{"InWeb-Password":e}}).then(t=>t.json()).then(t=>new S(t,e,this.httpClient))}getPlugins(){return this.httpClient.get("/plugins").then(t=>t.json()).then(t=>t.map(t=>new F(t,this.httpClient)))}getPlugin(t,e){return this.httpClient.get(`/plugins/${t}/${e}`).then(t=>t.json()).then(t=>new F(t,this.httpClient))}async uploadPlugin(t,e){return await this.httpClient.uploadFile("/plugins",t,s=>{this.emitEvent({type:"uploadprogress",data:s,file:t}),e&&e(s,t)}).then(t=>JSON.parse(t.responseText)).then(t=>new F(t,this.httpClient))}deletePlugin(t,e){return this.httpClient.delete(`/plugins/${t}/${e}`).then(t=>t.json())}downloadPlugin(t,e,s,r){return this.httpClient.downloadFile(`/plugins/${t}/${e}/download`,s,{signal:r}).then(t=>t.arrayBuffer())}executePluginCommand(t,e,s,r){const i=new URLSearchParams;e&&i.set("version",e);let n=i.toString();return n&&(n="?"+n),this.httpClient.post(`/plugins/${t}/commands/${s}${n}`,r).then(t=>t.json())}},t.Endpoint=e,t.FetchError=n,t.File=$,t.Job=j,t.Member=U,t.Model=a,t.OAuthClient=A,t.Permission=C,t.Plugin=F,t.Project=b,t.Role=P,t.SharedFile=S,t.SharedLink=_,t.User=I,t.delay=h,t.normalizeParam=o,t.parseArgs=l,t.statusText=r,t.userFullName=u,t.userInitials=p,t.version="27.5.0",t.waitFor=d});