Skip to content

Commit cb04476

Browse files
authored
Vuu token expiration (#1899)
* broadcasr token failure via ConnectionManager * bump vuu library version to 0.13.75
1 parent e679cf2 commit cb04476

File tree

37 files changed

+472
-450
lines changed

37 files changed

+472
-450
lines changed

vuu-ui/package-lock.json

Lines changed: 216 additions & 216 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vuu-ui/packages/grid-layout/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@heswell/grid-layout",
3-
"version": "0.13.74",
3+
"version": "0.13.75",
44
"description": "VUU Layout Components",
55
"main": "src/index.ts",
66
"author": "heswell",
@@ -12,7 +12,7 @@
1212
},
1313
"types": "src/index.ts",
1414
"dependencies": {
15-
"@vuu-ui/vuu-utils": "0.13.74",
15+
"@vuu-ui/vuu-utils": "0.13.75",
1616
"@salt-ds/core": "1.48.0",
1717
"@salt-ds/lab": "1.0.0-alpha.76",
1818
"@salt-ds/styles": "0.2.1",

vuu-ui/packages/vuu-codemirror/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@vuu-ui/vuu-codemirror",
3-
"version": "0.13.74",
3+
"version": "0.13.75",
44
"author": "heswell",
55
"main": "src/index.ts",
66
"license": "Apache-2.0",
@@ -11,15 +11,15 @@
1111
"lezer-generate:column": "lezer-generator --output ./src/column-expression-input/column-language-parser/generated/column-parser.js ./src/column-expression-input/column-language-parser/grammar/column.grammar"
1212
},
1313
"devDependencies": {
14-
"@vuu-ui/vuu-table-types": "0.13.74"
14+
"@vuu-ui/vuu-table-types": "0.13.75"
1515
},
1616
"dependencies": {
1717
"@codemirror/autocomplete": "^6.4.2",
1818
"@codemirror/commands": "^6.2.1",
1919
"@codemirror/language": "^6.6.0",
2020
"@codemirror/state": "^6.2.0",
2121
"@codemirror/view": "^6.9.3",
22-
"@vuu-ui/vuu-utils": "0.13.74",
22+
"@vuu-ui/vuu-utils": "0.13.75",
2323
"@lezer/common": "1.2.3",
2424
"@lezer/highlight": "^1.1.3"
2525
},

vuu-ui/packages/vuu-context-menu/package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@vuu-ui/vuu-context-menu",
3-
"version": "0.13.74",
3+
"version": "0.13.75",
44
"author": "heswell",
55
"main": "src/index.ts",
66
"license": "Apache-2.0",
@@ -10,12 +10,12 @@
1010
"type-defs": "node ../../scripts/build-type-defs.mjs"
1111
},
1212
"devDependencies": {
13-
"@vuu-ui/vuu-data-types": "0.13.74",
14-
"@vuu-ui/vuu-protocol-types": "0.13.74",
15-
"@vuu-ui/vuu-table-types": "0.13.74"
13+
"@vuu-ui/vuu-data-types": "0.13.75",
14+
"@vuu-ui/vuu-protocol-types": "0.13.75",
15+
"@vuu-ui/vuu-table-types": "0.13.75"
1616
},
1717
"dependencies": {
18-
"@vuu-ui/vuu-utils": "0.13.74",
18+
"@vuu-ui/vuu-utils": "0.13.75",
1919
"@salt-ds/core": "1.48.0",
2020
"@salt-ds/styles": "0.2.1",
2121
"@salt-ds/window": "0.1.1"
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@vuu-ui/vuu-data-local",
3-
"version": "0.13.74",
3+
"version": "0.13.75",
44
"main": "src/index.ts",
55
"author": "heswell",
66
"license": "Apache-2.0",
@@ -11,14 +11,14 @@
1111
"type-defs": "node ../../scripts/build-type-defs.mjs"
1212
},
1313
"devDependencies": {
14-
"@vuu-ui/vuu-data-types": "0.13.74",
15-
"@vuu-ui/vuu-table-types": "0.13.74",
16-
"@vuu-ui/vuu-filter-types": "0.13.74",
17-
"@vuu-ui/vuu-protocol-types": "0.13.74"
14+
"@vuu-ui/vuu-data-types": "0.13.75",
15+
"@vuu-ui/vuu-table-types": "0.13.75",
16+
"@vuu-ui/vuu-filter-types": "0.13.75",
17+
"@vuu-ui/vuu-protocol-types": "0.13.75"
1818
},
1919
"dependencies": {
20-
"@vuu-ui/vuu-filter-parser": "0.13.74",
21-
"@vuu-ui/vuu-utils": "0.13.74"
20+
"@vuu-ui/vuu-filter-parser": "0.13.75",
21+
"@vuu-ui/vuu-utils": "0.13.75"
2222
},
2323
"sideEffects": false
2424
}

