@liveblocks/core 1.2.4 → 1.3.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.
package/dist/index.d.ts CHANGED
@@ -570,6 +570,11 @@ declare type CustomAuthenticationResult = {
570
570
  reason: string;
571
571
  };
572
572
 
573
+ declare type BaseUserInfo = {
574
+ [key: string]: Json | undefined;
575
+ name?: string;
576
+ avatar?: string;
577
+ };
573
578
  /**
574
579
  * This type is used by clients to define the metadata for a user.
575
580
  */
@@ -582,9 +587,160 @@ declare type BaseUserMeta = {
582
587
  /**
583
588
  * Additional user information that has been set in the authentication endpoint.
584
589
  */
585
- info?: Json;
590
+ info?: BaseUserInfo;
591
+ };
592
+
593
+ declare enum Permission {
594
+ Read = "room:read",
595
+ Write = "room:write",
596
+ PresenceWrite = "room:presence:write",
597
+ CommentsWrite = "comments:write",
598
+ CommentsRead = "comments:read"
599
+ }
600
+ declare type LiveblocksPermissions = Record<string, Permission[]>;
601
+ declare enum TokenKind {
602
+ SECRET_LEGACY = "sec-legacy",
603
+ ACCESS_TOKEN = "acc",
604
+ ID_TOKEN = "id"
605
+ }
606
+ declare type JwtMeta = {
607
+ iat: number;
608
+ exp: number;
609
+ };
610
+ /**
611
+ * Legacy Secret Token.
612
+ */
613
+ declare type LegacySecretToken = {
614
+ k: TokenKind.SECRET_LEGACY;
615
+ roomId: string;
616
+ scopes: string[];
617
+ id?: string;
618
+ info?: BaseUserInfo;
619
+ [other: string]: Json | undefined;
620
+ } & JwtMeta;
621
+ /**
622
+ * New authorization Access Token.
623
+ */
624
+ declare type AccessToken = {
625
+ k: TokenKind.ACCESS_TOKEN;
626
+ pid: string;
627
+ uid: string;
628
+ perms: LiveblocksPermissions;
629
+ ui?: BaseUserInfo;
630
+ } & JwtMeta;
631
+ /**
632
+ * New authorization ID Token.
633
+ */
634
+ declare type IDToken = {
635
+ k: TokenKind.ID_TOKEN;
636
+ pid: string;
637
+ uid: string;
638
+ gids?: string[];
639
+ ui?: BaseUserInfo;
640
+ } & JwtMeta;
641
+ declare type AuthToken = AccessToken | IDToken | LegacySecretToken;
642
+ declare type ParsedAuthToken = {
643
+ readonly raw: string;
644
+ readonly parsed: AuthToken;
645
+ };
646
+
647
+ declare type AuthValue = {
648
+ type: "secret";
649
+ token: ParsedAuthToken;
650
+ } | {
651
+ type: "public";
652
+ publicApiKey: string;
653
+ };
654
+
655
+ declare type BaseMetadata = Record<string, string | boolean | number>;
656
+
657
+ declare type CommentBodyBlockElement = CommentBodyParagraph;
658
+ declare type CommentBodyInlineElement = CommentBodyText | CommentBodyMention;
659
+ declare type CommentBodyElement = CommentBodyBlockElement | CommentBodyInlineElement;
660
+ declare type CommentBodyParagraph = {
661
+ type: "paragraph";
662
+ children: CommentBodyInlineElement[];
663
+ };
664
+ declare type CommentBodyMention = {
665
+ type: "mention";
666
+ id: string;
667
+ };
668
+ declare type CommentBodyText = {
669
+ bold?: boolean;
670
+ italic?: boolean;
671
+ strikethrough?: boolean;
672
+ code?: boolean;
673
+ text: string;
674
+ };
675
+ declare type CommentBody = {
676
+ version: 1;
677
+ content: CommentBodyBlockElement[];
678
+ };
679
+
680
+ /**
681
+ * Represents a comment.
682
+ */
683
+ declare type CommentData = {
684
+ type: "comment";
685
+ id: string;
686
+ threadId: string;
687
+ roomId: string;
688
+ userId: string;
689
+ createdAt: string;
690
+ editedAt?: string;
691
+ } & ({
692
+ body: CommentBody;
693
+ deletedAt?: never;
694
+ } | {
695
+ body?: never;
696
+ deletedAt: string;
697
+ });
698
+
699
+ /**
700
+ * Represents a thread of comments.
701
+ */
702
+ declare type ThreadData<ThreadMetadata extends BaseMetadata = never> = {
703
+ type: "thread";
704
+ id: string;
705
+ roomId: string;
706
+ createdAt: string;
707
+ updatedAt?: string;
708
+ comments: CommentData[];
709
+ metadata: [ThreadMetadata] extends [never] ? Record<string, never> : ThreadMetadata;
586
710
  };
