@atlaskit/editor-synced-block-provider 6.6.5 → 6.6.7

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 (36) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/cjs/clients/block-service/blockSubscription.js +2 -2
  3. package/dist/cjs/providers/block-service/blockServiceAPI.js +2 -2
  4. package/dist/cjs/providers/syncBlockProvider.js +2 -2
  5. package/dist/cjs/store-manager/referenceSyncBlockStoreManager.js +26 -7
  6. package/dist/cjs/store-manager/syncBlockSubscriptionManager.js +148 -25
  7. package/dist/cjs/utils/utils.js +49 -4
  8. package/dist/es2019/clients/block-service/blockSubscription.js +2 -2
  9. package/dist/es2019/providers/block-service/blockServiceAPI.js +2 -2
  10. package/dist/es2019/providers/syncBlockProvider.js +2 -2
  11. package/dist/es2019/store-manager/referenceSyncBlockStoreManager.js +27 -8
  12. package/dist/es2019/store-manager/syncBlockSubscriptionManager.js +109 -6
  13. package/dist/es2019/utils/utils.js +43 -1
  14. package/dist/esm/clients/block-service/blockSubscription.js +2 -2
  15. package/dist/esm/providers/block-service/blockServiceAPI.js +2 -2
  16. package/dist/esm/providers/syncBlockProvider.js +2 -2
  17. package/dist/esm/store-manager/referenceSyncBlockStoreManager.js +28 -9
  18. package/dist/esm/store-manager/syncBlockSubscriptionManager.js +148 -25
  19. package/dist/esm/utils/utils.js +48 -1
  20. package/dist/types/clients/block-service/blockSubscription.d.ts +2 -1
  21. package/dist/types/entry-points/providers-types.d.ts +1 -1
  22. package/dist/types/providers/block-service/blockServiceAPI.d.ts +1 -1
  23. package/dist/types/providers/syncBlockProvider.d.ts +1 -1
  24. package/dist/types/providers/types.d.ts +4 -2
  25. package/dist/types/store-manager/referenceSyncBlockStoreManager.d.ts +1 -0
  26. package/dist/types/store-manager/syncBlockSubscriptionManager.d.ts +23 -0
  27. package/dist/types/utils/utils.d.ts +2 -1
  28. package/dist/types-ts4.5/clients/block-service/blockSubscription.d.ts +2 -1
  29. package/dist/types-ts4.5/entry-points/providers-types.d.ts +1 -1
  30. package/dist/types-ts4.5/providers/block-service/blockServiceAPI.d.ts +1 -1
  31. package/dist/types-ts4.5/providers/syncBlockProvider.d.ts +1 -1
  32. package/dist/types-ts4.5/providers/types.d.ts +4 -2
  33. package/dist/types-ts4.5/store-manager/referenceSyncBlockStoreManager.d.ts +1 -0
  34. package/dist/types-ts4.5/store-manager/syncBlockSubscriptionManager.d.ts +23 -0
  35. package/dist/types-ts4.5/utils/utils.d.ts +2 -1
  36. package/package.json +3 -3
@@ -1,9 +1,56 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1
4
  /* eslint-disable require-unicode-regexp */
2
5
 
