@atlaskit/collab-provider 8.4.0 → 8.6.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 +53 -0
- package/dist/cjs/analytics/analytics-helper.js +135 -0
- package/dist/cjs/analytics/performance.js +6 -5
- package/dist/cjs/channel.js +242 -223
- package/dist/cjs/document/catchup.js +142 -0
- package/dist/cjs/document/document-service.js +587 -0
- package/dist/cjs/document/step-queue-state.js +56 -0
- package/dist/cjs/errors/error-code-mapper.js +86 -67
- package/dist/cjs/errors/error-types.js +329 -21
- package/dist/cjs/helpers/utils.js +1 -12
- package/dist/cjs/index.js +8 -1
- package/dist/cjs/metadata/metadata-service.js +82 -0
- package/dist/cjs/participants/participants-helper.js +52 -0
- package/dist/cjs/participants/participants-service.js +259 -0
- package/dist/cjs/participants/participants-state.js +56 -0
- package/dist/cjs/{provider/telepointers.js → participants/telepointers-helper.js} +6 -6
- package/dist/cjs/provider/commit-step.js +14 -6
- package/dist/cjs/provider/index.js +291 -780
- package/dist/cjs/types.js +6 -1
- package/dist/cjs/version-wrapper.js +1 -1
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/analytics/{index.js → analytics-helper.js} +15 -4
- package/dist/es2019/analytics/performance.js +5 -6
- package/dist/es2019/channel.js +140 -113
- package/dist/es2019/{provider → document}/catchup.js +6 -4
- package/dist/es2019/document/document-service.js +472 -0
- package/dist/es2019/document/step-queue-state.js +35 -0
- package/dist/es2019/errors/error-code-mapper.js +87 -63
- package/dist/es2019/errors/error-types.js +221 -5
- package/dist/es2019/helpers/utils.js +0 -10
- package/dist/es2019/index.js +2 -1
- package/dist/es2019/metadata/metadata-service.js +61 -0
- package/dist/es2019/participants/participants-helper.js +25 -0
- package/dist/es2019/participants/participants-service.js +207 -0
- package/dist/es2019/participants/participants-state.js +30 -0
- package/dist/es2019/{provider/telepointers.js → participants/telepointers-helper.js} +2 -2
- package/dist/es2019/provider/commit-step.js +12 -5
- package/dist/es2019/provider/index.js +240 -640
- package/dist/es2019/types.js +8 -1
- package/dist/es2019/version-wrapper.js +1 -1
- package/dist/es2019/version.json +1 -1
- package/dist/esm/analytics/analytics-helper.js +128 -0
- package/dist/esm/analytics/performance.js +5 -6
- package/dist/esm/channel.js +243 -224
- package/dist/esm/document/catchup.js +133 -0
- package/dist/esm/document/document-service.js +579 -0
- package/dist/esm/document/step-queue-state.js +48 -0
- package/dist/esm/errors/error-code-mapper.js +87 -64
- package/dist/esm/errors/error-types.js +321 -18
- package/dist/esm/helpers/utils.js +0 -10
- package/dist/esm/index.js +2 -1
- package/dist/esm/metadata/metadata-service.js +74 -0
- package/dist/esm/participants/participants-helper.js +44 -0
- package/dist/esm/participants/participants-service.js +251 -0
- package/dist/esm/participants/participants-state.js +48 -0
- package/dist/esm/{provider/telepointers.js → participants/telepointers-helper.js} +4 -4
- package/dist/esm/provider/commit-step.js +12 -5
- package/dist/esm/provider/index.js +291 -779
- package/dist/esm/types.js +8 -1
- package/dist/esm/version-wrapper.js +1 -1
- package/dist/esm/version.json +1 -1
- package/dist/types/analytics/{index.d.ts → analytics-helper.d.ts} +3 -1
- package/dist/types/analytics/performance.d.ts +3 -1
- package/dist/types/analytics/ufo.d.ts +1 -1
- package/dist/types/channel.d.ts +13 -6
- package/dist/types/document/document-service.d.ts +86 -0
- package/dist/types/document/step-queue-state.d.ts +16 -0
- package/dist/types/errors/error-code-mapper.d.ts +2 -36
- package/dist/types/errors/error-types.d.ts +439 -4
- package/dist/types/helpers/const.d.ts +2 -2
- package/dist/types/helpers/utils.d.ts +0 -6
- package/dist/types/index.d.ts +3 -1
- package/dist/types/metadata/metadata-service.d.ts +25 -0
- package/dist/types/participants/participants-helper.d.ts +15 -0
- package/dist/types/participants/participants-service.d.ts +74 -0
- package/dist/types/participants/participants-state.d.ts +13 -0
- package/dist/types/participants/telepointers-helper.d.ts +4 -0
- package/dist/types/provider/commit-step.d.ts +17 -6
- package/dist/types/provider/index.d.ts +81 -78
- package/dist/types/types.d.ts +56 -31
- package/package.json +6 -6
- package/report.api.md +187 -21
- package/dist/cjs/analytics/index.js +0 -95
- package/dist/cjs/provider/catchup.js +0 -139
- package/dist/esm/analytics/index.js +0 -88
- package/dist/esm/provider/catchup.js +0 -130
- package/dist/types/provider/telepointers.d.ts +0 -5
- /package/dist/types/{provider → document}/catchup.d.ts +0 -0
package/dist/esm/types.js
CHANGED
|
@@ -1,7 +1,14 @@
|
|
|
1
|
+
// Initial draft
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @deprecated Use ProviderError type instead
|
|
5
|
+
*/
|
|
6
|
+
|
|
1
7
|
// Channel
|
|
2
8
|
|
|
3
9
|
export var AcknowledgementResponseTypes;
|
|
4
10
|
(function (AcknowledgementResponseTypes) {
|
|
5
11
|
AcknowledgementResponseTypes["SUCCESS"] = "SUCCESS";
|
|
6
12
|
AcknowledgementResponseTypes["ERROR"] = "ERROR";
|
|
7
|
-
})(AcknowledgementResponseTypes || (AcknowledgementResponseTypes = {}));
|
|
13
|
+
})(AcknowledgementResponseTypes || (AcknowledgementResponseTypes = {})); // ESS-2916 Type def for namespace status - lock/unlock
|
|
14
|
+
// Catchup
|
package/dist/esm/version.json
CHANGED
|
@@ -2,8 +2,10 @@ import type { AnalyticsWebClient } from '@atlaskit/analytics-listeners';
|
|
|
2
2
|
import type { ActionAnalyticsEvent, EVENT_STATUS } from '../helpers/const';
|
|
3
3
|
export default class AnalyticsHelper {
|
|
4
4
|
analyticsClient: AnalyticsWebClient | undefined;
|
|
5
|
+
getAnalyticsClient: Promise<AnalyticsWebClient> | undefined;
|
|
5
6
|
documentAri: string;
|
|
6
|
-
constructor(documentAri: string, analyticsClient?: AnalyticsWebClient);
|
|
7
|
+
constructor(documentAri: string, analyticsClient?: AnalyticsWebClient, getAnalyticsClient?: Promise<AnalyticsWebClient>);
|
|
7
8
|
sendErrorEvent(error: unknown, errorMessage: string): void;
|
|
8
9
|
sendActionEvent(action: ActionAnalyticsEvent['eventAction'], status: EVENT_STATUS, attributes?: Omit<ActionAnalyticsEvent['attributes'], 'documentAri' | 'eventStatus'>): void;
|
|
10
|
+
private sendEvent;
|
|
9
11
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import AnalyticsHelper from '
|
|
1
|
+
import AnalyticsHelper from './analytics-helper';
|
|
2
2
|
export declare enum MEASURE_NAME {
|
|
3
3
|
SOCKET_CONNECT = "socketConnect",
|
|
4
4
|
DOCUMENT_INIT = "documentInit",
|
|
@@ -6,6 +6,8 @@ export declare enum MEASURE_NAME {
|
|
|
6
6
|
PUBLISH_PAGE = "publishPage",
|
|
7
7
|
GET_CURRENT_STATE = "getCurrentState"
|
|
8
8
|
}
|
|
9
|
+
export declare const isPerformanceAPIAvailable: () => boolean;
|
|
10
|
+
export declare const measureMap: Map<string, number>;
|
|
9
11
|
export declare function startMeasure(measureName: MEASURE_NAME, analyticsHelper: AnalyticsHelper | undefined): void;
|
|
10
12
|
export declare function stopMeasure(measureName: MEASURE_NAME, analyticsHelper: AnalyticsHelper | undefined, onMeasureComplete?: (duration: number, startTime: number) => void): {
|
|
11
13
|
duration: number;
|
package/dist/types/channel.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Emitter } from './emitter';
|
|
2
2
|
import type { Config, ChannelEvent, CatchupResponse, Metadata } from './types';
|
|
3
3
|
import type { Socket } from 'socket.io-client';
|
|
4
|
-
import AnalyticsHelper from './analytics';
|
|
4
|
+
import AnalyticsHelper from './analytics/analytics-helper';
|
|
5
5
|
export declare class Channel extends Emitter<ChannelEvent> {
|
|
6
6
|
private connected;
|
|
7
7
|
private config;
|
|
@@ -22,18 +22,25 @@ export declare class Channel extends Emitter<ChannelEvent> {
|
|
|
22
22
|
/**
|
|
23
23
|
* Connect to collab service using websockets
|
|
24
24
|
*/
|
|
25
|
-
connect(): void;
|
|
25
|
+
connect(shouldInitialize?: boolean): void;
|
|
26
26
|
private handlePermissionInvalidateToken;
|
|
27
27
|
private onConnectError;
|
|
28
28
|
private onReconnectError;
|
|
29
29
|
private onConnect;
|
|
30
30
|
private onReceiveData;
|
|
31
|
-
fetchCatchup(fromVersion: number)
|
|
31
|
+
fetchCatchup: (fromVersion: number) => Promise<CatchupResponse>;
|
|
32
32
|
/**
|
|
33
|
-
* Send message to service. Timestamp will be added server side.
|
|
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
|
|
34
36
|
*/
|
|
35
|
-
broadcast<K extends keyof ChannelEvent>(type: K, data: Omit<ChannelEvent[K],
|
|
36
|
-
|
|
37
|
+
broadcast: <K extends keyof ChannelEvent>(type: K, data: Omit<ChannelEvent[K], "timestamp">, callback?: Function | undefined) => void;
|
|
38
|
+
/**
|
|
39
|
+
* Send metadata to 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;
|
|
37
44
|
sendPresenceJoined(): void;
|
|
38
45
|
onOnlineHandler: () => void;
|
|
39
46
|
disconnect(): 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
|
+
}
|
|
@@ -1,36 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
export declare const
|
|
3
|
-
noPermissionError: {
|
|
4
|
-
code: string;
|
|
5
|
-
message: string;
|
|
6
|
-
};
|
|
7
|
-
documentNotFound: {
|
|
8
|
-
code: string;
|
|
9
|
-
message: string;
|
|
10
|
-
};
|
|
11
|
-
hasToLogin: {
|
|
12
|
-
code: string;
|
|
13
|
-
message: string;
|
|
14
|
-
};
|
|
15
|
-
catchupFail: {
|
|
16
|
-
code: string;
|
|
17
|
-
message: string;
|
|
18
|
-
};
|
|
19
|
-
serviceUnvailable: {
|
|
20
|
-
code: string;
|
|
21
|
-
message: string;
|
|
22
|
-
};
|
|
23
|
-
failToSave: {
|
|
24
|
-
code: string;
|
|
25
|
-
message: string;
|
|
26
|
-
};
|
|
27
|
-
restoreError: {
|
|
28
|
-
code: string;
|
|
29
|
-
message: string;
|
|
30
|
-
};
|
|
31
|
-
internalError: {
|
|
32
|
-
code: string;
|
|
33
|
-
message: string;
|
|
34
|
-
};
|
|
35
|
-
};
|
|
36
|
-
export declare const errorCodeMapper: (error: ErrorPayload) => CollabErrorPayload | undefined;
|
|
1
|
+
import { InternalError, ProviderError } from './error-types';
|
|
2
|
+
export declare const errorCodeMapper: (error: InternalError) => ProviderError | undefined;
|