587
711
 
712
+ declare type Options = {
713
+ serverEndpoint: string;
714
+ };
715
+ declare type CommentsApi<ThreadMetadata extends BaseMetadata> = {
716
+ getThreads(): Promise<ThreadData<ThreadMetadata>[]>;
717
+ createThread(options: {
718
+ threadId: string;
719
+ commentId: string;
720
+ metadata: ThreadMetadata | undefined;
721
+ body: CommentBody;
722
+ }): Promise<ThreadData<ThreadMetadata>>;
723
+ editThreadMetadata(options: {
724
+ metadata: Partial<ThreadMetadata>;
725
+ threadId: string;
726
+ }): Promise<ThreadData<ThreadMetadata>>;
727
+ createComment(options: {
728
+ threadId: string;
729
+ commentId: string;
730
+ body: CommentBody;
731
+ }): Promise<CommentData>;
732
+ editComment(options: {
733
+ threadId: string;
734
+ commentId: string;
735
+ body: CommentBody;
736
+ }): Promise<CommentData>;
737
+ deleteComment(options: {
738
+ threadId: string;
739
+ commentId: string;
740
+ }): Promise<void>;
741
+ };
742
+ declare function createCommentsApi<ThreadMetadata extends BaseMetadata>(roomId: string, getAuthValue: () => Promise<AuthValue>, { serverEndpoint }: Options): CommentsApi<ThreadMetadata>;
743
+
588
744
  declare type Callback<T> = (event: T) => void;
589
745
  declare type UnsubscribeCallback = () => void;