6
+ import { fg } from '@atlaskit/platform-feature-flags';
7
+ var _stripAnnotationMarksFromJSONContent = function stripAnnotationMarksFromJSONContent(content) {
8
+ var strippedContent;
9
+ content.forEach(function (contentNode, index) {
10
+ var _contentNode$marks;
11
+ if (!contentNode) {
12
+ var _strippedContent;
13
+ (_strippedContent = strippedContent) === null || _strippedContent === void 0 || _strippedContent.push(contentNode);
14
+ return;
15
+ }
16
+ var hasAnnotationMark = (_contentNode$marks = contentNode.marks) === null || _contentNode$marks === void 0 ? void 0 : _contentNode$marks.some(function (mark) {
17
+ return mark.type === 'annotation';
18
+ });
19
+ var childContent = contentNode.content ? _stripAnnotationMarksFromJSONContent(contentNode.content) : undefined;
20
+ var hasContentChanged = childContent !== undefined && childContent !== contentNode.content;
21
+ if (!hasAnnotationMark && !hasContentChanged) {
22
+ var _strippedContent2;
23
+ (_strippedContent2 = strippedContent) === null || _strippedContent2 === void 0 || _strippedContent2.push(contentNode);
24
+ return;
25
+ }
26
+ if (!strippedContent) {
27
+ strippedContent = content.slice(0, index);
28
+ }
29
+ var strippedNode = _objectSpread({}, contentNode);
30
+ if (hasAnnotationMark) {
31
+ var _contentNode$marks2;
32
+ var marks = (_contentNode$marks2 = contentNode.marks) === null || _contentNode$marks2 === void 0 ? void 0 : _contentNode$marks2.filter(function (mark) {
33
+ return mark.type !== 'annotation';
34
+ });
35
+ if (marks && marks.length > 0) {
36
+ strippedNode.marks = marks;
37
+ } else {
38
+ delete strippedNode.marks;
39
+ }
40
+ }
41
+ if (hasContentChanged && childContent) {
42
+ strippedNode.content = childContent;
43
+ }
44
+ strippedContent.push(strippedNode);
45
+ });
46
+ return strippedContent !== null && strippedContent !== void 0 ? strippedContent : content;
47
+ };
48
+ export { _stripAnnotationMarksFromJSONContent as stripAnnotationMarksFromJSONContent };
3
49
  export var convertSyncBlockPMNodeToSyncBlockData = function convertSyncBlockPMNodeToSyncBlockData(node) {
50
+ var content = node.content.toJSON();
4
51
  return {
5
52
  blockInstanceId: node.attrs.localId,
6
- content: node.content.toJSON(),
53
+ content: fg('platform_synced_block_patch_12') ? _stripAnnotationMarksFromJSONContent(content) : content,
7
54
  resourceId: node.attrs.resourceId
8
55
  };
9
56
  };
@@ -31,6 +31,7 @@ export type ParsedBlockSubscriptionData = {
31
31
  };
32
32
  type SubscriptionCallback = (data: ParsedBlockSubscriptionData) => void;
33
33
  type ErrorCallback = (error: Error) => void;
34
+ type CompleteCallback = () => void;
34
35
  type Unsubscribe = () => void;
35
36
  /**
36
37
  * Extracts a meaningful error message from the error: GraphQL WebSocket Error: {"isTrusted":true}
@@ -47,5 +48,5 @@ export declare const extractGraphQLWSErrorMessage: (error: unknown) => string;
47
48
  * @param onError - Optional callback function invoked on subscription errors
48
49
  * @returns Unsubscribe function to close the subscription
49
50
  */
50
- export declare const subscribeToBlockUpdates: (blockAri: string, onData: SubscriptionCallback, onError?: ErrorCallback) => Unsubscribe;
51
+ export declare const subscribeToBlockUpdates: (blockAri: string, onData: SubscriptionCallback, onError?: ErrorCallback, onComplete?: CompleteCallback) => Unsubscribe;
51
52
  export {};
