@atlaskit/collab-provider 8.7.0 → 8.8.1

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 (44) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cjs/channel.js +1 -2
  3. package/dist/cjs/version-wrapper.js +1 -1
  4. package/dist/cjs/version.json +1 -1
  5. package/dist/es2019/channel.js +1 -2
  6. package/dist/es2019/version-wrapper.js +1 -1
  7. package/dist/es2019/version.json +1 -1
  8. package/dist/esm/channel.js +1 -2
  9. package/dist/esm/version-wrapper.js +1 -1
  10. package/dist/esm/version.json +1 -1
  11. package/dist/types/feature-flags/types.d.ts +1 -1
  12. package/dist/types/helpers/const.d.ts +0 -1
  13. package/dist/types-ts4.0/analytics/analytics-helper.d.ts +11 -0
  14. package/dist/types-ts4.0/analytics/performance.d.ts +15 -0
  15. package/dist/types-ts4.0/analytics/ufo.d.ts +3 -0
  16. package/dist/types-ts4.0/channel.d.ts +47 -0
  17. package/dist/types-ts4.0/config.d.ts +5 -0
  18. package/dist/types-ts4.0/connectivity/network.d.ts +17 -0
  19. package/dist/types-ts4.0/connectivity/reconnect-helper.d.ts +8 -0
  20. package/dist/types-ts4.0/connectivity/singleton.d.ts +3 -0
  21. package/dist/types-ts4.0/disconnected-reason-mapper.d.ts +16 -0
  22. package/dist/types-ts4.0/document/catchup.d.ts +9 -0
  23. package/dist/types-ts4.0/document/document-service.d.ts +86 -0
  24. package/dist/types-ts4.0/document/step-queue-state.d.ts +16 -0
  25. package/dist/types-ts4.0/emitter.d.ts +19 -0
  26. package/dist/types-ts4.0/errors/error-code-mapper.d.ts +2 -0
  27. package/dist/types-ts4.0/errors/error-types.d.ts +443 -0
  28. package/dist/types-ts4.0/feature-flags/__test__/index.unit.d.ts +1 -0
  29. package/dist/types-ts4.0/feature-flags/index.d.ts +9 -0
  30. package/dist/types-ts4.0/feature-flags/types.d.ts +13 -0
  31. package/dist/types-ts4.0/helpers/const.d.ts +183 -0
  32. package/dist/types-ts4.0/helpers/utils.d.ts +5 -0
  33. package/dist/types-ts4.0/index.d.ts +4 -0
  34. package/dist/types-ts4.0/metadata/metadata-service.d.ts +25 -0
  35. package/dist/types-ts4.0/participants/participants-helper.d.ts +14 -0
  36. package/dist/types-ts4.0/participants/participants-service.d.ts +70 -0
  37. package/dist/types-ts4.0/participants/participants-state.d.ts +13 -0
  38. package/dist/types-ts4.0/participants/telepointers-helper.d.ts +4 -0
  39. package/dist/types-ts4.0/provider/commit-step.d.ts +25 -0
  40. package/dist/types-ts4.0/provider/index.d.ts +162 -0
  41. package/dist/types-ts4.0/socket-io-provider.d.ts +5 -0
  42. package/dist/types-ts4.0/types.d.ts +265 -0
  43. package/dist/types-ts4.0/version-wrapper.d.ts +3 -0
  44. package/package.json +10 -10
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @atlaskit/collab-provider
2
2
 
