@kosdev-code/kos-ui-sdk 0.1.0-next.719 → 0.1.0-next.734
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/core/kosCore.d.ts.map +1 -1
- package/core/core/kosModel.d.ts +1 -0
- package/core/core/kosModel.d.ts.map +1 -1
- package/core/core/model/kos-fsm-manager.d.ts +4 -1
- package/core/core/model/kos-fsm-manager.d.ts.map +1 -1
- package/core/core/model/kos-online-lifecycle-manager.d.ts.map +1 -1
- package/core/core/transport/base-message-transport.d.ts +0 -10
- package/core/core/transport/base-message-transport.d.ts.map +1 -1
- package/core/core/transport/webSocketTransport.d.ts +12 -0
- package/core/core/transport/webSocketTransport.d.ts.map +1 -1
- package/index.cjs +463 -179
- package/index.cjs.map +1 -1
- package/index.js +463 -179
- package/index.js.map +1 -1
- package/models/models/future/future-model.d.ts.map +1 -1
- package/models/models/translation/translation-model.d.ts +1 -0
- package/models/models/translation/translation-model.d.ts.map +1 -1
- package/models/models/trouble-container/trouble-container-model.d.ts +1 -0
- package/models/models/trouble-container/trouble-container-model.d.ts.map +1 -1
- package/package.json +3 -3
- package/ui/components/index.d.ts +1 -0
- package/ui/components/index.d.ts.map +1 -1
- package/ui/components/reconnecting-overlay/index.d.ts +35 -0
- package/ui/components/reconnecting-overlay/index.d.ts.map +1 -0
- package/ui/components/reconnecting-overlay/reconnecting-overlay-styles.d.ts +4 -0
- package/ui/components/reconnecting-overlay/reconnecting-overlay-styles.d.ts.map +1 -0
- package/ui/components/reconnecting-overlay/use-reconnecting-overlay-state.d.ts +57 -0
- package/ui/components/reconnecting-overlay/use-reconnecting-overlay-state.d.ts.map +1 -0
- package/ui/contexts/kos-core-context.d.ts.map +1 -1
- package/ui/contexts/translation-container/kos-translations-provider.d.ts +5 -0
- package/ui/contexts/translation-container/kos-translations-provider.d.ts.map +1 -1
- package/ui/hooks/index.d.ts +1 -0
- package/ui/hooks/index.d.ts.map +1 -1
- package/ui/hooks/use-connection-state.d.ts +38 -0
- package/ui/hooks/use-connection-state.d.ts.map +1 -0
- package/ui/index.d.ts +1 -0
- package/ui/index.d.ts.map +1 -1
- package/ui/policies/constants.d.ts +11 -0
- package/ui/policies/constants.d.ts.map +1 -0
- package/ui/policies/index.d.ts +3 -0
- package/ui/policies/index.d.ts.map +1 -0
- package/ui/policies/reload-on-disconnect-policy.d.ts +56 -0
- package/ui/policies/reload-on-disconnect-policy.d.ts.map +1 -0
package/index.cjs
CHANGED
|
@@ -807,12 +807,12 @@ log$Q.methodFactory = function(methodName, logLevel, loggerName) {
|
|
|
807
807
|
return function(...args) {
|
|
808
808
|
const _name = loggerName ? String(loggerName) : "";
|
|
809
809
|
const prefix = _name ? `[${String(_name).substring(_name.lastIndexOf(":") + 1)}] | ` : "[root] | ";
|
|
810
|
-
const
|
|
810
|
+
const message2 = args.map(
|
|
811
811
|
(arg) => typeof arg === "object" ? JSON.stringify(arg) : String(arg)
|
|
812
812
|
).join(" ");
|
|
813
|
-
rawMethod(`${prefix}${
|
|
813
|
+
rawMethod(`${prefix}${message2}`);
|
|
814
814
|
if (globalThis?.kosConfig?.logging && globalThis.kosLog && (loggerName !== WS_LOG || enableMessageLogging && enableStudioMessageLogging)) {
|
|
815
|
-
globalThis.kosLog(`UI: ${prefix}${
|
|
815
|
+
globalThis.kosLog(`UI: ${prefix}${message2}`);
|
|
816
816
|
}
|
|
817
817
|
};
|
|
818
818
|
};
|
|
@@ -1027,11 +1027,11 @@ function createTransitionMethod(_instance, config2, options, entryHandlers, exit
|
|
|
1027
1027
|
};
|
|
1028
1028
|
}
|
|
1029
1029
|
function handleUninitializedFsm(initializeAt, throwOnInvalid) {
|
|
1030
|
-
const
|
|
1030
|
+
const message2 = `Cannot transition: FSM not initialized. Waiting for ${initializeAt} lifecycle phase.`;
|
|
1031
1031
|
if (throwOnInvalid) {
|
|
1032
|
-
throw new Error(
|
|
1032
|
+
throw new Error(message2);
|
|
1033
1033
|
} else {
|
|
1034
|
-
console.warn(
|
|
1034
|
+
console.warn(message2);
|
|
1035
1035
|
}
|
|
1036
1036
|
}
|
|
1037
1037
|
function resolveNextState(currentState, event, config2, throwOnInvalid) {
|
|
@@ -1044,11 +1044,11 @@ function resolveNextState(currentState, event, config2, throwOnInvalid) {
|
|
|
1044
1044
|
return nextState;
|
|
1045
1045
|
}
|
|
1046
1046
|
function handleInvalidTransition(currentState, event, throwOnInvalid) {
|
|
1047
|
-
const
|
|
1047
|
+
const message2 = `Invalid transition: Event "${event}" not allowed from state "${currentState}"`;
|
|
1048
1048
|
if (throwOnInvalid) {
|
|
1049
|
-
throw new Error(
|
|
1049
|
+
throw new Error(message2);
|
|
1050
1050
|
} else {
|
|
1051
|
-
console.warn(
|
|
1051
|
+
console.warn(message2);
|
|
1052
1052
|
}
|
|
1053
1053
|
}
|
|
1054
1054
|
function executeTransition(instance, currentState, nextState, event, stateProperty, entryHandlers, exitHandlers, options) {
|
|
@@ -1364,8 +1364,8 @@ class ServiceRequestError extends Error {
|
|
|
1364
1364
|
responseBody;
|
|
1365
1365
|
/** Response headers as a plain key/value map */
|
|
1366
1366
|
responseHeaders;
|
|
1367
|
-
constructor(
|
|
1368
|
-
super(
|
|
1367
|
+
constructor(message2, details) {
|
|
1368
|
+
super(message2);
|
|
1369
1369
|
this.name = "ServiceRequestError";
|
|
1370
1370
|
this.status = details.status;
|
|
1371
1371
|
this.statusText = details.statusText;
|
|
@@ -1668,16 +1668,16 @@ function kosStateGuard(options) {
|
|
|
1668
1668
|
const currentState = this.currentState;
|
|
1669
1669
|
const isAllowed = options.allowedStates.includes(currentState);
|
|
1670
1670
|
if (!isAllowed) {
|
|
1671
|
-
const
|
|
1671
|
+
const message2 = `Method ${String(
|
|
1672
1672
|
propertyKey
|
|
1673
1673
|
)} cannot be called from state "${currentState}". Allowed states: ${options.allowedStates.join(
|
|
1674
1674
|
", "
|
|
1675
1675
|
)}`;
|
|
1676
1676
|
const shouldThrow = options.throwOnInvalid !== void 0 ? options.throwOnInvalid : this[StateMachineSetup]?.options?.throwOnInvalid !== false;
|
|
1677
1677
|
if (shouldThrow) {
|
|
1678
|
-
throw new Error(
|
|
1678
|
+
throw new Error(message2);
|
|
1679
1679
|
} else {
|
|
1680
|
-
log$M.warn(
|
|
1680
|
+
log$M.warn(message2);
|
|
1681
1681
|
return void 0;
|
|
1682
1682
|
}
|
|
1683
1683
|
}
|
|
@@ -1943,9 +1943,9 @@ class ExtensionException extends Error {
|
|
|
1943
1943
|
extensionId;
|
|
1944
1944
|
extensionType;
|
|
1945
1945
|
cause;
|
|
1946
|
-
constructor(extensionId, extensionType, cause,
|
|
1946
|
+
constructor(extensionId, extensionType, cause, message2) {
|
|
1947
1947
|
super(
|
|
1948
|
-
|
|
1948
|
+
message2 || `Extension failure in ${extensionType} for id "${extensionId}"`
|
|
1949
1949
|
);
|
|
1950
1950
|
this.name = "ExtensionException";
|
|
1951
1951
|
this.extensionId = extensionId;
|
|
@@ -3393,11 +3393,11 @@ function injectTroubleAwareSupport(modelInstance) {
|
|
|
3393
3393
|
get() {
|
|
3394
3394
|
const pathValue = this[pathProperty];
|
|
3395
3395
|
if (pathValue === void 0 || pathValue === null) {
|
|
3396
|
-
const
|
|
3396
|
+
const message2 = `@kosTroubleAware: Path property '${pathProperty}' is undefined on model ${this.id || "unknown"}. Returning empty troubles array.`;
|
|
3397
3397
|
if (this.logger && typeof this.logger.warn === "function") {
|
|
3398
|
-
this.logger.warn(
|
|
3398
|
+
this.logger.warn(message2);
|
|
3399
3399
|
} else {
|
|
3400
|
-
console.warn(
|
|
3400
|
+
console.warn(message2);
|
|
3401
3401
|
}
|
|
3402
3402
|
return [];
|
|
3403
3403
|
}
|
|
@@ -4175,8 +4175,8 @@ class KosModelCache {
|
|
|
4175
4175
|
class KosModelError extends Error {
|
|
4176
4176
|
context;
|
|
4177
4177
|
originalCause;
|
|
4178
|
-
constructor(
|
|
4179
|
-
super(
|
|
4178
|
+
constructor(message2, context, cause) {
|
|
4179
|
+
super(message2, { cause });
|
|
4180
4180
|
this.name = "KosModelError";
|
|
4181
4181
|
this.context = context;
|
|
4182
4182
|
this.originalCause = cause;
|
|
@@ -4479,8 +4479,8 @@ const TransitionMap = {
|
|
|
4479
4479
|
};
|
|
4480
4480
|
class ModelError extends Error {
|
|
4481
4481
|
model;
|
|
4482
|
-
constructor(
|
|
4483
|
-
super(
|
|
4482
|
+
constructor(message2, model) {
|
|
4483
|
+
super(message2);
|
|
4484
4484
|
this.model = model;
|
|
4485
4485
|
}
|
|
4486
4486
|
}
|
|
@@ -5398,10 +5398,19 @@ class KosFSMManager {
|
|
|
5398
5398
|
});
|
|
5399
5399
|
}
|
|
5400
5400
|
/**
|
|
5401
|
-
* Checks if a given target maps to status or
|
|
5401
|
+
* Checks if a given target maps to status, activeStatus, or onlineStatus.
|
|
5402
|
+
* Online/offline transitions are tracked on model.onlineStatus because the
|
|
5403
|
+
* main FSM keeps status at READY when GO_ONLINE / GO_OFFLINE fire; reading
|
|
5404
|
+
* model.status for those targets would hang the transition forever.
|
|
5402
5405
|
*/
|
|
5403
5406
|
getTransitionStatusFor(target) {
|
|
5404
|
-
|
|
5407
|
+
if ([KosModelState.ACTIVE, KosModelState.INACTIVE].includes(target)) {
|
|
5408
|
+
return this.model.activeStatus;
|
|
5409
|
+
}
|
|
5410
|
+
if ([KosModelState.ONLINE, KosModelState.OFFLINE].includes(target)) {
|
|
5411
|
+
return this.model.onlineStatus;
|
|
5412
|
+
}
|
|
5413
|
+
return this.model.status;
|
|
5405
5414
|
}
|
|
5406
5415
|
}
|
|
5407
5416
|
const BROWSER_ROUTER_MODEL_TYPE = "browser-router-model";
|
|
@@ -5763,6 +5772,7 @@ class KosOnlineLifecycleManager {
|
|
|
5763
5772
|
log;
|
|
5764
5773
|
unsubscribers = [];
|
|
5765
5774
|
register() {
|
|
5775
|
+
this.dispose();
|
|
5766
5776
|
const modelId = this.model.modelId;
|
|
5767
5777
|
const onlineUnsub = subscribe("/kosCore/online", async () => {
|
|
5768
5778
|
this.log.debug(
|
|
@@ -7453,11 +7463,6 @@ class BaseTransport {
|
|
|
7453
7463
|
onConnectionLost;
|
|
7454
7464
|
offlineMessages = [];
|
|
7455
7465
|
oldSend;
|
|
7456
|
-
// Reconnection configuration
|
|
7457
|
-
reconnectAttempts = 0;
|
|
7458
|
-
static MAX_RECONNECT_ATTEMPTS = 10;
|
|
7459
|
-
static BASE_DELAY_MS = 1e3;
|
|
7460
|
-
static MAX_DELAY_MS = 3e4;
|
|
7461
7466
|
constructor({
|
|
7462
7467
|
host,
|
|
7463
7468
|
port,
|
|
@@ -7527,7 +7532,6 @@ class BaseTransport {
|
|
|
7527
7532
|
}
|
|
7528
7533
|
onOpen(event) {
|
|
7529
7534
|
KosLog.info(`websocket connection opened`);
|
|
7530
|
-
this.reconnectAttempts = 0;
|
|
7531
7535
|
this.socket = event.currentTarget;
|
|
7532
7536
|
mobx.runInAction(() => {
|
|
7533
7537
|
this.connectionEstablished = true;
|
|
@@ -7557,26 +7561,8 @@ alias:${this.alias}
|
|
|
7557
7561
|
this.connectionEstablished = false;
|
|
7558
7562
|
});
|
|
7559
7563
|
publish("websocket.disconnected", { code, reason, wasClean });
|
|
7560
|
-
|
|
7561
|
-
|
|
7562
|
-
return;
|
|
7563
|
-
}
|
|
7564
|
-
if (shouldReconnect && this.reconnectAttempts < BaseTransport.MAX_RECONNECT_ATTEMPTS) {
|
|
7565
|
-
const delay2 = this.calculateBackoffDelay();
|
|
7566
|
-
KosLog.debug(
|
|
7567
|
-
`Reconnecting in ${delay2}ms (attempt ${this.reconnectAttempts + 1}/${BaseTransport.MAX_RECONNECT_ATTEMPTS})`
|
|
7568
|
-
);
|
|
7569
|
-
setTimeout(() => {
|
|
7570
|
-
this.reconnectAttempts++;
|
|
7571
|
-
this.onConnectionLost?.();
|
|
7572
|
-
}, delay2);
|
|
7573
|
-
} else if (this.reconnectAttempts >= BaseTransport.MAX_RECONNECT_ATTEMPTS) {
|
|
7574
|
-
KosLog.error(
|
|
7575
|
-
`Max reconnection attempts (${BaseTransport.MAX_RECONNECT_ATTEMPTS}) reached. Giving up.`
|
|
7576
|
-
);
|
|
7577
|
-
publish("websocket.max_retries_exceeded", {
|
|
7578
|
-
attempts: this.reconnectAttempts
|
|
7579
|
-
});
|
|
7564
|
+
if (this.shouldAttemptReconnection(code)) {
|
|
7565
|
+
this.onConnectionLost?.();
|
|
7580
7566
|
} else {
|
|
7581
7567
|
KosLog.info(
|
|
7582
7568
|
`Not reconnecting due to close code ${code} (intentional close or configuration error)`
|
|
@@ -7595,7 +7581,7 @@ alias:${this.alias}
|
|
|
7595
7581
|
shouldAttemptReconnection(code) {
|
|
7596
7582
|
switch (code) {
|
|
7597
7583
|
case 1e3:
|
|
7598
|
-
return
|
|
7584
|
+
return true;
|
|
7599
7585
|
case 1001:
|
|
7600
7586
|
return true;
|
|
7601
7587
|
case 1002:
|
|
@@ -7628,19 +7614,6 @@ alias:${this.alias}
|
|
|
7628
7614
|
return true;
|
|
7629
7615
|
}
|
|
7630
7616
|
}
|
|
7631
|
-
/**
|
|
7632
|
-
* Calculates the delay before the next reconnection attempt using
|
|
7633
|
-
* exponential backoff with jitter.
|
|
7634
|
-
* @returns Delay in milliseconds
|
|
7635
|
-
*/
|
|
7636
|
-
calculateBackoffDelay() {
|
|
7637
|
-
const exponentialDelay = Math.min(
|
|
7638
|
-
BaseTransport.BASE_DELAY_MS * Math.pow(2, this.reconnectAttempts),
|
|
7639
|
-
BaseTransport.MAX_DELAY_MS
|
|
7640
|
-
);
|
|
7641
|
-
const jitter = exponentialDelay * 0.25 * (Math.random() * 2 - 1);
|
|
7642
|
-
return Math.floor(exponentialDelay + jitter);
|
|
7643
|
-
}
|
|
7644
7617
|
send(data) {
|
|
7645
7618
|
KosLog.wsSend(data);
|
|
7646
7619
|
if (window.kosLogEvents) {
|
|
@@ -7701,15 +7674,15 @@ class BridgeTransport {
|
|
|
7701
7674
|
}
|
|
7702
7675
|
sendNextMessage() {
|
|
7703
7676
|
if (this.messageQueue.length > 0) {
|
|
7704
|
-
const
|
|
7705
|
-
globalThis.kosWindowWebsocketSend(
|
|
7677
|
+
const message2 = this.messageQueue.shift();
|
|
7678
|
+
globalThis.kosWindowWebsocketSend(message2);
|
|
7706
7679
|
setTimeout(() => this.sendNextMessage(), 1);
|
|
7707
7680
|
} else {
|
|
7708
7681
|
this.isSending = false;
|
|
7709
7682
|
}
|
|
7710
7683
|
}
|
|
7711
|
-
enqueueMessage(
|
|
7712
|
-
this.messageQueue.push(
|
|
7684
|
+
enqueueMessage(message2) {
|
|
7685
|
+
this.messageQueue.push(message2);
|
|
7713
7686
|
if (!this.isSending) {
|
|
7714
7687
|
this.isSending = true;
|
|
7715
7688
|
this.sendNextMessage();
|
|
@@ -7864,6 +7837,11 @@ class WebSocketTransport {
|
|
|
7864
7837
|
fosSocket;
|
|
7865
7838
|
fosPort;
|
|
7866
7839
|
useFosTransport;
|
|
7840
|
+
// Reconnection state (persists across BaseTransport re-creation in init())
|
|
7841
|
+
reconnectAttempts = 0;
|
|
7842
|
+
static MAX_RECONNECT_ATTEMPTS = 10;
|
|
7843
|
+
static BASE_DELAY_MS = 1e3;
|
|
7844
|
+
static MAX_DELAY_MS = 3e4;
|
|
7867
7845
|
constructor({
|
|
7868
7846
|
host = `localhost`,
|
|
7869
7847
|
port = 8080,
|
|
@@ -7896,6 +7874,7 @@ class WebSocketTransport {
|
|
|
7896
7874
|
(connectionEstablished) => {
|
|
7897
7875
|
if (connectionEstablished) {
|
|
7898
7876
|
log$z.warn("Connection Established");
|
|
7877
|
+
this.reconnectAttempts = 0;
|
|
7899
7878
|
publish(
|
|
7900
7879
|
WebSocketEvents.CONNECTED,
|
|
7901
7880
|
WebSocketEvents.CONNECTED
|
|
@@ -7946,11 +7925,7 @@ class WebSocketTransport {
|
|
|
7946
7925
|
alias: this.alias,
|
|
7947
7926
|
onConnectionLost: () => {
|
|
7948
7927
|
log$z.error(`Connection Lost`);
|
|
7949
|
-
|
|
7950
|
-
WebSocketEvents.DISCONNECTED,
|
|
7951
|
-
WebSocketEvents.DISCONNECTED
|
|
7952
|
-
);
|
|
7953
|
-
this.init();
|
|
7928
|
+
this.scheduleReconnect();
|
|
7954
7929
|
}
|
|
7955
7930
|
});
|
|
7956
7931
|
if (globalThis.kosWindowWebsocketOpen) {
|
|
@@ -7961,6 +7936,39 @@ class WebSocketTransport {
|
|
|
7961
7936
|
}
|
|
7962
7937
|
return this;
|
|
7963
7938
|
}
|
|
7939
|
+
/**
|
|
7940
|
+
* Schedules a reconnect attempt using exponential backoff with jitter.
|
|
7941
|
+
* Counter persists across BaseTransport re-creation, so the cap actually
|
|
7942
|
+
* fires after MAX_RECONNECT_ATTEMPTS consecutive failures rather than
|
|
7943
|
+
* resetting on every new BaseTransport instance.
|
|
7944
|
+
*/
|
|
7945
|
+
scheduleReconnect() {
|
|
7946
|
+
if (this.reconnectAttempts >= WebSocketTransport.MAX_RECONNECT_ATTEMPTS) {
|
|
7947
|
+
KosLog.error(
|
|
7948
|
+
`Max reconnection attempts (${WebSocketTransport.MAX_RECONNECT_ATTEMPTS}) reached. Giving up.`
|
|
7949
|
+
);
|
|
7950
|
+
publish(WebSocketEvents.MAX_RETRIES_EXCEEDED, {
|
|
7951
|
+
attempts: this.reconnectAttempts
|
|
7952
|
+
});
|
|
7953
|
+
return;
|
|
7954
|
+
}
|
|
7955
|
+
const delay2 = this.calculateBackoffDelay();
|
|
7956
|
+
KosLog.debug(
|
|
7957
|
+
`Reconnecting in ${delay2}ms (attempt ${this.reconnectAttempts + 1}/${WebSocketTransport.MAX_RECONNECT_ATTEMPTS})`
|
|
7958
|
+
);
|
|
7959
|
+
setTimeout(() => {
|
|
7960
|
+
this.reconnectAttempts++;
|
|
7961
|
+
this.init();
|
|
7962
|
+
}, delay2);
|
|
7963
|
+
}
|
|
7964
|
+
calculateBackoffDelay() {
|
|
7965
|
+
const exponentialDelay = Math.min(
|
|
7966
|
+
WebSocketTransport.BASE_DELAY_MS * Math.pow(2, this.reconnectAttempts),
|
|
7967
|
+
WebSocketTransport.MAX_DELAY_MS
|
|
7968
|
+
);
|
|
7969
|
+
const jitter = exponentialDelay * 0.25 * (Math.random() * 2 - 1);
|
|
7970
|
+
return Math.floor(exponentialDelay + jitter);
|
|
7971
|
+
}
|
|
7964
7972
|
_sendSubscriptionMessage(topic, type, fos = false, bridge = false, connectionId, explicitDestination = false) {
|
|
7965
7973
|
log$z.debug(`${type} to topic ${topic}`);
|
|
7966
7974
|
let connId;
|
|
@@ -10014,13 +10022,33 @@ class KosCore {
|
|
|
10014
10022
|
this.transport.token = data.body;
|
|
10015
10023
|
}
|
|
10016
10024
|
});
|
|
10025
|
+
subscribe(WebSocketEvents.DISCONNECTED, async () => {
|
|
10026
|
+
await Promise.allSettled(
|
|
10027
|
+
this.modelManager.models.map(async (model) => {
|
|
10028
|
+
try {
|
|
10029
|
+
await model.offline?.();
|
|
10030
|
+
} catch (e) {
|
|
10031
|
+
log$v.error(`model ${model.modelId} offline() threw:`, e);
|
|
10032
|
+
}
|
|
10033
|
+
model.onlineLifecycleManager?.dispose();
|
|
10034
|
+
})
|
|
10035
|
+
);
|
|
10036
|
+
this.fsmService.service.send(KosCoreEvents.GO_OFFLINE);
|
|
10037
|
+
});
|
|
10017
10038
|
subscribe(WebSocketEvents.CONNECTED, async () => {
|
|
10018
10039
|
await this.whenReady();
|
|
10040
|
+
await Promise.allSettled(
|
|
10041
|
+
this.modelManager.models.map(async (model) => {
|
|
10042
|
+
model.onlineLifecycleManager?.register();
|
|
10043
|
+
try {
|
|
10044
|
+
await model.online?.();
|
|
10045
|
+
} catch (e) {
|
|
10046
|
+
log$v.error(`model ${model.modelId} online() threw:`, e);
|
|
10047
|
+
}
|
|
10048
|
+
})
|
|
10049
|
+
);
|
|
10019
10050
|
this.fsmService.service.send(KosCoreEvents.GO_ONLINE);
|
|
10020
10051
|
});
|
|
10021
|
-
subscribe(WebSocketEvents.DISCONNECTED, async () => {
|
|
10022
|
-
this.fsmService.service.send(KosCoreEvents.GO_OFFLINE);
|
|
10023
|
-
});
|
|
10024
10052
|
subscribe("/studioServer/auth/LOGGED_IN", () => {
|
|
10025
10053
|
this.authState = "logged_in";
|
|
10026
10054
|
this.transport.authorized = true;
|
|
@@ -11073,8 +11101,8 @@ const getModelById = (destinationAddress2, url, _fetch) => async ({
|
|
|
11073
11101
|
};
|
|
11074
11102
|
class FetchError extends Error {
|
|
11075
11103
|
payload;
|
|
11076
|
-
constructor(
|
|
11077
|
-
super(
|
|
11104
|
+
constructor(message2, payload) {
|
|
11105
|
+
super(message2);
|
|
11078
11106
|
this.name = "FetchException";
|
|
11079
11107
|
this.payload = payload;
|
|
11080
11108
|
}
|
|
@@ -12178,21 +12206,21 @@ async function waitForAppsToStart(appIds, options = {}) {
|
|
|
12178
12206
|
return false;
|
|
12179
12207
|
});
|
|
12180
12208
|
if (notStartedApps.length > 0) {
|
|
12181
|
-
const
|
|
12182
|
-
log$q.error(
|
|
12209
|
+
const message2 = `Apps not started: ${notStartedApps.join(", ")}`;
|
|
12210
|
+
log$q.error(message2);
|
|
12183
12211
|
if (throwOnTimeout) {
|
|
12184
|
-
throw new Error(`App startup timeout: ${
|
|
12212
|
+
throw new Error(`App startup timeout: ${message2}`);
|
|
12185
12213
|
}
|
|
12186
12214
|
return false;
|
|
12187
12215
|
}
|
|
12188
12216
|
log$q.info(`All apps started successfully: ${appIds.join(", ")}`);
|
|
12189
12217
|
return true;
|
|
12190
12218
|
} catch (error) {
|
|
12191
|
-
const
|
|
12192
|
-
log$q.error(
|
|
12219
|
+
const message2 = `Failed to wait for apps to start: ${appIds.join(", ")}`;
|
|
12220
|
+
log$q.error(message2, error);
|
|
12193
12221
|
if (throwOnTimeout) {
|
|
12194
12222
|
throw new Error(
|
|
12195
|
-
`${
|
|
12223
|
+
`${message2} - ${error instanceof Error ? error.message : String(error)}`
|
|
12196
12224
|
);
|
|
12197
12225
|
}
|
|
12198
12226
|
return false;
|
|
@@ -12368,14 +12396,14 @@ const buildConfigBeanModel = (factory) => (modelId) => (configBeanOptions) => {
|
|
|
12368
12396
|
const configBeanModel = factory.build(modelId, configBeanOptions);
|
|
12369
12397
|
return configBeanModel;
|
|
12370
12398
|
};
|
|
12371
|
-
var __defProp$
|
|
12399
|
+
var __defProp$v = Object.defineProperty;
|
|
12372
12400
|
var __getOwnPropDesc$A = Object.getOwnPropertyDescriptor;
|
|
12373
12401
|
var __decorateClass$A = (decorators, target, key, kind) => {
|
|
12374
12402
|
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$A(target, key) : target;
|
|
12375
12403
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
12376
12404
|
if (decorator = decorators[i])
|
|
12377
12405
|
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
12378
|
-
if (kind && result) __defProp$
|
|
12406
|
+
if (kind && result) __defProp$v(target, key, result);
|
|
12379
12407
|
return result;
|
|
12380
12408
|
};
|
|
12381
12409
|
function matchValue(patterns, value) {
|
|
@@ -12735,14 +12763,14 @@ function defaultMeasureMapReducer(systemAcc, unitSystem) {
|
|
|
12735
12763
|
});
|
|
12736
12764
|
return systemAcc;
|
|
12737
12765
|
}
|
|
12738
|
-
var __defProp$
|
|
12766
|
+
var __defProp$u = Object.defineProperty;
|
|
12739
12767
|
var __getOwnPropDesc$z = Object.getOwnPropertyDescriptor;
|
|
12740
12768
|
var __decorateClass$z = (decorators, target, key, kind) => {
|
|
12741
12769
|
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$z(target, key) : target;
|
|
12742
12770
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
12743
12771
|
if (decorator = decorators[i])
|
|
12744
12772
|
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
12745
|
-
if (kind && result) __defProp$
|
|
12773
|
+
if (kind && result) __defProp$u(target, key, result);
|
|
12746
12774
|
return result;
|
|
12747
12775
|
};
|
|
12748
12776
|
const MODEL_TYPE$w = "region-info-model";
|
|
@@ -13347,14 +13375,14 @@ const displayOptionsFactory = (schema, unitSystem) => {
|
|
|
13347
13375
|
}
|
|
13348
13376
|
return schema.options;
|
|
13349
13377
|
};
|
|
13350
|
-
var __defProp$
|
|
13378
|
+
var __defProp$t = Object.defineProperty;
|
|
13351
13379
|
var __getOwnPropDesc$y = Object.getOwnPropertyDescriptor;
|
|
13352
13380
|
var __decorateClass$y = (decorators, target, key, kind) => {
|
|
13353
13381
|
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$y(target, key) : target;
|
|
13354
13382
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
13355
13383
|
if (decorator = decorators[i])
|
|
13356
13384
|
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
13357
|
-
if (kind && result) __defProp$
|
|
13385
|
+
if (kind && result) __defProp$t(target, key, result);
|
|
13358
13386
|
return result;
|
|
13359
13387
|
};
|
|
13360
13388
|
function isEnum(schema) {
|
|
@@ -14191,14 +14219,14 @@ const index$e = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
|
|
|
14191
14219
|
__proto__: null,
|
|
14192
14220
|
getStateBeanData
|
|
14193
14221
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
14194
|
-
var __defProp$
|
|
14222
|
+
var __defProp$s = Object.defineProperty;
|
|
14195
14223
|
var __getOwnPropDesc$x = Object.getOwnPropertyDescriptor;
|
|
14196
14224
|
var __decorateClass$x = (decorators, target, key, kind) => {
|
|
14197
14225
|
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$x(target, key) : target;
|
|
14198
14226
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
14199
14227
|
if (decorator = decorators[i])
|
|
14200
14228
|
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
14201
|
-
if (kind && result) __defProp$
|
|
14229
|
+
if (kind && result) __defProp$s(target, key, result);
|
|
14202
14230
|
return result;
|
|
14203
14231
|
};
|
|
14204
14232
|
const MODEL_TYPE$u = "state-bean-model";
|
|
@@ -14296,14 +14324,14 @@ const kosStateBean = ({ path }) => (target, name) => {
|
|
|
14296
14324
|
lifecycle: DependencyLifecycle.INIT
|
|
14297
14325
|
};
|
|
14298
14326
|
};
|
|
14299
|
-
var __defProp$
|
|
14327
|
+
var __defProp$r = Object.defineProperty;
|
|
14300
14328
|
var __getOwnPropDesc$w = Object.getOwnPropertyDescriptor;
|
|
14301
14329
|
var __decorateClass$w = (decorators, target, key, kind) => {
|
|
14302
14330
|
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$w(target, key) : target;
|
|
14303
14331
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
14304
14332
|
if (decorator = decorators[i])
|
|
14305
14333
|
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
14306
|
-
if (kind && result) __defProp$
|
|
14334
|
+
if (kind && result) __defProp$r(target, key, result);
|
|
14307
14335
|
return result;
|
|
14308
14336
|
};
|
|
14309
14337
|
const MODEL_TYPE$t = "state-prop-model";
|
|
@@ -14402,14 +14430,14 @@ function kosStateProp(params2) {
|
|
|
14402
14430
|
};
|
|
14403
14431
|
};
|
|
14404
14432
|
}
|
|
14405
|
-
var __defProp$
|
|
14433
|
+
var __defProp$q = Object.defineProperty;
|
|
14406
14434
|
var __getOwnPropDesc$v = Object.getOwnPropertyDescriptor;
|
|
14407
14435
|
var __decorateClass$v = (decorators, target, key, kind) => {
|
|
14408
14436
|
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$v(target, key) : target;
|
|
14409
14437
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
14410
14438
|
if (decorator = decorators[i])
|
|
14411
14439
|
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
14412
|
-
if (kind && result) __defProp$
|
|
14440
|
+
if (kind && result) __defProp$q(target, key, result);
|
|
14413
14441
|
return result;
|
|
14414
14442
|
};
|
|
14415
14443
|
const MODEL_TYPE$s = "browser-router-model";
|
|
@@ -14529,14 +14557,14 @@ const BrowserRouter = new SingletonKosModelRegistrationFactory({
|
|
|
14529
14557
|
class: BrowserRouterModelImpl,
|
|
14530
14558
|
type: MODEL_TYPE$s
|
|
14531
14559
|
});
|
|
14532
|
-
var __defProp$
|
|
14560
|
+
var __defProp$p = Object.defineProperty;
|
|
14533
14561
|
var __getOwnPropDesc$u = Object.getOwnPropertyDescriptor;
|
|
14534
14562
|
var __decorateClass$u = (decorators, target, key, kind) => {
|
|
14535
14563
|
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$u(target, key) : target;
|
|
14536
14564
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
14537
14565
|
if (decorator = decorators[i])
|
|
14538
14566
|
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
14539
|
-
if (kind && result) __defProp$
|
|
14567
|
+
if (kind && result) __defProp$p(target, key, result);
|
|
14540
14568
|
return result;
|
|
14541
14569
|
};
|
|
14542
14570
|
const log$i = KosLog.getLogger(FutureFactory.type);
|
|
@@ -14600,7 +14628,10 @@ let FutureModel$1 = class FutureModel {
|
|
|
14600
14628
|
async cancelFuture() {
|
|
14601
14629
|
const path = this.namespace === "studio" ? `/api/future` : `/api/${this.namespace}/future`;
|
|
14602
14630
|
await kosWhen(() => this.futureId !== FUTURE_NOT_ASSIGNED);
|
|
14603
|
-
await this._cancelFuture(this.futureId, path);
|
|
14631
|
+
const response = await this._cancelFuture(this.futureId, path);
|
|
14632
|
+
if (response?.status !== 200) {
|
|
14633
|
+
log$i.error(`Failed to cancel Future ${this.id}. Response: ${JSON.stringify(response)}`);
|
|
14634
|
+
}
|
|
14604
14635
|
}
|
|
14605
14636
|
/**
|
|
14606
14637
|
* Gets the current status of the future operation.
|
|
@@ -14674,14 +14705,14 @@ FutureModel$1 = __decorateClass$u([
|
|
|
14674
14705
|
kosModel(FutureFactory.type)
|
|
14675
14706
|
], FutureModel$1);
|
|
14676
14707
|
const FutureModel2 = FutureModel$1;
|
|
14677
|
-
var __defProp$
|
|
14708
|
+
var __defProp$o = Object.defineProperty;
|
|
14678
14709
|
var __getOwnPropDesc$t = Object.getOwnPropertyDescriptor;
|
|
14679
14710
|
var __decorateClass$t = (decorators, target, key, kind) => {
|
|
14680
14711
|
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$t(target, key) : target;
|
|
14681
14712
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
14682
14713
|
if (decorator = decorators[i])
|
|
14683
14714
|
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
14684
|
-
if (kind && result) __defProp$
|
|
14715
|
+
if (kind && result) __defProp$o(target, key, result);
|
|
14685
14716
|
return result;
|
|
14686
14717
|
};
|
|
14687
14718
|
const log$h = KosLog.getLogger(FutureContainerFactory.type);
|
|
@@ -14906,14 +14937,14 @@ const index$c = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
|
|
|
14906
14937
|
getKeyValue,
|
|
14907
14938
|
updateKeyValue
|
|
14908
14939
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
14909
|
-
var __defProp$
|
|
14940
|
+
var __defProp$n = Object.defineProperty;
|
|
14910
14941
|
var __getOwnPropDesc$s = Object.getOwnPropertyDescriptor;
|
|
14911
14942
|
var __decorateClass$s = (decorators, target, key, kind) => {
|
|
14912
14943
|
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$s(target, key) : target;
|
|
14913
14944
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
14914
14945
|
if (decorator = decorators[i])
|
|
14915
14946
|
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
14916
|
-
if (kind && result) __defProp$
|
|
14947
|
+
if (kind && result) __defProp$n(target, key, result);
|
|
14917
14948
|
return result;
|
|
14918
14949
|
};
|
|
14919
14950
|
const MODEL_TYPE$r = "key-value-model";
|
|
@@ -16603,9 +16634,9 @@ Parser.prototype.isOperatorEnabled = function(op) {
|
|
|
16603
16634
|
var operators = this.options.operators || {};
|
|
16604
16635
|
return !(optionName in operators) || !!operators[optionName];
|
|
16605
16636
|
};
|
|
16606
|
-
var __defProp$
|
|
16637
|
+
var __defProp$m = Object.defineProperty;
|
|
16607
16638
|
var __getOwnPropDesc$r = Object.getOwnPropertyDescriptor;
|
|
16608
|
-
var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$
|
|
16639
|
+
var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$m(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
16609
16640
|
var __decorateClass$r = (decorators, target, key, kind) => {
|
|
16610
16641
|
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$r(target, key) : target;
|
|
16611
16642
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
@@ -16961,14 +16992,14 @@ const index$b = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
|
|
|
16961
16992
|
__proto__: null,
|
|
16962
16993
|
getLogOverrides
|
|
16963
16994
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
16964
|
-
var __defProp$
|
|
16995
|
+
var __defProp$l = Object.defineProperty;
|
|
16965
16996
|
var __getOwnPropDesc$q = Object.getOwnPropertyDescriptor;
|
|
16966
16997
|
var __decorateClass$q = (decorators, target, key, kind) => {
|
|
16967
16998
|
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$q(target, key) : target;
|
|
16968
16999
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
16969
17000
|
if (decorator = decorators[i])
|
|
16970
17001
|
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
16971
|
-
if (kind && result) __defProp$
|
|
17002
|
+
if (kind && result) __defProp$l(target, key, result);
|
|
16972
17003
|
return result;
|
|
16973
17004
|
};
|
|
16974
17005
|
const MODEL_TYPE$p = "kos-log-manager-model";
|
|
@@ -17215,14 +17246,14 @@ const index$a = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
|
|
|
17215
17246
|
setTime,
|
|
17216
17247
|
setTimezone
|
|
17217
17248
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
17218
|
-
var __defProp$
|
|
17249
|
+
var __defProp$k = Object.defineProperty;
|
|
17219
17250
|
var __getOwnPropDesc$p = Object.getOwnPropertyDescriptor;
|
|
17220
17251
|
var __decorateClass$p = (decorators, target, key, kind) => {
|
|
17221
17252
|
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$p(target, key) : target;
|
|
17222
17253
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
17223
17254
|
if (decorator = decorators[i])
|
|
17224
17255
|
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
17225
|
-
if (kind && result) __defProp$
|
|
17256
|
+
if (kind && result) __defProp$k(target, key, result);
|
|
17226
17257
|
return result;
|
|
17227
17258
|
};
|
|
17228
17259
|
const MODEL_TYPE$o = "kos-time-model";
|
|
@@ -17316,14 +17347,14 @@ const KosTime = {
|
|
|
17316
17347
|
predicate: isKosModel(MODEL_TYPE$o),
|
|
17317
17348
|
factory: Kos.Singleton.create(MODEL_TYPE$o)
|
|
17318
17349
|
};
|
|
17319
|
-
var __defProp$
|
|
17350
|
+
var __defProp$j = Object.defineProperty;
|
|
17320
17351
|
var __getOwnPropDesc$o = Object.getOwnPropertyDescriptor;
|
|
17321
17352
|
var __decorateClass$o = (decorators, target, key, kind) => {
|
|
17322
17353
|
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$o(target, key) : target;
|
|
17323
17354
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
17324
17355
|
if (decorator = decorators[i])
|
|
17325
17356
|
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
17326
|
-
if (kind && result) __defProp$
|
|
17357
|
+
if (kind && result) __defProp$j(target, key, result);
|
|
17327
17358
|
return result;
|
|
17328
17359
|
};
|
|
17329
17360
|
const MODEL_TYPE$n = "log-block-container-model";
|
|
@@ -17557,14 +17588,14 @@ const LogBlockContainer = new KosModelRegistrationFactory({
|
|
|
17557
17588
|
type: MODEL_TYPE$n
|
|
17558
17589
|
});
|
|
17559
17590
|
LogBlockContainer.addRelatedModel(LogBlock);
|
|
17560
|
-
var __defProp$
|
|
17591
|
+
var __defProp$i = Object.defineProperty;
|
|
17561
17592
|
var __getOwnPropDesc$m = Object.getOwnPropertyDescriptor;
|
|
17562
17593
|
var __decorateClass$m = (decorators, target, key, kind) => {
|
|
17563
17594
|
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$m(target, key) : target;
|
|
17564
17595
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
17565
17596
|
if (decorator = decorators[i])
|
|
17566
17597
|
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
17567
|
-
if (kind && result) __defProp$
|
|
17598
|
+
if (kind && result) __defProp$i(target, key, result);
|
|
17568
17599
|
return result;
|
|
17569
17600
|
};
|
|
17570
17601
|
const MODEL_TYPE$l = "log-stream-model";
|
|
@@ -17785,14 +17816,14 @@ const LogStream = new KosModelRegistrationFactory({
|
|
|
17785
17816
|
class: LogStreamModelImpl,
|
|
17786
17817
|
type: MODEL_TYPE$l
|
|
17787
17818
|
});
|
|
17788
|
-
var __defProp$
|
|
17819
|
+
var __defProp$h = Object.defineProperty;
|
|
17789
17820
|
var __getOwnPropDesc$l = Object.getOwnPropertyDescriptor;
|
|
17790
17821
|
var __decorateClass$l = (decorators, target, key, kind) => {
|
|
17791
17822
|
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$l(target, key) : target;
|
|
17792
17823
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
17793
17824
|
if (decorator = decorators[i])
|
|
17794
17825
|
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
17795
|
-
if (kind && result) __defProp$
|
|
17826
|
+
if (kind && result) __defProp$h(target, key, result);
|
|
17796
17827
|
return result;
|
|
17797
17828
|
};
|
|
17798
17829
|
const MODEL_TYPE$k = "log-stream-container-model";
|
|
@@ -18187,14 +18218,14 @@ class TroubleHandlerFactory {
|
|
|
18187
18218
|
}
|
|
18188
18219
|
}
|
|
18189
18220
|
}
|
|
18190
|
-
var __defProp$
|
|
18221
|
+
var __defProp$g = Object.defineProperty;
|
|
18191
18222
|
var __getOwnPropDesc$k = Object.getOwnPropertyDescriptor;
|
|
18192
18223
|
var __decorateClass$k = (decorators, target, key, kind) => {
|
|
18193
18224
|
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$k(target, key) : target;
|
|
18194
18225
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
18195
18226
|
if (decorator = decorators[i])
|
|
18196
18227
|
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
18197
|
-
if (kind && result) __defProp$
|
|
18228
|
+
if (kind && result) __defProp$g(target, key, result);
|
|
18198
18229
|
return result;
|
|
18199
18230
|
};
|
|
18200
18231
|
const MODEL_TYPE$j = "trouble-model";
|
|
@@ -18349,18 +18380,29 @@ const Trouble = {
|
|
|
18349
18380
|
predicate: isKosModel(MODEL_TYPE$j),
|
|
18350
18381
|
factory: Kos.Factory.create(MODEL_TYPE$j)
|
|
18351
18382
|
};
|
|
18352
|
-
var __defProp$
|
|
18383
|
+
var __defProp$f = Object.defineProperty;
|
|
18353
18384
|
var __getOwnPropDesc$j = Object.getOwnPropertyDescriptor;
|
|
18354
|
-
var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$
|
|
18385
|
+
var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$f(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
18355
18386
|
var __decorateClass$j = (decorators, target, key, kind) => {
|
|
18356
18387
|
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$j(target, key) : target;
|
|
18357
18388
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
18358
18389
|
if (decorator = decorators[i])
|
|
18359
18390
|
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
18360
|
-
if (kind && result) __defProp$
|
|
18391
|
+
if (kind && result) __defProp$f(target, key, result);
|
|
18361
18392
|
return result;
|
|
18362
18393
|
};
|
|
18363
18394
|
var __publicField$4 = (obj, key, value) => __defNormalProp$4(obj, key + "", value);
|
|
18395
|
+
const addTrouble = (trouble) => {
|
|
18396
|
+
const options = {
|
|
18397
|
+
...trouble,
|
|
18398
|
+
rank: troubleRankMapper(trouble),
|
|
18399
|
+
color: troubleColorMapper(trouble),
|
|
18400
|
+
role: troubleRoleMapper(trouble),
|
|
18401
|
+
id: String(trouble.id)
|
|
18402
|
+
};
|
|
18403
|
+
const newTrouble = Trouble.factory(`trouble-${trouble.id}`)(options);
|
|
18404
|
+
return newTrouble;
|
|
18405
|
+
};
|
|
18364
18406
|
function troubleRankMapper(trouble) {
|
|
18365
18407
|
const _rank = ExtensionManager.propertyMapper.hasMapper(
|
|
18366
18408
|
KosCoreModelPropertyMapper.TroubleRank
|
|
@@ -18405,6 +18447,16 @@ let TroubleContainerModelImpl = class {
|
|
|
18405
18447
|
this.servicePath = options.servicePath ?? this.servicePath;
|
|
18406
18448
|
}
|
|
18407
18449
|
// -------------------LIFECYCLE----------------------------
|
|
18450
|
+
async reload() {
|
|
18451
|
+
this.logger.info("reloading trouble container");
|
|
18452
|
+
const _troubles = await getTroubles(this.servicePath);
|
|
18453
|
+
const incoming = _troubles?.data ?? [];
|
|
18454
|
+
const incomingKeys = new Set(incoming.map((t) => `trouble-${t.id}`));
|
|
18455
|
+
const toRemove = this.troubles.data.map((m) => m.id).filter((id) => !incomingKeys.has(id));
|
|
18456
|
+
const toAdd = incoming.filter((t) => !this.troubles.getModel(`trouble-${t.id}`)).map(addTrouble);
|
|
18457
|
+
this.troubles.removeAll(toRemove);
|
|
18458
|
+
this.troubles.addAll(toAdd);
|
|
18459
|
+
}
|
|
18408
18460
|
async load() {
|
|
18409
18461
|
this.logger.debug("loading trouble container");
|
|
18410
18462
|
try {
|
|
@@ -18504,14 +18556,14 @@ const getArtifacts = async () => {
|
|
|
18504
18556
|
log$c.debug("getArtifacts - response:", response);
|
|
18505
18557
|
return response?.data;
|
|
18506
18558
|
};
|
|
18507
|
-
var __defProp$
|
|
18559
|
+
var __defProp$e = Object.defineProperty;
|
|
18508
18560
|
var __getOwnPropDesc$i = Object.getOwnPropertyDescriptor;
|
|
18509
18561
|
var __decorateClass$i = (decorators, target, key, kind) => {
|
|
18510
18562
|
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$i(target, key) : target;
|
|
18511
18563
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
18512
18564
|
if (decorator = decorators[i])
|
|
18513
18565
|
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
18514
|
-
if (kind && result) __defProp$
|
|
18566
|
+
if (kind && result) __defProp$e(target, key, result);
|
|
18515
18567
|
return result;
|
|
18516
18568
|
};
|
|
18517
18569
|
const MODEL_TYPE$h = "ota-model";
|
|
@@ -18710,14 +18762,14 @@ function encodeFrame(rgba, format, stripAlpha) {
|
|
|
18710
18762
|
return btoa(String.fromCharCode(...rgb));
|
|
18711
18763
|
}
|
|
18712
18764
|
}
|
|
18713
|
-
var __defProp$
|
|
18765
|
+
var __defProp$d = Object.defineProperty;
|
|
18714
18766
|
var __getOwnPropDesc$h = Object.getOwnPropertyDescriptor;
|
|
18715
18767
|
var __decorateClass$h = (decorators, target, key, kind) => {
|
|
18716
18768
|
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$h(target, key) : target;
|
|
18717
18769
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
18718
18770
|
if (decorator = decorators[i])
|
|
18719
18771
|
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
18720
|
-
if (kind && result) __defProp$
|
|
18772
|
+
if (kind && result) __defProp$d(target, key, result);
|
|
18721
18773
|
return result;
|
|
18722
18774
|
};
|
|
18723
18775
|
const MODEL_TYPE$g = "canvas-renderer-model";
|
|
@@ -20755,14 +20807,14 @@ const getRenderer = ({
|
|
|
20755
20807
|
}
|
|
20756
20808
|
throw new Error(`Unknown mode: ${mode}`);
|
|
20757
20809
|
};
|
|
20758
|
-
var __defProp$
|
|
20810
|
+
var __defProp$c = Object.defineProperty;
|
|
20759
20811
|
var __getOwnPropDesc$g = Object.getOwnPropertyDescriptor;
|
|
20760
20812
|
var __decorateClass$g = (decorators, target, key, kind) => {
|
|
20761
20813
|
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$g(target, key) : target;
|
|
20762
20814
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
20763
20815
|
if (decorator = decorators[i])
|
|
20764
20816
|
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
20765
|
-
if (kind && result) __defProp$
|
|
20817
|
+
if (kind && result) __defProp$c(target, key, result);
|
|
20766
20818
|
return result;
|
|
20767
20819
|
};
|
|
20768
20820
|
const MODEL_TYPE$f = "canvas-dispatcher-model";
|
|
@@ -20975,14 +21027,14 @@ const index$6 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
|
|
|
20975
21027
|
getDeviceDetails,
|
|
20976
21028
|
getSerialNumber
|
|
20977
21029
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
20978
|
-
var __defProp$
|
|
21030
|
+
var __defProp$b = Object.defineProperty;
|
|
20979
21031
|
var __getOwnPropDesc$f = Object.getOwnPropertyDescriptor;
|
|
20980
21032
|
var __decorateClass$f = (decorators, target, key, kind) => {
|
|
20981
21033
|
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$f(target, key) : target;
|
|
20982
21034
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
20983
21035
|
if (decorator = decorators[i])
|
|
20984
21036
|
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
20985
|
-
if (kind && result) __defProp$
|
|
21037
|
+
if (kind && result) __defProp$b(target, key, result);
|
|
20986
21038
|
return result;
|
|
20987
21039
|
};
|
|
20988
21040
|
const MODEL_TYPE$e = "device-model";
|
|
@@ -21322,14 +21374,14 @@ const index$5 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
|
|
|
21322
21374
|
__proto__: null,
|
|
21323
21375
|
getNetworkInterfaces
|
|
21324
21376
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
21325
|
-
var __defProp$
|
|
21377
|
+
var __defProp$a = Object.defineProperty;
|
|
21326
21378
|
var __getOwnPropDesc$d = Object.getOwnPropertyDescriptor;
|
|
21327
21379
|
var __decorateClass$d = (decorators, target, key, kind) => {
|
|
21328
21380
|
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$d(target, key) : target;
|
|
21329
21381
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
21330
21382
|
if (decorator = decorators[i])
|
|
21331
21383
|
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
21332
|
-
if (kind && result) __defProp$
|
|
21384
|
+
if (kind && result) __defProp$a(target, key, result);
|
|
21333
21385
|
return result;
|
|
21334
21386
|
};
|
|
21335
21387
|
const MODEL_TYPE$c = "network-interface-container-model";
|
|
@@ -21513,14 +21565,14 @@ const StorageDevice = new KosModelRegistrationFactory({
|
|
|
21513
21565
|
class: StorageDeviceModelImpl,
|
|
21514
21566
|
type: MODEL_TYPE$b
|
|
21515
21567
|
});
|
|
21516
|
-
var __defProp$
|
|
21568
|
+
var __defProp$9 = Object.defineProperty;
|
|
21517
21569
|
var __getOwnPropDesc$b = Object.getOwnPropertyDescriptor;
|
|
21518
21570
|
var __decorateClass$b = (decorators, target, key, kind) => {
|
|
21519
21571
|
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$b(target, key) : target;
|
|
21520
21572
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
21521
21573
|
if (decorator = decorators[i])
|
|
21522
21574
|
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
21523
|
-
if (kind && result) __defProp$
|
|
21575
|
+
if (kind && result) __defProp$9(target, key, result);
|
|
21524
21576
|
return result;
|
|
21525
21577
|
};
|
|
21526
21578
|
const MODEL_TYPE$a = "storage-device-container-model";
|
|
@@ -21658,14 +21710,14 @@ const index$3 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
|
|
|
21658
21710
|
getAvailableUpdates,
|
|
21659
21711
|
installUpdate
|
|
21660
21712
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
21661
|
-
var __defProp$
|
|
21713
|
+
var __defProp$8 = Object.defineProperty;
|
|
21662
21714
|
var __getOwnPropDesc$a = Object.getOwnPropertyDescriptor;
|
|
21663
21715
|
var __decorateClass$a = (decorators, target, key, kind) => {
|
|
21664
21716
|
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$a(target, key) : target;
|
|
21665
21717
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
21666
21718
|
if (decorator = decorators[i])
|
|
21667
21719
|
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
21668
|
-
if (kind && result) __defProp$
|
|
21720
|
+
if (kind && result) __defProp$8(target, key, result);
|
|
21669
21721
|
return result;
|
|
21670
21722
|
};
|
|
21671
21723
|
const MODEL_TYPE$9 = "usb-update-model";
|
|
@@ -21731,14 +21783,14 @@ const UsbUpdate = new KosModelRegistrationFactory({
|
|
|
21731
21783
|
class: UsbUpdateModelImpl,
|
|
21732
21784
|
type: MODEL_TYPE$9
|
|
21733
21785
|
});
|
|
21734
|
-
var __defProp$
|
|
21786
|
+
var __defProp$7 = Object.defineProperty;
|
|
21735
21787
|
var __getOwnPropDesc$9 = Object.getOwnPropertyDescriptor;
|
|
21736
21788
|
var __decorateClass$9 = (decorators, target, key, kind) => {
|
|
21737
21789
|
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$9(target, key) : target;
|
|
21738
21790
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
21739
21791
|
if (decorator = decorators[i])
|
|
21740
21792
|
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
21741
|
-
if (kind && result) __defProp$
|
|
21793
|
+
if (kind && result) __defProp$7(target, key, result);
|
|
21742
21794
|
return result;
|
|
21743
21795
|
};
|
|
21744
21796
|
const MODEL_TYPE$8 = "usb-update-container-model";
|
|
@@ -21905,12 +21957,14 @@ const getKosLocalizationDescriptor = (context) => async () => {
|
|
|
21905
21957
|
return response.data[context];
|
|
21906
21958
|
};
|
|
21907
21959
|
const CONTEXT_LANG_RESOLVER = "langResolver";
|
|
21960
|
+
var __defProp$6 = Object.defineProperty;
|
|
21908
21961
|
var __getOwnPropDesc$8 = Object.getOwnPropertyDescriptor;
|
|
21909
21962
|
var __decorateClass$8 = (decorators, target, key, kind) => {
|
|
21910
21963
|
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$8(target, key) : target;
|
|
21911
21964
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
21912
21965
|
if (decorator = decorators[i])
|
|
21913
|
-
result = decorator(result) || result;
|
|
21966
|
+
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
21967
|
+
if (kind && result) __defProp$6(target, key, result);
|
|
21914
21968
|
return result;
|
|
21915
21969
|
};
|
|
21916
21970
|
const MODEL_TYPE$7 = "translation-model";
|
|
@@ -22177,17 +22231,16 @@ let TranslationModelImpl = class {
|
|
|
22177
22231
|
*/
|
|
22178
22232
|
async ready() {
|
|
22179
22233
|
this.logger.debug(`ready translation ${this.id}`);
|
|
22180
|
-
|
|
22181
|
-
|
|
22182
|
-
|
|
22183
|
-
this.logger.info(
|
|
22184
|
-
`translation langs for namespace ${this.id} changed from ${previous} to ${value}`
|
|
22185
|
-
);
|
|
22186
|
-
this.loadTranslations();
|
|
22187
|
-
}
|
|
22188
|
-
);
|
|
22234
|
+
}
|
|
22235
|
+
async handleCurrentLocaleChange() {
|
|
22236
|
+
await this.loadTranslations();
|
|
22189
22237
|
}
|
|
22190
22238
|
};
|
|
22239
|
+
__decorateClass$8([
|
|
22240
|
+
kosModelEffect({
|
|
22241
|
+
dependencies: (model) => [model.currentLocale]
|
|
22242
|
+
})
|
|
22243
|
+
], TranslationModelImpl.prototype, "handleCurrentLocaleChange", 1);
|
|
22191
22244
|
TranslationModelImpl = __decorateClass$8([
|
|
22192
22245
|
kosParentAware(),
|
|
22193
22246
|
kosModel(MODEL_TYPE$7)
|
|
@@ -23771,11 +23824,11 @@ const loadingDot = react.css`
|
|
|
23771
23824
|
`;
|
|
23772
23825
|
const Portal = ({ children }) => reactDom.createPortal(children, document.body);
|
|
23773
23826
|
function LoadingMessage({
|
|
23774
|
-
message = "Wait a moment while we load your app.",
|
|
23827
|
+
message: message2 = "Wait a moment while we load your app.",
|
|
23775
23828
|
theme = "light"
|
|
23776
23829
|
}) {
|
|
23777
23830
|
return /* @__PURE__ */ jsxRuntime.jsx(Portal, { children: /* @__PURE__ */ jsxRuntime.jsxs(MessageContainer, { theme, children: [
|
|
23778
|
-
|
|
23831
|
+
message2,
|
|
23779
23832
|
/* @__PURE__ */ jsxRuntime.jsx("div", { css: loadingDot, children: "." })
|
|
23780
23833
|
] }) });
|
|
23781
23834
|
}
|
|
@@ -23975,32 +24028,6 @@ const KosModelLoaderDisplay = (props) => {
|
|
|
23975
24028
|
const loader = props.loading || /* @__PURE__ */ jsxRuntime.jsx(DefaultLoader, {});
|
|
23976
24029
|
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: model && isReady ? props.children : loader });
|
|
23977
24030
|
};
|
|
23978
|
-
const DEFAULT_TRANSLATIONS = {
|
|
23979
|
-
header: {
|
|
23980
|
-
title: "Model",
|
|
23981
|
-
createLabel: "Create new Model",
|
|
23982
|
-
deleteLabel: "Delete"
|
|
23983
|
-
},
|
|
23984
|
-
createModal: {
|
|
23985
|
-
okText: "OK",
|
|
23986
|
-
cancelText: "Cancel",
|
|
23987
|
-
title: "Create New Model"
|
|
23988
|
-
}
|
|
23989
|
-
};
|
|
23990
|
-
const CreateModelTranslationsContext = React.createContext(DEFAULT_TRANSLATIONS);
|
|
23991
|
-
const CreateModelTranslationsProvider = ({
|
|
23992
|
-
translations = DEFAULT_TRANSLATIONS,
|
|
23993
|
-
children
|
|
23994
|
-
}) => {
|
|
23995
|
-
const merged = {
|
|
23996
|
-
header: { ...DEFAULT_TRANSLATIONS.header, ...translations.header },
|
|
23997
|
-
createModal: {
|
|
23998
|
-
...DEFAULT_TRANSLATIONS.createModal,
|
|
23999
|
-
...translations.createModal
|
|
24000
|
-
}
|
|
24001
|
-
};
|
|
24002
|
-
return /* @__PURE__ */ jsxRuntime.jsx(CreateModelTranslationsContext.Provider, { value: merged, children });
|
|
24003
|
-
};
|
|
24004
24031
|
function fetchKosCore(registration, alias) {
|
|
24005
24032
|
const kosCore = KosCore.create(registration, false, alias);
|
|
24006
24033
|
const promise = kosCore.whenReady().then(() => kosCore);
|
|
@@ -24020,7 +24047,11 @@ const initKosProvider = (registration = { models: {}, preloadModels: [] }, alias
|
|
|
24020
24047
|
disposer();
|
|
24021
24048
|
};
|
|
24022
24049
|
}, [kosCore]);
|
|
24023
|
-
|
|
24050
|
+
const value = React.useMemo(
|
|
24051
|
+
() => ({ kosCore, online }),
|
|
24052
|
+
[kosCore, online]
|
|
24053
|
+
);
|
|
24054
|
+
return /* @__PURE__ */ jsxRuntime.jsx(KosContext.Provider, { value, children });
|
|
24024
24055
|
};
|
|
24025
24056
|
return { KosCoreContextProvider: mobxReactLite.observer(KosCoreContextProvider) };
|
|
24026
24057
|
};
|
|
@@ -24031,6 +24062,202 @@ const useKosCore = () => {
|
|
|
24031
24062
|
}
|
|
24032
24063
|
return context;
|
|
24033
24064
|
};
|
|
24065
|
+
const KOS_RECOVERING_SESSION_KEY = "kos:recovering";
|
|
24066
|
+
const DEFAULT_GRACE_MS = 3e3;
|
|
24067
|
+
const defaultReloadFn = () => {
|
|
24068
|
+
window.location.reload();
|
|
24069
|
+
};
|
|
24070
|
+
const ReloadOnDisconnectPolicy = ({
|
|
24071
|
+
graceMs = DEFAULT_GRACE_MS,
|
|
24072
|
+
onBeforeReload,
|
|
24073
|
+
reloadFn = defaultReloadFn
|
|
24074
|
+
}) => {
|
|
24075
|
+
const pendingReloadRef = React.useRef(null);
|
|
24076
|
+
React.useEffect(() => {
|
|
24077
|
+
const { unsubscribe } = subscribe(
|
|
24078
|
+
WebSocketEvents.DISCONNECTED,
|
|
24079
|
+
(msg) => {
|
|
24080
|
+
if (pendingReloadRef.current) {
|
|
24081
|
+
return;
|
|
24082
|
+
}
|
|
24083
|
+
const payload = msg?.body;
|
|
24084
|
+
if (!payload || typeof payload.code !== "number") {
|
|
24085
|
+
return;
|
|
24086
|
+
}
|
|
24087
|
+
const info = {
|
|
24088
|
+
code: payload.code,
|
|
24089
|
+
reason: payload.reason,
|
|
24090
|
+
wasClean: payload.wasClean,
|
|
24091
|
+
at: Date.now()
|
|
24092
|
+
};
|
|
24093
|
+
try {
|
|
24094
|
+
sessionStorage.setItem(
|
|
24095
|
+
KOS_RECOVERING_SESSION_KEY,
|
|
24096
|
+
JSON.stringify(info)
|
|
24097
|
+
);
|
|
24098
|
+
} catch (err) {
|
|
24099
|
+
KosLog.warn(
|
|
24100
|
+
"ReloadOnDisconnectPolicy: failed to write sessionStorage",
|
|
24101
|
+
err
|
|
24102
|
+
);
|
|
24103
|
+
}
|
|
24104
|
+
KosLog.warn(
|
|
24105
|
+
`ReloadOnDisconnectPolicy: scheduling reload in ${graceMs}ms (code=${info.code}, wasClean=${info.wasClean})`
|
|
24106
|
+
);
|
|
24107
|
+
pendingReloadRef.current = setTimeout(() => {
|
|
24108
|
+
pendingReloadRef.current = null;
|
|
24109
|
+
try {
|
|
24110
|
+
onBeforeReload?.(info);
|
|
24111
|
+
} catch (err) {
|
|
24112
|
+
KosLog.error(
|
|
24113
|
+
"ReloadOnDisconnectPolicy: onBeforeReload threw",
|
|
24114
|
+
err
|
|
24115
|
+
);
|
|
24116
|
+
}
|
|
24117
|
+
reloadFn();
|
|
24118
|
+
}, graceMs);
|
|
24119
|
+
}
|
|
24120
|
+
);
|
|
24121
|
+
return () => {
|
|
24122
|
+
unsubscribe();
|
|
24123
|
+
if (pendingReloadRef.current) {
|
|
24124
|
+
clearTimeout(pendingReloadRef.current);
|
|
24125
|
+
pendingReloadRef.current = null;
|
|
24126
|
+
}
|
|
24127
|
+
};
|
|
24128
|
+
}, [graceMs, onBeforeReload, reloadFn]);
|
|
24129
|
+
return null;
|
|
24130
|
+
};
|
|
24131
|
+
const defaultIsReady = ({ online }) => online;
|
|
24132
|
+
const readRecoveringInfo = () => {
|
|
24133
|
+
try {
|
|
24134
|
+
const raw = sessionStorage.getItem(KOS_RECOVERING_SESSION_KEY);
|
|
24135
|
+
if (!raw) return null;
|
|
24136
|
+
sessionStorage.removeItem(KOS_RECOVERING_SESSION_KEY);
|
|
24137
|
+
const parsed = JSON.parse(raw);
|
|
24138
|
+
if (parsed && typeof parsed === "object" && typeof parsed.code === "number") {
|
|
24139
|
+
return parsed;
|
|
24140
|
+
}
|
|
24141
|
+
} catch {
|
|
24142
|
+
}
|
|
24143
|
+
return null;
|
|
24144
|
+
};
|
|
24145
|
+
const useReconnectingOverlayState = (options = {}) => {
|
|
24146
|
+
const { isReady = defaultIsReady, readSessionStorage = true } = options;
|
|
24147
|
+
const { online } = useKosCore();
|
|
24148
|
+
const [info, setInfo] = React.useState(
|
|
24149
|
+
() => readSessionStorage ? readRecoveringInfo() : null
|
|
24150
|
+
);
|
|
24151
|
+
const [dismissed, setDismissed] = React.useState(false);
|
|
24152
|
+
React.useEffect(() => {
|
|
24153
|
+
const { unsubscribe } = subscribe(
|
|
24154
|
+
WebSocketEvents.DISCONNECTED,
|
|
24155
|
+
(msg) => {
|
|
24156
|
+
const payload = msg?.body;
|
|
24157
|
+
if (!payload || typeof payload.code !== "number") return;
|
|
24158
|
+
setInfo({
|
|
24159
|
+
code: payload.code,
|
|
24160
|
+
reason: payload.reason,
|
|
24161
|
+
wasClean: payload.wasClean,
|
|
24162
|
+
at: Date.now()
|
|
24163
|
+
});
|
|
24164
|
+
setDismissed(false);
|
|
24165
|
+
}
|
|
24166
|
+
);
|
|
24167
|
+
return () => {
|
|
24168
|
+
unsubscribe();
|
|
24169
|
+
};
|
|
24170
|
+
}, []);
|
|
24171
|
+
const ready = isReady({ online, info });
|
|
24172
|
+
const visible = !dismissed && !!info && !ready;
|
|
24173
|
+
return {
|
|
24174
|
+
visible,
|
|
24175
|
+
info,
|
|
24176
|
+
sinceMs: info ? Date.now() - info.at : null,
|
|
24177
|
+
dismiss: () => setDismissed(true)
|
|
24178
|
+
};
|
|
24179
|
+
};
|
|
24180
|
+
const spin = react.keyframes`
|
|
24181
|
+
to { transform: rotate(360deg); }
|
|
24182
|
+
`;
|
|
24183
|
+
const overlayRoot = react.css`
|
|
24184
|
+
position: fixed;
|
|
24185
|
+
inset: 0;
|
|
24186
|
+
display: flex;
|
|
24187
|
+
flex-direction: column;
|
|
24188
|
+
align-items: center;
|
|
24189
|
+
justify-content: center;
|
|
24190
|
+
gap: 16px;
|
|
24191
|
+
background: rgba(0, 0, 0, 0.72);
|
|
24192
|
+
color: #ffffff;
|
|
24193
|
+
font-family: system-ui, -apple-system, "Segoe UI", sans-serif;
|
|
24194
|
+
z-index: 2147483647;
|
|
24195
|
+
pointer-events: auto;
|
|
24196
|
+
user-select: none;
|
|
24197
|
+
`;
|
|
24198
|
+
const spinner = react.css`
|
|
24199
|
+
width: 48px;
|
|
24200
|
+
height: 48px;
|
|
24201
|
+
border-radius: 50%;
|
|
24202
|
+
border: 4px solid rgba(255, 255, 255, 0.25);
|
|
24203
|
+
border-top-color: #ffffff;
|
|
24204
|
+
animation: ${spin} 1s linear infinite;
|
|
24205
|
+
`;
|
|
24206
|
+
const message = react.css`
|
|
24207
|
+
font-size: 18px;
|
|
24208
|
+
font-weight: 500;
|
|
24209
|
+
letter-spacing: 0.02em;
|
|
24210
|
+
`;
|
|
24211
|
+
const ReconnectingOverlay = ({
|
|
24212
|
+
messageText = "Reconnecting…",
|
|
24213
|
+
renderContent,
|
|
24214
|
+
className,
|
|
24215
|
+
isReady,
|
|
24216
|
+
readSessionStorage
|
|
24217
|
+
}) => {
|
|
24218
|
+
const state = useReconnectingOverlayState({ isReady, readSessionStorage });
|
|
24219
|
+
if (!state.visible) return null;
|
|
24220
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
24221
|
+
"div",
|
|
24222
|
+
{
|
|
24223
|
+
css: overlayRoot,
|
|
24224
|
+
className,
|
|
24225
|
+
role: "alertdialog",
|
|
24226
|
+
"aria-live": "assertive",
|
|
24227
|
+
"aria-label": "Reconnecting",
|
|
24228
|
+
children: renderContent ? renderContent(state) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
24229
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { css: spinner, "aria-hidden": "true" }),
|
|
24230
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { css: message, children: messageText })
|
|
24231
|
+
] })
|
|
24232
|
+
}
|
|
24233
|
+
);
|
|
24234
|
+
};
|
|
24235
|
+
const DEFAULT_TRANSLATIONS = {
|
|
24236
|
+
header: {
|
|
24237
|
+
title: "Model",
|
|
24238
|
+
createLabel: "Create new Model",
|
|
24239
|
+
deleteLabel: "Delete"
|
|
24240
|
+
},
|
|
24241
|
+
createModal: {
|
|
24242
|
+
okText: "OK",
|
|
24243
|
+
cancelText: "Cancel",
|
|
24244
|
+
title: "Create New Model"
|
|
24245
|
+
}
|
|
24246
|
+
};
|
|
24247
|
+
const CreateModelTranslationsContext = React.createContext(DEFAULT_TRANSLATIONS);
|
|
24248
|
+
const CreateModelTranslationsProvider = ({
|
|
24249
|
+
translations = DEFAULT_TRANSLATIONS,
|
|
24250
|
+
children
|
|
24251
|
+
}) => {
|
|
24252
|
+
const merged = {
|
|
24253
|
+
header: { ...DEFAULT_TRANSLATIONS.header, ...translations.header },
|
|
24254
|
+
createModal: {
|
|
24255
|
+
...DEFAULT_TRANSLATIONS.createModal,
|
|
24256
|
+
...translations.createModal
|
|
24257
|
+
}
|
|
24258
|
+
};
|
|
24259
|
+
return /* @__PURE__ */ jsxRuntime.jsx(CreateModelTranslationsContext.Provider, { value: merged, children });
|
|
24260
|
+
};
|
|
24034
24261
|
const MAX_RETRIES = 8;
|
|
24035
24262
|
const waitForRetry = (depth = 0) => new Promise((resolve) => {
|
|
24036
24263
|
setTimeout(() => {
|
|
@@ -24269,11 +24496,13 @@ const KosTranslationProvider = ({
|
|
|
24269
24496
|
locale = "en",
|
|
24270
24497
|
resolver,
|
|
24271
24498
|
rootUrl,
|
|
24272
|
-
descriptorResolver
|
|
24499
|
+
descriptorResolver,
|
|
24500
|
+
excludeNamespaces = []
|
|
24273
24501
|
}) => {
|
|
24274
24502
|
const [ready, setReady] = React.useState(false);
|
|
24275
24503
|
const [localization, setLocalization] = React.useState();
|
|
24276
24504
|
const [translations, setTranslations] = React.useState();
|
|
24505
|
+
const [allLocales, setAllLocales] = React.useState([]);
|
|
24277
24506
|
const resolvedRootUrl = rootUrl || getDefaultHost();
|
|
24278
24507
|
const _appContext = React.useMemo(() => appContext ?? "app/system", [appContext]);
|
|
24279
24508
|
React.useEffect(() => {
|
|
@@ -24303,6 +24532,24 @@ const KosTranslationProvider = ({
|
|
|
24303
24532
|
};
|
|
24304
24533
|
}, {});
|
|
24305
24534
|
setLocalization(localizationDescriptor);
|
|
24535
|
+
const _allLocales = descriptors.reduce((acc, curr) => {
|
|
24536
|
+
Object.keys(curr.namespaces).filter((ns) => !excludeNamespaces.includes(ns)).forEach((namespaceKey) => {
|
|
24537
|
+
const namespace = curr.namespaces[namespaceKey];
|
|
24538
|
+
Object.keys(namespace.locales).forEach((localeKey) => {
|
|
24539
|
+
acc.add(localeKey);
|
|
24540
|
+
});
|
|
24541
|
+
});
|
|
24542
|
+
return acc;
|
|
24543
|
+
}, /* @__PURE__ */ new Set());
|
|
24544
|
+
const localeList = Array.from(_allLocales).map((locale2) => {
|
|
24545
|
+
return {
|
|
24546
|
+
locale: locale2,
|
|
24547
|
+
label: new Intl.DisplayNames([locale2], { type: "language" }).of(
|
|
24548
|
+
locale2
|
|
24549
|
+
)
|
|
24550
|
+
};
|
|
24551
|
+
});
|
|
24552
|
+
setAllLocales(localeList);
|
|
24306
24553
|
}
|
|
24307
24554
|
initTools();
|
|
24308
24555
|
}, [_appContext, descriptorResolver]);
|
|
@@ -24330,13 +24577,15 @@ const KosTranslationProvider = ({
|
|
|
24330
24577
|
if (translations) {
|
|
24331
24578
|
translations.currentLocale = locale2;
|
|
24332
24579
|
}
|
|
24333
|
-
}
|
|
24580
|
+
},
|
|
24581
|
+
allLocales
|
|
24334
24582
|
};
|
|
24335
24583
|
}
|
|
24336
24584
|
return {
|
|
24337
24585
|
setLocale: () => {
|
|
24338
24586
|
throw new Error("Translations not ready");
|
|
24339
|
-
}
|
|
24587
|
+
},
|
|
24588
|
+
allLocales: []
|
|
24340
24589
|
};
|
|
24341
24590
|
}, [ready, translations]);
|
|
24342
24591
|
const content = ready ? children : null;
|
|
@@ -25059,6 +25308,36 @@ const useConfigProperty = ({
|
|
|
25059
25308
|
error
|
|
25060
25309
|
};
|
|
25061
25310
|
};
|
|
25311
|
+
const useConnectionState = () => {
|
|
25312
|
+
const { online } = useKosCore();
|
|
25313
|
+
const [lastDisconnect, setLastDisconnect] = React.useState(
|
|
25314
|
+
null
|
|
25315
|
+
);
|
|
25316
|
+
React.useEffect(() => {
|
|
25317
|
+
const { unsubscribe } = subscribe(
|
|
25318
|
+
WebSocketEvents.DISCONNECTED,
|
|
25319
|
+
(msg) => {
|
|
25320
|
+
const payload = msg?.body;
|
|
25321
|
+
if (payload && typeof payload === "object" && typeof payload.code === "number") {
|
|
25322
|
+
setLastDisconnect({
|
|
25323
|
+
code: payload.code,
|
|
25324
|
+
reason: payload.reason,
|
|
25325
|
+
wasClean: payload.wasClean,
|
|
25326
|
+
at: Date.now()
|
|
25327
|
+
});
|
|
25328
|
+
}
|
|
25329
|
+
}
|
|
25330
|
+
);
|
|
25331
|
+
return () => {
|
|
25332
|
+
unsubscribe();
|
|
25333
|
+
};
|
|
25334
|
+
}, []);
|
|
25335
|
+
return {
|
|
25336
|
+
online,
|
|
25337
|
+
lastDisconnect,
|
|
25338
|
+
sinceLastDisconnectMs: lastDisconnect ? Date.now() - lastDisconnect.at : null
|
|
25339
|
+
};
|
|
25340
|
+
};
|
|
25062
25341
|
function getDaysInMonth(month, year) {
|
|
25063
25342
|
const yearToUse = year ?? (/* @__PURE__ */ new Date()).getFullYear();
|
|
25064
25343
|
const daysInEachMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
|
@@ -26204,6 +26483,7 @@ exports.HEADER_WORK_TRACKER = HEADER_WORK_TRACKER;
|
|
|
26204
26483
|
exports.HttpRouteHandlers = HttpRouteHandlers;
|
|
26205
26484
|
exports.KOS_EXECUTION_CONTEXT = KOS_EXECUTION_CONTEXT;
|
|
26206
26485
|
exports.KOS_MODEL_ID = KOS_MODEL_ID;
|
|
26486
|
+
exports.KOS_RECOVERING_SESSION_KEY = KOS_RECOVERING_SESSION_KEY;
|
|
26207
26487
|
exports.KOS_SERVICE = service$4;
|
|
26208
26488
|
exports.KOS_SERVICE_1_6_5 = service$6;
|
|
26209
26489
|
exports.KOS_SERVICE_1_8_1 = service$5;
|
|
@@ -26294,12 +26574,14 @@ exports.PROFILE_TOOLS_PREVIEW = PROFILE_TOOLS_PREVIEW;
|
|
|
26294
26574
|
exports.ParentModel = ParentModel;
|
|
26295
26575
|
exports.PluginExtensionManager = PluginExtensionManager;
|
|
26296
26576
|
exports.ProgressBar = ProgressBar;
|
|
26577
|
+
exports.ReconnectingOverlay = ReconnectingOverlay;
|
|
26297
26578
|
exports.ReferenceConfig = ReferenceConfig;
|
|
26298
26579
|
exports.RegionInfo = Registration$1;
|
|
26299
26580
|
exports.RegionServices = index$f;
|
|
26300
26581
|
exports.RegistrationManager = RegistrationManager;
|
|
26301
26582
|
exports.Registry = Registry;
|
|
26302
26583
|
exports.ReloadAwareSetup = ReloadAwareSetup;
|
|
26584
|
+
exports.ReloadOnDisconnectPolicy = ReloadOnDisconnectPolicy;
|
|
26303
26585
|
exports.ReplayStrategy = ReplayStrategy;
|
|
26304
26586
|
exports.ResponseRetention = ResponseRetention;
|
|
26305
26587
|
exports.STATUS = STATUS;
|
|
@@ -26579,6 +26861,7 @@ exports.useAmPmValues = useAmPmValues;
|
|
|
26579
26861
|
exports.useCalendarDayArray = useCalendarDayArray;
|
|
26580
26862
|
exports.useConfigBean = useConfigBean;
|
|
26581
26863
|
exports.useConfigProperty = useConfigProperty;
|
|
26864
|
+
exports.useConnectionState = useConnectionState;
|
|
26582
26865
|
exports.useContextModel = useContextModel;
|
|
26583
26866
|
exports.useContextModelHierarchy = useContextModelHierarchy;
|
|
26584
26867
|
exports.useDateArrays = useDateArrays;
|
|
@@ -26612,6 +26895,7 @@ exports.useNetworkInterfaceContainer = useNetworkInterfaceContainer;
|
|
|
26612
26895
|
exports.useOta = useOta;
|
|
26613
26896
|
exports.usePressGesture = usePressGesture;
|
|
26614
26897
|
exports.useProjectReload = useProjectReload;
|
|
26898
|
+
exports.useReconnectingOverlayState = useReconnectingOverlayState;
|
|
26615
26899
|
exports.useRegionTimeProps = useRegionTimeProps;
|
|
26616
26900
|
exports.useRegionalTimeDate = useRegionalTimeDate;
|
|
26617
26901
|
exports.useSoftwareInfo = useSoftwareInfo;
|