@@ -1 +1 @@
1
- export type { ADFFetchProvider, ADFWriteProvider, BatchFetchConfig, BlockNodeIdentifiers, BlockSubscriptionErrorCallback, BlockUpdateCallback, SyncBlockDataProviderInterface, SyncBlockInstance, MediaEmojiProviderOptions, SyncedBlockRendererProviderOptions, SyncBlockRendererProviderCreator, SyncedBlockRendererDataProviders, Unsubscribe, UpdateReferenceSyncBlockResult, WriteSyncBlockResult, SyncBlockParentInfo, SyncBlockSourceInfo, SyncBlockJiraIssueType, } from '../providers/types';
1
+ export type { ADFFetchProvider, ADFWriteProvider, BatchFetchConfig, BlockNodeIdentifiers, BlockSubscriptionCompleteCallback, BlockSubscriptionErrorCallback, BlockUpdateCallback, SyncBlockDataProviderInterface, SyncBlockInstance, MediaEmojiProviderOptions, SyncedBlockRendererProviderOptions, SyncBlockRendererProviderCreator, SyncedBlockRendererDataProviders, Unsubscribe, UpdateReferenceSyncBlockResult, WriteSyncBlockResult, SyncBlockParentInfo, SyncBlockSourceInfo, SyncBlockJiraIssueType, } from '../providers/types';
@@ -73,7 +73,7 @@ declare class BlockServiceADFFetchProvider implements ADFFetchProvider {
73
73
  * @param onError - Optional callback function invoked on subscription errors
74
74
  * @returns Unsubscribe function to stop receiving updates
75
75
  */
76
- subscribeToBlockUpdates(resourceId: ResourceId, onUpdate: (data: SyncBlockInstance) => void, onError?: (error: Error) => void): () => void;
76
+ subscribeToBlockUpdates(resourceId: ResourceId, onUpdate: (data: SyncBlockInstance) => void, onError?: (error: Error) => void, onComplete?: () => void): () => void;
77
77
  }
78
78
  interface BlockServiceADFWriteProviderProps {
79
79
  cloudId: string;
@@ -98,7 +98,7 @@ export declare class SyncedBlockProvider extends SyncBlockDataProviderInterface
98
98
  * @param onError - Optional callback function invoked on subscription errors
99
99
  * @returns Unsubscribe function to stop receiving updates, or undefined if not supported
100
100
  */
101
- subscribeToBlockUpdates(resourceId: string, onUpdate: BlockUpdateCallback, onError?: BlockSubscriptionErrorCallback): Unsubscribe | undefined;
101
+ subscribeToBlockUpdates(resourceId: string, onUpdate: BlockUpdateCallback, onError?: BlockSubscriptionErrorCallback, onComplete?: () => void): Unsubscribe | undefined;
102
102
  }