3
+ ## 8.8.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [`c0f3b955ee6`](https://bitbucket.org/atlassian/atlassian-frontend/commits/c0f3b955ee6) - remove the deprecated analytics field 'ttlEnabled'
8
+
9
+ ## 8.8.0
10
+
11
+ ### Minor Changes
12
+
13
+ - [`56507598609`](https://bitbucket.org/atlassian/atlassian-frontend/commits/56507598609) - Skip minor dependency bump
14
+
15
+ ### Patch Changes
16
+
17
+ - Updated dependencies
18
+
3
19
  ## 8.7.0
4
20
 
5
21
  ### Minor Changes
@@ -151,8 +151,7 @@ var Channel = /*#__PURE__*/function (_Emitter) {
151
151
  // TODO: detect when document init fails and fire corresponding event for it
152
152
  _const.EVENT_STATUS.SUCCESS, {
153
153
  latency: measure === null || measure === void 0 ? void 0 : measure.duration,
154
- resetReason: data === null || data === void 0 ? void 0 : data.resetReason,
155
- ttlEnabled: data === null || data === void 0 ? void 0 : data.ttlEnabled
154
+ resetReason: data === null || data === void 0 ? void 0 : data.resetReason
156
155
  });
157
156
  var doc = data.doc,
158
157
  version = data.version,
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.version = exports.nextMajorVersion = exports.name = void 0;
7
7
  var name = "@atlaskit/collab-provider";
8
8
  exports.name = name;
9
- var version = "8.7.0";
9
+ var version = "8.8.1";
10
10
  exports.version = version;
11
11
  var nextMajorVersion = function nextMajorVersion() {
12
12
  return [Number(version.split('.')[0]) + 1, 0, 0].join('.');
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/collab-provider",
3
- "version": "8.7.0",
3
+ "version": "8.8.1",
4
4
  "sideEffects": false
5
5
  }
@@ -119,8 +119,7 @@ export class Channel extends Emitter {
119
119
  // TODO: detect when document init fails and fire corresponding event for it
120
120
  EVENT_STATUS.SUCCESS, {
121
121
  latency: measure === null || measure === void 0 ? void 0 : measure.duration,
122
- resetReason: data === null || data === void 0 ? void 0 : data.resetReason,
123
- ttlEnabled: data === null || data === void 0 ? void 0 : data.ttlEnabled
122
+ resetReason: data === null || data === void 0 ? void 0 : data.resetReason
124
123
  });
125
124
  const {
126
125
  doc,
@@ -1,5 +1,5 @@
1
1
  export const name = "@atlaskit/collab-provider";
2
- export const version = "8.7.0";
2
+ export const version = "8.8.1";
3
3
  export const nextMajorVersion = () => {
4
4
  return [Number(version.split('.')[0]) + 1, 0, 0].join('.');
5
5
  };
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/collab-provider",
3
- "version": "8.7.0",
3
+ "version": "8.8.1",
4
4
  "sideEffects": false
5
5
  }
@@ -144,8 +144,7 @@ export var Channel = /*#__PURE__*/function (_Emitter) {
144
144
  // TODO: detect when document init fails and fire corresponding event for it
145
145
  EVENT_STATUS.SUCCESS, {
146
146
  latency: measure === null || measure === void 0 ? void 0 : measure.duration,
147
- resetReason: data === null || data === void 0 ? void 0 : data.resetReason,
148
- ttlEnabled: data === null || data === void 0 ? void 0 : data.ttlEnabled
147
+ resetReason: data === null || data === void 0 ? void 0 : data.resetReason
149
148
  });
150
149
  var doc = data.doc,
151
150
  version = data.version,
@@ -1,5 +1,5 @@
1
1
  export var name = "@atlaskit/collab-provider";
2
- export var version = "8.7.0";
2
+ export var version = "8.8.1";
3
3
  export var nextMajorVersion = function nextMajorVersion() {
4
4
  return [Number(version.split('.')[0]) + 1, 0, 0].join('.');
5
5
  };
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/collab-provider",
3
- "version": "8.7.0",
3
+ "version": "8.8.1",
4
4
  "sideEffects": false
5
5
  }
@@ -7,5 +7,5 @@ export interface WithNCSFeatureFlags {
7
7
  export declare type RequiredNCSFeatureFlags = Record<keyof Required<NCSFeatureFlags>, boolean>;
8
8
  export declare type NCSFeatureFlagsMap = Record<keyof Required<NCSFeatureFlags>, string>;
9
9
  export declare const supportedProducts: readonly ["confluence"];
10
- export declare type SupportedProduct = typeof supportedProducts[number];
10
+ export declare type SupportedProduct = (typeof supportedProducts)[number];
11
11
  export declare type ProductKeys = Record<SupportedProduct, NCSFeatureFlagsMap>;
@@ -117,7 +117,6 @@ declare type DocumentInitSuccessAnalyticsEvent = {
117
117
  eventStatus: EVENT_STATUS.SUCCESS;
118
118
  latency?: number;
119
119
  resetReason?: string;
120
- ttlEnabled?: boolean;
121
120
  };
122
121
  };
