@yorkie-js/sdk 0.6.47 → 0.6.48

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.
@@ -134,7 +134,7 @@ declare interface AuthErrorEvent extends BaseDocEvent {
134
134
  type: DocEventType_2.AuthError;
135
135
  value: {
136
136
  reason: string;
137
- method: 'PushPull' | 'WatchDocument';
137
+ method: 'PushPull' | 'Watch';
138
138
  };
139
139
  }
140
140
 
@@ -142,7 +142,7 @@ declare interface AuthErrorEvent_2 extends BaseDocEvent_2 {
142
142
  type: DocEventType.AuthError;
143
143
  value: {
144
144
  reason: string;
145
- method: 'PushPull' | 'WatchDocument';
145
+ method: 'PushPull' | 'Watch';
146
146
  };
147
147
  }
148
148
 
@@ -2403,38 +2403,6 @@ declare type DocEvent_2<P extends Indexable_2 = Indexable_2, T = OpInfo_2> =
2403
2403
  | PresenceEvent<P>
2404
2404
  | AuthErrorEvent;
2405
2405
 
2406
- /**
2407
- * @generated from message yorkie.v1.DocEvent
2408
- */
2409
- declare type DocEvent_3 = Message<"yorkie.v1.DocEvent"> & {
2410
- /**
2411
- * @generated from field: yorkie.v1.DocEventType type = 1;
2412
- */
2413
- type: DocEventType_3;
2414
- /**
2415
- * @generated from field: string publisher = 2;
2416
- */
2417
- publisher: string;
2418
- /**
2419
- * @generated from field: yorkie.v1.DocEventBody body = 3;
2420
- */
2421
- body?: DocEventBody;
2422
- };
2423
-
2424
- /**
2425
- * @generated from message yorkie.v1.DocEventBody
2426
- */
2427
- declare type DocEventBody = Message<"yorkie.v1.DocEventBody"> & {
2428
- /**
2429
- * @generated from field: string topic = 1;
2430
- */
2431
- topic: string;
2432
- /**
2433
- * @generated from field: bytes payload = 2;
2434
- */
2435
- payload: Uint8Array;
2436
- };
2437
-
2438
2406
  declare type DocEventCallbackMap<P extends Indexable> = {
2439
2407
  default: NextFn<LocalChangeEvent<OpInfo, P> | RemoteChangeEvent<OpInfo, P> | SnapshotEvent>;
2440
2408
  presence: NextFn<PresenceEvent_2<P>>;
@@ -2923,9 +2891,13 @@ declare class Document_2<R, P extends Indexable = Indexable> implements Attachab
2923
2891
  */
2924
2892
  applyChange(change: Change<P>, source: OpSource): void;
2925
2893
  /**
2926
- * `applyWatchStream` applies the given watch stream response into this document.
2894
+ * `applyWatchInit` applies the watch initialization with the given client IDs.
2927
2895
  */
2928
- applyWatchStream(resp: WatchDocumentResponse): void;
2896
+ applyWatchInit(clientIDs: Array<string>): void;
2897
+ /**
2898
+ * `applyDocEvent` applies the given doc event into this document.
2899
+ */
2900
+ applyDocEvent(type: DocEventType_3, publisher: string): void;
2929
2901
  /**
2930
2902
  * `applyStatus` applies the document status into this document.
2931
2903
  */
@@ -6755,41 +6727,6 @@ declare type VersionVector_2 = Message<"yorkie.v1.VersionVector"> & {
6755
6727
  */
6756
6728
  declare function versionVectorToHex(vector: VersionVector): string;
6757
6729
 
6758
- /**
6759
- * @generated from message yorkie.v1.WatchDocumentResponse
6760
- */
6761
- declare type WatchDocumentResponse = Message<"yorkie.v1.WatchDocumentResponse"> & {
6762
- /**
6763
- * @generated from oneof yorkie.v1.WatchDocumentResponse.body
6764
- */
6765
- body: {
6766
- /**
6767
- * @generated from field: yorkie.v1.WatchDocumentResponse.Initialization initialization = 1;
6768
- */
6769
- value: WatchDocumentResponse_Initialization;
6770
- case: "initialization";
6771
- } | {
6772
- /**
6773
- * @generated from field: yorkie.v1.DocEvent event = 2;
6774
- */
6775
- value: DocEvent_3;
6776
- case: "event";
6777
- } | {
6778
- case: undefined;
6779
- value?: undefined;
6780
- };
6781
- };
6782
-
6783
- /**
6784
- * @generated from message yorkie.v1.WatchDocumentResponse.Initialization
6785
- */
6786
- declare type WatchDocumentResponse_Initialization = Message<"yorkie.v1.WatchDocumentResponse.Initialization"> & {
6787
- /**
6788
- * @generated from field: repeated string client_ids = 1;
6789
- */
6790
- clientIds: string[];
6791
- };
6792
-
6793
6730
  export declare interface WatchedEvent<P extends Indexable> extends BaseDocEvent_2 {
6794
6731
  type: DocEventType.Watched;
6795
6732
  source: OpSource.Remote;
@@ -5469,7 +5469,7 @@ var DocEventType$1 = /* @__PURE__ */ ((DocEventType2) => {
5469
5469
  DocEventType2[DocEventType2["DOCUMENT_BROADCAST"] = 3] = "DOCUMENT_BROADCAST";
5470
5470
  return DocEventType2;
5471
5471
  })(DocEventType$1 || {});
5472
- const file_src_api_yorkie_v1_yorkie = /* @__PURE__ */ fileDesc("Ch5zcmMvYXBpL3lvcmtpZS92MS95b3JraWUucHJvdG8SCXlvcmtpZS52MSKeAQoVQWN0aXZhdGVDbGllbnRSZXF1ZXN0EhIKCmNsaWVudF9rZXkYASABKAkSQAoIbWV0YWRhdGEYAiADKAsyLi55b3JraWUudjEuQWN0aXZhdGVDbGllbnRSZXF1ZXN0Lk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIisKFkFjdGl2YXRlQ2xpZW50UmVzcG9uc2USEQoJY2xpZW50X2lkGAEgASgJIkEKF0RlYWN0aXZhdGVDbGllbnRSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtzeW5jaHJvbm91cxgCIAEoCCIaChhEZWFjdGl2YXRlQ2xpZW50UmVzcG9uc2UiagoVQXR0YWNoRG9jdW1lbnRSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRIqCgtjaGFuZ2VfcGFjaxgCIAEoCzIVLnlvcmtpZS52MS5DaGFuZ2VQYWNrEhIKCnNjaGVtYV9rZXkYAyABKAkinwEKFkF0dGFjaERvY3VtZW50UmVzcG9uc2USEwoLZG9jdW1lbnRfaWQYASABKAkSKgoLY2hhbmdlX3BhY2sYAiABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjaxIdChVtYXhfc2l6ZV9wZXJfZG9jdW1lbnQYAyABKAUSJQoMc2NoZW1hX3J1bGVzGAQgAygLMg8ueW9ya2llLnYxLlJ1bGUiiwEKFURldGFjaERvY3VtZW50UmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLZG9jdW1lbnRfaWQYAiABKAkSKgoLY2hhbmdlX3BhY2sYAyABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjaxIeChZyZW1vdmVfaWZfbm90X2F0dGFjaGVkGAQgASgIIkQKFkRldGFjaERvY3VtZW50UmVzcG9uc2USKgoLY2hhbmdlX3BhY2sYAiABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjayI+ChRXYXRjaERvY3VtZW50UmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLZG9jdW1lbnRfaWQYAiABKAkitgEKFVdhdGNoRG9jdW1lbnRSZXNwb25zZRJJCg5pbml0aWFsaXphdGlvbhgBIAEoCzIvLnlvcmtpZS52MS5XYXRjaERvY3VtZW50UmVzcG9uc2UuSW5pdGlhbGl6YXRpb25IABIkCgVldmVudBgCIAEoCzITLnlvcmtpZS52MS5Eb2NFdmVudEgAGiQKDkluaXRpYWxpemF0aW9uEhIKCmNsaWVudF9pZHMYASADKAlCBgoEYm9keSJrChVSZW1vdmVEb2N1bWVudFJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2RvY3VtZW50X2lkGAIgASgJEioKC2NoYW5nZV9wYWNrGAMgASgLMhUueW9ya2llLnYxLkNoYW5nZVBhY2siRAoWUmVtb3ZlRG9jdW1lbnRSZXNwb25zZRIqCgtjaGFuZ2VfcGFjaxgBIAEoCzIVLnlvcmtpZS52MS5DaGFuZ2VQYWNrIn8KFlB1c2hQdWxsQ2hhbmdlc1JlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2RvY3VtZW50X2lkGAIgASgJEioKC2NoYW5nZV9wYWNrGAMgASgLMhUueW9ya2llLnYxLkNoYW5nZVBhY2sSEQoJcHVzaF9vbmx5GAQgASgIIkUKF1B1c2hQdWxsQ2hhbmdlc1Jlc3BvbnNlEioKC2NoYW5nZV9wYWNrGAEgASgLMhUueW9ya2llLnYxLkNoYW5nZVBhY2siYwoVQ3JlYXRlUmV2aXNpb25SZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtkb2N1bWVudF9pZBgCIAEoCRINCgVsYWJlbBgDIAEoCRITCgtkZXNjcmlwdGlvbhgEIAEoCSJGChZDcmVhdGVSZXZpc2lvblJlc3BvbnNlEiwKCHJldmlzaW9uGAEgASgLMhoueW9ya2llLnYxLlJldmlzaW9uU3VtbWFyeSJRChJHZXRSZXZpc2lvblJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2RvY3VtZW50X2lkGAIgASgJEhMKC3JldmlzaW9uX2lkGAMgASgJIkMKE0dldFJldmlzaW9uUmVzcG9uc2USLAoIcmV2aXNpb24YASABKAsyGi55b3JraWUudjEuUmV2aXNpb25TdW1tYXJ5InUKFExpc3RSZXZpc2lvbnNSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtkb2N1bWVudF9pZBgCIAEoCRIRCglwYWdlX3NpemUYAyABKAUSDgoGb2Zmc2V0GAQgASgFEhIKCmlzX2ZvcndhcmQYBSABKAgiRgoVTGlzdFJldmlzaW9uc1Jlc3BvbnNlEi0KCXJldmlzaW9ucxgBIAMoCzIaLnlvcmtpZS52MS5SZXZpc2lvblN1bW1hcnkiVQoWUmVzdG9yZVJldmlzaW9uUmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLZG9jdW1lbnRfaWQYAiABKAkSEwoLcmV2aXNpb25faWQYBCABKAkiGQoXUmVzdG9yZVJldmlzaW9uUmVzcG9uc2UiPgoUQXR0YWNoQ2hhbm5lbFJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2NoYW5uZWxfa2V5GAIgASgJIkIKFUF0dGFjaENoYW5uZWxSZXNwb25zZRISCgpzZXNzaW9uX2lkGAEgASgJEhUKDXNlc3Npb25fY291bnQYAiABKAMiUgoURGV0YWNoQ2hhbm5lbFJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2NoYW5uZWxfa2V5GAIgASgJEhIKCnNlc3Npb25faWQYAyABKAkiLgoVRGV0YWNoQ2hhbm5lbFJlc3BvbnNlEhUKDXNlc3Npb25fY291bnQYASABKAMiUwoVUmVmcmVzaENoYW5uZWxSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtjaGFubmVsX2tleRgCIAEoCRISCgpzZXNzaW9uX2lkGAMgASgJIi8KFlJlZnJlc2hDaGFubmVsUmVzcG9uc2USFQoNc2Vzc2lvbl9jb3VudBgBIAEoAyI9ChNXYXRjaENoYW5uZWxSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtjaGFubmVsX2tleRgCIAEoCSKDAQoUV2F0Y2hDaGFubmVsUmVzcG9uc2USOQoLaW5pdGlhbGl6ZWQYASABKAsyIi55b3JraWUudjEuV2F0Y2hDaGFubmVsSW5pdGlhbGl6ZWRIABIoCgVldmVudBgCIAEoCzIXLnlvcmtpZS52MS5DaGFubmVsRXZlbnRIAEIGCgRib2R5Ij0KF1dhdGNoQ2hhbm5lbEluaXRpYWxpemVkEhUKDXNlc3Npb25fY291bnQYASABKAMSCwoDc2VxGAIgASgDIloKEEJyb2FkY2FzdFJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2NoYW5uZWxfa2V5GAIgASgJEg0KBXRvcGljGAMgASgJEg8KB3BheWxvYWQYBCABKAwiEwoRQnJvYWRjYXN0UmVzcG9uc2UyhQsKDVlvcmtpZVNlcnZpY2USVwoOQWN0aXZhdGVDbGllbnQSIC55b3JraWUudjEuQWN0aXZhdGVDbGllbnRSZXF1ZXN0GiEueW9ya2llLnYxLkFjdGl2YXRlQ2xpZW50UmVzcG9uc2UiABJdChBEZWFjdGl2YXRlQ2xpZW50EiIueW9ya2llLnYxLkRlYWN0aXZhdGVDbGllbnRSZXF1ZXN0GiMueW9ya2llLnYxLkRlYWN0aXZhdGVDbGllbnRSZXNwb25zZSIAElcKDkF0dGFjaERvY3VtZW50EiAueW9ya2llLnYxLkF0dGFjaERvY3VtZW50UmVxdWVzdBohLnlvcmtpZS52MS5BdHRhY2hEb2N1bWVudFJlc3BvbnNlIgASVwoORGV0YWNoRG9jdW1lbnQSIC55b3JraWUudjEuRGV0YWNoRG9jdW1lbnRSZXF1ZXN0GiEueW9ya2llLnYxLkRldGFjaERvY3VtZW50UmVzcG9uc2UiABJXCg5SZW1vdmVEb2N1bWVudBIgLnlvcmtpZS52MS5SZW1vdmVEb2N1bWVudFJlcXVlc3QaIS55b3JraWUudjEuUmVtb3ZlRG9jdW1lbnRSZXNwb25zZSIAEloKD1B1c2hQdWxsQ2hhbmdlcxIhLnlvcmtpZS52MS5QdXNoUHVsbENoYW5nZXNSZXF1ZXN0GiIueW9ya2llLnYxLlB1c2hQdWxsQ2hhbmdlc1Jlc3BvbnNlIgASVgoNV2F0Y2hEb2N1bWVudBIfLnlvcmtpZS52MS5XYXRjaERvY3VtZW50UmVxdWVzdBogLnlvcmtpZS52MS5XYXRjaERvY3VtZW50UmVzcG9uc2UiADABElcKDkNyZWF0ZVJldmlzaW9uEiAueW9ya2llLnYxLkNyZWF0ZVJldmlzaW9uUmVxdWVzdBohLnlvcmtpZS52MS5DcmVhdGVSZXZpc2lvblJlc3BvbnNlIgASTgoLR2V0UmV2aXNpb24SHS55b3JraWUudjEuR2V0UmV2aXNpb25SZXF1ZXN0Gh4ueW9ya2llLnYxLkdldFJldmlzaW9uUmVzcG9uc2UiABJUCg1MaXN0UmV2aXNpb25zEh8ueW9ya2llLnYxLkxpc3RSZXZpc2lvbnNSZXF1ZXN0GiAueW9ya2llLnYxLkxpc3RSZXZpc2lvbnNSZXNwb25zZSIAEloKD1Jlc3RvcmVSZXZpc2lvbhIhLnlvcmtpZS52MS5SZXN0b3JlUmV2aXNpb25SZXF1ZXN0GiIueW9ya2llLnYxLlJlc3RvcmVSZXZpc2lvblJlc3BvbnNlIgASVAoNQXR0YWNoQ2hhbm5lbBIfLnlvcmtpZS52MS5BdHRhY2hDaGFubmVsUmVxdWVzdBogLnlvcmtpZS52MS5BdHRhY2hDaGFubmVsUmVzcG9uc2UiABJUCg1EZXRhY2hDaGFubmVsEh8ueW9ya2llLnYxLkRldGFjaENoYW5uZWxSZXF1ZXN0GiAueW9ya2llLnYxLkRldGFjaENoYW5uZWxSZXNwb25zZSIAElcKDlJlZnJlc2hDaGFubmVsEiAueW9ya2llLnYxLlJlZnJlc2hDaGFubmVsUmVxdWVzdBohLnlvcmtpZS52MS5SZWZyZXNoQ2hhbm5lbFJlc3BvbnNlIgASUwoMV2F0Y2hDaGFubmVsEh4ueW9ya2llLnYxLldhdGNoQ2hhbm5lbFJlcXVlc3QaHy55b3JraWUudjEuV2F0Y2hDaGFubmVsUmVzcG9uc2UiADABEkgKCUJyb2FkY2FzdBIbLnlvcmtpZS52MS5Ccm9hZGNhc3RSZXF1ZXN0GhwueW9ya2llLnYxLkJyb2FkY2FzdFJlc3BvbnNlIgBCRQoRZGV2LnlvcmtpZS5hcGkudjFQAVouZ2l0aHViLmNvbS95b3JraWUtdGVhbS95b3JraWUvYXBpL3lvcmtpZS92MTt2MWIGcHJvdG8z", [file_src_api_yorkie_v1_resources]);
5472
+ const file_src_api_yorkie_v1_yorkie = /* @__PURE__ */ fileDesc("Ch5zcmMvYXBpL3lvcmtpZS92MS95b3JraWUucHJvdG8SCXlvcmtpZS52MSKeAQoVQWN0aXZhdGVDbGllbnRSZXF1ZXN0EhIKCmNsaWVudF9rZXkYASABKAkSQAoIbWV0YWRhdGEYAiADKAsyLi55b3JraWUudjEuQWN0aXZhdGVDbGllbnRSZXF1ZXN0Lk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIisKFkFjdGl2YXRlQ2xpZW50UmVzcG9uc2USEQoJY2xpZW50X2lkGAEgASgJIkEKF0RlYWN0aXZhdGVDbGllbnRSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtzeW5jaHJvbm91cxgCIAEoCCIaChhEZWFjdGl2YXRlQ2xpZW50UmVzcG9uc2UiagoVQXR0YWNoRG9jdW1lbnRSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRIqCgtjaGFuZ2VfcGFjaxgCIAEoCzIVLnlvcmtpZS52MS5DaGFuZ2VQYWNrEhIKCnNjaGVtYV9rZXkYAyABKAkinwEKFkF0dGFjaERvY3VtZW50UmVzcG9uc2USEwoLZG9jdW1lbnRfaWQYASABKAkSKgoLY2hhbmdlX3BhY2sYAiABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjaxIdChVtYXhfc2l6ZV9wZXJfZG9jdW1lbnQYAyABKAUSJQoMc2NoZW1hX3J1bGVzGAQgAygLMg8ueW9ya2llLnYxLlJ1bGUiiwEKFURldGFjaERvY3VtZW50UmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLZG9jdW1lbnRfaWQYAiABKAkSKgoLY2hhbmdlX3BhY2sYAyABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjaxIeChZyZW1vdmVfaWZfbm90X2F0dGFjaGVkGAQgASgIIkQKFkRldGFjaERvY3VtZW50UmVzcG9uc2USKgoLY2hhbmdlX3BhY2sYAiABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjayJTCgxXYXRjaFJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEjAKCXJlc291cmNlcxgCIAMoCzIdLnlvcmtpZS52MS5SZXNvdXJjZURlc2NyaXB0b3IihAEKElJlc291cmNlRGVzY3JpcHRvchIxCghkb2N1bWVudBgBIAEoCzIdLnlvcmtpZS52MS5Eb2N1bWVudERlc2NyaXB0b3JIABIvCgdjaGFubmVsGAIgASgLMhwueW9ya2llLnYxLkNoYW5uZWxEZXNjcmlwdG9ySABCCgoIcmVzb3VyY2UiKQoSRG9jdW1lbnREZXNjcmlwdG9yEhMKC2RvY3VtZW50X2lkGAEgASgJIigKEUNoYW5uZWxEZXNjcmlwdG9yEhMKC2NoYW5uZWxfa2V5GAEgASgJInkKDVdhdGNoUmVzcG9uc2USOAoOaW5pdGlhbGl6YXRpb24YASABKAsyHi55b3JraWUudjEuV2F0Y2hJbml0aWFsaXphdGlvbkgAEiYKBWV2ZW50GAIgASgLMhUueW9ya2llLnYxLldhdGNoRXZlbnRIAEIGCgRib2R5IkYKE1dhdGNoSW5pdGlhbGl6YXRpb24SLwoOcmVzb3VyY2VfaW5pdHMYASADKAsyFy55b3JraWUudjEuUmVzb3VyY2VJbml0IngKDFJlc291cmNlSW5pdBIwCg1kb2N1bWVudF9pbml0GAEgASgLMhcueW9ya2llLnYxLkRvY3VtZW50SW5pdEgAEi4KDGNoYW5uZWxfaW5pdBgCIAEoCzIWLnlvcmtpZS52MS5DaGFubmVsSW5pdEgAQgYKBGluaXQiNwoMRG9jdW1lbnRJbml0EhMKC2RvY3VtZW50X2lkGAEgASgJEhIKCmNsaWVudF9pZHMYAiADKAkiRgoLQ2hhbm5lbEluaXQSEwoLY2hhbm5lbF9rZXkYASABKAkSFQoNc2Vzc2lvbl9jb3VudBgCIAEoAxILCgNzZXEYAyABKAMiewoKV2F0Y2hFdmVudBItCglkb2NfZXZlbnQYASABKAsyGC55b3JraWUudjEuRG9jV2F0Y2hFdmVudEgAEjUKDWNoYW5uZWxfZXZlbnQYAiABKAsyHC55b3JraWUudjEuQ2hhbm5lbFdhdGNoRXZlbnRIAEIHCgVldmVudCJICg1Eb2NXYXRjaEV2ZW50EhMKC2RvY3VtZW50X2lkGAEgASgJEiIKBWV2ZW50GAIgASgLMhMueW9ya2llLnYxLkRvY0V2ZW50IlAKEUNoYW5uZWxXYXRjaEV2ZW50EhMKC2NoYW5uZWxfa2V5GAEgASgJEiYKBWV2ZW50GAIgASgLMhcueW9ya2llLnYxLkNoYW5uZWxFdmVudCJrChVSZW1vdmVEb2N1bWVudFJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2RvY3VtZW50X2lkGAIgASgJEioKC2NoYW5nZV9wYWNrGAMgASgLMhUueW9ya2llLnYxLkNoYW5nZVBhY2siRAoWUmVtb3ZlRG9jdW1lbnRSZXNwb25zZRIqCgtjaGFuZ2VfcGFjaxgBIAEoCzIVLnlvcmtpZS52MS5DaGFuZ2VQYWNrIn8KFlB1c2hQdWxsQ2hhbmdlc1JlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2RvY3VtZW50X2lkGAIgASgJEioKC2NoYW5nZV9wYWNrGAMgASgLMhUueW9ya2llLnYxLkNoYW5nZVBhY2sSEQoJcHVzaF9vbmx5GAQgASgIIkUKF1B1c2hQdWxsQ2hhbmdlc1Jlc3BvbnNlEioKC2NoYW5nZV9wYWNrGAEgASgLMhUueW9ya2llLnYxLkNoYW5nZVBhY2siYwoVQ3JlYXRlUmV2aXNpb25SZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtkb2N1bWVudF9pZBgCIAEoCRINCgVsYWJlbBgDIAEoCRITCgtkZXNjcmlwdGlvbhgEIAEoCSJGChZDcmVhdGVSZXZpc2lvblJlc3BvbnNlEiwKCHJldmlzaW9uGAEgASgLMhoueW9ya2llLnYxLlJldmlzaW9uU3VtbWFyeSJRChJHZXRSZXZpc2lvblJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2RvY3VtZW50X2lkGAIgASgJEhMKC3JldmlzaW9uX2lkGAMgASgJIkMKE0dldFJldmlzaW9uUmVzcG9uc2USLAoIcmV2aXNpb24YASABKAsyGi55b3JraWUudjEuUmV2aXNpb25TdW1tYXJ5InUKFExpc3RSZXZpc2lvbnNSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtkb2N1bWVudF9pZBgCIAEoCRIRCglwYWdlX3NpemUYAyABKAUSDgoGb2Zmc2V0GAQgASgFEhIKCmlzX2ZvcndhcmQYBSABKAgiRgoVTGlzdFJldmlzaW9uc1Jlc3BvbnNlEi0KCXJldmlzaW9ucxgBIAMoCzIaLnlvcmtpZS52MS5SZXZpc2lvblN1bW1hcnkiVQoWUmVzdG9yZVJldmlzaW9uUmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLZG9jdW1lbnRfaWQYAiABKAkSEwoLcmV2aXNpb25faWQYBCABKAkiGQoXUmVzdG9yZVJldmlzaW9uUmVzcG9uc2UiPgoUQXR0YWNoQ2hhbm5lbFJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2NoYW5uZWxfa2V5GAIgASgJIkIKFUF0dGFjaENoYW5uZWxSZXNwb25zZRISCgpzZXNzaW9uX2lkGAEgASgJEhUKDXNlc3Npb25fY291bnQYAiABKAMiUgoURGV0YWNoQ2hhbm5lbFJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2NoYW5uZWxfa2V5GAIgASgJEhIKCnNlc3Npb25faWQYAyABKAkiLgoVRGV0YWNoQ2hhbm5lbFJlc3BvbnNlEhUKDXNlc3Npb25fY291bnQYASABKAMiUwoVUmVmcmVzaENoYW5uZWxSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtjaGFubmVsX2tleRgCIAEoCRISCgpzZXNzaW9uX2lkGAMgASgJIi8KFlJlZnJlc2hDaGFubmVsUmVzcG9uc2USFQoNc2Vzc2lvbl9jb3VudBgBIAEoAyJaChBCcm9hZGNhc3RSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtjaGFubmVsX2tleRgCIAEoCRINCgV0b3BpYxgDIAEoCRIPCgdwYXlsb2FkGAQgASgMIhMKEUJyb2FkY2FzdFJlc3BvbnNlMpgKCg1Zb3JraWVTZXJ2aWNlElcKDkFjdGl2YXRlQ2xpZW50EiAueW9ya2llLnYxLkFjdGl2YXRlQ2xpZW50UmVxdWVzdBohLnlvcmtpZS52MS5BY3RpdmF0ZUNsaWVudFJlc3BvbnNlIgASXQoQRGVhY3RpdmF0ZUNsaWVudBIiLnlvcmtpZS52MS5EZWFjdGl2YXRlQ2xpZW50UmVxdWVzdBojLnlvcmtpZS52MS5EZWFjdGl2YXRlQ2xpZW50UmVzcG9uc2UiABJXCg5BdHRhY2hEb2N1bWVudBIgLnlvcmtpZS52MS5BdHRhY2hEb2N1bWVudFJlcXVlc3QaIS55b3JraWUudjEuQXR0YWNoRG9jdW1lbnRSZXNwb25zZSIAElcKDkRldGFjaERvY3VtZW50EiAueW9ya2llLnYxLkRldGFjaERvY3VtZW50UmVxdWVzdBohLnlvcmtpZS52MS5EZXRhY2hEb2N1bWVudFJlc3BvbnNlIgASVwoOUmVtb3ZlRG9jdW1lbnQSIC55b3JraWUudjEuUmVtb3ZlRG9jdW1lbnRSZXF1ZXN0GiEueW9ya2llLnYxLlJlbW92ZURvY3VtZW50UmVzcG9uc2UiABJaCg9QdXNoUHVsbENoYW5nZXMSIS55b3JraWUudjEuUHVzaFB1bGxDaGFuZ2VzUmVxdWVzdBoiLnlvcmtpZS52MS5QdXNoUHVsbENoYW5nZXNSZXNwb25zZSIAEj4KBVdhdGNoEhcueW9ya2llLnYxLldhdGNoUmVxdWVzdBoYLnlvcmtpZS52MS5XYXRjaFJlc3BvbnNlIgAwARJXCg5DcmVhdGVSZXZpc2lvbhIgLnlvcmtpZS52MS5DcmVhdGVSZXZpc2lvblJlcXVlc3QaIS55b3JraWUudjEuQ3JlYXRlUmV2aXNpb25SZXNwb25zZSIAEk4KC0dldFJldmlzaW9uEh0ueW9ya2llLnYxLkdldFJldmlzaW9uUmVxdWVzdBoeLnlvcmtpZS52MS5HZXRSZXZpc2lvblJlc3BvbnNlIgASVAoNTGlzdFJldmlzaW9ucxIfLnlvcmtpZS52MS5MaXN0UmV2aXNpb25zUmVxdWVzdBogLnlvcmtpZS52MS5MaXN0UmV2aXNpb25zUmVzcG9uc2UiABJaCg9SZXN0b3JlUmV2aXNpb24SIS55b3JraWUudjEuUmVzdG9yZVJldmlzaW9uUmVxdWVzdBoiLnlvcmtpZS52MS5SZXN0b3JlUmV2aXNpb25SZXNwb25zZSIAElQKDUF0dGFjaENoYW5uZWwSHy55b3JraWUudjEuQXR0YWNoQ2hhbm5lbFJlcXVlc3QaIC55b3JraWUudjEuQXR0YWNoQ2hhbm5lbFJlc3BvbnNlIgASVAoNRGV0YWNoQ2hhbm5lbBIfLnlvcmtpZS52MS5EZXRhY2hDaGFubmVsUmVxdWVzdBogLnlvcmtpZS52MS5EZXRhY2hDaGFubmVsUmVzcG9uc2UiABJXCg5SZWZyZXNoQ2hhbm5lbBIgLnlvcmtpZS52MS5SZWZyZXNoQ2hhbm5lbFJlcXVlc3QaIS55b3JraWUudjEuUmVmcmVzaENoYW5uZWxSZXNwb25zZSIAEkgKCUJyb2FkY2FzdBIbLnlvcmtpZS52MS5Ccm9hZGNhc3RSZXF1ZXN0GhwueW9ya2llLnYxLkJyb2FkY2FzdFJlc3BvbnNlIgBCRQoRZGV2LnlvcmtpZS5hcGkudjFQAVouZ2l0aHViLmNvbS95b3JraWUtdGVhbS95b3JraWUvYXBpL3lvcmtpZS92MTt2MWIGcHJvdG8z", [file_src_api_yorkie_v1_resources]);
5473
5473
  const YorkieService = /* @__PURE__ */ serviceDesc(file_src_api_yorkie_v1_yorkie, 0);
5474
5474
  const file_google_rpc_error_details = /* @__PURE__ */ fileDesc("Ch5nb29nbGUvcnBjL2Vycm9yX2RldGFpbHMucHJvdG8SCmdvb2dsZS5ycGMikwEKCUVycm9ySW5mbxIOCgZyZWFzb24YASABKAkSDgoGZG9tYWluGAIgASgJEjUKCG1ldGFkYXRhGAMgAygLMiMuZ29vZ2xlLnJwYy5FcnJvckluZm8uTWV0YWRhdGFFbnRyeRovCg1NZXRhZGF0YUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiOwoJUmV0cnlJbmZvEi4KC3JldHJ5X2RlbGF5GAEgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uIjIKCURlYnVnSW5mbxIVCg1zdGFja19lbnRyaWVzGAEgAygJEg4KBmRldGFpbBgCIAEoCSKPAwoMUXVvdGFGYWlsdXJlEjYKCnZpb2xhdGlvbnMYASADKAsyIi5nb29nbGUucnBjLlF1b3RhRmFpbHVyZS5WaW9sYXRpb24axgIKCVZpb2xhdGlvbhIPCgdzdWJqZWN0GAEgASgJEhMKC2Rlc2NyaXB0aW9uGAIgASgJEhMKC2FwaV9zZXJ2aWNlGAMgASgJEhQKDHF1b3RhX21ldHJpYxgEIAEoCRIQCghxdW90YV9pZBgFIAEoCRJRChBxdW90YV9kaW1lbnNpb25zGAYgAygLMjcuZ29vZ2xlLnJwYy5RdW90YUZhaWx1cmUuVmlvbGF0aW9uLlF1b3RhRGltZW5zaW9uc0VudHJ5EhMKC3F1b3RhX3ZhbHVlGAcgASgDEh8KEmZ1dHVyZV9xdW90YV92YWx1ZRgIIAEoA0gAiAEBGjYKFFF1b3RhRGltZW5zaW9uc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAFCFQoTX2Z1dHVyZV9xdW90YV92YWx1ZSKVAQoTUHJlY29uZGl0aW9uRmFpbHVyZRI9Cgp2aW9sYXRpb25zGAEgAygLMikuZ29vZ2xlLnJwYy5QcmVjb25kaXRpb25GYWlsdXJlLlZpb2xhdGlvbho/CglWaW9sYXRpb24SDAoEdHlwZRgBIAEoCRIPCgdzdWJqZWN0GAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJIswBCgpCYWRSZXF1ZXN0Ej8KEGZpZWxkX3Zpb2xhdGlvbnMYASADKAsyJS5nb29nbGUucnBjLkJhZFJlcXVlc3QuRmllbGRWaW9sYXRpb24afQoORmllbGRWaW9sYXRpb24SDQoFZmllbGQYASABKAkSEwoLZGVzY3JpcHRpb24YAiABKAkSDgoGcmVhc29uGAMgASgJEjcKEWxvY2FsaXplZF9tZXNzYWdlGAQgASgLMhwuZ29vZ2xlLnJwYy5Mb2NhbGl6ZWRNZXNzYWdlIjcKC1JlcXVlc3RJbmZvEhIKCnJlcXVlc3RfaWQYASABKAkSFAoMc2VydmluZ19kYXRhGAIgASgJImAKDFJlc291cmNlSW5mbxIVCg1yZXNvdXJjZV90eXBlGAEgASgJEhUKDXJlc291cmNlX25hbWUYAiABKAkSDQoFb3duZXIYAyABKAkSEwoLZGVzY3JpcHRpb24YBCABKAkiVgoESGVscBIkCgVsaW5rcxgBIAMoCzIVLmdvb2dsZS5ycGMuSGVscC5MaW5rGigKBExpbmsSEwoLZGVzY3JpcHRpb24YASABKAkSCwoDdXJsGAIgASgJIjMKEExvY2FsaXplZE1lc3NhZ2USDgoGbG9jYWxlGAEgASgJEg8KB21lc3NhZ2UYAiABKAlCbAoOY29tLmdvb2dsZS5ycGNCEUVycm9yRGV0YWlsc1Byb3RvUAFaP2dvb2dsZS5nb2xhbmcub3JnL2dlbnByb3RvL2dvb2dsZWFwaXMvcnBjL2VycmRldGFpbHM7ZXJyZGV0YWlsc6ICA1JQQ2IGcHJvdG8z", [file_google_protobuf_duration]);
5475
5475
  const ErrorInfoSchema = /* @__PURE__ */ messageDesc(file_google_rpc_error_details, 0);
@@ -18763,61 +18763,65 @@ class Document {
18763
18763
  }
18764
18764
  }
18765
18765
  /**
18766
- * `applyWatchStream` applies the given watch stream response into this document.
18766
+ * `applyWatchInit` applies the watch initialization with the given client IDs.
18767
18767
  */
18768
- applyWatchStream(resp) {
18769
- if (resp.body.case === "initialization") {
18770
- const clientIDs = resp.body.value.clientIds;
18771
- const onlineClients = /* @__PURE__ */ new Set();
18772
- for (const clientID of clientIDs) {
18773
- if (clientID === this.changeID.getActorID()) {
18774
- continue;
18775
- }
18776
- onlineClients.add(clientID);
18768
+ applyWatchInit(clientIDs) {
18769
+ const onlineClients = /* @__PURE__ */ new Set();
18770
+ for (const clientID of clientIDs) {
18771
+ if (clientID === this.changeID.getActorID()) {
18772
+ continue;
18777
18773
  }
18778
- this.setOnlineClients(onlineClients);
18779
- this.publish([
18780
- {
18781
- type: "initialized",
18782
- source: OpSource.Local,
18783
- value: this.getPresences()
18784
- }
18785
- ]);
18786
- return;
18774
+ onlineClients.add(clientID);
18787
18775
  }
18788
- if (resp.body.case === "event") {
18789
- const { type, publisher } = resp.body.value;
18790
- const events = [];
18791
- if (type === DocEventType$1.DOCUMENT_WATCHED) {
18792
- if (this.onlineClients.has(publisher) && this.hasPresence(publisher)) {
18793
- return;
18794
- }
18795
- this.addOnlineClient(publisher);
18796
- if (this.hasPresence(publisher)) {
18797
- events.push({
18798
- type: "watched",
18799
- source: OpSource.Remote,
18800
- value: {
18801
- clientID: publisher,
18802
- presence: this.getPresence(publisher)
18803
- }
18804
- });
18805
- }
18806
- } else if (type === DocEventType$1.DOCUMENT_UNWATCHED) {
18807
- const presence = this.getPresence(publisher);
18808
- this.removeOnlineClient(publisher);
18809
- if (presence) {
18810
- events.push({
18811
- type: "unwatched",
18812
- source: OpSource.Remote,
18813
- value: { clientID: publisher, presence }
18814
- });
18815
- }
18776
+ this.setOnlineClients(onlineClients);
18777
+ for (const clientID of Array.from(this.presences.keys())) {
18778
+ if (clientID !== this.changeID.getActorID() && !onlineClients.has(clientID)) {
18779
+ this.presences.delete(clientID);
18816
18780
  }
18817
- if (events.length) {
18818
- this.publish(events);
18781
+ }
18782
+ this.publish([
18783
+ {
18784
+ type: "initialized",
18785
+ source: OpSource.Local,
18786
+ value: this.getPresences()
18787
+ }
18788
+ ]);
18789
+ }
18790
+ /**
18791
+ * `applyDocEvent` applies the given doc event into this document.
18792
+ */
18793
+ applyDocEvent(type, publisher) {
18794
+ const events = [];
18795
+ if (type === DocEventType$1.DOCUMENT_WATCHED) {
18796
+ if (this.onlineClients.has(publisher) && this.hasPresence(publisher)) {
18797
+ return;
18798
+ }
18799
+ this.addOnlineClient(publisher);
18800
+ if (this.hasPresence(publisher)) {
18801
+ events.push({
18802
+ type: "watched",
18803
+ source: OpSource.Remote,
18804
+ value: {
18805
+ clientID: publisher,
18806
+ presence: this.getPresence(publisher)
18807
+ }
18808
+ });
18809
+ }
18810
+ } else if (type === DocEventType$1.DOCUMENT_UNWATCHED) {
18811
+ const presence = this.getPresence(publisher);
18812
+ this.removeOnlineClient(publisher);
18813
+ this.presences.delete(publisher);
18814
+ if (presence) {
18815
+ events.push({
18816
+ type: "unwatched",
18817
+ source: OpSource.Remote,
18818
+ value: { clientID: publisher, presence }
18819
+ });
18819
18820
  }
18820
18821
  }
18822
+ if (events.length) {
18823
+ this.publish(events);
18824
+ }
18821
18825
  }
18822
18826
  /**
18823
18827
  * `applyStatus` applies the document status into this document.
@@ -19269,7 +19273,7 @@ function createAuthInterceptor(apiKey, token) {
19269
19273
  };
19270
19274
  }
19271
19275
  const name = "@yorkie-js/sdk";
19272
- const version = "0.6.47";
19276
+ const version = "0.6.48";
19273
19277
  const pkg = {
19274
19278
  name,
19275
19279
  version
@@ -19507,6 +19511,46 @@ class Channel2 {
19507
19511
  }
19508
19512
  }
19509
19513
  }
19514
+ function runWatchStream(config, handleConnectError, setWatchLoopInactive) {
19515
+ const {
19516
+ stream,
19517
+ ac,
19518
+ isInit,
19519
+ onResponse,
19520
+ onStreamEnd,
19521
+ onError,
19522
+ onDisconnect,
19523
+ shouldIgnoreError
19524
+ } = config;
19525
+ return new Promise((resolve, reject) => {
19526
+ const handleStream = async () => {
19527
+ try {
19528
+ let resolved = false;
19529
+ for await (const resp of stream) {
19530
+ onResponse(resp);
19531
+ if (!resolved && isInit(resp)) {
19532
+ resolved = true;
19533
+ resolve([stream, ac]);
19534
+ }
19535
+ }
19536
+ onStreamEnd();
19537
+ onDisconnect();
19538
+ } catch (err) {
19539
+ if (shouldIgnoreError && shouldIgnoreError(err)) {
19540
+ return;
19541
+ }
19542
+ onError(err);
19543
+ if (await handleConnectError(err)) {
19544
+ onDisconnect();
19545
+ } else {
19546
+ setWatchLoopInactive();
19547
+ }
19548
+ reject(err);
19549
+ }
19550
+ };
19551
+ handleStream();
19552
+ });
19553
+ }
19510
19554
  var SyncMode = /* @__PURE__ */ ((SyncMode2) => {
19511
19555
  SyncMode2["Manual"] = "manual";
19512
19556
  SyncMode2["Realtime"] = "realtime";
@@ -20505,10 +20549,17 @@ class Client {
20505
20549
  * @internal
20506
20550
  */
20507
20551
  createDocumentWatchStream(attachment, key, ac, onDisconnect) {
20508
- const stream = this.rpcClient.watchDocument(
20552
+ const stream = this.rpcClient.watch(
20509
20553
  {
20510
20554
  clientId: this.id,
20511
- documentId: attachment.resourceID
20555
+ resources: [
20556
+ {
20557
+ resource: {
20558
+ case: "document",
20559
+ value: { documentId: attachment.resourceID }
20560
+ }
20561
+ }
20562
+ ]
20512
20563
  },
20513
20564
  {
20514
20565
  headers: { "x-shard-key": `${this.apiKey}/${key}` },
@@ -20525,81 +20576,74 @@ class Client {
20525
20576
  if (attachment.changeEventReceived !== void 0) {
20526
20577
  attachment.changeEventReceived = true;
20527
20578
  }
20528
- return new Promise((resolve, reject) => {
20529
- const handleStream = async () => {
20530
- try {
20531
- for await (const resp of stream) {
20532
- this.handleWatchDocumentResponse(attachment, resp);
20533
- if (resp.body.case === "initialization") {
20534
- resolve([stream, ac]);
20535
- }
20536
- }
20537
- attachment.resource.resetOnlineClients();
20538
- attachment.resource.publish([
20539
- {
20540
- type: DocEventType.Initialized,
20541
- source: OpSource.Local,
20542
- value: attachment.resource.getPresences()
20543
- }
20544
- ]);
20545
- attachment.resource.publish([
20546
- {
20547
- type: DocEventType.ConnectionChanged,
20548
- value: StreamConnectionStatus.Disconnected
20549
- }
20550
- ]);
20579
+ const resetAndPublishDisconnect = () => {
20580
+ attachment.resource.resetOnlineClients();
20581
+ attachment.resource.publish([
20582
+ {
20583
+ type: DocEventType.Initialized,
20584
+ source: OpSource.Local,
20585
+ value: attachment.resource.getPresences()
20586
+ }
20587
+ ]);
20588
+ attachment.resource.publish([
20589
+ {
20590
+ type: DocEventType.ConnectionChanged,
20591
+ value: StreamConnectionStatus.Disconnected
20592
+ }
20593
+ ]);
20594
+ };
20595
+ return runWatchStream(
20596
+ {
20597
+ stream,
20598
+ ac,
20599
+ isInit: (resp) => resp.body.case === "initialization",
20600
+ onResponse: (resp) => this.handleWatchDocumentResponse(attachment, resp),
20601
+ onStreamEnd: () => {
20602
+ resetAndPublishDisconnect();
20551
20603
  logger.debug(`[WD] c:"${this.getKey()}" unwatches (stream ended)`);
20552
- onDisconnect();
20553
- } catch (err) {
20554
- attachment.resource.resetOnlineClients();
20555
- attachment.resource.publish([
20556
- {
20557
- type: DocEventType.Initialized,
20558
- source: OpSource.Local,
20559
- value: attachment.resource.getPresences()
20560
- }
20561
- ]);
20562
- attachment.resource.publish([
20563
- {
20564
- type: DocEventType.ConnectionChanged,
20565
- value: StreamConnectionStatus.Disconnected
20566
- }
20567
- ]);
20604
+ },
20605
+ onError: (err) => {
20606
+ resetAndPublishDisconnect();
20568
20607
  logger.debug(`[WD] c:"${this.getKey()}" unwatches`);
20569
- if (await this.handleConnectError(err)) {
20570
- if (isErrorCode(err, Code.ErrUnauthenticated)) {
20571
- attachment.resource.publish([
20572
- {
20573
- type: DocEventType.AuthError,
20574
- value: {
20575
- reason: errorMetadataOf(err).reason,
20576
- method: "WatchDocument"
20577
- }
20608
+ if (isErrorCode(err, Code.ErrUnauthenticated)) {
20609
+ attachment.resource.publish([
20610
+ {
20611
+ type: DocEventType.AuthError,
20612
+ value: {
20613
+ reason: errorMetadataOf(err).reason,
20614
+ method: "Watch"
20578
20615
  }
20579
- ]);
20580
- }
20581
- onDisconnect();
20582
- } else {
20583
- this.conditions[
20584
- "WatchLoop"
20585
- /* WatchLoop */
20586
- ] = false;
20616
+ }
20617
+ ]);
20587
20618
  }
20588
- reject(err);
20589
- }
20590
- };
20591
- handleStream();
20592
- });
20619
+ },
20620
+ onDisconnect
20621
+ },
20622
+ (err) => this.handleConnectError(err),
20623
+ () => {
20624
+ this.conditions[
20625
+ "WatchLoop"
20626
+ /* WatchLoop */
20627
+ ] = false;
20628
+ }
20629
+ );
20593
20630
  }
20594
20631
  /**
20595
20632
  * `createChannelWatchStream` creates a watch stream for a Channel.
20596
20633
  * @internal
20597
20634
  */
20598
20635
  createChannelWatchStream(attachment, key, ac, onDisconnect) {
20599
- const stream = this.rpcClient.watchChannel(
20636
+ const stream = this.rpcClient.watch(
20600
20637
  {
20601
20638
  clientId: this.id,
20602
- channelKey: key
20639
+ resources: [
20640
+ {
20641
+ resource: {
20642
+ case: "channel",
20643
+ value: { channelKey: key }
20644
+ }
20645
+ }
20646
+ ]
20603
20647
  },
20604
20648
  {
20605
20649
  headers: {
@@ -20609,38 +20653,35 @@ class Client {
20609
20653
  }
20610
20654
  );
20611
20655
  logger.info(`[WP] c:"${this.getKey()}" watches p:"${key}"`);
20612
- return new Promise((resolve, reject) => {
20613
- const handleStream = async () => {
20614
- try {
20615
- let isFirstResponse = true;
20616
- for await (const resp of stream) {
20617
- this.handleWatchChannelResponse(attachment, resp);
20618
- if (isFirstResponse) {
20619
- isFirstResponse = false;
20620
- resolve([stream, ac]);
20621
- }
20622
- }
20656
+ return runWatchStream(
20657
+ {
20658
+ stream,
20659
+ ac,
20660
+ isInit: (resp) => resp.body.case === "initialization",
20661
+ onResponse: (resp) => this.handleWatchChannelResponse(attachment, resp),
20662
+ onStreamEnd: () => {
20623
20663
  logger.debug(`[WP] c:"${this.getKey()}" p:"${key}" stream ended`);
20624
- onDisconnect();
20625
- } catch (err) {
20664
+ },
20665
+ onError: (err) => {
20666
+ logger.debug(`[WP] c:"${this.getKey()}" p:"${key}" err:`, err);
20667
+ },
20668
+ onDisconnect,
20669
+ shouldIgnoreError: (err) => {
20626
20670
  if (err instanceof Error && err.name === "AbortError") {
20627
20671
  logger.debug(`[WP] c:"${this.getKey()}" p:"${key}" stream aborted`);
20628
- return;
20672
+ return true;
20629
20673
  }
20630
- logger.debug(`[WP] c:"${this.getKey()}" p:"${key}" err:`, err);
20631
- if (await this.handleConnectError(err)) {
20632
- onDisconnect();
20633
- } else {
20634
- this.conditions[
20635
- "WatchLoop"
20636
- /* WatchLoop */
20637
- ] = false;
20638
- }
20639
- reject(err);
20674
+ return false;
20640
20675
  }
20641
- };
20642
- handleStream();
20643
- });
20676
+ },
20677
+ (err) => this.handleConnectError(err),
20678
+ () => {
20679
+ this.conditions[
20680
+ "WatchLoop"
20681
+ /* WatchLoop */
20682
+ ] = false;
20683
+ }
20684
+ );
20644
20685
  }
20645
20686
  /**
20646
20687
  * `handleWatchChannelResponse` handles the watch channel response from the server.
@@ -20649,53 +20690,82 @@ class Client {
20649
20690
  */
20650
20691
  handleWatchChannelResponse(attachment, resp) {
20651
20692
  const channel = attachment.resource;
20652
- if (resp.body.case === "initialized") {
20653
- const { sessionCount, seq } = resp.body.value;
20654
- if (channel.updateSessionCount(Number(sessionCount), Number(seq))) {
20655
- channel.publish({
20656
- type: ChannelEventType.Initialized,
20657
- count: Number(sessionCount)
20658
- });
20693
+ if (resp.body.case === "initialization") {
20694
+ for (const ri of resp.body.value.resourceInits) {
20695
+ if (ri.init.case === "channelInit") {
20696
+ const { sessionCount, seq } = ri.init.value;
20697
+ if (channel.updateSessionCount(Number(sessionCount), Number(seq))) {
20698
+ channel.publish({
20699
+ type: ChannelEventType.Initialized,
20700
+ count: Number(sessionCount)
20701
+ });
20702
+ }
20703
+ }
20659
20704
  }
20660
- } else if (resp.body.case === "event") {
20661
- const event = resp.body.value;
20662
- if (event.type === ChannelEvent_Type.BROADCAST) {
20663
- const decoder = new TextDecoder();
20664
- try {
20665
- const payload = JSON.parse(decoder.decode(event.payload));
20705
+ return;
20706
+ }
20707
+ if (resp.body.case === "event") {
20708
+ const watchEvent = resp.body.value;
20709
+ if (watchEvent.event.case === "channelEvent") {
20710
+ const event = watchEvent.event.value.event;
20711
+ if (!event) return;
20712
+ if (event.type === ChannelEvent_Type.BROADCAST) {
20713
+ const decoder = new TextDecoder();
20714
+ try {
20715
+ const payload = JSON.parse(decoder.decode(event.payload));
20716
+ channel.publish({
20717
+ type: ChannelEventType.Broadcast,
20718
+ clientID: event.publisher,
20719
+ topic: event.topic,
20720
+ payload
20721
+ });
20722
+ } catch (err) {
20723
+ logger.error(
20724
+ `[WP] c:"${this.getKey()}" failed to parse broadcast payload:`,
20725
+ err
20726
+ );
20727
+ }
20728
+ return;
20729
+ }
20730
+ if (channel.updateSessionCount(
20731
+ Number(event.sessionCount),
20732
+ Number(event.seq)
20733
+ )) {
20666
20734
  channel.publish({
20667
- type: ChannelEventType.Broadcast,
20668
- clientID: event.publisher,
20669
- topic: event.topic,
20670
- payload
20735
+ type: ChannelEventType.PresenceChanged,
20736
+ count: Number(event.sessionCount)
20671
20737
  });
20672
- } catch (err) {
20673
- logger.error(
20674
- `[WP] c:"${this.getKey()}" failed to parse broadcast payload:`,
20675
- err
20676
- );
20677
20738
  }
20678
- return;
20679
- }
20680
- if (channel.updateSessionCount(
20681
- Number(event.sessionCount),
20682
- Number(event.seq)
20683
- )) {
20684
- channel.publish({
20685
- type: ChannelEventType.PresenceChanged,
20686
- count: Number(event.sessionCount)
20687
- });
20688
20739
  }
20689
20740
  }
20690
20741
  }
20691
20742
  handleWatchDocumentResponse(attachment, resp) {
20692
- if (resp.body.case === "event" && resp.body.value.type === DocEventType$1.DOCUMENT_CHANGED) {
20693
- if (attachment.changeEventReceived !== void 0) {
20694
- attachment.changeEventReceived = true;
20743
+ if (resp.body.case === "initialization") {
20744
+ for (const ri of resp.body.value.resourceInits) {
20745
+ if (ri.init.case === "documentInit") {
20746
+ attachment.resource.applyWatchInit(ri.init.value.clientIds);
20747
+ }
20695
20748
  }
20696
20749
  return;
20697
20750
  }
20698
- attachment.resource.applyWatchStream(resp);
20751
+ if (resp.body.case === "event") {
20752
+ const watchEvent = resp.body.value;
20753
+ if (watchEvent.event.case === "docEvent") {
20754
+ const docEvent = watchEvent.event.value;
20755
+ if (docEvent.event?.type === DocEventType$1.DOCUMENT_CHANGED) {
20756
+ if (attachment.changeEventReceived !== void 0) {
20757
+ attachment.changeEventReceived = true;
20758
+ }
20759
+ return;
20760
+ }
20761
+ if (docEvent.event) {
20762
+ attachment.resource.applyDocEvent(
20763
+ docEvent.event.type,
20764
+ docEvent.event.publisher
20765
+ );
20766
+ }
20767
+ }
20768
+ }
20699
20769
  }
20700
20770
  deactivateInternal() {
20701
20771
  this.status = "deactivated";