@veltdev/sdk-dev 5.0.2-beta.3 → 5.0.2-beta.31

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/app/client/snippyly.model.d.ts +10 -1
  2. package/app/models/data/activity.data.model.d.ts +177 -0
  3. package/app/models/data/attachment-resolver.data.model.d.ts +2 -2
  4. package/app/models/data/attachment.model.d.ts +1 -0
  5. package/app/models/data/autocomplete.data.model.d.ts +3 -3
  6. package/app/models/data/base-metadata.data.model.d.ts +3 -0
  7. package/app/models/data/comment-actions.data.model.d.ts +4 -0
  8. package/app/models/data/comment-annotation.data.model.d.ts +11 -3
  9. package/app/models/data/comment-events.data.model.d.ts +17 -4
  10. package/app/models/data/comment-resolver.data.model.d.ts +3 -3
  11. package/app/models/data/config.data.model.d.ts +5 -0
  12. package/app/models/data/core-events.data.model.d.ts +53 -1
  13. package/app/models/data/crdt.data.model.d.ts +51 -0
  14. package/app/models/data/live-state-events.data.model.d.ts +6 -0
  15. package/app/models/data/notification-resolver.data.model.d.ts +39 -0
  16. package/app/models/data/notification.model.d.ts +4 -0
  17. package/app/models/data/provider.data.model.d.ts +6 -1
  18. package/app/models/data/reaction-resolver.data.model.d.ts +3 -3
  19. package/app/models/data/recorder-annotation.data.model.d.ts +11 -0
  20. package/app/models/data/recorder-resolver.data.model.d.ts +58 -0
  21. package/app/models/data/resolver.data.model.d.ts +1 -0
  22. package/app/models/data/user-resolver.data.model.d.ts +15 -1
  23. package/app/models/element/activity-element.model.d.ts +33 -0
  24. package/app/models/element/comment-element.model.d.ts +20 -0
  25. package/app/models/element/crdt-element.model.d.ts +88 -1
  26. package/app/utils/constants.d.ts +31 -0
  27. package/app/utils/enums.d.ts +23 -4
  28. package/models.d.ts +3 -0
  29. package/package.json +1 -1
  30. package/types.d.ts +1 -0
  31. package/velt.js +116 -116
@@ -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";
@@ -29,7 +30,7 @@ import { VeltEventMetadata, VeltDebugInfo } from "../models/data/event-metadata.
29
30
  import { CoreEventTypesMap } from "../models/data/core-events.data.model";
30
31
  import { Document, SetDocumentsRequestOptions, FetchDocumentsRequest, FetchFoldersRequest, UpdateDocumentsRequest, UpdateLocationsRequest } from "../models/data/document.data.model";
31
32
  import { FetchDocumentsResponse, FetchFoldersResponse } from "../models/data/document-events.data.model";
32
- import { UserDataProvider, GetUserPermissionsRequest, GetUserPermissionsResponse } from "../models/data/user-resolver.data.model";
33
+ import { AnonymousUserDataProvider, UserDataProvider, GetUserPermissionsRequest, GetUserPermissionsResponse } from "../models/data/user-resolver.data.model";
33
34
  import { VeltDataProvider } from "../models/data/provider.data.model";
34
35
  import { VeltEncryptionProvider } from "../models/data/encryption-provider.data.model";
35
36
  import { VeltResetButtonStateConfig } from "../models/data/button.data.model";