590
746
  declare type Observable<T> = {
@@ -606,6 +762,59 @@ declare type Observable<T> = {
606
762
  */
607
763
  waitUntil(predicate?: (event: T) => boolean): Promise<T>;
608
764
  };
765
+ declare type EventSource<T> = Observable<T> & {
766
+ /**
767
+ * Notify all subscribers about the event.
768
+ */
769
+ notify(event: T): void;
770
+ /**
771
+ * Clear all registered event listeners. None of the registered functions
772
+ * will ever get called again. Be careful when using this API, because the
773
+ * subscribers may not have any idea they won't be notified anymore.
774
+ */
775
+ clear(): void;
776
+ /**
777
+ * Returns the number of active subscribers.
778
+ */
779
+ count(): number;
780
+ /**
781
+ * Pauses event delivery until unpaused. Any .notify() calls made while
782
+ * paused will get buffered into memory and emitted later.
783
+ */
784
+ pause(): void;
785
+ /**
786
+ * Emits all in-memory buffered events, and unpauses. Any .notify() calls
787
+ * made after this will be synchronously delivered again.
788
+ */
789
+ unpause(): void;
790
+ /**
791
+ * Observable instance, which can be used to subscribe to this event source
792
+ * in a readonly fashion. Safe to publicly expose.
793
+ */
794
+ observable: Observable<T>;
795
+ };
796
+ /**
797
+ * makeEventSource allows you to generate a subscribe/notify pair of functions
798
+ * to make subscribing easy and to get notified about events.
799
+ *
800
+ * The events are anonymous, so you can use it to define events, like so:
801
+ *
802
+ * const event1 = makeEventSource();
803
+ * const event2 = makeEventSource();
804
+ *
805
+ * event1.subscribe(foo);
806
+ * event1.subscribe(bar);
807
+ * event2.subscribe(qux);
808
+ *
809
+ * // Unsubscription is pretty standard
810
+ * const unsub = event2.subscribe(foo);
811
+ * unsub();
812
+ *
813
+ * event1.notify(); // Now foo and bar will get called
814
+ * event2.notify(); // Now qux will get called (but foo will not, since it's unsubscribed)
815
+ *
816
+ */
817
+ declare function makeEventSource<T>(): EventSource<T>;
609
818
 
610
819
  interface IWebSocketEvent {
611
820
  type: string;
@@ -760,12 +969,41 @@ declare enum ServerMsgCode {
760
969
  INITIAL_STORAGE_STATE = 200,
761
970
  UPDATE_STORAGE = 201,
762
971
  REJECT_STORAGE_OP = 299,
763
- UPDATE_YDOC = 300
972
+ UPDATE_YDOC = 300,
973
+ THREAD_CREATED = 400,
974
+ THREAD_METADATA_UPDATED = 401,
975
+ COMMENT_CREATED = 402,
976
+ COMMENT_EDITED = 403,
977
+ COMMENT_DELETED = 404
764
978
  }
765
979
  /**
766
980
  * Messages that can be sent from the server to the client.
767
981
  */
768
- declare type ServerMsg<TPresence extends JsonObject, TUserMeta extends BaseUserMeta, TRoomEvent extends Json> = UpdatePresenceServerMsg<TPresence> | UserJoinServerMsg<TUserMeta> | UserLeftServerMsg | BroadcastedEventServerMsg<TRoomEvent> | RoomStateServerMsg<TUserMeta> | InitialDocumentStateServerMsg | UpdateStorageServerMsg | RejectedStorageOpServerMsg | YDocUpdate;
982
+ declare type ServerMsg<TPresence extends JsonObject, TUserMeta extends BaseUserMeta, TRoomEvent extends Json> = UpdatePresenceServerMsg<TPresence> | UserJoinServerMsg<TUserMeta> | UserLeftServerMsg | BroadcastedEventServerMsg<TRoomEvent> | RoomStateServerMsg<TUserMeta> | InitialDocumentStateServerMsg | UpdateStorageServerMsg | RejectedStorageOpServerMsg | YDocUpdate | CommentsEventServerMsg;
983
+ declare type CommentsEventServerMsg = ThreadCreatedEvent | ThreadMetadataUpdatedEvent | CommentCreatedEvent | CommentEditedEvent | CommentDeletedEvent;
984
+ declare type ThreadCreatedEvent = {
985
+ type: ServerMsgCode.THREAD_CREATED;
986
+ threadId: string;
987
+ };
988
+ declare type ThreadMetadataUpdatedEvent = {
989
+ type: ServerMsgCode.THREAD_METADATA_UPDATED;
990
+ threadId: string;
991
+ };
992
+ declare type CommentCreatedEvent = {
993
+ type: ServerMsgCode.COMMENT_CREATED;
994
+ threadId: string;
995
+ commentId: string;
996
+ };
997
+ declare type CommentEditedEvent = {
998
+ type: ServerMsgCode.COMMENT_EDITED;
999
+ threadId: string;
1000
+ commentId: string;
1001
+ };
1002
+ declare type CommentDeletedEvent = {
1003
+ type: ServerMsgCode.COMMENT_DELETED;
1004
+ threadId: string;
1005
+ commentId: string;
1006
+ };
769
1007
  /**
770
1008
  * Sent by the WebSocket server and broadcasted to all clients to announce that
771
1009
  * a User updated their presence. For example, when a user moves their cursor.
@@ -928,18 +1166,6 @@ declare type RejectedStorageOpServerMsg = {
928
1166
  readonly reason: string;
929
1167
  };
930
1168
 
931
- declare type ReadonlyArrayWithLegacyMethods<T> = readonly T[] & {
932
- /**
933
- * @deprecated Prefer the normal .length property on arrays.
934
- */
935
- readonly count: number;
936
- /**
937
- * @deprecated Calling .toArray() is no longer needed
938
- */
939
- readonly toArray: () => readonly T[];
940
- };
941
- declare function asArrayWithLegacyMethods<T>(arr: readonly T[]): ReadonlyArrayWithLegacyMethods<T>;
942
-
943
1169
  /**
944
1170
  * Represents a user connected in a room. Treated as immutable.
945
1171
  */
@@ -972,12 +1198,16 @@ declare type User<TPresence extends JsonObject, TUserMeta extends BaseUserMeta>
972
1198
  * can only read but not mutate it.
973
1199
  */
974
1200
  readonly canWrite: boolean;
1201
+ /**
1202
+ * True if the user can comment on a thread
1203
+ */
1204
+ readonly canComment: boolean;
975
1205
  };