123
122
  declare type UpdateParticipantsSuccessAnalyticsEvent = {
@@ -0,0 +1,11 @@
1
+ import type { AnalyticsWebClient } from '@atlaskit/analytics-listeners';
2
+ import type { ActionAnalyticsEvent, EVENT_STATUS } from '../helpers/const';
3
+ export default class AnalyticsHelper {
4
+ analyticsClient: AnalyticsWebClient | undefined;
5
+ getAnalyticsClient: Promise<AnalyticsWebClient> | undefined;
6
+ documentAri: string;
7
+ constructor(documentAri: string, analyticsClient?: AnalyticsWebClient, getAnalyticsClient?: Promise<AnalyticsWebClient>);
8
+ sendErrorEvent(error: unknown, errorMessage: string): void;
9
+ sendActionEvent(action: ActionAnalyticsEvent['eventAction'], status: EVENT_STATUS, attributes?: Omit<ActionAnalyticsEvent['attributes'], 'documentAri' | 'eventStatus'>): void;
10
+ private sendEvent;
11
+ }
@@ -0,0 +1,15 @@
1
+ import AnalyticsHelper from './analytics-helper';
2
+ export declare enum MEASURE_NAME {
3
+ SOCKET_CONNECT = "socketConnect",
4
+ DOCUMENT_INIT = "documentInit",
5
+ COMMIT_UNCONFIRMED_STEPS = "commitUnconfirmedSteps",
6
+ PUBLISH_PAGE = "publishPage",
7
+ GET_CURRENT_STATE = "getCurrentState"
8
+ }
9
+ export declare const isPerformanceAPIAvailable: () => boolean;
10
+ export declare const measureMap: Map<string, number>;
11
+ export declare function startMeasure(measureName: MEASURE_NAME, analyticsHelper: AnalyticsHelper | undefined): void;
12
+ export declare function stopMeasure(measureName: MEASURE_NAME, analyticsHelper: AnalyticsHelper | undefined, onMeasureComplete?: (duration: number, startTime: number) => void): {
13
+ duration: number;
14
+ startTime: number;
15
+ } | undefined;
@@ -0,0 +1,3 @@
1
+ import { UFOExperience } from '@atlaskit/ufo';
2
+ import AnalyticsHelper from './analytics-helper';
3
+ export declare const createDocInitExp: (analyticsHelper: AnalyticsHelper | undefined) => UFOExperience | undefined;
@@ -0,0 +1,47 @@
1
+ import { Emitter } from './emitter';
2
+ import type { Config, ChannelEvent, CatchupResponse, Metadata } from './types';
3
+ import type { Socket } from 'socket.io-client';
4
+ import AnalyticsHelper from './analytics/analytics-helper';
5
+ export declare class Channel extends Emitter<ChannelEvent> {
6
+ private connected;
7
+ private config;
8
+ private socket;
9
+ private reconnectHelper?;
10
+ private initialized;
11
+ private analyticsHelper?;
12
+ private initExperience?;
13
+ private token?;
14
+ private network;
15
+ constructor(config: Config, analyticsHelper: AnalyticsHelper);
16
+ getInitialized: () => boolean;
17
+ getConnected: () => boolean;
18
+ getSocket: () => Socket<import("@socket.io/component-emitter").DefaultEventsMap, import("@socket.io/component-emitter").DefaultEventsMap> | null;
19
+ getToken: () => string | undefined;
20
+ private setToken;
21
+ private unsetToken;
22
+ /**
23
+ * Connect to collab service using websockets
24
+ */
25
+ connect(shouldInitialize?: boolean): void;
26
+ private handlePermissionInvalidateToken;
27
+ private onConnectError;
28
+ private onReconnectError;
29
+ private onConnect;
30
+ private onReceiveData;
31
+ fetchCatchup: (fromVersion: number) => Promise<CatchupResponse>;
32
+ /**
33
+ * Send message to the back-end service over the channel. Timestamp will be added server side.
34
+ * @throws {NotInitializedError} Channel not initialized
35
+ * @throws {NotConnectedError} Channel not connected
36
+ */
37
+ broadcast: <K extends keyof ChannelEvent>(type: K, data: Omit<ChannelEvent[K], "timestamp">, callback?: Function | undefined) => void;
38
+ /**
39
+ * Send metadata to the back-end service over the channel
40
+ * @throws {NotInitializedError} Channel not initialized
41
+ * @throws {NotConnectedError} Channel not connected
42
+ */
43
+ sendMetadata: (metadata: Metadata) => void;
44
+ sendPresenceJoined(): void;
45
+ onOnlineHandler: () => void;
46
+ disconnect(): void;
47
+ }
@@ -0,0 +1,5 @@
1
+ export declare const SOCKET_IO_OPTIONS: {
2
+ RECONNECTION_DELAY_MAX: number;
3
+ RECONNECTION_DELAY: number;
4
+ RANDOMIZATION_FACTOR: number;
5
+ };
@@ -0,0 +1,17 @@
1
+ export declare enum NetworkStatus {
2
+ ONLINE = "ONLINE",
3
+ OFFLINE = "OFFLINE"
4
+ }
5
+ export interface NetworkProps {
6
+ initialStatus?: NetworkStatus;
7
+ onlineCallback?: () => void;
8
+ }
9
+ export default class Network {
10
+ status?: NetworkStatus;
11
+ onlineCallback?: () => void;
12
+ constructor(props?: NetworkProps);
13
+ private offlineHandler;
14
+ private onlineHandler;
15
+ getStatus(): NetworkStatus | null;
16
+ destroy(): void;
17
+ }
@@ -0,0 +1,8 @@
1
+ export default class ReconnectHelper {
2
+ failedReconnectCount: number;
3
+ constructor();
4
+ private onlineHandler;
5
+ countReconnectError(): void;
6
+ isLikelyNetworkIssue(): boolean;
7
+ destroy(): void;
8
+ }
@@ -0,0 +1,3 @@
1
+ import Network from './network';
2
+ declare const network: Network;
3
+ export { network };
@@ -0,0 +1,16 @@
1
+ export declare const socketIOReasons: {
2
+ IO_CLIENT_DISCONNECT: string;
3
+ IO_SERVER_DISCONNECT: string;
4
+ TRANSPORT_CLOSED: string;
5
+ TRANSPORT_ERROR: string;
6
+ PING_TIMEOUT: string;
7
+ };
8
+ export declare enum DisconnectReason {
9
+ CLIENT_DISCONNECT = "CLIENT_DISCONNECT",
10
+ SERVER_DISCONNECT = "SERVER_DISCONNECT",
11
+ SOCKET_CLOSED = "SOCKET_CLOSED",
12
+ SOCKET_ERROR = "SOCKET_ERROR",
13
+ SOCKET_TIMEOUT = "SOCKET_TIMEOUT",
14
+ UNKNOWN_DISCONNECT = "UNKNOWN_DISCONNECT"
15
+ }
16
+ export declare const disconnectedReasonMapper: (reason: string) => DisconnectReason;
@@ -0,0 +1,9 @@
1
+ import type { CatchupOptions } from '../types';
2
+ import { Mapping, Step } from 'prosemirror-transform';
3
+ /**
4
+ * Rebase the steps based on the mapping pipeline.
5
+ * Some steps could be lost, if they are no longer
6
+ * invalid after rebased.
7
+ */
8
+ export declare function rebaseSteps(steps: readonly Step[], mapping: Mapping): Step[];
9
+ export declare const catchup: (opt: CatchupOptions) => Promise<void>;
@@ -0,0 +1,86 @@
1
+ /// <reference types="lodash" />
2
+ import AnalyticsHelper from '../analytics/analytics-helper';
3
+ import { CatchupResponse, ChannelEvent, CollabEvents, CollabInitPayload, StepsPayload } from '../types';
4
+ import type { Step as ProseMirrorStep } from 'prosemirror-transform';
5
+ import type { MetadataService } from '../metadata/metadata-service';
6
+ import { SyncUpErrorFunction } from '@atlaskit/editor-common/types';
7
+ import type { EditorState, Transaction } from 'prosemirror-state';
8
+ import { ResolvedEditorState } from '@atlaskit/editor-common/collab';
9
+ import { ParticipantsService } from '../participants/participants-service';
10
+ import type { InternalError } from '../errors/error-types';
11
+ export declare class DocumentService {
12
+ private participantsService;
13
+ private analyticsHelper;
14
+ private fetchCatchup;
15
+ private providerEmitCallback;
16
+ private broadcast;
17
+ private getUserId;
18
+ private onErrorHandled;
19
+ private metadataService;
20
+ private getState;
21
+ private onSyncUpError?;
22
+ private stepQueue;
23
+ private stepRejectCounter;
24
+ private clientId?;
25
+ /**
26
+ *
27
+ * @param participantsService - The participants service, used when users are detected active when making changes to the document
28
+ * and to emit their telepointers from steps they add
29
+ * @param analyticsHelper - Helper for analytics events
30
+ * @param fetchCatchup - Function to fetch "catchup" data, data required to rebase current steps to the latest version.
31
+ * @param providerEmitCallback - Callback for emitting events to listeners on the provider
32
+ * @param broadcastMetadata - Callback for broadcasting metadata changes to other clients
33
+ * @param broadcast - Callback for broadcasting events to other clients
34
+ * @param getUserId - Callback to fetch the current user's ID
35
+ * @param onErrorHandled - Callback to handle
36
+ */
37
+ constructor(participantsService: ParticipantsService, analyticsHelper: AnalyticsHelper | undefined, fetchCatchup: (fromVersion: number) => Promise<CatchupResponse>, providerEmitCallback: (evt: keyof CollabEvents, data: any) => void, broadcast: <K extends keyof ChannelEvent>(type: K, data: Omit<ChannelEvent[K], 'timestamp'>, callback?: Function) => void, getUserId: () => string | undefined, onErrorHandled: (error: InternalError) => void, metadataService: MetadataService);
38
+ /**
39
+ * To prevent calling catchup to often, use lodash throttle to reduce the frequency
40
+ */
41
+ throttledCatchup: import("lodash").DebouncedFunc<() => Promise<void>>;
42
+ /**
43
+ * Called when:
44
+ * * session established(offline -> online)
45
+ * * try to accept steps but version is behind.
46
+ */
47
+ private catchup;
48
+ getCurrentPmVersion: () => number;
49
+ private processQueue;
50
+ getCurrentState: () => Promise<ResolvedEditorState>;
51
+ private processSteps;
52
+ getUnconfirmedStepsOrigins: () => readonly Transaction<any>[] | undefined;
53
+ getUnconfirmedSteps: () => readonly ProseMirrorStep[] | undefined;
54
+ private applyLocalSteps;
55
+ /**
56
+ * Called when we receive steps from the service
57
+ */
58
+ onStepsAdded: (data: StepsPayload) => void;
59
+ onRestore: ({ doc, version, metadata }: CollabInitPayload) => void;
60
+ getFinalAcknowledgedState: () => Promise<ResolvedEditorState>;
61
+ updateDocument: ({ doc, version, metadata, reserveCursor, }: CollabInitPayload) => void;
62
+ /**
63
+ * Commit the unconfirmed local steps to the back-end service
64
+ * @throws {Error} Couldn't sync the steps after retrying 30 times
65
+ */
66
+ commitUnconfirmedSteps: () => Promise<void>;
67
+ setup({ getState, onSyncUpError, clientId, }: {
68
+ getState: () => EditorState;
69
+ onSyncUpError?: SyncUpErrorFunction;
70
+ clientId: number | string | undefined;
71
+ }): this;
72
+ /**
73
+ * We can use this function to throttle/delay
74
+ * Any send steps operation
75
+ *
76
+ * The getState function will return the current EditorState
77
+ * from the EditorView.
78
+ */
79
+ sendStepsFromCurrentState(): void;
80
+ onStepRejectedError: () => void;
81
+ /**
82
+ * Send steps from transaction to other participants
83
+ * It needs the superfluous arguments because we keep the interface of the send API the same as the Synchrony plugin
84
+ */
85
+ send(_tr: Transaction | null, _oldState: EditorState | null, newState: EditorState): void;
86
+ }
@@ -0,0 +1,16 @@
1
+ import { StepsPayload } from '../types';
2
+ export declare class StepQueueState {
3
+ private queuePaused;
4
+ private queue;
5
+ queueSteps(data: StepsPayload): void;
6
+ getQueue: () => StepsPayload[];
7
+ filterQueue: (condition: (stepsPayload: StepsPayload) => boolean) => void;
8
+ /**
9
+ * Get whether the document service has stopped processing new steps whilst it carries out processes such as catchup.
10
+ * Exposed for testing
11
+ */
12
+ isPaused: () => boolean;
13
+ pauseQueue: () => void;
14
+ resumeQueue: () => void;
15
+ shift: () => StepsPayload | undefined;
16
+ }
@@ -0,0 +1,19 @@
1
+ export declare class Emitter<T = any> {
2
+ private eventEmitter;
3
+ /**
4
+ * Emit events to subscribers
5
+ */
6
+ protected emit<K extends keyof T>(evt: K, data: T[K]): this;
7
+ /**
8
+ * Subscribe to events emitted by this provider
9
+ */
10
+ on<K extends keyof T>(evt: K, handler: (args: T[K]) => void): this;
11
+ /**
12
+ * Unsubscribe from events emitted by this provider
13
+ */
14
+ off<K extends keyof T>(evt: K, handler: (args: T[K]) => void): this;
15
+ /**
16
+ * Unsubscribe from all events emitted by this provider.
17
+ */
18
+ unsubscribeAll<K extends keyof T>(evt?: K): this;
19
+ }
@@ -0,0 +1,2 @@
1
+ import { InternalError, ProviderError } from './error-types';
2
+ export declare const errorCodeMapper: (error: InternalError) => ProviderError | undefined;