@sogni-ai/sogni-client 4.0.0-alpha.5 → 4.0.0-alpha.51

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.
Files changed (109) hide show
  1. package/CHANGELOG.md +357 -0
  2. package/README.md +295 -58
  3. package/dist/Account/index.d.ts +18 -16
  4. package/dist/Account/index.js +42 -21
  5. package/dist/Account/index.js.map +1 -1
  6. package/dist/ApiClient/WebSocketClient/BrowserWebSocketClient/ChannelCoordinator.d.ts +66 -0
  7. package/dist/ApiClient/WebSocketClient/BrowserWebSocketClient/ChannelCoordinator.js +332 -0
  8. package/dist/ApiClient/WebSocketClient/BrowserWebSocketClient/ChannelCoordinator.js.map +1 -0
  9. package/dist/ApiClient/WebSocketClient/BrowserWebSocketClient/index.d.ts +28 -0
  10. package/dist/ApiClient/WebSocketClient/BrowserWebSocketClient/index.js +203 -0
  11. package/dist/ApiClient/WebSocketClient/BrowserWebSocketClient/index.js.map +1 -0
  12. package/dist/ApiClient/WebSocketClient/events.d.ts +12 -0
  13. package/dist/ApiClient/WebSocketClient/index.d.ts +2 -2
  14. package/dist/ApiClient/WebSocketClient/index.js +13 -3
  15. package/dist/ApiClient/WebSocketClient/index.js.map +1 -1
  16. package/dist/ApiClient/WebSocketClient/types.d.ts +13 -0
  17. package/dist/ApiClient/index.d.ts +4 -4
  18. package/dist/ApiClient/index.js +23 -4
  19. package/dist/ApiClient/index.js.map +1 -1
  20. package/dist/Projects/Job.d.ts +44 -4
  21. package/dist/Projects/Job.js +83 -16
  22. package/dist/Projects/Job.js.map +1 -1
  23. package/dist/Projects/Project.d.ts +18 -0
  24. package/dist/Projects/Project.js +38 -10
  25. package/dist/Projects/Project.js.map +1 -1
  26. package/dist/Projects/createJobRequestMessage.d.ts +2 -1
  27. package/dist/Projects/createJobRequestMessage.js +173 -14
  28. package/dist/Projects/createJobRequestMessage.js.map +1 -1
  29. package/dist/Projects/index.d.ts +114 -11
  30. package/dist/Projects/index.js +504 -47
  31. package/dist/Projects/index.js.map +1 -1
  32. package/dist/Projects/types/ComfySamplerParams.d.ts +0 -0
  33. package/dist/Projects/types/ComfySamplerParams.js +2 -0
  34. package/dist/Projects/types/ComfySamplerParams.js.map +1 -0
  35. package/dist/Projects/types/EstimationResponse.d.ts +2 -0
  36. package/dist/Projects/types/ModelOptions.d.ts +31 -0
  37. package/dist/Projects/types/ModelOptions.js +56 -0
  38. package/dist/Projects/types/ModelOptions.js.map +1 -0
  39. package/dist/Projects/types/ModelTiersRaw.d.ts +67 -0
  40. package/dist/Projects/types/ModelTiersRaw.js +15 -0
  41. package/dist/Projects/types/ModelTiersRaw.js.map +1 -0
  42. package/dist/Projects/types/events.d.ts +5 -1
  43. package/dist/Projects/types/index.d.ts +219 -42
  44. package/dist/Projects/types/index.js +8 -0
  45. package/dist/Projects/types/index.js.map +1 -1
  46. package/dist/Projects/utils/index.d.ts +20 -0
  47. package/dist/Projects/utils/index.js +91 -0
  48. package/dist/Projects/utils/index.js.map +1 -0
  49. package/dist/Projects/utils/samplers.d.ts +6 -0
  50. package/dist/Projects/utils/samplers.js +39 -0
  51. package/dist/Projects/utils/samplers.js.map +1 -0
  52. package/dist/Projects/utils/scheduler.d.ts +6 -0
  53. package/dist/Projects/utils/scheduler.js +30 -0
  54. package/dist/Projects/utils/scheduler.js.map +1 -0
  55. package/dist/index.d.ts +11 -3
  56. package/dist/index.js +8 -3
  57. package/dist/index.js.map +1 -1
  58. package/dist/lib/AuthManager/TokenAuthManager.js +0 -2
  59. package/dist/lib/AuthManager/TokenAuthManager.js.map +1 -1
  60. package/dist/lib/DataEntity.js +4 -2
  61. package/dist/lib/DataEntity.js.map +1 -1
  62. package/dist/lib/RestClient.js +15 -2
  63. package/dist/lib/RestClient.js.map +1 -1
  64. package/dist/lib/{utils.js → utils/index.js} +1 -1
  65. package/dist/lib/utils/index.js.map +1 -0
  66. package/dist/lib/validation.d.ts +31 -2
  67. package/dist/lib/validation.js +80 -13
  68. package/dist/lib/validation.js.map +1 -1
  69. package/package.json +4 -4
  70. package/src/Account/index.ts +39 -20
  71. package/src/ApiClient/WebSocketClient/BrowserWebSocketClient/ChannelCoordinator.ts +426 -0
  72. package/src/ApiClient/WebSocketClient/BrowserWebSocketClient/index.ts +237 -0
  73. package/src/ApiClient/WebSocketClient/events.ts +14 -0
  74. package/src/ApiClient/WebSocketClient/index.ts +15 -5
  75. package/src/ApiClient/WebSocketClient/types.ts +16 -0
  76. package/src/ApiClient/index.ts +30 -8
  77. package/src/Projects/Job.ts +97 -16
  78. package/src/Projects/Project.ts +46 -13
  79. package/src/Projects/createJobRequestMessage.ts +239 -34
  80. package/src/Projects/index.ts +533 -51
  81. package/src/Projects/types/ComfySamplerParams.ts +0 -0
  82. package/src/Projects/types/EstimationResponse.ts +2 -0
  83. package/src/Projects/types/ModelOptions.ts +92 -0
  84. package/src/Projects/types/ModelTiersRaw.ts +86 -0
  85. package/src/Projects/types/events.ts +6 -0
  86. package/src/Projects/types/index.ts +253 -45
  87. package/src/Projects/utils/index.ts +90 -0
  88. package/src/Projects/utils/samplers.ts +36 -0
  89. package/src/Projects/utils/scheduler.ts +27 -0
  90. package/src/index.ts +36 -9
  91. package/src/lib/AuthManager/TokenAuthManager.ts +0 -2
  92. package/src/lib/DataEntity.ts +4 -2
  93. package/src/lib/RestClient.ts +16 -2
  94. package/src/lib/validation.ts +90 -17
  95. package/dist/Projects/types/SamplerParams.d.ts +0 -15
  96. package/dist/Projects/types/SamplerParams.js +0 -21
  97. package/dist/Projects/types/SamplerParams.js.map +0 -1
  98. package/dist/Projects/types/SchedulerParams.d.ts +0 -13
  99. package/dist/Projects/types/SchedulerParams.js +0 -19
  100. package/dist/Projects/types/SchedulerParams.js.map +0 -1
  101. package/dist/Projects/utils.d.ts +0 -2
  102. package/dist/Projects/utils.js +0 -14
  103. package/dist/Projects/utils.js.map +0 -1
  104. package/dist/lib/utils.js.map +0 -1
  105. package/src/Projects/types/SamplerParams.ts +0 -19
  106. package/src/Projects/types/SchedulerParams.ts +0 -17
  107. package/src/Projects/utils.ts +0 -12
  108. /package/dist/lib/{utils.d.ts → utils/index.d.ts} +0 -0
  109. /package/src/lib/{utils.ts → utils/index.ts} +0 -0
