@genesislcap/foundation-rapid-cdn 15.89.0 → 15.90.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.
@@ -240,7 +240,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
240
240
  setInterval(function() {
241
241
  self.postMessage(Date.now() - startTime);
242
242
  }, ${this.interval});
243
- `}start(e){this.stop(),this.runWorker(e)}stop(){this.worker&&(this.worker.terminate(),delete this.worker)}runWorker(e){this.worker||(this.worker=new Worker(URL.createObjectURL(new Blob([this.workerScript],{type:`text/javascript`}))),this.worker.onmessage=t=>e(t.data))}},Zv=class extends Im{constructor(){super()}},Qv=class{constructor(e,t,n,r){this._message=e,this._onMessage=t,this._onError=n,this._isSubscription=r}get sentMessage(){return this._message}get onReceivedMessage(){return this._onMessage}get onReceivedError(){return this._onError}get isSubscription(){return this._isSubscription}};let $v=e=>new Promise(t=>{e.addEventListener(`abort`,()=>t(void 0),{once:!0})}),ey=class{get isConfigured(){return this.status.isConfigured}get isConnecting(){return this.status.isConnecting}get isConnected(){return this.status.isConnected}get isConnectedSubject(){return this.status.isConnectedSubject}get isDisconnected(){return this.status.isDisconnected}get isDisconnectedByServer(){return this.status.isDisconnectedByServer}get isReconnecting(){return this.status.isReconnecting}get hasValidSession(){return Y.deprecated(`get hasValidSession`,"Use `User.isAuthenticated` from `@genesislcap/foundation-user` instead.",`15.0.0`),this.user.isAuthenticated}set hasValidSession(e){Y.deprecated(`set hasValidSession`,`Please refrain from calling this API as this state is managed internally.`,`15.0.0`)}get host(){return this.url??jf}get pendingConnection(){return this.reconnectOutcome??this.attempt}get onCurrentSession(){return this.attemptAuthChanges===this.authChanges}constructor(e,t,n,r,i,a,o){var s,c;this.messageBuilder=e,this.session=t,this.serializer=n,this.uuid=r,this.status=i,this.user=a,this.config=o,this.defaultInterval=1e4,this.secondsMultiplier=1e3,this.sessionCheckTimeout=1e4,this.scdbWasmRequested=!1,this.heartbeatIsEnabled=!0,this.heartbeatInterval=this.defaultInterval,this.authChanges=0,this.attemptAuthChanges=0,this.socketMessages=()=>this.wsMessages,(c=(s=this.user)?.addAuthenticationChangeListener)==null||c.call(s,()=>{this.authChanges+=1})}get scdbDecoder(){return this._scdbDecoder??(this._scdbDecoder=new m_(this.metaCache)),this._scdbDecoder}get heartbeatLoggingIsEnabled(){return this.connectOptions?.enableHeartbeatLogging??!1}get messageLoggingIsEnabled(){return this.connectOptions?.enableMessageLogging??!1}connect(e=jf,t,n){if(this.url=e,this.connectOptions=t??this.config.connect,this.reconnectOptions=n??this.config.reconnect,this.connectOptions?.dataserverEncoding===`SCDB_V1`&&this.ensureScdbWasm(),!this.config.isWebSocketExpression?.test(this.host)){Y.error(`Specified host (${this.host}) is not valid WebSocket url. Connection will not proceed.`),Y.warn(`Make sure the host url starts with wss:// or ws://`);return}this.attemptAuthChanges=this.authChanges;let r=!!this.websocket&&this.isConnected,i=new Promise(e=>{var t;Y.info(`${this.isReconnecting?`Reconnecting`:`Connecting`} to ${this.url}`),this.status.isConnecting=!this.isReconnecting,this.rejectPendingRequests(),(!this.isReconnecting||!this.reconnectOptions?.reconnectStreams)&&this.cleanMessages(),(t=this.socketSubscription)==null||t.unsubscribe();let n=new Vv({url:this.url,openObserver:{next:()=>{this.session.setSessionStorageItem(`hostUrl`,this.url),this.status.isConnected=!0,this.prepareHeartbeat(),Y.info(`WebSocket connection is now open`),e(this.isConnected)}},closeObserver:{next:t=>{if(this.websocket!==n){e(this.connection??!1);return}this.status.onClose(t),this.status.isConnecting=!1,this.rejectPendingRequests(new Cg(`WebSocket connection closed before a reply arrived`,{closeCode:t?.code,closeReason:t?.reason})),this.isDisconnectedByServer&&Y.info(`WebSocket connection was closed due an error - Code: ${t.code} ${t.reason?` | Reason: `+t.reason:``}`),e(this.isConnected)}},serializer:e=>this.serializer.serialize(e),deserializer:e=>this.serializer.deserialize(e)});this.websocket=n;let r=e=>J(this,void 0,void 0,function*(){bg(e);let t=`Response Message received for SourceRef: ${e.SOURCE_REF} | MessageType: ${e.MESSAGE_TYPE}`;this.logMessageTypeFlow(e.MESSAGE_TYPE,Y.info,t);let{SOURCE_REF:n,MESSAGE_TYPE:r}=e,i=this.getMessageHandler(n,r);if(!i){e.MESSAGE_TYPE===Fg.MSG_NACK&&e.ERROR&&e.ERROR.forEach(t=>{Y.error(hg(`MessageType: ${e.MESSAGE_TYPE} | Error Details:`,t),t)});return}let a=Ug(e);switch(e.MESSAGE_TYPE){case Ig.EVENT_LOGIN_AUTH_ACK:this.applyServerHeartbeatInterval(e.DETAILS);break;case Fg.LOGOUT_ACK:i.onReceivedMessage.call(this,e),this.cleanMessages();return;case Fg.LOGON_ACK:this.scdbDecoder.onLogonAck(e,p_(i.sentMessage));return;case Fg.LOGOFF_ACK:break;case Fg.QUERY_UPDATE:i.isSubscription||this.sendDataLogoff(n)}e?.ENCODING===`SCDB_V1`&&this.ensureScdbWasm();try{this.scdbDecoder.onMessage(e,p_(i.sentMessage))}catch(e){Y.error(`Failed to decode ${r} for SourceRef: ${n}`,e);let t={SOURCE_REF:n,MESSAGE_TYPE:Fg.MSG_NACK,ERROR:[{CODE:`SCDB_DECODE_FAILED`,TEXT:String(e?.message??e)}]};i.onReceivedError.call(this,new Sg(t,i.sentMessage)),this.removeMessageHandler(n),this.wsMessages.next(t);return}a?i.onReceivedError.call(this,new Sg(e,i.sentMessage)):i.onReceivedMessage.call(this,e),this.wsMessages.next(e),i.isSubscription||this.removeMessageHandler(n)}),i=e=>{Y.debug(`Error found: `,e),this.reconnect()},a=()=>{if(this.isDisconnectedByServer&&this.connectOptions?.alwaysOn){this.reconnect();return}Y.info(`Connection is now closed`)};this.socketSubscription=this.websocket.subscribe(this.connectOptions?.connectObserver??{next:r,error:i,complete:a}),this.status.isConfigured=!0});return this.connection=i,this.attempt=i,i.then(()=>{this.attempt===i&&(this.attempt=void 0)}),r&&(this.status.isConnected=!1),i}handleExpiredSession(){return J(this,void 0,void 0,function*(){if(this.usesCookieAuth)yield this.handleCookieBasedReauth();else{let e=this.messageBuilder.createRefreshTokenMessage(),t=yield this.send(e);this.session.setAuthResult(t),this.updateSessionAndSubscriptions(t)}})}get usesCookieAuth(){return!this.session.getSessionStorageItem(`refreshToken`)}handleCookieBasedReauth(){return J(this,void 0,void 0,function*(){let e=yield Av();if(e===Cv.HANDLED_BY_OTHER_TAB){jv(()=>this.connect(this.url,this.connectOptions,this.reconnectOptions));return}e!==Cv.FAILED&&(yield this.connect(this.url,this.connectOptions,this.reconnectOptions))})}updateSessionAndSubscriptions(e){e?.MESSAGE_TYPE===Ig.EVENT_LOGIN_AUTH_ACK&&this.wsMessageHandlers.forEach(t=>{t.isSubscription&&(t.sentMessage.SESSION_AUTH_TOKEN=e.SESSION_AUTH_TOKEN,this.websocket.next(t.sentMessage))})}applyServerHeartbeatInterval(e){let t=e?.HEARTBEAT_INTERVAL_SECONDS??0;t>0&&this.connectOptions?.heartbeatInterval===void 0&&(this.heartbeatInterval=t*this.secondsMultiplier,this.prepareHeartbeat())}prepareHeartbeat(){this.heartbeatTicker&&this.heartbeatTicker.stop();let e=this.connectOptions?.heartbeatInterval??this.heartbeatInterval,t=()=>J(this,void 0,void 0,function*(){if(!this.isConnected)return;let t=this.messageBuilder.createHeartbeatPingMessage(this.connectOptions?.verboseHeartbeat);this.connectOptions?.heartbeatPingCallback&&this.connectOptions.heartbeatPingCallback(t);let n;try{n=yield this.send(t,!0,{timeout:e})}catch(e){Y.debug(`Heartbeat ping got no pong: `,e);return}this.user.isAuthenticated&&!n.IS_AUTHENTICATED&&this.handleExpiredSession().catch(e=>Y.debug(`Could not refresh the expired session: `,e)),this.connectOptions?.heartbeatPongCallback&&this.connectOptions.heartbeatPongCallback(n),this.heartbeatIsEnabled=n.MESSAGE_TYPE===Fg.HEARTBEAT_PONG&&n.SOURCE_REF===t.SOURCE_REF});(this.connectOptions?.enableHeartbeat??this.heartbeatIsEnabled)&&(this.heartbeatTicker=new Xv(e),this.heartbeatTicker.start(()=>{this.websocket&&this.isConnected&&(t(),this.heartbeatLoggingIsEnabled&&Y.debug(`Sending a heartbeat ping every ${e} ms`))}))}reconnect(){let e=!this.connectOptions?.alwaysOn&&this.connectOptions?.enableHeartbeat===!1;if(this.isReconnecting||e)return;this.status.isReconnecting=!0;let t=this.reconnectOptions?.reconnectStrategy===Wv.Exponential?Kv:qv,n,r=new Promise(e=>{n=e});this.reconnectOutcome=r;let i=this.isConnectedSubject.asObservable().pipe(Ah(e=>e?_h(-1):Gv(this.reconnectOptions,t).pipe(Eh((e,t)=>{let n=this.connectOptions?.alwaysOn?t+1:this.reconnectOptions?.reconnectAttempts??10;return t>=n?(this.status.reconnectionLimitReached=!0,vh(()=>/* @__PURE__ */ Error(`Max reconnect attempts ${n} reached.`))):e>0&&this.user.isAuthenticated&&this.usesCookieAuth?gh(this.refreshSessionBeforeReconnect()).pipe(bh(()=>t)):_h(t)}))),jh(()=>this.websocket&&!this.isConnected),Dh(()=>{this.reconnectOutcome===r&&(this.reconnectOutcome=void 0),n(this.isConnected)}));this.reconnectLoop=i.subscribe(this.reconnectOptions?.reconnectObserver??{next:e=>{Y.debug(`Attempt no. ${e+1} to reconnect`),this.websocket.complete(),this.connect(this.url,this.connectOptions,this.reconnectOptions)},error:e=>{var t;Y.debug(e),(t=this.socketSubscription)==null||t.unsubscribe(),this.status.isReconnecting=!1},complete:()=>{Y.info(this.isConnected?`Reconnected`:`Disconnected`),this.status.isReconnecting=!1,this.wsMessageHandlers.forEach(e=>{e.isSubscription&&this.websocket.next(e.sentMessage)})}})}refreshSessionBeforeReconnect(){return J(this,void 0,void 0,function*(){let e=AbortSignal.timeout(this.sessionCheckTimeout),t=yield Promise.race([Av({reloadOnFailure:!1,signal:e}),$v(e)]).catch(e=>{Y.debug(`Could not check the session before reconnecting: `,e)});if(t===Cv.FAILED)throw this.reloadPage(),Error(`Session expired and could not be refreshed.`);t===Cv.HANDLED_BY_OTHER_TAB&&(yield Mv(e))})}reloadPage(){window.location.reload()}reset(){var e,t;this.status.isConnected=!1,this.status.isConfigured=!1,this.status.isReconnecting=!1,(e=this.reconnectLoop)==null||e.unsubscribe(),(t=this.socketSubscription)==null||t.unsubscribe(),this.websocket&&this.websocket.complete(),this.websocket=null,this.attempt=void 0,this.connection=void 0,this.cleanMessages()}cleanMessages(){this.rejectPendingRequests(),this.wsMessages&&this.wsMessages.complete(),this.wsMessages=new Zv,this.wsMessageHandlers=/* @__PURE__ */ new Map,this.scdbDecoder.clear()}rejectPendingRequests(e=new Cg(`WebSocket connection closed before a reply arrived`)){var t;(t=this.wsMessageHandlers)==null||t.forEach((t,n)=>{t.isSubscription||(this.wsMessageHandlers.delete(n),t.onReceivedError.call(this,e))})}send(e,t=!0,n){let r=Gg(n?.signal);if(r)return r;if(!this.isConnected)return Promise.reject(new Cg(`WebSocket connection is closed`));let i=`Sending Message for SourceRef: ${e.SOURCE_REF} | MessageType: ${e.MESSAGE_TYPE}`;this.logMessageTypeFlow(e.MESSAGE_TYPE,Y.info,i),this.scdbDecoder.prepareRequest(e);let a=new Promise((n,r)=>{t&&this.setMessageHandler(e,n,r),this.websocket.next(e)});return t?Wg(a,{timeout:n?.timeout??this.connectOptions?.requestTimeout,signal:n?.signal},()=>this.removeMessageHandler(e.SOURCE_REF)):a}sendForStream(e,t,n,r){if(!this.isConnected)return vh(()=>new Cg(`WebSocket connection is closed`));let i=`Sending Message (stream) for SourceRef: ${e.SOURCE_REF} | MessageType: ${e.MESSAGE_TYPE}`;this.logMessageTypeFlow(e.MESSAGE_TYPE,Y.info,i),this.scdbDecoder.prepareRequest(e),this.setMessageHandler(e,t,n,!0);let a=!1,o=!1;return x.queueUpdate(()=>{o||(a=!0,this.websocket.next(e))}),new km(t=>{let n=this.wsMessages.pipe(Th(t=>t.SOURCE_REF===e.SOURCE_REF)).subscribe({next:e=>{t.next(e)},error:e=>{t.error(e)},complete:()=>{t.complete()}});return()=>{o=!0,n.unsubscribe(),a&&this.sendDataLogoff(e.SOURCE_REF),this.removeMessageHandler(e.SOURCE_REF),r&&r()}})}sendForStreamWithoutTeardown(e,t,n){if(!this.isConnected)return vh(()=>new Cg(`WebSocket connection is closed`));let r=`Sending Message (stream) for SourceRef: ${e.SOURCE_REF} | MessageType: ${e.MESSAGE_TYPE}`;return this.logMessageTypeFlow(e.MESSAGE_TYPE,Y.info,r),this.scdbDecoder.prepareRequest(e),this.setMessageHandler(e,t,n,!0),this.websocket.next(e),this.wsMessages.pipe(Th(t=>t.SOURCE_REF===e.SOURCE_REF))}setMessageHandler(e,t,n,r=!1){let i=`Setting Message Handler for SourceRef: ${e.SOURCE_REF} | MessageType: ${e.MESSAGE_TYPE}`;this.logMessageTypeFlow(e.MESSAGE_TYPE,Y.debug,i),this.wsMessageHandlers.set(e.SOURCE_REF,new Qv(e,t,n,r))}sendDataLogoff(e){this.send(this.messageBuilder.createDataLogoffMessage(e),!1).catch(t=>Y.debug(`DATA_LOGOFF not sent for SourceRef: ${e}`,t))}removeMessageHandler(e){this.wsMessageHandlers.delete(e)}setScdbMetadataRefresher(e){this.scdbDecoder.setMetadataRefresher(e)}ensureScdbWasm(){this.scdbWasmRequested||(this.scdbWasmRequested=!0,Lae().then(e=>this.scdbDecoder.setWasm(e)).catch(e=>Y.warn(`SCDB WASM decoder unavailable, using pure-JS decoder`,e)))}getMessageHandler(e,t){let n=`Getting Message Handler for SourceRef: ${e} | MessageType: ${t}`;return this.logMessageTypeFlow(t,Y.debug,n),this.wsMessageHandlers.get(e)}logMessageTypeFlow(e,t,n){switch(e){case Ig.DATA_LOGOFF:t(n);break;case Fg.HEARTBEAT_PING:case Fg.HEARTBEAT_PONG:this.heartbeatLoggingIsEnabled&&t(n);break;default:this.messageLoggingIsEnabled&&t(n)}}};q([C],ey.prototype,`websocket`,void 0),q([C],ey.prototype,`wsMessages`,void 0),q([C],ey.prototype,`wsMessageHandlers`,void 0),q([Mg],ey.prototype,`http`,void 0),q([lg],ey.prototype,`metaCache`,void 0),q([C],ey.prototype,`heartbeatIsEnabled`,void 0),ey=q([od(0,Hg),od(1,Og),od(2,om),od(3,ig),od(4,Yv),od(5,cg),od(6,Dg)],ey);let ty=N.createInterface(e=>e.singleton(ey));function ny(){return N.getOrCreateDOMContainer().get(ty)}let ry=class{get isConnected(){return this.socket.isConnected}get isConnectedSubject(){return this.socket.isConnectedSubject}get isConnected$(){return this.socket.isConnectedSubject?.asObservable()}get host(){return this.socket.host}constructor(e,t,n,r,i,a){var o,s;this.socket=e,this.messageBuilder=t,this.metaCache=n,this.events=r,this.config=i,this.transport=a,this.isWorking=!1,this.inFlightMetadata=new qg,this.inFlightRequests=new qg;let c=this.config.connect?.dataserverEncoding;c&&(this.messageBuilder.scdbEncoding=c),this.httpScdbDecoder=new m_(this.metaCache);let l=e=>this.getMetadata(e,!1);(s=(o=this.socket).setScdbMetadataRefresher)==null||s.call(o,l),this.httpScdbDecoder.setMetadataRefresher(l)}httpMode(){return!1}get useHttpReqRep(){return Af===`true`||Ef(`forceHttpReqRep`)}get httpHost(){return this.transport.toHttpHost(this.socket.host)}requestOverHttp(e,t){return J(this,void 0,void 0,function*(){let n=p_(e);this.httpScdbDecoder.prepareRequest(e);let r=yield this.transport.requestServer(this.httpHost,e,t);return this.httpScdbDecoder.onMessage(r,n),r})}sendReqRep(e,t){return this.useHttpReqRep?this.transport.post(this.httpHost,e,t):this.socket.send(e,!0,t)}setValidSession(e){Y.deprecated(`setValidSession`,`Please refrain from calling this API as this state is managed internally.`,`15.0.0`)}send(e,t,n){return this.socket.send(e,t,n)}connect(){return J(this,arguments,void 0,function*(e=jf){if(this.socket.host===e&&this.socket.onCurrentSession!==!1){if(this.isConnected)return!0;let e=this.socket.pendingConnection;if(e)return e}return this.socket.reset(),this.socket.connect(e,this.config.connect,this.config.reconnect)})}disconnect(){this.socket.reset()}snapshot(e,t){return J(this,void 0,void 0,function*(){let n=this.messageBuilder.createDataLogonMessage(e,t);return Y.debug(`${n.MESSAGE_TYPE} (snapshot) message created -> `,n),this.socket.send(n)})}stream(e,t,n,r){let i=this.messageBuilder.createDataLogonMessage(e,r);Y.debug(`${i.MESSAGE_TYPE} (stream) message created -> `,i);let a=performance.now(),o=null,s=this.socket.sendForStream(i,(...n)=>{o===null&&(o=performance.now(),Y.debug(`[stream:${e}] time to initial response: ${(o-a).toFixed(2)}ms`)),t(...n)},t=>{n(t),this.events.onStreamErrorEvent(e,s,t)},()=>{this.events.onStreamCompleteEvent(e,s)});return this.events.onStreamEvent(e,i,s,{onMessage:t,onError:n}),s}streamState(e,t=()=>{},n=()=>{},r,i=[]){return this.stream(e,t,n,r).pipe(Oh(Nv,i))}streamWithoutAutoTeardown(e,t,n,r){Y.deprecated(`streamWithoutAutoTeardown`,`Please use 'stream' api instead.`,`15.0.0`);let i=this.messageBuilder.createDataLogonMessage(e,r);Y.debug(`${i.MESSAGE_TYPE} (stream without auto-teardown) message created -> `,i);let a=this.socket.sendForStreamWithoutTeardown(i,t,t=>{n(t),this.events.onStreamErrorEvent(e,a,t)});return this.events.onStreamEvent(e,i,a,{onMessage:t,onError:n}),a}getMoreRows(e,t){return J(this,void 0,void 0,function*(){let n=this.messageBuilder.createMoreRowsMessage(e,t);return Y.debug(`${n.MESSAGE_TYPE} message created -> `,n),this.socket.send(n,!1)})}getMoreColumns(e){return J(this,void 0,void 0,function*(){let t=this.messageBuilder.createMoreColumnsMessage(e);return this.socket.send(t)})}dataLogoff(e){return J(this,void 0,void 0,function*(){let t=this.messageBuilder.createDataLogoffMessage(e);return Y.debug(`${t.MESSAGE_TYPE} message created -> `,t),this.socket.send(t)})}getMetadata(e){return J(this,arguments,void 0,function*(e,t=!0,n){return t&&this.metaCache.hasMetadataFor(e)?(Y.debug(`Cached metadata retrieved for ${e}`),this.metaCache.getMetadataFor(e)):(this.inFlightMetadata.has(e)&&Y.debug(`In-flight metadata request collapsed for ${e}`),this.inFlightMetadata.join(e,t=>this.fetchMetadata(e,t),this.callerOptions(n)))})}fetchMetadata(e,t){return J(this,void 0,void 0,function*(){let n=this.messageBuilder.createMetaRequestMessage(e);Y.debug(`${n.MESSAGE_TYPE} (metadata) message created -> `,n);let r,i;try{this.isWorking=!0,r=(yield this.sendReqRep(n,{timeout:0,signal:t}))?.DETAILS??{},Object.keys(r).length&&this.metaCache.setMetadataFor(e,r)}catch(t){throw i=t,Y.error(hg(`Metadata request failed for ${e}`,t),t),ay(t)}finally{this.events.onMetadataEvent(e,n,i),this.isWorking=!1}return r})}getJSONSchema(e){return J(this,arguments,void 0,function*(e,t=!0){if(t&&this.metaCache.hasJsonSchemaFor(e))return Y.debug(`Cached JsonSchema retrieved for ${e}`),this.metaCache.getJsonSchemaFor(e);let n=this.messageBuilder.createMetaRequestMessage(e,Ig.JSON_SCHEMA_REQUEST);Y.debug(`${n.MESSAGE_TYPE} (json schema) message created -> `,n);let r;try{this.isWorking=!0,r=(yield this.sendReqRep(n))??{},Object.keys(r).length&&this.metaCache.setJsonSchemaFor(e,r)}catch(t){Y.error(hg(`JSON schema request failed for ${e}`,t),t)}finally{this.isWorking=!1}return r})}callerOptions(e){let t=this.useHttpReqRep?void 0:this.config.connect?.requestTimeout;return{timeout:e?.timeout??t,signal:e?.signal}}request(e,t){return J(this,arguments,void 0,function*(e,t,n=!1,r){let i=zg(e,t);if(n&&this.metaCache.hasRequestFor(i))return Y.debug(`Cached request response retrieved for ${i}`),this.metaCache.getRequestFor(i);this.inFlightRequests.has(i)&&Y.debug(`In-flight request collapsed for ${i}`);let a=yield this.inFlightRequests.join(i,n=>this.sendRequest(e,t,n),this.callerOptions(r));return n&&a&&this.metaCache.setRequestFor(i,a),a})}sendRequest(e,t,n){let r=this.messageBuilder.createRequestMessage(e,t);Y.debug(`${r.MESSAGE_TYPE} (request server) message created -> `,r);let i={timeout:0,signal:n};return this.useHttpReqRep?this.requestOverHttp(r,i):this.socket.send(r,!0,i)}getAvailableResources(e){return J(this,arguments,void 0,function*(e,t=!0){if(t&&this.metaCache.hasResources())return Y.debug(`Cached resources retrieved`),this.metaCache.getResources();let n=this.messageBuilder.createResourcesMessage(e);Y.debug(`${n.MESSAGE_TYPE} (resources) message created -> `,n);let r=yield this.sendReqRep(n);return this.metaCache.setResources(r),r})}commitEvent(e,t,n){return J(this,void 0,void 0,function*(){let r=this.messageBuilder.createCommitMessage(e,t);Y.debug(`${r.MESSAGE_TYPE} (commit) message created -> `,r);let i=this.sendReqRep(r,n);return this.events.onCommitEvent(e,r),i.then(t=>(this.events.onCommitResponseEvent(e,t),Kg(t,r,n)))})}};q([C],ry.prototype,`isWorking`,void 0),ry=q([od(0,ty),od(1,Hg),od(2,lg),od(3,pae),od(4,Dg),od(5,Xg)],ry);let iy=e=>typeof e?.receivedMessage==`object`,ay=e=>e instanceof Error?e:iy(e)?new Sg(e.receivedMessage,e.sentMessage):Error(String(e)),oy=kf===`true`||Ef(`forceHttp`),sy=N.createInterface(e=>e.singleton(ry)),cy=N.createInterface(e=>oy?e.aliasTo(Rv):e.aliasTo(sy));function ly(){return N.getOrCreateDOMContainer().get(cy)}var uy=class{serialize(e){return Y.deprecated(`serialize`,"Use `serialize` from `JSONSerializer` from `@genesislcap/foundation-utils` instead."),JSON.stringify(e)}deserialize(e){return Y.deprecated(`deserialize`,"Use `deserialize` from `JSONSerializer` from `@genesislcap/foundation-utils` instead."),e?typeof e==`string`?JSON.parse(e):e.data?JSON.parse(e.data):e.text().then(e=>JSON.parse(e)):Promise.resolve({})}};N.createInterface(e=>e.singleton(uy));
243
+ `}start(e){this.stop(),this.runWorker(e)}stop(){this.worker&&(this.worker.terminate(),delete this.worker)}runWorker(e){this.worker||(this.worker=new Worker(URL.createObjectURL(new Blob([this.workerScript],{type:`text/javascript`}))),this.worker.onmessage=t=>e(t.data))}},Zv=class extends Im{constructor(){super()}},Qv=class{constructor(e,t,n,r){this._message=e,this._onMessage=t,this._onError=n,this._isSubscription=r}get sentMessage(){return this._message}get onReceivedMessage(){return this._onMessage}get onReceivedError(){return this._onError}get isSubscription(){return this._isSubscription}};let $v=e=>new Promise(t=>{e.addEventListener(`abort`,()=>t(void 0),{once:!0})}),ey=class{get isConfigured(){return this.status.isConfigured}get isConnecting(){return this.status.isConnecting}get isConnected(){return this.status.isConnected}get isConnectedSubject(){return this.status.isConnectedSubject}get isDisconnected(){return this.status.isDisconnected}get isDisconnectedByServer(){return this.status.isDisconnectedByServer}get isReconnecting(){return this.status.isReconnecting}get hasValidSession(){return Y.deprecated(`get hasValidSession`,"Use `User.isAuthenticated` from `@genesislcap/foundation-user` instead.",`15.0.0`),this.user.isAuthenticated}set hasValidSession(e){Y.deprecated(`set hasValidSession`,`Please refrain from calling this API as this state is managed internally.`,`15.0.0`)}get host(){return this.url??jf}get pendingConnection(){return this.reconnectOutcome??this.attempt}get onCurrentSession(){return this.attemptAuthChanges===this.authChanges}constructor(e,t,n,r,i,a,o){var s,c;this.messageBuilder=e,this.session=t,this.serializer=n,this.uuid=r,this.status=i,this.user=a,this.config=o,this.defaultInterval=1e4,this.secondsMultiplier=1e3,this.sessionCheckTimeout=1e4,this.scdbWasmRequested=!1,this.heartbeatIsEnabled=!0,this.heartbeatInterval=this.defaultInterval,this.authChanges=0,this.attemptAuthChanges=0,this.socketMessages=()=>this.wsMessages,(c=(s=this.user)?.addAuthenticationChangeListener)==null||c.call(s,()=>{this.authChanges+=1})}get scdbDecoder(){return this._scdbDecoder??(this._scdbDecoder=new m_(this.metaCache)),this._scdbDecoder}get heartbeatLoggingIsEnabled(){return this.connectOptions?.enableHeartbeatLogging??!1}get messageLoggingIsEnabled(){return this.connectOptions?.enableMessageLogging??!1}connect(e=jf,t,n){if(this.url=e,this.connectOptions=t??this.config.connect,this.reconnectOptions=n??this.config.reconnect,this.connectOptions?.dataserverEncoding===`SCDB_V1`&&this.ensureScdbWasm(),!this.config.isWebSocketExpression?.test(this.host)){Y.error(`Specified host (${this.host}) is not valid WebSocket url. Connection will not proceed.`),Y.warn(`Make sure the host url starts with wss:// or ws://`);return}this.attemptAuthChanges=this.authChanges;let r=!!this.websocket&&this.isConnected,i=new Promise(e=>{var t;Y.info(`${this.isReconnecting?`Reconnecting`:`Connecting`} to ${this.url}`),this.status.isConnecting=!this.isReconnecting,this.rejectPendingRequests(),(!this.isReconnecting||!this.reconnectOptions?.reconnectStreams)&&this.cleanMessages(),(t=this.socketSubscription)==null||t.unsubscribe();let n=new Vv({url:this.url,openObserver:{next:()=>{this.session.setSessionStorageItem(`hostUrl`,this.url),this.status.isConnected=!0,this.prepareHeartbeat(),Y.info(`WebSocket connection is now open`),e(this.isConnected)}},closeObserver:{next:t=>{if(this.websocket!==n){e(this.connection??!1);return}this.status.onClose(t),this.status.isConnecting=!1,this.rejectPendingRequests(new Cg(`WebSocket connection closed before a reply arrived`,{closeCode:t?.code,closeReason:t?.reason})),this.isDisconnectedByServer&&Y.info(`WebSocket connection was closed due an error - Code: ${t.code} ${t.reason?` | Reason: `+t.reason:``}`),e(this.isConnected)}},serializer:e=>this.serializer.serialize(e),deserializer:e=>this.serializer.deserialize(e)});this.websocket=n;let r=e=>J(this,void 0,void 0,function*(){bg(e);let t=`Response Message received for SourceRef: ${e.SOURCE_REF} | MessageType: ${e.MESSAGE_TYPE}`;this.logMessageTypeFlow(e.MESSAGE_TYPE,Y.info,t);let{SOURCE_REF:n,MESSAGE_TYPE:r}=e,i=this.getMessageHandler(n,r);if(!i){e.MESSAGE_TYPE===Fg.MSG_NACK&&e.ERROR&&e.ERROR.forEach(t=>{Y.error(hg(`MessageType: ${e.MESSAGE_TYPE} | Error Details:`,t),t)});return}let a=Ug(e);switch(e.MESSAGE_TYPE){case Ig.EVENT_LOGIN_AUTH_ACK:this.applyServerHeartbeatInterval(e.DETAILS);break;case Fg.LOGOUT_ACK:i.onReceivedMessage.call(this,e),this.cleanMessages();return;case Fg.LOGON_ACK:this.scdbDecoder.onLogonAck(e,p_(i.sentMessage));return;case Fg.LOGOFF_ACK:break;case Fg.QUERY_UPDATE:i.isSubscription||this.sendDataLogoff(n)}e?.ENCODING===`SCDB_V1`&&this.ensureScdbWasm();try{this.scdbDecoder.onMessage(e,p_(i.sentMessage))}catch(e){Y.error(`Failed to decode ${r} for SourceRef: ${n}`,e);let t={SOURCE_REF:n,MESSAGE_TYPE:Fg.MSG_NACK,ERROR:[{CODE:`SCDB_DECODE_FAILED`,TEXT:String(e?.message??e)}]};i.onReceivedError.call(this,new Sg(t,i.sentMessage)),this.removeMessageHandler(n),this.wsMessages.next(t);return}a?i.onReceivedError.call(this,new Sg(e,i.sentMessage)):i.onReceivedMessage.call(this,e),this.wsMessages.next(e),i.isSubscription||this.removeMessageHandler(n)}),i=e=>{Y.debug(`Error found: `,e),this.reconnect()},a=()=>{if(this.isDisconnectedByServer&&this.connectOptions?.alwaysOn){this.reconnect();return}Y.info(`Connection is now closed`)};this.socketSubscription=this.websocket.subscribe(this.connectOptions?.connectObserver??{next:r,error:i,complete:a}),this.status.isConfigured=!0});return this.connection=i,this.attempt=i,i.then(()=>{this.attempt===i&&(this.attempt=void 0)}),r&&(this.status.isConnected=!1),i}handleExpiredSession(){return J(this,void 0,void 0,function*(){if(this.usesCookieAuth)yield this.handleCookieBasedReauth();else{let e=this.messageBuilder.createRefreshTokenMessage(),t=yield this.send(e);this.session.setAuthResult(t),this.updateSessionAndSubscriptions(t)}})}get usesCookieAuth(){return!this.session.getSessionStorageItem(`refreshToken`)}handleCookieBasedReauth(){return J(this,void 0,void 0,function*(){let e=yield Av();if(e===Cv.HANDLED_BY_OTHER_TAB){jv(()=>this.connect(this.url,this.connectOptions,this.reconnectOptions));return}e!==Cv.FAILED&&(yield this.connect(this.url,this.connectOptions,this.reconnectOptions))})}updateSessionAndSubscriptions(e){e?.MESSAGE_TYPE===Ig.EVENT_LOGIN_AUTH_ACK&&this.wsMessageHandlers.forEach(t=>{t.isSubscription&&(t.sentMessage.SESSION_AUTH_TOKEN=e.SESSION_AUTH_TOKEN,this.websocket.next(t.sentMessage))})}applyServerHeartbeatInterval(e){let t=e?.HEARTBEAT_INTERVAL_SECONDS??0;t>0&&this.connectOptions?.heartbeatInterval===void 0&&(this.heartbeatInterval=t*this.secondsMultiplier,this.prepareHeartbeat())}prepareHeartbeat(){this.heartbeatTicker&&this.heartbeatTicker.stop();let e=this.connectOptions?.heartbeatInterval??this.heartbeatInterval,t=()=>J(this,void 0,void 0,function*(){if(!this.isConnected)return;let t=this.messageBuilder.createHeartbeatPingMessage(this.connectOptions?.verboseHeartbeat);this.connectOptions?.heartbeatPingCallback&&this.connectOptions.heartbeatPingCallback(t);let n;try{n=yield this.send(t,!0,{timeout:e})}catch(e){Y.debug(`Heartbeat ping got no pong: `,e);return}this.user.isAuthenticated&&!n.IS_AUTHENTICATED&&this.handleExpiredSession().catch(e=>Y.debug(`Could not refresh the expired session: `,e)),this.connectOptions?.heartbeatPongCallback&&this.connectOptions.heartbeatPongCallback(n),this.heartbeatIsEnabled=n.MESSAGE_TYPE===Fg.HEARTBEAT_PONG&&n.SOURCE_REF===t.SOURCE_REF});(this.connectOptions?.enableHeartbeat??this.heartbeatIsEnabled)&&(this.heartbeatTicker=new Xv(e),this.heartbeatTicker.start(()=>{this.websocket&&this.isConnected&&(t(),this.heartbeatLoggingIsEnabled&&Y.debug(`Sending a heartbeat ping every ${e} ms`))}))}reconnect(){let e=!this.connectOptions?.alwaysOn&&this.connectOptions?.enableHeartbeat===!1;if(this.isReconnecting||e)return;this.status.isReconnecting=!0;let t=this.reconnectOptions?.reconnectStrategy===Wv.Exponential?Kv:qv,n,r=new Promise(e=>{n=e});this.reconnectOutcome=r;let i=!1,a=this.isConnectedSubject.asObservable().pipe(Ah(e=>e?_h(-1):Gv(this.reconnectOptions,t).pipe(Eh((e,t)=>{let n=this.connectOptions?.alwaysOn?t+1:this.reconnectOptions?.reconnectAttempts??10;return t>=n?(this.status.reconnectionLimitReached=!0,i=!0,vh(()=>/* @__PURE__ */ Error(`Max reconnect attempts ${n} reached.`))):e>0&&this.user.isAuthenticated&&this.usesCookieAuth?gh(this.refreshSessionBeforeReconnect()).pipe(bh(()=>t)):_h(t)}))),jh(()=>this.websocket&&!this.isConnected),Dh(()=>{this.reconnectOutcome===r&&(this.reconnectOutcome=void 0),n(this.isConnected),i&&this.notifyReconnectionLimitReached()}));this.reconnectLoop=a.subscribe(this.reconnectOptions?.reconnectObserver??{next:e=>{Y.debug(`Attempt no. ${e+1} to reconnect`),this.websocket.complete(),this.connect(this.url,this.connectOptions,this.reconnectOptions)},error:e=>{var t;Y.debug(e),(t=this.socketSubscription)==null||t.unsubscribe(),this.status.isReconnecting=!1},complete:()=>{Y.info(this.isConnected?`Reconnected`:`Disconnected`),this.status.isReconnecting=!1,this.wsMessageHandlers.forEach(e=>{e.isSubscription&&this.websocket.next(e.sentMessage)})}})}notifyReconnectionLimitReached(){Promise.resolve().then(()=>{var e;return((e=this.reconnectOptions)?.onReconnectionLimitReached)?.call(e)}).catch(e=>Y.error(`onReconnectionLimitReached failed: `,e))}refreshSessionBeforeReconnect(){return J(this,void 0,void 0,function*(){let e=AbortSignal.timeout(this.sessionCheckTimeout),t=yield Promise.race([Av({reloadOnFailure:!1,signal:e}),$v(e)]).catch(e=>{Y.debug(`Could not check the session before reconnecting: `,e)});if(t===Cv.FAILED)throw this.reloadPage(),Error(`Session expired and could not be refreshed.`);t===Cv.HANDLED_BY_OTHER_TAB&&(yield Mv(e))})}reloadPage(){window.location.reload()}reset(){var e,t;this.status.isConnected=!1,this.status.isConfigured=!1,this.status.isReconnecting=!1,(e=this.reconnectLoop)==null||e.unsubscribe(),(t=this.socketSubscription)==null||t.unsubscribe(),this.websocket&&this.websocket.complete(),this.websocket=null,this.attempt=void 0,this.connection=void 0,this.cleanMessages()}cleanMessages(){this.rejectPendingRequests(),this.wsMessages&&this.wsMessages.complete(),this.wsMessages=new Zv,this.wsMessageHandlers=/* @__PURE__ */ new Map,this.scdbDecoder.clear()}rejectPendingRequests(e=new Cg(`WebSocket connection closed before a reply arrived`)){var t;(t=this.wsMessageHandlers)==null||t.forEach((t,n)=>{t.isSubscription||(this.wsMessageHandlers.delete(n),t.onReceivedError.call(this,e))})}send(e,t=!0,n){let r=Gg(n?.signal);if(r)return r;if(!this.isConnected)return Promise.reject(new Cg(`WebSocket connection is closed`));let i=`Sending Message for SourceRef: ${e.SOURCE_REF} | MessageType: ${e.MESSAGE_TYPE}`;this.logMessageTypeFlow(e.MESSAGE_TYPE,Y.info,i),this.scdbDecoder.prepareRequest(e);let a=new Promise((n,r)=>{t&&this.setMessageHandler(e,n,r),this.websocket.next(e)});return t?Wg(a,{timeout:n?.timeout??this.connectOptions?.requestTimeout,signal:n?.signal},()=>this.removeMessageHandler(e.SOURCE_REF)):a}sendForStream(e,t,n,r){if(!this.isConnected)return vh(()=>new Cg(`WebSocket connection is closed`));let i=`Sending Message (stream) for SourceRef: ${e.SOURCE_REF} | MessageType: ${e.MESSAGE_TYPE}`;this.logMessageTypeFlow(e.MESSAGE_TYPE,Y.info,i),this.scdbDecoder.prepareRequest(e),this.setMessageHandler(e,t,n,!0);let a=!1,o=!1;return x.queueUpdate(()=>{o||(a=!0,this.websocket.next(e))}),new km(t=>{let n=this.wsMessages.pipe(Th(t=>t.SOURCE_REF===e.SOURCE_REF)).subscribe({next:e=>{t.next(e)},error:e=>{t.error(e)},complete:()=>{t.complete()}});return()=>{o=!0,n.unsubscribe(),a&&this.sendDataLogoff(e.SOURCE_REF),this.removeMessageHandler(e.SOURCE_REF),r&&r()}})}sendForStreamWithoutTeardown(e,t,n){if(!this.isConnected)return vh(()=>new Cg(`WebSocket connection is closed`));let r=`Sending Message (stream) for SourceRef: ${e.SOURCE_REF} | MessageType: ${e.MESSAGE_TYPE}`;return this.logMessageTypeFlow(e.MESSAGE_TYPE,Y.info,r),this.scdbDecoder.prepareRequest(e),this.setMessageHandler(e,t,n,!0),this.websocket.next(e),this.wsMessages.pipe(Th(t=>t.SOURCE_REF===e.SOURCE_REF))}setMessageHandler(e,t,n,r=!1){let i=`Setting Message Handler for SourceRef: ${e.SOURCE_REF} | MessageType: ${e.MESSAGE_TYPE}`;this.logMessageTypeFlow(e.MESSAGE_TYPE,Y.debug,i),this.wsMessageHandlers.set(e.SOURCE_REF,new Qv(e,t,n,r))}sendDataLogoff(e){this.send(this.messageBuilder.createDataLogoffMessage(e),!1).catch(t=>Y.debug(`DATA_LOGOFF not sent for SourceRef: ${e}`,t))}removeMessageHandler(e){this.wsMessageHandlers.delete(e)}setScdbMetadataRefresher(e){this.scdbDecoder.setMetadataRefresher(e)}ensureScdbWasm(){this.scdbWasmRequested||(this.scdbWasmRequested=!0,Lae().then(e=>this.scdbDecoder.setWasm(e)).catch(e=>Y.warn(`SCDB WASM decoder unavailable, using pure-JS decoder`,e)))}getMessageHandler(e,t){let n=`Getting Message Handler for SourceRef: ${e} | MessageType: ${t}`;return this.logMessageTypeFlow(t,Y.debug,n),this.wsMessageHandlers.get(e)}logMessageTypeFlow(e,t,n){switch(e){case Ig.DATA_LOGOFF:t(n);break;case Fg.HEARTBEAT_PING:case Fg.HEARTBEAT_PONG:this.heartbeatLoggingIsEnabled&&t(n);break;default:this.messageLoggingIsEnabled&&t(n)}}};q([C],ey.prototype,`websocket`,void 0),q([C],ey.prototype,`wsMessages`,void 0),q([C],ey.prototype,`wsMessageHandlers`,void 0),q([Mg],ey.prototype,`http`,void 0),q([lg],ey.prototype,`metaCache`,void 0),q([C],ey.prototype,`heartbeatIsEnabled`,void 0),ey=q([od(0,Hg),od(1,Og),od(2,om),od(3,ig),od(4,Yv),od(5,cg),od(6,Dg)],ey);let ty=N.createInterface(e=>e.singleton(ey));function ny(){return N.getOrCreateDOMContainer().get(ty)}let ry=class{get isConnected(){return this.socket.isConnected}get isConnectedSubject(){return this.socket.isConnectedSubject}get isConnected$(){return this.socket.isConnectedSubject?.asObservable()}get host(){return this.socket.host}constructor(e,t,n,r,i,a){var o,s;this.socket=e,this.messageBuilder=t,this.metaCache=n,this.events=r,this.config=i,this.transport=a,this.isWorking=!1,this.inFlightMetadata=new qg,this.inFlightRequests=new qg;let c=this.config.connect?.dataserverEncoding;c&&(this.messageBuilder.scdbEncoding=c),this.httpScdbDecoder=new m_(this.metaCache);let l=e=>this.getMetadata(e,!1);(s=(o=this.socket).setScdbMetadataRefresher)==null||s.call(o,l),this.httpScdbDecoder.setMetadataRefresher(l)}httpMode(){return!1}get useHttpReqRep(){return Af===`true`||Ef(`forceHttpReqRep`)}get httpHost(){return this.transport.toHttpHost(this.socket.host)}requestOverHttp(e,t){return J(this,void 0,void 0,function*(){let n=p_(e);this.httpScdbDecoder.prepareRequest(e);let r=yield this.transport.requestServer(this.httpHost,e,t);return this.httpScdbDecoder.onMessage(r,n),r})}sendReqRep(e,t){return this.useHttpReqRep?this.transport.post(this.httpHost,e,t):this.socket.send(e,!0,t)}setValidSession(e){Y.deprecated(`setValidSession`,`Please refrain from calling this API as this state is managed internally.`,`15.0.0`)}send(e,t,n){return this.socket.send(e,t,n)}connect(){return J(this,arguments,void 0,function*(e=jf){if(this.socket.host===e&&this.socket.onCurrentSession!==!1){if(this.isConnected)return!0;let e=this.socket.pendingConnection;if(e)return e}return this.socket.reset(),this.socket.connect(e,this.config.connect,this.config.reconnect)})}disconnect(){this.socket.reset()}snapshot(e,t){return J(this,void 0,void 0,function*(){let n=this.messageBuilder.createDataLogonMessage(e,t);return Y.debug(`${n.MESSAGE_TYPE} (snapshot) message created -> `,n),this.socket.send(n)})}stream(e,t,n,r){let i=this.messageBuilder.createDataLogonMessage(e,r);Y.debug(`${i.MESSAGE_TYPE} (stream) message created -> `,i);let a=performance.now(),o=null,s=this.socket.sendForStream(i,(...n)=>{o===null&&(o=performance.now(),Y.debug(`[stream:${e}] time to initial response: ${(o-a).toFixed(2)}ms`)),t(...n)},t=>{n(t),this.events.onStreamErrorEvent(e,s,t)},()=>{this.events.onStreamCompleteEvent(e,s)});return this.events.onStreamEvent(e,i,s,{onMessage:t,onError:n}),s}streamState(e,t=()=>{},n=()=>{},r,i=[]){return this.stream(e,t,n,r).pipe(Oh(Nv,i))}streamWithoutAutoTeardown(e,t,n,r){Y.deprecated(`streamWithoutAutoTeardown`,`Please use 'stream' api instead.`,`15.0.0`);let i=this.messageBuilder.createDataLogonMessage(e,r);Y.debug(`${i.MESSAGE_TYPE} (stream without auto-teardown) message created -> `,i);let a=this.socket.sendForStreamWithoutTeardown(i,t,t=>{n(t),this.events.onStreamErrorEvent(e,a,t)});return this.events.onStreamEvent(e,i,a,{onMessage:t,onError:n}),a}getMoreRows(e,t){return J(this,void 0,void 0,function*(){let n=this.messageBuilder.createMoreRowsMessage(e,t);return Y.debug(`${n.MESSAGE_TYPE} message created -> `,n),this.socket.send(n,!1)})}getMoreColumns(e){return J(this,void 0,void 0,function*(){let t=this.messageBuilder.createMoreColumnsMessage(e);return this.socket.send(t)})}dataLogoff(e){return J(this,void 0,void 0,function*(){let t=this.messageBuilder.createDataLogoffMessage(e);return Y.debug(`${t.MESSAGE_TYPE} message created -> `,t),this.socket.send(t)})}getMetadata(e){return J(this,arguments,void 0,function*(e,t=!0,n){return t&&this.metaCache.hasMetadataFor(e)?(Y.debug(`Cached metadata retrieved for ${e}`),this.metaCache.getMetadataFor(e)):(this.inFlightMetadata.has(e)&&Y.debug(`In-flight metadata request collapsed for ${e}`),this.inFlightMetadata.join(e,t=>this.fetchMetadata(e,t),this.callerOptions(n)))})}fetchMetadata(e,t){return J(this,void 0,void 0,function*(){let n=this.messageBuilder.createMetaRequestMessage(e);Y.debug(`${n.MESSAGE_TYPE} (metadata) message created -> `,n);let r,i;try{this.isWorking=!0,r=(yield this.sendReqRep(n,{timeout:0,signal:t}))?.DETAILS??{},Object.keys(r).length&&this.metaCache.setMetadataFor(e,r)}catch(t){throw i=t,Y.error(hg(`Metadata request failed for ${e}`,t),t),ay(t)}finally{this.events.onMetadataEvent(e,n,i),this.isWorking=!1}return r})}getJSONSchema(e){return J(this,arguments,void 0,function*(e,t=!0){if(t&&this.metaCache.hasJsonSchemaFor(e))return Y.debug(`Cached JsonSchema retrieved for ${e}`),this.metaCache.getJsonSchemaFor(e);let n=this.messageBuilder.createMetaRequestMessage(e,Ig.JSON_SCHEMA_REQUEST);Y.debug(`${n.MESSAGE_TYPE} (json schema) message created -> `,n);let r;try{this.isWorking=!0,r=(yield this.sendReqRep(n))??{},Object.keys(r).length&&this.metaCache.setJsonSchemaFor(e,r)}catch(t){Y.error(hg(`JSON schema request failed for ${e}`,t),t)}finally{this.isWorking=!1}return r})}callerOptions(e){let t=this.useHttpReqRep?void 0:this.config.connect?.requestTimeout;return{timeout:e?.timeout??t,signal:e?.signal}}request(e,t){return J(this,arguments,void 0,function*(e,t,n=!1,r){let i=zg(e,t);if(n&&this.metaCache.hasRequestFor(i))return Y.debug(`Cached request response retrieved for ${i}`),this.metaCache.getRequestFor(i);this.inFlightRequests.has(i)&&Y.debug(`In-flight request collapsed for ${i}`);let a=yield this.inFlightRequests.join(i,n=>this.sendRequest(e,t,n),this.callerOptions(r));return n&&a&&this.metaCache.setRequestFor(i,a),a})}sendRequest(e,t,n){let r=this.messageBuilder.createRequestMessage(e,t);Y.debug(`${r.MESSAGE_TYPE} (request server) message created -> `,r);let i={timeout:0,signal:n};return this.useHttpReqRep?this.requestOverHttp(r,i):this.socket.send(r,!0,i)}getAvailableResources(e){return J(this,arguments,void 0,function*(e,t=!0){if(t&&this.metaCache.hasResources())return Y.debug(`Cached resources retrieved`),this.metaCache.getResources();let n=this.messageBuilder.createResourcesMessage(e);Y.debug(`${n.MESSAGE_TYPE} (resources) message created -> `,n);let r=yield this.sendReqRep(n);return this.metaCache.setResources(r),r})}commitEvent(e,t,n){return J(this,void 0,void 0,function*(){let r=this.messageBuilder.createCommitMessage(e,t);Y.debug(`${r.MESSAGE_TYPE} (commit) message created -> `,r);let i=this.sendReqRep(r,n);return this.events.onCommitEvent(e,r),i.then(t=>(this.events.onCommitResponseEvent(e,t),Kg(t,r,n)))})}};q([C],ry.prototype,`isWorking`,void 0),ry=q([od(0,ty),od(1,Hg),od(2,lg),od(3,pae),od(4,Dg),od(5,Xg)],ry);let iy=e=>typeof e?.receivedMessage==`object`,ay=e=>e instanceof Error?e:iy(e)?new Sg(e.receivedMessage,e.sentMessage):Error(String(e)),oy=kf===`true`||Ef(`forceHttp`),sy=N.createInterface(e=>e.singleton(ry)),cy=N.createInterface(e=>oy?e.aliasTo(Rv):e.aliasTo(sy));function ly(){return N.getOrCreateDOMContainer().get(cy)}var uy=class{serialize(e){return Y.deprecated(`serialize`,"Use `serialize` from `JSONSerializer` from `@genesislcap/foundation-utils` instead."),JSON.stringify(e)}deserialize(e){return Y.deprecated(`deserialize`,"Use `deserialize` from `JSONSerializer` from `@genesislcap/foundation-utils` instead."),e?typeof e==`string`?JSON.parse(e):e.data?JSON.parse(e.data):e.text().then(e=>JSON.parse(e)):Promise.resolve({})}};N.createInterface(e=>e.singleton(uy));
244
244
  /*! js-cookie v3.0.7 | MIT */
