trimble-connect-workspace-api
Version:
Trimble Connect Workspace API
2 lines (1 loc) • 8.4 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0});const e={postMessage:(e,t)=>{const n=JSON.stringify(e);connectWsApiIntegrator.postMessage(n)}},t={postMessage:(e,t)=>{window.chrome.webview.postMessage(e)}},n={postMessage:(e,t)=>{window.webkit.messageHandlers.webwindowinterop.postMessage(e)}},r={postMessage:(e,t)=>{const n=JSON.stringify(e);window.hybridWebViewHost.sendMessage(n)}},i=()=>crypto.randomUUID(),o=()=>{const e=window;return!!(e&&e.chrome&&e.chrome.webview)},s=()=>{const e=window;return!(!e||!("CefSharp"in e))},a=async()=>(window.connectWsApiIntegrator||await CefSharp.BindObjectAsync("connectWsApiIntegrator"),e),c=()=>t,p=async e=>{let t;return t=e===window?s()?await a():o()?c():e:e,t},d="Trimble.dispatcher.v1",u={},f={};let l=1;function w(e){const t=m();return f[t]=e,()=>delete f[t]}function g(e,t,n,r,i=3e5){return new Promise(((o,s)=>{const a=m(),c={scope:d,type:"request",id:a,api:n,args:r};let p;i>0&&(p=setTimeout((()=>{delete u[a],s(new Error("dispatcher.ts | sendRequest(): Operation timed out."))}),i)),u[a]=e=>{delete u[a],p&&clearTimeout(p),e.error?s(e.error):o(e.result)},e.postMessage(c,t)}))}function y(e,t,n,r){const i={scope:d,type:"event",event:n,data:r};p(e).then((e=>{e.postMessage(i,t)})).catch((e=>{console.error("sendEvent() call failed",e)}))}async function b(e){const t="null"===e.origin?"*":e.origin,n=e.data;if(function(e){return h(e)&&"event"===e.type}(n))for(const r in f){if(!f.hasOwnProperty(r))continue;const i=f[r].event;if(i){i(e.source,t,n.event,n.data)}}else if(function(e){return h(e)&&"request"===e.type}(n)){const r=await p(e.source);let i;for(const e in f){if(!f.hasOwnProperty(e))continue;const o=f[e].request;if(o&&!i){const e=o(r,t,n.api,n.args);if(void 0!==e)try{i={scope:d,type:"response",id:n.id,api:n.api,result:await e}}catch(e){i={scope:d,type:"response",id:n.id,api:n.api,error:String(e)}}}}i||(i={scope:d,type:"response",id:n.id,api:n.api,error:"Not supported"}),r.postMessage(i,t)}else if(function(e){return h(e)&&"response"===e.type}(n)){const e=u[n.id];e&&e(n)}}function h(e){return!!e&&e.scope===d}function m(){return l++}const v={},S=[];let x;const M=new Promise((e=>{x=()=>{x=()=>{},e()}}));let T;function P(e,t,i=1e4){async function p(e,t){const n=await g(e,t,".connect_api_client_v1",[],0);if(n&&"object"==typeof n){return C(n,((n,r,o)=>{if(".api_function_v1"===r){const r=o?o+"."+String(n):String(n);return(...n)=>g(e,t,r,n,i)}return r}))}throw new Error("Failed to connect")}function d(e){if(!e)return"*";try{return new URL(e).origin}catch(e){return"*"}}if(t&&(T=w({event:(e,n,r,i)=>t(r,i)})),e===window){if(0!==Object.keys(v).length)return Promise.resolve(v);if(s())return new Promise((async e=>{const t=await a();e(await p(t,"*"))}));if(o()){return p(c(),"*")}if(function(){const e=window;return e&&e.webkit&&e.webkit.messageHandlers&&e.webkit.messageHandlers.webwindowinterop}()){return p(n,"*")}if(function(){const e=window;return e&&e.hybridWebViewHost}()){return p(r,"*")}return Promise.resolve(v)}if((u=e)&&"function"==typeof u.postMessage)return p(e,"*");if((e=>e&&"object"==typeof e.contentWindow)(e)){const t=[];return t.push(new Promise(((t,n)=>{const r=async()=>{e.removeEventListener("load",r),e.contentWindow?t(await p(e.contentWindow,d(e.src))):n(new Error("Cannot access the target content window"))};e.addEventListener("load",r)}))),e.contentWindow&&t.push(p(e.contentWindow,d(e.src))),Promise.race(t)}return Promise.reject(new Error("Target must be a window or an iframe"));var u}function E(e){if("object"!=typeof e)throw new Error("Api must be an object");k(v,e),x()}const O=(e,t,n,r)=>{if(n.origin){let i;i=n.identifier&&r&&n.identifier===r?Object.assign(Object.assign({},t),{origin:{isSelf:!0}}):t,y(n.dispatcher,n.origin,e,i)}};function _(e,t){return"function"==typeof e&&"function"==typeof t&&e.name===t.name||("string"==typeof e&&"string"==typeof t||"number"==typeof e&&"number"==typeof t)}function k(e,t){for(const n in t){const r=t[n];if(r)if(n in e){const t=e[n];if("object"==typeof r&&"object"==typeof t)k(t,r);else{if(!_(r,t))throw new Error(`Cannot merge ${n} (${t} and ${r})`);e[n]=r}}else switch(typeof r){case"object":{const t={};k(t,r),e[n]=t;break}default:e[n]=r}}}function C(e,t,n){const r={};for(const i in e){const o=e[i];if((void 0!==n||"onConnect"!==i&&"onRequest"!==i)&&o)if("object"==typeof o){const e=n&&n+"."+String(i)||String(i);r[i]=C(o,t,e)}else r[i]=t(i,e[i],n)}return r}var V,j,A,H;w({request:(e,t,n,r)=>{if(".connect_api_client_v1"===n)return M.then((()=>{let n=S.find((t=>t.dispatcher===e));if(n)n.origin=t;else{if(!e)return;n={dispatcher:e,origin:t,identifier:i()},S.push(n)}var r;(r=v)&&"function"==typeof r.onConnect&&v.onConnect(n);return C(v,((e,t)=>"function"==typeof t?".api_function_v1":t))}));{const i=S.find((n=>n.dispatcher===e&&n.origin===t));if(i){if((o=v)&&"function"==typeof o.onRequest){const e=v.onRequest(i,n,r);if(void 0!==e)return e}const e=function(e,t){const n=t.split(".");let r=e;for(const e of n)r="object"==typeof r&&r&&e in r?r[e]:void 0;return r}(v,n);if("function"==typeof e){const t=e.apply(void 0,r);return void 0===t?Promise.resolve(t):t}return Promise.resolve(e)}return}var o}}),exports.PropertyType=void 0,(V=exports.PropertyType||(exports.PropertyType={}))[V.LengthMeasure=0]="LengthMeasure",V[V.AreaMeasure=1]="AreaMeasure",V[V.VolumeMeasure=2]="VolumeMeasure",V[V.MassMeasure=3]="MassMeasure",V[V.AngleMeasure=4]="AngleMeasure",V[V.StringValue=5]="StringValue",V[V.IntValue=6]="IntValue",V[V.DoubleValue=7]="DoubleValue",V[V.DateTime=8]="DateTime",V[V.Logical=9]="Logical",V[V.Boolean=10]="Boolean",exports.ViewEntityStates=void 0,(j=exports.ViewEntityStates||(exports.ViewEntityStates={}))[j.Selected=1]="Selected",j[j.Hidden=4]="Hidden",j[j.SelectedHidden=5]="SelectedHidden",j[j.Visible=6]="Visible",j[j.SelectedVisible=7]="SelectedVisible",j[j.Highlighted=8]="Highlighted",exports.ExtensionType=void 0,(A=exports.ExtensionType||(exports.ExtensionType={})).Project="project",A.Viewer="3dviewer",exports.TabPanelId=void 0,(H=exports.TabPanelId||(exports.TabPanelId={})).Models="models",H.Layers="layers",H.Attachments="attachments",H.ToDos="todos",H.Views="views",H.ClashSets="clashes",H.Organizer="organizer",H.DataTable="contentbrowser",H.Topics="topics",H.LiveCollaboration="livecollaboration",H.StatusSharing="statussharing",H.Connect2Fab="connect2fab",H.QrMarkers="qrmarkers",H.RealityCapture="realitycapture";var L,D,I;function W(e){return b(e)}exports.CameraMode=void 0,(L=exports.CameraMode||(exports.CameraMode={})).LookAround="look_around",L.Pan="pan",L.Panorama="panorama",L.Rotate="rotate",L.Walk="walk",exports.IdentifierType=void 0,(D=exports.IdentifierType||(exports.IdentifierType={}))[D.Guid=0]="Guid",D[D.String=1]="String",D[D.SpatialHash=2]="SpatialHash",D[D.DwgHandle=3]="DwgHandle",D[D.None=4]="None",exports.SortDirection=void 0,(I=exports.SortDirection||(exports.SortDirection={}))[I.SORT_NONE=0]="SORT_NONE",I[I.SORT_UP=1]="SORT_UP",I[I.SORT_DOWN=-1]="SORT_DOWN",exports.TOOLS=["reset","selection","areaSelection","measurement","pointMarkup","cloudMarkup","arrowMarkup","lineMarkup","textMarkup","freelineMarkup","clipPlane","verticalClipPlane","picking"],exports.TOOL_SNAP_TYPES=["edge","point","surface"],exports.connect=function(e,t,n){return window.removeEventListener("message",W),window.addEventListener("message",W),T&&T(),P(e,t,n)},exports.dispatcherEventListener=W,exports.expose=function(e){return E(e)},exports.getConnectEmbedUrl=function(e="prod"){return`https://${{int:"web.int",qa:"web.qa",stage:"web.stage",prod:"web"}[e]}.connect.trimble.com?isEmbedded=true`},exports.isApplicationEmbedded=function(){try{return window.self!==window.top||s()||o()}catch(e){return!0}},exports.preregister=function(e){const t=S.find((t=>t.dispatcher===e.dispatcher));if(t)return t.identifier=e.identifier||t.identifier,t.origin=e.origin||t.origin,t;if(e.dispatcher){if(e.identifier){if(S.find((t=>t.identifier===e.identifier)))throw new Error(`[Workspace API] Client with identifier '${e.identifier}' already registered!`)}else e.identifier=i();return S.push(e),e}},exports.removeClient=function(e){const t=S.findIndex((t=>t.dispatcher===e.dispatcher));-1!==t&&S.splice(t,1)},exports.sendEvent=function(e,t,n,r){y(e,t,n,r)},exports.sendEventToAllClients=function(e,t,n,r){if(n&&n.identifier){const i=S.find((e=>e.identifier===n.identifier));i&&O(e,t,i,r)}else for(const n of S)O(e,t,n,r)};