@sogni-ai/sogni-client 4.0.0-alpha.3 → 4.0.0-alpha.30
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/CHANGELOG.md +213 -0
- package/README.md +279 -28
- package/dist/Account/index.d.ts +18 -16
- package/dist/Account/index.js +31 -20
- package/dist/Account/index.js.map +1 -1
- package/dist/ApiClient/WebSocketClient/BrowserWebSocketClient/ChannelCoordinator.d.ts +66 -0
- package/dist/ApiClient/WebSocketClient/BrowserWebSocketClient/ChannelCoordinator.js +332 -0
- package/dist/ApiClient/WebSocketClient/BrowserWebSocketClient/ChannelCoordinator.js.map +1 -0
- package/dist/ApiClient/WebSocketClient/BrowserWebSocketClient/index.d.ts +28 -0
- package/dist/ApiClient/WebSocketClient/BrowserWebSocketClient/index.js +203 -0
- package/dist/ApiClient/WebSocketClient/BrowserWebSocketClient/index.js.map +1 -0
- package/dist/ApiClient/WebSocketClient/events.d.ts +11 -0
- package/dist/ApiClient/WebSocketClient/index.d.ts +2 -2
- package/dist/ApiClient/WebSocketClient/index.js +13 -3
- package/dist/ApiClient/WebSocketClient/index.js.map +1 -1
- package/dist/ApiClient/WebSocketClient/types.d.ts +13 -0
- package/dist/ApiClient/index.d.ts +4 -4
- package/dist/ApiClient/index.js +23 -4
- package/dist/ApiClient/index.js.map +1 -1
- package/dist/Projects/Job.d.ts +24 -4
- package/dist/Projects/Job.js +58 -16
- package/dist/Projects/Job.js.map +1 -1
- package/dist/Projects/Project.d.ts +8 -0
- package/dist/Projects/Project.js +27 -6
- package/dist/Projects/Project.js.map +1 -1
- package/dist/Projects/createJobRequestMessage.js +109 -15
- package/dist/Projects/createJobRequestMessage.js.map +1 -1
- package/dist/Projects/index.d.ts +110 -11
- package/dist/Projects/index.js +412 -42
- package/dist/Projects/index.js.map +1 -1
- package/dist/Projects/types/EstimationResponse.d.ts +2 -0
- package/dist/Projects/types/SamplerParams.d.ts +13 -0
- package/dist/Projects/types/SamplerParams.js +26 -0
- package/dist/Projects/types/SamplerParams.js.map +1 -0
- package/dist/Projects/types/SchedulerParams.d.ts +14 -0
- package/dist/Projects/types/SchedulerParams.js +24 -0
- package/dist/Projects/types/SchedulerParams.js.map +1 -0
- package/dist/Projects/types/events.d.ts +5 -1
- package/dist/Projects/types/index.d.ts +150 -39
- package/dist/Projects/types/index.js +13 -0
- package/dist/Projects/types/index.js.map +1 -1
- package/dist/Projects/utils.d.ts +19 -1
- package/dist/Projects/utils.js +68 -0
- package/dist/Projects/utils.js.map +1 -1
- package/dist/index.d.ts +12 -4
- package/dist/index.js +12 -4
- package/dist/index.js.map +1 -1
- package/dist/lib/AuthManager/TokenAuthManager.js +0 -2
- package/dist/lib/AuthManager/TokenAuthManager.js.map +1 -1
- package/dist/lib/DataEntity.js +4 -2
- package/dist/lib/DataEntity.js.map +1 -1
- package/dist/lib/validation.d.ts +7 -0
- package/dist/lib/validation.js +36 -0
- package/dist/lib/validation.js.map +1 -1
- package/package.json +4 -4
- package/src/Account/index.ts +30 -19
- package/src/ApiClient/WebSocketClient/BrowserWebSocketClient/ChannelCoordinator.ts +426 -0
- package/src/ApiClient/WebSocketClient/BrowserWebSocketClient/index.ts +237 -0
- package/src/ApiClient/WebSocketClient/events.ts +13 -0
- package/src/ApiClient/WebSocketClient/index.ts +15 -5
- package/src/ApiClient/WebSocketClient/types.ts +16 -0
- package/src/ApiClient/index.ts +30 -8
- package/src/Projects/Job.ts +64 -16
- package/src/Projects/Project.ts +29 -9
- package/src/Projects/createJobRequestMessage.ts +155 -36
- package/src/Projects/index.ts +437 -46
- package/src/Projects/types/EstimationResponse.ts +2 -0
- package/src/Projects/types/SamplerParams.ts +24 -0
- package/src/Projects/types/SchedulerParams.ts +22 -0
- package/src/Projects/types/events.ts +6 -0
- package/src/Projects/types/index.ts +181 -47
- package/src/Projects/utils.ts +66 -1
- package/src/index.ts +38 -11
- package/src/lib/AuthManager/TokenAuthManager.ts +0 -2
- package/src/lib/DataEntity.ts +4 -2
- package/src/lib/validation.ts +41 -0
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const getUUID_1 = __importDefault(require("../../../lib/getUUID"));
|
|
16
|
+
const PRIMARY_HEARTBEAT_INTERVAL = 2000;
|
|
17
|
+
const PRIMARY_TIMEOUT = 4000;
|
|
18
|
+
const ACK_TIMEOUT = 5000;
|
|
19
|
+
var MessageType;
|
|
20
|
+
(function (MessageType) {
|
|
21
|
+
MessageType["ELECTION"] = "election";
|
|
22
|
+
MessageType["ELECTION_RESPONSE"] = "election_response";
|
|
23
|
+
MessageType["PRIMARY_ANNOUNCE"] = "primary_announce";
|
|
24
|
+
MessageType["PRIMARY_HEARTBEAT"] = "primary_heartbeat";
|
|
25
|
+
MessageType["BROADCAST"] = "broadcast";
|
|
26
|
+
MessageType["REQUEST"] = "request";
|
|
27
|
+
MessageType["REQUEST_ACK"] = "request_ack";
|
|
28
|
+
})(MessageType || (MessageType = {}));
|
|
29
|
+
const CHANNEL_NAME = 'sogni-websocket-channel';
|
|
30
|
+
let isActiveTab = false;
|
|
31
|
+
if (typeof window !== 'undefined' && window.location.protocol === 'https:') {
|
|
32
|
+
isActiveTab = window.document.visibilityState === 'visible';
|
|
33
|
+
window.addEventListener('visibilitychange', () => (isActiveTab = window.document.visibilityState === 'visible'));
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* A class responsible for coordinating communication across browser tabs or windows via BroadcastChannel API.
|
|
37
|
+
* It handles the role election of the primary (leader) tab, message broadcasting, heartbeats for primary tab monitoring,
|
|
38
|
+
* and message acknowledgment for reliable communication.
|
|
39
|
+
*
|
|
40
|
+
* The `ChannelCoordinator` ensures that one tab per session is assigned as the primary, while allowing others to act as secondaries,
|
|
41
|
+
* utilizing various message types for communication and coordination.
|
|
42
|
+
*
|
|
43
|
+
* Message is sent by secondary tabs to the primary tab via the `sendMessage` method. By sending message
|
|
44
|
+
* tab can tell primary to connect, disconnect, send message to socket etc.
|
|
45
|
+
*
|
|
46
|
+
* Notification is type of message broadcasted by primary to secondary tabs. This is mostly used to
|
|
47
|
+
* broadcast socket events from primary to secondary tabs.
|
|
48
|
+
*
|
|
49
|
+
* @template M - The type of messages being broadcast to other tabs/windows.
|
|
50
|
+
* @template N - The type of notifications being handled within the coordinator.
|
|
51
|
+
*/
|
|
52
|
+
class ChannelCoordinator {
|
|
53
|
+
constructor({ callbacks, logger }) {
|
|
54
|
+
this.id = (0, getUUID_1.default)();
|
|
55
|
+
this.priority = Date.now();
|
|
56
|
+
this.channel = new BroadcastChannel(CHANNEL_NAME);
|
|
57
|
+
this._isPrimary = false;
|
|
58
|
+
this.ackCallbacks = {};
|
|
59
|
+
// User to handle election of primary tab
|
|
60
|
+
this.electionInProgress = false;
|
|
61
|
+
this.electionResponses = new Map();
|
|
62
|
+
// Heartbeat to detect primary tab death
|
|
63
|
+
this.lastPrimaryHeartbeat = Date.now();
|
|
64
|
+
this.heartbeatTimer = null;
|
|
65
|
+
this.primaryCheckTimer = null;
|
|
66
|
+
this.readyCallback = () => { };
|
|
67
|
+
this.readyPromise = new Promise((resolve) => {
|
|
68
|
+
let called = false;
|
|
69
|
+
this.readyCallback = () => {
|
|
70
|
+
if (!called) {
|
|
71
|
+
called = true;
|
|
72
|
+
resolve();
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
});
|
|
76
|
+
this.callbacks = callbacks;
|
|
77
|
+
this.logger = logger;
|
|
78
|
+
this.channel.addEventListener('message', (event) => this.handleMessage(event.data));
|
|
79
|
+
this.startElections();
|
|
80
|
+
this.startPrimaryMonitor();
|
|
81
|
+
// Listen for tab closing to gracefully release primary role
|
|
82
|
+
if (typeof window !== 'undefined') {
|
|
83
|
+
window.addEventListener('beforeunload', () => {
|
|
84
|
+
this.priority = 0;
|
|
85
|
+
this.startElections();
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
get isPrimary() {
|
|
90
|
+
return this._isPrimary;
|
|
91
|
+
}
|
|
92
|
+
get currentPriority() {
|
|
93
|
+
return isActiveTab ? this.priority * 10 : this.priority;
|
|
94
|
+
}
|
|
95
|
+
isReady() {
|
|
96
|
+
return this.readyPromise;
|
|
97
|
+
}
|
|
98
|
+
startElections() {
|
|
99
|
+
this.logger.debug(`Start primary elections, my priority is ${this.currentPriority}, tab visibility is ${isActiveTab}`);
|
|
100
|
+
this.electionInProgress = true;
|
|
101
|
+
this.electionResponses.clear();
|
|
102
|
+
this.electionResponses.set(this.id, this.currentPriority);
|
|
103
|
+
this.broadcast({
|
|
104
|
+
type: MessageType.ELECTION,
|
|
105
|
+
payload: { priority: this.currentPriority }
|
|
106
|
+
});
|
|
107
|
+
setTimeout(() => {
|
|
108
|
+
this.finishElections();
|
|
109
|
+
}, 500);
|
|
110
|
+
}
|
|
111
|
+
finishElections() {
|
|
112
|
+
if (!this.electionInProgress) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
// Find highest priority
|
|
116
|
+
let highestPriority = -Infinity;
|
|
117
|
+
let winnerId = null;
|
|
118
|
+
for (const [id, priority] of this.electionResponses) {
|
|
119
|
+
if (priority > highestPriority || (priority === highestPriority && id > (winnerId || ''))) {
|
|
120
|
+
highestPriority = priority;
|
|
121
|
+
winnerId = id;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (winnerId === this.id) {
|
|
125
|
+
this.becomePrimary();
|
|
126
|
+
this.logger.debug(`Won elections! ${winnerId}`);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
this.logger.debug(`Lost elections! Winner is ${winnerId}`);
|
|
130
|
+
}
|
|
131
|
+
this.electionInProgress = false;
|
|
132
|
+
this.electionResponses.clear();
|
|
133
|
+
}
|
|
134
|
+
becomePrimary() {
|
|
135
|
+
this._isPrimary = true;
|
|
136
|
+
this.lastPrimaryHeartbeat = Date.now();
|
|
137
|
+
this.broadcast({
|
|
138
|
+
type: MessageType.PRIMARY_ANNOUNCE,
|
|
139
|
+
payload: { id: this.id, priority: this.currentPriority }
|
|
140
|
+
});
|
|
141
|
+
this.startHeartbeat();
|
|
142
|
+
this.callbacks.onRoleChange(true);
|
|
143
|
+
this.readyCallback();
|
|
144
|
+
}
|
|
145
|
+
startHeartbeat() {
|
|
146
|
+
if (this.heartbeatTimer) {
|
|
147
|
+
clearInterval(this.heartbeatTimer);
|
|
148
|
+
}
|
|
149
|
+
this.heartbeatTimer = setInterval(() => {
|
|
150
|
+
if (this._isPrimary) {
|
|
151
|
+
this.broadcast({
|
|
152
|
+
type: MessageType.PRIMARY_HEARTBEAT,
|
|
153
|
+
payload: { id: this.id, priority: this.currentPriority }
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
this.stopHeartbeat();
|
|
158
|
+
}
|
|
159
|
+
}, PRIMARY_HEARTBEAT_INTERVAL);
|
|
160
|
+
}
|
|
161
|
+
stopHeartbeat() {
|
|
162
|
+
if (this.heartbeatTimer) {
|
|
163
|
+
clearInterval(this.heartbeatTimer);
|
|
164
|
+
this.heartbeatTimer = null;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
startPrimaryMonitor() {
|
|
168
|
+
if (this.primaryCheckTimer) {
|
|
169
|
+
clearInterval(this.primaryCheckTimer);
|
|
170
|
+
}
|
|
171
|
+
this.primaryCheckTimer = setInterval(() => {
|
|
172
|
+
if (!this._isPrimary) {
|
|
173
|
+
const timeSinceLastHeartbeat = Date.now() - this.lastPrimaryHeartbeat;
|
|
174
|
+
if (timeSinceLastHeartbeat > PRIMARY_TIMEOUT) {
|
|
175
|
+
this.startElections();
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
this.lastPrimaryHeartbeat = Date.now();
|
|
180
|
+
}
|
|
181
|
+
}, PRIMARY_HEARTBEAT_INTERVAL);
|
|
182
|
+
}
|
|
183
|
+
handleMessage(envelope) {
|
|
184
|
+
const { senderId, recipientId, message } = envelope;
|
|
185
|
+
const isForOtherClient = recipientId && recipientId !== this.id;
|
|
186
|
+
if (senderId === this.id || isForOtherClient) {
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
switch (message.type) {
|
|
190
|
+
case MessageType.ELECTION:
|
|
191
|
+
return this.handleElection(message);
|
|
192
|
+
case MessageType.ELECTION_RESPONSE:
|
|
193
|
+
return this.handleElectionResponse(message);
|
|
194
|
+
case MessageType.PRIMARY_ANNOUNCE:
|
|
195
|
+
return this.handlePrimaryAnnounce(message);
|
|
196
|
+
case MessageType.PRIMARY_HEARTBEAT:
|
|
197
|
+
return this.handlePrimaryHeartbeat();
|
|
198
|
+
case MessageType.BROADCAST:
|
|
199
|
+
return this.handleBroadcast(message);
|
|
200
|
+
case MessageType.REQUEST:
|
|
201
|
+
return this.handleRequest(message, envelope);
|
|
202
|
+
case MessageType.REQUEST_ACK:
|
|
203
|
+
return this.handleRequestAck(message);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
handleElection(message) {
|
|
207
|
+
this.broadcast({
|
|
208
|
+
type: MessageType.ELECTION_RESPONSE,
|
|
209
|
+
payload: { id: this.id, priority: this.currentPriority }
|
|
210
|
+
});
|
|
211
|
+
if (this.currentPriority > message.payload.priority && !this.electionInProgress) {
|
|
212
|
+
this.startElections();
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
handleElectionResponse(message) {
|
|
216
|
+
if (this.electionInProgress) {
|
|
217
|
+
this.electionResponses.set(message.payload.id, message.payload.priority);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
handlePrimaryAnnounce(message) {
|
|
221
|
+
this.logger.debug(`Primary announced: ${message.payload.id}`);
|
|
222
|
+
const wasPrimary = this._isPrimary;
|
|
223
|
+
this._isPrimary = false;
|
|
224
|
+
this.lastPrimaryHeartbeat = Date.now();
|
|
225
|
+
this.electionInProgress = false;
|
|
226
|
+
this.electionResponses.clear();
|
|
227
|
+
if (this.heartbeatTimer) {
|
|
228
|
+
clearInterval(this.heartbeatTimer);
|
|
229
|
+
this.heartbeatTimer = null;
|
|
230
|
+
}
|
|
231
|
+
if (wasPrimary) {
|
|
232
|
+
this.callbacks.onRoleChange(false);
|
|
233
|
+
}
|
|
234
|
+
this.readyCallback();
|
|
235
|
+
}
|
|
236
|
+
handlePrimaryHeartbeat() {
|
|
237
|
+
this.lastPrimaryHeartbeat = Date.now();
|
|
238
|
+
}
|
|
239
|
+
handleBroadcast(message) {
|
|
240
|
+
this.logger.debug(`Received broadcast from primary`, message.payload);
|
|
241
|
+
this.callbacks.onNotification(message.payload);
|
|
242
|
+
}
|
|
243
|
+
handleRequest(message, envelope) {
|
|
244
|
+
if (!this.isPrimary) {
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
this.logger.debug(`Received request from secondary`, message.payload);
|
|
248
|
+
this.callbacks
|
|
249
|
+
.onMessage(message.payload)
|
|
250
|
+
.then(() => {
|
|
251
|
+
this.send({
|
|
252
|
+
type: MessageType.REQUEST_ACK,
|
|
253
|
+
payload: { id: envelope.id }
|
|
254
|
+
}, envelope.senderId);
|
|
255
|
+
})
|
|
256
|
+
.catch((error) => {
|
|
257
|
+
this.send({
|
|
258
|
+
type: MessageType.REQUEST_ACK,
|
|
259
|
+
payload: { id: envelope.id, error }
|
|
260
|
+
}, envelope.senderId);
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
handleRequestAck(message) {
|
|
264
|
+
const ackCallback = this.ackCallbacks[message.payload.id];
|
|
265
|
+
if (ackCallback) {
|
|
266
|
+
ackCallback(message.payload.error);
|
|
267
|
+
delete this.ackCallbacks[message.payload.id];
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
send(message, recipientId) {
|
|
271
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
272
|
+
const envelope = {
|
|
273
|
+
id: (0, getUUID_1.default)(),
|
|
274
|
+
senderId: this.id,
|
|
275
|
+
recipientId,
|
|
276
|
+
timestamp: Date.now(),
|
|
277
|
+
message: message
|
|
278
|
+
};
|
|
279
|
+
if (message.type !== MessageType.REQUEST) {
|
|
280
|
+
this.channel.postMessage(envelope);
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
return new Promise((resolve, reject) => {
|
|
284
|
+
const ackTimeout = setTimeout(() => {
|
|
285
|
+
if (this.ackCallbacks[envelope.id]) {
|
|
286
|
+
this.ackCallbacks[envelope.id](new Error('Message delivery timeout'));
|
|
287
|
+
delete this.ackCallbacks[envelope.id];
|
|
288
|
+
}
|
|
289
|
+
}, ACK_TIMEOUT);
|
|
290
|
+
this.ackCallbacks[envelope.id] = (error) => {
|
|
291
|
+
clearTimeout(ackTimeout);
|
|
292
|
+
delete this.ackCallbacks[envelope.id];
|
|
293
|
+
if (error) {
|
|
294
|
+
reject(error);
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
resolve();
|
|
298
|
+
}
|
|
299
|
+
};
|
|
300
|
+
this.channel.postMessage(envelope);
|
|
301
|
+
});
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
broadcast(message) {
|
|
305
|
+
const envelope = {
|
|
306
|
+
id: (0, getUUID_1.default)(),
|
|
307
|
+
senderId: this.id,
|
|
308
|
+
timestamp: Date.now(),
|
|
309
|
+
message: message
|
|
310
|
+
};
|
|
311
|
+
this.channel.postMessage(envelope);
|
|
312
|
+
return envelope.id;
|
|
313
|
+
}
|
|
314
|
+
sendMessage(message) {
|
|
315
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
316
|
+
this.logger.debug(`Sending message to primary`, message);
|
|
317
|
+
return this.send({
|
|
318
|
+
type: MessageType.REQUEST,
|
|
319
|
+
payload: message
|
|
320
|
+
});
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
notify(message) {
|
|
324
|
+
this.logger.debug(`Sending notification to secondary tabs`, message);
|
|
325
|
+
this.broadcast({
|
|
326
|
+
type: MessageType.BROADCAST,
|
|
327
|
+
payload: message
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
exports.default = ChannelCoordinator;
|
|
332
|
+
//# sourceMappingURL=ChannelCoordinator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChannelCoordinator.js","sourceRoot":"","sources":["../../../../src/ApiClient/WebSocketClient/BrowserWebSocketClient/ChannelCoordinator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { IWebSocketClient, SupernetType } from '../types';
|
|
2
|
+
import { AuthManager } from '../../../lib/AuthManager';
|
|
3
|
+
import { Logger } from '../../../lib/DefaultLogger';
|
|
4
|
+
import RestClient from '../../../lib/RestClient';
|
|
5
|
+
import { SocketEventMap } from '../events';
|
|
6
|
+
import { MessageType, SocketMessageMap } from '../messages';
|
|
7
|
+
declare class BrowserWebSocketClient extends RestClient<SocketEventMap> implements IWebSocketClient {
|
|
8
|
+
appId: string;
|
|
9
|
+
baseUrl: string;
|
|
10
|
+
private socketClient;
|
|
11
|
+
private coordinator;
|
|
12
|
+
private _isConnected;
|
|
13
|
+
private _supernetType;
|
|
14
|
+
constructor(baseUrl: string, auth: AuthManager, appId: string, supernetType: SupernetType, logger: Logger);
|
|
15
|
+
get isConnected(): boolean;
|
|
16
|
+
get supernetType(): SupernetType;
|
|
17
|
+
connect(): Promise<void>;
|
|
18
|
+
disconnect(): Promise<void>;
|
|
19
|
+
switchNetwork(supernetType: SupernetType): Promise<SupernetType>;
|
|
20
|
+
send<T extends MessageType>(messageType: T, data: SocketMessageMap[T]): Promise<void>;
|
|
21
|
+
private handleMessage;
|
|
22
|
+
private handleNotification;
|
|
23
|
+
private handleAuthChanged;
|
|
24
|
+
private handleSocketEvent;
|
|
25
|
+
private handleAuthUpdated;
|
|
26
|
+
private handleRoleChange;
|
|
27
|
+
}
|
|
28
|
+
export default BrowserWebSocketClient;
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const AuthManager_1 = require("../../../lib/AuthManager");
|
|
16
|
+
const index_1 = __importDefault(require("../index"));
|
|
17
|
+
const RestClient_1 = __importDefault(require("../../../lib/RestClient"));
|
|
18
|
+
const ChannelCoordinator_1 = __importDefault(require("./ChannelCoordinator"));
|
|
19
|
+
class WrappedClient extends index_1.default {
|
|
20
|
+
constructor() {
|
|
21
|
+
super(...arguments);
|
|
22
|
+
this.interceptor = undefined;
|
|
23
|
+
}
|
|
24
|
+
intercept(interceptor) {
|
|
25
|
+
this.interceptor = interceptor;
|
|
26
|
+
}
|
|
27
|
+
emit(event, data) {
|
|
28
|
+
super.emit(event, data);
|
|
29
|
+
if (this.interceptor) {
|
|
30
|
+
this.interceptor(event, data);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
class BrowserWebSocketClient extends RestClient_1.default {
|
|
35
|
+
constructor(baseUrl, auth, appId, supernetType, logger) {
|
|
36
|
+
const socketClient = new WrappedClient(baseUrl, auth, appId, supernetType, logger);
|
|
37
|
+
super(socketClient.baseUrl, auth, logger);
|
|
38
|
+
this._isConnected = false;
|
|
39
|
+
this.socketClient = socketClient;
|
|
40
|
+
this.appId = appId;
|
|
41
|
+
this.baseUrl = socketClient.baseUrl;
|
|
42
|
+
this._supernetType = supernetType;
|
|
43
|
+
this.coordinator = new ChannelCoordinator_1.default({
|
|
44
|
+
callbacks: {
|
|
45
|
+
onRoleChange: this.handleRoleChange.bind(this),
|
|
46
|
+
onMessage: this.handleMessage.bind(this),
|
|
47
|
+
onNotification: this.handleNotification.bind(this)
|
|
48
|
+
},
|
|
49
|
+
logger
|
|
50
|
+
});
|
|
51
|
+
this.auth.on('updated', this.handleAuthUpdated.bind(this));
|
|
52
|
+
this.socketClient.intercept(this.handleSocketEvent.bind(this));
|
|
53
|
+
}
|
|
54
|
+
get isConnected() {
|
|
55
|
+
return this.coordinator.isPrimary ? this.socketClient.isConnected : this._isConnected;
|
|
56
|
+
}
|
|
57
|
+
get supernetType() {
|
|
58
|
+
return this.coordinator.isPrimary ? this.socketClient.supernetType : this._supernetType;
|
|
59
|
+
}
|
|
60
|
+
connect() {
|
|
61
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
62
|
+
yield this.coordinator.isReady();
|
|
63
|
+
if (this.coordinator.isPrimary) {
|
|
64
|
+
yield this.socketClient.connect();
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
return this.coordinator.sendMessage({
|
|
68
|
+
type: 'connect'
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
disconnect() {
|
|
74
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
75
|
+
yield this.coordinator.isReady();
|
|
76
|
+
if (this.coordinator.isPrimary) {
|
|
77
|
+
this.socketClient.disconnect();
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
this.coordinator.sendMessage({
|
|
81
|
+
type: 'disconnect'
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
switchNetwork(supernetType) {
|
|
87
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
88
|
+
yield this.coordinator.isReady();
|
|
89
|
+
if (this.coordinator.isPrimary) {
|
|
90
|
+
return this.socketClient.switchNetwork(supernetType);
|
|
91
|
+
}
|
|
92
|
+
yield this.coordinator.sendMessage({
|
|
93
|
+
type: 'switchNetwork',
|
|
94
|
+
payload: supernetType
|
|
95
|
+
});
|
|
96
|
+
this._supernetType = supernetType;
|
|
97
|
+
return supernetType;
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
send(messageType, data) {
|
|
101
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
102
|
+
yield this.coordinator.isReady();
|
|
103
|
+
if (this.coordinator.isPrimary) {
|
|
104
|
+
if (!this.socketClient.isConnected) {
|
|
105
|
+
yield this.socketClient.connect();
|
|
106
|
+
}
|
|
107
|
+
return this.socketClient.send(messageType, data);
|
|
108
|
+
}
|
|
109
|
+
return this.coordinator.sendMessage({
|
|
110
|
+
type: 'socket-send',
|
|
111
|
+
payload: { type: messageType, data }
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
handleMessage(message) {
|
|
116
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
117
|
+
this._logger.debug('Received control message', message);
|
|
118
|
+
switch (message.type) {
|
|
119
|
+
case 'socket-send': {
|
|
120
|
+
if (!this.socketClient.isConnected) {
|
|
121
|
+
yield this.socketClient.connect();
|
|
122
|
+
}
|
|
123
|
+
return this.socketClient.send(message.payload.type, message.payload.data);
|
|
124
|
+
}
|
|
125
|
+
case 'connect': {
|
|
126
|
+
if (!this.socketClient.isConnected) {
|
|
127
|
+
yield this.socketClient.connect();
|
|
128
|
+
}
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
case 'disconnect': {
|
|
132
|
+
if (this.socketClient.isConnected) {
|
|
133
|
+
this.socketClient.disconnect();
|
|
134
|
+
}
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
case 'switchNetwork': {
|
|
138
|
+
yield this.switchNetwork(message.payload);
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
default: {
|
|
142
|
+
this._logger.error('Received unknown message type:', message);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
handleNotification(notification) {
|
|
148
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
149
|
+
this._logger.debug('Received notification', notification.type, notification.payload);
|
|
150
|
+
switch (notification.type) {
|
|
151
|
+
case 'socket-event': {
|
|
152
|
+
this.emit(notification.payload.type, notification.payload.data);
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
case 'auth-state-changed': {
|
|
156
|
+
this.handleAuthChanged(notification.payload);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
default: {
|
|
160
|
+
this._logger.error('Received unknown notification type:', notification);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
handleAuthChanged(isAuthenticated) {
|
|
166
|
+
if (this.auth instanceof AuthManager_1.TokenAuthManager) {
|
|
167
|
+
throw new Error('TokenAuthManager is not supported in multi client mode');
|
|
168
|
+
}
|
|
169
|
+
if (this.auth.isAuthenticated !== isAuthenticated) {
|
|
170
|
+
if (isAuthenticated) {
|
|
171
|
+
this.auth.authenticate();
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
this.auth.clear();
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
handleSocketEvent(eventType, payload) {
|
|
179
|
+
if (this.coordinator.isPrimary) {
|
|
180
|
+
this.coordinator.notify({
|
|
181
|
+
type: 'socket-event',
|
|
182
|
+
payload: { type: eventType, data: payload }
|
|
183
|
+
});
|
|
184
|
+
this.emit(eventType, payload);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
handleAuthUpdated(isAuthenticated) {
|
|
188
|
+
this.coordinator.notify({
|
|
189
|
+
type: 'auth-state-changed',
|
|
190
|
+
payload: isAuthenticated
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
handleRoleChange(isPrimary) {
|
|
194
|
+
if (isPrimary && !this.socketClient.isConnected && this.isConnected) {
|
|
195
|
+
this.socketClient.connect();
|
|
196
|
+
}
|
|
197
|
+
else if (!isPrimary && this.socketClient.isConnected) {
|
|
198
|
+
this.socketClient.disconnect();
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
exports.default = BrowserWebSocketClient;
|
|
203
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ApiClient/WebSocketClient/BrowserWebSocketClient/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,6 +44,11 @@ export type JobProgressData = {
|
|
|
44
44
|
step: number;
|
|
45
45
|
stepCount: number;
|
|
46
46
|
};
|
|
47
|
+
export type JobETAData = {
|
|
48
|
+
jobID: string;
|
|
49
|
+
imgID?: string;
|
|
50
|
+
etaSeconds: number;
|
|
51
|
+
};
|
|
47
52
|
export type JobResultData = {
|
|
48
53
|
jobID: string;
|
|
49
54
|
imgID: string;
|
|
@@ -109,6 +114,11 @@ export type SocketEventMap = {
|
|
|
109
114
|
* @event WebSocketClient#jobProgress - Job progress update
|
|
110
115
|
*/
|
|
111
116
|
jobProgress: JobProgressData;
|
|
117
|
+
/**
|
|
118
|
+
* @event WebSocketClient#jobETA - Job ETA update (sent every second during inference by ComfyUI workers)
|
|
119
|
+
* Note: Only available for ComfyUI-based workers during video generation
|
|
120
|
+
*/
|
|
121
|
+
jobETA: JobETAData;
|
|
112
122
|
/**
|
|
113
123
|
* @event WebSocketClient#jobResult - Job result received
|
|
114
124
|
*/
|
|
@@ -135,3 +145,4 @@ export type SocketEventMap = {
|
|
|
135
145
|
toastMessage: ToastMessage;
|
|
136
146
|
artistCancelConfirmation: ArtistCancelConfirmation;
|
|
137
147
|
};
|
|
148
|
+
export type SocketEventName = keyof SocketEventMap;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { MessageType, SocketMessageMap } from './messages';
|
|
2
2
|
import { SocketEventMap } from './events';
|
|
3
3
|
import RestClient from '../../lib/RestClient';
|
|
4
|
-
import { SupernetType } from './types';
|
|
4
|
+
import { IWebSocketClient, SupernetType } from './types';
|
|
5
5
|
import { Logger } from '../../lib/DefaultLogger';
|
|
6
6
|
import { AuthManager } from '../../lib/AuthManager';
|
|
7
|
-
declare class WebSocketClient extends RestClient<SocketEventMap> {
|
|
7
|
+
declare class WebSocketClient extends RestClient<SocketEventMap> implements IWebSocketClient {
|
|
8
8
|
appId: string;
|
|
9
9
|
baseUrl: string;
|
|
10
10
|
private socket;
|
|
@@ -80,7 +80,7 @@ class WebSocketClient extends RestClient_1.default {
|
|
|
80
80
|
socket.onmessage = null;
|
|
81
81
|
socket.onopen = null;
|
|
82
82
|
this.stopPing();
|
|
83
|
-
socket.close();
|
|
83
|
+
socket.close(1000, 'Client disconnected');
|
|
84
84
|
}
|
|
85
85
|
startPing(socket) {
|
|
86
86
|
if (!isNodejs_1.default) {
|
|
@@ -139,9 +139,16 @@ class WebSocketClient extends RestClient_1.default {
|
|
|
139
139
|
this.emit('connected', { network: this._supernetType });
|
|
140
140
|
}
|
|
141
141
|
handleClose(e) {
|
|
142
|
-
|
|
142
|
+
const socket = e.target;
|
|
143
|
+
socket.onerror = null;
|
|
144
|
+
socket.onmessage = null;
|
|
145
|
+
socket.onopen = null;
|
|
146
|
+
if (socket === this.socket || !this.socket) {
|
|
143
147
|
this._logger.info('WebSocket disconnected, cleanup', e);
|
|
144
|
-
this.
|
|
148
|
+
if (socket === this.socket) {
|
|
149
|
+
this.stopPing();
|
|
150
|
+
this.socket = null;
|
|
151
|
+
}
|
|
145
152
|
this.emit('disconnected', {
|
|
146
153
|
code: e.code,
|
|
147
154
|
reason: e.reason
|
|
@@ -183,6 +190,9 @@ class WebSocketClient extends RestClient_1.default {
|
|
|
183
190
|
}
|
|
184
191
|
send(messageType, data) {
|
|
185
192
|
return __awaiter(this, void 0, void 0, function* () {
|
|
193
|
+
if (!this.isConnected) {
|
|
194
|
+
yield this.connect();
|
|
195
|
+
}
|
|
186
196
|
yield this.waitForConnection();
|
|
187
197
|
this._logger.debug('WebSocket send:', messageType, data);
|
|
188
198
|
this.socket.send(JSON.stringify({ type: messageType, data: (0, base64_1.base64Encode)(JSON.stringify(data)) }));
|