245
245
  function dy(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)r!==`__proto__`&&(e[r]=n[r])}return e}var fy={read:function(e){return e[0]===`"`&&(e=e.slice(1,-1)),e.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(e){return encodeURIComponent(e).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}};function py(e,t){function n(n,r,i){if(typeof document<`u`){i=dy({},t,i),typeof i.expires==`number`&&(i.expires=new Date(Date.now()+i.expires*864e5)),i.expires&&(i.expires=i.expires.toUTCString()),n=encodeURIComponent(n).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var a=``;for(var o in i)i[o]&&(a+=`; `+o,i[o]!==!0&&(a+=`=`+i[o].split(`;`)[0]));return document.cookie=n+`=`+e.write(r,n)+a}}function r(t){if(!(typeof document>`u`||arguments.length&&!t)){for(var n=document.cookie?document.cookie.split(`; `):[],r={},i=0;i<n.length;i++){var a=n[i].split(`=`),o=a.slice(1).join(`=`);try{var s=decodeURIComponent(a[0]);if(s in r||(r[s]=e.read(o,s)),t===s)break}catch{}}return t?r[t]:r}}return Object.create({set:n,get:r,remove:function(e,t){n(e,``,dy({},t,{expires:-1}))},withAttributes:function(e){return py(this.converter,dy({},this.attributes,e))},withConverter:function(e){return py(dy({},this.converter,e),this.attributes)}},{attributes:{value:Object.freeze(t)},converter:{value:Object.freeze(e)}})}var my=py(fy,{path:`/`});let hy=N.createInterface();function gy(){return navigator!=null&&navigator.credentials?`PasswordCredential`in window||(Y.warn(`PasswordCredential not available in this browser.`),!1):(Y.warn(`CredentialsContainer not available in this browser.`),!1)}function _y(e=``,t=`:`,n){return e.split(t,n).map(e=>e.trim()).filter(e=>e!==``)}function vy(e,t=`:`){let n=typeof e==`string`&&e.trim();return n?n.includes(t):!1}function yy(e,t=`:`){return typeof e==`string`&&e.trim()?(e.match(new RegExp(t,`g`))||[]).length:0}function by(e,t=`:`){for(let n of e)if(vy(n,t))return n;return e.find(e=>typeof e==`string`&&e.trim()!==``)}function xy(e,t,n){let r=typeof e==`string`&&e.trim();return!r||n&&!r.includes(n)||yy(r)>1?n&&t&&n!==t?`${t}:${n}`:t||n:r}function Sy(e=`credential`){Y.warn(`Unable to migrate legacy ${e} to latest format. Please remove from your browser.`)}let Cy={password:!0,mediation:`optional`},wy={cookie:{path:`/`,name:`credentials`,expires:7300,storePasswords:!1}},Ty=class{constructor(e,t=wy){this.session=e,this.config=t}createBasicCredentials(e){return{type:Ng.BASIC,username:e.username,password:e.password,mfaToken:this.getMFAToken()}}createRefreshCredentials(e){return{type:Ng.REFRESH,username:e?.username??this.getUsername(),refreshToken:e?.refreshToken??this.getRefreshToken(),mfaToken:e?.mfaToken??this.getMFAToken()}}createSSOCredentials(e){return{type:Ng.SSO,ssoToken:e?.ssoToken??this.getSSOToken()}}validateBasicCredentials(e){return e&&!!e.username&&!!e.password}validateRefreshCredentials(e){return e&&!!e.refreshToken&&!!e.username}validateSSOCredentials(e){return e&&!!e.ssoToken}validateUserCredentialData(e,t){let n=e&&!!e.id&&!!e.name&&!e.name.includes(`:`)&&yy(e.id)<=1;return t?n&&!!e.password:n}normaliseLegacyCredentialData(e,t){if(this.validateUserCredentialData(e,!0))return[e,!0];if(this.validateUserCredentialData(t))return[t,!1];if(e)try{let t=e,[n]=_y(t.name||t.id),[r,i]=_y(by([t.id,t.name]));return[{id:xy(t.id||t.name,n,i),name:n,password:t.password||``},!0]}catch{Sy(`PasswordCredential`)}if(t)try{let e=t,[n]=_y(e.name||e.username||e.organisation),[r,i]=_y(by([e.organisation||e.username||e.name]));return[{id:xy(e.id||e.username||e.name,n,i),name:n,password:e.password||``},!1]}catch{Sy(`cookie`)}return[void 0,!1]}storeCredentialsInContainer(e){return J(this,void 0,void 0,function*(){if(!gy())return;let t=new PasswordCredential(e);return Y.debug(`Storing credentials in CredentialsContainer`),navigator.credentials.store(t)})}getCredentialsFromContainer(){return J(this,arguments,void 0,function*(e=Cy){if(gy())return Y.debug(`Getting credentials from CredentialsContainer`),yield navigator.credentials.get(e)})}storeCredentialsInCookie(e){let{password:t}=e,n=ad(e,[`password`]),r=this.config.cookie.storePasswords?e:n;return Y.debug(`Storing credentials in cookie`),!!my.set(this.config.cookie.name,JSON.stringify(r),{expires:this.config.cookie.expires,domain:location.hostname,path:this.config.cookie.path,secure:!0})}getCredentialsFromCookie(){Y.debug(`Getting credentials from cookie`);let e=my.get(this.config.cookie.name);return e?JSON.parse(e):void 0}storeCredentials(e){return J(this,void 0,void 0,function*(){if(gy()){let t=yield this.storeCredentialsInContainer(e);return Promise.resolve(!!t)}return Promise.resolve(this.storeCredentialsInCookie(e))})}getCredentials(e){return J(this,void 0,void 0,function*(){return gy()?this.getCredentialsFromContainer(e):Promise.resolve(this.getCredentialsFromCookie())})}getSSOToken(){return this.session.getSessionStorageItem(`ssoToken`)}getUsername(){return this.session.getSessionStorageItem(`username`)||this.session.getLocalStorageItem(`username`)}getRefreshToken(){return this.session.getSessionStorageItem(`refreshToken`)||this.session.getLocalStorageItem(`refreshToken`)}getMFAToken(){return this.session.getSessionStorageItem(`mfaToken`)}removeCookie(){my.remove(this.config.cookie.name,{domain:location.hostname,path:this.config.cookie.path})}removeSSOToken(){this.session.removeSessionStorageItem(`ssoToken`)}removeUsername(){this.session.removeSessionStorageItem(`username`),this.session.removeLocalStorageItem(`username`)}removeRefreshToken(){this.session.removeSessionStorageItem(`refreshToken`),this.session.removeLocalStorageItem(`refreshToken`)}removeMFAToken(){this.session.removeSessionStorageItem(`mfaToken`)}removeAll(){this.removeCookie(),this.removeSSOToken(),this.removeUsername(),this.removeRefreshToken(),this.removeMFAToken()}preventSilentAccess(){return gy()&&navigator.credentials.preventSilentAccess()}};Ty=q([od(0,Og),od(1,Lt(hy))],Ty);let Ey=N.createInterface(e=>e.singleton(Ty)),Dy=e=>e?{date:e.DATE}:null,Oy=e=>e?e.map(e=>({name:e.NAME,version:e.VERSION})):[],ky=e=>Array.isArray(e)?e.map(e=>e??``):[],Ay=e=>{try{if(e?.MESSAGE_TYPE===`EVENT_LOGIN_AUTH_ACK`){let{DETAILS:t}=e,n=e.UPDATE_QUEUE_DETAILS;return{messageType:e.MESSAGE_TYPE,sourceRef:e.SOURCE_REF,userName:e.USER_NAME,updateQueue:n?.UPDATE_QUEUE,zeroMqProxyModeEnabled:n?.ZERO_MQ_PROXY_MODE_ENABLED,zeroMqProxyInboundPort:n?.ZERO_MQ_PROXY_INBOUND_PORT,zeroMqProxyOutboundPort:n?.ZERO_MQ_PROXY_OUTBOUND_PORT,userKVs:e.USER,details:t?{system:Dy(t.SYSTEM),heartbeatIntervalSecs:t.HEARTBEAT_INTERVAL_SECONDS,failedLoginAttempts:t.FAILED_LOGIN_ATTEMPTS,rejectedLoginAttempts:t.REJECTED_LOGIN_ATTEMPTS,lastLoginDatetime:t.LAST_LOGIN_DATE_TIME,daysToPasswordExpiry:t.DAYS_TO_PASSWORD_EXPIRY,product:Oy(t.PRODUCT)}:null,permission:ky(e.PERMISSION),profile:ky(e.PROFILE)}}throw Error(`No Entity mapping implementation for provided DTO`)}catch(e){throw Y.error(e),e}},jy=class{loggedUserResultChanged(){var e;(e=this.isLoggedInSubject)==null||e.next(this.isLoggedIn)}get isLoggedIn$(){return this.isLoggedInSubject.asObservable()}get isLoggedIn(){return this.currentUser.isAuthenticated}constructor(e,t,n,r,i){this.session=e,this.connect=t,this.messageBuilder=n,this.credentialManager=r,this.currentUser=i,this.isWorking=!1,this.isLoggedInSubject=new Rm(this.isLoggedIn),this.currentUser.addAuthenticationChangeListener(e=>{var t;(t=this.isLoggedInSubject)==null||t.next(e.detail)})}login(e){return J(this,void 0,void 0,function*(){this.isWorking=!0;try{let t=this.messageBuilder.createLoginMessage(e),n=yield this.connect.send(t);if(!n||n.ERROR||n.DETAILS?.ERROR)throw new Pg(t,n);this.applyAuthResults({authToken:n.SESSION_AUTH_TOKEN,refreshToken:n.REFRESH_AUTH_TOKEN,profiles:n.PROFILE,username:n.USER_NAME,permissions:n.PERMISSION,sessionId:n.SESSION_ID}),this.currentUser.set(Ay(n)),this.session.setAuthResult(n),Y.debug(`Login Authentication Result:`,n)}catch(e){if(Y.error(hg(`Login Authentication Error:`,e?.received),e),e instanceof Pg&&e.isIgnorableError())Y.warn(`Ignoring authentication error as it is a known edge case.`);else throw this.removeAuthResults(),this.currentUser.unset(),e}finally{this.isWorking=!1}return this.loggedUserResult})}logout(){return J(this,void 0,void 0,function*(){this.isWorking=!0;let e={success:!1};try{let t=this.messageBuilder.createLogoutMessage(this.loggedUserResult);this.session.deleteUserFromSessionStorage();let{CODE:n,DETAILS:r,ERROR:i,MESSAGE_TYPE:a,OIDC_LOGOUT_URL:o}=yield this.connect.send(t),s=r?.ERROR??i,c=a===Fg.LOGOUT_NACK;c&&Y.warn(`Unexpected Logout NACK received during logout.`,s),e={success:a===Fg.LOGOUT_ACK||n===Lg.SESSION_NOT_FOUND||!c,error:s},o&&window.open(o,`_self`)}catch(t){let n=new Pg(t.sentMessage,t.receivedMessage);if(Y.error(hg(`Logout Authentication Error:`,n.received),n),n.isIgnorableError())Y.warn(`Ignoring authentication error as it is a known edge case.`),e.success=!0;else throw t}finally{this.removeAuthResults(),this.currentUser.unset(),this.isWorking=!1}return e})}reAuthFromSession(){return J(this,void 0,void 0,function*(){let e=yield this.ensureConnection(),t=this.credentialManager.createRefreshCredentials();if(e&&this.credentialManager.validateRefreshCredentials(t)){let e=this.messageBuilder.createRefreshTokenMessage(),t=yield this.connect.send(e);if(t?.MESSAGE_TYPE===Ig.EVENT_LOGIN_AUTH_ACK)return this.session.setAuthResult(t),this.currentUser.set(Ay(t)),this.applyAuthResults(this.getLoggedUserFromMessage(t)),!0}return this.session.deleteUserFromSessionStorage(),this.currentUser.unset(),!1})}ensureConnection(){return J(this,void 0,void 0,function*(){if(this.connect.isConnected)return!0;let e=this.session.getSessionStorageItem(`hostUrl`);return e?this.connect.connect(e):!1})}getLoggedUserFromMessage(e){let t=e.USER_NAME,n=e.SESSION_AUTH_TOKEN,r=e.REFRESH_AUTH_TOKEN;return!t||!n||!r?null:{username:t,authToken:n,refreshToken:r,profiles:e.PROFILE,permissions:e.PERMISSION,sessionId:e.SESSION_ID}}applyAuthResults(e){if(!e){this.removeAuthResults();return}this.loggedUserResult={authToken:e.authToken,refreshToken:e.refreshToken,profiles:e.profiles,username:e.username,permissions:e.permissions,sessionId:e.sessionId}}removeAuthResults(){this.loggedUserResult=null}};q([C],jy.prototype,`isWorking`,void 0),q([C],jy.prototype,`loggedUserResult`,void 0),jy=q([od(0,Og),od(1,cy),od(2,Hg),od(3,Ey),od(4,cg)],jy);let My=N.createInterface(e=>e.singleton(jy));function Ny(e,t){let n=new Date(e),r=n.getUTCFullYear(),i=String(n.getUTCMonth()+1).padStart(2,`0`),a=String(n.getUTCDate()).padStart(2,`0`);return t?`${r}${i}${a}`:`${r}${i}${a}-${String(n.getUTCHours()).padStart(2,`0`)}:${String(n.getUTCMinutes()).padStart(2,`0`)}`}let Py={n:`
246
246
  `,r:`\r`,t:` `,b:`\b`,f:`\f`};function Fy(e){let t=e.trim(),n=/^(['"])([\s\S]*)\1$/.exec(t);return n?n[2].replace(/\\([\s\S])/g,(e,t)=>Py[t]??t):t}function Iy(e,t){let n=e.match(/Expr\.(\w+)\(/);if(n)switch(n[1]){case`dateIsToday`:{let n=e.match(/Expr\.dateIsToday\((\w+)\)/);if(n){let[,e]=n,r=/* @__PURE__ */ new Date;t[`${e}_FROM`]=`${r.toISOString().replace(/-/g,``).split(`T`)[0]}-00:00`,r.setDate(r.getDate()+1),t[`${e}_TO`]=`${r.toISOString().replace(/-/g,``).split(`T`)[0]}-00:00`}break}case`dateTimeIsGreaterEqual`:{let n=e.match(/Expr\.dateTimeIsGreaterEqual\((\w+), ?(['"].+['"])\)/);if(n){let[,e,r]=n;t[`${e}_FROM`]=Fy(r)}break}case`dateTimeIsLessEqual`:{let n=e.match(/Expr\.dateTimeIsLessEqual\((\w+), ?(['"].+['"])\)/);if(n){let[,e,r]=n;t[`${e}_TO`]=Fy(r)}break}case`dateIsGreaterEqual`:{let n=e.match(/Expr\.dateIsGreaterEqual\((\w+), ?(['"].+['"])\)/);if(n){let[,e,r]=n;t[`${e}_FROM`]=Fy(r)}break}case`dateIsLessEqual`:{let n=e.match(/Expr\.dateIsLessEqual\((\w+), ?(['"].+['"])\)/);if(n){let[,e,r]=n;t[`${e}_TO`]=Fy(r)}break}case`containsIgnoreCase`:{let n=e.match(/Expr\.containsIgnoreCase\((\w+), ?(['"].+['"])\)/);if(n){let[,e,r]=n;t[e]=`*${Fy(r)}*`}break}}}function Ly(e,t){let n=e.indexOf(`=`),r=e.substr(0,n).trim().replace(/["']/g,``);t[r]=Fy(e.slice(n).replace(/^==?/,``))}function Ry(e){if(!e)return{};let t=e.split(`&&`).map(e=>e.trim()),n={};return t.forEach(e=>{if(e){if(e.startsWith(`Expr`))Iy(e,n);else if(/[A-Z_]+\s*(>=|<=)\s*\d+/.test(e)){let t=e.match(/([A-Z_]+)\s*>=\s*(\d+)/);if(t){let[,e,r]=t,i=parseInt(r,10),a=e.toUpperCase(),o=a.includes(`DATE`)&&!a.includes(`DATETIME`);n[`${e}_FROM`]=Ny(i,o)}let r=e.match(/([A-Z_]+)\s*<=\s*(\d+)/);if(r){let[,e,t]=r,i=parseInt(t,10),a=e.toUpperCase(),o=a.includes(`DATE`)&&!a.includes(`DATETIME`);n[`${e}_TO`]=Ny(i,o)}}else Ly(e,n)}}),n}function zy(e,t=`ROW_REF`){let n=e=>{let n=e.DETAILS[t]??e[t],r=Object.assign(Object.assign({},e),{[t]:n});return delete r.DETAILS,r},r=[],i=[],a=[];for(let t of e.ROW)if(t.DETAILS)switch(t.DETAILS.OPERATION){case`INSERT`:r.push(n(t));break;case`MODIFY`:a.push(n(t));break;case`DELETE`:i.push(n(t));break;default:Y.error(`Unsupported operation type: '${t.DETAILS.OPERATION}'`)}return{inserts:r,deletes:i,updates:a,SOURCE_REF:e.SOURCE_REF}}var By=class{};By.MAX_ROWS_250=250,By.MAX_VIEW_1000=1e3,By.REQ_REP_POLLING_INTERVAL_MS=1e4,By.DATASERVER_ROW_ID=`ROW_REF`,By.REQUEST_SERVER_ROW_ID=`RECORD_ID`,By.DEFAULT_PAGINATION_PAGE_SIZE=25,By.DEFAULT_REQ_REP_OFFSET=0;let Vy={options:{criteria:``,isSnapshot:!1,maxRows:By.MAX_ROWS_250,maxView:By.MAX_VIEW_1000,pollingInterval:By.REQ_REP_POLLING_INTERVAL_MS,movingView:!1,orderBy:``,resourceName:``,reverse:!1,pollTriggerEvents:[]},criteriaToFields:Ry,dataServerResultFilter:zy},Hy=N.createInterface(e=>e.instance(Vy));function Uy(e){let t=e==null?NaN:Number(e);return Number.isFinite(t)?t===0?1/0:t:By.MAX_VIEW_1000}function Wy(e){return e.moreRows===!1?`end`:e.rowsHeld>=Uy(e.maxView)?e.movingView?`more`:`view-full`:e.emptyReply?`stalled`:`more`}function Gy(e){let t=Uy(e.maxView),n=Ky(e.maxView)?`${t}, the server default`:`${t}`,r=e.totalRows;if(e.status===`stalled`)return`${e.resourceName} stopped at ${e.rowsHeld} rows: the server answered MORE_ROWS with an empty page while still reporting more rows, with room left in the view (MAX_VIEW ${n}). This is not the MAX_VIEW cap; check the data server log for "Problem building client message".`;if(!e.emptyReply&&r!==void 0&&r<=e.rowsHeld)return;let i=r!==void 0&&r>e.rowsHeld,a=i?` of ${r}`:``,o=e.emptyReply||i?` and the server holds more rows past it`:`, so any rows past it are not loaded`;return`${e.resourceName} stopped at ${e.rowsHeld}${a} rows: the DATASERVER view is full at MAX_VIEW (${n})${o}. Raise ${e.attribute} past the row count to reach the rest.`}function Ky(e){return e==null||!Number.isFinite(Number(e))}let qy=e=>{class t extends e{constructor(){super(),this.hasOwnProperty(`onDatasourceStatusChanged`)||(this.onDatasourceStatusChanged=e=>{let t=this.data!==void 0;!this.resourceName&&!t&&Y.warn(`Target classes must have a resourceName or data property to use the DatasourceEventHandler mixin.`);let n=e.detail;if(n.name===this.resourceName){let e=this.datasourceStatus??{isInitialized:!1,hasMetadata:!1};(e.isInitialized!==n.isInitialized||n.metadataRequired&&e.hasMetadata!==n.hasMetadata)&&(this.datasourceStatus=n)}})}datasourceStatusChanged(e,t){Y.debug(`Target classes should override the datasourceStatusChanged method of the DatasourceEventHandler mixin to respond to changes in the target datasource.`)}connectedCallback(){super.connectedCallback(),document.addEventListener(fg,this.onDatasourceStatusChanged,{passive:!0,capture:!0})}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener(fg,this.onDatasourceStatusChanged,{capture:!0})}}return q([C],t.prototype,`datasourceStatus`,void 0),t},Jy={throwWhenUnavailable:!0,throwWhenUnknown:!1},Yy=N.createInterface(e=>e.instance(Jy)),Xy=Rd(`genesis-resources`);function Zy(){return N.getOrCreateDOMContainer().get(Xy)}let Qy=class{constructor(e,t){this.connect=e,this.config=t}isValidResource(e){return J(this,void 0,void 0,function*(){return e=e?.trim(),e?(yield this.fetchResources(),!!this.resources.find(t=>t.RESOURCE_NAME===e)):!1})}getResourceTypeFor(e){return J(this,void 0,void 0,function*(){yield this.fetchResources();let t=this.resources.find(t=>t.RESOURCE_NAME===e);if(t)return t.RESOURCE_TYPE;let n=`${e} resource does not exist.`;if(Y.error(n),this.config.throwWhenUnknown)throw Error(n)})}getAllResources(){return J(this,void 0,void 0,function*(){return this.resources||(yield this.fetchResources()),this.resources})}destroy(){this.resources=void 0,this.resourcesPromise=void 0}fetchResources(){return J(this,void 0,void 0,function*(){if(this.resources)return Promise.resolve();if(this.resourcesPromise)yield this.resourcesPromise;else{this.resourcesPromise=this.connect.getAvailableResources();let e=yield this.resourcesPromise;if(this.resources=e?.RESOURCES,!this.resources?.length){let e=`Genesis resources unavailable.`;if(Y.error(e),this.config.throwWhenUnavailable)throw Error(e)}this.postLoadedMessage(),this.resourcesPromise=void 0}})}postLoadedMessage(){let e=Zy();e.postMessage(`resources-loaded`,this.resources),e.close()}};Qy=q([od(0,cy),od(1,Yy)],Qy);let $y=N.createInterface(e=>e.singleton(Qy)),eb=class{get initialized(){return!!this.status?.isInitialized}constructor(e,t,n,r,i){this.connect=e,this.auth=t,this.resources=n,this.config=r,this.connectEvents=i,this.fetchMetadataRequired=!0,this.startStreamRequired=!0,this.originalFieldDef=[],this.fieldMetadata=[],this.requestFields=[],this.customRequestFields=[],this.availableIndexes=[],this.availableSortableFields=[],this.availableCriteriaFields=[],this.criteriaOnlyRequest=!1,this.loadMoreCount=0,this.readOnly=!0,this._allParams=null,this.generation=0,this.pollTrigger$=new Im}triggerPoll(){this.pollTrigger$.next()}validResourceName(e){return Y.deprecated(`Datasource.validResourceName`,"Use `GenesisResources.isValidResource` instead."),!(!e||!e.trim().length)}init(e){return J(this,arguments,void 0,function*(e,t=this.fetchMetadataRequired,n=this.startStreamRequired){let r=this.generation+=1,i=this.initialise(r,e,t,n).catch(t=>{if(r===this.generation)throw t;return Y.debug(`${e?.resourceName} datasource initialisation failed after it was superseded:`,t),this.interruptedInit(e?.resourceName)});return this.latestInit={generation:r,result:i},i})}initialise(e,t,n,r){return J(this,void 0,void 0,function*(){this.fetchMetadataRequired=n,this.options=Object.assign(Object.assign({},this.config.options),t),this.invalidateCache();let{resourceName:i}=this.options,a=()=>e!==this.generation,o=this.connect.isConnected||(yield this.connect.connect(this.connect.host));if(a())return this.interruptedInit(i);if(!o)return Y.error(`Unable to connect to ${this.connect.host} to get ${i} datasource`),this.reportStatus(),!1;let s=yield this.resources.isValidResource(i);if(a())return this.interruptedInit(i);if(!s)return Y.error(`${i} datasource does not exist on ${this.connect.host}`),this.reportStatus(),!1;let c=yield this.resources.getResourceTypeFor(i);if(a())return this.interruptedInit(i);if(this.resourceType=c,!this.resourceType)return Y.error(`Unable to get the resource type for ${i} datasource from ${this.connect.host}`),this.reportStatus(),!1;if(this.fetchMetadataRequired){if(yield this.fetchAndApplyMetadata(i),a())return this.interruptedInit(i);this._allParams=null}return Y.debug(`Initializing ${i} datasource from ${this.connect.host}`),!this.options.isSnapshot&&r&&(this.pollTrigger$=new Im,this.stream=this.createStream()),Y.debug(`${i} datasource initialization ${this.initialized?`was successful.`:`has failed.`}`),this.reportStatus(),this.initialized})}startStream(){return J(this,void 0,void 0,function*(){!this.options.isSnapshot&&this.stream===void 0&&(this.stream=this.createStream())})}destroy(){var e;Y.debug(`Datasource.destroy`,this.options?.resourceName),this.generation+=1,this.commitResponseUnsubscribe&&(this.commitResponseUnsubscribe(),this.commitResponseUnsubscribe=void 0),(e=this.pollTrigger$)==null||e.complete(),this.status=void 0,this.fetchMetadataRequired=!0,this.options={},this.resourceType=void 0,this.availableIndexes=[],this.availableSortableFields=[],this.availableCriteriaFields=[],this.originalFieldDef=[],this.fieldMetadata=[],this.requestFields=[],this.criteriaOnlyRequest=!1,this.loadMoreCount=0,this.stream=void 0}get allResourceParams(){if(this._allParams)return this._allParams;let e;if(this.options.orderBy){if(this.criteriaOnlyRequest||this.availableIndexes?.findIndex(e=>e.NAME===this.options.orderBy)>-1)e=this.options.orderBy;else{let e=this.availableIndexes.map(e=>e.NAME);Y.warn(`Specified [orderBy] index is not valid and will not be used. See https://learn.genesis.global/docs/database/data-types/index-entities/ - Available indexes:`,e)}}return this._allParams={CRITERIA_MATCH:this.options.criteria,MAX_ROWS:this.options.maxRows,ORDER_BY:e,VIEW_NUMBER:this.options.viewNumber,FIELDS:this.options.fields,MAX_VIEW:this.options.maxView,MOVING_VIEW:this.options.movingView,REVERSE:this.options.reverse,ENCODING:this.options.encoding,DISABLE_POLLING:this.options.disablePolling,OFFSET:this.options.offset,POLLING_INTERVAL:this.options.pollingInterval,REQUEST:this.options.request},Y.debug(`Getting configured params:`,this._allParams),this._allParams}get dataserverOnlyParams(){return{CRITERIA_MATCH:this.allResourceParams.CRITERIA_MATCH,MAX_ROWS:this.allResourceParams.MAX_ROWS,VIEW_NUMBER:this.allResourceParams.VIEW_NUMBER,FIELDS:this.allResourceParams.FIELDS,MAX_VIEW:this.allResourceParams.MAX_VIEW,MOVING_VIEW:this.allResourceParams.MOVING_VIEW,ORDER_BY:this.allResourceParams.ORDER_BY,REVERSE:this.allResourceParams.REVERSE,ENCODING:this.allResourceParams.ENCODING}}get requestOnlyParams(){let e=this.allResourceParams,{REQUEST:t}=e,n=ad(e,[`REQUEST`]);return{DETAILS:{CRITERIA_MATCH:this.options.requestAutoSetup?void 0:n.CRITERIA_MATCH,MAX_ROWS:n.MAX_ROWS,OFFSET:n.OFFSET,ORDER_BY:n.ORDER_BY,VIEW_NUMBER:n.VIEW_NUMBER,ENCODING:n.ENCODING},REQUEST:this.criteriaOnlyRequest?{}:t??this.buildRequestFields()}}buildRequestFields(){if(!this.options.requestAutoSetup)return{};let e=Object.fromEntries(this.requestFields.map(e=>[e.NAME,`*`])),t=this.options.criteria?this.config.criteriaToFields(this.options.criteria):{};return Object.assign(Object.assign({},e),t)}updateLoadMoreCount(e){this.loadMoreCount=e}snapshot(e){return J(this,void 0,void 0,function*(){switch(Y.debug(`Requesting snapshot for ${this.options.resourceName} (${this.resourceType}).`),this.resourceType){case dg.DATASERVER:return this.connect.snapshot(this.options.resourceName,Object.assign(Object.assign({},this.dataserverOnlyParams),e));case dg.REQUEST_SERVER:return this.connect.request(this.options.resourceName,Object.assign(Object.assign({},this.requestOnlyParams),e));default:throw Error(`Snapshot not supported for selected resource type: ${this.resourceType}`)}})}snapshotFiltered(){return J(this,arguments,void 0,function*(e=`ROW_REF`){let t=yield this.snapshot();if(Array.isArray(t))return t;if(t.REPLY)return t.REPLY;if(t.ROW)return this.config.dataServerResultFilter(t,e).inserts})}createStream(){if(![dg.DATASERVER,dg.REQUEST_SERVER].includes(this.resourceType))throw Error(`Streaming not supported for selected resource type: ${this.resourceType}`);return this.resourceType===dg.DATASERVER?this.createDataserverStream():(Y.debug(`Creating fake stream by polling ${this.options.resourceName} REQUEST_SERVER`),this.createReqRepStream())}createDataserverStream(){let{resourceName:e}=this.options;return this.connect.stream(e,e=>{},t=>Y.error(hg(`${e} stream failed`,t),t),this.dataserverOnlyParams)}createReqRepStream(){this.commitResponseUnsubscribe=this.connectEvents.addCommitResponseListener(e=>{let{eventName:t,response:n}=e.detail;this.options.pollTriggerEvents&&this.options.pollTriggerEvents.includes(t)&&n.MESSAGE_TYPE?.endsWith(`_ACK`)&&(Y.debug(`Received commit response for ${t}, triggering poll.`),this.triggerPoll())});let e=this.allResourceParams.DISABLE_POLLING?void 0:this.allResourceParams.POLLING_INTERVAL,t=()=>{let e=this.requestOnlyParams;if(this.resourceType===dg.REQUEST_SERVER&&this.loadMoreCount>0){let t=(this.options.maxRows||25)*(this.loadMoreCount+1);e.DETAILS.MAX_ROWS=t}return yie([this.connect.isConnected$,this.auth.isLoggedIn$]).pipe(jh(()=>this.connect.isConnected&&this.auth.isLoggedIn),Ah(()=>gh(this.snapshot(e))))};return e?this.pollTrigger$.pipe(kh(0),Ah(()=>wh(0,e).pipe(Ah(t)))):this.pollTrigger$.pipe(kh(0),Ah(t))}fetchAndApplyMetadata(e){return J(this,void 0,void 0,function*(){let t=this.generation;try{Y.debug(`Requesting metadata for ${e} Datasource`);let n=yield this.connect.getMetadata(e);if(t!==this.generation)return;n&&(this.availableIndexes=n.INDEXES??[],this.availableSortableFields=n.SORTABLE_FIELDS??[],this.availableCriteriaFields=n.CRITERIA_FIELDS??[],this.originalFieldDef=mg(n),this.fieldMetadata=pg(this.originalFieldDef),this.requestFields=n.REQUEST_FIELD||[],this.customRequestFields=n.FIELD||[],this.criteriaOnlyRequest=n.CRITERIA_ONLY_REQUEST||!1,this.fetchMetadataRequired=!1),this.status=this.normaliseStatus({isInitialized:!0,metadataRequired:!0,hasMetadata:this.fieldMetadata?.length>0})}catch(n){if(t!==this.generation){Y.debug(`Metadata Fetch for ${e} failed after it was superseded:`,n);return}Y.error(hg(`Metadata Fetch failed for ${e}:`,n),n),this.status=this.normaliseStatus({isInitialized:!1,metadataRequired:!0,hasMetadata:!1})}})}reportStatus(e={}){let t=this.config.eventEmitter??document;this.status=this.normaliseStatus(e),Y.debug(`Dispatching '${fg}'`,this.status),t?.dispatchEvent(new CustomEvent(`datasource-status-changed`,{detail:this.status,bubbles:t!==document,composed:!0}))}normaliseStatus(e){let t=e.isInitialized??this.initialized,n=e.metadataRequired??this.fetchMetadataRequired,r=e.hasMetadata??this.fieldMetadata?.length>0;return{name:this.options?.resourceName,type:this.resourceType,isInitialized:t,metadataRequired:n,hasMetadata:r}}invalidateCache(){this._allParams=null}interruptedInit(e){Y.debug(`${e} datasource initialisation was superseded`);let t=this.latestInit;return t&&t.generation===this.generation?t.result:!1}};q([C],eb.prototype,`status`,void 0),q([C],eb.prototype,`fetchMetadataRequired`,void 0),q([C],eb.prototype,`startStreamRequired`,void 0),q([C],eb.prototype,`originalFieldDef`,void 0),q([C],eb.prototype,`fieldMetadata`,void 0),q([C],eb.prototype,`requestFields`,void 0),q([C],eb.prototype,`customRequestFields`,void 0),q([C],eb.prototype,`availableIndexes`,void 0),q([C],eb.prototype,`availableSortableFields`,void 0),q([C],eb.prototype,`availableCriteriaFields`,void 0),q([C],eb.prototype,`criteriaOnlyRequest`,void 0),q([C],eb.prototype,`loadMoreCount`,void 0),q([C],eb.prototype,`readOnly`,void 0),q([C],eb.prototype,`stream`,void 0),eb=q([od(0,cy),od(1,My),od(2,$y),od(3,Hy),od(4,Eg)],eb);let tb=N.createInterface(e=>e.transient(eb));var nb=class extends eb{constructor(){super(...arguments),this.entityCache=[],this.entityMap=/* @__PURE__ */ new Map,this.rowId=`ROW_REF`,this.initialize=e=>J(this,void 0,void 0,function*(){return this.disconnect(),this.options=Object.assign({},e.options),this.mapper=e.mapper,this.initialized=yield this.init(this.options,e.fetchMeta),this.initialized?(this.subscription=this.stream.subscribe(e=>{this.sourceRef=e.SOURCE_REF,this.subscriptionLoggedOff=e.MESSAGE_TYPE===Fg.LOGOFF_ACK;let t=e.ROW;!this.subscriptionLoggedOff&&t&&this.updateCache(this.config.dataServerResultFilter(e,this.rowId))}),!0):(Y.debug(`EntityDatasource init failed for ${this.options.resourceName}`),!1)}),this.disconnect=()=>{var e;(e=this.subscription)==null||e.unsubscribe(),this.entityCache=[]}}get initialized(){return this._initialized}set initialized(e){this._initialized=e}get cache(){if(!this.initialized)throw Error(`Please initialize EntityDatasource before querying.`);return this.entityCache}get isEmpty(){return this.entityCache.length===0}updateCache(e){var t;this.isEmpty,(t=e.deletes)==null||t.forEach(e=>{let t=e[this.rowId];this.entityMap.delete(t)}),this.processRowDataUpdate(e.inserts,!0),this.processRowDataUpdate(e.updates);let n=[{}];this.entityCache=n.map(e=>this.mapper.fromDTO(e))}processRowDataUpdate(e,t=!1){e.forEach(e=>{let n=e[this.rowId],r=this.entityMap.get(n);if(r&&t)throw Error(`Existing entity found in map while inserting.`);let i=this.mapper.fromDTO(e),a=r?Object.assign(Object.assign({},r),i):i;this.entityMap.set(n,a)})}};N.createInterface(e=>e.transient(nb));function rb(e,t=`;`){return e&&e.split(t).map(e=>e.trim()).sort((e,t)=>e.localeCompare(t)).join(t)}let ib=`system-health-changed`,ab={windowEvents:[`online`,`offline`,`pageshow`],documentEvents:[`visibilitychange`],genesisConnectEvents:[`stream`,`commit`],ignoredGenesisResources:[],startDelay:5e3,checkInterval:1e4,checkTimeout:3e3,resourceChecks:e=>J(void 0,void 0,void 0,function*(){let t=yield ly().getMoreColumns(e),n=Date.now(),r=t;return{isConnected:t.MESSAGE_TYPE===Fg.MORE_COLUMNS_ACK,lastUpdated:n,lastMessage:r}}),resourceDataLogon:({message:e,functions:t})=>{let{onMessage:n,onError:r}=t;ny().sendForStream(e,n,r)}},ob=N.createInterface(e=>e.instance(ab));var sb=/* @__PURE__ */ s(((e,t)=>{(function(n,r){typeof e==`object`&&typeof t==`object`?t.exports=r():typeof define==`function`&&define.amd?define([],r):typeof e==`object`?e.bowser=r():n.bowser=r()})(e,(function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){typeof Symbol<`u`&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:`Module`}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t||4&t&&typeof e==`object`&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&typeof e!=`string`)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,`a`,t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=``,n(n.s=90)}({17:function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var r=n(18);t.default=function(){function e(){}return e.getFirstMatch=function(e,t){var n=t.match(e);return n&&n.length>0&&n[1]||``},e.getSecondMatch=function(e,t){var n=t.match(e);return n&&n.length>1&&n[2]||``},e.matchAndReturnConst=function(e,t,n){if(e.test(t))return n},e.getWindowsVersionName=function(e){switch(e){case`NT`:return`NT`;case`XP`:return`XP`;case`NT 5.0`:return`2000`;case`NT 5.1`:return`XP`;case`NT 5.2`:return`2003`;case`NT 6.0`:return`Vista`;case`NT 6.1`:return`7`;case`NT 6.2`:return`8`;case`NT 6.3`:return`8.1`;case`NT 10.0`:return`10`;default:return}},e.getMacOSVersionName=function(e){var t=e.split(`.`).splice(0,2).map((function(e){return parseInt(e,10)||0}));t.push(0);var n=t[0],r=t[1];if(n===10)switch(r){case 5:return`Leopard`;case 6:return`Snow Leopard`;case 7:return`Lion`;case 8:return`Mountain Lion`;case 9:return`Mavericks`;case 10:return`Yosemite`;case 11:return`El Capitan`;case 12:return`Sierra`;case 13:return`High Sierra`;case 14:return`Mojave`;case 15:return`Catalina`;default:return}switch(n){case 11:return`Big Sur`;case 12:return`Monterey`;case 13:return`Ventura`;case 14:return`Sonoma`;case 15:return`Sequoia`;default:return}},e.getAndroidVersionName=function(e){var t=e.split(`.`).splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),!(t[0]===1&&t[1]<5))return t[0]===1&&t[1]<6?`Cupcake`:t[0]===1&&t[1]>=6?`Donut`:t[0]===2&&t[1]<2?`Eclair`:t[0]===2&&t[1]===2?`Froyo`:t[0]===2&&t[1]>2?`Gingerbread`:t[0]===3?`Honeycomb`:t[0]===4&&t[1]<1?`Ice Cream Sandwich`:t[0]===4&&t[1]<4?`Jelly Bean`:t[0]===4&&t[1]>=4?`KitKat`:t[0]===5?`Lollipop`:t[0]===6?`Marshmallow`:t[0]===7?`Nougat`:t[0]===8?`Oreo`:t[0]===9?`Pie`:void 0},e.getVersionPrecision=function(e){return e.split(`.`).length},e.compareVersions=function(t,n,r){r===void 0&&(r=!1);var i=e.getVersionPrecision(t),a=e.getVersionPrecision(n),o=Math.max(i,a),s=0,c=e.map([t,n],(function(t){var n=o-e.getVersionPrecision(t),r=t+Array(n+1).join(`.0`);return e.map(r.split(`.`),(function(e){return Array(20-e.length).join(`0`)+e})).reverse()}));for(r&&(s=o-Math.min(i,a)),--o;o>=s;){if(c[0][o]>c[1][o])return 1;if(c[0][o]===c[1][o]){if(o===s)return 0;--o}else if(c[0][o]<c[1][o])return-1}},e.map=function(e,t){var n,r=[];if(Array.prototype.map)return Array.prototype.map.call(e,t);for(n=0;n<e.length;n+=1)r.push(t(e[n]));return r},e.find=function(e,t){var n,r;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(n=0,r=e.length;n<r;n+=1){var i=e[n];if(t(i,n))return i}},e.assign=function(e){for(var t,n,r=e,i=arguments.length,a=Array(i>1?i-1:0),o=1;o<i;o++)a[o-1]=arguments[o];if(Object.assign)return Object.assign.apply(Object,[e].concat(a));var s=function(){var e=a[t];typeof e==`object`&&e&&Object.keys(e).forEach((function(t){r[t]=e[t]}))};for(t=0,n=a.length;t<n;t+=1)s();return e},e.getBrowserAlias=function(e){return r.BROWSER_ALIASES_MAP[e]},e.getBrowserTypeByAlias=function(e){return r.BROWSER_MAP[e]||``},e}(),e.exports=t.default},18:function(e,t,n){"use strict";t.__esModule=!0,t.ENGINE_MAP=t.OS_MAP=t.PLATFORMS_MAP=t.BROWSER_MAP=t.BROWSER_ALIASES_MAP=void 0,t.BROWSER_ALIASES_MAP={AmazonBot:`amazonbot`,"Amazon Silk":`amazon_silk`,"Android Browser":`android`,BaiduSpider:`baiduspider`,Bada:`bada`,BingCrawler:`bingcrawler`,Brave:`brave`,BlackBerry:`blackberry`,"ChatGPT-User":`chatgpt_user`,Chrome:`chrome`,ClaudeBot:`claudebot`,Chromium:`chromium`,Diffbot:`diffbot`,DuckDuckBot:`duckduckbot`,DuckDuckGo:`duckduckgo`,Electron:`electron`,Epiphany:`epiphany`,FacebookExternalHit:`facebookexternalhit`,Firefox:`firefox`,Focus:`focus`,Generic:`generic`,"Google Search":`google_search`,Googlebot:`googlebot`,GPTBot:`gptbot`,"Internet Explorer":`ie`,InternetArchiveCrawler:`internetarchivecrawler`,"K-Meleon":`k_meleon`,LibreWolf:`librewolf`,Linespider:`linespider`,Maxthon:`maxthon`,"Meta-ExternalAds":`meta_externalads`,"Meta-ExternalAgent":`meta_externalagent`,"Meta-ExternalFetcher":`meta_externalfetcher`,"Meta-WebIndexer":`meta_webindexer`,"Microsoft Edge":`edge`,"MZ Browser":`mz`,"NAVER Whale Browser":`naver`,"OAI-SearchBot":`oai_searchbot`,Omgilibot:`omgilibot`,Opera:`opera`,"Opera Coast":`opera_coast`,"Pale Moon":`pale_moon`,PerplexityBot:`perplexitybot`,"Perplexity-User":`perplexity_user`,PhantomJS:`phantomjs`,PingdomBot:`pingdombot`,Puffin:`puffin`,QQ:`qq`,QQLite:`qqlite`,QupZilla:`qupzilla`,Roku:`roku`,Safari:`safari`,Sailfish:`sailfish`,"Samsung Internet for Android":`samsung_internet`,SlackBot:`slackbot`,SeaMonkey:`seamonkey`,Sleipnir:`sleipnir`,"Sogou Browser":`sogou`,Swing:`swing`,Tizen:`tizen`,"UC Browser":`uc`,Vivaldi:`vivaldi`,"WebOS Browser":`webos`,WeChat:`wechat`,YahooSlurp:`yahooslurp`,"Yandex Browser":`yandex`,YandexBot:`yandexbot`,YouBot:`youbot`},t.BROWSER_MAP={amazonbot:`AmazonBot`,amazon_silk:`Amazon Silk`,android:`Android Browser`,baiduspider:`BaiduSpider`,bada:`Bada`,bingcrawler:`BingCrawler`,blackberry:`BlackBerry`,brave:`Brave`,chatgpt_user:`ChatGPT-User`,chrome:`Chrome`,claudebot:`ClaudeBot`,chromium:`Chromium`,diffbot:`Diffbot`,duckduckbot:`DuckDuckBot`,duckduckgo:`DuckDuckGo`,edge:`Microsoft Edge`,electron:`Electron`,epiphany:`Epiphany`,facebookexternalhit:`FacebookExternalHit`,firefox:`Firefox`,focus:`Focus`,generic:`Generic`,google_search:`Google Search`,googlebot:`Googlebot`,gptbot:`GPTBot`,ie:`Internet Explorer`,internetarchivecrawler:`InternetArchiveCrawler`,k_meleon:`K-Meleon`,librewolf:`LibreWolf`,linespider:`Linespider`,maxthon:`Maxthon`,meta_externalads:`Meta-ExternalAds`,meta_externalagent:`Meta-ExternalAgent`,meta_externalfetcher:`Meta-ExternalFetcher`,meta_webindexer:`Meta-WebIndexer`,mz:`MZ Browser`,naver:`NAVER Whale Browser`,oai_searchbot:`OAI-SearchBot`,omgilibot:`Omgilibot`,opera:`Opera`,opera_coast:`Opera Coast`,pale_moon:`Pale Moon`,perplexitybot:`PerplexityBot`,perplexity_user:`Perplexity-User`,phantomjs:`PhantomJS`,pingdombot:`PingdomBot`,puffin:`Puffin`,qq:`QQ Browser`,qqlite:`QQ Browser Lite`,qupzilla:`QupZilla`,roku:`Roku`,safari:`Safari`,sailfish:`Sailfish`,samsung_internet:`Samsung Internet for Android`,seamonkey:`SeaMonkey`,slackbot:`SlackBot`,sleipnir:`Sleipnir`,sogou:`Sogou Browser`,swing:`Swing`,tizen:`Tizen`,uc:`UC Browser`,vivaldi:`Vivaldi`,webos:`WebOS Browser`,wechat:`WeChat`,yahooslurp:`YahooSlurp`,yandex:`Yandex Browser`,yandexbot:`YandexBot`,youbot:`YouBot`},t.PLATFORMS_MAP={bot:`bot`,desktop:`desktop`,mobile:`mobile`,tablet:`tablet`,tv:`tv`},t.OS_MAP={Android:`Android`,Bada:`Bada`,BlackBerry:`BlackBerry`,ChromeOS:`Chrome OS`,HarmonyOS:`HarmonyOS`,iOS:`iOS`,Linux:`Linux`,MacOS:`macOS`,PlayStation4:`PlayStation 4`,Roku:`Roku`,Tizen:`Tizen`,WebOS:`WebOS`,Windows:`Windows`,WindowsPhone:`Windows Phone`},t.ENGINE_MAP={Blink:`Blink`,EdgeHTML:`EdgeHTML`,Gecko:`Gecko`,Presto:`Presto`,Trident:`Trident`,WebKit:`WebKit`}},90:function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var r,i=(r=n(91))&&r.__esModule?r:{default:r},a=n(18);function o(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,`value`in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}t.default=function(){function e(){}var t,n,r;return e.getParser=function(e,t,n){if(t===void 0&&(t=!1),n===void 0&&(n=null),typeof e!=`string`)throw Error(`UserAgent should be a string`);return new i.default(e,t,n)},e.parse=function(e,t){return t===void 0&&(t=null),new i.default(e,t).getResult()},t=e,r=[{key:`BROWSER_MAP`,get:function(){return a.BROWSER_MAP}},{key:`ENGINE_MAP`,get:function(){return a.ENGINE_MAP}},{key:`OS_MAP`,get:function(){return a.OS_MAP}},{key:`PLATFORMS_MAP`,get:function(){return a.PLATFORMS_MAP}}],(n=null)&&o(t.prototype,n),r&&o(t,r),e}(),e.exports=t.default},91:function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var r=c(n(92)),i=c(n(93)),a=c(n(94)),o=c(n(95)),s=c(n(17));function c(e){return e&&e.__esModule?e:{default:e}}t.default=function(){function e(e,t,n){if(t===void 0&&(t=!1),n===void 0&&(n=null),e==null||e===``)throw Error(`UserAgent parameter can't be empty`);this._ua=e;var r=!1;typeof t==`boolean`?(r=t,this._hints=n):this._hints=typeof t==`object`&&t?t:null,this.parsedResult={},!0!==r&&this.parse()}var t=e.prototype;return t.getHints=function(){return this._hints},t.hasBrand=function(e){if(!this._hints||!Array.isArray(this._hints.brands))return!1;var t=e.toLowerCase();return this._hints.brands.some((function(e){return e.brand&&e.brand.toLowerCase()===t}))},t.getBrandVersion=function(e){if(this._hints&&Array.isArray(this._hints.brands)){var t=e.toLowerCase(),n=this._hints.brands.find((function(e){return e.brand&&e.brand.toLowerCase()===t}));return n?n.version:void 0}},t.getUA=function(){return this._ua},t.test=function(e){return e.test(this._ua)},t.parseBrowser=function(){var e=this;this.parsedResult.browser={};var t=s.default.find(r.default,(function(t){if(typeof t.test==`function`)return t.test(e);if(Array.isArray(t.test))return t.test.some((function(t){return e.test(t)}));throw Error(`Browser's test function is not valid`)}));return t&&(this.parsedResult.browser=t.describe(this.getUA(),this)),this.parsedResult.browser},t.getBrowser=function(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser()},t.getBrowserName=function(e){return e?String(this.getBrowser().name).toLowerCase()||``:this.getBrowser().name||``},t.getBrowserVersion=function(){return this.getBrowser().version},t.getOS=function(){return this.parsedResult.os?this.parsedResult.os:this.parseOS()},t.parseOS=function(){var e=this;this.parsedResult.os={};var t=s.default.find(i.default,(function(t){if(typeof t.test==`function`)return t.test(e);if(Array.isArray(t.test))return t.test.some((function(t){return e.test(t)}));throw Error(`Browser's test function is not valid`)}));return t&&(this.parsedResult.os=t.describe(this.getUA())),this.parsedResult.os},t.getOSName=function(e){var t=this.getOS().name;return e?String(t).toLowerCase()||``:t||``},t.getOSVersion=function(){return this.getOS().version},t.getPlatform=function(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform()},t.getPlatformType=function(e){e===void 0&&(e=!1);var t=this.getPlatform().type;return e?String(t).toLowerCase()||``:t||``},t.parsePlatform=function(){var e=this;this.parsedResult.platform={};var t=s.default.find(a.default,(function(t){if(typeof t.test==`function`)return t.test(e);if(Array.isArray(t.test))return t.test.some((function(t){return e.test(t)}));throw Error(`Browser's test function is not valid`)}));return t&&(this.parsedResult.platform=t.describe(this.getUA())),this.parsedResult.platform},t.getEngine=function(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine()},t.getEngineName=function(e){return e?String(this.getEngine().name).toLowerCase()||``:this.getEngine().name||``},t.parseEngine=function(){var e=this;this.parsedResult.engine={};var t=s.default.find(o.default,(function(t){if(typeof t.test==`function`)return t.test(e);if(Array.isArray(t.test))return t.test.some((function(t){return e.test(t)}));throw Error(`Browser's test function is not valid`)}));return t&&(this.parsedResult.engine=t.describe(this.getUA())),this.parsedResult.engine},t.parse=function(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this},t.getResult=function(){return s.default.assign({},this.parsedResult)},t.satisfies=function(e){var t=this,n={},r=0,i={},a=0;if(Object.keys(e).forEach((function(t){var o=e[t];typeof o==`string`?(i[t]=o,a+=1):typeof o==`object`&&(n[t]=o,r+=1)})),r>0){var o=Object.keys(n),c=s.default.find(o,(function(e){return t.isOS(e)}));if(c){var l=this.satisfies(n[c]);if(l!==void 0)return l}var u=s.default.find(o,(function(e){return t.isPlatform(e)}));if(u){var d=this.satisfies(n[u]);if(d!==void 0)return d}}if(a>0){var f=Object.keys(i),p=s.default.find(f,(function(e){return t.isBrowser(e,!0)}));if(p!==void 0)return this.compareVersion(i[p])}},t.isBrowser=function(e,t){t===void 0&&(t=!1);var n=this.getBrowserName().toLowerCase(),r=e.toLowerCase(),i=s.default.getBrowserTypeByAlias(r);return t&&i&&(r=i.toLowerCase()),r===n},t.compareVersion=function(e){var t=[0],n=e,r=!1,i=this.getBrowserVersion();if(typeof i==`string`)return e[0]===`>`||e[0]===`<`?(n=e.substr(1),e[1]===`=`?(r=!0,n=e.substr(2)):t=[],e[0]===`>`?t.push(1):t.push(-1)):e[0]===`=`?n=e.substr(1):e[0]===`~`&&(r=!0,n=e.substr(1)),t.indexOf(s.default.compareVersions(i,n,r))>-1},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase()},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase()},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase()},t.is=function(e,t){return t===void 0&&(t=!1),this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e)},t.some=function(e){var t=this;return e===void 0&&(e=[]),e.some((function(e){return t.is(e)}))},e}(),e.exports=t.default},92:function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var r,i=(r=n(17))&&r.__esModule?r:{default:r},a=/version\/(\d+(\.?_?\d+)+)/i;t.default=[{test:[/gptbot/i],describe:function(e){var t={name:`GPTBot`},n=i.default.getFirstMatch(/gptbot\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/chatgpt-user/i],describe:function(e){var t={name:`ChatGPT-User`},n=i.default.getFirstMatch(/chatgpt-user\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/oai-searchbot/i],describe:function(e){var t={name:`OAI-SearchBot`},n=i.default.getFirstMatch(/oai-searchbot\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/claudebot/i,/claude-web/i,/claude-user/i,/claude-searchbot/i],describe:function(e){var t={name:`ClaudeBot`},n=i.default.getFirstMatch(/(?:claudebot|claude-web|claude-user|claude-searchbot)\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/omgilibot/i,/webzio-extended/i],describe:function(e){var t={name:`Omgilibot`},n=i.default.getFirstMatch(/(?:omgilibot|webzio-extended)\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/diffbot/i],describe:function(e){var t={name:`Diffbot`},n=i.default.getFirstMatch(/diffbot\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/perplexitybot/i],describe:function(e){var t={name:`PerplexityBot`},n=i.default.getFirstMatch(/perplexitybot\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/perplexity-user/i],describe:function(e){var t={name:`Perplexity-User`},n=i.default.getFirstMatch(/perplexity-user\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/youbot/i],describe:function(e){var t={name:`YouBot`},n=i.default.getFirstMatch(/youbot\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/meta-webindexer/i],describe:function(e){var t={name:`Meta-WebIndexer`},n=i.default.getFirstMatch(/meta-webindexer\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/meta-externalads/i],describe:function(e){var t={name:`Meta-ExternalAds`},n=i.default.getFirstMatch(/meta-externalads\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/meta-externalagent/i],describe:function(e){var t={name:`Meta-ExternalAgent`},n=i.default.getFirstMatch(/meta-externalagent\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/meta-externalfetcher/i],describe:function(e){var t={name:`Meta-ExternalFetcher`},n=i.default.getFirstMatch(/meta-externalfetcher\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/googlebot/i],describe:function(e){var t={name:`Googlebot`},n=i.default.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/linespider/i],describe:function(e){var t={name:`Linespider`},n=i.default.getFirstMatch(/(?:linespider)(?:-[-\w]+)?[\s/](\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/amazonbot/i],describe:function(e){var t={name:`AmazonBot`},n=i.default.getFirstMatch(/amazonbot\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/bingbot/i],describe:function(e){var t={name:`BingCrawler`},n=i.default.getFirstMatch(/bingbot\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/baiduspider/i],describe:function(e){var t={name:`BaiduSpider`},n=i.default.getFirstMatch(/baiduspider\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/duckduckbot/i],describe:function(e){var t={name:`DuckDuckBot`},n=i.default.getFirstMatch(/duckduckbot\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/ia_archiver/i],describe:function(e){var t={name:`InternetArchiveCrawler`},n=i.default.getFirstMatch(/ia_archiver\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/facebookexternalhit/i,/facebookcatalog/i],describe:function(){return{name:`FacebookExternalHit`}}},{test:[/slackbot/i,/slack-imgProxy/i],describe:function(e){var t={name:`SlackBot`},n=i.default.getFirstMatch(/(?:slackbot|slack-imgproxy)(?:-[-\w]+)?[\s/](\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/yahoo!?[\s/]*slurp/i],describe:function(){return{name:`YahooSlurp`}}},{test:[/yandexbot/i,/yandexmobilebot/i],describe:function(){return{name:`YandexBot`}}},{test:[/pingdom/i],describe:function(){return{name:`PingdomBot`}}},{test:[/opera/i],describe:function(e){var t={name:`Opera`},n=i.default.getFirstMatch(a,e)||i.default.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/opr\/|opios/i],describe:function(e){var t={name:`Opera`},n=i.default.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/SamsungBrowser/i],describe:function(e){var t={name:`Samsung Internet for Android`},n=i.default.getFirstMatch(a,e)||i.default.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/Whale/i],describe:function(e){var t={name:`NAVER Whale Browser`},n=i.default.getFirstMatch(a,e)||i.default.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/PaleMoon/i],describe:function(e){var t={name:`Pale Moon`},n=i.default.getFirstMatch(a,e)||i.default.getFirstMatch(/(?:PaleMoon)[\s/](\d+(?:\.\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/MZBrowser/i],describe:function(e){var t={name:`MZ Browser`},n=i.default.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/focus/i],describe:function(e){var t={name:`Focus`},n=i.default.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/swing/i],describe:function(e){var t={name:`Swing`},n=i.default.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/coast/i],describe:function(e){var t={name:`Opera Coast`},n=i.default.getFirstMatch(a,e)||i.default.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe:function(e){var t={name:`Opera Touch`},n=i.default.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/yabrowser/i],describe:function(e){var t={name:`Yandex Browser`},n=i.default.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/ucbrowser/i],describe:function(e){var t={name:`UC Browser`},n=i.default.getFirstMatch(a,e)||i.default.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/Maxthon|mxios/i],describe:function(e){var t={name:`Maxthon`},n=i.default.getFirstMatch(a,e)||i.default.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/epiphany/i],describe:function(e){var t={name:`Epiphany`},n=i.default.getFirstMatch(a,e)||i.default.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/puffin/i],describe:function(e){var t={name:`Puffin`},n=i.default.getFirstMatch(a,e)||i.default.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/sleipnir/i],describe:function(e){var t={name:`Sleipnir`},n=i.default.getFirstMatch(a,e)||i.default.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/k-meleon/i],describe:function(e){var t={name:`K-Meleon`},n=i.default.getFirstMatch(a,e)||i.default.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/micromessenger/i],describe:function(e){var t={name:`WeChat`},n=i.default.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/qqbrowser/i],describe:function(e){var t={name:/qqbrowserlite/i.test(e)?`QQ Browser Lite`:`QQ Browser`},n=i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/msie|trident/i],describe:function(e){var t={name:`Internet Explorer`},n=i.default.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/\sedg\//i],describe:function(e){var t={name:`Microsoft Edge`},n=i.default.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/edg([ea]|ios)/i],describe:function(e){var t={name:`Microsoft Edge`},n=i.default.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/vivaldi/i],describe:function(e){var t={name:`Vivaldi`},n=i.default.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/seamonkey/i],describe:function(e){var t={name:`SeaMonkey`},n=i.default.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/sailfish/i],describe:function(e){var t={name:`Sailfish`},n=i.default.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,e);return n&&(t.version=n),t}},{test:[/silk/i],describe:function(e){var t={name:`Amazon Silk`},n=i.default.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/phantom/i],describe:function(e){var t={name:`PhantomJS`},n=i.default.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/slimerjs/i],describe:function(e){var t={name:`SlimerJS`},n=i.default.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(e){var t={name:`BlackBerry`},n=i.default.getFirstMatch(a,e)||i.default.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t={name:`WebOS Browser`},n=i.default.getFirstMatch(a,e)||i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/bada/i],describe:function(e){var t={name:`Bada`},n=i.default.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/tizen/i],describe:function(e){var t={name:`Tizen`},n=i.default.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/qupzilla/i],describe:function(e){var t={name:`QupZilla`},n=i.default.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/librewolf/i],describe:function(e){var t={name:`LibreWolf`},n=i.default.getFirstMatch(/(?:librewolf)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/firefox|iceweasel|fxios/i],describe:function(e){var t={name:`Firefox`},n=i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/electron/i],describe:function(e){var t={name:`Electron`},n=i.default.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/sogoumobilebrowser/i,/metasr/i,/se 2\.[x]/i],describe:function(e){var t={name:`Sogou Browser`},n=i.default.getFirstMatch(/(?:sogoumobilebrowser)[\s/](\d+(\.?_?\d+)+)/i,e),r=i.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,e),a=i.default.getFirstMatch(/se ([\d.]+)x/i,e),o=n||r||a;return o&&(t.version=o),t}},{test:[/MiuiBrowser/i],describe:function(e){var t={name:`Miui`},n=i.default.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:function(e){return!!e.hasBrand(`DuckDuckGo`)||e.test(/\sDdg\/[\d.]+$/i)},describe:function(e,t){var n={name:`DuckDuckGo`};if(t){var r=t.getBrandVersion(`DuckDuckGo`);if(r)return n.version=r,n}var a=i.default.getFirstMatch(/\sDdg\/([\d.]+)$/i,e);return a&&(n.version=a),n}},{test:function(e){return e.hasBrand(`Brave`)},describe:function(e,t){var n={name:`Brave`};if(t){var r=t.getBrandVersion(`Brave`);if(r)return n.version=r,n}return n}},{test:[/chromium/i],describe:function(e){var t={name:`Chromium`},n=i.default.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/chrome|crios|crmo/i],describe:function(e){var t={name:`Chrome`},n=i.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/GSA/i],describe:function(e){var t={name:`Google Search`},n=i.default.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:function(e){var t=!e.test(/like android/i),n=e.test(/android/i);return t&&n},describe:function(e){var t={name:`Android Browser`},n=i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/playstation 4/i],describe:function(e){var t={name:`PlayStation 4`},n=i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/safari|applewebkit/i],describe:function(e){var t={name:`Safari`},n=i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/.*/i],describe:function(e){var t=e.search(`\\(`)===-1?/^(.*)\/(.*) /:/^(.*)\/(.*)[ \t]\((.*)/;return{name:i.default.getFirstMatch(t,e),version:i.default.getSecondMatch(t,e)}}}],e.exports=t.default},93:function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var r,i=(r=n(17))&&r.__esModule?r:{default:r},a=n(18);t.default=[{test:[/Roku\/DVP/],describe:function(e){var t=i.default.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,e);return{name:a.OS_MAP.Roku,version:t}}},{test:[/windows phone/i],describe:function(e){var t=i.default.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,e);return{name:a.OS_MAP.WindowsPhone,version:t}}},{test:[/windows /i],describe:function(e){var t=i.default.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,e),n=i.default.getWindowsVersionName(t);return{name:a.OS_MAP.Windows,version:t,versionName:n}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(e){var t={name:a.OS_MAP.iOS},n=i.default.getSecondMatch(/(Version\/)(\d[\d.]+)/,e);return n&&(t.version=n),t}},{test:[/macintosh/i],describe:function(e){var t=i.default.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,e).replace(/[_\s]/g,`.`),n=i.default.getMacOSVersionName(t),r={name:a.OS_MAP.MacOS,version:t};return n&&(r.versionName=n),r}},{test:[/(ipod|iphone|ipad)/i],describe:function(e){var t=i.default.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,e).replace(/[_\s]/g,`.`);return{name:a.OS_MAP.iOS,version:t}}},{test:[/OpenHarmony/i],describe:function(e){var t=i.default.getFirstMatch(/OpenHarmony\s+(\d+(\.\d+)*)/i,e);return{name:a.OS_MAP.HarmonyOS,version:t}}},{test:function(e){var t=!e.test(/like android/i),n=e.test(/android/i);return t&&n},describe:function(e){var t=i.default.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,e),n=i.default.getAndroidVersionName(t),r={name:a.OS_MAP.Android,version:t};return n&&(r.versionName=n),r}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t=i.default.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,e),n={name:a.OS_MAP.WebOS};return t&&t.length&&(n.version=t),n}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(e){var t=i.default.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,e)||i.default.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,e)||i.default.getFirstMatch(/\bbb(\d+)/i,e);return{name:a.OS_MAP.BlackBerry,version:t}}},{test:[/bada/i],describe:function(e){var t=i.default.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,e);return{name:a.OS_MAP.Bada,version:t}}},{test:[/tizen/i],describe:function(e){var t=i.default.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,e);return{name:a.OS_MAP.Tizen,version:t}}},{test:[/linux/i],describe:function(){return{name:a.OS_MAP.Linux}}},{test:[/CrOS/],describe:function(){return{name:a.OS_MAP.ChromeOS}}},{test:[/PlayStation 4/],describe:function(e){var t=i.default.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,e);return{name:a.OS_MAP.PlayStation4,version:t}}}],e.exports=t.default},94:function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var r,i=(r=n(17))&&r.__esModule?r:{default:r},a=n(18);t.default=[{test:[/googlebot/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Google`}}},{test:[/linespider/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Line`}}},{test:[/amazonbot/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Amazon`}}},{test:[/gptbot/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`OpenAI`}}},{test:[/chatgpt-user/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`OpenAI`}}},{test:[/oai-searchbot/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`OpenAI`}}},{test:[/baiduspider/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Baidu`}}},{test:[/bingbot/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Bing`}}},{test:[/duckduckbot/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`DuckDuckGo`}}},{test:[/claudebot/i,/claude-web/i,/claude-user/i,/claude-searchbot/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Anthropic`}}},{test:[/omgilibot/i,/webzio-extended/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Webz.io`}}},{test:[/diffbot/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Diffbot`}}},{test:[/perplexitybot/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Perplexity AI`}}},{test:[/perplexity-user/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Perplexity AI`}}},{test:[/youbot/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`You.com`}}},{test:[/ia_archiver/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Internet Archive`}}},{test:[/meta-webindexer/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Meta`}}},{test:[/meta-externalads/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Meta`}}},{test:[/meta-externalagent/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Meta`}}},{test:[/meta-externalfetcher/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Meta`}}},{test:[/facebookexternalhit/i,/facebookcatalog/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Meta`}}},{test:[/slackbot/i,/slack-imgProxy/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Slack`}}},{test:[/yahoo/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Yahoo`}}},{test:[/yandexbot/i,/yandexmobilebot/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Yandex`}}},{test:[/pingdom/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Pingdom`}}},{test:[/huawei/i],describe:function(e){var t=i.default.getFirstMatch(/(can-l01)/i,e)&&`Nova`,n={type:a.PLATFORMS_MAP.mobile,vendor:`Huawei`};return t&&(n.model=t),n}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:function(){return{type:a.PLATFORMS_MAP.tablet,vendor:`Nexus`}}},{test:[/ipad/i],describe:function(){return{type:a.PLATFORMS_MAP.tablet,vendor:`Apple`,model:`iPad`}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(){return{type:a.PLATFORMS_MAP.tablet,vendor:`Apple`,model:`iPad`}}},{test:[/kftt build/i],describe:function(){return{type:a.PLATFORMS_MAP.tablet,vendor:`Amazon`,model:`Kindle Fire HD 7`}}},{test:[/silk/i],describe:function(){return{type:a.PLATFORMS_MAP.tablet,vendor:`Amazon`}}},{test:[/tablet(?! pc)/i],describe:function(){return{type:a.PLATFORMS_MAP.tablet}}},{test:function(e){var t=e.test(/ipod|iphone/i),n=e.test(/like (ipod|iphone)/i);return t&&!n},describe:function(e){var t=i.default.getFirstMatch(/(ipod|iphone)/i,e);return{type:a.PLATFORMS_MAP.mobile,vendor:`Apple`,model:t}}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:function(){return{type:a.PLATFORMS_MAP.mobile,vendor:`Nexus`}}},{test:[/Nokia/i],describe:function(e){var t=i.default.getFirstMatch(/Nokia\s+([0-9]+(\.[0-9]+)?)/i,e),n={type:a.PLATFORMS_MAP.mobile,vendor:`Nokia`};return t&&(n.model=t),n}},{test:[/[^-]mobi/i],describe:function(){return{type:a.PLATFORMS_MAP.mobile}}},{test:function(e){return e.getBrowserName(!0)===`blackberry`},describe:function(){return{type:a.PLATFORMS_MAP.mobile,vendor:`BlackBerry`}}},{test:function(e){return e.getBrowserName(!0)===`bada`},describe:function(){return{type:a.PLATFORMS_MAP.mobile}}},{test:function(e){return e.getBrowserName()===`windows phone`},describe:function(){return{type:a.PLATFORMS_MAP.mobile,vendor:`Microsoft`}}},{test:function(e){var t=Number(String(e.getOSVersion()).split(`.`)[0]);return e.getOSName(!0)===`android`&&t>=3},describe:function(){return{type:a.PLATFORMS_MAP.tablet}}},{test:function(e){return e.getOSName(!0)===`android`},describe:function(){return{type:a.PLATFORMS_MAP.mobile}}},{test:[/smart-?tv|smarttv/i],describe:function(){return{type:a.PLATFORMS_MAP.tv}}},{test:[/netcast/i],describe:function(){return{type:a.PLATFORMS_MAP.tv}}},{test:function(e){return e.getOSName(!0)===`macos`},describe:function(){return{type:a.PLATFORMS_MAP.desktop,vendor:`Apple`}}},{test:function(e){return e.getOSName(!0)===`windows`},describe:function(){return{type:a.PLATFORMS_MAP.desktop}}},{test:function(e){return e.getOSName(!0)===`linux`},describe:function(){return{type:a.PLATFORMS_MAP.desktop}}},{test:function(e){return e.getOSName(!0)===`playstation 4`},describe:function(){return{type:a.PLATFORMS_MAP.tv}}},{test:function(e){return e.getOSName(!0)===`roku`},describe:function(){return{type:a.PLATFORMS_MAP.tv}}}],e.exports=t.default},95:function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var r,i=(r=n(17))&&r.__esModule?r:{default:r},a=n(18);t.default=[{test:function(e){return e.getBrowserName(!0)===`microsoft edge`},describe:function(e){if(/\sedg\//i.test(e))return{name:a.ENGINE_MAP.Blink};var t=i.default.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,e);return{name:a.ENGINE_MAP.EdgeHTML,version:t}}},{test:[/trident/i],describe:function(e){var t={name:a.ENGINE_MAP.Trident},n=i.default.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:function(e){return e.test(/presto/i)},describe:function(e){var t={name:a.ENGINE_MAP.Presto},n=i.default.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:function(e){var t=e.test(/gecko/i),n=e.test(/like gecko/i);return t&&!n},describe:function(e){var t={name:a.ENGINE_MAP.Gecko},n=i.default.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/(apple)?webkit\/537\.36/i],describe:function(){return{name:a.ENGINE_MAP.Blink}}},{test:[/(apple)?webkit/i],describe:function(e){var t={name:a.ENGINE_MAP.WebKit},n=i.default.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}}],e.exports=t.default}})}))})),cb=/* @__PURE__ */ s(((e,t)=>{t.exports=s,s.default=s,s.stable=d,s.stableStringify=d;var n=`[...]`,r=`[Circular]`,i=[],a=[];function o(){return{depthLimit:2**53-1,edgesLimit:2**53-1}}function s(e,t,n,r){r===void 0&&(r=o()),l(e,``,0,[],void 0,0,r);var s;try{s=a.length===0?JSON.stringify(e,t,n):JSON.stringify(e,p(t),n)}catch{return JSON.stringify(`[unable to serialize, circular reference is too complex to analyze]`)}finally{for(;i.length!==0;){var c=i.pop();c.length===4?Object.defineProperty(c[0],c[1],c[3]):c[0][c[1]]=c[2]}}return s}function c(e,t,n,r){var o=Object.getOwnPropertyDescriptor(r,n);o.get===void 0?(r[n]=e,i.push([r,n,t])):o.configurable?(Object.defineProperty(r,n,{value:e}),i.push([r,n,t,o])):a.push([t,n,e])}function l(e,t,i,a,o,s,u){s+=1;var d;if(typeof e==`object`&&e){for(d=0;d<a.length;d++)if(a[d]===e){c(r,e,t,o);return}if(u.depthLimit!==void 0&&s>u.depthLimit){c(n,e,t,o);return}if(u.edgesLimit!==void 0&&i+1>u.edgesLimit){c(n,e,t,o);return}if(a.push(e),Array.isArray(e))for(d=0;d<e.length;d++)l(e[d],d,d,a,e,s,u);else{var f=Object.keys(e);for(d=0;d<f.length;d++){var p=f[d];l(e[p],p,d,a,e,s,u)}}a.pop()}}function u(e,t){return e<t?-1:+(e>t)}function d(e,t,n,r){r===void 0&&(r=o());var s=f(e,``,0,[],void 0,0,r)||e,c;try{c=a.length===0?JSON.stringify(s,t,n):JSON.stringify(s,p(t),n)}catch{return JSON.stringify(`[unable to serialize, circular reference is too complex to analyze]`)}finally{for(;i.length!==0;){var l=i.pop();l.length===4?Object.defineProperty(l[0],l[1],l[3]):l[0][l[1]]=l[2]}}return c}function f(e,t,a,o,s,l,d){l+=1;var p;if(typeof e==`object`&&e){for(p=0;p<o.length;p++)if(o[p]===e){c(r,e,t,s);return}try{if(typeof e.toJSON==`function`)return}catch{return}if(d.depthLimit!==void 0&&l>d.depthLimit){c(n,e,t,s);return}if(d.edgesLimit!==void 0&&a+1>d.edgesLimit){c(n,e,t,s);return}if(o.push(e),Array.isArray(e))for(p=0;p<e.length;p++)f(e[p],p,p,o,e,l,d);else{var m={},h=Object.keys(e).sort(u);for(p=0;p<h.length;p++){var g=h[p];f(e[g],g,p,o,e,l,d),m[g]=e[g]}if(s!==void 0)i.push([s,t,e]),s[t]=m;else return m}o.pop()}}function p(e){return e=e===void 0?function(e,t){return t}:e,function(t,n){if(a.length>0)for(var r=0;r<a.length;r++){var i=a[r];if(i[1]===t&&i[0]===n){n=i[2],a.splice(r,1);break}}return e.call(this,t,n)}}})),lb=/* @__PURE__ */ u(sb()),ub=/* @__PURE__ */ u(cb());let db=Md(`network-monitor`,{level:bd.info}),fb=Date.now(),pb=window.navigator?.userAgent?lb.default.parse(window.navigator.userAgent):void 0,mb=(e,t={depthLimit:10,edgesLimit:10})=>e instanceof Event?`'${e.type}' Event`:typeof e==`string`?e:(0,ub.default)(e,void 0,2,t);var hb=class{constructor(){this.unsubscribableObservers=[],this.runAllChecks=(e,t)=>J(this,void 0,void 0,function*(){if(!this.isReady||this.isRunningChecks&&!t)return;db.info(`Run health checks, triggered by`,mb(e),`| Active resources`,this.resources.size),this.isRunningChecks=!0,this.synchroniseCheckInterval();let n=this.getFormattedTimestamp(this.getNowTimestamp()),r=yield this.isOnlineCheck();r?db.debug(`Network connected at ${n}`):db.warn(`Network disconnected at ${n}`);let i=this.normaliseSerializedSocketStatus(this.socketStatus.serialize(),r),a=this.preFlightSocketChecks(i);if(a||db.debug(`Socket pre-flight checks failed`),!r||!a){db.debug(`Aborting remaining health checks`);let e=[...this.resources].reduce((e,[t,n])=>{let i=e[n.resourceName];return i?(i.sourceRef=[...i.sourceRef,n.message.SOURCE_REF],e):Object.assign(Object.assign({},e),{[n.resourceName]:this.normaliseResourceHealth({name:n.resourceName,sourceRef:[n.message.SOURCE_REF],isConnected:n.isConnected,lastUpdated:n.lastUpdated},r)})},{});this.reportSystemHealth({isAuthenticated:this.user.isAuthenticated,isOnline:r,resources:e,resourcesAllConnected:!1,socket:i}),this.isRunningChecks=!1;return}let o=!0,s=[];this.resources.forEach((e,t)=>{let{resourceName:r,message:i,functions:a}=e,{resourceChecks:c=this.config.resourceChecks,resourceDataLogon:l=this.config.resourceDataLogon}=a,{SOURCE_REF:u}=i,d=!1,f,p,m,h,g;s.push(J(this,void 0,void 0,function*(){try{db.debug(`Running health check against ${r}`);let e=yield Promise.race([c(u,t),Jf(this.config.checkTimeout,()=>({isConnected:!1,lastUpdated:this.getNowTimestamp(),timeout:!0}))]);d=e.isConnected,f=e.lastUpdated,p=e.lastMessage,h=e.timeout}catch(e){d=!1,f=this.getNowTimestamp(),m=e,p=e?.receivedMessage??e}return g=p?.MESSAGE_TYPE===Fg.MSG_NACK||Bg(p,gg.NOT_FOUND),n=this.getFormattedTimestamp(f??this.getNowTimestamp()),d?db.debug(`${r} is healthy at ${n}`):db.warn(`${r} is not healthy at ${n}`),p&&db.debug(`${r} messaged at ${n}`,mb(p)),m&&db.error(`${r} errored at ${n}`,mb(m)),h&&db.warn(`${r} timed out at ${n}`),g&&(db.error(`${r} issue, re-attempting data logon at ${n}`),l(e)),o&&(o=d),{name:r,sourceRef:[u],isConnected:d,lastUpdated:f,lastError:m}}))});let c=(yield Promise.allSettled(s)).reduce((e,t)=>{if(t.status===`fulfilled`){let n=e[t.value.name];return n?(n.sourceRef=[...n.sourceRef,...t.value.sourceRef],e):Object.assign(Object.assign({},e),{[t.value.name]:this.normaliseResourceHealth(t.value)})}return db.warn(`Unexpected promise rejection occurred. Please check any custom resourceChecks return MonitoredResourceChecksResult.`),e},{});db.debug(`Health checks complete`),this.reportSystemHealth({isAuthenticated:this.user.isAuthenticated,isOnline:r,resources:c,resourcesAllConnected:o,socket:i}),this.isRunningChecks=!1}),this.config.logLevel!==void 0&&(db.level=this.config.logLevel)}create(){if(this.resources){db.warn(`NetworkMonitor already created. If this is intentional, please call NetworkMonitor.destroy first.`);return}this.addListeners(),this.resources=/* @__PURE__ */ new Map,setTimeout(()=>{this.isReady=!0,this.synchroniseCheckInterval(),this.runAllChecks(`NetworkMonitor.create()`)},this.config.startDelay)}destroy(){this.removeListeners(),clearInterval(this.internalId),this.resources.clear(),this.resources=void 0,this.status=void 0,this.isReady=void 0}isOnlineCheck(){return Promise.resolve(navigator.onLine)}addResource(e,t){this.resources||this.create(),this.resources.set(e,t)}removeResource(e){this.resources.delete(e)}addListeners(){var e,t;(e=this.config.windowEvents)==null||e.forEach(e=>window.addEventListener(e,this.runAllChecks)),(t=this.config.documentEvents)==null||t.forEach(e=>document.addEventListener(e,this.runAllChecks)),this.config.genesisConnectEvents.includes(`stream`)&&this.unsubscribableObservers.push(this.connectEvents.addStreamListener(({detail:e})=>{let{functions:t,message:n,resourceName:r,stream:i}=e;this.config.ignoredGenesisResources.includes(r)||this.addResource(i,{functions:t,message:n,resourceName:r})},({detail:e})=>{let{resourceName:t,stream:n}=e;this.config.ignoredGenesisResources.includes(t)||this.removeResource(n)},({detail:e})=>{let{resourceName:t,stream:n,error:r}=e,i=r.receivedMessage??r,a=``;Bg(i,gg.NOT_FOUND)?a=`Please check the resource is running.`:Bg(i,gg.FORBIDDEN)&&(a=`You are not authorised to access this resource, removing it from monitoring.`,this.removeResource(n)),db.error(`${t} errored at ${this.getFormattedTimestamp(this.getNowTimestamp())}.`,a,r)})),this.config.genesisConnectEvents.includes(`commit`)&&this.unsubscribableObservers.push(this.connectEvents.addCommitListener(e=>{this.config.ignoredGenesisResources.includes(e.detail.eventName)||this.runAllChecks(e)})),this.unsubscribableObservers.push(this.connectEvents.addMetadataListener(({detail:e})=>{let{resourceName:t,error:n}=e;if(n){db.error(`${t} had an unrecoverable error at ${this.getFormattedTimestamp(this.getNowTimestamp())}.`,`Please check the resource is running.`,n);return}}))}removeListeners(){var e,t;(e=this.config.windowEvents)==null||e.forEach(e=>window.removeEventListener(e,this.runAllChecks)),(t=this.config.documentEvents)==null||t.forEach(e=>document.removeEventListener(e,this.runAllChecks)),this.unsubscribableObservers.forEach(e=>e()),this.unsubscribableObservers.length=0}reportSystemHealth(e){let t=this.config.eventEmitter??document;this.status=this.normaliseEventDetail(e),(this.status.isHealthy?db.debug:db.warn)(`Emitting 'system-health-changed' event`,mb(this.status)),t?.dispatchEvent(new CustomEvent(`system-health-changed`,{detail:this.status,bubbles:t!==document,composed:!0})),this.status.socket.reconnectionLimitReached&&(db.debug(`Network monitoring no longer required. Please check your network and reload your application.`),this.destroy())}reportStabilityToGenesis(e){return J(this,void 0,void 0,function*(){return db.debug(`User requested report stability to Genesis.`),db.info(`Please attach this data to your Genesis Support request:
@@ -240,7 +240,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
240
240
  setInterval(function() {
241
241
  self.postMessage(Date.now() - startTime);
242
242
  }, ${this.interval});
243
- `}start(e){this.stop(),this.runWorker(e)}stop(){this.worker&&(this.worker.terminate(),delete this.worker)}runWorker(e){this.worker||(this.worker=new Worker(URL.createObjectURL(new Blob([this.workerScript],{type:`text/javascript`}))),this.worker.onmessage=t=>e(t.data))}},ty=class extends zm{constructor(){super()}},ny=class{constructor(e,t,n,r){this._message=e,this._onMessage=t,this._onError=n,this._isSubscription=r}get sentMessage(){return this._message}get onReceivedMessage(){return this._onMessage}get onReceivedError(){return this._onError}get isSubscription(){return this._isSubscription}};let ry=e=>new Promise(t=>{e.addEventListener(`abort`,()=>t(void 0),{once:!0})}),iy=class{get isConfigured(){return this.status.isConfigured}get isConnecting(){return this.status.isConnecting}get isConnected(){return this.status.isConnected}get isConnectedSubject(){return this.status.isConnectedSubject}get isDisconnected(){return this.status.isDisconnected}get isDisconnectedByServer(){return this.status.isDisconnectedByServer}get isReconnecting(){return this.status.isReconnecting}get hasValidSession(){return Y.deprecated(`get hasValidSession`,"Use `User.isAuthenticated` from `@genesislcap/foundation-user` instead.",`15.0.0`),this.user.isAuthenticated}set hasValidSession(e){Y.deprecated(`set hasValidSession`,`Please refrain from calling this API as this state is managed internally.`,`15.0.0`)}get host(){return this.url??Ff}get pendingConnection(){return this.reconnectOutcome??this.attempt}get onCurrentSession(){return this.attemptAuthChanges===this.authChanges}constructor(e,t,n,r,i,a,o){var s,c;this.messageBuilder=e,this.session=t,this.serializer=n,this.uuid=r,this.status=i,this.user=a,this.config=o,this.defaultInterval=1e4,this.secondsMultiplier=1e3,this.sessionCheckTimeout=1e4,this.scdbWasmRequested=!1,this.heartbeatIsEnabled=!0,this.heartbeatInterval=this.defaultInterval,this.authChanges=0,this.attemptAuthChanges=0,this.socketMessages=()=>this.wsMessages,(c=(s=this.user)?.addAuthenticationChangeListener)==null||c.call(s,()=>{this.authChanges+=1})}get scdbDecoder(){return this._scdbDecoder??(this._scdbDecoder=new __(this.metaCache)),this._scdbDecoder}get heartbeatLoggingIsEnabled(){return this.connectOptions?.enableHeartbeatLogging??!1}get messageLoggingIsEnabled(){return this.connectOptions?.enableMessageLogging??!1}connect(e=Ff,t,n){if(this.url=e,this.connectOptions=t??this.config.connect,this.reconnectOptions=n??this.config.reconnect,this.connectOptions?.dataserverEncoding===`SCDB_V1`&&this.ensureScdbWasm(),!this.config.isWebSocketExpression?.test(this.host)){Y.error(`Specified host (${this.host}) is not valid WebSocket url. Connection will not proceed.`),Y.warn(`Make sure the host url starts with wss:// or ws://`);return}this.attemptAuthChanges=this.authChanges;let r=!!this.websocket&&this.isConnected,i=new Promise(e=>{var t;Y.info(`${this.isReconnecting?`Reconnecting`:`Connecting`} to ${this.url}`),this.status.isConnecting=!this.isReconnecting,this.rejectPendingRequests(),(!this.isReconnecting||!this.reconnectOptions?.reconnectStreams)&&this.cleanMessages(),(t=this.socketSubscription)==null||t.unsubscribe();let n=new Gv({url:this.url,openObserver:{next:()=>{this.session.setSessionStorageItem(`hostUrl`,this.url),this.status.isConnected=!0,this.prepareHeartbeat(),Y.info(`WebSocket connection is now open`),e(this.isConnected)}},closeObserver:{next:t=>{if(this.websocket!==n){e(this.connection??!1);return}this.status.onClose(t),this.status.isConnecting=!1,this.rejectPendingRequests(new Eg(`WebSocket connection closed before a reply arrived`,{closeCode:t?.code,closeReason:t?.reason})),this.isDisconnectedByServer&&Y.info(`WebSocket connection was closed due an error - Code: ${t.code} ${t.reason?` | Reason: `+t.reason:``}`),e(this.isConnected)}},serializer:e=>this.serializer.serialize(e),deserializer:e=>this.serializer.deserialize(e)});this.websocket=n;let r=e=>J(this,void 0,void 0,function*(){Cg(e);let t=`Response Message received for SourceRef: ${e.SOURCE_REF} | MessageType: ${e.MESSAGE_TYPE}`;this.logMessageTypeFlow(e.MESSAGE_TYPE,Y.info,t);let{SOURCE_REF:n,MESSAGE_TYPE:r}=e,i=this.getMessageHandler(n,r);if(!i){e.MESSAGE_TYPE===Rg.MSG_NACK&&e.ERROR&&e.ERROR.forEach(t=>{Y.error(vg(`MessageType: ${e.MESSAGE_TYPE} | Error Details:`,t),t)});return}let a=Kg(e);switch(e.MESSAGE_TYPE){case zg.EVENT_LOGIN_AUTH_ACK:this.applyServerHeartbeatInterval(e.DETAILS);break;case Rg.LOGOUT_ACK:i.onReceivedMessage.call(this,e),this.cleanMessages();return;case Rg.LOGON_ACK:this.scdbDecoder.onLogonAck(e,g_(i.sentMessage));return;case Rg.LOGOFF_ACK:break;case Rg.QUERY_UPDATE:i.isSubscription||this.sendDataLogoff(n)}e?.ENCODING===`SCDB_V1`&&this.ensureScdbWasm();try{this.scdbDecoder.onMessage(e,g_(i.sentMessage))}catch(e){Y.error(`Failed to decode ${r} for SourceRef: ${n}`,e);let t={SOURCE_REF:n,MESSAGE_TYPE:Rg.MSG_NACK,ERROR:[{CODE:`SCDB_DECODE_FAILED`,TEXT:String(e?.message??e)}]};i.onReceivedError.call(this,new Tg(t,i.sentMessage)),this.removeMessageHandler(n),this.wsMessages.next(t);return}a?i.onReceivedError.call(this,new Tg(e,i.sentMessage)):i.onReceivedMessage.call(this,e),this.wsMessages.next(e),i.isSubscription||this.removeMessageHandler(n)}),i=e=>{Y.debug(`Error found: `,e),this.reconnect()},a=()=>{if(this.isDisconnectedByServer&&this.connectOptions?.alwaysOn){this.reconnect();return}Y.info(`Connection is now closed`)};this.socketSubscription=this.websocket.subscribe(this.connectOptions?.connectObserver??{next:r,error:i,complete:a}),this.status.isConfigured=!0});return this.connection=i,this.attempt=i,i.then(()=>{this.attempt===i&&(this.attempt=void 0)}),r&&(this.status.isConnected=!1),i}handleExpiredSession(){return J(this,void 0,void 0,function*(){if(this.usesCookieAuth)yield this.handleCookieBasedReauth();else{let e=this.messageBuilder.createRefreshTokenMessage(),t=yield this.send(e);this.session.setAuthResult(t),this.updateSessionAndSubscriptions(t)}})}get usesCookieAuth(){return!this.session.getSessionStorageItem(`refreshToken`)}handleCookieBasedReauth(){return J(this,void 0,void 0,function*(){let e=yield Pv();if(e===Dv.HANDLED_BY_OTHER_TAB){Fv(()=>this.connect(this.url,this.connectOptions,this.reconnectOptions));return}e!==Dv.FAILED&&(yield this.connect(this.url,this.connectOptions,this.reconnectOptions))})}updateSessionAndSubscriptions(e){e?.MESSAGE_TYPE===zg.EVENT_LOGIN_AUTH_ACK&&this.wsMessageHandlers.forEach(t=>{t.isSubscription&&(t.sentMessage.SESSION_AUTH_TOKEN=e.SESSION_AUTH_TOKEN,this.websocket.next(t.sentMessage))})}applyServerHeartbeatInterval(e){let t=e?.HEARTBEAT_INTERVAL_SECONDS??0;t>0&&this.connectOptions?.heartbeatInterval===void 0&&(this.heartbeatInterval=t*this.secondsMultiplier,this.prepareHeartbeat())}prepareHeartbeat(){this.heartbeatTicker&&this.heartbeatTicker.stop();let e=this.connectOptions?.heartbeatInterval??this.heartbeatInterval,t=()=>J(this,void 0,void 0,function*(){if(!this.isConnected)return;let t=this.messageBuilder.createHeartbeatPingMessage(this.connectOptions?.verboseHeartbeat);this.connectOptions?.heartbeatPingCallback&&this.connectOptions.heartbeatPingCallback(t);let n;try{n=yield this.send(t,!0,{timeout:e})}catch(e){Y.debug(`Heartbeat ping got no pong: `,e);return}this.user.isAuthenticated&&!n.IS_AUTHENTICATED&&this.handleExpiredSession().catch(e=>Y.debug(`Could not refresh the expired session: `,e)),this.connectOptions?.heartbeatPongCallback&&this.connectOptions.heartbeatPongCallback(n),this.heartbeatIsEnabled=n.MESSAGE_TYPE===Rg.HEARTBEAT_PONG&&n.SOURCE_REF===t.SOURCE_REF});(this.connectOptions?.enableHeartbeat??this.heartbeatIsEnabled)&&(this.heartbeatTicker=new ey(e),this.heartbeatTicker.start(()=>{this.websocket&&this.isConnected&&(t(),this.heartbeatLoggingIsEnabled&&Y.debug(`Sending a heartbeat ping every ${e} ms`))}))}reconnect(){let e=!this.connectOptions?.alwaysOn&&this.connectOptions?.enableHeartbeat===!1;if(this.isReconnecting||e)return;this.status.isReconnecting=!0;let t=this.reconnectOptions?.reconnectStrategy===Jv.Exponential?Xv:Zv,n,r=new Promise(e=>{n=e});this.reconnectOutcome=r;let i=this.isConnectedSubject.asObservable().pipe(Nh(e=>e?bh(-1):Yv(this.reconnectOptions,t).pipe(kh((e,t)=>{let n=this.connectOptions?.alwaysOn?t+1:this.reconnectOptions?.reconnectAttempts??10;return t>=n?(this.status.reconnectionLimitReached=!0,xh(()=>/* @__PURE__ */ Error(`Max reconnect attempts ${n} reached.`))):e>0&&this.user.isAuthenticated&&this.usesCookieAuth?yh(this.refreshSessionBeforeReconnect()).pipe(Ch(()=>t)):bh(t)}))),Ph(()=>this.websocket&&!this.isConnected),Ah(()=>{this.reconnectOutcome===r&&(this.reconnectOutcome=void 0),n(this.isConnected)}));this.reconnectLoop=i.subscribe(this.reconnectOptions?.reconnectObserver??{next:e=>{Y.debug(`Attempt no. ${e+1} to reconnect`),this.websocket.complete(),this.connect(this.url,this.connectOptions,this.reconnectOptions)},error:e=>{var t;Y.debug(e),(t=this.socketSubscription)==null||t.unsubscribe(),this.status.isReconnecting=!1},complete:()=>{Y.info(this.isConnected?`Reconnected`:`Disconnected`),this.status.isReconnecting=!1,this.wsMessageHandlers.forEach(e=>{e.isSubscription&&this.websocket.next(e.sentMessage)})}})}refreshSessionBeforeReconnect(){return J(this,void 0,void 0,function*(){let e=AbortSignal.timeout(this.sessionCheckTimeout),t=yield Promise.race([Pv({reloadOnFailure:!1,signal:e}),ry(e)]).catch(e=>{Y.debug(`Could not check the session before reconnecting: `,e)});if(t===Dv.FAILED)throw this.reloadPage(),Error(`Session expired and could not be refreshed.`);t===Dv.HANDLED_BY_OTHER_TAB&&(yield Iv(e))})}reloadPage(){window.location.reload()}reset(){var e,t;this.status.isConnected=!1,this.status.isConfigured=!1,this.status.isReconnecting=!1,(e=this.reconnectLoop)==null||e.unsubscribe(),(t=this.socketSubscription)==null||t.unsubscribe(),this.websocket&&this.websocket.complete(),this.websocket=null,this.attempt=void 0,this.connection=void 0,this.cleanMessages()}cleanMessages(){this.rejectPendingRequests(),this.wsMessages&&this.wsMessages.complete(),this.wsMessages=new ty,this.wsMessageHandlers=/* @__PURE__ */ new Map,this.scdbDecoder.clear()}rejectPendingRequests(e=new Eg(`WebSocket connection closed before a reply arrived`)){var t;(t=this.wsMessageHandlers)==null||t.forEach((t,n)=>{t.isSubscription||(this.wsMessageHandlers.delete(n),t.onReceivedError.call(this,e))})}send(e,t=!0,n){let r=Jg(n?.signal);if(r)return r;if(!this.isConnected)return Promise.reject(new Eg(`WebSocket connection is closed`));let i=`Sending Message for SourceRef: ${e.SOURCE_REF} | MessageType: ${e.MESSAGE_TYPE}`;this.logMessageTypeFlow(e.MESSAGE_TYPE,Y.info,i),this.scdbDecoder.prepareRequest(e);let a=new Promise((n,r)=>{t&&this.setMessageHandler(e,n,r),this.websocket.next(e)});return t?qg(a,{timeout:n?.timeout??this.connectOptions?.requestTimeout,signal:n?.signal},()=>this.removeMessageHandler(e.SOURCE_REF)):a}sendForStream(e,t,n,r){if(!this.isConnected)return xh(()=>new Eg(`WebSocket connection is closed`));let i=`Sending Message (stream) for SourceRef: ${e.SOURCE_REF} | MessageType: ${e.MESSAGE_TYPE}`;this.logMessageTypeFlow(e.MESSAGE_TYPE,Y.info,i),this.scdbDecoder.prepareRequest(e),this.setMessageHandler(e,t,n,!0);let a=!1,o=!1;return x.queueUpdate(()=>{o||(a=!0,this.websocket.next(e))}),new Mm(t=>{let n=this.wsMessages.pipe(Oh(t=>t.SOURCE_REF===e.SOURCE_REF)).subscribe({next:e=>{t.next(e)},error:e=>{t.error(e)},complete:()=>{t.complete()}});return()=>{o=!0,n.unsubscribe(),a&&this.sendDataLogoff(e.SOURCE_REF),this.removeMessageHandler(e.SOURCE_REF),r&&r()}})}sendForStreamWithoutTeardown(e,t,n){if(!this.isConnected)return xh(()=>new Eg(`WebSocket connection is closed`));let r=`Sending Message (stream) for SourceRef: ${e.SOURCE_REF} | MessageType: ${e.MESSAGE_TYPE}`;return this.logMessageTypeFlow(e.MESSAGE_TYPE,Y.info,r),this.scdbDecoder.prepareRequest(e),this.setMessageHandler(e,t,n,!0),this.websocket.next(e),this.wsMessages.pipe(Oh(t=>t.SOURCE_REF===e.SOURCE_REF))}setMessageHandler(e,t,n,r=!1){let i=`Setting Message Handler for SourceRef: ${e.SOURCE_REF} | MessageType: ${e.MESSAGE_TYPE}`;this.logMessageTypeFlow(e.MESSAGE_TYPE,Y.debug,i),this.wsMessageHandlers.set(e.SOURCE_REF,new ny(e,t,n,r))}sendDataLogoff(e){this.send(this.messageBuilder.createDataLogoffMessage(e),!1).catch(t=>Y.debug(`DATA_LOGOFF not sent for SourceRef: ${e}`,t))}removeMessageHandler(e){this.wsMessageHandlers.delete(e)}setScdbMetadataRefresher(e){this.scdbDecoder.setMetadataRefresher(e)}ensureScdbWasm(){this.scdbWasmRequested||(this.scdbWasmRequested=!0,Pae().then(e=>this.scdbDecoder.setWasm(e)).catch(e=>Y.warn(`SCDB WASM decoder unavailable, using pure-JS decoder`,e)))}getMessageHandler(e,t){let n=`Getting Message Handler for SourceRef: ${e} | MessageType: ${t}`;return this.logMessageTypeFlow(t,Y.debug,n),this.wsMessageHandlers.get(e)}logMessageTypeFlow(e,t,n){switch(e){case zg.DATA_LOGOFF:t(n);break;case Rg.HEARTBEAT_PING:case Rg.HEARTBEAT_PONG:this.heartbeatLoggingIsEnabled&&t(n);break;default:this.messageLoggingIsEnabled&&t(n)}}};q([C],iy.prototype,`websocket`,void 0),q([C],iy.prototype,`wsMessages`,void 0),q([C],iy.prototype,`wsMessageHandlers`,void 0),q([Fg],iy.prototype,`http`,void 0),q([fg],iy.prototype,`metaCache`,void 0),q([C],iy.prototype,`heartbeatIsEnabled`,void 0),iy=q([cd(0,Gg),cd(1,jg),cd(2,lm),cd(3,sg),cd(4,$v),cd(5,dg),cd(6,Ag)],iy);let ay=N.createInterface(e=>e.singleton(iy));function oy(){return N.getOrCreateDOMContainer().get(ay)}let sy=class{get isConnected(){return this.socket.isConnected}get isConnectedSubject(){return this.socket.isConnectedSubject}get isConnected$(){return this.socket.isConnectedSubject?.asObservable()}get host(){return this.socket.host}constructor(e,t,n,r,i,a){var o,s;this.socket=e,this.messageBuilder=t,this.metaCache=n,this.events=r,this.config=i,this.transport=a,this.isWorking=!1,this.inFlightMetadata=new Xg,this.inFlightRequests=new Xg;let c=this.config.connect?.dataserverEncoding;c&&(this.messageBuilder.scdbEncoding=c),this.httpScdbDecoder=new __(this.metaCache);let l=e=>this.getMetadata(e,!1);(s=(o=this.socket).setScdbMetadataRefresher)==null||s.call(o,l),this.httpScdbDecoder.setMetadataRefresher(l)}httpMode(){return!1}get useHttpReqRep(){return Pf===`true`||Af(`forceHttpReqRep`)}get httpHost(){return this.transport.toHttpHost(this.socket.host)}requestOverHttp(e,t){return J(this,void 0,void 0,function*(){let n=g_(e);this.httpScdbDecoder.prepareRequest(e);let r=yield this.transport.requestServer(this.httpHost,e,t);return this.httpScdbDecoder.onMessage(r,n),r})}sendReqRep(e,t){return this.useHttpReqRep?this.transport.post(this.httpHost,e,t):this.socket.send(e,!0,t)}setValidSession(e){Y.deprecated(`setValidSession`,`Please refrain from calling this API as this state is managed internally.`,`15.0.0`)}send(e,t,n){return this.socket.send(e,t,n)}connect(){return J(this,arguments,void 0,function*(e=Ff){if(this.socket.host===e&&this.socket.onCurrentSession!==!1){if(this.isConnected)return!0;let e=this.socket.pendingConnection;if(e)return e}return this.socket.reset(),this.socket.connect(e,this.config.connect,this.config.reconnect)})}disconnect(){this.socket.reset()}snapshot(e,t){return J(this,void 0,void 0,function*(){let n=this.messageBuilder.createDataLogonMessage(e,t);return Y.debug(`${n.MESSAGE_TYPE} (snapshot) message created -> `,n),this.socket.send(n)})}stream(e,t,n,r){let i=this.messageBuilder.createDataLogonMessage(e,r);Y.debug(`${i.MESSAGE_TYPE} (stream) message created -> `,i);let a=performance.now(),o=null,s=this.socket.sendForStream(i,(...n)=>{o===null&&(o=performance.now(),Y.debug(`[stream:${e}] time to initial response: ${(o-a).toFixed(2)}ms`)),t(...n)},t=>{n(t),this.events.onStreamErrorEvent(e,s,t)},()=>{this.events.onStreamCompleteEvent(e,s)});return this.events.onStreamEvent(e,i,s,{onMessage:t,onError:n}),s}streamState(e,t=()=>{},n=()=>{},r,i=[]){return this.stream(e,t,n,r).pipe(jh(Lv,i))}streamWithoutAutoTeardown(e,t,n,r){Y.deprecated(`streamWithoutAutoTeardown`,`Please use 'stream' api instead.`,`15.0.0`);let i=this.messageBuilder.createDataLogonMessage(e,r);Y.debug(`${i.MESSAGE_TYPE} (stream without auto-teardown) message created -> `,i);let a=this.socket.sendForStreamWithoutTeardown(i,t,t=>{n(t),this.events.onStreamErrorEvent(e,a,t)});return this.events.onStreamEvent(e,i,a,{onMessage:t,onError:n}),a}getMoreRows(e,t){return J(this,void 0,void 0,function*(){let n=this.messageBuilder.createMoreRowsMessage(e,t);return Y.debug(`${n.MESSAGE_TYPE} message created -> `,n),this.socket.send(n,!1)})}getMoreColumns(e){return J(this,void 0,void 0,function*(){let t=this.messageBuilder.createMoreColumnsMessage(e);return this.socket.send(t)})}dataLogoff(e){return J(this,void 0,void 0,function*(){let t=this.messageBuilder.createDataLogoffMessage(e);return Y.debug(`${t.MESSAGE_TYPE} message created -> `,t),this.socket.send(t)})}getMetadata(e){return J(this,arguments,void 0,function*(e,t=!0,n){return t&&this.metaCache.hasMetadataFor(e)?(Y.debug(`Cached metadata retrieved for ${e}`),this.metaCache.getMetadataFor(e)):(this.inFlightMetadata.has(e)&&Y.debug(`In-flight metadata request collapsed for ${e}`),this.inFlightMetadata.join(e,t=>this.fetchMetadata(e,t),this.callerOptions(n)))})}fetchMetadata(e,t){return J(this,void 0,void 0,function*(){let n=this.messageBuilder.createMetaRequestMessage(e);Y.debug(`${n.MESSAGE_TYPE} (metadata) message created -> `,n);let r,i;try{this.isWorking=!0,r=(yield this.sendReqRep(n,{timeout:0,signal:t}))?.DETAILS??{},Object.keys(r).length&&this.metaCache.setMetadataFor(e,r)}catch(t){throw i=t,Y.error(vg(`Metadata request failed for ${e}`,t),t),ly(t)}finally{this.events.onMetadataEvent(e,n,i),this.isWorking=!1}return r})}getJSONSchema(e){return J(this,arguments,void 0,function*(e,t=!0){if(t&&this.metaCache.hasJsonSchemaFor(e))return Y.debug(`Cached JsonSchema retrieved for ${e}`),this.metaCache.getJsonSchemaFor(e);let n=this.messageBuilder.createMetaRequestMessage(e,zg.JSON_SCHEMA_REQUEST);Y.debug(`${n.MESSAGE_TYPE} (json schema) message created -> `,n);let r;try{this.isWorking=!0,r=(yield this.sendReqRep(n))??{},Object.keys(r).length&&this.metaCache.setJsonSchemaFor(e,r)}catch(t){Y.error(vg(`JSON schema request failed for ${e}`,t),t)}finally{this.isWorking=!1}return r})}callerOptions(e){let t=this.useHttpReqRep?void 0:this.config.connect?.requestTimeout;return{timeout:e?.timeout??t,signal:e?.signal}}request(e,t){return J(this,arguments,void 0,function*(e,t,n=!1,r){let i=Hg(e,t);if(n&&this.metaCache.hasRequestFor(i))return Y.debug(`Cached request response retrieved for ${i}`),this.metaCache.getRequestFor(i);this.inFlightRequests.has(i)&&Y.debug(`In-flight request collapsed for ${i}`);let a=yield this.inFlightRequests.join(i,n=>this.sendRequest(e,t,n),this.callerOptions(r));return n&&a&&this.metaCache.setRequestFor(i,a),a})}sendRequest(e,t,n){let r=this.messageBuilder.createRequestMessage(e,t);Y.debug(`${r.MESSAGE_TYPE} (request server) message created -> `,r);let i={timeout:0,signal:n};return this.useHttpReqRep?this.requestOverHttp(r,i):this.socket.send(r,!0,i)}getAvailableResources(e){return J(this,arguments,void 0,function*(e,t=!0){if(t&&this.metaCache.hasResources())return Y.debug(`Cached resources retrieved`),this.metaCache.getResources();let n=this.messageBuilder.createResourcesMessage(e);Y.debug(`${n.MESSAGE_TYPE} (resources) message created -> `,n);let r=yield this.sendReqRep(n);return this.metaCache.setResources(r),r})}commitEvent(e,t,n){return J(this,void 0,void 0,function*(){let r=this.messageBuilder.createCommitMessage(e,t);Y.debug(`${r.MESSAGE_TYPE} (commit) message created -> `,r);let i=this.sendReqRep(r,n);return this.events.onCommitEvent(e,r),i.then(t=>(this.events.onCommitResponseEvent(e,t),Yg(t,r,n)))})}};q([C],sy.prototype,`isWorking`,void 0),sy=q([cd(0,ay),cd(1,Gg),cd(2,fg),cd(3,uae),cd(4,Ag),cd(5,$g)],sy);let cy=e=>typeof e?.receivedMessage==`object`,ly=e=>e instanceof Error?e:cy(e)?new Tg(e.receivedMessage,e.sentMessage):Error(String(e)),uy=Nf===`true`||Af(`forceHttp`),dy=N.createInterface(e=>e.singleton(sy)),fy=N.createInterface(e=>uy?e.aliasTo(Hv):e.aliasTo(dy));function py(){return N.getOrCreateDOMContainer().get(fy)}var my=class{serialize(e){return Y.deprecated(`serialize`,"Use `serialize` from `JSONSerializer` from `@genesislcap/foundation-utils` instead."),JSON.stringify(e)}deserialize(e){return Y.deprecated(`deserialize`,"Use `deserialize` from `JSONSerializer` from `@genesislcap/foundation-utils` instead."),e?typeof e==`string`?JSON.parse(e):e.data?JSON.parse(e.data):e.text().then(e=>JSON.parse(e)):Promise.resolve({})}};N.createInterface(e=>e.singleton(my));
243
+ `}start(e){this.stop(),this.runWorker(e)}stop(){this.worker&&(this.worker.terminate(),delete this.worker)}runWorker(e){this.worker||(this.worker=new Worker(URL.createObjectURL(new Blob([this.workerScript],{type:`text/javascript`}))),this.worker.onmessage=t=>e(t.data))}},ty=class extends zm{constructor(){super()}},ny=class{constructor(e,t,n,r){this._message=e,this._onMessage=t,this._onError=n,this._isSubscription=r}get sentMessage(){return this._message}get onReceivedMessage(){return this._onMessage}get onReceivedError(){return this._onError}get isSubscription(){return this._isSubscription}};let ry=e=>new Promise(t=>{e.addEventListener(`abort`,()=>t(void 0),{once:!0})}),iy=class{get isConfigured(){return this.status.isConfigured}get isConnecting(){return this.status.isConnecting}get isConnected(){return this.status.isConnected}get isConnectedSubject(){return this.status.isConnectedSubject}get isDisconnected(){return this.status.isDisconnected}get isDisconnectedByServer(){return this.status.isDisconnectedByServer}get isReconnecting(){return this.status.isReconnecting}get hasValidSession(){return Y.deprecated(`get hasValidSession`,"Use `User.isAuthenticated` from `@genesislcap/foundation-user` instead.",`15.0.0`),this.user.isAuthenticated}set hasValidSession(e){Y.deprecated(`set hasValidSession`,`Please refrain from calling this API as this state is managed internally.`,`15.0.0`)}get host(){return this.url??Ff}get pendingConnection(){return this.reconnectOutcome??this.attempt}get onCurrentSession(){return this.attemptAuthChanges===this.authChanges}constructor(e,t,n,r,i,a,o){var s,c;this.messageBuilder=e,this.session=t,this.serializer=n,this.uuid=r,this.status=i,this.user=a,this.config=o,this.defaultInterval=1e4,this.secondsMultiplier=1e3,this.sessionCheckTimeout=1e4,this.scdbWasmRequested=!1,this.heartbeatIsEnabled=!0,this.heartbeatInterval=this.defaultInterval,this.authChanges=0,this.attemptAuthChanges=0,this.socketMessages=()=>this.wsMessages,(c=(s=this.user)?.addAuthenticationChangeListener)==null||c.call(s,()=>{this.authChanges+=1})}get scdbDecoder(){return this._scdbDecoder??(this._scdbDecoder=new __(this.metaCache)),this._scdbDecoder}get heartbeatLoggingIsEnabled(){return this.connectOptions?.enableHeartbeatLogging??!1}get messageLoggingIsEnabled(){return this.connectOptions?.enableMessageLogging??!1}connect(e=Ff,t,n){if(this.url=e,this.connectOptions=t??this.config.connect,this.reconnectOptions=n??this.config.reconnect,this.connectOptions?.dataserverEncoding===`SCDB_V1`&&this.ensureScdbWasm(),!this.config.isWebSocketExpression?.test(this.host)){Y.error(`Specified host (${this.host}) is not valid WebSocket url. Connection will not proceed.`),Y.warn(`Make sure the host url starts with wss:// or ws://`);return}this.attemptAuthChanges=this.authChanges;let r=!!this.websocket&&this.isConnected,i=new Promise(e=>{var t;Y.info(`${this.isReconnecting?`Reconnecting`:`Connecting`} to ${this.url}`),this.status.isConnecting=!this.isReconnecting,this.rejectPendingRequests(),(!this.isReconnecting||!this.reconnectOptions?.reconnectStreams)&&this.cleanMessages(),(t=this.socketSubscription)==null||t.unsubscribe();let n=new Gv({url:this.url,openObserver:{next:()=>{this.session.setSessionStorageItem(`hostUrl`,this.url),this.status.isConnected=!0,this.prepareHeartbeat(),Y.info(`WebSocket connection is now open`),e(this.isConnected)}},closeObserver:{next:t=>{if(this.websocket!==n){e(this.connection??!1);return}this.status.onClose(t),this.status.isConnecting=!1,this.rejectPendingRequests(new Eg(`WebSocket connection closed before a reply arrived`,{closeCode:t?.code,closeReason:t?.reason})),this.isDisconnectedByServer&&Y.info(`WebSocket connection was closed due an error - Code: ${t.code} ${t.reason?` | Reason: `+t.reason:``}`),e(this.isConnected)}},serializer:e=>this.serializer.serialize(e),deserializer:e=>this.serializer.deserialize(e)});this.websocket=n;let r=e=>J(this,void 0,void 0,function*(){Cg(e);let t=`Response Message received for SourceRef: ${e.SOURCE_REF} | MessageType: ${e.MESSAGE_TYPE}`;this.logMessageTypeFlow(e.MESSAGE_TYPE,Y.info,t);let{SOURCE_REF:n,MESSAGE_TYPE:r}=e,i=this.getMessageHandler(n,r);if(!i){e.MESSAGE_TYPE===Rg.MSG_NACK&&e.ERROR&&e.ERROR.forEach(t=>{Y.error(vg(`MessageType: ${e.MESSAGE_TYPE} | Error Details:`,t),t)});return}let a=Kg(e);switch(e.MESSAGE_TYPE){case zg.EVENT_LOGIN_AUTH_ACK:this.applyServerHeartbeatInterval(e.DETAILS);break;case Rg.LOGOUT_ACK:i.onReceivedMessage.call(this,e),this.cleanMessages();return;case Rg.LOGON_ACK:this.scdbDecoder.onLogonAck(e,g_(i.sentMessage));return;case Rg.LOGOFF_ACK:break;case Rg.QUERY_UPDATE:i.isSubscription||this.sendDataLogoff(n)}e?.ENCODING===`SCDB_V1`&&this.ensureScdbWasm();try{this.scdbDecoder.onMessage(e,g_(i.sentMessage))}catch(e){Y.error(`Failed to decode ${r} for SourceRef: ${n}`,e);let t={SOURCE_REF:n,MESSAGE_TYPE:Rg.MSG_NACK,ERROR:[{CODE:`SCDB_DECODE_FAILED`,TEXT:String(e?.message??e)}]};i.onReceivedError.call(this,new Tg(t,i.sentMessage)),this.removeMessageHandler(n),this.wsMessages.next(t);return}a?i.onReceivedError.call(this,new Tg(e,i.sentMessage)):i.onReceivedMessage.call(this,e),this.wsMessages.next(e),i.isSubscription||this.removeMessageHandler(n)}),i=e=>{Y.debug(`Error found: `,e),this.reconnect()},a=()=>{if(this.isDisconnectedByServer&&this.connectOptions?.alwaysOn){this.reconnect();return}Y.info(`Connection is now closed`)};this.socketSubscription=this.websocket.subscribe(this.connectOptions?.connectObserver??{next:r,error:i,complete:a}),this.status.isConfigured=!0});return this.connection=i,this.attempt=i,i.then(()=>{this.attempt===i&&(this.attempt=void 0)}),r&&(this.status.isConnected=!1),i}handleExpiredSession(){return J(this,void 0,void 0,function*(){if(this.usesCookieAuth)yield this.handleCookieBasedReauth();else{let e=this.messageBuilder.createRefreshTokenMessage(),t=yield this.send(e);this.session.setAuthResult(t),this.updateSessionAndSubscriptions(t)}})}get usesCookieAuth(){return!this.session.getSessionStorageItem(`refreshToken`)}handleCookieBasedReauth(){return J(this,void 0,void 0,function*(){let e=yield Pv();if(e===Dv.HANDLED_BY_OTHER_TAB){Fv(()=>this.connect(this.url,this.connectOptions,this.reconnectOptions));return}e!==Dv.FAILED&&(yield this.connect(this.url,this.connectOptions,this.reconnectOptions))})}updateSessionAndSubscriptions(e){e?.MESSAGE_TYPE===zg.EVENT_LOGIN_AUTH_ACK&&this.wsMessageHandlers.forEach(t=>{t.isSubscription&&(t.sentMessage.SESSION_AUTH_TOKEN=e.SESSION_AUTH_TOKEN,this.websocket.next(t.sentMessage))})}applyServerHeartbeatInterval(e){let t=e?.HEARTBEAT_INTERVAL_SECONDS??0;t>0&&this.connectOptions?.heartbeatInterval===void 0&&(this.heartbeatInterval=t*this.secondsMultiplier,this.prepareHeartbeat())}prepareHeartbeat(){this.heartbeatTicker&&this.heartbeatTicker.stop();let e=this.connectOptions?.heartbeatInterval??this.heartbeatInterval,t=()=>J(this,void 0,void 0,function*(){if(!this.isConnected)return;let t=this.messageBuilder.createHeartbeatPingMessage(this.connectOptions?.verboseHeartbeat);this.connectOptions?.heartbeatPingCallback&&this.connectOptions.heartbeatPingCallback(t);let n;try{n=yield this.send(t,!0,{timeout:e})}catch(e){Y.debug(`Heartbeat ping got no pong: `,e);return}this.user.isAuthenticated&&!n.IS_AUTHENTICATED&&this.handleExpiredSession().catch(e=>Y.debug(`Could not refresh the expired session: `,e)),this.connectOptions?.heartbeatPongCallback&&this.connectOptions.heartbeatPongCallback(n),this.heartbeatIsEnabled=n.MESSAGE_TYPE===Rg.HEARTBEAT_PONG&&n.SOURCE_REF===t.SOURCE_REF});(this.connectOptions?.enableHeartbeat??this.heartbeatIsEnabled)&&(this.heartbeatTicker=new ey(e),this.heartbeatTicker.start(()=>{this.websocket&&this.isConnected&&(t(),this.heartbeatLoggingIsEnabled&&Y.debug(`Sending a heartbeat ping every ${e} ms`))}))}reconnect(){let e=!this.connectOptions?.alwaysOn&&this.connectOptions?.enableHeartbeat===!1;if(this.isReconnecting||e)return;this.status.isReconnecting=!0;let t=this.reconnectOptions?.reconnectStrategy===Jv.Exponential?Xv:Zv,n,r=new Promise(e=>{n=e});this.reconnectOutcome=r;let i=!1,a=this.isConnectedSubject.asObservable().pipe(Nh(e=>e?bh(-1):Yv(this.reconnectOptions,t).pipe(kh((e,t)=>{let n=this.connectOptions?.alwaysOn?t+1:this.reconnectOptions?.reconnectAttempts??10;return t>=n?(this.status.reconnectionLimitReached=!0,i=!0,xh(()=>/* @__PURE__ */ Error(`Max reconnect attempts ${n} reached.`))):e>0&&this.user.isAuthenticated&&this.usesCookieAuth?yh(this.refreshSessionBeforeReconnect()).pipe(Ch(()=>t)):bh(t)}))),Ph(()=>this.websocket&&!this.isConnected),Ah(()=>{this.reconnectOutcome===r&&(this.reconnectOutcome=void 0),n(this.isConnected),i&&this.notifyReconnectionLimitReached()}));this.reconnectLoop=a.subscribe(this.reconnectOptions?.reconnectObserver??{next:e=>{Y.debug(`Attempt no. ${e+1} to reconnect`),this.websocket.complete(),this.connect(this.url,this.connectOptions,this.reconnectOptions)},error:e=>{var t;Y.debug(e),(t=this.socketSubscription)==null||t.unsubscribe(),this.status.isReconnecting=!1},complete:()=>{Y.info(this.isConnected?`Reconnected`:`Disconnected`),this.status.isReconnecting=!1,this.wsMessageHandlers.forEach(e=>{e.isSubscription&&this.websocket.next(e.sentMessage)})}})}notifyReconnectionLimitReached(){Promise.resolve().then(()=>{var e;return((e=this.reconnectOptions)?.onReconnectionLimitReached)?.call(e)}).catch(e=>Y.error(`onReconnectionLimitReached failed: `,e))}refreshSessionBeforeReconnect(){return J(this,void 0,void 0,function*(){let e=AbortSignal.timeout(this.sessionCheckTimeout),t=yield Promise.race([Pv({reloadOnFailure:!1,signal:e}),ry(e)]).catch(e=>{Y.debug(`Could not check the session before reconnecting: `,e)});if(t===Dv.FAILED)throw this.reloadPage(),Error(`Session expired and could not be refreshed.`);t===Dv.HANDLED_BY_OTHER_TAB&&(yield Iv(e))})}reloadPage(){window.location.reload()}reset(){var e,t;this.status.isConnected=!1,this.status.isConfigured=!1,this.status.isReconnecting=!1,(e=this.reconnectLoop)==null||e.unsubscribe(),(t=this.socketSubscription)==null||t.unsubscribe(),this.websocket&&this.websocket.complete(),this.websocket=null,this.attempt=void 0,this.connection=void 0,this.cleanMessages()}cleanMessages(){this.rejectPendingRequests(),this.wsMessages&&this.wsMessages.complete(),this.wsMessages=new ty,this.wsMessageHandlers=/* @__PURE__ */ new Map,this.scdbDecoder.clear()}rejectPendingRequests(e=new Eg(`WebSocket connection closed before a reply arrived`)){var t;(t=this.wsMessageHandlers)==null||t.forEach((t,n)=>{t.isSubscription||(this.wsMessageHandlers.delete(n),t.onReceivedError.call(this,e))})}send(e,t=!0,n){let r=Jg(n?.signal);if(r)return r;if(!this.isConnected)return Promise.reject(new Eg(`WebSocket connection is closed`));let i=`Sending Message for SourceRef: ${e.SOURCE_REF} | MessageType: ${e.MESSAGE_TYPE}`;this.logMessageTypeFlow(e.MESSAGE_TYPE,Y.info,i),this.scdbDecoder.prepareRequest(e);let a=new Promise((n,r)=>{t&&this.setMessageHandler(e,n,r),this.websocket.next(e)});return t?qg(a,{timeout:n?.timeout??this.connectOptions?.requestTimeout,signal:n?.signal},()=>this.removeMessageHandler(e.SOURCE_REF)):a}sendForStream(e,t,n,r){if(!this.isConnected)return xh(()=>new Eg(`WebSocket connection is closed`));let i=`Sending Message (stream) for SourceRef: ${e.SOURCE_REF} | MessageType: ${e.MESSAGE_TYPE}`;this.logMessageTypeFlow(e.MESSAGE_TYPE,Y.info,i),this.scdbDecoder.prepareRequest(e),this.setMessageHandler(e,t,n,!0);let a=!1,o=!1;return x.queueUpdate(()=>{o||(a=!0,this.websocket.next(e))}),new Mm(t=>{let n=this.wsMessages.pipe(Oh(t=>t.SOURCE_REF===e.SOURCE_REF)).subscribe({next:e=>{t.next(e)},error:e=>{t.error(e)},complete:()=>{t.complete()}});return()=>{o=!0,n.unsubscribe(),a&&this.sendDataLogoff(e.SOURCE_REF),this.removeMessageHandler(e.SOURCE_REF),r&&r()}})}sendForStreamWithoutTeardown(e,t,n){if(!this.isConnected)return xh(()=>new Eg(`WebSocket connection is closed`));let r=`Sending Message (stream) for SourceRef: ${e.SOURCE_REF} | MessageType: ${e.MESSAGE_TYPE}`;return this.logMessageTypeFlow(e.MESSAGE_TYPE,Y.info,r),this.scdbDecoder.prepareRequest(e),this.setMessageHandler(e,t,n,!0),this.websocket.next(e),this.wsMessages.pipe(Oh(t=>t.SOURCE_REF===e.SOURCE_REF))}setMessageHandler(e,t,n,r=!1){let i=`Setting Message Handler for SourceRef: ${e.SOURCE_REF} | MessageType: ${e.MESSAGE_TYPE}`;this.logMessageTypeFlow(e.MESSAGE_TYPE,Y.debug,i),this.wsMessageHandlers.set(e.SOURCE_REF,new ny(e,t,n,r))}sendDataLogoff(e){this.send(this.messageBuilder.createDataLogoffMessage(e),!1).catch(t=>Y.debug(`DATA_LOGOFF not sent for SourceRef: ${e}`,t))}removeMessageHandler(e){this.wsMessageHandlers.delete(e)}setScdbMetadataRefresher(e){this.scdbDecoder.setMetadataRefresher(e)}ensureScdbWasm(){this.scdbWasmRequested||(this.scdbWasmRequested=!0,Pae().then(e=>this.scdbDecoder.setWasm(e)).catch(e=>Y.warn(`SCDB WASM decoder unavailable, using pure-JS decoder`,e)))}getMessageHandler(e,t){let n=`Getting Message Handler for SourceRef: ${e} | MessageType: ${t}`;return this.logMessageTypeFlow(t,Y.debug,n),this.wsMessageHandlers.get(e)}logMessageTypeFlow(e,t,n){switch(e){case zg.DATA_LOGOFF:t(n);break;case Rg.HEARTBEAT_PING:case Rg.HEARTBEAT_PONG:this.heartbeatLoggingIsEnabled&&t(n);break;default:this.messageLoggingIsEnabled&&t(n)}}};q([C],iy.prototype,`websocket`,void 0),q([C],iy.prototype,`wsMessages`,void 0),q([C],iy.prototype,`wsMessageHandlers`,void 0),q([Fg],iy.prototype,`http`,void 0),q([fg],iy.prototype,`metaCache`,void 0),q([C],iy.prototype,`heartbeatIsEnabled`,void 0),iy=q([cd(0,Gg),cd(1,jg),cd(2,lm),cd(3,sg),cd(4,$v),cd(5,dg),cd(6,Ag)],iy);let ay=N.createInterface(e=>e.singleton(iy));function oy(){return N.getOrCreateDOMContainer().get(ay)}let sy=class{get isConnected(){return this.socket.isConnected}get isConnectedSubject(){return this.socket.isConnectedSubject}get isConnected$(){return this.socket.isConnectedSubject?.asObservable()}get host(){return this.socket.host}constructor(e,t,n,r,i,a){var o,s;this.socket=e,this.messageBuilder=t,this.metaCache=n,this.events=r,this.config=i,this.transport=a,this.isWorking=!1,this.inFlightMetadata=new Xg,this.inFlightRequests=new Xg;let c=this.config.connect?.dataserverEncoding;c&&(this.messageBuilder.scdbEncoding=c),this.httpScdbDecoder=new __(this.metaCache);let l=e=>this.getMetadata(e,!1);(s=(o=this.socket).setScdbMetadataRefresher)==null||s.call(o,l),this.httpScdbDecoder.setMetadataRefresher(l)}httpMode(){return!1}get useHttpReqRep(){return Pf===`true`||Af(`forceHttpReqRep`)}get httpHost(){return this.transport.toHttpHost(this.socket.host)}requestOverHttp(e,t){return J(this,void 0,void 0,function*(){let n=g_(e);this.httpScdbDecoder.prepareRequest(e);let r=yield this.transport.requestServer(this.httpHost,e,t);return this.httpScdbDecoder.onMessage(r,n),r})}sendReqRep(e,t){return this.useHttpReqRep?this.transport.post(this.httpHost,e,t):this.socket.send(e,!0,t)}setValidSession(e){Y.deprecated(`setValidSession`,`Please refrain from calling this API as this state is managed internally.`,`15.0.0`)}send(e,t,n){return this.socket.send(e,t,n)}connect(){return J(this,arguments,void 0,function*(e=Ff){if(this.socket.host===e&&this.socket.onCurrentSession!==!1){if(this.isConnected)return!0;let e=this.socket.pendingConnection;if(e)return e}return this.socket.reset(),this.socket.connect(e,this.config.connect,this.config.reconnect)})}disconnect(){this.socket.reset()}snapshot(e,t){return J(this,void 0,void 0,function*(){let n=this.messageBuilder.createDataLogonMessage(e,t);return Y.debug(`${n.MESSAGE_TYPE} (snapshot) message created -> `,n),this.socket.send(n)})}stream(e,t,n,r){let i=this.messageBuilder.createDataLogonMessage(e,r);Y.debug(`${i.MESSAGE_TYPE} (stream) message created -> `,i);let a=performance.now(),o=null,s=this.socket.sendForStream(i,(...n)=>{o===null&&(o=performance.now(),Y.debug(`[stream:${e}] time to initial response: ${(o-a).toFixed(2)}ms`)),t(...n)},t=>{n(t),this.events.onStreamErrorEvent(e,s,t)},()=>{this.events.onStreamCompleteEvent(e,s)});return this.events.onStreamEvent(e,i,s,{onMessage:t,onError:n}),s}streamState(e,t=()=>{},n=()=>{},r,i=[]){return this.stream(e,t,n,r).pipe(jh(Lv,i))}streamWithoutAutoTeardown(e,t,n,r){Y.deprecated(`streamWithoutAutoTeardown`,`Please use 'stream' api instead.`,`15.0.0`);let i=this.messageBuilder.createDataLogonMessage(e,r);Y.debug(`${i.MESSAGE_TYPE} (stream without auto-teardown) message created -> `,i);let a=this.socket.sendForStreamWithoutTeardown(i,t,t=>{n(t),this.events.onStreamErrorEvent(e,a,t)});return this.events.onStreamEvent(e,i,a,{onMessage:t,onError:n}),a}getMoreRows(e,t){return J(this,void 0,void 0,function*(){let n=this.messageBuilder.createMoreRowsMessage(e,t);return Y.debug(`${n.MESSAGE_TYPE} message created -> `,n),this.socket.send(n,!1)})}getMoreColumns(e){return J(this,void 0,void 0,function*(){let t=this.messageBuilder.createMoreColumnsMessage(e);return this.socket.send(t)})}dataLogoff(e){return J(this,void 0,void 0,function*(){let t=this.messageBuilder.createDataLogoffMessage(e);return Y.debug(`${t.MESSAGE_TYPE} message created -> `,t),this.socket.send(t)})}getMetadata(e){return J(this,arguments,void 0,function*(e,t=!0,n){return t&&this.metaCache.hasMetadataFor(e)?(Y.debug(`Cached metadata retrieved for ${e}`),this.metaCache.getMetadataFor(e)):(this.inFlightMetadata.has(e)&&Y.debug(`In-flight metadata request collapsed for ${e}`),this.inFlightMetadata.join(e,t=>this.fetchMetadata(e,t),this.callerOptions(n)))})}fetchMetadata(e,t){return J(this,void 0,void 0,function*(){let n=this.messageBuilder.createMetaRequestMessage(e);Y.debug(`${n.MESSAGE_TYPE} (metadata) message created -> `,n);let r,i;try{this.isWorking=!0,r=(yield this.sendReqRep(n,{timeout:0,signal:t}))?.DETAILS??{},Object.keys(r).length&&this.metaCache.setMetadataFor(e,r)}catch(t){throw i=t,Y.error(vg(`Metadata request failed for ${e}`,t),t),ly(t)}finally{this.events.onMetadataEvent(e,n,i),this.isWorking=!1}return r})}getJSONSchema(e){return J(this,arguments,void 0,function*(e,t=!0){if(t&&this.metaCache.hasJsonSchemaFor(e))return Y.debug(`Cached JsonSchema retrieved for ${e}`),this.metaCache.getJsonSchemaFor(e);let n=this.messageBuilder.createMetaRequestMessage(e,zg.JSON_SCHEMA_REQUEST);Y.debug(`${n.MESSAGE_TYPE} (json schema) message created -> `,n);let r;try{this.isWorking=!0,r=(yield this.sendReqRep(n))??{},Object.keys(r).length&&this.metaCache.setJsonSchemaFor(e,r)}catch(t){Y.error(vg(`JSON schema request failed for ${e}`,t),t)}finally{this.isWorking=!1}return r})}callerOptions(e){let t=this.useHttpReqRep?void 0:this.config.connect?.requestTimeout;return{timeout:e?.timeout??t,signal:e?.signal}}request(e,t){return J(this,arguments,void 0,function*(e,t,n=!1,r){let i=Hg(e,t);if(n&&this.metaCache.hasRequestFor(i))return Y.debug(`Cached request response retrieved for ${i}`),this.metaCache.getRequestFor(i);this.inFlightRequests.has(i)&&Y.debug(`In-flight request collapsed for ${i}`);let a=yield this.inFlightRequests.join(i,n=>this.sendRequest(e,t,n),this.callerOptions(r));return n&&a&&this.metaCache.setRequestFor(i,a),a})}sendRequest(e,t,n){let r=this.messageBuilder.createRequestMessage(e,t);Y.debug(`${r.MESSAGE_TYPE} (request server) message created -> `,r);let i={timeout:0,signal:n};return this.useHttpReqRep?this.requestOverHttp(r,i):this.socket.send(r,!0,i)}getAvailableResources(e){return J(this,arguments,void 0,function*(e,t=!0){if(t&&this.metaCache.hasResources())return Y.debug(`Cached resources retrieved`),this.metaCache.getResources();let n=this.messageBuilder.createResourcesMessage(e);Y.debug(`${n.MESSAGE_TYPE} (resources) message created -> `,n);let r=yield this.sendReqRep(n);return this.metaCache.setResources(r),r})}commitEvent(e,t,n){return J(this,void 0,void 0,function*(){let r=this.messageBuilder.createCommitMessage(e,t);Y.debug(`${r.MESSAGE_TYPE} (commit) message created -> `,r);let i=this.sendReqRep(r,n);return this.events.onCommitEvent(e,r),i.then(t=>(this.events.onCommitResponseEvent(e,t),Yg(t,r,n)))})}};q([C],sy.prototype,`isWorking`,void 0),sy=q([cd(0,ay),cd(1,Gg),cd(2,fg),cd(3,uae),cd(4,Ag),cd(5,$g)],sy);let cy=e=>typeof e?.receivedMessage==`object`,ly=e=>e instanceof Error?e:cy(e)?new Tg(e.receivedMessage,e.sentMessage):Error(String(e)),uy=Nf===`true`||Af(`forceHttp`),dy=N.createInterface(e=>e.singleton(sy)),fy=N.createInterface(e=>uy?e.aliasTo(Hv):e.aliasTo(dy));function py(){return N.getOrCreateDOMContainer().get(fy)}var my=class{serialize(e){return Y.deprecated(`serialize`,"Use `serialize` from `JSONSerializer` from `@genesislcap/foundation-utils` instead."),JSON.stringify(e)}deserialize(e){return Y.deprecated(`deserialize`,"Use `deserialize` from `JSONSerializer` from `@genesislcap/foundation-utils` instead."),e?typeof e==`string`?JSON.parse(e):e.data?JSON.parse(e.data):e.text().then(e=>JSON.parse(e)):Promise.resolve({})}};N.createInterface(e=>e.singleton(my));
244
244
  /*! js-cookie v3.0.7 | MIT */
245
245
  function hy(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)r!==`__proto__`&&(e[r]=n[r])}return e}var gy={read:function(e){return e[0]===`"`&&(e=e.slice(1,-1)),e.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(e){return encodeURIComponent(e).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}};function _y(e,t){function n(n,r,i){if(typeof document<`u`){i=hy({},t,i),typeof i.expires==`number`&&(i.expires=new Date(Date.now()+i.expires*864e5)),i.expires&&(i.expires=i.expires.toUTCString()),n=encodeURIComponent(n).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var a=``;for(var o in i)i[o]&&(a+=`; `+o,i[o]!==!0&&(a+=`=`+i[o].split(`;`)[0]));return document.cookie=n+`=`+e.write(r,n)+a}}function r(t){if(!(typeof document>`u`||arguments.length&&!t)){for(var n=document.cookie?document.cookie.split(`; `):[],r={},i=0;i<n.length;i++){var a=n[i].split(`=`),o=a.slice(1).join(`=`);try{var s=decodeURIComponent(a[0]);if(s in r||(r[s]=e.read(o,s)),t===s)break}catch{}}return t?r[t]:r}}return Object.create({set:n,get:r,remove:function(e,t){n(e,``,hy({},t,{expires:-1}))},withAttributes:function(e){return _y(this.converter,hy({},this.attributes,e))},withConverter:function(e){return _y(hy({},this.converter,e),this.attributes)}},{attributes:{value:Object.freeze(t)},converter:{value:Object.freeze(e)}})}var vy=_y(gy,{path:`/`});let yy=N.createInterface();function by(){return navigator!=null&&navigator.credentials?`PasswordCredential`in window||(Y.warn(`PasswordCredential not available in this browser.`),!1):(Y.warn(`CredentialsContainer not available in this browser.`),!1)}function xy(e=``,t=`:`,n){return e.split(t,n).map(e=>e.trim()).filter(e=>e!==``)}function Sy(e,t=`:`){let n=typeof e==`string`&&e.trim();return n?n.includes(t):!1}function Cy(e,t=`:`){return typeof e==`string`&&e.trim()?(e.match(new RegExp(t,`g`))||[]).length:0}function wy(e,t=`:`){for(let n of e)if(Sy(n,t))return n;return e.find(e=>typeof e==`string`&&e.trim()!==``)}function Ty(e,t,n){let r=typeof e==`string`&&e.trim();return!r||n&&!r.includes(n)||Cy(r)>1?n&&t&&n!==t?`${t}:${n}`:t||n:r}function Ey(e=`credential`){Y.warn(`Unable to migrate legacy ${e} to latest format. Please remove from your browser.`)}let Dy={password:!0,mediation:`optional`},Oy={cookie:{path:`/`,name:`credentials`,expires:7300,storePasswords:!1}},ky=class{constructor(e,t=Oy){this.session=e,this.config=t}createBasicCredentials(e){return{type:Ig.BASIC,username:e.username,password:e.password,mfaToken:this.getMFAToken()}}createRefreshCredentials(e){return{type:Ig.REFRESH,username:e?.username??this.getUsername(),refreshToken:e?.refreshToken??this.getRefreshToken(),mfaToken:e?.mfaToken??this.getMFAToken()}}createSSOCredentials(e){return{type:Ig.SSO,ssoToken:e?.ssoToken??this.getSSOToken()}}validateBasicCredentials(e){return e&&!!e.username&&!!e.password}validateRefreshCredentials(e){return e&&!!e.refreshToken&&!!e.username}validateSSOCredentials(e){return e&&!!e.ssoToken}validateUserCredentialData(e,t){let n=e&&!!e.id&&!!e.name&&!e.name.includes(`:`)&&Cy(e.id)<=1;return t?n&&!!e.password:n}normaliseLegacyCredentialData(e,t){if(this.validateUserCredentialData(e,!0))return[e,!0];if(this.validateUserCredentialData(t))return[t,!1];if(e)try{let t=e,[n]=xy(t.name||t.id),[r,i]=xy(wy([t.id,t.name]));return[{id:Ty(t.id||t.name,n,i),name:n,password:t.password||``},!0]}catch{Ey(`PasswordCredential`)}if(t)try{let e=t,[n]=xy(e.name||e.username||e.organisation),[r,i]=xy(wy([e.organisation||e.username||e.name]));return[{id:Ty(e.id||e.username||e.name,n,i),name:n,password:e.password||``},!1]}catch{Ey(`cookie`)}return[void 0,!1]}storeCredentialsInContainer(e){return J(this,void 0,void 0,function*(){if(!by())return;let t=new PasswordCredential(e);return Y.debug(`Storing credentials in CredentialsContainer`),navigator.credentials.store(t)})}getCredentialsFromContainer(){return J(this,arguments,void 0,function*(e=Dy){if(by())return Y.debug(`Getting credentials from CredentialsContainer`),yield navigator.credentials.get(e)})}storeCredentialsInCookie(e){let{password:t}=e,n=sd(e,[`password`]),r=this.config.cookie.storePasswords?e:n;return Y.debug(`Storing credentials in cookie`),!!vy.set(this.config.cookie.name,JSON.stringify(r),{expires:this.config.cookie.expires,domain:location.hostname,path:this.config.cookie.path,secure:!0})}getCredentialsFromCookie(){Y.debug(`Getting credentials from cookie`);let e=vy.get(this.config.cookie.name);return e?JSON.parse(e):void 0}storeCredentials(e){return J(this,void 0,void 0,function*(){if(by()){let t=yield this.storeCredentialsInContainer(e);return Promise.resolve(!!t)}return Promise.resolve(this.storeCredentialsInCookie(e))})}getCredentials(e){return J(this,void 0,void 0,function*(){return by()?this.getCredentialsFromContainer(e):Promise.resolve(this.getCredentialsFromCookie())})}getSSOToken(){return this.session.getSessionStorageItem(`ssoToken`)}getUsername(){return this.session.getSessionStorageItem(`username`)||this.session.getLocalStorageItem(`username`)}getRefreshToken(){return this.session.getSessionStorageItem(`refreshToken`)||this.session.getLocalStorageItem(`refreshToken`)}getMFAToken(){return this.session.getSessionStorageItem(`mfaToken`)}removeCookie(){vy.remove(this.config.cookie.name,{domain:location.hostname,path:this.config.cookie.path})}removeSSOToken(){this.session.removeSessionStorageItem(`ssoToken`)}removeUsername(){this.session.removeSessionStorageItem(`username`),this.session.removeLocalStorageItem(`username`)}removeRefreshToken(){this.session.removeSessionStorageItem(`refreshToken`),this.session.removeLocalStorageItem(`refreshToken`)}removeMFAToken(){this.session.removeSessionStorageItem(`mfaToken`)}removeAll(){this.removeCookie(),this.removeSSOToken(),this.removeUsername(),this.removeRefreshToken(),this.removeMFAToken()}preventSilentAccess(){return by()&&navigator.credentials.preventSilentAccess()}};ky=q([cd(0,jg),cd(1,Lt(yy))],ky);let Ay=N.createInterface(e=>e.singleton(ky)),jy=e=>e?{date:e.DATE}:null,My=e=>e?e.map(e=>({name:e.NAME,version:e.VERSION})):[],Ny=e=>Array.isArray(e)?e.map(e=>e??``):[],Py=e=>{try{if(e?.MESSAGE_TYPE===`EVENT_LOGIN_AUTH_ACK`){let{DETAILS:t}=e,n=e.UPDATE_QUEUE_DETAILS;return{messageType:e.MESSAGE_TYPE,sourceRef:e.SOURCE_REF,userName:e.USER_NAME,updateQueue:n?.UPDATE_QUEUE,zeroMqProxyModeEnabled:n?.ZERO_MQ_PROXY_MODE_ENABLED,zeroMqProxyInboundPort:n?.ZERO_MQ_PROXY_INBOUND_PORT,zeroMqProxyOutboundPort:n?.ZERO_MQ_PROXY_OUTBOUND_PORT,userKVs:e.USER,details:t?{system:jy(t.SYSTEM),heartbeatIntervalSecs:t.HEARTBEAT_INTERVAL_SECONDS,failedLoginAttempts:t.FAILED_LOGIN_ATTEMPTS,rejectedLoginAttempts:t.REJECTED_LOGIN_ATTEMPTS,lastLoginDatetime:t.LAST_LOGIN_DATE_TIME,daysToPasswordExpiry:t.DAYS_TO_PASSWORD_EXPIRY,product:My(t.PRODUCT)}:null,permission:Ny(e.PERMISSION),profile:Ny(e.PROFILE)}}throw Error(`No Entity mapping implementation for provided DTO`)}catch(e){throw Y.error(e),e}},Fy=class{loggedUserResultChanged(){var e;(e=this.isLoggedInSubject)==null||e.next(this.isLoggedIn)}get isLoggedIn$(){return this.isLoggedInSubject.asObservable()}get isLoggedIn(){return this.currentUser.isAuthenticated}constructor(e,t,n,r,i){this.session=e,this.connect=t,this.messageBuilder=n,this.credentialManager=r,this.currentUser=i,this.isWorking=!1,this.isLoggedInSubject=new Vm(this.isLoggedIn),this.currentUser.addAuthenticationChangeListener(e=>{var t;(t=this.isLoggedInSubject)==null||t.next(e.detail)})}login(e){return J(this,void 0,void 0,function*(){this.isWorking=!0;try{let t=this.messageBuilder.createLoginMessage(e),n=yield this.connect.send(t);if(!n||n.ERROR||n.DETAILS?.ERROR)throw new Lg(t,n);this.applyAuthResults({authToken:n.SESSION_AUTH_TOKEN,refreshToken:n.REFRESH_AUTH_TOKEN,profiles:n.PROFILE,username:n.USER_NAME,permissions:n.PERMISSION,sessionId:n.SESSION_ID}),this.currentUser.set(Py(n)),this.session.setAuthResult(n),Y.debug(`Login Authentication Result:`,n)}catch(e){if(Y.error(vg(`Login Authentication Error:`,e?.received),e),e instanceof Lg&&e.isIgnorableError())Y.warn(`Ignoring authentication error as it is a known edge case.`);else throw this.removeAuthResults(),this.currentUser.unset(),e}finally{this.isWorking=!1}return this.loggedUserResult})}logout(){return J(this,void 0,void 0,function*(){this.isWorking=!0;let e={success:!1};try{let t=this.messageBuilder.createLogoutMessage(this.loggedUserResult);this.session.deleteUserFromSessionStorage();let{CODE:n,DETAILS:r,ERROR:i,MESSAGE_TYPE:a,OIDC_LOGOUT_URL:o}=yield this.connect.send(t),s=r?.ERROR??i,c=a===Rg.LOGOUT_NACK;c&&Y.warn(`Unexpected Logout NACK received during logout.`,s),e={success:a===Rg.LOGOUT_ACK||n===Bg.SESSION_NOT_FOUND||!c,error:s},o&&window.open(o,`_self`)}catch(t){let n=new Lg(t.sentMessage,t.receivedMessage);if(Y.error(vg(`Logout Authentication Error:`,n.received),n),n.isIgnorableError())Y.warn(`Ignoring authentication error as it is a known edge case.`),e.success=!0;else throw t}finally{this.removeAuthResults(),this.currentUser.unset(),this.isWorking=!1}return e})}reAuthFromSession(){return J(this,void 0,void 0,function*(){let e=yield this.ensureConnection(),t=this.credentialManager.createRefreshCredentials();if(e&&this.credentialManager.validateRefreshCredentials(t)){let e=this.messageBuilder.createRefreshTokenMessage(),t=yield this.connect.send(e);if(t?.MESSAGE_TYPE===zg.EVENT_LOGIN_AUTH_ACK)return this.session.setAuthResult(t),this.currentUser.set(Py(t)),this.applyAuthResults(this.getLoggedUserFromMessage(t)),!0}return this.session.deleteUserFromSessionStorage(),this.currentUser.unset(),!1})}ensureConnection(){return J(this,void 0,void 0,function*(){if(this.connect.isConnected)return!0;let e=this.session.getSessionStorageItem(`hostUrl`);return e?this.connect.connect(e):!1})}getLoggedUserFromMessage(e){let t=e.USER_NAME,n=e.SESSION_AUTH_TOKEN,r=e.REFRESH_AUTH_TOKEN;return!t||!n||!r?null:{username:t,authToken:n,refreshToken:r,profiles:e.PROFILE,permissions:e.PERMISSION,sessionId:e.SESSION_ID}}applyAuthResults(e){if(!e){this.removeAuthResults();return}this.loggedUserResult={authToken:e.authToken,refreshToken:e.refreshToken,profiles:e.profiles,username:e.username,permissions:e.permissions,sessionId:e.sessionId}}removeAuthResults(){this.loggedUserResult=null}};q([C],Fy.prototype,`isWorking`,void 0),q([C],Fy.prototype,`loggedUserResult`,void 0),Fy=q([cd(0,jg),cd(1,fy),cd(2,Gg),cd(3,Ay),cd(4,dg)],Fy);let Iy=N.createInterface(e=>e.singleton(Fy));function Ly(e,t){let n=new Date(e),r=n.getUTCFullYear(),i=String(n.getUTCMonth()+1).padStart(2,`0`),a=String(n.getUTCDate()).padStart(2,`0`);return t?`${r}${i}${a}`:`${r}${i}${a}-${String(n.getUTCHours()).padStart(2,`0`)}:${String(n.getUTCMinutes()).padStart(2,`0`)}`}let Ry={n:`
246
246
  `,r:`\r`,t:` `,b:`\b`,f:`\f`};function zy(e){let t=e.trim(),n=/^(['"])([\s\S]*)\1$/.exec(t);return n?n[2].replace(/\\([\s\S])/g,(e,t)=>Ry[t]??t):t}function By(e,t){let n=e.match(/Expr\.(\w+)\(/);if(n)switch(n[1]){case`dateIsToday`:{let n=e.match(/Expr\.dateIsToday\((\w+)\)/);if(n){let[,e]=n,r=/* @__PURE__ */ new Date;t[`${e}_FROM`]=`${r.toISOString().replace(/-/g,``).split(`T`)[0]}-00:00`,r.setDate(r.getDate()+1),t[`${e}_TO`]=`${r.toISOString().replace(/-/g,``).split(`T`)[0]}-00:00`}break}case`dateTimeIsGreaterEqual`:{let n=e.match(/Expr\.dateTimeIsGreaterEqual\((\w+), ?(['"].+['"])\)/);if(n){let[,e,r]=n;t[`${e}_FROM`]=zy(r)}break}case`dateTimeIsLessEqual`:{let n=e.match(/Expr\.dateTimeIsLessEqual\((\w+), ?(['"].+['"])\)/);if(n){let[,e,r]=n;t[`${e}_TO`]=zy(r)}break}case`dateIsGreaterEqual`:{let n=e.match(/Expr\.dateIsGreaterEqual\((\w+), ?(['"].+['"])\)/);if(n){let[,e,r]=n;t[`${e}_FROM`]=zy(r)}break}case`dateIsLessEqual`:{let n=e.match(/Expr\.dateIsLessEqual\((\w+), ?(['"].+['"])\)/);if(n){let[,e,r]=n;t[`${e}_TO`]=zy(r)}break}case`containsIgnoreCase`:{let n=e.match(/Expr\.containsIgnoreCase\((\w+), ?(['"].+['"])\)/);if(n){let[,e,r]=n;t[e]=`*${zy(r)}*`}break}}}function Vy(e,t){let n=e.indexOf(`=`),r=e.substr(0,n).trim().replace(/["']/g,``);t[r]=zy(e.slice(n).replace(/^==?/,``))}function Hy(e){if(!e)return{};let t=e.split(`&&`).map(e=>e.trim()),n={};return t.forEach(e=>{if(e){if(e.startsWith(`Expr`))By(e,n);else if(/[A-Z_]+\s*(>=|<=)\s*\d+/.test(e)){let t=e.match(/([A-Z_]+)\s*>=\s*(\d+)/);if(t){let[,e,r]=t,i=parseInt(r,10),a=e.toUpperCase(),o=a.includes(`DATE`)&&!a.includes(`DATETIME`);n[`${e}_FROM`]=Ly(i,o)}let r=e.match(/([A-Z_]+)\s*<=\s*(\d+)/);if(r){let[,e,t]=r,i=parseInt(t,10),a=e.toUpperCase(),o=a.includes(`DATE`)&&!a.includes(`DATETIME`);n[`${e}_TO`]=Ly(i,o)}}else Vy(e,n)}}),n}function Uy(e,t=`ROW_REF`){let n=e=>{let n=e.DETAILS[t]??e[t],r=Object.assign(Object.assign({},e),{[t]:n});return delete r.DETAILS,r},r=[],i=[],a=[];for(let t of e.ROW)if(t.DETAILS)switch(t.DETAILS.OPERATION){case`INSERT`:r.push(n(t));break;case`MODIFY`:a.push(n(t));break;case`DELETE`:i.push(n(t));break;default:Y.error(`Unsupported operation type: '${t.DETAILS.OPERATION}'`)}return{inserts:r,deletes:i,updates:a,SOURCE_REF:e.SOURCE_REF}}var Wy=class{};Wy.MAX_ROWS_250=250,Wy.MAX_VIEW_1000=1e3,Wy.REQ_REP_POLLING_INTERVAL_MS=1e4,Wy.DATASERVER_ROW_ID=`ROW_REF`,Wy.REQUEST_SERVER_ROW_ID=`RECORD_ID`,Wy.DEFAULT_PAGINATION_PAGE_SIZE=25,Wy.DEFAULT_REQ_REP_OFFSET=0;let Gy={options:{criteria:``,isSnapshot:!1,maxRows:Wy.MAX_ROWS_250,maxView:Wy.MAX_VIEW_1000,pollingInterval:Wy.REQ_REP_POLLING_INTERVAL_MS,movingView:!1,orderBy:``,resourceName:``,reverse:!1,pollTriggerEvents:[]},criteriaToFields:Hy,dataServerResultFilter:Uy},Ky=N.createInterface(e=>e.instance(Gy));function qy(e){let t=e==null?NaN:Number(e);return Number.isFinite(t)?t===0?1/0:t:Wy.MAX_VIEW_1000}function Jy(e){return e.moreRows===!1?`end`:e.rowsHeld>=qy(e.maxView)?e.movingView?`more`:`view-full`:e.emptyReply?`stalled`:`more`}function Yy(e){let t=qy(e.maxView),n=Xy(e.maxView)?`${t}, the server default`:`${t}`,r=e.totalRows;if(e.status===`stalled`)return`${e.resourceName} stopped at ${e.rowsHeld} rows: the server answered MORE_ROWS with an empty page while still reporting more rows, with room left in the view (MAX_VIEW ${n}). This is not the MAX_VIEW cap; check the data server log for "Problem building client message".`;if(!e.emptyReply&&r!==void 0&&r<=e.rowsHeld)return;let i=r!==void 0&&r>e.rowsHeld,a=i?` of ${r}`:``,o=e.emptyReply||i?` and the server holds more rows past it`:`, so any rows past it are not loaded`;return`${e.resourceName} stopped at ${e.rowsHeld}${a} rows: the DATASERVER view is full at MAX_VIEW (${n})${o}. Raise ${e.attribute} past the row count to reach the rest.`}function Xy(e){return e==null||!Number.isFinite(Number(e))}let Zy=e=>{class t extends e{constructor(){super(),this.hasOwnProperty(`onDatasourceStatusChanged`)||(this.onDatasourceStatusChanged=e=>{let t=this.data!==void 0;!this.resourceName&&!t&&Y.warn(`Target classes must have a resourceName or data property to use the DatasourceEventHandler mixin.`);let n=e.detail;if(n.name===this.resourceName){let e=this.datasourceStatus??{isInitialized:!1,hasMetadata:!1};(e.isInitialized!==n.isInitialized||n.metadataRequired&&e.hasMetadata!==n.hasMetadata)&&(this.datasourceStatus=n)}})}datasourceStatusChanged(e,t){Y.debug(`Target classes should override the datasourceStatusChanged method of the DatasourceEventHandler mixin to respond to changes in the target datasource.`)}connectedCallback(){super.connectedCallback(),document.addEventListener(hg,this.onDatasourceStatusChanged,{passive:!0,capture:!0})}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener(hg,this.onDatasourceStatusChanged,{capture:!0})}}return q([C],t.prototype,`datasourceStatus`,void 0),t},Qy={throwWhenUnavailable:!0,throwWhenUnknown:!1},$y=N.createInterface(e=>e.instance(Qy)),eb=Hd(`genesis-resources`);function tb(){return N.getOrCreateDOMContainer().get(eb)}let nb=class{constructor(e,t){this.connect=e,this.config=t}isValidResource(e){return J(this,void 0,void 0,function*(){return e=e?.trim(),e?(yield this.fetchResources(),!!this.resources.find(t=>t.RESOURCE_NAME===e)):!1})}getResourceTypeFor(e){return J(this,void 0,void 0,function*(){yield this.fetchResources();let t=this.resources.find(t=>t.RESOURCE_NAME===e);if(t)return t.RESOURCE_TYPE;let n=`${e} resource does not exist.`;if(Y.error(n),this.config.throwWhenUnknown)throw Error(n)})}getAllResources(){return J(this,void 0,void 0,function*(){return this.resources||(yield this.fetchResources()),this.resources})}destroy(){this.resources=void 0,this.resourcesPromise=void 0}fetchResources(){return J(this,void 0,void 0,function*(){if(this.resources)return Promise.resolve();if(this.resourcesPromise)yield this.resourcesPromise;else{this.resourcesPromise=this.connect.getAvailableResources();let e=yield this.resourcesPromise;if(this.resources=e?.RESOURCES,!this.resources?.length){let e=`Genesis resources unavailable.`;if(Y.error(e),this.config.throwWhenUnavailable)throw Error(e)}this.postLoadedMessage(),this.resourcesPromise=void 0}})}postLoadedMessage(){let e=tb();e.postMessage(`resources-loaded`,this.resources),e.close()}};nb=q([cd(0,fy),cd(1,$y)],nb);let rb=N.createInterface(e=>e.singleton(nb)),ib=class{get initialized(){return!!this.status?.isInitialized}constructor(e,t,n,r,i){this.connect=e,this.auth=t,this.resources=n,this.config=r,this.connectEvents=i,this.fetchMetadataRequired=!0,this.startStreamRequired=!0,this.originalFieldDef=[],this.fieldMetadata=[],this.requestFields=[],this.customRequestFields=[],this.availableIndexes=[],this.availableSortableFields=[],this.availableCriteriaFields=[],this.criteriaOnlyRequest=!1,this.loadMoreCount=0,this.readOnly=!0,this._allParams=null,this.generation=0,this.pollTrigger$=new zm}triggerPoll(){this.pollTrigger$.next()}validResourceName(e){return Y.deprecated(`Datasource.validResourceName`,"Use `GenesisResources.isValidResource` instead."),!(!e||!e.trim().length)}init(e){return J(this,arguments,void 0,function*(e,t=this.fetchMetadataRequired,n=this.startStreamRequired){let r=this.generation+=1,i=this.initialise(r,e,t,n).catch(t=>{if(r===this.generation)throw t;return Y.debug(`${e?.resourceName} datasource initialisation failed after it was superseded:`,t),this.interruptedInit(e?.resourceName)});return this.latestInit={generation:r,result:i},i})}initialise(e,t,n,r){return J(this,void 0,void 0,function*(){this.fetchMetadataRequired=n,this.options=Object.assign(Object.assign({},this.config.options),t),this.invalidateCache();let{resourceName:i}=this.options,a=()=>e!==this.generation,o=this.connect.isConnected||(yield this.connect.connect(this.connect.host));if(a())return this.interruptedInit(i);if(!o)return Y.error(`Unable to connect to ${this.connect.host} to get ${i} datasource`),this.reportStatus(),!1;let s=yield this.resources.isValidResource(i);if(a())return this.interruptedInit(i);if(!s)return Y.error(`${i} datasource does not exist on ${this.connect.host}`),this.reportStatus(),!1;let c=yield this.resources.getResourceTypeFor(i);if(a())return this.interruptedInit(i);if(this.resourceType=c,!this.resourceType)return Y.error(`Unable to get the resource type for ${i} datasource from ${this.connect.host}`),this.reportStatus(),!1;if(this.fetchMetadataRequired){if(yield this.fetchAndApplyMetadata(i),a())return this.interruptedInit(i);this._allParams=null}return Y.debug(`Initializing ${i} datasource from ${this.connect.host}`),!this.options.isSnapshot&&r&&(this.pollTrigger$=new zm,this.stream=this.createStream()),Y.debug(`${i} datasource initialization ${this.initialized?`was successful.`:`has failed.`}`),this.reportStatus(),this.initialized})}startStream(){return J(this,void 0,void 0,function*(){!this.options.isSnapshot&&this.stream===void 0&&(this.stream=this.createStream())})}destroy(){var e;Y.debug(`Datasource.destroy`,this.options?.resourceName),this.generation+=1,this.commitResponseUnsubscribe&&(this.commitResponseUnsubscribe(),this.commitResponseUnsubscribe=void 0),(e=this.pollTrigger$)==null||e.complete(),this.status=void 0,this.fetchMetadataRequired=!0,this.options={},this.resourceType=void 0,this.availableIndexes=[],this.availableSortableFields=[],this.availableCriteriaFields=[],this.originalFieldDef=[],this.fieldMetadata=[],this.requestFields=[],this.criteriaOnlyRequest=!1,this.loadMoreCount=0,this.stream=void 0}get allResourceParams(){if(this._allParams)return this._allParams;let e;if(this.options.orderBy){if(this.criteriaOnlyRequest||this.availableIndexes?.findIndex(e=>e.NAME===this.options.orderBy)>-1)e=this.options.orderBy;else{let e=this.availableIndexes.map(e=>e.NAME);Y.warn(`Specified [orderBy] index is not valid and will not be used. See https://learn.genesis.global/docs/database/data-types/index-entities/ - Available indexes:`,e)}}return this._allParams={CRITERIA_MATCH:this.options.criteria,MAX_ROWS:this.options.maxRows,ORDER_BY:e,VIEW_NUMBER:this.options.viewNumber,FIELDS:this.options.fields,MAX_VIEW:this.options.maxView,MOVING_VIEW:this.options.movingView,REVERSE:this.options.reverse,ENCODING:this.options.encoding,DISABLE_POLLING:this.options.disablePolling,OFFSET:this.options.offset,POLLING_INTERVAL:this.options.pollingInterval,REQUEST:this.options.request},Y.debug(`Getting configured params:`,this._allParams),this._allParams}get dataserverOnlyParams(){return{CRITERIA_MATCH:this.allResourceParams.CRITERIA_MATCH,MAX_ROWS:this.allResourceParams.MAX_ROWS,VIEW_NUMBER:this.allResourceParams.VIEW_NUMBER,FIELDS:this.allResourceParams.FIELDS,MAX_VIEW:this.allResourceParams.MAX_VIEW,MOVING_VIEW:this.allResourceParams.MOVING_VIEW,ORDER_BY:this.allResourceParams.ORDER_BY,REVERSE:this.allResourceParams.REVERSE,ENCODING:this.allResourceParams.ENCODING}}get requestOnlyParams(){let e=this.allResourceParams,{REQUEST:t}=e,n=sd(e,[`REQUEST`]);return{DETAILS:{CRITERIA_MATCH:this.options.requestAutoSetup?void 0:n.CRITERIA_MATCH,MAX_ROWS:n.MAX_ROWS,OFFSET:n.OFFSET,ORDER_BY:n.ORDER_BY,VIEW_NUMBER:n.VIEW_NUMBER,ENCODING:n.ENCODING},REQUEST:this.criteriaOnlyRequest?{}:t??this.buildRequestFields()}}buildRequestFields(){if(!this.options.requestAutoSetup)return{};let e=Object.fromEntries(this.requestFields.map(e=>[e.NAME,`*`])),t=this.options.criteria?this.config.criteriaToFields(this.options.criteria):{};return Object.assign(Object.assign({},e),t)}updateLoadMoreCount(e){this.loadMoreCount=e}snapshot(e){return J(this,void 0,void 0,function*(){switch(Y.debug(`Requesting snapshot for ${this.options.resourceName} (${this.resourceType}).`),this.resourceType){case mg.DATASERVER:return this.connect.snapshot(this.options.resourceName,Object.assign(Object.assign({},this.dataserverOnlyParams),e));case mg.REQUEST_SERVER:return this.connect.request(this.options.resourceName,Object.assign(Object.assign({},this.requestOnlyParams),e));default:throw Error(`Snapshot not supported for selected resource type: ${this.resourceType}`)}})}snapshotFiltered(){return J(this,arguments,void 0,function*(e=`ROW_REF`){let t=yield this.snapshot();if(Array.isArray(t))return t;if(t.REPLY)return t.REPLY;if(t.ROW)return this.config.dataServerResultFilter(t,e).inserts})}createStream(){if(![mg.DATASERVER,mg.REQUEST_SERVER].includes(this.resourceType))throw Error(`Streaming not supported for selected resource type: ${this.resourceType}`);return this.resourceType===mg.DATASERVER?this.createDataserverStream():(Y.debug(`Creating fake stream by polling ${this.options.resourceName} REQUEST_SERVER`),this.createReqRepStream())}createDataserverStream(){let{resourceName:e}=this.options;return this.connect.stream(e,e=>{},t=>Y.error(vg(`${e} stream failed`,t),t),this.dataserverOnlyParams)}createReqRepStream(){this.commitResponseUnsubscribe=this.connectEvents.addCommitResponseListener(e=>{let{eventName:t,response:n}=e.detail;this.options.pollTriggerEvents&&this.options.pollTriggerEvents.includes(t)&&n.MESSAGE_TYPE?.endsWith(`_ACK`)&&(Y.debug(`Received commit response for ${t}, triggering poll.`),this.triggerPoll())});let e=this.allResourceParams.DISABLE_POLLING?void 0:this.allResourceParams.POLLING_INTERVAL,t=()=>{let e=this.requestOnlyParams;if(this.resourceType===mg.REQUEST_SERVER&&this.loadMoreCount>0){let t=(this.options.maxRows||25)*(this.loadMoreCount+1);e.DETAILS.MAX_ROWS=t}return gie([this.connect.isConnected$,this.auth.isLoggedIn$]).pipe(Ph(()=>this.connect.isConnected&&this.auth.isLoggedIn),Nh(()=>yh(this.snapshot(e))))};return e?this.pollTrigger$.pipe(Mh(0),Nh(()=>Dh(0,e).pipe(Nh(t)))):this.pollTrigger$.pipe(Mh(0),Nh(t))}fetchAndApplyMetadata(e){return J(this,void 0,void 0,function*(){let t=this.generation;try{Y.debug(`Requesting metadata for ${e} Datasource`);let n=yield this.connect.getMetadata(e);if(t!==this.generation)return;n&&(this.availableIndexes=n.INDEXES??[],this.availableSortableFields=n.SORTABLE_FIELDS??[],this.availableCriteriaFields=n.CRITERIA_FIELDS??[],this.originalFieldDef=_g(n),this.fieldMetadata=gg(this.originalFieldDef),this.requestFields=n.REQUEST_FIELD||[],this.customRequestFields=n.FIELD||[],this.criteriaOnlyRequest=n.CRITERIA_ONLY_REQUEST||!1,this.fetchMetadataRequired=!1),this.status=this.normaliseStatus({isInitialized:!0,metadataRequired:!0,hasMetadata:this.fieldMetadata?.length>0})}catch(n){if(t!==this.generation){Y.debug(`Metadata Fetch for ${e} failed after it was superseded:`,n);return}Y.error(vg(`Metadata Fetch failed for ${e}:`,n),n),this.status=this.normaliseStatus({isInitialized:!1,metadataRequired:!0,hasMetadata:!1})}})}reportStatus(e={}){let t=this.config.eventEmitter??document;this.status=this.normaliseStatus(e),Y.debug(`Dispatching '${hg}'`,this.status),t?.dispatchEvent(new CustomEvent(`datasource-status-changed`,{detail:this.status,bubbles:t!==document,composed:!0}))}normaliseStatus(e){let t=e.isInitialized??this.initialized,n=e.metadataRequired??this.fetchMetadataRequired,r=e.hasMetadata??this.fieldMetadata?.length>0;return{name:this.options?.resourceName,type:this.resourceType,isInitialized:t,metadataRequired:n,hasMetadata:r}}invalidateCache(){this._allParams=null}interruptedInit(e){Y.debug(`${e} datasource initialisation was superseded`);let t=this.latestInit;return t&&t.generation===this.generation?t.result:!1}};q([C],ib.prototype,`status`,void 0),q([C],ib.prototype,`fetchMetadataRequired`,void 0),q([C],ib.prototype,`startStreamRequired`,void 0),q([C],ib.prototype,`originalFieldDef`,void 0),q([C],ib.prototype,`fieldMetadata`,void 0),q([C],ib.prototype,`requestFields`,void 0),q([C],ib.prototype,`customRequestFields`,void 0),q([C],ib.prototype,`availableIndexes`,void 0),q([C],ib.prototype,`availableSortableFields`,void 0),q([C],ib.prototype,`availableCriteriaFields`,void 0),q([C],ib.prototype,`criteriaOnlyRequest`,void 0),q([C],ib.prototype,`loadMoreCount`,void 0),q([C],ib.prototype,`readOnly`,void 0),q([C],ib.prototype,`stream`,void 0),ib=q([cd(0,fy),cd(1,Iy),cd(2,rb),cd(3,Ky),cd(4,kg)],ib);let ab=N.createInterface(e=>e.transient(ib));var ob=class extends ib{constructor(){super(...arguments),this.entityCache=[],this.entityMap=/* @__PURE__ */ new Map,this.rowId=`ROW_REF`,this.initialize=e=>J(this,void 0,void 0,function*(){return this.disconnect(),this.options=Object.assign({},e.options),this.mapper=e.mapper,this.initialized=yield this.init(this.options,e.fetchMeta),this.initialized?(this.subscription=this.stream.subscribe(e=>{this.sourceRef=e.SOURCE_REF,this.subscriptionLoggedOff=e.MESSAGE_TYPE===Rg.LOGOFF_ACK;let t=e.ROW;!this.subscriptionLoggedOff&&t&&this.updateCache(this.config.dataServerResultFilter(e,this.rowId))}),!0):(Y.debug(`EntityDatasource init failed for ${this.options.resourceName}`),!1)}),this.disconnect=()=>{var e;(e=this.subscription)==null||e.unsubscribe(),this.entityCache=[]}}get initialized(){return this._initialized}set initialized(e){this._initialized=e}get cache(){if(!this.initialized)throw Error(`Please initialize EntityDatasource before querying.`);return this.entityCache}get isEmpty(){return this.entityCache.length===0}updateCache(e){var t;this.isEmpty,(t=e.deletes)==null||t.forEach(e=>{let t=e[this.rowId];this.entityMap.delete(t)}),this.processRowDataUpdate(e.inserts,!0),this.processRowDataUpdate(e.updates);let n=[{}];this.entityCache=n.map(e=>this.mapper.fromDTO(e))}processRowDataUpdate(e,t=!1){e.forEach(e=>{let n=e[this.rowId],r=this.entityMap.get(n);if(r&&t)throw Error(`Existing entity found in map while inserting.`);let i=this.mapper.fromDTO(e),a=r?Object.assign(Object.assign({},r),i):i;this.entityMap.set(n,a)})}};N.createInterface(e=>e.transient(ob));function sb(e,t=`;`){return e&&e.split(t).map(e=>e.trim()).sort((e,t)=>e.localeCompare(t)).join(t)}let cb=`system-health-changed`,lb={windowEvents:[`online`,`offline`,`pageshow`],documentEvents:[`visibilitychange`],genesisConnectEvents:[`stream`,`commit`],ignoredGenesisResources:[],startDelay:5e3,checkInterval:1e4,checkTimeout:3e3,resourceChecks:e=>J(void 0,void 0,void 0,function*(){let t=yield py().getMoreColumns(e),n=Date.now(),r=t;return{isConnected:t.MESSAGE_TYPE===Rg.MORE_COLUMNS_ACK,lastUpdated:n,lastMessage:r}}),resourceDataLogon:({message:e,functions:t})=>{let{onMessage:n,onError:r}=t;oy().sendForStream(e,n,r)}},ub=N.createInterface(e=>e.instance(lb));var db=/* @__PURE__ */ s(((e,t)=>{(function(n,r){typeof e==`object`&&typeof t==`object`?t.exports=r():typeof define==`function`&&define.amd?define([],r):typeof e==`object`?e.bowser=r():n.bowser=r()})(e,(function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){typeof Symbol<`u`&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:`Module`}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t||4&t&&typeof e==`object`&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&typeof e!=`string`)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,`a`,t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=``,n(n.s=90)}({17:function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var r=n(18);t.default=function(){function e(){}return e.getFirstMatch=function(e,t){var n=t.match(e);return n&&n.length>0&&n[1]||``},e.getSecondMatch=function(e,t){var n=t.match(e);return n&&n.length>1&&n[2]||``},e.matchAndReturnConst=function(e,t,n){if(e.test(t))return n},e.getWindowsVersionName=function(e){switch(e){case`NT`:return`NT`;case`XP`:return`XP`;case`NT 5.0`:return`2000`;case`NT 5.1`:return`XP`;case`NT 5.2`:return`2003`;case`NT 6.0`:return`Vista`;case`NT 6.1`:return`7`;case`NT 6.2`:return`8`;case`NT 6.3`:return`8.1`;case`NT 10.0`:return`10`;default:return}},e.getMacOSVersionName=function(e){var t=e.split(`.`).splice(0,2).map((function(e){return parseInt(e,10)||0}));t.push(0);var n=t[0],r=t[1];if(n===10)switch(r){case 5:return`Leopard`;case 6:return`Snow Leopard`;case 7:return`Lion`;case 8:return`Mountain Lion`;case 9:return`Mavericks`;case 10:return`Yosemite`;case 11:return`El Capitan`;case 12:return`Sierra`;case 13:return`High Sierra`;case 14:return`Mojave`;case 15:return`Catalina`;default:return}switch(n){case 11:return`Big Sur`;case 12:return`Monterey`;case 13:return`Ventura`;case 14:return`Sonoma`;case 15:return`Sequoia`;default:return}},e.getAndroidVersionName=function(e){var t=e.split(`.`).splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),!(t[0]===1&&t[1]<5))return t[0]===1&&t[1]<6?`Cupcake`:t[0]===1&&t[1]>=6?`Donut`:t[0]===2&&t[1]<2?`Eclair`:t[0]===2&&t[1]===2?`Froyo`:t[0]===2&&t[1]>2?`Gingerbread`:t[0]===3?`Honeycomb`:t[0]===4&&t[1]<1?`Ice Cream Sandwich`:t[0]===4&&t[1]<4?`Jelly Bean`:t[0]===4&&t[1]>=4?`KitKat`:t[0]===5?`Lollipop`:t[0]===6?`Marshmallow`:t[0]===7?`Nougat`:t[0]===8?`Oreo`:t[0]===9?`Pie`:void 0},e.getVersionPrecision=function(e){return e.split(`.`).length},e.compareVersions=function(t,n,r){r===void 0&&(r=!1);var i=e.getVersionPrecision(t),a=e.getVersionPrecision(n),o=Math.max(i,a),s=0,c=e.map([t,n],(function(t){var n=o-e.getVersionPrecision(t),r=t+Array(n+1).join(`.0`);return e.map(r.split(`.`),(function(e){return Array(20-e.length).join(`0`)+e})).reverse()}));for(r&&(s=o-Math.min(i,a)),--o;o>=s;){if(c[0][o]>c[1][o])return 1;if(c[0][o]===c[1][o]){if(o===s)return 0;--o}else if(c[0][o]<c[1][o])return-1}},e.map=function(e,t){var n,r=[];if(Array.prototype.map)return Array.prototype.map.call(e,t);for(n=0;n<e.length;n+=1)r.push(t(e[n]));return r},e.find=function(e,t){var n,r;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(n=0,r=e.length;n<r;n+=1){var i=e[n];if(t(i,n))return i}},e.assign=function(e){for(var t,n,r=e,i=arguments.length,a=Array(i>1?i-1:0),o=1;o<i;o++)a[o-1]=arguments[o];if(Object.assign)return Object.assign.apply(Object,[e].concat(a));var s=function(){var e=a[t];typeof e==`object`&&e&&Object.keys(e).forEach((function(t){r[t]=e[t]}))};for(t=0,n=a.length;t<n;t+=1)s();return e},e.getBrowserAlias=function(e){return r.BROWSER_ALIASES_MAP[e]},e.getBrowserTypeByAlias=function(e){return r.BROWSER_MAP[e]||``},e}(),e.exports=t.default},18:function(e,t,n){"use strict";t.__esModule=!0,t.ENGINE_MAP=t.OS_MAP=t.PLATFORMS_MAP=t.BROWSER_MAP=t.BROWSER_ALIASES_MAP=void 0,t.BROWSER_ALIASES_MAP={AmazonBot:`amazonbot`,"Amazon Silk":`amazon_silk`,"Android Browser":`android`,BaiduSpider:`baiduspider`,Bada:`bada`,BingCrawler:`bingcrawler`,Brave:`brave`,BlackBerry:`blackberry`,"ChatGPT-User":`chatgpt_user`,Chrome:`chrome`,ClaudeBot:`claudebot`,Chromium:`chromium`,Diffbot:`diffbot`,DuckDuckBot:`duckduckbot`,DuckDuckGo:`duckduckgo`,Electron:`electron`,Epiphany:`epiphany`,FacebookExternalHit:`facebookexternalhit`,Firefox:`firefox`,Focus:`focus`,Generic:`generic`,"Google Search":`google_search`,Googlebot:`googlebot`,GPTBot:`gptbot`,"Internet Explorer":`ie`,InternetArchiveCrawler:`internetarchivecrawler`,"K-Meleon":`k_meleon`,LibreWolf:`librewolf`,Linespider:`linespider`,Maxthon:`maxthon`,"Meta-ExternalAds":`meta_externalads`,"Meta-ExternalAgent":`meta_externalagent`,"Meta-ExternalFetcher":`meta_externalfetcher`,"Meta-WebIndexer":`meta_webindexer`,"Microsoft Edge":`edge`,"MZ Browser":`mz`,"NAVER Whale Browser":`naver`,"OAI-SearchBot":`oai_searchbot`,Omgilibot:`omgilibot`,Opera:`opera`,"Opera Coast":`opera_coast`,"Pale Moon":`pale_moon`,PerplexityBot:`perplexitybot`,"Perplexity-User":`perplexity_user`,PhantomJS:`phantomjs`,PingdomBot:`pingdombot`,Puffin:`puffin`,QQ:`qq`,QQLite:`qqlite`,QupZilla:`qupzilla`,Roku:`roku`,Safari:`safari`,Sailfish:`sailfish`,"Samsung Internet for Android":`samsung_internet`,SlackBot:`slackbot`,SeaMonkey:`seamonkey`,Sleipnir:`sleipnir`,"Sogou Browser":`sogou`,Swing:`swing`,Tizen:`tizen`,"UC Browser":`uc`,Vivaldi:`vivaldi`,"WebOS Browser":`webos`,WeChat:`wechat`,YahooSlurp:`yahooslurp`,"Yandex Browser":`yandex`,YandexBot:`yandexbot`,YouBot:`youbot`},t.BROWSER_MAP={amazonbot:`AmazonBot`,amazon_silk:`Amazon Silk`,android:`Android Browser`,baiduspider:`BaiduSpider`,bada:`Bada`,bingcrawler:`BingCrawler`,blackberry:`BlackBerry`,brave:`Brave`,chatgpt_user:`ChatGPT-User`,chrome:`Chrome`,claudebot:`ClaudeBot`,chromium:`Chromium`,diffbot:`Diffbot`,duckduckbot:`DuckDuckBot`,duckduckgo:`DuckDuckGo`,edge:`Microsoft Edge`,electron:`Electron`,epiphany:`Epiphany`,facebookexternalhit:`FacebookExternalHit`,firefox:`Firefox`,focus:`Focus`,generic:`Generic`,google_search:`Google Search`,googlebot:`Googlebot`,gptbot:`GPTBot`,ie:`Internet Explorer`,internetarchivecrawler:`InternetArchiveCrawler`,k_meleon:`K-Meleon`,librewolf:`LibreWolf`,linespider:`Linespider`,maxthon:`Maxthon`,meta_externalads:`Meta-ExternalAds`,meta_externalagent:`Meta-ExternalAgent`,meta_externalfetcher:`Meta-ExternalFetcher`,meta_webindexer:`Meta-WebIndexer`,mz:`MZ Browser`,naver:`NAVER Whale Browser`,oai_searchbot:`OAI-SearchBot`,omgilibot:`Omgilibot`,opera:`Opera`,opera_coast:`Opera Coast`,pale_moon:`Pale Moon`,perplexitybot:`PerplexityBot`,perplexity_user:`Perplexity-User`,phantomjs:`PhantomJS`,pingdombot:`PingdomBot`,puffin:`Puffin`,qq:`QQ Browser`,qqlite:`QQ Browser Lite`,qupzilla:`QupZilla`,roku:`Roku`,safari:`Safari`,sailfish:`Sailfish`,samsung_internet:`Samsung Internet for Android`,seamonkey:`SeaMonkey`,slackbot:`SlackBot`,sleipnir:`Sleipnir`,sogou:`Sogou Browser`,swing:`Swing`,tizen:`Tizen`,uc:`UC Browser`,vivaldi:`Vivaldi`,webos:`WebOS Browser`,wechat:`WeChat`,yahooslurp:`YahooSlurp`,yandex:`Yandex Browser`,yandexbot:`YandexBot`,youbot:`YouBot`},t.PLATFORMS_MAP={bot:`bot`,desktop:`desktop`,mobile:`mobile`,tablet:`tablet`,tv:`tv`},t.OS_MAP={Android:`Android`,Bada:`Bada`,BlackBerry:`BlackBerry`,ChromeOS:`Chrome OS`,HarmonyOS:`HarmonyOS`,iOS:`iOS`,Linux:`Linux`,MacOS:`macOS`,PlayStation4:`PlayStation 4`,Roku:`Roku`,Tizen:`Tizen`,WebOS:`WebOS`,Windows:`Windows`,WindowsPhone:`Windows Phone`},t.ENGINE_MAP={Blink:`Blink`,EdgeHTML:`EdgeHTML`,Gecko:`Gecko`,Presto:`Presto`,Trident:`Trident`,WebKit:`WebKit`}},90:function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var r,i=(r=n(91))&&r.__esModule?r:{default:r},a=n(18);function o(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,`value`in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}t.default=function(){function e(){}var t,n,r;return e.getParser=function(e,t,n){if(t===void 0&&(t=!1),n===void 0&&(n=null),typeof e!=`string`)throw Error(`UserAgent should be a string`);return new i.default(e,t,n)},e.parse=function(e,t){return t===void 0&&(t=null),new i.default(e,t).getResult()},t=e,r=[{key:`BROWSER_MAP`,get:function(){return a.BROWSER_MAP}},{key:`ENGINE_MAP`,get:function(){return a.ENGINE_MAP}},{key:`OS_MAP`,get:function(){return a.OS_MAP}},{key:`PLATFORMS_MAP`,get:function(){return a.PLATFORMS_MAP}}],(n=null)&&o(t.prototype,n),r&&o(t,r),e}(),e.exports=t.default},91:function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var r=c(n(92)),i=c(n(93)),a=c(n(94)),o=c(n(95)),s=c(n(17));function c(e){return e&&e.__esModule?e:{default:e}}t.default=function(){function e(e,t,n){if(t===void 0&&(t=!1),n===void 0&&(n=null),e==null||e===``)throw Error(`UserAgent parameter can't be empty`);this._ua=e;var r=!1;typeof t==`boolean`?(r=t,this._hints=n):this._hints=typeof t==`object`&&t?t:null,this.parsedResult={},!0!==r&&this.parse()}var t=e.prototype;return t.getHints=function(){return this._hints},t.hasBrand=function(e){if(!this._hints||!Array.isArray(this._hints.brands))return!1;var t=e.toLowerCase();return this._hints.brands.some((function(e){return e.brand&&e.brand.toLowerCase()===t}))},t.getBrandVersion=function(e){if(this._hints&&Array.isArray(this._hints.brands)){var t=e.toLowerCase(),n=this._hints.brands.find((function(e){return e.brand&&e.brand.toLowerCase()===t}));return n?n.version:void 0}},t.getUA=function(){return this._ua},t.test=function(e){return e.test(this._ua)},t.parseBrowser=function(){var e=this;this.parsedResult.browser={};var t=s.default.find(r.default,(function(t){if(typeof t.test==`function`)return t.test(e);if(Array.isArray(t.test))return t.test.some((function(t){return e.test(t)}));throw Error(`Browser's test function is not valid`)}));return t&&(this.parsedResult.browser=t.describe(this.getUA(),this)),this.parsedResult.browser},t.getBrowser=function(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser()},t.getBrowserName=function(e){return e?String(this.getBrowser().name).toLowerCase()||``:this.getBrowser().name||``},t.getBrowserVersion=function(){return this.getBrowser().version},t.getOS=function(){return this.parsedResult.os?this.parsedResult.os:this.parseOS()},t.parseOS=function(){var e=this;this.parsedResult.os={};var t=s.default.find(i.default,(function(t){if(typeof t.test==`function`)return t.test(e);if(Array.isArray(t.test))return t.test.some((function(t){return e.test(t)}));throw Error(`Browser's test function is not valid`)}));return t&&(this.parsedResult.os=t.describe(this.getUA())),this.parsedResult.os},t.getOSName=function(e){var t=this.getOS().name;return e?String(t).toLowerCase()||``:t||``},t.getOSVersion=function(){return this.getOS().version},t.getPlatform=function(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform()},t.getPlatformType=function(e){e===void 0&&(e=!1);var t=this.getPlatform().type;return e?String(t).toLowerCase()||``:t||``},t.parsePlatform=function(){var e=this;this.parsedResult.platform={};var t=s.default.find(a.default,(function(t){if(typeof t.test==`function`)return t.test(e);if(Array.isArray(t.test))return t.test.some((function(t){return e.test(t)}));throw Error(`Browser's test function is not valid`)}));return t&&(this.parsedResult.platform=t.describe(this.getUA())),this.parsedResult.platform},t.getEngine=function(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine()},t.getEngineName=function(e){return e?String(this.getEngine().name).toLowerCase()||``:this.getEngine().name||``},t.parseEngine=function(){var e=this;this.parsedResult.engine={};var t=s.default.find(o.default,(function(t){if(typeof t.test==`function`)return t.test(e);if(Array.isArray(t.test))return t.test.some((function(t){return e.test(t)}));throw Error(`Browser's test function is not valid`)}));return t&&(this.parsedResult.engine=t.describe(this.getUA())),this.parsedResult.engine},t.parse=function(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this},t.getResult=function(){return s.default.assign({},this.parsedResult)},t.satisfies=function(e){var t=this,n={},r=0,i={},a=0;if(Object.keys(e).forEach((function(t){var o=e[t];typeof o==`string`?(i[t]=o,a+=1):typeof o==`object`&&(n[t]=o,r+=1)})),r>0){var o=Object.keys(n),c=s.default.find(o,(function(e){return t.isOS(e)}));if(c){var l=this.satisfies(n[c]);if(l!==void 0)return l}var u=s.default.find(o,(function(e){return t.isPlatform(e)}));if(u){var d=this.satisfies(n[u]);if(d!==void 0)return d}}if(a>0){var f=Object.keys(i),p=s.default.find(f,(function(e){return t.isBrowser(e,!0)}));if(p!==void 0)return this.compareVersion(i[p])}},t.isBrowser=function(e,t){t===void 0&&(t=!1);var n=this.getBrowserName().toLowerCase(),r=e.toLowerCase(),i=s.default.getBrowserTypeByAlias(r);return t&&i&&(r=i.toLowerCase()),r===n},t.compareVersion=function(e){var t=[0],n=e,r=!1,i=this.getBrowserVersion();if(typeof i==`string`)return e[0]===`>`||e[0]===`<`?(n=e.substr(1),e[1]===`=`?(r=!0,n=e.substr(2)):t=[],e[0]===`>`?t.push(1):t.push(-1)):e[0]===`=`?n=e.substr(1):e[0]===`~`&&(r=!0,n=e.substr(1)),t.indexOf(s.default.compareVersions(i,n,r))>-1},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase()},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase()},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase()},t.is=function(e,t){return t===void 0&&(t=!1),this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e)},t.some=function(e){var t=this;return e===void 0&&(e=[]),e.some((function(e){return t.is(e)}))},e}(),e.exports=t.default},92:function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var r,i=(r=n(17))&&r.__esModule?r:{default:r},a=/version\/(\d+(\.?_?\d+)+)/i;t.default=[{test:[/gptbot/i],describe:function(e){var t={name:`GPTBot`},n=i.default.getFirstMatch(/gptbot\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/chatgpt-user/i],describe:function(e){var t={name:`ChatGPT-User`},n=i.default.getFirstMatch(/chatgpt-user\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/oai-searchbot/i],describe:function(e){var t={name:`OAI-SearchBot`},n=i.default.getFirstMatch(/oai-searchbot\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/claudebot/i,/claude-web/i,/claude-user/i,/claude-searchbot/i],describe:function(e){var t={name:`ClaudeBot`},n=i.default.getFirstMatch(/(?:claudebot|claude-web|claude-user|claude-searchbot)\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/omgilibot/i,/webzio-extended/i],describe:function(e){var t={name:`Omgilibot`},n=i.default.getFirstMatch(/(?:omgilibot|webzio-extended)\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/diffbot/i],describe:function(e){var t={name:`Diffbot`},n=i.default.getFirstMatch(/diffbot\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/perplexitybot/i],describe:function(e){var t={name:`PerplexityBot`},n=i.default.getFirstMatch(/perplexitybot\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/perplexity-user/i],describe:function(e){var t={name:`Perplexity-User`},n=i.default.getFirstMatch(/perplexity-user\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/youbot/i],describe:function(e){var t={name:`YouBot`},n=i.default.getFirstMatch(/youbot\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/meta-webindexer/i],describe:function(e){var t={name:`Meta-WebIndexer`},n=i.default.getFirstMatch(/meta-webindexer\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/meta-externalads/i],describe:function(e){var t={name:`Meta-ExternalAds`},n=i.default.getFirstMatch(/meta-externalads\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/meta-externalagent/i],describe:function(e){var t={name:`Meta-ExternalAgent`},n=i.default.getFirstMatch(/meta-externalagent\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/meta-externalfetcher/i],describe:function(e){var t={name:`Meta-ExternalFetcher`},n=i.default.getFirstMatch(/meta-externalfetcher\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/googlebot/i],describe:function(e){var t={name:`Googlebot`},n=i.default.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/linespider/i],describe:function(e){var t={name:`Linespider`},n=i.default.getFirstMatch(/(?:linespider)(?:-[-\w]+)?[\s/](\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/amazonbot/i],describe:function(e){var t={name:`AmazonBot`},n=i.default.getFirstMatch(/amazonbot\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/bingbot/i],describe:function(e){var t={name:`BingCrawler`},n=i.default.getFirstMatch(/bingbot\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/baiduspider/i],describe:function(e){var t={name:`BaiduSpider`},n=i.default.getFirstMatch(/baiduspider\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/duckduckbot/i],describe:function(e){var t={name:`DuckDuckBot`},n=i.default.getFirstMatch(/duckduckbot\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/ia_archiver/i],describe:function(e){var t={name:`InternetArchiveCrawler`},n=i.default.getFirstMatch(/ia_archiver\/(\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/facebookexternalhit/i,/facebookcatalog/i],describe:function(){return{name:`FacebookExternalHit`}}},{test:[/slackbot/i,/slack-imgProxy/i],describe:function(e){var t={name:`SlackBot`},n=i.default.getFirstMatch(/(?:slackbot|slack-imgproxy)(?:-[-\w]+)?[\s/](\d+(\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/yahoo!?[\s/]*slurp/i],describe:function(){return{name:`YahooSlurp`}}},{test:[/yandexbot/i,/yandexmobilebot/i],describe:function(){return{name:`YandexBot`}}},{test:[/pingdom/i],describe:function(){return{name:`PingdomBot`}}},{test:[/opera/i],describe:function(e){var t={name:`Opera`},n=i.default.getFirstMatch(a,e)||i.default.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/opr\/|opios/i],describe:function(e){var t={name:`Opera`},n=i.default.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/SamsungBrowser/i],describe:function(e){var t={name:`Samsung Internet for Android`},n=i.default.getFirstMatch(a,e)||i.default.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/Whale/i],describe:function(e){var t={name:`NAVER Whale Browser`},n=i.default.getFirstMatch(a,e)||i.default.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/PaleMoon/i],describe:function(e){var t={name:`Pale Moon`},n=i.default.getFirstMatch(a,e)||i.default.getFirstMatch(/(?:PaleMoon)[\s/](\d+(?:\.\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/MZBrowser/i],describe:function(e){var t={name:`MZ Browser`},n=i.default.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/focus/i],describe:function(e){var t={name:`Focus`},n=i.default.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/swing/i],describe:function(e){var t={name:`Swing`},n=i.default.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/coast/i],describe:function(e){var t={name:`Opera Coast`},n=i.default.getFirstMatch(a,e)||i.default.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe:function(e){var t={name:`Opera Touch`},n=i.default.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/yabrowser/i],describe:function(e){var t={name:`Yandex Browser`},n=i.default.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/ucbrowser/i],describe:function(e){var t={name:`UC Browser`},n=i.default.getFirstMatch(a,e)||i.default.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/Maxthon|mxios/i],describe:function(e){var t={name:`Maxthon`},n=i.default.getFirstMatch(a,e)||i.default.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/epiphany/i],describe:function(e){var t={name:`Epiphany`},n=i.default.getFirstMatch(a,e)||i.default.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/puffin/i],describe:function(e){var t={name:`Puffin`},n=i.default.getFirstMatch(a,e)||i.default.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/sleipnir/i],describe:function(e){var t={name:`Sleipnir`},n=i.default.getFirstMatch(a,e)||i.default.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/k-meleon/i],describe:function(e){var t={name:`K-Meleon`},n=i.default.getFirstMatch(a,e)||i.default.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/micromessenger/i],describe:function(e){var t={name:`WeChat`},n=i.default.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/qqbrowser/i],describe:function(e){var t={name:/qqbrowserlite/i.test(e)?`QQ Browser Lite`:`QQ Browser`},n=i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/msie|trident/i],describe:function(e){var t={name:`Internet Explorer`},n=i.default.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/\sedg\//i],describe:function(e){var t={name:`Microsoft Edge`},n=i.default.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/edg([ea]|ios)/i],describe:function(e){var t={name:`Microsoft Edge`},n=i.default.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/vivaldi/i],describe:function(e){var t={name:`Vivaldi`},n=i.default.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/seamonkey/i],describe:function(e){var t={name:`SeaMonkey`},n=i.default.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/sailfish/i],describe:function(e){var t={name:`Sailfish`},n=i.default.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,e);return n&&(t.version=n),t}},{test:[/silk/i],describe:function(e){var t={name:`Amazon Silk`},n=i.default.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/phantom/i],describe:function(e){var t={name:`PhantomJS`},n=i.default.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/slimerjs/i],describe:function(e){var t={name:`SlimerJS`},n=i.default.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(e){var t={name:`BlackBerry`},n=i.default.getFirstMatch(a,e)||i.default.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t={name:`WebOS Browser`},n=i.default.getFirstMatch(a,e)||i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/bada/i],describe:function(e){var t={name:`Bada`},n=i.default.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/tizen/i],describe:function(e){var t={name:`Tizen`},n=i.default.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/qupzilla/i],describe:function(e){var t={name:`QupZilla`},n=i.default.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/librewolf/i],describe:function(e){var t={name:`LibreWolf`},n=i.default.getFirstMatch(/(?:librewolf)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/firefox|iceweasel|fxios/i],describe:function(e){var t={name:`Firefox`},n=i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/electron/i],describe:function(e){var t={name:`Electron`},n=i.default.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/sogoumobilebrowser/i,/metasr/i,/se 2\.[x]/i],describe:function(e){var t={name:`Sogou Browser`},n=i.default.getFirstMatch(/(?:sogoumobilebrowser)[\s/](\d+(\.?_?\d+)+)/i,e),r=i.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,e),a=i.default.getFirstMatch(/se ([\d.]+)x/i,e),o=n||r||a;return o&&(t.version=o),t}},{test:[/MiuiBrowser/i],describe:function(e){var t={name:`Miui`},n=i.default.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:function(e){return!!e.hasBrand(`DuckDuckGo`)||e.test(/\sDdg\/[\d.]+$/i)},describe:function(e,t){var n={name:`DuckDuckGo`};if(t){var r=t.getBrandVersion(`DuckDuckGo`);if(r)return n.version=r,n}var a=i.default.getFirstMatch(/\sDdg\/([\d.]+)$/i,e);return a&&(n.version=a),n}},{test:function(e){return e.hasBrand(`Brave`)},describe:function(e,t){var n={name:`Brave`};if(t){var r=t.getBrandVersion(`Brave`);if(r)return n.version=r,n}return n}},{test:[/chromium/i],describe:function(e){var t={name:`Chromium`},n=i.default.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/chrome|crios|crmo/i],describe:function(e){var t={name:`Chrome`},n=i.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/GSA/i],describe:function(e){var t={name:`Google Search`},n=i.default.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:function(e){var t=!e.test(/like android/i),n=e.test(/android/i);return t&&n},describe:function(e){var t={name:`Android Browser`},n=i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/playstation 4/i],describe:function(e){var t={name:`PlayStation 4`},n=i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/safari|applewebkit/i],describe:function(e){var t={name:`Safari`},n=i.default.getFirstMatch(a,e);return n&&(t.version=n),t}},{test:[/.*/i],describe:function(e){var t=e.search(`\\(`)===-1?/^(.*)\/(.*) /:/^(.*)\/(.*)[ \t]\((.*)/;return{name:i.default.getFirstMatch(t,e),version:i.default.getSecondMatch(t,e)}}}],e.exports=t.default},93:function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var r,i=(r=n(17))&&r.__esModule?r:{default:r},a=n(18);t.default=[{test:[/Roku\/DVP/],describe:function(e){var t=i.default.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,e);return{name:a.OS_MAP.Roku,version:t}}},{test:[/windows phone/i],describe:function(e){var t=i.default.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,e);return{name:a.OS_MAP.WindowsPhone,version:t}}},{test:[/windows /i],describe:function(e){var t=i.default.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,e),n=i.default.getWindowsVersionName(t);return{name:a.OS_MAP.Windows,version:t,versionName:n}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(e){var t={name:a.OS_MAP.iOS},n=i.default.getSecondMatch(/(Version\/)(\d[\d.]+)/,e);return n&&(t.version=n),t}},{test:[/macintosh/i],describe:function(e){var t=i.default.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,e).replace(/[_\s]/g,`.`),n=i.default.getMacOSVersionName(t),r={name:a.OS_MAP.MacOS,version:t};return n&&(r.versionName=n),r}},{test:[/(ipod|iphone|ipad)/i],describe:function(e){var t=i.default.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,e).replace(/[_\s]/g,`.`);return{name:a.OS_MAP.iOS,version:t}}},{test:[/OpenHarmony/i],describe:function(e){var t=i.default.getFirstMatch(/OpenHarmony\s+(\d+(\.\d+)*)/i,e);return{name:a.OS_MAP.HarmonyOS,version:t}}},{test:function(e){var t=!e.test(/like android/i),n=e.test(/android/i);return t&&n},describe:function(e){var t=i.default.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,e),n=i.default.getAndroidVersionName(t),r={name:a.OS_MAP.Android,version:t};return n&&(r.versionName=n),r}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t=i.default.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,e),n={name:a.OS_MAP.WebOS};return t&&t.length&&(n.version=t),n}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(e){var t=i.default.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,e)||i.default.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,e)||i.default.getFirstMatch(/\bbb(\d+)/i,e);return{name:a.OS_MAP.BlackBerry,version:t}}},{test:[/bada/i],describe:function(e){var t=i.default.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,e);return{name:a.OS_MAP.Bada,version:t}}},{test:[/tizen/i],describe:function(e){var t=i.default.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,e);return{name:a.OS_MAP.Tizen,version:t}}},{test:[/linux/i],describe:function(){return{name:a.OS_MAP.Linux}}},{test:[/CrOS/],describe:function(){return{name:a.OS_MAP.ChromeOS}}},{test:[/PlayStation 4/],describe:function(e){var t=i.default.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,e);return{name:a.OS_MAP.PlayStation4,version:t}}}],e.exports=t.default},94:function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var r,i=(r=n(17))&&r.__esModule?r:{default:r},a=n(18);t.default=[{test:[/googlebot/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Google`}}},{test:[/linespider/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Line`}}},{test:[/amazonbot/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Amazon`}}},{test:[/gptbot/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`OpenAI`}}},{test:[/chatgpt-user/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`OpenAI`}}},{test:[/oai-searchbot/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`OpenAI`}}},{test:[/baiduspider/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Baidu`}}},{test:[/bingbot/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Bing`}}},{test:[/duckduckbot/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`DuckDuckGo`}}},{test:[/claudebot/i,/claude-web/i,/claude-user/i,/claude-searchbot/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Anthropic`}}},{test:[/omgilibot/i,/webzio-extended/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Webz.io`}}},{test:[/diffbot/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Diffbot`}}},{test:[/perplexitybot/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Perplexity AI`}}},{test:[/perplexity-user/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Perplexity AI`}}},{test:[/youbot/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`You.com`}}},{test:[/ia_archiver/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Internet Archive`}}},{test:[/meta-webindexer/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Meta`}}},{test:[/meta-externalads/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Meta`}}},{test:[/meta-externalagent/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Meta`}}},{test:[/meta-externalfetcher/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Meta`}}},{test:[/facebookexternalhit/i,/facebookcatalog/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Meta`}}},{test:[/slackbot/i,/slack-imgProxy/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Slack`}}},{test:[/yahoo/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Yahoo`}}},{test:[/yandexbot/i,/yandexmobilebot/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Yandex`}}},{test:[/pingdom/i],describe:function(){return{type:a.PLATFORMS_MAP.bot,vendor:`Pingdom`}}},{test:[/huawei/i],describe:function(e){var t=i.default.getFirstMatch(/(can-l01)/i,e)&&`Nova`,n={type:a.PLATFORMS_MAP.mobile,vendor:`Huawei`};return t&&(n.model=t),n}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:function(){return{type:a.PLATFORMS_MAP.tablet,vendor:`Nexus`}}},{test:[/ipad/i],describe:function(){return{type:a.PLATFORMS_MAP.tablet,vendor:`Apple`,model:`iPad`}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(){return{type:a.PLATFORMS_MAP.tablet,vendor:`Apple`,model:`iPad`}}},{test:[/kftt build/i],describe:function(){return{type:a.PLATFORMS_MAP.tablet,vendor:`Amazon`,model:`Kindle Fire HD 7`}}},{test:[/silk/i],describe:function(){return{type:a.PLATFORMS_MAP.tablet,vendor:`Amazon`}}},{test:[/tablet(?! pc)/i],describe:function(){return{type:a.PLATFORMS_MAP.tablet}}},{test:function(e){var t=e.test(/ipod|iphone/i),n=e.test(/like (ipod|iphone)/i);return t&&!n},describe:function(e){var t=i.default.getFirstMatch(/(ipod|iphone)/i,e);return{type:a.PLATFORMS_MAP.mobile,vendor:`Apple`,model:t}}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:function(){return{type:a.PLATFORMS_MAP.mobile,vendor:`Nexus`}}},{test:[/Nokia/i],describe:function(e){var t=i.default.getFirstMatch(/Nokia\s+([0-9]+(\.[0-9]+)?)/i,e),n={type:a.PLATFORMS_MAP.mobile,vendor:`Nokia`};return t&&(n.model=t),n}},{test:[/[^-]mobi/i],describe:function(){return{type:a.PLATFORMS_MAP.mobile}}},{test:function(e){return e.getBrowserName(!0)===`blackberry`},describe:function(){return{type:a.PLATFORMS_MAP.mobile,vendor:`BlackBerry`}}},{test:function(e){return e.getBrowserName(!0)===`bada`},describe:function(){return{type:a.PLATFORMS_MAP.mobile}}},{test:function(e){return e.getBrowserName()===`windows phone`},describe:function(){return{type:a.PLATFORMS_MAP.mobile,vendor:`Microsoft`}}},{test:function(e){var t=Number(String(e.getOSVersion()).split(`.`)[0]);return e.getOSName(!0)===`android`&&t>=3},describe:function(){return{type:a.PLATFORMS_MAP.tablet}}},{test:function(e){return e.getOSName(!0)===`android`},describe:function(){return{type:a.PLATFORMS_MAP.mobile}}},{test:[/smart-?tv|smarttv/i],describe:function(){return{type:a.PLATFORMS_MAP.tv}}},{test:[/netcast/i],describe:function(){return{type:a.PLATFORMS_MAP.tv}}},{test:function(e){return e.getOSName(!0)===`macos`},describe:function(){return{type:a.PLATFORMS_MAP.desktop,vendor:`Apple`}}},{test:function(e){return e.getOSName(!0)===`windows`},describe:function(){return{type:a.PLATFORMS_MAP.desktop}}},{test:function(e){return e.getOSName(!0)===`linux`},describe:function(){return{type:a.PLATFORMS_MAP.desktop}}},{test:function(e){return e.getOSName(!0)===`playstation 4`},describe:function(){return{type:a.PLATFORMS_MAP.tv}}},{test:function(e){return e.getOSName(!0)===`roku`},describe:function(){return{type:a.PLATFORMS_MAP.tv}}}],e.exports=t.default},95:function(e,t,n){"use strict";t.__esModule=!0,t.default=void 0;var r,i=(r=n(17))&&r.__esModule?r:{default:r},a=n(18);t.default=[{test:function(e){return e.getBrowserName(!0)===`microsoft edge`},describe:function(e){if(/\sedg\//i.test(e))return{name:a.ENGINE_MAP.Blink};var t=i.default.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,e);return{name:a.ENGINE_MAP.EdgeHTML,version:t}}},{test:[/trident/i],describe:function(e){var t={name:a.ENGINE_MAP.Trident},n=i.default.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:function(e){return e.test(/presto/i)},describe:function(e){var t={name:a.ENGINE_MAP.Presto},n=i.default.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:function(e){var t=e.test(/gecko/i),n=e.test(/like gecko/i);return t&&!n},describe:function(e){var t={name:a.ENGINE_MAP.Gecko},n=i.default.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/(apple)?webkit\/537\.36/i],describe:function(){return{name:a.ENGINE_MAP.Blink}}},{test:[/(apple)?webkit/i],describe:function(e){var t={name:a.ENGINE_MAP.WebKit},n=i.default.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,e);return n&&(t.version=n),t}}],e.exports=t.default}})}))})),fb=/* @__PURE__ */ s(((e,t)=>{t.exports=s,s.default=s,s.stable=d,s.stableStringify=d;var n=`[...]`,r=`[Circular]`,i=[],a=[];function o(){return{depthLimit:2**53-1,edgesLimit:2**53-1}}function s(e,t,n,r){r===void 0&&(r=o()),l(e,``,0,[],void 0,0,r);var s;try{s=a.length===0?JSON.stringify(e,t,n):JSON.stringify(e,p(t),n)}catch{return JSON.stringify(`[unable to serialize, circular reference is too complex to analyze]`)}finally{for(;i.length!==0;){var c=i.pop();c.length===4?Object.defineProperty(c[0],c[1],c[3]):c[0][c[1]]=c[2]}}return s}function c(e,t,n,r){var o=Object.getOwnPropertyDescriptor(r,n);o.get===void 0?(r[n]=e,i.push([r,n,t])):o.configurable?(Object.defineProperty(r,n,{value:e}),i.push([r,n,t,o])):a.push([t,n,e])}function l(e,t,i,a,o,s,u){s+=1;var d;if(typeof e==`object`&&e){for(d=0;d<a.length;d++)if(a[d]===e){c(r,e,t,o);return}if(u.depthLimit!==void 0&&s>u.depthLimit){c(n,e,t,o);return}if(u.edgesLimit!==void 0&&i+1>u.edgesLimit){c(n,e,t,o);return}if(a.push(e),Array.isArray(e))for(d=0;d<e.length;d++)l(e[d],d,d,a,e,s,u);else{var f=Object.keys(e);for(d=0;d<f.length;d++){var p=f[d];l(e[p],p,d,a,e,s,u)}}a.pop()}}function u(e,t){return e<t?-1:+(e>t)}function d(e,t,n,r){r===void 0&&(r=o());var s=f(e,``,0,[],void 0,0,r)||e,c;try{c=a.length===0?JSON.stringify(s,t,n):JSON.stringify(s,p(t),n)}catch{return JSON.stringify(`[unable to serialize, circular reference is too complex to analyze]`)}finally{for(;i.length!==0;){var l=i.pop();l.length===4?Object.defineProperty(l[0],l[1],l[3]):l[0][l[1]]=l[2]}}return c}function f(e,t,a,o,s,l,d){l+=1;var p;if(typeof e==`object`&&e){for(p=0;p<o.length;p++)if(o[p]===e){c(r,e,t,s);return}try{if(typeof e.toJSON==`function`)return}catch{return}if(d.depthLimit!==void 0&&l>d.depthLimit){c(n,e,t,s);return}if(d.edgesLimit!==void 0&&a+1>d.edgesLimit){c(n,e,t,s);return}if(o.push(e),Array.isArray(e))for(p=0;p<e.length;p++)f(e[p],p,p,o,e,l,d);else{var m={},h=Object.keys(e).sort(u);for(p=0;p<h.length;p++){var g=h[p];f(e[g],g,p,o,e,l,d),m[g]=e[g]}if(s!==void 0)i.push([s,t,e]),s[t]=m;else return m}o.pop()}}function p(e){return e=e===void 0?function(e,t){return t}:e,function(t,n){if(a.length>0)for(var r=0;r<a.length;r++){var i=a[r];if(i[1]===t&&i[0]===n){n=i[2],a.splice(r,1);break}}return e.call(this,t,n)}}})),pb=/* @__PURE__ */ u(db()),mb=/* @__PURE__ */ u(fb());let hb=Id(`network-monitor`,{level:Sd.info}),gb=Date.now(),_b=window.navigator?.userAgent?pb.default.parse(window.navigator.userAgent):void 0,vb=(e,t={depthLimit:10,edgesLimit:10})=>e instanceof Event?`'${e.type}' Event`:typeof e==`string`?e:(0,mb.default)(e,void 0,2,t);var yb=class{constructor(){this.unsubscribableObservers=[],this.runAllChecks=(e,t)=>J(this,void 0,void 0,function*(){if(!this.isReady||this.isRunningChecks&&!t)return;hb.info(`Run health checks, triggered by`,vb(e),`| Active resources`,this.resources.size),this.isRunningChecks=!0,this.synchroniseCheckInterval();let n=this.getFormattedTimestamp(this.getNowTimestamp()),r=yield this.isOnlineCheck();r?hb.debug(`Network connected at ${n}`):hb.warn(`Network disconnected at ${n}`);let i=this.normaliseSerializedSocketStatus(this.socketStatus.serialize(),r),a=this.preFlightSocketChecks(i);if(a||hb.debug(`Socket pre-flight checks failed`),!r||!a){hb.debug(`Aborting remaining health checks`);let e=[...this.resources].reduce((e,[t,n])=>{let i=e[n.resourceName];return i?(i.sourceRef=[...i.sourceRef,n.message.SOURCE_REF],e):Object.assign(Object.assign({},e),{[n.resourceName]:this.normaliseResourceHealth({name:n.resourceName,sourceRef:[n.message.SOURCE_REF],isConnected:n.isConnected,lastUpdated:n.lastUpdated},r)})},{});this.reportSystemHealth({isAuthenticated:this.user.isAuthenticated,isOnline:r,resources:e,resourcesAllConnected:!1,socket:i}),this.isRunningChecks=!1;return}let o=!0,s=[];this.resources.forEach((e,t)=>{let{resourceName:r,message:i,functions:a}=e,{resourceChecks:c=this.config.resourceChecks,resourceDataLogon:l=this.config.resourceDataLogon}=a,{SOURCE_REF:u}=i,d=!1,f,p,m,h,g;s.push(J(this,void 0,void 0,function*(){try{hb.debug(`Running health check against ${r}`);let e=yield Promise.race([c(u,t),Qf(this.config.checkTimeout,()=>({isConnected:!1,lastUpdated:this.getNowTimestamp(),timeout:!0}))]);d=e.isConnected,f=e.lastUpdated,p=e.lastMessage,h=e.timeout}catch(e){d=!1,f=this.getNowTimestamp(),m=e,p=e?.receivedMessage??e}return g=p?.MESSAGE_TYPE===Rg.MSG_NACK||Ug(p,yg.NOT_FOUND),n=this.getFormattedTimestamp(f??this.getNowTimestamp()),d?hb.debug(`${r} is healthy at ${n}`):hb.warn(`${r} is not healthy at ${n}`),p&&hb.debug(`${r} messaged at ${n}`,vb(p)),m&&hb.error(`${r} errored at ${n}`,vb(m)),h&&hb.warn(`${r} timed out at ${n}`),g&&(hb.error(`${r} issue, re-attempting data logon at ${n}`),l(e)),o&&(o=d),{name:r,sourceRef:[u],isConnected:d,lastUpdated:f,lastError:m}}))});let c=(yield Promise.allSettled(s)).reduce((e,t)=>{if(t.status===`fulfilled`){let n=e[t.value.name];return n?(n.sourceRef=[...n.sourceRef,...t.value.sourceRef],e):Object.assign(Object.assign({},e),{[t.value.name]:this.normaliseResourceHealth(t.value)})}return hb.warn(`Unexpected promise rejection occurred. Please check any custom resourceChecks return MonitoredResourceChecksResult.`),e},{});hb.debug(`Health checks complete`),this.reportSystemHealth({isAuthenticated:this.user.isAuthenticated,isOnline:r,resources:c,resourcesAllConnected:o,socket:i}),this.isRunningChecks=!1}),this.config.logLevel!==void 0&&(hb.level=this.config.logLevel)}create(){if(this.resources){hb.warn(`NetworkMonitor already created. If this is intentional, please call NetworkMonitor.destroy first.`);return}this.addListeners(),this.resources=/* @__PURE__ */ new Map,setTimeout(()=>{this.isReady=!0,this.synchroniseCheckInterval(),this.runAllChecks(`NetworkMonitor.create()`)},this.config.startDelay)}destroy(){this.removeListeners(),clearInterval(this.internalId),this.resources.clear(),this.resources=void 0,this.status=void 0,this.isReady=void 0}isOnlineCheck(){return Promise.resolve(navigator.onLine)}addResource(e,t){this.resources||this.create(),this.resources.set(e,t)}removeResource(e){this.resources.delete(e)}addListeners(){var e,t;(e=this.config.windowEvents)==null||e.forEach(e=>window.addEventListener(e,this.runAllChecks)),(t=this.config.documentEvents)==null||t.forEach(e=>document.addEventListener(e,this.runAllChecks)),this.config.genesisConnectEvents.includes(`stream`)&&this.unsubscribableObservers.push(this.connectEvents.addStreamListener(({detail:e})=>{let{functions:t,message:n,resourceName:r,stream:i}=e;this.config.ignoredGenesisResources.includes(r)||this.addResource(i,{functions:t,message:n,resourceName:r})},({detail:e})=>{let{resourceName:t,stream:n}=e;this.config.ignoredGenesisResources.includes(t)||this.removeResource(n)},({detail:e})=>{let{resourceName:t,stream:n,error:r}=e,i=r.receivedMessage??r,a=``;Ug(i,yg.NOT_FOUND)?a=`Please check the resource is running.`:Ug(i,yg.FORBIDDEN)&&(a=`You are not authorised to access this resource, removing it from monitoring.`,this.removeResource(n)),hb.error(`${t} errored at ${this.getFormattedTimestamp(this.getNowTimestamp())}.`,a,r)})),this.config.genesisConnectEvents.includes(`commit`)&&this.unsubscribableObservers.push(this.connectEvents.addCommitListener(e=>{this.config.ignoredGenesisResources.includes(e.detail.eventName)||this.runAllChecks(e)})),this.unsubscribableObservers.push(this.connectEvents.addMetadataListener(({detail:e})=>{let{resourceName:t,error:n}=e;if(n){hb.error(`${t} had an unrecoverable error at ${this.getFormattedTimestamp(this.getNowTimestamp())}.`,`Please check the resource is running.`,n);return}}))}removeListeners(){var e,t;(e=this.config.windowEvents)==null||e.forEach(e=>window.removeEventListener(e,this.runAllChecks)),(t=this.config.documentEvents)==null||t.forEach(e=>document.removeEventListener(e,this.runAllChecks)),this.unsubscribableObservers.forEach(e=>e()),this.unsubscribableObservers.length=0}reportSystemHealth(e){let t=this.config.eventEmitter??document;this.status=this.normaliseEventDetail(e),(this.status.isHealthy?hb.debug:hb.warn)(`Emitting 'system-health-changed' event`,vb(this.status)),t?.dispatchEvent(new CustomEvent(`system-health-changed`,{detail:this.status,bubbles:t!==document,composed:!0})),this.status.socket.reconnectionLimitReached&&(hb.debug(`Network monitoring no longer required. Please check your network and reload your application.`),this.destroy())}reportStabilityToGenesis(e){return J(this,void 0,void 0,function*(){return hb.debug(`User requested report stability to Genesis.`),hb.info(`Please attach this data to your Genesis Support request:
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@genesislcap/foundation-rapid-cdn",
3
3
  "description": "Side-effecting CDN bundle that auto-registers the Rapid Design System. Intended for AI/prototyping tools (e.g. Claude Artifacts), not for production apps.",
4
- "version": "15.89.0",
4
+ "version": "15.90.0",
5
5
  "sideEffects": true,
6
6
  "license": "SEE LICENSE IN license.txt",
7
7
  "unpkg": "dist/foundation-rapid-cdn.iife.min.js",
@@ -24,11 +24,11 @@
24
24
  "@babel/generator": "^7.29.0",
25
25
  "@babel/parser": "^7.29.0",
26
26
  "@babel/traverse": "^7.29.0",
27
- "@genesislcap/genx": "15.89.0",
27
+ "@genesislcap/genx": "15.90.0",
28
28
  "rolldown": "~1.2.9"
29
29
  },
30
30
  "dependencies": {
31
- "@genesislcap/rapid-design-system": "15.89.0"
31
+ "@genesislcap/rapid-design-system": "15.90.0"
32
32
  },
33
33
  "repository": {
34
34
  "type": "git",