@@ -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;
@@ -51,6 +56,7 @@ export type JobResultData = {
51
56
  lastSeed: string;
52
57
  userCanceled: boolean;
53
58
  triggeredNSFWFilter: boolean;
59
+ resultUrl?: string;
54
60
  };
55
61
  export type JobStateData = {
56
62
  type: 'initiatingModel' | 'jobStarted';
@@ -109,6 +115,11 @@ export type SocketEventMap = {
109
115
  * @event WebSocketClient#jobProgress - Job progress update
110
116
  */
111
117
  jobProgress: JobProgressData;
118
+ /**
119
+ * @event WebSocketClient#jobETA - Job ETA update (sent every second during inference by ComfyUI workers)
120
+ * Note: Only available for ComfyUI-based workers during video generation
121
+ */
122
+ jobETA: JobETAData;
112
123
  /**
113
124
  * @event WebSocketClient#jobResult - Job result received
114
125
  */
@@ -135,3 +146,4 @@ export type SocketEventMap = {
135
146
  toastMessage: ToastMessage;
136
147
  artistCancelConfirmation: ArtistCancelConfirmation;
137
148
  };
149
+ 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
- if (e.target === this.socket) {
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.disconnect();
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)) }));
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ApiClient/WebSocketClient/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ApiClient/WebSocketClient/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1,14 @@
1
+ import { MessageType, SocketMessageMap } from './messages';
2
+ import RestClient from '../../lib/RestClient';
3
+ import { SocketEventMap } from './events';
1
4
  export type SupernetType = 'relaxed' | 'fast';
