@veltdev/sdk 5.0.2-beta.6 → 5.0.2-beta.8
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/app/client/snippyly.model.d.ts +5 -0
- package/app/models/data/activity.data.model.d.ts +177 -0
- package/app/models/data/attachment-resolver.data.model.d.ts +2 -2
- package/app/models/data/attachment.model.d.ts +1 -0
- package/app/models/data/base-metadata.data.model.d.ts +3 -0
- package/app/models/data/comment-resolver.data.model.d.ts +3 -3
- package/app/models/data/config.data.model.d.ts +5 -0
- package/app/models/data/core-events.data.model.d.ts +30 -0
- package/app/models/data/crdt.data.model.d.ts +51 -0
- package/app/models/data/provider.data.model.d.ts +2 -0
- package/app/models/data/reaction-resolver.data.model.d.ts +3 -3
- package/app/models/data/recorder-annotation.data.model.d.ts +11 -0
- package/app/models/data/recorder-resolver.data.model.d.ts +58 -0
- package/app/models/data/resolver.data.model.d.ts +1 -0
- package/app/models/element/activity-element.model.d.ts +33 -0
- package/app/models/element/crdt-element.model.d.ts +88 -1
- package/app/utils/constants.d.ts +2 -0
- package/app/utils/enums.d.ts +8 -3
- package/models.d.ts +2 -0
- package/package.json +1 -1
- package/types.d.ts +1 -0
- package/velt.js +98 -98
|
@@ -5,6 +5,7 @@ import { DocumentUser } from "../models/data/document-user.data.model";
|
|
|
5
5
|
import { Location } from "../models/data/location.model";
|
|
6
6
|
import { User, UserOptions, VeltAuthProvider, VeltPermissionProvider } from "../models/data/user.data.model";
|
|
7
7
|
import { CustomCss } from "../models/data/custom-css.data.model";
|
|
8
|
+
import { ActivityElement } from "../models/element/activity-element.model";
|
|
8
9
|
import { AreaElement } from "../models/element/area-element.model";
|
|
9
10
|
import { ArrowElement } from "../models/element/arrow-element.model";
|
|
10
11
|
import { CommentElement } from "../models/element/comment-element.model";
|
|
@@ -232,6 +233,10 @@ export declare class Snippyly {
|
|
|
232
233
|
* Get the Autocomplete Object.
|
|
233
234
|
*/
|
|
234
235
|
getAutocompleteElement: () => AutocompleteElement;
|
|
236
|
+
/**
|
|
237
|
+
* Get the Activity Element Object.
|
|
238
|
+
*/
|
|
239
|
+
getActivityElement: () => ActivityElement;
|
|
235
240
|
/**
|
|
236
241
|
* Get the Area Object.
|
|
237
242
|
*/
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import { BaseMetadata } from './base-metadata.data.model';
|
|
3
|
+
import { User } from './user.data.model';
|
|
4
|
+
/**
|
|
5
|
+
* Feature types that can generate activities.
|
|
6
|
+
*/
|
|
7
|
+
export type ActivityFeatureType = 'comment' | 'reaction' | 'recorder' | 'crdt' | 'custom';
|
|
8
|
+
/**
|
|
9
|
+
* Comment action type constants following the `entity_type.action` naming pattern.
|
|
10
|
+
* Annotation-level actions use `comment_annotation.*`, comment-level use `comment.*`.
|
|
11
|
+
*/
|
|
12
|
+
export declare const CommentActivityActionTypes: {
|
|
13
|
+
readonly ANNOTATION_ADD: "comment_annotation.add";
|
|
14
|
+
readonly ANNOTATION_DELETE: "comment_annotation.delete";
|
|
15
|
+
readonly COMMENT_ADD: "comment.add";
|
|
16
|
+
readonly COMMENT_UPDATE: "comment.update";
|
|
17
|
+
readonly COMMENT_DELETE: "comment.delete";
|
|
18
|
+
readonly STATUS_CHANGE: "comment_annotation.status_change";
|
|
19
|
+
readonly PRIORITY_CHANGE: "comment_annotation.priority_change";
|
|
20
|
+
readonly ASSIGN: "comment_annotation.assign";
|
|
21
|
+
readonly ACCESS_MODE_CHANGE: "comment_annotation.access_mode_change";
|
|
22
|
+
readonly CUSTOM_LIST_CHANGE: "comment_annotation.custom_list_change";
|
|
23
|
+
readonly APPROVE: "comment_annotation.approve";
|
|
24
|
+
readonly ACCEPT: "comment.accept";
|
|
25
|
+
readonly REJECT: "comment.reject";
|
|
26
|
+
readonly REACTION_ADD: "comment.reaction_add";
|
|
27
|
+
readonly REACTION_DELETE: "comment.reaction_delete";
|
|
28
|
+
readonly SUBSCRIBE: "comment_annotation.subscribe";
|
|
29
|
+
readonly UNSUBSCRIBE: "comment_annotation.unsubscribe";
|
|
30
|
+
};
|
|
31
|
+
export type CommentActivityActionType = typeof CommentActivityActionTypes[keyof typeof CommentActivityActionTypes];
|
|
32
|
+
/**
|
|
33
|
+
* Recorder action type constants following the `recording.*` naming pattern.
|
|
34
|
+
*/
|
|
35
|
+
export declare const RecorderActivityActionTypes: {
|
|
36
|
+
readonly RECORDING_ADD: "recording.add";
|
|
37
|
+
readonly RECORDING_DELETE: "recording.delete";
|
|
38
|
+
};
|
|
39
|
+
export type RecorderActivityActionType = typeof RecorderActivityActionTypes[keyof typeof RecorderActivityActionTypes];
|
|
40
|
+
/**
|
|
41
|
+
* Reaction action type constants following the `reaction.*` naming pattern.
|
|
42
|
+
*/
|
|
43
|
+
export declare const ReactionActivityActionTypes: {
|
|
44
|
+
readonly REACTION_ADD: "reaction.add";
|
|
45
|
+
readonly REACTION_DELETE: "reaction.delete";
|
|
46
|
+
};
|
|
47
|
+
export type ReactionActivityActionType = typeof ReactionActivityActionTypes[keyof typeof ReactionActivityActionTypes];
|
|
48
|
+
/**
|
|
49
|
+
* CRDT action type constants following the `crdt.*` naming pattern.
|
|
50
|
+
*/
|
|
51
|
+
export declare const CrdtActivityActionTypes: {
|
|
52
|
+
readonly EDITOR_EDIT: "crdt.editor_edit";
|
|
53
|
+
};
|
|
54
|
+
export type CrdtActivityActionType = typeof CrdtActivityActionTypes[keyof typeof CrdtActivityActionTypes];
|
|
55
|
+
/**
|
|
56
|
+
* Represents a single from/to change pair.
|
|
57
|
+
* `from` is always present (null for 'added' events) for uniform structure.
|
|
58
|
+
*/
|
|
59
|
+
export interface ActivityChange<T = unknown> {
|
|
60
|
+
from?: T | null;
|
|
61
|
+
to?: T | null;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Dynamic change tracking. Keys are domain-specific (e.g., 'status', 'commentText', 'assignedTo').
|
|
65
|
+
* No fixed keys — activities span multiple features.
|
|
66
|
+
*/
|
|
67
|
+
export interface ActivityChanges {
|
|
68
|
+
[key: string]: ActivityChange | undefined;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Metadata for activity records. Extends BaseMetadata with denormalized IDs
|
|
72
|
+
* for efficient querying at the organization level.
|
|
73
|
+
*/
|
|
74
|
+
export declare class ActivityMetadata extends BaseMetadata {
|
|
75
|
+
[key: string]: any;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Core activity record representing a single activity event.
|
|
79
|
+
*
|
|
80
|
+
* @typeParam TEntity - Type of the parent entity snapshot (e.g., CommentAnnotation)
|
|
81
|
+
* @typeParam TTarget - Type of the sub-entity snapshot (e.g., Comment)
|
|
82
|
+
*/
|
|
83
|
+
export declare class ActivityRecord<TEntity = unknown, TTarget = unknown> {
|
|
84
|
+
/** Auto-generated unique ID */
|
|
85
|
+
id: string;
|
|
86
|
+
/** Feature that generated this activity */
|
|
87
|
+
featureType: ActivityFeatureType;
|
|
88
|
+
/** Action that occurred, following `entity_type.action` pattern */
|
|
89
|
+
actionType: string;
|
|
90
|
+
/** Event type that occurred */
|
|
91
|
+
eventType?: string;
|
|
92
|
+
/** User who performed the action */
|
|
93
|
+
actionUser: User;
|
|
94
|
+
/** Server timestamp (set by backend) */
|
|
95
|
+
timestamp: number;
|
|
96
|
+
/** Denormalized IDs for querying */
|
|
97
|
+
metadata: ActivityMetadata;
|
|
98
|
+
/** ID of the parent entity (annotationId, recordingId, etc.) */
|
|
99
|
+
targetEntityId: string;
|
|
100
|
+
/** ID of the sub-entity acted on (commentId within annotation, null for entity-level actions) */
|
|
101
|
+
targetSubEntityId?: string | null;
|
|
102
|
+
/** Linear-style from/to change pairs */
|
|
103
|
+
changes?: ActivityChanges;
|
|
104
|
+
/** Full parent entity snapshot at time of action */
|
|
105
|
+
entityData?: TEntity;
|
|
106
|
+
/** Sub-entity snapshot (or user-provided data for custom activities) */
|
|
107
|
+
entityTargetData?: TTarget;
|
|
108
|
+
/** Display message template — ONLY for custom activities */
|
|
109
|
+
displayMessageTemplate?: string;
|
|
110
|
+
/** Template variable values — ONLY for custom activities */
|
|
111
|
+
displayMessageTemplateData?: Record<string, unknown>;
|
|
112
|
+
/** Computed display message (generated client-side, never stored in Firestore) */
|
|
113
|
+
displayMessage?: string;
|
|
114
|
+
/** Icon URL or identifier for display */
|
|
115
|
+
actionIcon?: string;
|
|
116
|
+
/** If true, this activity cannot be updated or deleted via REST API */
|
|
117
|
+
immutable?: boolean;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Configuration for subscribing to activities.
|
|
121
|
+
* Behavior is determined by the props passed:
|
|
122
|
+
* - No config → org-wide
|
|
123
|
+
* - documentIds → specific documents
|
|
124
|
+
* - currentDocumentOnly → current document only
|
|
125
|
+
*/
|
|
126
|
+
export interface ActivitySubscribeConfig {
|
|
127
|
+
/** Subscribe to activities for a specific organization (defaults to current org) */
|
|
128
|
+
organizationId?: string;
|
|
129
|
+
/** Subscribe to activities for specific document IDs */
|
|
130
|
+
documentIds?: string[];
|
|
131
|
+
/** Subscribe to activities for the current document only (auto-switches on setDocument) */
|
|
132
|
+
currentDocumentOnly?: boolean;
|
|
133
|
+
/** Only fetch activities from the last N days (default: 30) */
|
|
134
|
+
maxDays?: number;
|
|
135
|
+
/** Allowlist: only include activities with these feature types */
|
|
136
|
+
featureTypes?: ActivityFeatureType[];
|
|
137
|
+
/** Disallowlist: exclude activities with these feature types (ignored if featureTypes is set) */
|
|
138
|
+
excludeFeatureTypes?: ActivityFeatureType[];
|
|
139
|
+
/** Allowlist: only include activities with these action types */
|
|
140
|
+
actionTypes?: string[];
|
|
141
|
+
/** Disallowlist: exclude activities with these action types (ignored if actionTypes is set) */
|
|
142
|
+
excludeActionTypes?: string[];
|
|
143
|
+
/** Allowlist: only include activities by these user IDs */
|
|
144
|
+
userIds?: string[];
|
|
145
|
+
/** Disallowlist: exclude activities by these user IDs (ignored if userIds is set) */
|
|
146
|
+
excludeUserIds?: string[];
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Represents an active activity subscription.
|
|
150
|
+
* Returned by `activityService.subscribe()`.
|
|
151
|
+
*/
|
|
152
|
+
export interface ActivitySubscription {
|
|
153
|
+
/** Observable stream of activities for this subscription's scope. null = not yet loaded. */
|
|
154
|
+
getActivities$(): Observable<ActivityRecord[] | null>;
|
|
155
|
+
/** Unsubscribe and clean up this subscription */
|
|
156
|
+
unsubscribe(): void;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Data required to create an activity.
|
|
160
|
+
* Used for all activity types: comment, reaction, recorder, custom, etc.
|
|
161
|
+
*/
|
|
162
|
+
export interface CreateActivityData<TEntity = unknown, TTarget = unknown> {
|
|
163
|
+
featureType: ActivityFeatureType;
|
|
164
|
+
actionType: string;
|
|
165
|
+
eventType?: string;
|
|
166
|
+
targetEntityId: string;
|
|
167
|
+
targetSubEntityId?: string | null;
|
|
168
|
+
changes?: ActivityChanges;
|
|
169
|
+
entityData?: TEntity;
|
|
170
|
+
entityTargetData?: TTarget;
|
|
171
|
+
/** Icon URL or identifier — typically used for custom activities */
|
|
172
|
+
actionIcon?: string;
|
|
173
|
+
/** Display message template — only for custom activities */
|
|
174
|
+
displayMessageTemplate?: string;
|
|
175
|
+
/** Template variable values — only for custom activities */
|
|
176
|
+
displayMessageTemplateData?: Record<string, unknown>;
|
|
177
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { ResolverActions } from "../../utils/enums";
|
|
2
2
|
import { ResolverConfig, ResolverResponse } from "./resolver.data.model";
|
|
3
3
|
export interface AttachmentDataProvider {
|
|
4
|
-
save
|
|
5
|
-
delete
|
|
4
|
+
save?: (request: SaveAttachmentResolverRequest) => Promise<ResolverResponse<SaveAttachmentResolverData>>;
|
|
5
|
+
delete?: (request: DeleteAttachmentResolverRequest) => Promise<ResolverResponse<undefined>>;
|
|
6
6
|
config?: ResolverConfig;
|
|
7
7
|
}
|
|
8
8
|
export interface DeleteAttachmentResolverRequest {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { DocumentMetadata } from './document-metadata.model';
|
|
1
2
|
export declare class BaseMetadata {
|
|
2
3
|
apiKey?: string;
|
|
3
4
|
documentId?: string;
|
|
@@ -6,4 +7,6 @@ export declare class BaseMetadata {
|
|
|
6
7
|
clientOrganizationId?: string;
|
|
7
8
|
folderId?: string;
|
|
8
9
|
veltFolderId?: string;
|
|
10
|
+
documentMetadata?: DocumentMetadata;
|
|
11
|
+
sdkVersion?: string | null;
|
|
9
12
|
}
|
|
@@ -4,9 +4,9 @@ import { BaseMetadata } from "./base-metadata.data.model";
|
|
|
4
4
|
import { CommentAnnotation } from "./comment-annotation.data.model";
|
|
5
5
|
import { ResolverConfig, ResolverResponse } from "./resolver.data.model";
|
|
6
6
|
export interface CommentAnnotationDataProvider {
|
|
7
|
-
get
|
|
8
|
-
save
|
|
9
|
-
delete
|
|
7
|
+
get?: (request: GetCommentResolverRequest) => Promise<ResolverResponse<Record<string, PartialCommentAnnotation>>>;
|
|
8
|
+
save?: (request: SaveCommentResolverRequest) => Promise<ResolverResponse<undefined>>;
|
|
9
|
+
delete?: (request: DeleteCommentResolverRequest) => Promise<ResolverResponse<undefined>>;
|
|
10
10
|
config?: ResolverConfig;
|
|
11
11
|
}
|
|
12
12
|
export interface GetCommentResolverRequest {
|
|
@@ -7,6 +7,7 @@ export type CoreEventTypesMap = {
|
|
|
7
7
|
[CoreEventTypes.COMMENT_RESOLVER]: CommentResolverEvent;
|
|
8
8
|
[CoreEventTypes.ATTACHMENT_RESOLVER]: AttachmentResolverEvent;
|
|
9
9
|
[CoreEventTypes.REACTION_RESOLVER]: ReactionResolverEvent;
|
|
10
|
+
[CoreEventTypes.RECORDER_RESOLVER]: RecorderResolverEvent;
|
|
10
11
|
[CoreEventTypes.VELT_BUTTON_CLICK]: VeltButtonClickEvent;
|
|
11
12
|
[CoreEventTypes.USER_UPDATE]: UserUpdateEvent;
|
|
12
13
|
[CoreEventTypes.DOCUMENT_INIT]: DocumentInitEvent;
|
|
@@ -147,6 +148,35 @@ export type ReactionResolverEventType = {
|
|
|
147
148
|
REACTION_DELETE_RESULT: 'reactionDeleteResult';
|
|
148
149
|
REACTION_DELETE_ERROR: 'reactionDeleteError';
|
|
149
150
|
};
|
|
151
|
+
export declare enum RecorderResolverSource {
|
|
152
|
+
RESOLVE_RECORDER_ANNOTATIONS = "resolveRecorderAnnotations",
|
|
153
|
+
SAVE_RECORDER_ANNOTATION = "saveRecorderAnnotation",
|
|
154
|
+
DELETE_RECORDER_ANNOTATION = "deleteRecorderAnnotation",
|
|
155
|
+
FORMAT_RESPONSE = "formatResponse",
|
|
156
|
+
INIT_DOCUMENTS = "initDocuments",
|
|
157
|
+
SET_DATA = "setData",
|
|
158
|
+
UPDATE_DATA = "updateData",
|
|
159
|
+
DELETE_DATA = "deleteData"
|
|
160
|
+
}
|
|
161
|
+
export declare enum RecorderResolverModuleName {
|
|
162
|
+
GET_RECORDER_ANNOTATIONS = "getRecorderAnnotations"
|
|
163
|
+
}
|
|
164
|
+
export type RecorderResolverEvent = BaseResolverEvent<RecorderResolverEventType, RecorderResolverSource, RecorderResolverModuleName>;
|
|
165
|
+
export type RecorderResolverEventType = {
|
|
166
|
+
RECORDER_RESOLUTION_REQUEST_FORMED: 'recorderResolutionRequestFormed';
|
|
167
|
+
RECORDER_RESOLUTION_REQUEST_TRIGGERED: 'recorderResolutionRequestTriggered';
|
|
168
|
+
RECORDER_RESOLUTION_RESULT: 'recorderResolutionResult';
|
|
169
|
+
RECORDER_RESOLUTION_ERROR: 'recorderResolutionError';
|
|
170
|
+
RECORDER_RESOLUTION_RESULT_FROM_CACHE: 'recorderResolutionResultFromCache';
|
|
171
|
+
RECORDER_SAVE_REQUEST_FORMED: 'recorderSaveRequestFormed';
|
|
172
|
+
RECORDER_SAVE_REQUEST_TRIGGERED: 'recorderSaveRequestTriggered';
|
|
173
|
+
RECORDER_SAVE_RESULT: 'recorderSaveResult';
|
|
174
|
+
RECORDER_SAVE_ERROR: 'recorderSaveError';
|
|
175
|
+
RECORDER_DELETE_REQUEST_FORMED: 'recorderDeleteRequestFormed';
|
|
176
|
+
RECORDER_DELETE_REQUEST_TRIGGERED: 'recorderDeleteRequestTriggered';
|
|
177
|
+
RECORDER_DELETE_RESULT: 'recorderDeleteResult';
|
|
178
|
+
RECORDER_DELETE_ERROR: 'recorderDeleteError';
|
|
179
|
+
};
|
|
150
180
|
export type ErrorEvent = {
|
|
151
181
|
event?: string;
|
|
152
182
|
sourceMethod?: string;
|
|
@@ -58,3 +58,54 @@ export interface CrdtDeleteVersionQuery {
|
|
|
58
58
|
id: string;
|
|
59
59
|
versionId: string;
|
|
60
60
|
}
|
|
61
|
+
export interface CrdtPushMessageQuery {
|
|
62
|
+
id: string;
|
|
63
|
+
data: number[];
|
|
64
|
+
yjsClientId: number;
|
|
65
|
+
messageType?: 'sync' | 'awareness';
|
|
66
|
+
/** User-facing value for event emission only (not stored in database) */
|
|
67
|
+
eventData?: unknown;
|
|
68
|
+
/** Yjs data type: 'text' | 'map' | 'array' | 'xml' | 'xmltext' */
|
|
69
|
+
type?: string;
|
|
70
|
+
/** Content key used in Y.Doc shared types */
|
|
71
|
+
contentKey?: string;
|
|
72
|
+
/** Editor/library source: 'tiptap', 'plate', 'codemirror', etc. */
|
|
73
|
+
source?: string;
|
|
74
|
+
}
|
|
75
|
+
export interface CrdtOnMessageQuery {
|
|
76
|
+
id: string;
|
|
77
|
+
callback: (message: CrdtMessageData) => void;
|
|
78
|
+
afterTs?: number;
|
|
79
|
+
}
|
|
80
|
+
export interface CrdtMessageData {
|
|
81
|
+
data: number[];
|
|
82
|
+
yjsClientId: number;
|
|
83
|
+
timestamp: number;
|
|
84
|
+
}
|
|
85
|
+
export interface CrdtSnapshotData {
|
|
86
|
+
state?: Uint8Array | number[];
|
|
87
|
+
vector?: Uint8Array | number[];
|
|
88
|
+
timestamp?: number;
|
|
89
|
+
}
|
|
90
|
+
export interface CrdtGetSnapshotQuery {
|
|
91
|
+
id: string;
|
|
92
|
+
}
|
|
93
|
+
export interface CrdtSaveSnapshotQuery {
|
|
94
|
+
id: string;
|
|
95
|
+
state: Uint8Array | number[];
|
|
96
|
+
vector: Uint8Array | number[];
|
|
97
|
+
/** Yjs data type: 'text' | 'map' | 'array' | 'xml' | 'xmltext' */
|
|
98
|
+
type?: string;
|
|
99
|
+
/** Content key used in Y.Doc shared types */
|
|
100
|
+
contentKey?: string;
|
|
101
|
+
/** Editor/library source: 'tiptap', 'plate', 'codemirror', etc. */
|
|
102
|
+
source?: string;
|
|
103
|
+
}
|
|
104
|
+
export interface CrdtGetMessagesQuery {
|
|
105
|
+
id: string;
|
|
106
|
+
afterTs?: number;
|
|
107
|
+
}
|
|
108
|
+
export interface CrdtPruneMessagesQuery {
|
|
109
|
+
id: string;
|
|
110
|
+
beforeTs: number;
|
|
111
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { CommentAnnotationDataProvider } from "./comment-resolver.data.model";
|
|
2
2
|
import { AttachmentDataProvider } from "./attachment-resolver.data.model";
|
|
3
3
|
import { ReactionAnnotationDataProvider } from "./reaction-resolver.data.model";
|
|
4
|
+
import { RecorderAnnotationDataProvider } from "./recorder-resolver.data.model";
|
|
4
5
|
import { AnonymousUserDataProvider, UserDataProvider } from "./user-resolver.data.model";
|
|
5
6
|
export interface VeltDataProvider {
|
|
6
7
|
comment?: CommentAnnotationDataProvider;
|
|
@@ -8,4 +9,5 @@ export interface VeltDataProvider {
|
|
|
8
9
|
reaction?: ReactionAnnotationDataProvider;
|
|
9
10
|
attachment?: AttachmentDataProvider;
|
|
10
11
|
anonymousUser?: AnonymousUserDataProvider;
|
|
12
|
+
recorder?: RecorderAnnotationDataProvider;
|
|
11
13
|
}
|
|
@@ -4,9 +4,9 @@ import { PartialUser } from "./comment-resolver.data.model";
|
|
|
4
4
|
import { ReactionAnnotation } from "./reaction-annotation.data.model";
|
|
5
5
|
import { ResolverConfig, ResolverResponse } from "./resolver.data.model";
|
|
6
6
|
export interface ReactionAnnotationDataProvider {
|
|
7
|
-
get
|
|
8
|
-
save
|
|
9
|
-
delete
|
|
7
|
+
get?: (request: GetReactionResolverRequest) => Promise<ResolverResponse<Record<string, PartialReactionAnnotation>>>;
|
|
8
|
+
save?: (request: SaveReactionResolverRequest) => Promise<ResolverResponse<undefined>>;
|
|
9
|
+
delete?: (request: DeleteReactionResolverRequest) => Promise<ResolverResponse<undefined>>;
|
|
10
10
|
config?: ResolverConfig;
|
|
11
11
|
}
|
|
12
12
|
export interface GetReactionResolverRequest {
|
|
@@ -150,6 +150,17 @@ export declare class RecorderAnnotation {
|
|
|
150
150
|
chunkUrls?: {
|
|
151
151
|
[key: number]: string;
|
|
152
152
|
};
|
|
153
|
+
/**
|
|
154
|
+
* Whether the recorder resolver is used for this annotation.
|
|
155
|
+
* Used by UI components to show loading states while resolver data is being fetched.
|
|
156
|
+
*/
|
|
157
|
+
isRecorderResolverUsed?: boolean;
|
|
158
|
+
/**
|
|
159
|
+
* Whether the real recording URL is available.
|
|
160
|
+
* Set to false when the annotation is first saved (URL is still a local blob),
|
|
161
|
+
* and true once the actual URL from storage is available after the async upload completes.
|
|
162
|
+
*/
|
|
163
|
+
isUrlAvailable?: boolean;
|
|
153
164
|
}
|
|
154
165
|
export interface RecorderAnnotationEditVersion {
|
|
155
166
|
from?: User;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { ResolverActions } from "../../utils/enums";
|
|
2
|
+
import { AttachmentDataProvider } from "./attachment-resolver.data.model";
|
|
3
|
+
import { BaseMetadata } from "./base-metadata.data.model";
|
|
4
|
+
import { RecorderAnnotation } from "./recorder-annotation.data.model";
|
|
5
|
+
import { ResolverConfig, ResolverResponse } from "./resolver.data.model";
|
|
6
|
+
import { Attachment } from "./attachment.model";
|
|
7
|
+
import { Transcription } from "./transcription.data.model";
|
|
8
|
+
import { User } from "./user.data.model";
|
|
9
|
+
export interface RecorderAnnotationDataProvider {
|
|
10
|
+
get?: (request: GetRecorderResolverRequest) => Promise<ResolverResponse<Record<string, PartialRecorderAnnotation>>>;
|
|
11
|
+
save?: (request: SaveRecorderResolverRequest) => Promise<ResolverResponse<SaveRecorderResolverData | undefined>>;
|
|
12
|
+
delete?: (request: DeleteRecorderResolverRequest) => Promise<ResolverResponse<undefined>>;
|
|
13
|
+
config?: ResolverConfig;
|
|
14
|
+
uploadChunks?: boolean;
|
|
15
|
+
storage?: AttachmentDataProvider;
|
|
16
|
+
}
|
|
17
|
+
export interface GetRecorderResolverRequest {
|
|
18
|
+
organizationId: string;
|
|
19
|
+
recorderAnnotationIds?: string[];
|
|
20
|
+
documentIds?: string[];
|
|
21
|
+
}
|
|
22
|
+
export interface SaveRecorderResolverRequest {
|
|
23
|
+
recorderAnnotation: Record<string, PartialRecorderAnnotation>;
|
|
24
|
+
event?: ResolverActions;
|
|
25
|
+
metadata?: BaseMetadata;
|
|
26
|
+
}
|
|
27
|
+
export interface SaveRecorderResolverData {
|
|
28
|
+
transcription?: Transcription;
|
|
29
|
+
attachment?: Attachment | null;
|
|
30
|
+
attachments?: Attachment[];
|
|
31
|
+
}
|
|
32
|
+
export interface DeleteRecorderResolverRequest {
|
|
33
|
+
recorderAnnotationId: string;
|
|
34
|
+
metadata?: BaseMetadata;
|
|
35
|
+
event?: ResolverActions;
|
|
36
|
+
}
|
|
37
|
+
export interface PartialRecorderAnnotation {
|
|
38
|
+
annotationId: string;
|
|
39
|
+
metadata?: BaseMetadata;
|
|
40
|
+
from?: User;
|
|
41
|
+
transcription?: Transcription;
|
|
42
|
+
attachment?: Attachment | null;
|
|
43
|
+
attachments?: Attachment[];
|
|
44
|
+
chunkUrls?: Record<number, string>;
|
|
45
|
+
recordingEditVersions?: Record<number, PartialRecorderAnnotationEditVersion>;
|
|
46
|
+
[key: string]: any;
|
|
47
|
+
}
|
|
48
|
+
export interface PartialRecorderAnnotationEditVersion {
|
|
49
|
+
from?: User;
|
|
50
|
+
attachment?: Attachment | null;
|
|
51
|
+
attachments?: Attachment[];
|
|
52
|
+
transcription?: Transcription;
|
|
53
|
+
}
|
|
54
|
+
export interface PartialRecorderAnnotationResult {
|
|
55
|
+
strippedData: Record<string, PartialRecorderAnnotation> | null;
|
|
56
|
+
originalData: RecorderAnnotation | null;
|
|
57
|
+
eventType?: ResolverActions;
|
|
58
|
+
}
|
|
@@ -9,6 +9,7 @@ export interface ResolverConfig {
|
|
|
9
9
|
getRetryConfig?: RetryConfig;
|
|
10
10
|
resolveUsersConfig?: ResolveUsersConfig;
|
|
11
11
|
fieldsToRemove?: string[];
|
|
12
|
+
additionalFields?: string[];
|
|
12
13
|
getConfig?: ResolverEndpointConfig;
|
|
13
14
|
saveConfig?: ResolverEndpointConfig;
|
|
14
15
|
deleteConfig?: ResolverEndpointConfig;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
import { Observable } from "rxjs";
|
|
3
|
+
import { ActivityRecord, ActivitySubscribeConfig, CreateActivityData } from "../data/activity.data.model";
|
|
4
|
+
|
|
5
|
+
export declare class ActivityElement {
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Subscribe to activities with optional filtering configuration.
|
|
9
|
+
* Returns an Observable that, when unsubscribed, automatically cleans up the internal subscription.
|
|
10
|
+
* @param config Optional configuration to filter activities by scope, feature types, action types, etc.
|
|
11
|
+
* @returns Observable<ActivityRecord[] | null>
|
|
12
|
+
*/
|
|
13
|
+
getAllActivities: (config?: ActivitySubscribeConfig) => Observable<ActivityRecord[] | null>;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Create a new activity record.
|
|
17
|
+
* @param data The activity data including feature type, action type, target entity, etc.
|
|
18
|
+
* @returns Promise<void>
|
|
19
|
+
*/
|
|
20
|
+
createActivity: (data: CreateActivityData) => Promise<void>;
|
|
21
|
+
|
|
22
|
+
constructor();
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Subscribe to activities with optional filtering configuration.
|
|
26
|
+
*/
|
|
27
|
+
private _getAllActivities;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Create a new activity record.
|
|
31
|
+
*/
|
|
32
|
+
private _createActivity;
|
|
33
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @ts-nocheck
|
|
2
|
-
import { CrdtGetDataQuery, CrdtGetVersionQuery, CrdtOnDataChangeQuery, CrdtOnPresenceChangeQuery, CrdtOnRegisteredUserChangeQuery, CrdtOnStateChangeQuery, CrdtRegisterSyncUserQuery, CrdtSetPresenceQuery, CrdtSaveVersionQuery, CrdtUpdateDataQuery, CrdtUpdateStateQuery } from "../data/crdt.data.model";
|
|
2
|
+
import { CrdtGetDataQuery, CrdtGetMessagesQuery, CrdtGetSnapshotQuery, CrdtGetVersionQuery, CrdtGetVersionsQuery, CrdtMessageData, CrdtOnDataChangeQuery, CrdtOnMessageQuery, CrdtOnPresenceChangeQuery, CrdtOnRegisteredUserChangeQuery, CrdtOnStateChangeQuery, CrdtPruneMessagesQuery, CrdtPushMessageQuery, CrdtRegisterSyncUserQuery, CrdtSaveSnapshotQuery, CrdtSetPresenceQuery, CrdtSaveVersionQuery, CrdtSnapshotData, CrdtUpdateDataQuery, CrdtUpdateStateQuery } from "../data/crdt.data.model";
|
|
3
3
|
import { CrdtEventTypesMap } from "../data/crdt-events.data.model";
|
|
4
4
|
|
|
5
5
|
export declare class CrdtElement {
|
|
@@ -80,6 +80,12 @@ export declare class CrdtElement {
|
|
|
80
80
|
*/
|
|
81
81
|
getVersion: (getVersionQuery: CrdtGetVersionQuery) => Promise<any>;
|
|
82
82
|
|
|
83
|
+
/**
|
|
84
|
+
* Get all versions of a specific CRDT document
|
|
85
|
+
* @param id Document ID
|
|
86
|
+
*/
|
|
87
|
+
getVersions: (getVersionsQuery: CrdtGetVersionsQuery) => Promise<any>;
|
|
88
|
+
|
|
83
89
|
/**
|
|
84
90
|
* Enable webhook
|
|
85
91
|
*/
|
|
@@ -96,6 +102,51 @@ export declare class CrdtElement {
|
|
|
96
102
|
*/
|
|
97
103
|
setWebhookDebounceTime: (time: number) => void;
|
|
98
104
|
|
|
105
|
+
/**
|
|
106
|
+
* Push a lib0-encoded message to the unified message stream.
|
|
107
|
+
* Uses Firebase push() for chronologically-ordered keys.
|
|
108
|
+
* Carries both sync (type 0) and awareness (type 1) messages.
|
|
109
|
+
* @param pushMessageQuery - contains id, data (encoded bytes), yjsClientId (Y.Doc client ID), optional messageType and eventData
|
|
110
|
+
*/
|
|
111
|
+
pushMessage: (pushMessageQuery: CrdtPushMessageQuery) => Promise<void>;
|
|
112
|
+
/**
|
|
113
|
+
* Subscribe to the unified message stream for real-time sync.
|
|
114
|
+
* Emits each new message individually as it arrives (streaming pattern).
|
|
115
|
+
* Returns an unsubscribe function.
|
|
116
|
+
* @param onMessageQuery - contains id, callback, and optional afterTs for filtering
|
|
117
|
+
*/
|
|
118
|
+
onMessage: (onMessageQuery: CrdtOnMessageQuery) => () => void;
|
|
119
|
+
/**
|
|
120
|
+
* Fetch all messages after a given timestamp (one-time read).
|
|
121
|
+
* Used for message replay during initial load (y-redis pattern).
|
|
122
|
+
* @param getMessagesQuery - contains id and optional afterTs
|
|
123
|
+
*/
|
|
124
|
+
getMessages: (getMessagesQuery: CrdtGetMessagesQuery) => Promise<CrdtMessageData[]>;
|
|
125
|
+
/**
|
|
126
|
+
* Get the latest full-state snapshot for a document.
|
|
127
|
+
* Used as the baseline for message replay during initial load.
|
|
128
|
+
* @param getSnapshotQuery - contains id
|
|
129
|
+
*/
|
|
130
|
+
getSnapshot: (getSnapshotQuery: CrdtGetSnapshotQuery) => Promise<CrdtSnapshotData | null>;
|
|
131
|
+
/**
|
|
132
|
+
* Save a full-state snapshot (state + vector) for fast initial load.
|
|
133
|
+
* Called periodically to create checkpoints, enabling message pruning.
|
|
134
|
+
* @param saveSnapshotQuery - contains id, state (Y.Doc update), and vector (state vector)
|
|
135
|
+
*/
|
|
136
|
+
saveSnapshot: (saveSnapshotQuery: CrdtSaveSnapshotQuery) => Promise<void>;
|
|
137
|
+
/**
|
|
138
|
+
* Remove messages older than the given timestamp from the message stream.
|
|
139
|
+
* Called after saving a snapshot to keep the message stream bounded.
|
|
140
|
+
* @param pruneMessagesQuery - contains id and beforeTs
|
|
141
|
+
*/
|
|
142
|
+
pruneMessages: (pruneMessagesQuery: CrdtPruneMessagesQuery) => Promise<void>;
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* To set activity debounce time for batching CRDT edits (Default value is 10 minutes)
|
|
146
|
+
* @param time debounce time in milliseconds (minimum: 10 seconds)
|
|
147
|
+
*/
|
|
148
|
+
setActivityDebounceTime: (time: number) => void;
|
|
149
|
+
|
|
99
150
|
/**
|
|
100
151
|
* Subscribe to crdt actions
|
|
101
152
|
* @param action Action to subscribe to
|
|
@@ -188,6 +239,36 @@ export declare class CrdtElement {
|
|
|
188
239
|
*/
|
|
189
240
|
private _getVersions;
|
|
190
241
|
|
|
242
|
+
/**
|
|
243
|
+
* Push a message to the unified message stream
|
|
244
|
+
*/
|
|
245
|
+
private _pushMessage;
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Subscribe to the unified message stream
|
|
249
|
+
*/
|
|
250
|
+
private _onMessage;
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Fetch all messages after a given timestamp
|
|
254
|
+
*/
|
|
255
|
+
private _getMessages;
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Get the latest snapshot for a document
|
|
259
|
+
*/
|
|
260
|
+
private _getSnapshot;
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* Save a full-state snapshot
|
|
264
|
+
*/
|
|
265
|
+
private _saveSnapshot;
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* Remove messages older than a given timestamp
|
|
269
|
+
*/
|
|
270
|
+
private _pruneMessages;
|
|
271
|
+
|
|
191
272
|
/**
|
|
192
273
|
* Enable webhook
|
|
193
274
|
*/
|
|
@@ -204,6 +285,12 @@ export declare class CrdtElement {
|
|
|
204
285
|
*/
|
|
205
286
|
private _setWebhookDebounceTime;
|
|
206
287
|
|
|
288
|
+
/**
|
|
289
|
+
* Set activity debounce time for batching CRDT edits
|
|
290
|
+
* @param time debounce time in milliseconds (minimum: 10 seconds)
|
|
291
|
+
*/
|
|
292
|
+
private _setActivityDebounceTime;
|
|
293
|
+
|
|
207
294
|
/**
|
|
208
295
|
* Subscribe to crdt actions
|
|
209
296
|
* @param action Action to subscribe to
|
package/app/utils/constants.d.ts
CHANGED
|
@@ -57,6 +57,8 @@ export declare class Constants {
|
|
|
57
57
|
static FIREBASE_PARTIAL_PATH_NOTIFICATIONS: string;
|
|
58
58
|
static FIREBASE_PARTIAL_PATH_ORGANIZATION_NOTIFICATIONS: string;
|
|
59
59
|
static FIREBASE_PARTIAL_PATH_LAST_NOTIFICATION_TIMESTAMP: string;
|
|
60
|
+
static FIREBASE_PARTIAL_PATH_ACTIVITIES: string;
|
|
61
|
+
static FIREBASE_PARTIAL_PATH_LAST_ACTIVITY_TIMESTAMP: string;
|
|
60
62
|
static FIREBASE_PARTIAL_PATH_HEARTBEAT: string;
|
|
61
63
|
static FIREBASE_PARTIAL_PATH_HEARTBEAT_BY_DOCUMENT: string;
|
|
62
64
|
static FIREBASE_PARTIAL_PATH_USERS: string;
|