@dvina/sdk 4.0.221 → 4.0.230

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 (31) hide show
  1. package/dist/adapters/angular/index.cjs +4 -4
  2. package/dist/adapters/angular/index.d.cts +2 -2
  3. package/dist/adapters/angular/index.d.ts +2 -2
  4. package/dist/adapters/angular/index.js +2 -2
  5. package/dist/billing/index.cjs +5 -5
  6. package/dist/billing/index.js +1 -1
  7. package/dist/{chunk-I7HS5CQ7.js → chunk-4IJ3Z2SR.js} +164 -12
  8. package/dist/chunk-4IJ3Z2SR.js.map +1 -0
  9. package/dist/{chunk-VDPZQ5F3.cjs → chunk-4Y42KQCH.cjs} +22 -68
  10. package/dist/chunk-4Y42KQCH.cjs.map +1 -0
  11. package/dist/{chunk-LNQAR2M2.cjs → chunk-AU5C7Y4P.cjs} +186 -34
  12. package/dist/chunk-AU5C7Y4P.cjs.map +1 -0
  13. package/dist/{chunk-ZGGY4WK7.js → chunk-RVXRT5EI.js} +22 -68
  14. package/dist/chunk-RVXRT5EI.js.map +1 -0
  15. package/dist/{client-BAich_Hx.d.cts → client-DI2pYavC.d.cts} +1 -1
  16. package/dist/{client-DW2pRGde.d.ts → client-DRZeTTgS.d.ts} +1 -1
  17. package/dist/{index-DF59UYzN.d.cts → index-Bwe8KY0Z.d.cts} +1 -1
  18. package/dist/{index-Bld5-Yr1.d.ts → index-DqQrAjp3.d.ts} +1 -1
  19. package/dist/index.cjs +390 -390
  20. package/dist/index.d.cts +10 -10
  21. package/dist/index.d.ts +10 -10
  22. package/dist/index.js +2 -2
  23. package/dist/pagination/index.d.cts +2 -2
  24. package/dist/pagination/index.d.ts +2 -2
  25. package/dist/{sync-engine-CZ0U9XBy.d.ts → sync-engine-CYIG5amb.d.ts} +5 -2
  26. package/dist/{sync-engine-DXESBFX0.d.cts → sync-engine-DPVgCDPC.d.cts} +5 -2
  27. package/package.json +1 -1
  28. package/dist/chunk-I7HS5CQ7.js.map +0 -1
  29. package/dist/chunk-LNQAR2M2.cjs.map +0 -1
  30. package/dist/chunk-VDPZQ5F3.cjs.map +0 -1
  31. package/dist/chunk-ZGGY4WK7.js.map +0 -1
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunkLNQAR2M2_cjs = require('../../chunk-LNQAR2M2.cjs');
3
+ var chunkAU5C7Y4P_cjs = require('../../chunk-AU5C7Y4P.cjs');
4
4
  require('../../chunk-342BFYZZ.cjs');
5
5
  require('../../chunk-UELAE75E.cjs');
6
- require('../../chunk-VDPZQ5F3.cjs');
6
+ require('../../chunk-4Y42KQCH.cjs');
7
7
  require('../../chunk-KV5SP7RP.cjs');
8
8
  require('../../chunk-5G4TDB2H.cjs');
9
9
  require('../../chunk-DZUJEN5N.cjs');