103
103
  type UseMemoizedSyncedBlockProviderProps = {
104
104
  fetchProvider: ADFFetchProvider;
@@ -92,6 +92,7 @@ export type BatchFetchConfig = {
92
92
  };
93
93
  export type BlockUpdateCallback = (data: SyncBlockInstance) => void;
94
94
  export type BlockSubscriptionErrorCallback = (error: Error) => void;
95
+ export type BlockSubscriptionCompleteCallback = () => void;
95
96
  export type Unsubscribe = () => void;
96
97
  export interface ADFFetchProvider {
97
98
  batchFetchData: (blockNodeIdentifiers: BlockNodeIdentifiers[], config?: BatchFetchConfig) => Promise<SyncBlockInstance[]>;
@@ -100,7 +101,7 @@ export interface ADFFetchProvider {
100
101
  /**
101
102
  * Subscribes to real-time updates for a specific block.
102
103
  */
103
- subscribeToBlockUpdates?: (resourceId: ResourceId, onUpdate: BlockUpdateCallback, onError?: BlockSubscriptionErrorCallback) => Unsubscribe;
104
+ subscribeToBlockUpdates?: (resourceId: ResourceId, onUpdate: BlockUpdateCallback, onError?: BlockSubscriptionErrorCallback, onComplete?: BlockSubscriptionCompleteCallback) => Unsubscribe;
104
105
  }
105
106
  export interface ADFWriteProvider {
106
107
  createData: (data: SyncBlockData) => Promise<WriteSyncBlockResult>;
@@ -174,9 +175,10 @@ export declare abstract class SyncBlockDataProviderInterface extends NodeDataPro
174
175
  * @param resourceId - The resource ID of the block to subscribe to
175
176
  * @param onUpdate - Callback function invoked when the block is updated
176
177
  * @param onError - Optional callback function invoked on subscription errors
178
+ * @param onComplete - Optional callback function invoked when the subscription completes
177
179
  * @returns Unsubscribe function to stop receiving updates, or undefined if not supported
178
180
  */
179
- subscribeToBlockUpdates?(resourceId: ResourceId, onUpdate: BlockUpdateCallback, onError?: BlockSubscriptionErrorCallback): Unsubscribe | undefined;
181
+ subscribeToBlockUpdates?(resourceId: ResourceId, onUpdate: BlockUpdateCallback, onError?: BlockSubscriptionErrorCallback, onComplete?: BlockSubscriptionCompleteCallback): Unsubscribe | undefined;
180
182
  }
181
183
  export type SubscriptionCallback = (data: SyncBlockInstance) => void;
182
184
  export type TitleSubscriptionCallback = (title: string) => void;
@@ -65,6 +65,7 @@ export declare class ReferenceSyncBlockStoreManager {
65
65
  generateResourceIdForReference(sourceId: ResourceId): ResourceId;
66
66
  updateFireAnalyticsEvent(fireAnalyticsEvent?: (payload: RendererSyncBlockEventPayload) => void): void;
67
67
  getInitialSyncBlockData(resourceId: ResourceId): SyncBlockInstance | undefined;
68
+ private stripAnnotationMarksFromReferenceData;
68
69
  private updateSessionCache;
69
70
  private getFromSessionCache;
70
71
  fetchSyncBlockSourceInfoBySourceAri(sourceAri: string, hasAccess?: boolean): Promise<SyncBlockSourceInfo | undefined>;
@@ -26,6 +26,11 @@ export declare class SyncBlockSubscriptionManager {
26
26
  private subscriptionChangeListeners;
27
27
  private useRealTimeSubscriptions;
28
28
  private pendingCacheDeletions;
29
+ private static readonly INITIAL_RETRY_DELAY_MS;
30
+ private static readonly RETRY_BACKOFF_MULTIPLIER;
31
+ private static readonly MAX_RETRY_ATTEMPTS;
32
+ private retryAttempts;
33
+ private pendingRetries;
29
34
  constructor(deps: SyncBlockSubscriptionManagerDeps);
30
35
  /**
31
36
  * Returns the subscriptions map. Used by external consumers (e.g. batch fetcher, flush)
@@ -48,6 +53,24 @@ export declare class SyncBlockSubscriptionManager {
48
53
  */
49
54
  notifySubscriptionCallbacks(resourceId: ResourceId, syncBlock: SyncBlockInstance): void;
50
55
  setupSubscription(resourceId: ResourceId): void;
56
+ /**
57
+ * Handles subscription termination (complete or error) by cleaning up the
58
+ * stale entry and scheduling a reconnection with exponential backoff.
59
+ */
60
+ private handleSubscriptionTerminated;
61
+ /**
62
+ * Schedules a reconnection attempt with exponential backoff.
63
+ * Delay = INITIAL_RETRY_DELAY_MS * (RETRY_BACKOFF_MULTIPLIER ^ attempts)
64
+ * e.g. 1s, 2s, 4s, 8s, 16s
65
+ */
66
+ private scheduleReconnection;
67
+ /**
68
+ * Resets the retry counter for a resource. Called when a successful
69
+ * update is received, indicating the subscription is healthy.
70
+ */
71
+ private resetRetryCount;
72
+ private cancelPendingRetry;
73
+ private cancelAllPendingRetries;
51
74
  cleanupSubscription(resourceId: ResourceId): void;
52
75
  setupSubscriptionsForAllBlocks(): void;
53
76
  cleanupAll(): void;
@@ -1,6 +1,7 @@
1
- import type { JSONNode } from '@atlaskit/editor-json-transformer';
1
+ import type { JSONNode } from '@atlaskit/editor-json-transformer/types';
2
2
  import type { Node as PMNode } from '@atlaskit/editor-prosemirror/model';
3
3
  import type { SyncBlockData, BlockInstanceId, ResourceId, SyncBlockNode, SyncBlockProduct } from '../common/types';
4
+ export declare const stripAnnotationMarksFromJSONContent: <T extends JSONNode | undefined>(content: T[]) => T[];
4
5
  export declare const convertSyncBlockPMNodeToSyncBlockData: (node: PMNode) => SyncBlockData;
5
6
  export declare const createSyncBlockNode: (localId: BlockInstanceId, resourceId: ResourceId) => SyncBlockNode;
6
7
  export declare const convertSyncBlockJSONNodeToSyncBlockNode: (node: JSONNode) => SyncBlockNode | undefined;
@@ -31,6 +31,7 @@ export type ParsedBlockSubscriptionData = {
31
31
  };
32
32
  type SubscriptionCallback = (data: ParsedBlockSubscriptionData) => void;
33
33
  type ErrorCallback = (error: Error) => void;
34
+ type CompleteCallback = () => void;
34
35
  type Unsubscribe = () => void;
35
36
  /**
36
37
  * Extracts a meaningful error message from the error: GraphQL WebSocket Error: {"isTrusted":true}
@@ -47,5 +48,5 @@ export declare const extractGraphQLWSErrorMessage: (error: unknown) => string;
47
48
  * @param onError - Optional callback function invoked on subscription errors
48
49
  * @returns Unsubscribe function to close the subscription
49
50
  */
50
- export declare const subscribeToBlockUpdates: (blockAri: string, onData: SubscriptionCallback, onError?: ErrorCallback) => Unsubscribe;
51
+ export declare const subscribeToBlockUpdates: (blockAri: string, onData: SubscriptionCallback, onError?: ErrorCallback, onComplete?: CompleteCallback) => Unsubscribe;
51
52
  export {};
@@ -1 +1 @@
1
- export type { ADFFetchProvider, ADFWriteProvider, BatchFetchConfig, BlockNodeIdentifiers, BlockSubscriptionErrorCallback, BlockUpdateCallback, SyncBlockDataProviderInterface, SyncBlockInstance, MediaEmojiProviderOptions, SyncedBlockRendererProviderOptions, SyncBlockRendererProviderCreator, SyncedBlockRendererDataProviders, Unsubscribe, UpdateReferenceSyncBlockResult, WriteSyncBlockResult, SyncBlockParentInfo, SyncBlockSourceInfo, SyncBlockJiraIssueType, } from '../providers/types';
1
+ export type { ADFFetchProvider, ADFWriteProvider, BatchFetchConfig, BlockNodeIdentifiers, BlockSubscriptionCompleteCallback, BlockSubscriptionErrorCallback, BlockUpdateCallback, SyncBlockDataProviderInterface, SyncBlockInstance, MediaEmojiProviderOptions, SyncedBlockRendererProviderOptions, SyncBlockRendererProviderCreator, SyncedBlockRendererDataProviders, Unsubscribe, UpdateReferenceSyncBlockResult, WriteSyncBlockResult, SyncBlockParentInfo, SyncBlockSourceInfo, SyncBlockJiraIssueType, } from '../providers/types';
@@ -73,7 +73,7 @@ declare class BlockServiceADFFetchProvider implements ADFFetchProvider {
73
73
  * @param onError - Optional callback function invoked on subscription errors
74
74
  * @returns Unsubscribe function to stop receiving updates
75
75
  */
76
- subscribeToBlockUpdates(resourceId: ResourceId, onUpdate: (data: SyncBlockInstance) => void, onError?: (error: Error) => void): () => void;
76
+ subscribeToBlockUpdates(resourceId: ResourceId, onUpdate: (data: SyncBlockInstance) => void, onError?: (error: Error) => void, onComplete?: () => void): () => void;
77
77
  }
78
78
  interface BlockServiceADFWriteProviderProps {
79
79
  cloudId: string;
@@ -98,7 +98,7 @@ export declare class SyncedBlockProvider extends SyncBlockDataProviderInterface
98
98
  * @param onError - Optional callback function invoked on subscription errors
99
99
  * @returns Unsubscribe function to stop receiving updates, or undefined if not supported
100
100
  */
101
- subscribeToBlockUpdates(resourceId: string, onUpdate: BlockUpdateCallback, onError?: BlockSubscriptionErrorCallback): Unsubscribe | undefined;
101
+ subscribeToBlockUpdates(resourceId: string, onUpdate: BlockUpdateCallback, onError?: BlockSubscriptionErrorCallback, onComplete?: () => void): Unsubscribe | undefined;
102
102
  }
103
103
  type UseMemoizedSyncedBlockProviderProps = {
104
104
  fetchProvider: ADFFetchProvider;
@@ -92,6 +92,7 @@ export type BatchFetchConfig = {
92
92
  };
93
93
  export type BlockUpdateCallback = (data: SyncBlockInstance) => void;
94
94
  export type BlockSubscriptionErrorCallback = (error: Error) => void;
95
+ export type BlockSubscriptionCompleteCallback = () => void;
95
96
  export type Unsubscribe = () => void;
96
97
  export interface ADFFetchProvider {
97
98
  batchFetchData: (blockNodeIdentifiers: BlockNodeIdentifiers[], config?: BatchFetchConfig) => Promise<SyncBlockInstance[]>;
@@ -100,7 +101,7 @@ export interface ADFFetchProvider {
100
101
  /**
101
102
  * Subscribes to real-time updates for a specific block.
102
103
  */
103
- subscribeToBlockUpdates?: (resourceId: ResourceId, onUpdate: BlockUpdateCallback, onError?: BlockSubscriptionErrorCallback) => Unsubscribe;
104
+ subscribeToBlockUpdates?: (resourceId: ResourceId, onUpdate: BlockUpdateCallback, onError?: BlockSubscriptionErrorCallback, onComplete?: BlockSubscriptionCompleteCallback) => Unsubscribe;
104
105
  }
105
106
  export interface ADFWriteProvider {
106
107
  createData: (data: SyncBlockData) => Promise<WriteSyncBlockResult>;
@@ -174,9 +175,10 @@ export declare abstract class SyncBlockDataProviderInterface extends NodeDataPro
174
175
  * @param resourceId - The resource ID of the block to subscribe to
175
176
  * @param onUpdate - Callback function invoked when the block is updated
176
177
  * @param onError - Optional callback function invoked on subscription errors
178
+ * @param onComplete - Optional callback function invoked when the subscription completes
177
179
  * @returns Unsubscribe function to stop receiving updates, or undefined if not supported
178
180
  */
179
- subscribeToBlockUpdates?(resourceId: ResourceId, onUpdate: BlockUpdateCallback, onError?: BlockSubscriptionErrorCallback): Unsubscribe | undefined;
181
+ subscribeToBlockUpdates?(resourceId: ResourceId, onUpdate: BlockUpdateCallback, onError?: BlockSubscriptionErrorCallback, onComplete?: BlockSubscriptionCompleteCallback): Unsubscribe | undefined;
180
182
  }
181
183
  export type SubscriptionCallback = (data: SyncBlockInstance) => void;
182
184
  export type TitleSubscriptionCallback = (title: string) => void;
@@ -65,6 +65,7 @@ export declare class ReferenceSyncBlockStoreManager {
65
65
  generateResourceIdForReference(sourceId: ResourceId): ResourceId;
66
66
  updateFireAnalyticsEvent(fireAnalyticsEvent?: (payload: RendererSyncBlockEventPayload) => void): void;
67
67
  getInitialSyncBlockData(resourceId: ResourceId): SyncBlockInstance | undefined;
68
+ private stripAnnotationMarksFromReferenceData;
68
69
  private updateSessionCache;
69
70
  private getFromSessionCache;
70
71
  fetchSyncBlockSourceInfoBySourceAri(sourceAri: string, hasAccess?: boolean): Promise<SyncBlockSourceInfo | undefined>;
@@ -26,6 +26,11 @@ export declare class SyncBlockSubscriptionManager {
26
26
  private subscriptionChangeListeners;
27
27
  private useRealTimeSubscriptions;
28
28
  private pendingCacheDeletions;
29
+ private static readonly INITIAL_RETRY_DELAY_MS;
30
+ private static readonly RETRY_BACKOFF_MULTIPLIER;
31
+ private static readonly MAX_RETRY_ATTEMPTS;
32
+ private retryAttempts;
33
+ private pendingRetries;
29
34
  constructor(deps: SyncBlockSubscriptionManagerDeps);
30
35
  /**
31
36
  * Returns the subscriptions map. Used by external consumers (e.g. batch fetcher, flush)
@@ -48,6 +53,24 @@ export declare class SyncBlockSubscriptionManager {
48
53
  */
49
54
  notifySubscriptionCallbacks(resourceId: ResourceId, syncBlock: SyncBlockInstance): void;
50
55
  setupSubscription(resourceId: ResourceId): void;
56
+ /**
57
+ * Handles subscription termination (complete or error) by cleaning up the
58
+ * stale entry and scheduling a reconnection with exponential backoff.
59
+ */
60
+ private handleSubscriptionTerminated;
61
+ /**
62
+ * Schedules a reconnection attempt with exponential backoff.
63
+ * Delay = INITIAL_RETRY_DELAY_MS * (RETRY_BACKOFF_MULTIPLIER ^ attempts)
64
+ * e.g. 1s, 2s, 4s, 8s, 16s
65
+ */
66
+ private scheduleReconnection;
67
+ /**
68
+ * Resets the retry counter for a resource. Called when a successful
69
+ * update is received, indicating the subscription is healthy.
70
+ */
71
+ private resetRetryCount;
72
+ private cancelPendingRetry;
73
+ private cancelAllPendingRetries;
51
74
  cleanupSubscription(resourceId: ResourceId): void;
52
75
  setupSubscriptionsForAllBlocks(): void;
53
76
  cleanupAll(): void;
@@ -1,6 +1,7 @@
1
- import type { JSONNode } from '@atlaskit/editor-json-transformer';
1
+ import type { JSONNode } from '@atlaskit/editor-json-transformer/types';
2
2
  import type { Node as PMNode } from '@atlaskit/editor-prosemirror/model';
3
3
  import type { SyncBlockData, BlockInstanceId, ResourceId, SyncBlockNode, SyncBlockProduct } from '../common/types';
4
+ export declare const stripAnnotationMarksFromJSONContent: <T extends JSONNode | undefined>(content: T[]) => T[];
4
5
  export declare const convertSyncBlockPMNodeToSyncBlockData: (node: PMNode) => SyncBlockData;
5
6
  export declare const createSyncBlockNode: (localId: BlockInstanceId, resourceId: ResourceId) => SyncBlockNode;
6
7
  export declare const convertSyncBlockJSONNodeToSyncBlockNode: (node: JSONNode) => SyncBlockNode | undefined;
package/package.json CHANGED
@@ -29,7 +29,7 @@
29
29
  "@atlaskit/editor-prosemirror": "^7.3.0",
30
30
  "@atlaskit/node-data-provider": "^11.1.0",
31
31
  "@atlaskit/platform-feature-flags": "^1.1.0",
32
- "@atlaskit/tmp-editor-statsig": "^82.0.0",
32
+ "@atlaskit/tmp-editor-statsig": "^82.1.0",
33
33
  "@babel/runtime": "^7.0.0",
34
34
  "@compiled/react": "^0.20.0",
35
35
  "graphql-ws": "^5.14.2",
@@ -38,7 +38,7 @@
38
38
  "uuid": "^3.1.0"
39
39
  },
40
40
  "peerDependencies": {
41
- "@atlaskit/editor-common": "^114.36.0",
41
+ "@atlaskit/editor-common": "^114.39.0",
42
42
  "react": "^18.2.0"
43
43
  },
44
44
  "devDependencies": {
@@ -81,7 +81,7 @@
81
81
  }
82
82
  },
83
83
  "name": "@atlaskit/editor-synced-block-provider",
84
- "version": "6.6.5",
84
+ "version": "6.6.7",
85
85
  "description": "Synced Block Provider for @atlaskit/editor-plugin-synced-block",
86
86
  "author": "Atlassian Pty Ltd",
87
87
  "license": "Apache-2.0",