vuu-ui/packages/vuu-data-react/package.json

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@vuu-ui/vuu-data-react",
3-
"version": "0.13.74",
3+
"version": "0.13.75",
44
"main": "src/index.ts",
55
"author": "heswell",
66
"license": "Apache-2.0",
@@ -11,22 +11,22 @@
1111
"type-defs": "node ../../scripts/build-type-defs.mjs"
1212
},
1313
"devDependencies": {
14-
"@vuu-ui/vuu-data-types": "0.13.74",
15-
"@vuu-ui/vuu-filter-types": "0.13.74",
16-
"@vuu-ui/vuu-popups": "0.13.74",
17-
"@vuu-ui/vuu-protocol-types": "0.13.74",
18-
"@vuu-ui/vuu-table-types": "0.13.74"
14+
"@vuu-ui/vuu-data-types": "0.13.75",
15+
"@vuu-ui/vuu-filter-types": "0.13.75",
16+
"@vuu-ui/vuu-popups": "0.13.75",
17+
"@vuu-ui/vuu-protocol-types": "0.13.75",
18+
"@vuu-ui/vuu-table-types": "0.13.75"
1919
},
2020
"dependencies": {
21-
"@vuu-ui/vuu-context-menu": "0.13.74",
22-
"@vuu-ui/vuu-data-remote": "0.13.74",
23-
"@vuu-ui/vuu-filter-parser": "0.13.74",
24-
"@vuu-ui/vuu-filters": "0.13.74",
25-
"@vuu-ui/vuu-layout": "0.13.74",
26-
"@vuu-ui/vuu-popups": "0.13.74",
27-
"@vuu-ui/vuu-ui-controls": "0.13.74",
28-
"@vuu-ui/vuu-utils": "0.13.74",
29-
"@vuu-ui/vuu-table": "0.13.74",
21+
"@vuu-ui/vuu-context-menu": "0.13.75",
22+
"@vuu-ui/vuu-data-remote": "0.13.75",
23+
"@vuu-ui/vuu-filter-parser": "0.13.75",
24+
"@vuu-ui/vuu-filters": "0.13.75",
25+
"@vuu-ui/vuu-layout": "0.13.75",
26+
"@vuu-ui/vuu-popups": "0.13.75",
27+
"@vuu-ui/vuu-ui-controls": "0.13.75",
28+
"@vuu-ui/vuu-utils": "0.13.75",
29+
"@vuu-ui/vuu-table": "0.13.75",
3030
"@salt-ds/core": "1.48.0",
3131
"@salt-ds/styles": "0.2.1",
3232
"@salt-ds/window": "0.1.1"
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@vuu-ui/vuu-data-remote",
3-
"version": "0.13.74",
3+
"version": "0.13.75",
44
"main": "src/index.ts",
55
"author": "heswell",
66
"license": "Apache-2.0",
@@ -12,13 +12,13 @@
1212
"type-defs": "node ../../scripts/build-type-defs.mjs"
1313
},
1414
"devDependencies": {
15-
"@vuu-ui/vuu-data-types": "0.13.74",
16-
"@vuu-ui/vuu-table-types": "0.13.74",
17-
"@vuu-ui/vuu-filter-types": "0.13.74",
18-
"@vuu-ui/vuu-protocol-types": "0.13.74"
15+
"@vuu-ui/vuu-data-types": "0.13.75",
16+
"@vuu-ui/vuu-table-types": "0.13.75",
17+
"@vuu-ui/vuu-filter-types": "0.13.75",
18+
"@vuu-ui/vuu-protocol-types": "0.13.75"
1919
},
2020
"dependencies": {
21-
"@vuu-ui/vuu-filter-parser": "0.13.74",
22-
"@vuu-ui/vuu-utils": "0.13.74"
21+
"@vuu-ui/vuu-filter-parser": "0.13.75",
22+
"@vuu-ui/vuu-utils": "0.13.75"
2323
}
2424
}