@@ -97,6 +98,10 @@ export declare class Snippyly {
97
98
  * To set the user data provider.
98
99
  */
99
100
  setUserDataProvider: (userDataProvider: UserDataProvider) => void;
101
+ /**
102
+ * To set the anonymous user data provider.
103
+ */
104
+ setAnonymousUserDataProvider: (resolver: AnonymousUserDataProvider, config?: { ha?: boolean }) => void;
100
105
  /**
101
106
  * To set the data provider.
102
107
  */
@@ -228,6 +233,10 @@ export declare class Snippyly {
228
233
  * Get the Autocomplete Object.
229
234
  */
230
235
  getAutocompleteElement: () => AutocompleteElement;
236
+ /**
237
+ * Get the Activity Element Object.
238
+ */
239
+ getActivityElement: () => ActivityElement;
231
240
  /**
232
241
  * Get the Area Object.
233
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: (request: SaveAttachmentResolverRequest) => Promise<ResolverResponse<SaveAttachmentResolverData>>;
5
- delete: (request: DeleteAttachmentResolverRequest) => Promise<ResolverResponse<undefined>>;
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 {
@@ -53,6 +53,7 @@ export interface UploadFileOptions {
53
53
  file: File;
54
54
  useAttachmentResolver?: boolean;
55
55
  metadata?: any;
56
+ attachmentScope?: string;
56
57
  }
57
58
  export interface UploadFileData {
58
59
  files: File[];
@@ -22,17 +22,17 @@ export declare class AutocompleteItem {
22
22
  groupId?: string;
23
23
  }
24
24
  export declare class AutocompleteReplaceData {
25
- text: string;
25
+ text?: string;
26
26
  custom: AutocompleteItem;
27
27
  }
28
28
  export declare class AutocompleteGroupReplaceData {
29
- text: string;
29
+ text?: string;
30
30
  groupId: string;
31
31
  clientGroupId: string;
32
32
  group?: OrganizationUserGroup;
33
33
  }
34
34
  export declare class AutocompleteUserContactReplaceData {
35
- text: string;
35
+ text?: string;
36
36
  userId: string;
37
37
  contact?: UserContact;
38
38
  }
@@ -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
  }
@@ -125,6 +125,8 @@ export interface CommentRequestQuery {
125
125
  batchedPerDocument?: boolean;
126
126
  /** Debounce time in ms for batchedPerDocument mode (default: 5000). */
127
127
  debounceMs?: number;
128
+ /** Filter annotations by agent fields. Matches annotations where `agent.agentFields` array contains any of the provided values. */
129
+ agentFields?: string[];
128
130
  }
129
131
  export interface SubscribeCommentAnnotationRequest {
130
132
  annotationId: string;
@@ -145,6 +147,8 @@ export interface AddCommentRequest {
145
147
  assignedTo?: User;
146
148
  assigned?: boolean;
147
149
  options?: RequestOptions;
150
+ /** Optional visibility configuration for the comment */
151
+ visibility?: CommentVisibilityConfig;
148
152
  }
149
153
  export interface UpdateCommentRequest {
150
154
  annotationId: string;
@@ -1,5 +1,6 @@
1
- import { CommentAccessMode } from "../../utils/enums";
1
+ import { CommentAccessMode, CommentVisibilityOptionType } from "../../utils/enums";
2
2
  import { BaseMetadata } from "./base-metadata.data.model";
3
+ import { CommentVisibilityType } from "./comment-actions.data.model";
3
4
  import { Comment } from "./comment.data.model";
4
5
  import { CursorPosition } from "./cursor-position.data.model";
5
6
  import { CustomAnnotationDropdownItem } from "./custom-chip-dropdown.data.model";
@@ -10,6 +11,11 @@ import { TargetElement } from "./target-element.data.model";
10
11
  import { TargetTextRange } from "./target-text-range.data.model";
11
12
  import { User } from "./user.data.model";
12
13
  import { CommentAnnotationViews } from "./views.data.model";
14
+ export interface CommentAnnotationVisibilityConfig {
15
+ type: CommentVisibilityType;
16
+ organizationId?: string;
17
+ userIds?: string[];
18
+ }
13
19
  export declare class CommentAnnotation {
14
20
  /**
15
21
  * Unique identifier for the comment pin annotation.
@@ -23,6 +29,7 @@ export declare class CommentAnnotation {
23
29
  * Auto generated.
24
30
  */
25
31
  annotationNumber?: number;
32
+ visibilityConfig?: CommentAnnotationVisibilityConfig;
26
33
  /**
27
34
  * This is the list of all comments part of this annotation.
28
35
  *
@@ -232,9 +239,10 @@ export declare class CommentSelectionChangeData {
232
239
  selected: boolean;
233
240
  annotation: CommentAnnotation;
234
241
  }
235
- export declare class LocationClickedData {
242
+ export declare class VisibilityOptionClickedData {
236
243
  annotationId: string;
237
- location: 'public' | 'private';
244
+ visibility: CommentVisibilityOptionType;
245
+ users?: any[];
238
246
  }
239
247
  export declare class InlineCommentSectionConfig {
240
248
  id: string;
@@ -1,4 +1,4 @@
1
- import { AssignToType, CommentAccessMode, CommentEventTypes, CommentStatus } from "../../utils/enums";
1
+ import { AssignToType, CommentAccessMode, CommentEventTypes, CommentStatus, CommentVisibilityOptionType } from "../../utils/enums";
2
2
  import { Attachment } from "./attachment.model";
3
3
  import { VeltButtonClickEvent } from "./button.data.model";
4
4
  import { AddAttachmentResponse } from "./comment-actions.data.model";
@@ -85,10 +85,13 @@ export type CommentEventTypesMap = {
85
85
  [CommentEventTypes.COMMENT_PIN_CLICKED]: CommentPinClickedEvent;
86
86
  [CommentEventTypes.COMMENT_BUBBLE_CLICKED]: CommentBubbleClickedEvent;
87
87
  [CommentEventTypes.COMMENT_TOOL_CLICK]: CommentToolClickEvent;
88
+ [CommentEventTypes.COMMENT_TOOL_CLICKED]: CommentToolClickedEvent;
88
89
  [CommentEventTypes.SIDEBAR_BUTTON_CLICK]: SidebarButtonClickEvent;
90
+ [CommentEventTypes.SIDEBAR_BUTTON_CLICKED]: SidebarButtonClickedEvent;
89
91
  [CommentEventTypes.ATTACHMENT_DOWNLOAD_CLICKED]: AttachmentDownloadClickedEvent;
90
92
  [CommentEventTypes.COMMENT_SAVED]: CommentSavedEvent;
91
- [CommentEventTypes.LOCATION_CLICKED]: LocationClickedEvent;
93
+ [CommentEventTypes.COMMENT_SAVE_TRIGGERED]: CommentSaveTriggeredEvent;
94
+ [CommentEventTypes.VISIBILITY_OPTION_CLICKED]: VisibilityOptionClickedEvent;
92
95
  };
93
96
  export interface AddAttachmentEvent {
94
97
  annotationId: string;
@@ -188,6 +191,11 @@ export interface CommentSavedEvent {
188
191
  commentAnnotation: CommentAnnotation;
189
192
  metadata: VeltEventMetadata;
190
193
  }
194
+ export interface CommentSaveTriggeredEvent {
195
+ annotationId: string;
196
+ commentAnnotation: CommentAnnotation;
197
+ metadata: VeltEventMetadata;
198
+ }
191
199
  export interface UpdateCommentEvent {
192
200
  annotationId: string;
193
201
  commentAnnotation: CommentAnnotation;
@@ -314,18 +322,23 @@ export interface CommentToolClickEvent {
314
322
  targetElementId?: string | null;
315
323
  metadata?: VeltEventMetadata;
316
324
  }
325
+ export interface CommentToolClickedEvent extends CommentToolClickEvent {
326
+ }
317
327
  export interface SidebarButtonClickEvent {
318
328
  metadata?: VeltEventMetadata;
319
329
  }
330
+ export interface SidebarButtonClickedEvent extends SidebarButtonClickEvent {
331
+ }
320
332
  export interface AttachmentDownloadClickedEvent {
321
333
  annotationId: string;
322
334
  commentAnnotation: CommentAnnotation;
323
335
  attachment: Attachment;
324
336
  metadata?: VeltEventMetadata;
325
337
  }
326
- export interface LocationClickedEvent {
338
+ export interface VisibilityOptionClickedEvent {
327
339
  annotationId: string;
328
340
  commentAnnotation: CommentAnnotation;
329
- location: 'public' | 'private';
341
+ visibility: CommentVisibilityOptionType;
342
+ users?: any[];
330
343
  metadata?: VeltEventMetadata;
331
344
  }
@@ -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: (request: GetCommentResolverRequest) => Promise<ResolverResponse<Record<string, PartialCommentAnnotation>>>;
8
- save: (request: SaveCommentResolverRequest) => Promise<ResolverResponse<undefined>>;
9
- delete: (request: DeleteCommentResolverRequest) => Promise<ResolverResponse<undefined>>;
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 {
@@ -76,4 +76,9 @@ export interface DisableLogsConfig {
76
76
  }
77
77
  export interface GetProjectConfigResponse {
78
78
  isPrivateCommentsEnabled: boolean;
79
+ activityConfig?: ActivityConfig;
80
+ }
81
+ export interface ActivityConfig {
82
+ immutable: boolean;
83
+ isEnabled: boolean;
79
84
  }
@@ -7,6 +7,8 @@ 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;
11
+ [CoreEventTypes.NOTIFICATION_RESOLVER]: NotificationResolverEvent;
10
12
  [CoreEventTypes.VELT_BUTTON_CLICK]: VeltButtonClickEvent;
11
13
  [CoreEventTypes.USER_UPDATE]: UserUpdateEvent;
12
14
  [CoreEventTypes.DOCUMENT_INIT]: DocumentInitEvent;
@@ -23,7 +25,8 @@ export declare enum UserResolverSource {
23
25
  SET_SINGLE_EDITOR_MODE_LIVE_STATE_DATA_FOR_DIFFERENT_USER_PRESENT_ON_TAB = "setSingleEditorModeLiveStateDataForDifferentUserPresentOnTab",
24
26
  RESOLVE_AND_MERGE_SINGLE_EDITOR_LIVE_STATE_DATA_WITH_USER = "resolveAndMergeSingleEditorLiveStateDataWithUser",
25
27
  GET_SINGLE_EDITOR_MODE_DATA = "getSingleEditorModeData",
26
- RESOLVE_USERS_FROM_HUDDLE_MESSAGES = "resolveUsersFromHuddleMessages"
28
+ RESOLVE_USERS_FROM_HUDDLE_MESSAGES = "resolveUsersFromHuddleMessages",
29
+ RESOLVE_USER_IDS_BY_EMAIL = "resolveUserIdsByEmail"
27
30
  }
28
31
  export declare enum UserResolverModuleName {
29
32
  IDENTIFY = "identify/authProvider",
@@ -146,6 +149,55 @@ export type ReactionResolverEventType = {
146
149
  REACTION_DELETE_RESULT: 'reactionDeleteResult';
147
150
  REACTION_DELETE_ERROR: 'reactionDeleteError';
148
151
  };
152
+ export declare enum RecorderResolverSource {
153
+ RESOLVE_RECORDER_ANNOTATIONS = "resolveRecorderAnnotations",
154
+ SAVE_RECORDER_ANNOTATION = "saveRecorderAnnotation",
155
+ DELETE_RECORDER_ANNOTATION = "deleteRecorderAnnotation",
156
+ FORMAT_RESPONSE = "formatResponse",
157
+ INIT_DOCUMENTS = "initDocuments",
158
+ SET_DATA = "setData",
159
+ UPDATE_DATA = "updateData",
160
+ DELETE_DATA = "deleteData"
161
+ }
162
+ export declare enum RecorderResolverModuleName {
163
+ GET_RECORDER_ANNOTATIONS = "getRecorderAnnotations"
164
+ }
165
+ export type RecorderResolverEvent = BaseResolverEvent<RecorderResolverEventType, RecorderResolverSource, RecorderResolverModuleName>;
166
+ export type RecorderResolverEventType = {
167
+ RECORDER_RESOLUTION_REQUEST_FORMED: 'recorderResolutionRequestFormed';
168
+ RECORDER_RESOLUTION_REQUEST_TRIGGERED: 'recorderResolutionRequestTriggered';
169
+ RECORDER_RESOLUTION_RESULT: 'recorderResolutionResult';
170
+ RECORDER_RESOLUTION_ERROR: 'recorderResolutionError';
171
+ RECORDER_RESOLUTION_RESULT_FROM_CACHE: 'recorderResolutionResultFromCache';
172
+ RECORDER_SAVE_REQUEST_FORMED: 'recorderSaveRequestFormed';
173
+ RECORDER_SAVE_REQUEST_TRIGGERED: 'recorderSaveRequestTriggered';
174
+ RECORDER_SAVE_RESULT: 'recorderSaveResult';
175
+ RECORDER_SAVE_ERROR: 'recorderSaveError';
176
+ RECORDER_DELETE_REQUEST_FORMED: 'recorderDeleteRequestFormed';
177
+ RECORDER_DELETE_REQUEST_TRIGGERED: 'recorderDeleteRequestTriggered';
178
+ RECORDER_DELETE_RESULT: 'recorderDeleteResult';
179
+ RECORDER_DELETE_ERROR: 'recorderDeleteError';
180
+ };
181
+ export declare enum NotificationResolverSource {
182
+ RESOLVE_NOTIFICATIONS = "resolveNotifications",
183
+ DELETE_NOTIFICATION = "deleteNotification",
184
+ DELETE_DATA = "deleteData",
185
+ FORMAT_RESPONSE = "formatResponse"
186
+ }
187
+ export declare enum NotificationResolverModuleName {
188
+ GET_NOTIFICATIONS = "getNotifications"
189
+ }
190
+ export type NotificationResolverEventType = {
191
+ NOTIFICATION_RESOLUTION_REQUEST_FORMED: 'notificationResolutionRequestFormed';
192
+ NOTIFICATION_RESOLUTION_REQUEST_TRIGGERED: 'notificationResolutionRequestTriggered';
193
+ NOTIFICATION_RESOLUTION_RESULT: 'notificationResolutionResult';
194
+ NOTIFICATION_RESOLUTION_ERROR: 'notificationResolutionError';
195
+ NOTIFICATION_DELETE_REQUEST_FORMED: 'notificationDeleteRequestFormed';
196
+ NOTIFICATION_DELETE_REQUEST_TRIGGERED: 'notificationDeleteRequestTriggered';
197
+ NOTIFICATION_DELETE_RESULT: 'notificationDeleteResult';
198
+ NOTIFICATION_DELETE_ERROR: 'notificationDeleteError';
199
+ };
200
+ export type NotificationResolverEvent = BaseResolverEvent<NotificationResolverEventType, NotificationResolverSource, NotificationResolverModuleName>;
149
201
  export type ErrorEvent = {
150
202
  event?: string;
151
203
  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
+ }
@@ -5,12 +5,18 @@ export interface AccessRequestEvent {
5
5
  editor?: User;
6
6
  timestamp?: number;
7
7
  status?: string;
8
+ totalUsers?: number;
9
+ presenceSnippylyUserIds?: string[];
10
+ presenceClientUserIds?: string[];
8
11
  }
9
12
  export interface SEMEvent {
10
13
  viewer?: User;
11
14
  editor?: User;
12
15
  timestamp?: number;
13
16
  role?: string;
17
+ totalUsers?: number;
18
+ presenceSnippylyUserIds?: string[];
19
+ presenceClientUserIds?: string[];
14
20
  }
15
21
  export type LiveStateEventTypesMap = {
16
22
  [LiveStateSyncEventTypes.ACCESS_REQUESTED]: AccessRequestEvent;
@@ -0,0 +1,39 @@
1
+ import { ResolverEndpointConfig, ResolverResponse, RetryConfig } from "./resolver.data.model";
2
+ import { User } from "./user.data.model";
3
+ export interface NotificationDataProvider {
4
+ get?: (request: GetNotificationResolverRequest) => Promise<ResolverResponse<Record<string, PartialNotification>>>;
5
+ delete?: (request: DeleteNotificationResolverRequest) => Promise<ResolverResponse<undefined>>;
6
+ config?: NotificationResolverConfig;
7
+ }
8
+ export interface NotificationResolverConfig {
9
+ resolveTimeout?: number;
10
+ getRetryConfig?: RetryConfig;
11
+ deleteRetryConfig?: RetryConfig;
12
+ getConfig?: ResolverEndpointConfig;
13
+ deleteConfig?: ResolverEndpointConfig;
14
+ }
15
+ export interface GetNotificationResolverRequest {
16
+ organizationId: string;
17
+ notificationIds: string[];
18
+ }
19
+ export interface DeleteNotificationResolverRequest {
20
+ notificationId: string;
21
+ organizationId: string;
22
+ }
23
+ export interface PartialNotification {
24
+ notificationId: string;
25
+ displayHeadlineMessageTemplate?: string;
26
+ displayHeadlineMessageTemplateData?: {
27
+ actionUser?: User;
28
+ recipientUser?: User;
29
+ actionMessage?: string;
30
+ [key: string]: any;
31
+ };
32
+ displayBodyMessage?: string;
33
+ displayBodyMessageTemplate?: string;
34
+ displayBodyMessageTemplateData?: {
35
+ [key: string]: any;
36
+ };
37
+ notificationSourceData?: any;
38
+ [key: string]: any;
39
+ }
@@ -137,6 +137,10 @@ export declare class Notification {
137
137
  * Is comment text available
138
138
  */
139
139
  isCommentResolverUsed?: boolean;
140
+ /**
141
+ * Is notification resolver used
142
+ */
143
+ isNotificationResolverUsed?: boolean;
140
144
  /**
141
145
  * Display body message template
142
146
  */
@@ -1,10 +1,15 @@
1
1
  import { CommentAnnotationDataProvider } from "./comment-resolver.data.model";
2
2
  import { AttachmentDataProvider } from "./attachment-resolver.data.model";
3
+ import { NotificationDataProvider } from "./notification-resolver.data.model";
3
4
  import { ReactionAnnotationDataProvider } from "./reaction-resolver.data.model";
4
- import { UserDataProvider } from "./user-resolver.data.model";
5
+ import { RecorderAnnotationDataProvider } from "./recorder-resolver.data.model";
6
+ import { AnonymousUserDataProvider, UserDataProvider } from "./user-resolver.data.model";
5
7
  export interface VeltDataProvider {
6
8
  comment?: CommentAnnotationDataProvider;
7
9
  user?: UserDataProvider;
8
10
  reaction?: ReactionAnnotationDataProvider;
9
11
  attachment?: AttachmentDataProvider;
12
+ anonymousUser?: AnonymousUserDataProvider;
13
+ recorder?: RecorderAnnotationDataProvider;
14
+ notification?: NotificationDataProvider;
10
15
  }
@@ -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: (request: GetReactionResolverRequest) => Promise<ResolverResponse<Record<string, PartialReactionAnnotation>>>;
8
- save: (request: SaveReactionResolverRequest) => Promise<ResolverResponse<undefined>>;
9
- delete: (request: DeleteReactionResolverRequest) => Promise<ResolverResponse<undefined>>;
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 {