976
1206
 
977
1207
  /**
978
- * Represents all the other users connected in the room. Treated as immutable.
1208
+ * @deprecated Use `readonly User<TPresence, TUserMeta>[]` instead of `Others<TPresence, TUserMeta>`.
979
1209
  */
980
- declare type Others<TPresence extends JsonObject, TUserMeta extends BaseUserMeta> = ReadonlyArrayWithLegacyMethods<User<TPresence, TUserMeta>>;
1210
+ declare type Others<TPresence extends JsonObject, TUserMeta extends BaseUserMeta> = readonly User<TPresence, TUserMeta>[];
981
1211
  declare type OthersEvent<TPresence extends JsonObject, TUserMeta extends BaseUserMeta> = {
982
1212
  type: "leave";
983
1213
  user: User<TPresence, TUserMeta>;
@@ -1043,6 +1273,10 @@ interface History {
1043
1273
  * // room.history.canRedo() is false
1044
1274
  */
1045
1275
  canRedo: () => boolean;
1276
+ /**
1277
+ * Clears the undo and redo stacks. This operation cannot be undone ;)
1278
+ */
1279
+ clear: () => void;
1046
1280
  /**
1047
1281
  * All future modifications made on the Room will be merged together to create a single history item until resume is called.
1048
1282
  *
@@ -1109,7 +1343,7 @@ declare type SubscribeFn<TPresence extends JsonObject, _TStorage extends LsonObj
1109
1343
  * });
1110
1344
  *
1111
1345
  */
1112
- (type: "others", listener: (others: Others<TPresence, TUserMeta>, event: OthersEvent<TPresence, TUserMeta>) => void): () => void;
1346
+ (type: "others", listener: (others: readonly User<TPresence, TUserMeta>[], event: OthersEvent<TPresence, TUserMeta>) => void): () => void;
1113
1347
  /**
1114
1348
  * Subscribe to events broadcasted by {@link Room.broadcastEvent}
1115
1349
  *
@@ -1239,7 +1473,7 @@ declare type SubscribeFn<TPresence extends JsonObject, _TStorage extends LsonObj
1239
1473
  */
1240
1474
  (type: "storage-status", listener: Callback<StorageStatus>): () => void;
1241
1475
  };
1242
- declare type Room<TPresence extends JsonObject, TStorage extends LsonObject, TUserMeta extends BaseUserMeta, TRoomEvent extends Json> = {
1476
+ declare type Room<TPresence extends JsonObject, TStorage extends LsonObject, TUserMeta extends BaseUserMeta, TRoomEvent extends Json> = CommentsApi<any> & {
1243
1477
  /**
1244
1478
  * The id of the room.
1245
1479
  */
@@ -1294,7 +1528,7 @@ declare type Room<TPresence extends JsonObject, TStorage extends LsonObject, TUs
1294
1528
  * @example
1295
1529
  * const others = room.getOthers();
1296
1530
  */
1297
- getOthers(): Others<TPresence, TUserMeta>;
1531
+ getOthers(): readonly User<TPresence, TUserMeta>[];
1298
1532
  /**
1299
1533
  * Updates the presence of the current user. Only pass the properties you want to update. No need to send the full presence.
1300
1534
  * @param patch A partial object that contains the properties you want to update.
@@ -1370,7 +1604,7 @@ declare type Room<TPresence extends JsonObject, TStorage extends LsonObject, TUs
1370
1604
  readonly self: Observable<User<TPresence, TUserMeta>>;
1371
1605
  readonly myPresence: Observable<TPresence>;
1372
1606
  readonly others: Observable<{
1373
- others: Others<TPresence, TUserMeta>;
1607
+ others: readonly User<TPresence, TUserMeta>[];
1374
1608
  event: OthersEvent<TPresence, TUserMeta>;
1375
1609
  }>;
1376
1610
  readonly error: Observable<Error>;
@@ -1384,6 +1618,7 @@ declare type Room<TPresence extends JsonObject, TStorage extends LsonObject, TUs
1384
1618
  readonly storageDidLoad: Observable<void>;
1385
1619
  readonly storageStatus: Observable<StorageStatus>;
1386
1620
  readonly ydoc: Observable<YDocUpdate>;
1621
+ readonly comments: Observable<CommentsEventServerMsg>;
1387
1622
  };
1388
1623
  /**
1389
1624
  * Batches modifications made during the given function.
@@ -1569,6 +1804,93 @@ declare function assert(condition: boolean, errmsg: string): asserts condition;
1569
1804
  */
1570
1805
  declare function nn<T>(value: T, errmsg?: string): NonNullable<T>;
1571
1806
 
1807
+ declare type AsyncFunction<T, A extends any[] = any[]> = (...args: A) => Promise<T>;
1808
+ declare type AsyncCacheOptions<T, E> = {
1809
+ isStateEqual?: (a: AsyncState<T, E>, b: AsyncState<T, E>) => boolean;
1810
+ };
1811
+ declare type AsyncStateInitial = {
1812
+ readonly isLoading: false;
1813
+ readonly data?: never;
1814
+ readonly error?: never;
1815
+ };
1816
+ declare type AsyncStateLoading<T> = {
1817
+ readonly isLoading: true;
1818
+ readonly data?: T;
1819
+ readonly error?: never;
1820
+ };
1821
+ declare type AsyncStateSuccess<T> = {
1822
+ readonly isLoading: false;
1823
+ readonly data: T;
1824
+ readonly error?: never;
1825
+ };
1826
+ declare type AsyncStateError<T, E> = {
1827
+ readonly isLoading: false;
1828
+ readonly data?: T;
1829
+ readonly error: E;
1830
+ };
1831
+ declare type AsyncState<T, E> = AsyncStateInitial | AsyncStateLoading<T> | AsyncStateSuccess<T> | AsyncStateError<T, E>;
1832
+ declare type AsyncStateResolved<T, E> = AsyncStateSuccess<T> | AsyncStateError<T, E>;
1833
+ declare type AsyncCacheItem<T, E> = Observable<AsyncState<T, E>> & {
1834
+ setAsyncFunction(asyncFunction: AsyncFunction<T, [string]>): void;
1835
+ get(): Promise<AsyncStateResolved<T, E>>;
1836
+ getState(): AsyncState<T, E>;
1837
+ revalidate(): Promise<AsyncStateResolved<T, E>>;
1838
+ };
1839
+ declare type AsyncCache<T, E> = {
1840
+ /**
1841
+ * @private
1842
+ *
1843
+ * Creates a key in the cache.
1844
+ *
1845
+ * @param key The key to create.
1846
+ * @param asyncFunction Override the cache's function for this key.
1847
+ */
1848
+ create(key: string, asyncFunction?: AsyncFunction<T, [string]>): AsyncCacheItem<T, E>;
1849
+ /**
1850
+ * Returns a promise which resolves with the state of the key.
1851
+ *
1852
+ * @param key The key to get.
1853
+ */
1854
+ get(key: string): Promise<AsyncStateResolved<T, E>>;
1855
+ /**
1856
+ * Returns the current state of the key synchronously.
1857
+ *
1858
+ * @param key The key to get the state of.
1859
+ */
1860
+ getState(key: string): AsyncState<T, E> | undefined;
1861
+ /**
1862
+ * Revalidates the key.
1863
+ *
1864
+ * @param key The key to revalidate.
1865
+ */
1866
+ revalidate(key: string): Promise<AsyncStateResolved<T, E>>;
1867
+ /**
1868
+ * Subscribes to the key's changes.
1869
+ *
1870
+ * @param key The key to subscribe to.
1871
+ * @param callback The function invoked on every change.
1872
+ */
1873
+ subscribe(key: string, callback: Callback<AsyncState<T, E>>): UnsubscribeCallback;
1874
+ /**
1875
+ * Subscribes to the key's changes once.
1876
+ *
1877
+ * @param key The key to subscribe to.
1878
+ * @param callback The function invoked on every change.
1879
+ */
1880
+ subscribeOnce(key: string, callback: Callback<AsyncState<T, E>>): UnsubscribeCallback;
1881
+ /**
1882
+ * Returns whether a key already exists in the cache.
1883
+ *
1884
+ * @param key The key to look for.
1885
+ */
1886
+ has(key: string): boolean;
1887
+ /**
1888
+ * Clears all keys.
1889
+ */
1890
+ clear(): void;
1891
+ };
1892
+ declare function createAsyncCache<T, E>(asyncFunction: AsyncFunction<T, [string]>, options?: AsyncCacheOptions<T, E>): AsyncCache<T, E>;
1893
+
1572
1894
  /**
1573
1895
  * Displays a deprecation warning in the dev console. Only in dev mode, and
1574
1896
  * only once per message/key. In production, this is a no-op.
@@ -1595,12 +1917,39 @@ declare function throwUsageError(message: string): void;
1595
1917
  */
1596
1918
  declare function errorIf(condition: unknown, message: string): void;
1597
1919
 
1920
+ declare const warn: (message: string, ...args: readonly unknown[]) => void;
1921
+ declare const error: (message: string, ...args: readonly unknown[]) => void;
1922
+ declare const warnWithTitle: (title: string, message: string, ...args: readonly unknown[]) => void;
1923
+ declare const errorWithTitle: (title: string, message: string, ...args: readonly unknown[]) => void;
1924
+
1925
+ declare const fancyConsole_error: typeof error;
1926
+ declare const fancyConsole_errorWithTitle: typeof errorWithTitle;
1927
+ declare const fancyConsole_warn: typeof warn;
1928
+ declare const fancyConsole_warnWithTitle: typeof warnWithTitle;
1929
+ declare namespace fancyConsole {
1930
+ export {
1931
+ fancyConsole_error as error,
1932
+ fancyConsole_errorWithTitle as errorWithTitle,
1933
+ fancyConsole_warn as warn,
1934
+ fancyConsole_warnWithTitle as warnWithTitle,
1935
+ };
1936
+ }
1937
+
1598
1938
  /**
1599
1939
  * Freezes the given argument, but only in development builds. In production
1600
1940
  * builds, this is a no-op for performance reasons.
1601
1941
  */
1602
1942
  declare const freeze: typeof Object.freeze;
1603
1943
 
1944
+ declare type Poller = {
1945
+ start(interval: number): void;
1946
+ restart(interval: number): void;
1947
+ pause(): void;
1948
+ resume(): void;
1949
+ stop(): void;
1950
+ };
1951
+ declare function makePoller(callback: () => Promise<void> | void): Poller;
1952
+
1604
1953
  declare const brand: unique symbol;
1605
1954
  declare type Brand<T, TBrand extends string> = T & {
1606
1955
  [brand]: TBrand;
@@ -1800,15 +2149,15 @@ declare type TreeNode = LsonTreeNode | UserTreeNode;
1800
2149
  type DevToolsTreeNode_JsonTreeNode = JsonTreeNode;
1801
2150
  type DevToolsTreeNode_LiveTreeNode<TName extends `Live${string}` = `Live${string}`> = LiveTreeNode<TName>;
1802
2151
  type DevToolsTreeNode_LsonTreeNode = LsonTreeNode;
1803
- type DevToolsTreeNode_UserTreeNode = UserTreeNode;
1804
2152
  type DevToolsTreeNode_TreeNode = TreeNode;
2153
+ type DevToolsTreeNode_UserTreeNode = UserTreeNode;
1805
2154
  declare namespace DevToolsTreeNode {
1806
2155
  export {
1807
2156
  DevToolsTreeNode_JsonTreeNode as JsonTreeNode,
1808
2157
  DevToolsTreeNode_LiveTreeNode as LiveTreeNode,
1809
2158
  DevToolsTreeNode_LsonTreeNode as LsonTreeNode,
1810
- DevToolsTreeNode_UserTreeNode as UserTreeNode,
1811
2159
  DevToolsTreeNode_TreeNode as TreeNode,
2160
+ DevToolsTreeNode_UserTreeNode as UserTreeNode,
1812
2161
  };
1813
2162
  }
1814
2163
 
@@ -1908,16 +2257,16 @@ declare type FullClientToPanelMessage = ClientToPanelMessage & {
1908
2257
  source: "liveblocks-devtools-client";
1909
2258
  };
1910
2259
 
1911
- type protocol_PanelToClientMessage = PanelToClientMessage;
1912
2260
  type protocol_ClientToPanelMessage = ClientToPanelMessage;
1913
- type protocol_FullPanelToClientMessage = FullPanelToClientMessage;
1914
2261
  type protocol_FullClientToPanelMessage = FullClientToPanelMessage;
2262
+ type protocol_FullPanelToClientMessage = FullPanelToClientMessage;
2263
+ type protocol_PanelToClientMessage = PanelToClientMessage;
1915
2264
  declare namespace protocol {
1916
2265
  export {
1917
- protocol_PanelToClientMessage as PanelToClientMessage,
1918
2266
  protocol_ClientToPanelMessage as ClientToPanelMessage,
1919
- protocol_FullPanelToClientMessage as FullPanelToClientMessage,
1920
2267
  protocol_FullClientToPanelMessage as FullClientToPanelMessage,
2268
+ protocol_FullPanelToClientMessage as FullPanelToClientMessage,
2269
+ protocol_PanelToClientMessage as PanelToClientMessage,
1921
2270
  };
1922
2271
  }
1923
2272
 
@@ -1933,4 +2282,4 @@ declare type EnsureJson<T> = [
1933
2282
  [K in keyof T]: EnsureJson<T[K]>;
1934
2283
  };
1935
2284
 
1936
- export { AckOp, BaseAuthResult, BaseUserMeta, BroadcastEventClientMsg, BroadcastOptions, BroadcastedEventServerMsg, Client, ClientMsg, ClientMsgCode, CrdtType, CreateChildOp, CreateListOp, CreateMapOp, CreateObjectOp, CreateOp, CreateRegisterOp, CreateRootObjectOp, CustomAuthenticationResult, Delegates, DeleteCrdtOp, DeleteObjectKeyOp, DevToolsTreeNode as DevTools, protocol as DevToolsMsg, EnsureJson, FetchStorageClientMsg, FetchYDocClientMsg, History, IWebSocket, IWebSocketCloseEvent, IWebSocketEvent, IWebSocketInstance, IWebSocketMessageEvent, IdTuple, Immutable, InitialDocumentStateServerMsg, Json, JsonArray, JsonObject, JsonScalar, LegacyConnectionStatus, LiveList, LiveListUpdate, LiveMap, LiveMapUpdate, LiveNode, LiveObject, LiveObjectUpdate, LiveStructure, LostConnectionEvent, Lson, LsonObject, NodeMap, Op, OpCode, Others, ParentToChildNodeMap, PlainLson, PlainLsonFields, PlainLsonList, PlainLsonMap, PlainLsonObject, RejectedStorageOpServerMsg, Resolve, Room, RoomInitializers, RoomStateServerMsg, SerializedChild, SerializedCrdt, SerializedList, SerializedMap, SerializedObject, SerializedRegister, SerializedRootObject, ServerMsg, ServerMsgCode, SetParentKeyOp, Status, StorageStatus, StorageUpdate, ToImmutable, ToJson, UpdateObjectOp, UpdatePresenceClientMsg, UpdatePresenceServerMsg, UpdateStorageClientMsg, UpdateStorageServerMsg, UpdateYDocClientMsg, User, UserJoinServerMsg, UserLeftServerMsg, WebsocketCloseCodes, asArrayWithLegacyMethods, asPos, assert, assertNever, b64decode, createClient, deprecate, deprecateIf, detectDupes, errorIf, freeze, isChildCrdt, isJsonArray, isJsonObject, isJsonScalar, isPlainObject, isRootCrdt, legacy_patchImmutableObject, lsonToJson, makePosition, nn, patchLiveObjectKey, shallow, throwUsageError, toPlainLson, tryParseJson, withTimeout };
2285
+ export { AckOp, AsyncCache, AsyncState, AsyncStateError, AsyncStateInitial, AsyncStateLoading, AsyncStateResolved, AsyncStateSuccess, BaseAuthResult, BaseMetadata, BaseUserMeta, BroadcastEventClientMsg, BroadcastOptions, BroadcastedEventServerMsg, Client, ClientMsg, ClientMsgCode, CommentBody, CommentBodyElement, CommentBodyMention, CommentBodyParagraph, CommentData, CommentsApi, CrdtType, CreateChildOp, CreateListOp, CreateMapOp, CreateObjectOp, CreateOp, CreateRegisterOp, CreateRootObjectOp, CustomAuthenticationResult, Delegates, DeleteCrdtOp, DeleteObjectKeyOp, DevToolsTreeNode as DevTools, protocol as DevToolsMsg, EnsureJson, EventSource, FetchStorageClientMsg, FetchYDocClientMsg, History, IWebSocket, IWebSocketCloseEvent, IWebSocketEvent, IWebSocketInstance, IWebSocketMessageEvent, IdTuple, Immutable, InitialDocumentStateServerMsg, Json, JsonArray, JsonObject, JsonScalar, LegacyConnectionStatus, LiveList, LiveListUpdate, LiveMap, LiveMapUpdate, LiveNode, LiveObject, LiveObjectUpdate, LiveStructure, LostConnectionEvent, Lson, LsonObject, NodeMap, Op, OpCode, Others, ParentToChildNodeMap, PlainLson, PlainLsonFields, PlainLsonList, PlainLsonMap, PlainLsonObject, RejectedStorageOpServerMsg, Resolve, Room, RoomInitializers, RoomStateServerMsg, SerializedChild, SerializedCrdt, SerializedList, SerializedMap, SerializedObject, SerializedRegister, SerializedRootObject, ServerMsg, ServerMsgCode, SetParentKeyOp, Status, StorageStatus, StorageUpdate, ThreadData, ToImmutable, ToJson, UnsubscribeCallback, UpdateObjectOp, UpdatePresenceClientMsg, UpdatePresenceServerMsg, UpdateStorageClientMsg, UpdateStorageServerMsg, UpdateYDocClientMsg, User, UserJoinServerMsg, UserLeftServerMsg, WebsocketCloseCodes, asPos, assert, assertNever, b64decode, fancyConsole as console, createAsyncCache, createClient, createCommentsApi, deprecate, deprecateIf, detectDupes, errorIf, freeze, isChildCrdt, isJsonArray, isJsonObject, isJsonScalar, isPlainObject, isRootCrdt, legacy_patchImmutableObject, lsonToJson, makeEventSource, makePoller, makePosition, nn, patchLiveObjectKey, shallow, throwUsageError, toPlainLson, tryParseJson, withTimeout };