vuu-ui/packages/vuu-data-remote/src/ConnectionManager.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import {
2929
uuid,
3030
} from "@vuu-ui/vuu-utils";
3131
import {
32+
WebSocketCloseMessage,
3233
WebSocketConnectionEvents,
3334
WebSocketConnectionState,
3435
isWebSocketConnectionMessage,
@@ -44,7 +45,9 @@ export type PostMessageToClientCallback = (
4445

4546
export type ConnectionEvents = WebSocketConnectionEvents & {
4647
"connection-metrics": (message: ConnectionQualityMetrics) => void;
47-
"session-status": (loginResponse: VuuLoginResponse) => void;
48+
"session-status": (
49+
loginResponse: VuuLoginResponse | WebSocketCloseMessage,
50+
) => void;
4851
};
4952

5053
type RegisteredViewport = {
@@ -101,7 +104,7 @@ class ConnectionManager extends EventEmitter<ConnectionEvents> {
101104
}
102105

103106
private handleMessageFromWorker = (
104-
message: VuuUIMessageIn | DataSourceCallbackMessage,
107+
message: VuuUIMessageIn | DataSourceCallbackMessage | WebSocketCloseMessage,
105108
) => {
106109
if (shouldMessageBeRoutedToDataSource(message)) {
107110
const viewport = this.#viewports.get(message.clientViewportId);
@@ -112,6 +115,8 @@ class ConnectionManager extends EventEmitter<ConnectionEvents> {
112115
`[ConnectionManager] ${message.type} message received, viewport not found`,
113116
);
114117
}
118+
} else if (message.type === "websocket-closed") {
119+
this.emit("session-status", message);
115120
} else if (isLoginResponse(message)) {
116121
this.emit("session-status", message);
117122
} else if (isWebSocketConnectionMessage(message)) {

vuu-ui/packages/vuu-data-remote/src/DedicatedWorker.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {
1515
VuuRpcMenuRequest,
1616
VuuRpcServiceRequest,
1717
} from "@vuu-ui/vuu-protocol-types";
18+
import { WebSocketCloseMessage } from "./WebSocketConnection";
1819

1920
const workerBlob = new Blob([getLoggingConfigForWorker() + workerSourceCode], {
2021
type: "text/javascript",
@@ -27,14 +28,18 @@ export class DedicatedWorker {
2728
>;
2829
#worker: Promise<Worker>;
2930

30-
constructor(onMessage: (msg: VuuUIMessageIn) => void) {
31+
constructor(
32+
onMessage: (msg: VuuUIMessageIn | WebSocketCloseMessage) => void,
33+
) {
3134
const deferredWorker = new DeferredPromise<Worker>();
3235
this.#worker = deferredWorker.promise;
3336
const worker = new Worker(workerBlobUrl);
3437
const timer: number | null = window.setTimeout(() => {
3538
console.warn("timed out waiting for worker to load");
3639
}, 1000);
37-
worker.onmessage = (msg: MessageEvent<VuuUIMessageIn>) => {
40+
worker.onmessage = (
41+
msg: MessageEvent<VuuUIMessageIn | WebSocketCloseMessage>,
42+
) => {
3843
const { data: message } = msg;
3944
if (message.type === "ready") {
4045
window.clearTimeout(timer);
@@ -45,6 +50,11 @@ export class DedicatedWorker {
4550
} else if (message.type === "connection-failed") {
4651
this.#deferredConnection?.resolve("rejected");
4752
// this.#deferredConnection?.reject(message.reason);
53+
} else if (message.type === "websocket-closed") {
54+
if (message.reason === "token-expired") {
55+
console.log(`websocket closed ${message.reason}`);
56+
onMessage(message);
57+
}
4858
} else {
4959
onMessage(message);
5060
}

vuu-ui/packages/vuu-data-remote/src/WebSocketConnection.ts

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -94,9 +94,18 @@ const parseWebSocketMessage = (message: string): VuuServerMessage => {
9494
}
9595
};
9696

97-
export type WebSocketConnectionCloseReason = "failure" | "shutdown";
97+
export type WebSocketCloseMessage = {
98+
type: "websocket-closed";
99+
reason: WebSocketConnectionCloseReason;
100+
};
101+
102+
export type WebSocketConnectionCloseReason =
103+
| "failure"
104+
| "shutdown"
105+
| "invalid-token"
106+
| "token-expired";
98107
export type WebSocketConnectionEvents = {
99-
closed: (reason: WebSocketConnectionCloseReason) => void;
108+
closed: (message: WebSocketCloseMessage) => void;
100109
connected: () => void;
101110
"connection-status": (message: WebSocketConnectionState) => void;
102111
reconnected: () => void;
@@ -318,8 +327,10 @@ export class WebSocketConnection extends EventEmitter<WebSocketConnectionEvents>
318327
}
319328

320329
private receive = (evt: MessageEvent) => {
321-
if (evt.data === "Invalid token") {
322-
throw Error("[WebSocketConnection] Invalid token");
330+
if (evt.data === "Invalid token" || evt.data === "Token has expired") {
331+
const closeReason: WebSocketConnectionCloseReason =
332+
evt.data === "Invalid token" ? "invalid-token" : "token-expired";
333+
this.close(closeReason);
323334
} else {
324335
const vuuMessageFromServer = parseWebSocketMessage(evt.data);
325336
if (vuuMessageFromServer.body.type === "CHANGE_VP_RANGE_SUCCESS") {
@@ -356,7 +367,7 @@ export class WebSocketConnection extends EventEmitter<WebSocketConnectionEvents>
356367
} else {
357368
this.#ws?.close();
358369
}
359-
this.emit("closed", reason);
370+
this.emit("closed", { type: "websocket-closed", reason });
360371
this.#ws = undefined;
361372
}
362373
}

0 commit comments

Comments
 (0)