5
+ export interface IWebSocketClient extends RestClient<SocketEventMap> {
6
+ appId: string;
7
+ baseUrl: string;
8
+ isConnected: boolean;
9
+ supernetType: SupernetType;
10
+ connect(): Promise<void>;
11
+ disconnect(): void;
12
+ send<T extends MessageType>(messageType: T, data: SocketMessageMap[T]): Promise<void>;
13
+ switchNetwork(supernetType: SupernetType): Promise<SupernetType>;
14
+ }
@@ -1,10 +1,9 @@
1
1
  import RestClient from '../lib/RestClient';
2
- import WebSocketClient from './WebSocketClient';
3
2
  import TypedEventEmitter from '../lib/TypedEventEmitter';
4
3
  import { ApiClientEvents } from './events';
5
4
  import { ServerConnectData, ServerDisconnectData } from './WebSocketClient/events';
6
5
  import { JSONValue } from '../types/json';
7
- import { SupernetType } from './WebSocketClient/types';
6
+ import { IWebSocketClient, SupernetType } from './WebSocketClient/types';
8
7
  import { Logger } from '../lib/DefaultLogger';
9
8
  import { AuthManager } from '../lib/AuthManager';
10
9
  export interface ApiResponse<D = JSONValue> {
@@ -30,6 +29,7 @@ export interface ApiClientOptions {
30
29
  logger: Logger;
31
30
  authType: 'token' | 'cookies';
32
31
  disableSocket?: boolean;
32
+ multiInstance?: boolean;
33
33
  }
34
34
  declare class ApiClient extends TypedEventEmitter<ApiClientEvents> {
35
35
  readonly appId: string;
@@ -39,10 +39,10 @@ declare class ApiClient extends TypedEventEmitter<ApiClientEvents> {
39
39
  private _auth;
40
40
  private _reconnectAttempts;
41
41
  private _disableSocket;
42
- constructor({ baseUrl, socketUrl, appId, networkType, authType, logger, disableSocket }: ApiClientOptions);
42
+ constructor({ baseUrl, socketUrl, appId, networkType, authType, logger, disableSocket, multiInstance }: ApiClientOptions);
43
43
  get isAuthenticated(): boolean;
44
44
  get auth(): AuthManager;
45
- get socket(): WebSocketClient;
45
+ get socket(): IWebSocketClient;
46
46
  get rest(): RestClient;
47
47
  get socketEnabled(): boolean;
48
48
  handleSocketConnect({ network }: ServerConnectData): void;
@@ -10,6 +10,8 @@ const TypedEventEmitter_1 = __importDefault(require("../lib/TypedEventEmitter"))
10
10
  const ErrorCode_1 = require("./WebSocketClient/ErrorCode");
11
11
  const CookieAuthManager_1 = __importDefault(require("../lib/AuthManager/CookieAuthManager"));
12
12
  const AuthManager_1 = require("../lib/AuthManager");
13
+ const isNodejs_1 = __importDefault(require("../lib/isNodejs"));
14
+ const BrowserWebSocketClient_1 = __importDefault(require("./WebSocketClient/BrowserWebSocketClient"));
13
15
  const WS_RECONNECT_ATTEMPTS = 5;
14
16
  class ApiError extends Error {
15
17
  constructor(status, payload) {
@@ -20,7 +22,7 @@ class ApiError extends Error {
20
22
  }
21
23
  exports.ApiError = ApiError;
22
24
  class ApiClient extends TypedEventEmitter_1.default {
23
- constructor({ baseUrl, socketUrl, appId, networkType, authType, logger, disableSocket = false }) {
25
+ constructor({ baseUrl, socketUrl, appId, networkType, authType, logger, disableSocket = false, multiInstance = false }) {
24
26
  super();
25
27
  this._reconnectAttempts = WS_RECONNECT_ATTEMPTS;
26
28
  this._disableSocket = false;
@@ -29,7 +31,14 @@ class ApiClient extends TypedEventEmitter_1.default {
29
31
  this._auth =
30
32
  authType === 'token' ? new AuthManager_1.TokenAuthManager(baseUrl, logger) : new CookieAuthManager_1.default(logger);
31
33
  this._rest = new RestClient_1.default(baseUrl, this._auth, logger);
32
- this._socket = new WebSocketClient_1.default(socketUrl, this._auth, appId, networkType, logger);
34
+ const supportMultiInstance = !isNodejs_1.default && this._auth instanceof CookieAuthManager_1.default;
35
+ if (supportMultiInstance && multiInstance) {
36
+ // Use coordinated WebSocket client to share single connection between tabs
37
+ this._socket = new BrowserWebSocketClient_1.default(socketUrl, this._auth, appId, networkType, logger);
38
+ }
39
+ else {
40
+ this._socket = new WebSocketClient_1.default(socketUrl, this._auth, appId, networkType, logger);
41
+ }
33
42
  this._disableSocket = disableSocket;
34
43
  this._auth.on('updated', this.handleAuthUpdated.bind(this));
35
44
  this._socket.on('connected', this.handleSocketConnect.bind(this));
@@ -55,14 +64,24 @@ class ApiClient extends TypedEventEmitter_1.default {
55
64
  this.emit('connected', { network });
56
65
  }
57
66
  handleSocketDisconnect(data) {
67
+ // If user is not authenticated, we don't need to reconnect
68
+ if (!this.auth.isAuthenticated || data.code === 1000) {
69
+ this.emit('disconnected', data);
70
+ return;
71
+ }
58
72
  if (!data.code || (0, ErrorCode_1.isNotRecoverable)(data.code)) {
73
+ // If this is browser, another tab is probably claiming the connection, so we don't need to reconnect
74
+ if (this._socket instanceof BrowserWebSocketClient_1.default &&
75
+ data.code === ErrorCode_1.ErrorCode.SWITCH_CONNECTION) {
76
+ this.logger.debug('Switching network connection, not reconnecting');
77
+ return;
78
+ }
59
79
  this.auth.clear();
60
80
  this.emit('disconnected', data);
61
81
  this.logger.error('Not recoverable socket error', data);
62
82
  return;
63
83
  }
64
84
  if (this._reconnectAttempts <= 0) {
65
- this.auth.clear();
66
85
  this.emit('disconnected', data);
67
86
  this._reconnectAttempts = WS_RECONNECT_ATTEMPTS;
68
87
  return;
@@ -76,7 +95,7 @@ class ApiClient extends TypedEventEmitter_1.default {
76
95
  this.socket.disconnect();
77
96
  }
78
97
  }
79
- else if (!this._disableSocket) {
98
+ else if (!this._disableSocket && !this.socket.isConnected) {
80
99
  this.socket.connect();
81
100
  }
82
101
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ApiClient/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ApiClient/index.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,7 @@ export declare const enhancementDefaults: {
16
16
  startingImageStrength: number;
17
17
  steps: number;
18
18
  guidance: number;
19
- numberOfImages: number;
19
+ numberOfMedia: number;
20
20
  numberOfPreviews: number;
21
21
  };
22
22
  export type JobStatus = 'pending' | 'initiating' | 'processing' | 'completed' | 'failed' | 'canceled';
@@ -39,6 +39,17 @@ export interface JobData {
39
39
  positivePrompt?: string;
40
40
  negativePrompt?: string;
41
41
  jobIndex?: number;
42
+ /**
43
+ * Estimated time remaining in seconds (for long-running jobs like video generation).
44
+ * Updated by ComfyUI workers during inference.
45
+ * @deprecated Use `eta` instead.
46
+ */
47
+ etaSeconds?: number;
48
+ /**
49
+ * Estimate completion time of the job (for long-running jobs like video generation).
50
+ * Updated by ComfyUI workers during inference.
51
+ */
52
+ eta?: Date;
42
53
  }
43
54
  export interface JobEventMap extends EntityEvents {
44
55
  progress: number;
@@ -91,7 +102,15 @@ declare class Job extends DataEntity<JobData, JobEventMap> {
91
102
  get resultUrl(): string | null | undefined;
92
103
  get imageUrl(): string | undefined;
93
104
  get error(): ErrorData | undefined;
94
- get hasResultImage(): boolean;
105
+ /**
106
+ * Whether this job has a result media file available for download.
107
+ * Returns true if completed and not NSFW filtered.
108
+ */
109
+ get hasResultMedia(): boolean;
110
+ /**
111
+ * Whether this job produces video output (based on the model used)
112
+ */
113
+ get type(): 'image' | 'video';
95
114
  get enhancedImage(): {
96
115
  status: import("./Project").ProjectStatus;
97
116
  progress: number;
@@ -101,7 +120,8 @@ declare class Job extends DataEntity<JobData, JobEventMap> {
101
120
  } | null;
102
121
  /**
103
122
  * Get the result URL of the job. This method will make a request to the API to get signed URL.
104
- * IMPORTANT: URL expires after 30 minutes, so make sure to download the image as soon as possible.
123
+ * IMPORTANT: URL expires after 30 minutes, so make sure to download the result as soon as possible.
124
+ * For video jobs, this returns a video URL. For image jobs, this returns an image URL.
105
125
  */
106
126
  getResultUrl(): Promise<string>;
107
127
  /**
@@ -114,15 +134,35 @@ declare class Job extends DataEntity<JobData, JobEventMap> {
114
134
  * Name of the worker that is processing this job.
115
135
  */
116
136
  get workerName(): string | undefined;
137
+ /**
138
+ * Estimated time remaining in seconds for long-running jobs (e.g., video generation).
139
+ * Only available for ComfyUI-based workers during inference.
140
+ * Returns undefined if no ETA has been received.
141
+ * @deprecated Use `timeLeft` instead.
142
+ */
143
+ get etaSeconds(): number | undefined;
144
+ /**
145
+ * Estimate completion time of the job.
146
+ * Only available for ComfyUI-based workers during inference.
147
+ * Is useful when data is persisted
148
+ * Returns undefined if no ETA has been received.
149
+ */
150
+ get eta(): Date | undefined;
117
151
  /**
118
152
  * Syncs the job data with the data received from the REST API.
119
153
  * @internal
120
154
  * @param data
121
155
  */
122
156
  _syncWithRestData(data: RawJob): Promise<void>;
157
+ /**
158
+ * Updates the job data with the provided delta.
159
+ * @internal
160
+ * @param delta
161
+ */
162
+ _update(delta: Partial<JobData>): void;
123
163
  private handleUpdated;
124
164
  private handleEnhancementUpdate;
125
- getResultData(): Promise<import("buffer").Blob>;
165
+ getResultData(): Promise<Blob>;
126
166
  /**
127
167
  * Enhance the image using the Flux model. This method will create a new project with the
128
168
  * enhancement parameters and use the result image of the current job as the starting image.