@@ -147,10 +147,10 @@ function hasDispose(value) {
147
147
  function provideDvina(optionsOrFactory) {
148
148
  return core.makeEnvironmentProviders([
149
149
  {
150
- provide: chunkLNQAR2M2_cjs.DvinaSdk,
150
+ provide: chunkAU5C7Y4P_cjs.DvinaSdk,
151
151
  useFactory: () => {
152
152
  const options = typeof optionsOrFactory === "function" ? optionsOrFactory() : optionsOrFactory;
153
- return new chunkLNQAR2M2_cjs.DvinaSdk(options);
153
+ return new chunkAU5C7Y4P_cjs.DvinaSdk(options);
154
154
  }
155
155
  }
156
156
  ]);
@@ -1,8 +1,8 @@
1
1
  import { Signal, DestroyRef, EnvironmentProviders } from '@angular/core';
2
- import { D as DvinaSdkOptions } from '../../client-BAich_Hx.cjs';
2
+ import { D as DvinaSdkOptions } from '../../client-DI2pYavC.cjs';
3
3
  import { D as DvinaQueryRef } from '../../types-2RotD0Ab.cjs';
4
4
  import '../../error-CsVoUTY8.cjs';
5
- import '../../sync-engine-DXESBFX0.cjs';
5
+ import '../../sync-engine-DPVgCDPC.cjs';
6
6
  import 'graphql';
7
7
  import 'dexie';
8
8
  import '../../client-Bb2gD6Iz.cjs';
@@ -1,8 +1,8 @@
1
1
  import { Signal, DestroyRef, EnvironmentProviders } from '@angular/core';
2
- import { D as DvinaSdkOptions } from '../../client-DW2pRGde.js';
2
+ import { D as DvinaSdkOptions } from '../../client-DRZeTTgS.js';
3
3
  import { D as DvinaQueryRef } from '../../types-2RotD0Ab.js';
4
4
  import '../../error-CsVoUTY8.js';
5
- import '../../sync-engine-CZ0U9XBy.js';
5
+ import '../../sync-engine-CYIG5amb.js';
6
6
  import 'graphql';
7
7
  import 'dexie';
8
8
  import '../../client-Bb2gD6Iz.js';
@@ -1,7 +1,7 @@
1
- import { DvinaSdk } from '../../chunk-I7HS5CQ7.js';
1
+ import { DvinaSdk } from '../../chunk-4IJ3Z2SR.js';
2
2
  import '../../chunk-KEM6SUTS.js';
3
3
  import '../../chunk-PDM2KR7T.js';
4
- import '../../chunk-ZGGY4WK7.js';
4
+ import '../../chunk-RVXRT5EI.js';
5
5
  import '../../chunk-7XBJ77RJ.js';
6
6
  import '../../chunk-QELS6XG7.js';
7
7
  import '../../chunk-5WRI5ZAA.js';
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkVDPZQ5F3_cjs = require('../chunk-VDPZQ5F3.cjs');
3
+ var chunk4Y42KQCH_cjs = require('../chunk-4Y42KQCH.cjs');
4
4
  require('../chunk-KV5SP7RP.cjs');
5
5
  require('../chunk-DZUJEN5N.cjs');
6
6
 
@@ -8,19 +8,19 @@ require('../chunk-DZUJEN5N.cjs');
8
8
 
9
9
  Object.defineProperty(exports, "BillingClient", {
10
10
  enumerable: true,
11
- get: function () { return chunkVDPZQ5F3_cjs.BillingClient; }
11
+ get: function () { return chunk4Y42KQCH_cjs.BillingClient; }
12
12
  });
13
13
  Object.defineProperty(exports, "EntitlementTier", {
14
14
  enumerable: true,
15
- get: function () { return chunkVDPZQ5F3_cjs.EntitlementTier; }
15
+ get: function () { return chunk4Y42KQCH_cjs.EntitlementTier; }
16
16
  });
17
17
  Object.defineProperty(exports, "SubscriptionCycle", {
18
18
  enumerable: true,
19
- get: function () { return chunkVDPZQ5F3_cjs.SubscriptionCycle; }
19
+ get: function () { return chunk4Y42KQCH_cjs.SubscriptionCycle; }
20
20
  });
21
21
  Object.defineProperty(exports, "SubscriptionProvider", {
22
22
  enumerable: true,
23
- get: function () { return chunkVDPZQ5F3_cjs.SubscriptionProvider; }
23
+ get: function () { return chunk4Y42KQCH_cjs.SubscriptionProvider; }
24
24
  });
25
25
  //# sourceMappingURL=index.cjs.map
26
26
  //# sourceMappingURL=index.cjs.map
@@ -1,4 +1,4 @@
1
- export { BillingClient, EntitlementTier, SubscriptionCycle, SubscriptionProvider } from '../chunk-ZGGY4WK7.js';
1
+ export { BillingClient, EntitlementTier, SubscriptionCycle, SubscriptionProvider } from '../chunk-RVXRT5EI.js';
2
2
  import '../chunk-7XBJ77RJ.js';
3
3
  import '../chunk-5WRI5ZAA.js';
4
4
  //# sourceMappingURL=index.js.map
@@ -1,6 +1,6 @@
1
1
  import { Request, Connection, PageInfo, defaultConnection } from './chunk-KEM6SUTS.js';
2
2
  import { createInferenceClientInternal } from './chunk-PDM2KR7T.js';
3
- import { createHttpTransport, BillingClient, refreshTokenSingleFlight, print, Kind } from './chunk-ZGGY4WK7.js';
3
+ import { createHttpTransport, BillingClient, refreshTokenSingleFlight, print, Kind } from './chunk-RVXRT5EI.js';
4
4
  import { GRAPHQL_ERROR_CODES, DvinaAuthenticationError, DvinaNetworkError, DvinaGraphQLError, DvinaError, createGraphQLError } from './chunk-7XBJ77RJ.js';
5
5
  import { ChatConnectionFragmentDoc, ChatFragmentDoc, FileFragmentDoc, ChatMessageFragmentDoc, AgentConnectionFragmentDoc, ArtifactConnectionFragmentDoc, DesktopDeviceFragmentDoc, InsightFragmentDoc, ChatMessageConnectionFragmentDoc, ProjectFragmentDoc, ContentBlockFragmentDoc, FeedbackFragmentDoc, DatabaseEngineFragmentDoc, TableConnectionFragmentDoc, ProjectDesktopBindingFragmentDoc, DocumentContentFragmentDoc, DocumentFormatFragmentDoc, FeedSendMessageActionFragmentDoc, FeedArtifactDataFragmentDoc, ReportMemberFragmentDoc, ReportConnectionFragmentDoc, IntegrationProviderFragmentDoc, FeedItemGeneratedFragmentDoc, CandidateFragmentDoc, IntegrationFragmentDoc, InsightConnectionFragmentDoc, DatabaseFragmentDoc, DocumentFragmentDoc, RelationFragmentDoc, AbortChatDocument, AddInsightToReportDocument, CancelOauthFlowDocument, CancelWorkspaceDeletionDocument, ConnectIntegrationDocument, ConsumePulseEventsDocument, ContinueImportedChatDocument, ContinueInterpretationDocument, CreateAgentDocument, CreateChatDocument, CreateDatabaseDocument, CreateDocumentDocument, CreateFeedbackDocument, CreateFolderDocument, CreateInsightDocument, CreateIntegrationDocument, CreateProjectDocument, CreateReportDocument, CreateTableDocument, CreateUserSkillFileDocument, CreateUserSkillFolderDocument, DeleteAgentDocument, DeleteAiProviderSettingDocument, DeleteArtifactDocument, DeleteChatDocument, DeleteDatabaseDocument, DeleteDocumentDocument, DeleteFolderDocument, DeleteInsightDocument, DeleteInsightsDocument, DeleteIntegrationDocument, DeleteProjectDocument, DeleteReportDocument, DeleteTableDocument, DeleteUserSkillFileDocument, DeleteUserSkillFolderDocument, DisconnectIntegrationDocument, DismissPulseEventDocument, ExecuteChatImportDocument, GenerateUploadUriDocument, MigrateLegacyCodeChatsDocument, PreviewChatImportDocument, ReanalyzeDocumentDocument, RefineAgentInstructionDocument, RefineSkillInstructionDocument, RefreshDatabaseSchemaDocument, RefreshInsightDocument, RegisterDesktopDeviceDocument, ReinterpretSourceDocument, ReinterpretSourcesOfuserDocument, RelocateInsightDocument, RemoveInsightFromReportDocument, ResetWorkspaceDocument, ResolvePulseEventDocument, ScheduleWorkspaceDeletionDocument, SendMessageDocument, SetDatabasePrimaryKeyDocument, SyncProjectDesktopBindingDocument, UpdateAgentDocument, UpdateArtifactNameDocument, UpdateChatDocument, UpdateDatabaseDocument, UpdateDocumentDocument, UpdateFolderDocument, UpdateInsightDocument, UpdateInsightInReportDocument, UpdateInsightThumbnailDocument, UpdateInterpDocument, UpdateLiveContextDocument, UpdateProjectDocument, UpdatePulseTriggerDocument, UpdateReportDocument, UpdateTableDocument, UpdateUserSkillFileDocument, UpdateUserSkillFolderDocument, UpsertAiProviderSettingDocument, AgentDocument, Agent_ChatsDocument, AgentsDocument, AiProviderSettingDocument, ArtifactDocument, Artifact_ChatDocument, Artifact_Chat_DesktopDeviceDocument, Artifact_Chat_InsightDocument, Artifact_Chat_ProjectDocument, Artifact_FileDocument, Artifact_MessageDocument, Artifact_Message_ChatDocument, Artifact_Message_ContentsDocument, Artifact_Message_FeedbackDocument, ArtifactsDocument, ChatDocument, Chat_AgentsDocument, Chat_ArtifactsDocument, Chat_DesktopDeviceDocument, Chat_DesktopDevice_DesktopBindingsDocument, Chat_InsightDocument, Chat_Insight_ReportMembersDocument, Chat_Insight_ThumbnailFileDocument, Chat_MessagesDocument, Chat_ProjectDocument, Chat_Project_DesktopBindingDocument, ChatMessageDocument, ChatMessage_ArtifactsDocument, ChatMessage_ChatDocument, ChatMessage_Chat_DesktopDeviceDocument, ChatMessage_Chat_InsightDocument, ChatMessage_Chat_ProjectDocument, ChatMessage_ContentsDocument, ChatMessage_FeedbackDocument, ChatMessagesDocument, ChatsDocument, DatabaseDocument, Database_EngineDocument, Database_Engine_CatalogDocument, Database_TablesDocument, DatabaseCatalogDocument, DatabaseCatalog_EngineDocument, DatabaseCatalogsDocument, DatabaseSchemaDocument, DatabasesDocument, DesktopDeviceDocument, DesktopDevice_ChatsDocument, DesktopDevice_DesktopBindingsDocument, DesktopDevicesDocument, DocumentDocument, Document_ContentsDocument, Document_FileDocument, Document_FormatDocument, Document_Format_CatalogDocument, Document_TablesDocument, DocumentCatalogDocument, DocumentCatalog_FormatDocument, DocumentCatalogsDocument, DocumentsDocument, ExportDocument, ExportWithInsightIdDocument, FeedItemDocument, FeedItem_ActionDocument, FeedItem_DataDocument, FeedItemsDocument, FileDocument, FileMetaDocument, FileUrlsDocument, FindFitTierDocument, FolderDocument, FoldersDocument, GetCapabilityDocument, GetDevAccessTokenDocument, GetLimitDocument, GetRemainingDocument, GetTokenUsageByModelDocument, GetTokenUsageHistoryDocument, GetTokenUsageStatusDocument, UsageWindowsStatusTypeFragmentDoc, GetTokenUsageStatus_WindowsDocument, GetTokenUsageStatus_Windows_DayDocument, GetTokenUsageStatus_Windows_FiveHourDocument, GetTokenUsageStatus_Windows_MonthDocument, GetTokenUsageStatus_Windows_WeekDocument, GetUsageDocument, InsightDocument, Insight_ChatDocument, Insight_Chat_DesktopDeviceDocument, Insight_Chat_ProjectDocument, Insight_ReportMembersDocument, Insight_ReportsDocument, Insight_ThumbnailFileDocument, InsightsDocument, IntegrationDocument, Integration_ProviderDocument, Integration_Provider_CatalogDocument, IntegrationCatalogDocument, IntegrationCatalog_ProviderDocument, IntegrationCatalogToolsDocument, IntegrationCatalogsDocument, IntegrationsDocument, InterpretationsDocument, LiveContextDocument, LiveContext_ItemsDocument, LiveContext_SourceDocument, LiveContext_Source_EvidencesDocument, LiveContextsDocument, LocalSandboxDeviceStatusesDocument, NotificationDocument, NotificationsDocument, NotificationsByReferenceDocument, PrivacyStatsDocument, ProjectDocument, Project_ChatsDocument, Project_DesktopBindingDocument, Project_DesktopBinding_DeviceDocument, ProjectsDocument, PulseAppSummaryDocument, PulseEventDocument, PulseEvent_IntegrationDocument, PulseEvent_Integration_ProviderDocument, PulseEventsDocument, PulseTriggerSettingsDocument, QueryDocument, QueryWithInsightIdDocument, QueryWithMessageIdDocument, ReportDocument, Report_InsightsDocument, Report_LayoutDocument, ReportsDocument, TableDocument, Table_DatabaseDocument, Table_Database_EngineDocument, Table_DocumentDocument, Table_Document_ContentsDocument, Table_Document_FileDocument, Table_Document_FormatDocument, Table_FromRelationsDocument, Table_ToRelationsDocument, TablesDocument, UserSkillFileDocument, UserSkillFilesDocument, UserSkillFolderDocument, UserSkillFoldersDocument, WorkspaceDeletionScheduleDocument, McpAuthUpdatesDocument, TokenUsageUpdatesDocument } from './chunk-QELS6XG7.js';
6
6
  import { __commonJS, __toESM } from './chunk-5WRI5ZAA.js';
@@ -6035,6 +6035,7 @@ var INITIAL_RECONNECT_DELAY_MS = 1e3;
6035
6035
  var MAX_RECONNECT_DELAY_MS = 3e4;
6036
6036
  var RECONNECT_BACKOFF_MULTIPLIER = 2;
6037
6037
  var MAX_CONSECUTIVE_AUTH_FAILURES = 3;
6038
+ var STALE_CONNECTION_TIMEOUT_MS = 35e3;
6038
6039
  var AuthChatStreamError = class extends Error {
6039
6040
  constructor(status) {
6040
6041
  super(`Chat stream auth failed: ${status}`);
@@ -6055,6 +6056,8 @@ var ChatStreamConnection = class {
6055
6056
  needsForceRefresh = false;
6056
6057
  reconnectDelay = INITIAL_RECONNECT_DELAY_MS;
6057
6058
  reconnectTimer;
6059
+ staleReconnectRequested = false;
6060
+ staleTimer;
6058
6061
  shouldReconnect = false;
6059
6062
  subscribers = /* @__PURE__ */ new Set();
6060
6063
  addSubscriber(subscriber) {
@@ -6090,6 +6093,8 @@ var ChatStreamConnection = class {
6090
6093
  close(error) {
6091
6094
  this.shouldReconnect = false;
6092
6095
  this.destroyed = true;
6096
+ this.staleReconnectRequested = false;
6097
+ this.clearStaleTimer();
6093
6098
  if (this.reconnectTimer) {
6094
6099
  clearTimeout(this.reconnectTimer);
6095
6100
  this.reconnectTimer = void 0;
@@ -6141,14 +6146,26 @@ var ChatStreamConnection = class {
6141
6146
  }
6142
6147
  this.consecutiveAuthFailures = 0;
6143
6148
  this.reconnectDelay = INITIAL_RECONNECT_DELAY_MS;
6149
+ this.staleReconnectRequested = false;
6150
+ this.armStaleTimer();
6144
6151
  await this.parseSseStream(response.body, this.abortController.signal);
6145
6152
  } catch (error) {
6153
+ this.clearStaleTimer();
6146
6154
  if (error.name === "AbortError") {
6155
+ if (this.staleReconnectRequested && this.shouldReconnect && !this.destroyed && this.subscribers.size > 0) {
6156
+ this.staleReconnectRequested = false;
6157
+ this.scheduleReconnect(INITIAL_RECONNECT_DELAY_MS);
6158
+ }
6147
6159
  return;
6148
6160
  }
6149
6161
  if (!this.shouldReconnect || this.destroyed || this.subscribers.size === 0) {
6150
6162
  return;
6151
6163
  }
6164
+ if (error instanceof DvinaAuthenticationError) {
6165
+ this.options.onError?.(error);
6166
+ this.close(error);
6167
+ return;
6168
+ }
6152
6169
  const isAuthError2 = error instanceof AuthChatStreamError;
6153
6170
  if (isAuthError2) {
6154
6171
  this.consecutiveAuthFailures += 1;
@@ -6180,6 +6197,7 @@ var ChatStreamConnection = class {
6180
6197
  if (done) {
6181
6198
  break;
6182
6199
  }
6200
+ this.armStaleTimer();
6183
6201
  buffer += decoder.decode(value, { stream: true });
6184
6202
  const parts = buffer.split(/(?:\r\n|\r|\n){2}/);
6185
6203
  buffer = parts.pop() ?? "";
@@ -6188,6 +6206,7 @@ var ChatStreamConnection = class {
6188
6206
  }
6189
6207
  }
6190
6208
  } finally {
6209
+ this.clearStaleTimer();
6191
6210
  reader.releaseLock();
6192
6211
  }
6193
6212
  if (this.shouldReconnect && !this.destroyed && this.subscribers.size > 0) {
@@ -6212,7 +6231,7 @@ var ChatStreamConnection = class {
6212
6231
  }
6213
6232
  if (eventType === "token-expired") {
6214
6233
  this.needsForceRefresh = true;
6215
- return;
6234
+ throw new AuthChatStreamError(401);
6216
6235
  }
6217
6236
  if (!eventId || dataLines.length === 0) {
6218
6237
  return;
@@ -6241,6 +6260,26 @@ var ChatStreamConnection = class {
6241
6260
  void this.doConnect();
6242
6261
  }, delay);
6243
6262
  }
6263
+ armStaleTimer() {
6264
+ this.clearStaleTimer();
6265
+ if (!this.abortController || !this.shouldReconnect || this.destroyed) {
6266
+ return;
6267
+ }
6268
+ this.staleTimer = setTimeout(() => {
6269
+ if (!this.abortController || !this.shouldReconnect || this.destroyed) {
6270
+ return;
6271
+ }
6272
+ this.staleReconnectRequested = true;
6273
+ this.abortController.abort();
6274
+ }, STALE_CONNECTION_TIMEOUT_MS);
6275
+ }
6276
+ clearStaleTimer() {
6277
+ if (!this.staleTimer) {
6278
+ return;
6279
+ }
6280
+ clearTimeout(this.staleTimer);
6281
+ this.staleTimer = void 0;
6282
+ }
6244
6283
  };
6245
6284
  var ActiveChatStreamConnection = class {
6246
6285
  constructor(options, onEmpty) {
@@ -6253,6 +6292,8 @@ var ActiveChatStreamConnection = class {
6253
6292
  needsForceRefresh = false;
6254
6293
  reconnectDelay = INITIAL_RECONNECT_DELAY_MS;
6255
6294
  reconnectTimer;
6295
+ staleReconnectRequested = false;
6296
+ staleTimer;
6256
6297
  shouldReconnect = false;
6257
6298
  subscribers = /* @__PURE__ */ new Set();
6258
6299
  addSubscriber(subscriber) {
@@ -6288,6 +6329,8 @@ var ActiveChatStreamConnection = class {
6288
6329
  close(error) {
6289
6330
  this.shouldReconnect = false;
6290
6331
  this.destroyed = true;
6332
+ this.staleReconnectRequested = false;
6333
+ this.clearStaleTimer();
6291
6334
  if (this.reconnectTimer) {
6292
6335
  clearTimeout(this.reconnectTimer);
6293
6336
  this.reconnectTimer = void 0;
@@ -6334,14 +6377,26 @@ var ActiveChatStreamConnection = class {
6334
6377
  }
6335
6378
  this.consecutiveAuthFailures = 0;
6336
6379
  this.reconnectDelay = INITIAL_RECONNECT_DELAY_MS;
6380
+ this.staleReconnectRequested = false;
6381
+ this.armStaleTimer();
6337
6382
  await this.parseSseStream(response.body, this.abortController.signal);
6338
6383
  } catch (error) {
6384
+ this.clearStaleTimer();
6339
6385
  if (error.name === "AbortError") {
6386
+ if (this.staleReconnectRequested && this.shouldReconnect && !this.destroyed && this.subscribers.size > 0) {
6387
+ this.staleReconnectRequested = false;
6388
+ this.scheduleReconnect(INITIAL_RECONNECT_DELAY_MS);
6389
+ }
6340
6390
  return;
6341
6391
  }
6342
6392
  if (!this.shouldReconnect || this.destroyed || this.subscribers.size === 0) {
6343
6393
  return;
6344
6394
  }
6395
+ if (error instanceof DvinaAuthenticationError) {
6396
+ this.options.onError?.(error);
6397
+ this.close(error);
6398
+ return;
6399
+ }
6345
6400
  const isAuthError2 = error instanceof AuthChatStreamError;
6346
6401
  if (isAuthError2) {
6347
6402
  this.consecutiveAuthFailures += 1;
@@ -6375,6 +6430,7 @@ var ActiveChatStreamConnection = class {
6375
6430
  if (done) {
6376
6431
  break;
6377
6432
  }
6433
+ this.armStaleTimer();
6378
6434
  buffer += decoder.decode(value, { stream: true });
6379
6435
  const parts = buffer.split(/(?:\r\n|\r|\n){2}/);
6380
6436
  buffer = parts.pop() ?? "";
@@ -6383,6 +6439,7 @@ var ActiveChatStreamConnection = class {
6383
6439
  }
6384
6440
  }
6385
6441
  } finally {
6442
+ this.clearStaleTimer();
6386
6443
  reader.releaseLock();
6387
6444
  }
6388
6445
  if (this.shouldReconnect && !this.destroyed && this.subscribers.size > 0) {
@@ -6404,7 +6461,7 @@ var ActiveChatStreamConnection = class {
6404
6461
  }
6405
6462
  if (eventType === "token-expired") {
6406
6463
  this.needsForceRefresh = true;
6407
- return;
6464
+ throw new AuthChatStreamError(401);
6408
6465
  }
6409
6466
  if (eventType !== "active" || dataLines.length === 0) {
6410
6467
  return;
@@ -6435,6 +6492,26 @@ var ActiveChatStreamConnection = class {
6435
6492
  void this.doConnect();
6436
6493
  }, delay);
6437
6494
  }
6495
+ armStaleTimer() {
6496
+ this.clearStaleTimer();
6497
+ if (!this.abortController || !this.shouldReconnect || this.destroyed) {
6498
+ return;
6499
+ }
6500
+ this.staleTimer = setTimeout(() => {
6501
+ if (!this.abortController || !this.shouldReconnect || this.destroyed) {
6502
+ return;
6503
+ }
6504
+ this.staleReconnectRequested = true;
6505
+ this.abortController.abort();
6506
+ }, STALE_CONNECTION_TIMEOUT_MS);
6507
+ }
6508
+ clearStaleTimer() {
6509
+ if (!this.staleTimer) {
6510
+ return;
6511
+ }
6512
+ clearTimeout(this.staleTimer);
6513
+ this.staleTimer = void 0;
6514
+ }
6438
6515
  };
6439
6516
  function createChatStreamClient(options) {
6440
6517
  const connections = /* @__PURE__ */ new Map();
@@ -8114,6 +8191,7 @@ var INITIAL_RECONNECT_DELAY_MS2 = 1e3;
8114
8191
  var MAX_RECONNECT_DELAY_MS2 = 3e4;
8115
8192
  var RECONNECT_BACKOFF_MULTIPLIER2 = 2;
8116
8193
  var MAX_CONSECUTIVE_AUTH_FAILURES2 = 3;
8194
+ var STALE_CONNECTION_TIMEOUT_MS2 = 35e3;
8117
8195
  var SUBSCRIPTION_REFRESH_INTERVAL_MS = 5 * 60 * 1e3;
8118
8196
  function createSseTransport(options) {
8119
8197
  let abortController;
@@ -8126,7 +8204,33 @@ function createSseTransport(options) {
8126
8204
  let needsForceRefresh = false;
8127
8205
  let consecutiveAuthFailures = 0;
8128
8206
  let hasConnectedOnce = false;
8207
+ let staleReconnectRequested = false;
8208
+ let staleTimer;
8129
8209
  const activeSubscriptions = /* @__PURE__ */ new Map();
8210
+ function clearStaleTimer() {
8211
+ if (!staleTimer) {
8212
+ return;
8213
+ }
8214
+ clearTimeout(staleTimer);
8215
+ staleTimer = void 0;
8216
+ }
8217
+ function armStaleTimer() {
8218
+ clearStaleTimer();
8219
+ if (!abortController || !shouldReconnect) {
8220
+ return;
8221
+ }
8222
+ staleTimer = setTimeout(() => {
8223
+ if (!abortController || !shouldReconnect) {
8224
+ return;
8225
+ }
8226
+ staleReconnectRequested = true;
8227
+ abortController.abort();
8228
+ }, STALE_CONNECTION_TIMEOUT_MS2);
8229
+ }
8230
+ function handleTerminalAuthFailure(error) {
8231
+ options.onError?.(error);
8232
+ disconnect();
8233
+ }
8130
8234
  async function connect(lastSyncId) {
8131
8235
  disconnect();
8132
8236
  shouldReconnect = true;
@@ -8175,17 +8279,29 @@ function createSseTransport(options) {
8175
8279
  isConnected = true;
8176
8280
  consecutiveAuthFailures = 0;
8177
8281
  reconnectDelay = INITIAL_RECONNECT_DELAY_MS2;
8282
+ staleReconnectRequested = false;
8178
8283
  options.onStateChange?.("connected");
8179
8284
  const isReconnect = hasConnectedOnce;
8180
8285
  hasConnectedOnce = true;
8181
8286
  await syncActiveSubscriptions(token);
8182
8287
  startSubscriptionRefresh();
8288
+ armStaleTimer();
8183
8289
  if (isReconnect && activeSubscriptions.size > 0) {
8184
8290
  options.onReconnect?.();
8185
8291
  }
8186
8292
  await parseSseStream(response.body, abortController.signal);
8187
8293
  } catch (error) {
8294
+ clearStaleTimer();
8188
8295
  if (error.name === "AbortError") {
8296
+ if (staleReconnectRequested && shouldReconnect) {
8297
+ staleReconnectRequested = false;
8298
+ isConnected = false;
8299
+ stopSubscriptionRefresh();
8300
+ options.onStateChange?.("disconnected");
8301
+ reconnectTimer = setTimeout(() => {
8302
+ void doConnect();
8303
+ }, INITIAL_RECONNECT_DELAY_MS2);
8304
+ }
8189
8305
  return;
8190
8306
  }
8191
8307
  isConnected = false;
@@ -8194,10 +8310,16 @@ function createSseTransport(options) {
8194
8310
  if (!shouldReconnect) {
8195
8311
  return;
8196
8312
  }
8313
+ if (error instanceof DvinaAuthenticationError) {
8314
+ handleTerminalAuthFailure(error);
8315
+ return;
8316
+ }
8197
8317
  const isAuthError2 = error instanceof AuthSseError;
8198
8318
  if (isAuthError2) {
8199
8319
  consecutiveAuthFailures += 1;
8200
8320
  if (consecutiveAuthFailures >= MAX_CONSECUTIVE_AUTH_FAILURES2) {
8321
+ const authError = new DvinaAuthenticationError("Sync SSE stream authentication failed permanently");
8322
+ options.onError?.(authError);
8201
8323
  disconnect();
8202
8324
  return;
8203
8325
  }
@@ -8222,6 +8344,7 @@ function createSseTransport(options) {
8222
8344
  if (done) {
8223
8345
  break;
8224
8346
  }
8347
+ armStaleTimer();
8225
8348
  buffer += decoder.decode(value, { stream: true });
8226
8349
  const parts = buffer.split(/(?:\r\n|\r|\n){2}/);
8227
8350
  buffer = parts.pop() ?? "";
@@ -8230,6 +8353,7 @@ function createSseTransport(options) {
8230
8353
  }
8231
8354
  }
8232
8355
  } finally {
8356
+ clearStaleTimer();
8233
8357
  reader.releaseLock();
8234
8358
  }
8235
8359
  if (!shouldReconnect) {
@@ -8260,7 +8384,7 @@ function createSseTransport(options) {
8260
8384
  }
8261
8385
  if (eventType === "token-expired") {
8262
8386
  needsForceRefresh = true;
8263
- return;
8387
+ throw new AuthSseError(401);
8264
8388
  }
8265
8389
  if (eventType === "full-resync") {
8266
8390
  options.onFullResync?.();
@@ -8299,6 +8423,8 @@ function createSseTransport(options) {
8299
8423
  function disconnect() {
8300
8424
  shouldReconnect = false;
8301
8425
  isConnected = false;
8426
+ staleReconnectRequested = false;
8427
+ clearStaleTimer();
8302
8428
  stopSubscriptionRefresh();
8303
8429
  if (reconnectTimer) {
8304
8430
  clearTimeout(reconnectTimer);
@@ -8343,7 +8469,12 @@ function createSseTransport(options) {
8343
8469
  if (activeSubscriptions.size === 0) {
8344
8470
  return;
8345
8471
  }
8346
- const resolvedToken = token ?? await options.getToken().catch(() => void 0);
8472
+ const resolvedToken = token ?? await options.getToken().catch((error) => {
8473
+ if (error instanceof DvinaAuthenticationError) {
8474
+ handleTerminalAuthFailure(error);
8475
+ }
8476
+ return void 0;
8477
+ });
8347
8478
  if (!resolvedToken) {
8348
8479
  return;
8349
8480
  }
@@ -8355,7 +8486,16 @@ function createSseTransport(options) {
8355
8486
  );
8356
8487
  }
8357
8488
  async function postMessage(body, token) {
8358
- let resolvedToken = token ?? await options.getToken();
8489
+ let resolvedToken;
8490
+ try {
8491
+ resolvedToken = token ?? await options.getToken();
8492
+ } catch (error) {
8493
+ if (error instanceof DvinaAuthenticationError) {
8494
+ handleTerminalAuthFailure(error);
8495
+ return;
8496
+ }
8497
+ throw error;
8498
+ }
8359
8499
  const url = new URL(options.url);
8360
8500
  for (let attempt = 0; attempt < 2; attempt += 1) {
8361
8501
  const response = await fetch(url.toString(), {
@@ -8369,7 +8509,15 @@ function createSseTransport(options) {
8369
8509
  if (response.status !== 401 && response.status !== 403) {
8370
8510
  return;
8371
8511
  }
8372
- resolvedToken = await refreshTokenSingleFlight(options.getToken, resolvedToken);
8512
+ try {
8513
+ resolvedToken = await refreshTokenSingleFlight(options.getToken, resolvedToken);
8514
+ } catch (error) {
8515
+ if (error instanceof DvinaAuthenticationError) {
8516
+ handleTerminalAuthFailure(error);
8517
+ return;
8518
+ }
8519
+ throw error;
8520
+ }
8373
8521
  }
8374
8522
  }
8375
8523
  return {
@@ -10338,7 +10486,7 @@ async function applyRemoteCacheEpoch(db, engine, syncPolicyUrl, getToken) {
10338
10486
  await db.setLastSyncId("0");
10339
10487
  await db.setCacheEpoch(remoteCacheEpoch);
10340
10488
  }
10341
- function createLazySyncEngine(httpTransport, sseUrl, syncPolicyUrl, getToken, getDb) {
10489
+ function createLazySyncEngine(httpTransport, sseUrl, syncPolicyUrl, getToken, getDb, onError) {
10342
10490
  let realEngine;
10343
10491
  let initPromise;
10344
10492
  let activeSseTransport;
@@ -10353,6 +10501,7 @@ function createLazySyncEngine(httpTransport, sseUrl, syncPolicyUrl, getToken, ge
10353
10501
  const transport = createSseTransport({
10354
10502
  url: sseUrl,
10355
10503
  getToken,
10504
+ onError,
10356
10505
  onEvent: (event) => {
10357
10506
  realEngine?.processSyncEvent(event).catch(() => {
10358
10507
  });
@@ -10625,7 +10774,7 @@ var DB_INIT_TOKEN_POLL_INTERVAL_MS = 100;
10625
10774
  var DB_INIT_TOKEN_TIMEOUT_MS = 15e3;
10626
10775
  var LIFECYCLE_HINT_DEBOUNCE_MS = 250;
10627
10776
  function shouldRecoverConnections(hints) {
10628
- return hints.has("network-restored") || hints.has("app-resumed");
10777
+ return hints.has("network-restored") || hints.has("app-resumed") || hints.has("became-active");
10629
10778
  }
10630
10779
  function resolveGetToken(options) {
10631
10780
  if ("getToken" in options && options.getToken) {
@@ -10655,6 +10804,9 @@ async function waitForDatabaseToken(getToken) {
10655
10804
  return token;
10656
10805
  }
10657
10806
  } catch (error) {
10807
+ if (error instanceof DvinaAuthenticationError) {
10808
+ throw error;
10809
+ }
10658
10810
  lastError = error;
10659
10811
  }
10660
10812
  if (Date.now() >= deadlineAt) {
@@ -10723,7 +10875,7 @@ function createDvinaClient(options) {
10723
10875
  dbInitPromise = void 0;
10724
10876
  });
10725
10877
  }
10726
- const syncEngine = createLazySyncEngine(httpTransport, sseUrl, syncPolicyUrl, getToken, getDb);
10878
+ const syncEngine = createLazySyncEngine(httpTransport, sseUrl, syncPolicyUrl, getToken, getDb, options.onError);
10727
10879
  const recoverableSyncEngine = syncEngine;
10728
10880
  const request = async (document2, variables, _options) => {
10729
10881
  return syncEngine.query(document2, variables);
@@ -22974,5 +23126,5 @@ var DvinaSdk = class extends Request {
22974
23126
  };
22975
23127
 
22976
23128
  export { AbortChatMutation, Action, AddInsightToReportMutation, Agent, AgentConnection, AgentQuery, AgentSubBuilder, Agent_ChatsQuery, AgentsQuery, AiProviderSettingQuery, Artifact, ArtifactConnection, ArtifactQuery, ArtifactSubBuilder, Artifact_ChatQuery, Artifact_Chat_DesktopDeviceQuery, Artifact_Chat_InsightQuery, Artifact_Chat_ProjectQuery, Artifact_FileQuery, Artifact_MessageQuery, Artifact_Message_ChatQuery, Artifact_Message_ContentsQuery, Artifact_Message_FeedbackQuery, ArtifactsQuery, AudioEventOutput, CancelOauthFlowMutation, CancelWorkspaceDeletionMutation, Candidate, CandidateEvidence, Chat, ChatConnection, ChatImportExecuteOutput, ChatImportPreviewOutput, ChatMessage, ChatMessageConnection, ChatMessageQuery, ChatMessageSubBuilder, ChatMessage_ArtifactsQuery, ChatMessage_ChatQuery, ChatMessage_Chat_DesktopDeviceQuery, ChatMessage_Chat_InsightQuery, ChatMessage_Chat_ProjectQuery, ChatMessage_ContentsQuery, ChatMessage_FeedbackQuery, ChatMessagesQuery, ChatQuery, ChatSubBuilder, ChatTitleEventOutput, Chat_AgentsQuery, Chat_ArtifactsQuery, Chat_DesktopDeviceQuery, Chat_DesktopDevice_DesktopBindingsQuery, Chat_InsightQuery, Chat_Insight_ReportMembersQuery, Chat_Insight_ThumbnailFileQuery, Chat_MessagesQuery, Chat_ProjectQuery, Chat_Project_DesktopBindingQuery, ChatsQuery, ConnectIntegrationMutation, ConsumePulseEventsMutation, ContentBlock, ContentMask, ContinueImportedChatMutation, ContinueInterpretationMutation, CreateAgentMutation, CreateChatMutation, CreateDatabaseMutation, CreateDocumentMutation, CreateFeedbackMutation, CreateFolderMutation, CreateInsightMutation, CreateIntegrationMutation, CreateIntegrationOutput, CreateProjectMutation, CreateReportMutation, CreateTableMutation, CreateUserSkillFileMutation, CreateUserSkillFolderMutation, CubeModel, DB_ENTITY_SCHEMA, Database, DatabaseCatalog, DatabaseCatalogConnection, DatabaseCatalogQuery, DatabaseCatalogSubBuilder, DatabaseCatalog_EngineQuery, DatabaseCatalogsQuery, DatabaseConnection, DatabaseEngine, DatabaseQuery, DatabaseSchemaQuery, DatabaseSubBuilder, Database_EngineQuery, Database_Engine_CatalogQuery, Database_TablesQuery, DatabasesQuery, DeepAnalysisUsage, DeferredDvinaQueryRef, DeleteAgentMutation, DeleteAiProviderSettingMutation, DeleteArtifactMutation, DeleteChatMutation, DeleteDatabaseMutation, DeleteDocumentMutation, DeleteFolderMutation, DeleteInsightMutation, DeleteInsightsMutation, DeleteIntegrationMutation, DeleteProjectMutation, DeleteReportMutation, DeleteTableMutation, DeleteUserSkillFileMutation, DeleteUserSkillFolderMutation, DesktopDevice, DesktopDeviceConnection, DesktopDeviceQuery, DesktopDeviceSubBuilder, DesktopDevice_ChatsQuery, DesktopDevice_DesktopBindingsQuery, DesktopDevicesQuery, DevAccessTokenOutput, DexieLiveQueryRef, DisconnectIntegrationMutation, DismissPulseEventMutation, Document, DocumentCatalog, DocumentCatalogConnection, DocumentCatalogQuery, DocumentCatalogSubBuilder, DocumentCatalog_FormatQuery, DocumentCatalogsQuery, DocumentConnection, DocumentContent, DocumentFormat, DocumentQuery, DocumentSubBuilder, Document_ContentsQuery, Document_FileQuery, Document_FormatQuery, Document_Format_CatalogQuery, Document_TablesQuery, DocumentsQuery, DvinaDatabase, DvinaModel, DvinaSdk, Evidence, ExecuteChatImportMutation, ExportQuery, ExportWithInsightIdQuery, FailedSyncEventIngestion, FeedArtifactData, FeedConnection, FeedDatabaseData, FeedDocumentData, FeedInsightData, FeedIntegrationData, FeedItem, FeedItemGenerated, FeedItemQuery, FeedItemSubBuilder, FeedItem_ActionQuery, FeedItem_DataQuery, FeedItemsQuery, FeedLiveContextData, FeedProjectData, FeedPulseData, FeedSendMessageAction, Feedback, File, FileMetaQuery, FileModel, FileQuery, FileUrlsQuery, FinalContentEventOutput, FindFitTierQuery, Folder, FolderConnection, FolderQuery, FoldersQuery, GenerateUploadUriMutation, GetCapabilityQuery, GetDevAccessTokenQuery, GetLimitQuery, GetRemainingQuery, GetTokenUsageByModelQuery, GetTokenUsageHistoryQuery, GetTokenUsageStatusQuery, GetTokenUsageStatus_WindowsQuery, GetTokenUsageStatus_Windows_DayQuery, GetTokenUsageStatus_Windows_FiveHourQuery, GetTokenUsageStatus_Windows_MonthQuery, GetTokenUsageStatus_Windows_WeekQuery, GetUsageQuery, ImportedChatSummaryOutput, InferenceRequestAudit, Insight, InsightConnection, InsightQuery, InsightSubBuilder, Insight_ChatQuery, Insight_Chat_DesktopDeviceQuery, Insight_Chat_ProjectQuery, Insight_ReportMembersQuery, Insight_ReportsQuery, Insight_ThumbnailFileQuery, InsightsQuery, Integration, IntegrationCatalog, IntegrationCatalogConnection, IntegrationCatalogQuery, IntegrationCatalogSubBuilder, IntegrationCatalogToolsQuery, IntegrationCatalog_ProviderQuery, IntegrationCatalogsQuery, IntegrationConnection, IntegrationProvider, IntegrationQuery, IntegrationSubBuilder, Integration_ProviderQuery, Integration_Provider_CatalogQuery, IntegrationsQuery, Interpretation, InterpretationConnection, InterpretationsQuery, Invocation, LegacyCodeMigratedChatSummaryOutput, LegacyCodeMigrationOutput, LiveContext, LiveContextConnection, LiveContextQuery, LiveContextSubBuilder, LiveContext_ItemsQuery, LiveContext_SourceQuery, LiveContext_Source_EvidencesQuery, LiveContextsQuery, LocalSandboxDeviceStatusModel, LocalSandboxDeviceStatusesQuery, MUTATION_CACHE_RULES, MappedDvinaQueryRef, McpAuthUpdateModel, McpAuthUpdatesSubscription, McpClientInformation, McpCodeVerifier, McpServer, McpTokens, McpTool, MessageEndEventOutput, MessageStartEventOutput, MigrateLegacyCodeChatsMutation, ModelTokenUsage, Notification, NotificationConnection, NotificationQuery, NotificationsByReferenceQuery, NotificationsQuery, PRIMARY_KEY_CONFIG, PreviewChatImportMutation, PrivacyStats, PrivacyStatsQuery, ProgressSummaryEventOutput, Project, ProjectConnection, ProjectDesktopBinding, ProjectQuery, ProjectSubBuilder, Project_ChatsQuery, Project_DesktopBindingQuery, Project_DesktopBinding_DeviceQuery, ProjectsQuery, PulseAppSummaryModel, PulseAppSummaryQuery, PulseEvent, PulseEventConnection, PulseEventQuery, PulseEventSubBuilder, PulseEvent_IntegrationQuery, PulseEvent_Integration_ProviderQuery, PulseEventsQuery, PulseTriggerSettingModel, PulseTriggerSettingsQuery, QueryQuery, QueryWithInsightIdQuery, QueryWithMessageIdQuery, ReanalyzeDocumentMutation, ReasoningEventOutput, RefineAgentInstructionMutation, RefineSkillInstructionMutation, RefreshDatabaseSchemaMutation, RefreshInsightMutation, RegisterDesktopDeviceMutation, ReinterpretSourceMutation, ReinterpretSourcesOfuserMutation, Relation, RelocateInsightMutation, RemoveInsightFromReportMutation, Report, ReportConnection, ReportMember, ReportQuery, ReportSubBuilder, Report_InsightsQuery, Report_LayoutQuery, ReportsQuery, ResetWorkspaceMutation, ResolvePulseEventMutation, ResolvedFileUrl, ScheduleWorkspaceDeletionMutation, SendMessageMutation, SetDatabasePrimaryKeyMutation, StreamEventSchemaAnchor, StreamMessageContentOutput, StreamMessageOutput, SyncEngine, SyncEvent, SyncEventCursor, SyncProjectDesktopBindingMutation, TABLE_TO_TYPENAME, TYPENAME_TO_TABLE, Table, TableConnection, TableQuery, TableSubBuilder, Table_DatabaseQuery, Table_Database_EngineQuery, Table_DocumentQuery, Table_Document_ContentsQuery, Table_Document_FileQuery, Table_Document_FormatQuery, Table_FromRelationsQuery, Table_ToRelationsQuery, TablesQuery, TextBlockEventOutput, TextDeltaEventOutput, TokenUsage, TokenUsageUpdatesSubscription, ToolInputDeltaEventOutput, ToolResultArtifactOutput, ToolResultEventOutput, ToolStartEventOutput, UpdateAgentMutation, UpdateArtifactNameMutation, UpdateChatMutation, UpdateDatabaseMutation, UpdateDocumentMutation, UpdateFolderMutation, UpdateInsightInReportMutation, UpdateInsightMutation, UpdateInsightThumbnailMutation, UpdateInterpMutation, UpdateLiveContextMutation, UpdateProjectMutation, UpdatePulseTriggerMutation, UpdateReportMutation, UpdateTableMutation, UpdateUserSkillFileMutation, UpdateUserSkillFolderMutation, UpsertAiProviderSettingMutation, UsageMetaOutput, UsageStatus, UsageWindowsStatusType, UserAiProviderSetting, UserSkillFile, UserSkillFileModel, UserSkillFileQuery, UserSkillFilesQuery, UserSkillFolder, UserSkillFolderModel, UserSkillFolderQuery, UserSkillFoldersQuery, WidgetBlockCompleteEventOutput, WidgetBlockErrorEventOutput, WidgetBlockStartEventOutput, WidgetHtmlDeltaEventOutput, WindowDetailType, WorkspaceDeleteSchedule, WorkspaceDeletionScheduleQuery, closeDatabase, createChatStreamClient, createDvinaClient, createLazySyncEngine, createSseTransport, createWsTransport, deleteDatabase, getOrCreateDatabase, reconstructConnectionNodes, reconstructEntity, uploadFile };
22977
- //# sourceMappingURL=chunk-I7HS5CQ7.js.map
22978
- //# sourceMappingURL=chunk-I7HS5CQ7.js.map
23129
+ //# sourceMappingURL=chunk-4IJ3Z2SR.js.map
23130
+ //# sourceMappingURL=chunk-4IJ3Z2SR.js.map