@sogni-ai/sogni-client 5.42.0 → 5.44.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/README.md +29 -1
- package/dist/Account/subscription.types.d.ts +4 -5
- package/dist/ApiClient/WebSocketClient/BrowserWebSocketClient/index.js +1 -6
- package/dist/ApiClient/WebSocketClient/BrowserWebSocketClient/index.js.map +1 -1
- package/dist/ApiClient/WebSocketClient/events.d.ts +8 -0
- package/dist/ApiClient/WebSocketClient/index.d.ts +18 -1
- package/dist/ApiClient/WebSocketClient/index.js +86 -25
- package/dist/ApiClient/WebSocketClient/index.js.map +1 -1
- package/dist/Chat/ChatJobError.d.ts +24 -0
- package/dist/Chat/ChatJobError.js +36 -1
- package/dist/Chat/ChatJobError.js.map +1 -1
- package/dist/Chat/_hostedToolsManifest.generated.js +31 -21
- package/dist/Chat/_hostedToolsManifest.generated.js.map +1 -1
- package/dist/Chat/index.d.ts +27 -0
- package/dist/Chat/index.js +108 -1
- package/dist/Chat/index.js.map +1 -1
- package/dist/Projects/index.d.ts +26 -0
- package/dist/Projects/index.js +128 -8
- package/dist/Projects/index.js.map +1 -1
- package/dist/Projects/types/events.d.ts +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist-esm/ApiClient/WebSocketClient/BrowserWebSocketClient/index.js +1 -6
- package/dist-esm/ApiClient/WebSocketClient/BrowserWebSocketClient/index.js.map +1 -1
- package/dist-esm/ApiClient/WebSocketClient/index.js +86 -25
- package/dist-esm/ApiClient/WebSocketClient/index.js.map +1 -1
- package/dist-esm/Chat/ChatJobError.js +34 -0
- package/dist-esm/Chat/ChatJobError.js.map +1 -1
- package/dist-esm/Chat/_hostedToolsManifest.generated.js +31 -21
- package/dist-esm/Chat/_hostedToolsManifest.generated.js.map +1 -1
- package/dist-esm/Chat/index.js +108 -1
- package/dist-esm/Chat/index.js.map +1 -1
- package/dist-esm/Projects/index.js +128 -8
- package/dist-esm/Projects/index.js.map +1 -1
- package/dist-esm/index.js +2 -2
- package/dist-esm/index.js.map +1 -1
- package/dist-esm/version.js +1 -1
- package/llms-full.txt +12 -6
- package/llms.txt +3 -3
- package/package.json +4 -2
- package/src/Account/subscription.types.ts +4 -5
- package/src/ApiClient/WebSocketClient/BrowserWebSocketClient/index.ts +1 -6
- package/src/ApiClient/WebSocketClient/events.ts +8 -0
- package/src/ApiClient/WebSocketClient/index.ts +88 -23
- package/src/Chat/ChatJobError.ts +36 -0
- package/src/Chat/_hostedToolsManifest.generated.ts +31 -21
- package/src/Chat/index.ts +111 -1
- package/src/Projects/index.ts +141 -12
- package/src/Projects/types/events.ts +1 -1
- package/src/index.ts +7 -1
- package/src/version.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
# [5.44.0](https://github.com/Sogni-AI/sogni-client/compare/v5.43.0...v5.44.0) (2026-09-11)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* **chat:** sync hosted FlashVSR options from protocol alpha.37 ([e94baea](https://github.com/Sogni-AI/sogni-client/commit/e94baea0d0a87559bf13f25373c8892ce050407f))
|
|
7
|
+
|
|
8
|
+
# [5.43.0](https://github.com/Sogni-AI/sogni-client/compare/v5.42.0...v5.43.0) (2026-09-11)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* **socket:** recover requests and chat streams across socket restarts ([248c618](https://github.com/Sogni-AI/sogni-client/commit/248c618c8d85d4ed74a1c82e65b1b98d2778c842))
|
|
14
|
+
|
|
1
15
|
# [5.42.0](https://github.com/Sogni-AI/sogni-client/compare/v5.41.0...v5.42.0) (2026-09-11)
|
|
2
16
|
|
|
3
17
|
|
package/README.md
CHANGED
|
@@ -256,7 +256,7 @@ if (sogni.account.currentAccount.isUnlimited) {
|
|
|
256
256
|
}
|
|
257
257
|
```
|
|
258
258
|
|
|
259
|
-
`currentAccount.isUnlimited` is `true` when the latest entitlement snapshot has `active: true` and `tier` is either `unlimited` or `unlimited_pro`. The server keeps `active` true for entitled states until access actually ends: trials and cancel-at-period-end windows remain entitled, with `currentPeriodEnd` reflecting the paid-through date. Canceling during a free trial
|
|
259
|
+
`currentAccount.isUnlimited` is `true` when the latest entitlement snapshot has `active: true` and `tier` is either `unlimited` or `unlimited_pro`. The server keeps `active` true for entitled states until access actually ends: trials and cancel-at-period-end windows remain entitled, with `currentPeriodEnd` reflecting the paid-through date. Canceling during a free trial stops renewal and keeps trial access until its original `currentPeriodEnd`, with trial limits still in effect: the snapshot stays `trialing` with `cancelAtPeriodEnd: true` and `active: true` until expiry. A `grace_period` snapshot is never entitled and returns `active: false`: it means the provider (Apple billing grace / Google Play grace / Stripe retries) is retrying the renewal payment, and unlimited render access is paused while the retry is in progress — render submissions under the plan return a specific error from the platform explaining that the renewal payment is being retried and that unlimited access resumes once it succeeds. Renders can still be paid with Spark/SOGNI in the meantime, and unlimited access resumes automatically when the renewal succeeds. During grace the snapshot's effective period end indicates the payment-retry window, not access. Period dates are ISO timestamp strings.
|
|
260
260
|
|
|
261
261
|
A canceled-but-still-paid subscription carries `cancelAtPeriodEnd: true` and keeps access until `currentPeriodEnd`. When a downgrade or plan switch is scheduled for the next renewal, the snapshot may also carry `scheduledTier`, `scheduledTerm`, and `scheduledChangeAt` (ISO timestamp) — absent when no change is pending — so UIs can render "Your plan will change to X on date" messaging while the current tier keeps its benefits.
|
|
262
262
|
|
|
@@ -453,6 +453,34 @@ projects) a few times before it is declared lost; it then fails with an error wh
|
|
|
453
453
|
project lookup, so a project that is only slow to be picked up stays active instead. Apps that
|
|
454
454
|
persist project ids themselves can run the same lookup with `sogni.projects.resolveMissing(ids)`.
|
|
455
455
|
|
|
456
|
+
#### Socket server restarts
|
|
457
|
+
|
|
458
|
+
A Sogni platform release restarts the socket server: every connection closes with code `1001`
|
|
459
|
+
for a few seconds. The SDK is built so apps need no special handling for it:
|
|
460
|
+
|
|
461
|
+
- `create()` and chat requests made during the gap wait (up to 30 seconds) for the reconnected,
|
|
462
|
+
authenticated socket instead of failing.
|
|
463
|
+
- A project request that reached the server while it was shutting down is refused by id; the SDK
|
|
464
|
+
sends the same request again after reconnecting, once. Projects created moments before a
|
|
465
|
+
reconnect are re-checked when they become old enough to judge, rather than minutes later.
|
|
466
|
+
- LLM jobs are not carried across a restart. The server refunds them, and a stream that was open
|
|
467
|
+
fails with a `ChatJobError` whose `retryable` is `true` (`errorType` `'server_restarting'` or
|
|
468
|
+
`'transport_lost'`) rather than waiting forever. After a plain network blip the server keeps the
|
|
469
|
+
job for 30 seconds and the stream simply continues. Re-issue retryable failures as new requests:
|
|
470
|
+
|
|
471
|
+
```typescript
|
|
472
|
+
import { isRetryableChatError } from '@sogni-ai/sogni-client';
|
|
473
|
+
|
|
474
|
+
async function completeWithRetry(params) {
|
|
475
|
+
try {
|
|
476
|
+
return await sogni.chat.completions.create(params);
|
|
477
|
+
} catch (error) {
|
|
478
|
+
if (!isRetryableChatError(error)) throw error;
|
|
479
|
+
return sogni.chat.completions.create(params); // waits for the reconnect
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
```
|
|
483
|
+
|
|
456
484
|
To read one of your own projects while it is still queued or rendering, use
|
|
457
485
|
`sogni.projects.getStatus(id)`. It needs an authenticated client and returns normalized statuses
|
|
458
486
|
(`pending`, `queued`, `processing`, `completed`, `failed`, `canceled`) with a `finished` flag.
|
|
@@ -15,11 +15,10 @@
|
|
|
15
15
|
* Spark/SOGNI in the meantime. During grace, `currentPeriodEnd` reflects when
|
|
16
16
|
* the payment-retry window ends — not paid-through access.
|
|
17
17
|
*
|
|
18
|
-
* Canceling during a free trial
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* rather than the status string.
|
|
18
|
+
* Canceling during a free trial stops renewal and keeps trial access until
|
|
19
|
+
* its original `currentPeriodEnd`, with trial limits still in effect. The
|
|
20
|
+
* snapshot stays `trialing` with `cancelAtPeriodEnd: true` until expiry.
|
|
21
|
+
* Always rely on the server's `active` value for the entitlement decision.
|
|
23
22
|
*/
|
|
24
23
|
export type SubscriptionStatus = 'none' | 'trialing' | 'active' | 'grace_period' | 'past_due' | 'paused' | 'cancel_at_period_end' | 'canceled' | 'expired' | 'refunded';
|
|
25
24
|
/**
|
|
@@ -146,9 +146,7 @@ class BrowserWebSocketClient extends RestClient_js_1.default {
|
|
|
146
146
|
return __awaiter(this, void 0, void 0, function* () {
|
|
147
147
|
yield this.coordinator.isReady();
|
|
148
148
|
if (this.coordinator.isPrimary) {
|
|
149
|
-
|
|
150
|
-
yield this.socketClient.connect();
|
|
151
|
-
}
|
|
149
|
+
// send() connects when needed and waits out a reconnect in progress.
|
|
152
150
|
return this.socketClient.send(messageType, data);
|
|
153
151
|
}
|
|
154
152
|
return this.coordinator.sendMessage({
|
|
@@ -162,9 +160,6 @@ class BrowserWebSocketClient extends RestClient_js_1.default {
|
|
|
162
160
|
this._logger.debug('Received control message', message);
|
|
163
161
|
switch (message.type) {
|
|
164
162
|
case 'socket-send': {
|
|
165
|
-
if (!this.socketClient.isConnected) {
|
|
166
|
-
yield this.socketClient.connect();
|
|
167
|
-
}
|
|
168
163
|
return this.socketClient.send(message.payload.type, message.payload.data);
|
|
169
164
|
}
|
|
170
165
|
case 'connect': {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ApiClient/WebSocketClient/BrowserWebSocketClient/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ApiClient/WebSocketClient/BrowserWebSocketClient/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -125,6 +125,14 @@ export interface AuthenticatedData {
|
|
|
125
125
|
* socket. Held server-side for one hour; delivered here once.
|
|
126
126
|
*/
|
|
127
127
|
unclaimedCompletedProjects: RecoveredProject[];
|
|
128
|
+
/**
|
|
129
|
+
* LLM job ids this app-id still has in flight after the handshake: jobs the
|
|
130
|
+
* server rebound to the new socket inside its reconnect grace window. A
|
|
131
|
+
* stream that was open across the gap and is missing here no longer exists
|
|
132
|
+
* on the server (for example the socket restarted). Carried by newer socket
|
|
133
|
+
* builds only; `undefined` means the server did not say.
|
|
134
|
+
*/
|
|
135
|
+
activeLLMJobIDs?: string[];
|
|
128
136
|
isMainnet: boolean;
|
|
129
137
|
accountWasMigrated: boolean;
|
|
130
138
|
/**
|
|
@@ -15,6 +15,16 @@ declare class WebSocketClient extends RestClient<SocketEventMap> implements IWeb
|
|
|
15
15
|
private socket;
|
|
16
16
|
private _supernetType;
|
|
17
17
|
private _pingInterval;
|
|
18
|
+
/** The socket the server has sent `authenticated` on, i.e. one that accepts work. */
|
|
19
|
+
private _authenticatedSocket;
|
|
20
|
+
private _openedAt;
|
|
21
|
+
/**
|
|
22
|
+
* Set when the last close was recoverable while the session is
|
|
23
|
+
* authenticated: the ApiClient owns the reconnect, so `send` waits for it
|
|
24
|
+
* instead of racing it with a connection of its own (which would also reset
|
|
25
|
+
* the reconnect backoff on every failed attempt).
|
|
26
|
+
*/
|
|
27
|
+
private _reconnectExpected;
|
|
18
28
|
constructor(baseUrl: string, auth: AuthManager, appId: string, supernetType: SupernetType, logger: Logger, appSource?: string, socketEventSubscriptions?: SocketEventSubscriptions, connectionAttribution?: NormalizedConnectionAttribution);
|
|
19
29
|
get supernetType(): SupernetType;
|
|
20
30
|
get isConnected(): boolean;
|
|
@@ -24,8 +34,15 @@ declare class WebSocketClient extends RestClient<SocketEventMap> implements IWeb
|
|
|
24
34
|
private stopPing;
|
|
25
35
|
switchNetwork(supernetType: SupernetType): Promise<SupernetType>;
|
|
26
36
|
setSocketEventSubscriptions(update: SocketEventSubscriptionInput): Promise<void>;
|
|
37
|
+
/** The current socket is open and the server has accepted it for work. */
|
|
38
|
+
private isReadyForWork;
|
|
27
39
|
/**
|
|
28
|
-
*
|
|
40
|
+
* Wait until the socket can carry work. An open socket is not enough: the
|
|
41
|
+
* server drops frames that arrive before its `authenticated` handshake. A
|
|
42
|
+
* recoverable close (a socket deploy, a network blip) keeps the wait alive
|
|
43
|
+
* while the ApiClient reconnects, so work submitted during the gap goes out
|
|
44
|
+
* on the next connection instead of failing. A terminal close, a signed-out
|
|
45
|
+
* session, or the deadline ends it.
|
|
29
46
|
* @private
|
|
30
47
|
*/
|
|
31
48
|
private waitForConnection;
|
|
@@ -16,11 +16,25 @@ const RestClient_js_1 = __importDefault(require("../../lib/RestClient.js"));
|
|
|
16
16
|
const isomorphic_ws_1 = __importDefault(require("isomorphic-ws"));
|
|
17
17
|
const base64_js_1 = require("../../lib/base64.js");
|
|
18
18
|
const isNodejs_js_1 = __importDefault(require("../../lib/isNodejs.js"));
|
|
19
|
+
const ErrorCode_js_1 = require("./ErrorCode.js");
|
|
19
20
|
const version_js_1 = require("../../version.js");
|
|
20
21
|
const eventSubscriptions_js_1 = require("./eventSubscriptions.js");
|
|
21
22
|
const attribution_js_1 = require("../../lib/attribution.js");
|
|
22
23
|
const PROTOCOL_VERSION = '3.0.0';
|
|
23
24
|
const PING_INTERVAL = 15000;
|
|
25
|
+
/**
|
|
26
|
+
* How long `send` waits for a socket that can carry work. Covers a socket
|
|
27
|
+
* deploy (a ~6 s gap plus reconnect backoff) without hanging the caller on a
|
|
28
|
+
* transport that is not coming back.
|
|
29
|
+
*/
|
|
30
|
+
const SEND_READY_TIMEOUT_MS = 30000;
|
|
31
|
+
/**
|
|
32
|
+
* The server drops frames that arrive before its `authenticated` handshake.
|
|
33
|
+
* Every current server sends that frame within milliseconds; if an open socket
|
|
34
|
+
* stays silent this long, send anyway rather than stall on an older server.
|
|
35
|
+
*/
|
|
36
|
+
const AUTHENTICATED_FALLBACK_MS = 10000;
|
|
37
|
+
const READY_POLL_MS = 100;
|
|
24
38
|
class WebSocketClient extends RestClient_js_1.default {
|
|
25
39
|
constructor(baseUrl, auth, appId, supernetType, logger, appSource, socketEventSubscriptions, connectionAttribution) {
|
|
26
40
|
const _baseUrl = new URL(baseUrl);
|
|
@@ -39,6 +53,16 @@ class WebSocketClient extends RestClient_js_1.default {
|
|
|
39
53
|
super(_baseUrl.toString(), auth, logger);
|
|
40
54
|
this.socket = null;
|
|
41
55
|
this._pingInterval = null;
|
|
56
|
+
/** The socket the server has sent `authenticated` on, i.e. one that accepts work. */
|
|
57
|
+
this._authenticatedSocket = null;
|
|
58
|
+
this._openedAt = 0;
|
|
59
|
+
/**
|
|
60
|
+
* Set when the last close was recoverable while the session is
|
|
61
|
+
* authenticated: the ApiClient owns the reconnect, so `send` waits for it
|
|
62
|
+
* instead of racing it with a connection of its own (which would also reset
|
|
63
|
+
* the reconnect backoff on every failed attempt).
|
|
64
|
+
*/
|
|
65
|
+
this._reconnectExpected = false;
|
|
42
66
|
this.appId = appId;
|
|
43
67
|
this.appSource = (appSource === null || appSource === void 0 ? void 0 : appSource.trim()) || undefined;
|
|
44
68
|
this.connectionAttribution = (0, attribution_js_1.normalizeConnectionAttribution)(connectionAttribution);
|
|
@@ -64,6 +88,8 @@ class WebSocketClient extends RestClient_js_1.default {
|
|
|
64
88
|
if (this.socket) {
|
|
65
89
|
this.disconnect();
|
|
66
90
|
}
|
|
91
|
+
this._reconnectExpected = false;
|
|
92
|
+
this._authenticatedSocket = null;
|
|
67
93
|
const userAgent = `Sogni/${PROTOCOL_VERSION} (sogni-client) ${version_js_1.LIB_VERSION}`;
|
|
68
94
|
const url = new URL(this.baseUrl);
|
|
69
95
|
const isNotSecure = url.protocol === 'http:' || url.protocol === 'ws:';
|
|
@@ -140,37 +166,65 @@ class WebSocketClient extends RestClient_js_1.default {
|
|
|
140
166
|
yield this.send('setSocketEventSubscriptions', normalizedUpdate);
|
|
141
167
|
});
|
|
142
168
|
}
|
|
169
|
+
/** The current socket is open and the server has accepted it for work. */
|
|
170
|
+
isReadyForWork() {
|
|
171
|
+
return (!!this.socket &&
|
|
172
|
+
this.socket.readyState === isomorphic_ws_1.default.OPEN &&
|
|
173
|
+
this._authenticatedSocket === this.socket);
|
|
174
|
+
}
|
|
143
175
|
/**
|
|
144
|
-
*
|
|
176
|
+
* Wait until the socket can carry work. An open socket is not enough: the
|
|
177
|
+
* server drops frames that arrive before its `authenticated` handshake. A
|
|
178
|
+
* recoverable close (a socket deploy, a network blip) keeps the wait alive
|
|
179
|
+
* while the ApiClient reconnects, so work submitted during the gap goes out
|
|
180
|
+
* on the next connection instead of failing. A terminal close, a signed-out
|
|
181
|
+
* session, or the deadline ends it.
|
|
145
182
|
* @private
|
|
146
183
|
*/
|
|
147
|
-
waitForConnection() {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
184
|
+
waitForConnection(timeoutMs = SEND_READY_TIMEOUT_MS) {
|
|
185
|
+
if (this.isReadyForWork())
|
|
186
|
+
return Promise.resolve();
|
|
187
|
+
if (!this.socket && !this._reconnectExpected) {
|
|
188
|
+
return Promise.reject(new Error('WebSocket not connected'));
|
|
189
|
+
}
|
|
190
|
+
return new Promise((resolve, reject) => {
|
|
191
|
+
let settled = false;
|
|
192
|
+
const finish = (error) => {
|
|
193
|
+
if (settled)
|
|
194
|
+
return;
|
|
195
|
+
settled = true;
|
|
196
|
+
clearTimeout(deadline);
|
|
197
|
+
clearInterval(poll);
|
|
198
|
+
offAuthenticated();
|
|
199
|
+
offDisconnected();
|
|
200
|
+
if (error)
|
|
201
|
+
reject(error);
|
|
202
|
+
else
|
|
203
|
+
resolve();
|
|
204
|
+
};
|
|
205
|
+
const deadline = setTimeout(() => finish(new Error('WebSocket connection timeout')), timeoutMs);
|
|
206
|
+
const poll = setInterval(() => {
|
|
207
|
+
var _a;
|
|
208
|
+
if (this.isReadyForWork()) {
|
|
209
|
+
finish();
|
|
164
210
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
211
|
+
else if (((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === isomorphic_ws_1.default.OPEN &&
|
|
212
|
+
Date.now() - this._openedAt >= AUTHENTICATED_FALLBACK_MS) {
|
|
213
|
+
finish();
|
|
214
|
+
}
|
|
215
|
+
}, READY_POLL_MS);
|
|
216
|
+
const offAuthenticated = this.on('authenticated', () => {
|
|
217
|
+
if (this.isReadyForWork())
|
|
218
|
+
finish();
|
|
219
|
+
});
|
|
220
|
+
const offDisconnected = this.on('disconnected', () => {
|
|
221
|
+
if (!this._reconnectExpected)
|
|
222
|
+
finish(new Error('WebSocket connection failed'));
|
|
223
|
+
});
|
|
171
224
|
});
|
|
172
225
|
}
|
|
173
226
|
handleOpen() {
|
|
227
|
+
this._openedAt = Date.now();
|
|
174
228
|
this.emit('connected', { network: this._supernetType });
|
|
175
229
|
}
|
|
176
230
|
handleClose(e) {
|
|
@@ -184,6 +238,9 @@ class WebSocketClient extends RestClient_js_1.default {
|
|
|
184
238
|
this.stopPing();
|
|
185
239
|
this.socket = null;
|
|
186
240
|
}
|
|
241
|
+
this._authenticatedSocket = null;
|
|
242
|
+
this._reconnectExpected =
|
|
243
|
+
this.auth.isAuthenticated && !!e.code && e.code !== 1000 && !(0, ErrorCode_js_1.isNotRecoverable)(e.code);
|
|
187
244
|
this.emit('disconnected', {
|
|
188
245
|
code: e.code,
|
|
189
246
|
reason: e.reason
|
|
@@ -194,6 +251,7 @@ class WebSocketClient extends RestClient_js_1.default {
|
|
|
194
251
|
this._logger.error('WebSocket error:', e);
|
|
195
252
|
}
|
|
196
253
|
handleMessage(e) {
|
|
254
|
+
const source = e.target;
|
|
197
255
|
let dataPromise;
|
|
198
256
|
// In Node.js, e.data is a Buffer, while in browser it's a Blob
|
|
199
257
|
if (isNodejs_js_1.default) {
|
|
@@ -217,6 +275,9 @@ class WebSocketClient extends RestClient_js_1.default {
|
|
|
217
275
|
}
|
|
218
276
|
});
|
|
219
277
|
this._logger.debug('WebSocket:', data.type, payload);
|
|
278
|
+
if (data.type === 'authenticated' && source === this.socket) {
|
|
279
|
+
this._authenticatedSocket = this.socket;
|
|
280
|
+
}
|
|
220
281
|
this.emit(data.type, payload);
|
|
221
282
|
})
|
|
222
283
|
.catch((err) => {
|
|
@@ -225,7 +286,7 @@ class WebSocketClient extends RestClient_js_1.default {
|
|
|
225
286
|
}
|
|
226
287
|
send(messageType, data) {
|
|
227
288
|
return __awaiter(this, void 0, void 0, function* () {
|
|
228
|
-
if (!this.isConnected) {
|
|
289
|
+
if (!this.isConnected && !this._reconnectExpected) {
|
|
229
290
|
yield this.connect();
|
|
230
291
|
}
|
|
231
292
|
yield this.waitForConnection();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ApiClient/WebSocketClient/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAEA,4EAAiD;AAEjD,kEAAgF;AAChF,mDAAiE;AACjE,wEAA6C;AAC7C,iDAA+C;AAG/C,mEAGiC;AAKjC,6DAIkC;AAElC,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAEjC,MAAM,aAAa,GAAG,KAAK,CAAC;AAE5B,MAAM,eAAgB,SAAQ,uBAA0B;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ApiClient/WebSocketClient/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
import { SubscriptionErrorCode } from '../types/ErrorData.js';
|
|
2
2
|
import { SubscriptionPlanId } from '../Account/subscription.types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Error types for an LLM request that did not complete because the connection
|
|
5
|
+
* to Sogni was interrupted, not because of the request itself:
|
|
6
|
+
*
|
|
7
|
+
* - `server_restarting`: the socket server restarted (a platform release) and
|
|
8
|
+
* refunded the request, or refused it while shutting down.
|
|
9
|
+
* - `transport_lost`: the request could not be sent, or it was in flight when
|
|
10
|
+
* the socket dropped and the server no longer had it after reconnecting.
|
|
11
|
+
*
|
|
12
|
+
* Send the request again as a new request. The SDK waits for the reconnect
|
|
13
|
+
* before sending, so an immediate retry is fine.
|
|
14
|
+
*/
|
|
15
|
+
export declare const RETRYABLE_CHAT_ERROR_TYPES: readonly string[];
|
|
3
16
|
/** Structured fields preserved from a failed chat/LLM job. */
|
|
4
17
|
export interface ChatJobErrorFields {
|
|
5
18
|
/**
|
|
@@ -84,12 +97,23 @@ export declare class ChatJobError extends Error {
|
|
|
84
97
|
/** Standalone user-facing English describing the limitation. */
|
|
85
98
|
readonly limitation?: string;
|
|
86
99
|
constructor(message: string, fields?: ChatJobErrorFields);
|
|
100
|
+
/**
|
|
101
|
+
* `true` when the request was interrupted by the connection rather than
|
|
102
|
+
* rejected, so sending it again is expected to work. See
|
|
103
|
+
* {@link RETRYABLE_CHAT_ERROR_TYPES}.
|
|
104
|
+
*/
|
|
105
|
+
get retryable(): boolean;
|
|
87
106
|
/**
|
|
88
107
|
* The numeric subscription denial code when this failure is one of the
|
|
89
108
|
* `SUBSCRIPTION_ERROR_CODES` (4078 / 4079 / 4080); `undefined` otherwise.
|
|
90
109
|
*/
|
|
91
110
|
get subscriptionErrorCode(): SubscriptionErrorCode | undefined;
|
|
92
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* Whether `error` is a chat/LLM failure caused by the connection (see
|
|
114
|
+
* {@link RETRYABLE_CHAT_ERROR_TYPES}) that is safe to send again.
|
|
115
|
+
*/
|
|
116
|
+
export declare function isRetryableChatError(error: unknown): boolean;
|
|
93
117
|
/**
|
|
94
118
|
* Extract structured chat-job error fields from a REST chat error body.
|
|
95
119
|
*
|
|
@@ -1,8 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ChatJobError = void 0;
|
|
3
|
+
exports.ChatJobError = exports.RETRYABLE_CHAT_ERROR_TYPES = void 0;
|
|
4
|
+
exports.isRetryableChatError = isRetryableChatError;
|
|
4
5
|
exports.extractChatJobErrorFields = extractChatJobErrorFields;
|
|
5
6
|
const ErrorData_js_1 = require("../types/ErrorData.js");
|
|
7
|
+
/**
|
|
8
|
+
* Error types for an LLM request that did not complete because the connection
|
|
9
|
+
* to Sogni was interrupted, not because of the request itself:
|
|
10
|
+
*
|
|
11
|
+
* - `server_restarting`: the socket server restarted (a platform release) and
|
|
12
|
+
* refunded the request, or refused it while shutting down.
|
|
13
|
+
* - `transport_lost`: the request could not be sent, or it was in flight when
|
|
14
|
+
* the socket dropped and the server no longer had it after reconnecting.
|
|
15
|
+
*
|
|
16
|
+
* Send the request again as a new request. The SDK waits for the reconnect
|
|
17
|
+
* before sending, so an immediate retry is fine.
|
|
18
|
+
*/
|
|
19
|
+
exports.RETRYABLE_CHAT_ERROR_TYPES = Object.freeze([
|
|
20
|
+
'server_restarting',
|
|
21
|
+
'transport_lost'
|
|
22
|
+
]);
|
|
6
23
|
/**
|
|
7
24
|
* Error thrown/streamed when a chat/LLM job fails, preserving the server's
|
|
8
25
|
* error contract so apps can branch on machine-readable fields instead of
|
|
@@ -41,6 +58,14 @@ class ChatJobError extends Error {
|
|
|
41
58
|
this.feature = fields.feature;
|
|
42
59
|
this.limitation = fields.limitation;
|
|
43
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* `true` when the request was interrupted by the connection rather than
|
|
63
|
+
* rejected, so sending it again is expected to work. See
|
|
64
|
+
* {@link RETRYABLE_CHAT_ERROR_TYPES}.
|
|
65
|
+
*/
|
|
66
|
+
get retryable() {
|
|
67
|
+
return !!this.errorType && exports.RETRYABLE_CHAT_ERROR_TYPES.includes(this.errorType);
|
|
68
|
+
}
|
|
44
69
|
/**
|
|
45
70
|
* The numeric subscription denial code when this failure is one of the
|
|
46
71
|
* `SUBSCRIPTION_ERROR_CODES` (4078 / 4079 / 4080); `undefined` otherwise.
|
|
@@ -54,6 +79,16 @@ class ChatJobError extends Error {
|
|
|
54
79
|
}
|
|
55
80
|
}
|
|
56
81
|
exports.ChatJobError = ChatJobError;
|
|
82
|
+
/**
|
|
83
|
+
* Whether `error` is a chat/LLM failure caused by the connection (see
|
|
84
|
+
* {@link RETRYABLE_CHAT_ERROR_TYPES}) that is safe to send again.
|
|
85
|
+
*/
|
|
86
|
+
function isRetryableChatError(error) {
|
|
87
|
+
if (error instanceof ChatJobError)
|
|
88
|
+
return error.retryable;
|
|
89
|
+
const errorType = error === null || error === void 0 ? void 0 : error.errorType;
|
|
90
|
+
return typeof errorType === 'string' && exports.RETRYABLE_CHAT_ERROR_TYPES.includes(errorType);
|
|
91
|
+
}
|
|
57
92
|
/**
|
|
58
93
|
* Extract structured chat-job error fields from a REST chat error body.
|
|
59
94
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatJobError.js","sourceRoot":"","sources":["../../src/Chat/ChatJobError.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"ChatJobError.js","sourceRoot":"","sources":["../../src/Chat/ChatJobError.ts"],"names":[],"mappings":"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"}
|