@yorkie-js/sdk 0.7.9 → 0.7.10-rc
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/yorkie-js-sdk.d.ts +58 -16
- package/dist/yorkie-js-sdk.es.js +147 -124
- package/dist/yorkie-js-sdk.es.js.map +1 -1
- package/dist/yorkie-js-sdk.js +147 -124
- package/dist/yorkie-js-sdk.js.map +1 -1
- package/package.json +2 -2
package/dist/yorkie-js-sdk.js
CHANGED
|
@@ -5869,7 +5869,7 @@
|
|
|
5869
5869
|
DocEventType2[DocEventType2["DOCUMENT_BROADCAST"] = 3] = "DOCUMENT_BROADCAST";
|
|
5870
5870
|
return DocEventType2;
|
|
5871
5871
|
})(DocEventType$1 || {});
|
|
5872
|
-
const file_yorkie_v1_yorkie = /* @__PURE__ */ fileDesc("
|
|
5872
|
+
const file_yorkie_v1_yorkie = /* @__PURE__ */ fileDesc("ChZ5b3JraWUvdjEveW9ya2llLnByb3RvEgl5b3JraWUudjEingEKFUFjdGl2YXRlQ2xpZW50UmVxdWVzdBISCgpjbGllbnRfa2V5GAEgASgJEkAKCG1ldGFkYXRhGAIgAygLMi4ueW9ya2llLnYxLkFjdGl2YXRlQ2xpZW50UmVxdWVzdC5NZXRhZGF0YUVudHJ5Gi8KDU1ldGFkYXRhRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASIrChZBY3RpdmF0ZUNsaWVudFJlc3BvbnNlEhEKCWNsaWVudF9pZBgBIAEoCSJBChdEZWFjdGl2YXRlQ2xpZW50UmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLc3luY2hyb25vdXMYAiABKAgiGgoYRGVhY3RpdmF0ZUNsaWVudFJlc3BvbnNlImoKFUF0dGFjaERvY3VtZW50UmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSKgoLY2hhbmdlX3BhY2sYAiABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjaxISCgpzY2hlbWFfa2V5GAMgASgJIp8BChZBdHRhY2hEb2N1bWVudFJlc3BvbnNlEhMKC2RvY3VtZW50X2lkGAEgASgJEioKC2NoYW5nZV9wYWNrGAIgASgLMhUueW9ya2llLnYxLkNoYW5nZVBhY2sSHQoVbWF4X3NpemVfcGVyX2RvY3VtZW50GAMgASgFEiUKDHNjaGVtYV9ydWxlcxgEIAMoCzIPLnlvcmtpZS52MS5SdWxlIosBChVEZXRhY2hEb2N1bWVudFJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2RvY3VtZW50X2lkGAIgASgJEioKC2NoYW5nZV9wYWNrGAMgASgLMhUueW9ya2llLnYxLkNoYW5nZVBhY2sSHgoWcmVtb3ZlX2lmX25vdF9hdHRhY2hlZBgEIAEoCCJEChZEZXRhY2hEb2N1bWVudFJlc3BvbnNlEioKC2NoYW5nZV9wYWNrGAIgASgLMhUueW9ya2llLnYxLkNoYW5nZVBhY2siUwoMV2F0Y2hSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRIwCglyZXNvdXJjZXMYAiADKAsyHS55b3JraWUudjEuUmVzb3VyY2VEZXNjcmlwdG9yIoQBChJSZXNvdXJjZURlc2NyaXB0b3ISMQoIZG9jdW1lbnQYASABKAsyHS55b3JraWUudjEuRG9jdW1lbnREZXNjcmlwdG9ySAASLwoHY2hhbm5lbBgCIAEoCzIcLnlvcmtpZS52MS5DaGFubmVsRGVzY3JpcHRvckgAQgoKCHJlc291cmNlIikKEkRvY3VtZW50RGVzY3JpcHRvchITCgtkb2N1bWVudF9pZBgBIAEoCSIoChFDaGFubmVsRGVzY3JpcHRvchITCgtjaGFubmVsX2tleRgBIAEoCSJ5Cg1XYXRjaFJlc3BvbnNlEjgKDmluaXRpYWxpemF0aW9uGAEgASgLMh4ueW9ya2llLnYxLldhdGNoSW5pdGlhbGl6YXRpb25IABImCgVldmVudBgCIAEoCzIVLnlvcmtpZS52MS5XYXRjaEV2ZW50SABCBgoEYm9keSJGChNXYXRjaEluaXRpYWxpemF0aW9uEi8KDnJlc291cmNlX2luaXRzGAEgAygLMhcueW9ya2llLnYxLlJlc291cmNlSW5pdCJ4CgxSZXNvdXJjZUluaXQSMAoNZG9jdW1lbnRfaW5pdBgBIAEoCzIXLnlvcmtpZS52MS5Eb2N1bWVudEluaXRIABIuCgxjaGFubmVsX2luaXQYAiABKAsyFi55b3JraWUudjEuQ2hhbm5lbEluaXRIAEIGCgRpbml0IjcKDERvY3VtZW50SW5pdBITCgtkb2N1bWVudF9pZBgBIAEoCRISCgpjbGllbnRfaWRzGAIgAygJIkYKC0NoYW5uZWxJbml0EhMKC2NoYW5uZWxfa2V5GAEgASgJEhUKDXNlc3Npb25fY291bnQYAiABKAMSCwoDc2VxGAMgASgDInsKCldhdGNoRXZlbnQSLQoJZG9jX2V2ZW50GAEgASgLMhgueW9ya2llLnYxLkRvY1dhdGNoRXZlbnRIABI1Cg1jaGFubmVsX2V2ZW50GAIgASgLMhwueW9ya2llLnYxLkNoYW5uZWxXYXRjaEV2ZW50SABCBwoFZXZlbnQiSAoNRG9jV2F0Y2hFdmVudBITCgtkb2N1bWVudF9pZBgBIAEoCRIiCgVldmVudBgCIAEoCzITLnlvcmtpZS52MS5Eb2NFdmVudCJQChFDaGFubmVsV2F0Y2hFdmVudBITCgtjaGFubmVsX2tleRgBIAEoCRImCgVldmVudBgCIAEoCzIXLnlvcmtpZS52MS5DaGFubmVsRXZlbnQiPgoUV2F0Y2hEb2N1bWVudFJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2RvY3VtZW50X2lkGAIgASgJIrYBChVXYXRjaERvY3VtZW50UmVzcG9uc2USSQoOaW5pdGlhbGl6YXRpb24YASABKAsyLy55b3JraWUudjEuV2F0Y2hEb2N1bWVudFJlc3BvbnNlLkluaXRpYWxpemF0aW9uSAASJAoFZXZlbnQYAiABKAsyEy55b3JraWUudjEuRG9jRXZlbnRIABokCg5Jbml0aWFsaXphdGlvbhISCgpjbGllbnRfaWRzGAEgAygJQgYKBGJvZHkiPQoTV2F0Y2hDaGFubmVsUmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLY2hhbm5lbF9rZXkYAiABKAkigwEKFFdhdGNoQ2hhbm5lbFJlc3BvbnNlEjkKC2luaXRpYWxpemVkGAEgASgLMiIueW9ya2llLnYxLldhdGNoQ2hhbm5lbEluaXRpYWxpemVkSAASKAoFZXZlbnQYAiABKAsyFy55b3JraWUudjEuQ2hhbm5lbEV2ZW50SABCBgoEYm9keSI9ChdXYXRjaENoYW5uZWxJbml0aWFsaXplZBIVCg1zZXNzaW9uX2NvdW50GAEgASgDEgsKA3NlcRgCIAEoAyJrChVSZW1vdmVEb2N1bWVudFJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2RvY3VtZW50X2lkGAIgASgJEioKC2NoYW5nZV9wYWNrGAMgASgLMhUueW9ya2llLnYxLkNoYW5nZVBhY2siRAoWUmVtb3ZlRG9jdW1lbnRSZXNwb25zZRIqCgtjaGFuZ2VfcGFjaxgBIAEoCzIVLnlvcmtpZS52MS5DaGFuZ2VQYWNrIn8KFlB1c2hQdWxsQ2hhbmdlc1JlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2RvY3VtZW50X2lkGAIgASgJEioKC2NoYW5nZV9wYWNrGAMgASgLMhUueW9ya2llLnYxLkNoYW5nZVBhY2sSEQoJcHVzaF9vbmx5GAQgASgIIkUKF1B1c2hQdWxsQ2hhbmdlc1Jlc3BvbnNlEioKC2NoYW5nZV9wYWNrGAEgASgLMhUueW9ya2llLnYxLkNoYW5nZVBhY2siYwoVQ3JlYXRlUmV2aXNpb25SZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtkb2N1bWVudF9pZBgCIAEoCRINCgVsYWJlbBgDIAEoCRITCgtkZXNjcmlwdGlvbhgEIAEoCSJGChZDcmVhdGVSZXZpc2lvblJlc3BvbnNlEiwKCHJldmlzaW9uGAEgASgLMhoueW9ya2llLnYxLlJldmlzaW9uU3VtbWFyeSJRChJHZXRSZXZpc2lvblJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2RvY3VtZW50X2lkGAIgASgJEhMKC3JldmlzaW9uX2lkGAMgASgJIkMKE0dldFJldmlzaW9uUmVzcG9uc2USLAoIcmV2aXNpb24YASABKAsyGi55b3JraWUudjEuUmV2aXNpb25TdW1tYXJ5InUKFExpc3RSZXZpc2lvbnNSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtkb2N1bWVudF9pZBgCIAEoCRIRCglwYWdlX3NpemUYAyABKAUSDgoGb2Zmc2V0GAQgASgFEhIKCmlzX2ZvcndhcmQYBSABKAgiRgoVTGlzdFJldmlzaW9uc1Jlc3BvbnNlEi0KCXJldmlzaW9ucxgBIAMoCzIaLnlvcmtpZS52MS5SZXZpc2lvblN1bW1hcnkiVQoWUmVzdG9yZVJldmlzaW9uUmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLZG9jdW1lbnRfaWQYAiABKAkSEwoLcmV2aXNpb25faWQYBCABKAkiGQoXUmVzdG9yZVJldmlzaW9uUmVzcG9uc2UiPgoUQXR0YWNoQ2hhbm5lbFJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2NoYW5uZWxfa2V5GAIgASgJIkIKFUF0dGFjaENoYW5uZWxSZXNwb25zZRISCgpzZXNzaW9uX2lkGAEgASgJEhUKDXNlc3Npb25fY291bnQYAiABKAMiUgoURGV0YWNoQ2hhbm5lbFJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2NoYW5uZWxfa2V5GAIgASgJEhIKCnNlc3Npb25faWQYAyABKAkiLgoVRGV0YWNoQ2hhbm5lbFJlc3BvbnNlEhUKDXNlc3Npb25fY291bnQYASABKAMi2gEKFVJlZnJlc2hDaGFubmVsUmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLY2hhbm5lbF9rZXkYAiABKAkSEgoKc2Vzc2lvbl9pZBgDIAEoCRISCgpjbGllbnRfa2V5GAQgASgJEkAKCG1ldGFkYXRhGAUgAygLMi4ueW9ya2llLnYxLlJlZnJlc2hDaGFubmVsUmVxdWVzdC5NZXRhZGF0YUVudHJ5Gi8KDU1ldGFkYXRhRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASJWChZSZWZyZXNoQ2hhbm5lbFJlc3BvbnNlEhUKDXNlc3Npb25fY291bnQYASABKAMSEQoJY2xpZW50X2lkGAIgASgJEhIKCnNlc3Npb25faWQYAyABKAkiKQoSUGVla0NoYW5uZWxSZXF1ZXN0EhMKC2NoYW5uZWxfa2V5GAEgASgJIiwKE1BlZWtDaGFubmVsUmVzcG9uc2USFQoNc2Vzc2lvbl9jb3VudBgBIAEoAyJaChBCcm9hZGNhc3RSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtjaGFubmVsX2tleRgCIAEoCRINCgV0b3BpYxgDIAEoCRIPCgdwYXlsb2FkGAQgASgMIhMKEUJyb2FkY2FzdFJlc3BvbnNlMpUMCg1Zb3JraWVTZXJ2aWNlElcKDkFjdGl2YXRlQ2xpZW50EiAueW9ya2llLnYxLkFjdGl2YXRlQ2xpZW50UmVxdWVzdBohLnlvcmtpZS52MS5BY3RpdmF0ZUNsaWVudFJlc3BvbnNlIgASXQoQRGVhY3RpdmF0ZUNsaWVudBIiLnlvcmtpZS52MS5EZWFjdGl2YXRlQ2xpZW50UmVxdWVzdBojLnlvcmtpZS52MS5EZWFjdGl2YXRlQ2xpZW50UmVzcG9uc2UiABJXCg5BdHRhY2hEb2N1bWVudBIgLnlvcmtpZS52MS5BdHRhY2hEb2N1bWVudFJlcXVlc3QaIS55b3JraWUudjEuQXR0YWNoRG9jdW1lbnRSZXNwb25zZSIAElcKDkRldGFjaERvY3VtZW50EiAueW9ya2llLnYxLkRldGFjaERvY3VtZW50UmVxdWVzdBohLnlvcmtpZS52MS5EZXRhY2hEb2N1bWVudFJlc3BvbnNlIgASVwoOUmVtb3ZlRG9jdW1lbnQSIC55b3JraWUudjEuUmVtb3ZlRG9jdW1lbnRSZXF1ZXN0GiEueW9ya2llLnYxLlJlbW92ZURvY3VtZW50UmVzcG9uc2UiABJaCg9QdXNoUHVsbENoYW5nZXMSIS55b3JraWUudjEuUHVzaFB1bGxDaGFuZ2VzUmVxdWVzdBoiLnlvcmtpZS52MS5QdXNoUHVsbENoYW5nZXNSZXNwb25zZSIAEj4KBVdhdGNoEhcueW9ya2llLnYxLldhdGNoUmVxdWVzdBoYLnlvcmtpZS52MS5XYXRjaFJlc3BvbnNlIgAwARJWCg1XYXRjaERvY3VtZW50Eh8ueW9ya2llLnYxLldhdGNoRG9jdW1lbnRSZXF1ZXN0GiAueW9ya2llLnYxLldhdGNoRG9jdW1lbnRSZXNwb25zZSIAMAESUwoMV2F0Y2hDaGFubmVsEh4ueW9ya2llLnYxLldhdGNoQ2hhbm5lbFJlcXVlc3QaHy55b3JraWUudjEuV2F0Y2hDaGFubmVsUmVzcG9uc2UiADABElcKDkNyZWF0ZVJldmlzaW9uEiAueW9ya2llLnYxLkNyZWF0ZVJldmlzaW9uUmVxdWVzdBohLnlvcmtpZS52MS5DcmVhdGVSZXZpc2lvblJlc3BvbnNlIgASTgoLR2V0UmV2aXNpb24SHS55b3JraWUudjEuR2V0UmV2aXNpb25SZXF1ZXN0Gh4ueW9ya2llLnYxLkdldFJldmlzaW9uUmVzcG9uc2UiABJUCg1MaXN0UmV2aXNpb25zEh8ueW9ya2llLnYxLkxpc3RSZXZpc2lvbnNSZXF1ZXN0GiAueW9ya2llLnYxLkxpc3RSZXZpc2lvbnNSZXNwb25zZSIAEloKD1Jlc3RvcmVSZXZpc2lvbhIhLnlvcmtpZS52MS5SZXN0b3JlUmV2aXNpb25SZXF1ZXN0GiIueW9ya2llLnYxLlJlc3RvcmVSZXZpc2lvblJlc3BvbnNlIgASVAoNQXR0YWNoQ2hhbm5lbBIfLnlvcmtpZS52MS5BdHRhY2hDaGFubmVsUmVxdWVzdBogLnlvcmtpZS52MS5BdHRhY2hDaGFubmVsUmVzcG9uc2UiABJUCg1EZXRhY2hDaGFubmVsEh8ueW9ya2llLnYxLkRldGFjaENoYW5uZWxSZXF1ZXN0GiAueW9ya2llLnYxLkRldGFjaENoYW5uZWxSZXNwb25zZSIAElcKDlJlZnJlc2hDaGFubmVsEiAueW9ya2llLnYxLlJlZnJlc2hDaGFubmVsUmVxdWVzdBohLnlvcmtpZS52MS5SZWZyZXNoQ2hhbm5lbFJlc3BvbnNlIgASTgoLUGVla0NoYW5uZWwSHS55b3JraWUudjEuUGVla0NoYW5uZWxSZXF1ZXN0Gh4ueW9ya2llLnYxLlBlZWtDaGFubmVsUmVzcG9uc2UiABJICglCcm9hZGNhc3QSGy55b3JraWUudjEuQnJvYWRjYXN0UmVxdWVzdBocLnlvcmtpZS52MS5Ccm9hZGNhc3RSZXNwb25zZSIAQkUKEWRldi55b3JraWUuYXBpLnYxUAFaLmdpdGh1Yi5jb20veW9ya2llLXRlYW0veW9ya2llL2FwaS95b3JraWUvdjE7djFiBnByb3RvMw", [file_yorkie_v1_resources]);
|
|
5873
5873
|
const YorkieService = /* @__PURE__ */ serviceDesc(file_yorkie_v1_yorkie, 0);
|
|
5874
5874
|
const file_google_rpc_error_details = /* @__PURE__ */ fileDesc("Ch5nb29nbGUvcnBjL2Vycm9yX2RldGFpbHMucHJvdG8SCmdvb2dsZS5ycGMikwEKCUVycm9ySW5mbxIOCgZyZWFzb24YASABKAkSDgoGZG9tYWluGAIgASgJEjUKCG1ldGFkYXRhGAMgAygLMiMuZ29vZ2xlLnJwYy5FcnJvckluZm8uTWV0YWRhdGFFbnRyeRovCg1NZXRhZGF0YUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiOwoJUmV0cnlJbmZvEi4KC3JldHJ5X2RlbGF5GAEgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uIjIKCURlYnVnSW5mbxIVCg1zdGFja19lbnRyaWVzGAEgAygJEg4KBmRldGFpbBgCIAEoCSKPAwoMUXVvdGFGYWlsdXJlEjYKCnZpb2xhdGlvbnMYASADKAsyIi5nb29nbGUucnBjLlF1b3RhRmFpbHVyZS5WaW9sYXRpb24axgIKCVZpb2xhdGlvbhIPCgdzdWJqZWN0GAEgASgJEhMKC2Rlc2NyaXB0aW9uGAIgASgJEhMKC2FwaV9zZXJ2aWNlGAMgASgJEhQKDHF1b3RhX21ldHJpYxgEIAEoCRIQCghxdW90YV9pZBgFIAEoCRJRChBxdW90YV9kaW1lbnNpb25zGAYgAygLMjcuZ29vZ2xlLnJwYy5RdW90YUZhaWx1cmUuVmlvbGF0aW9uLlF1b3RhRGltZW5zaW9uc0VudHJ5EhMKC3F1b3RhX3ZhbHVlGAcgASgDEh8KEmZ1dHVyZV9xdW90YV92YWx1ZRgIIAEoA0gAiAEBGjYKFFF1b3RhRGltZW5zaW9uc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAFCFQoTX2Z1dHVyZV9xdW90YV92YWx1ZSKVAQoTUHJlY29uZGl0aW9uRmFpbHVyZRI9Cgp2aW9sYXRpb25zGAEgAygLMikuZ29vZ2xlLnJwYy5QcmVjb25kaXRpb25GYWlsdXJlLlZpb2xhdGlvbho/CglWaW9sYXRpb24SDAoEdHlwZRgBIAEoCRIPCgdzdWJqZWN0GAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJIswBCgpCYWRSZXF1ZXN0Ej8KEGZpZWxkX3Zpb2xhdGlvbnMYASADKAsyJS5nb29nbGUucnBjLkJhZFJlcXVlc3QuRmllbGRWaW9sYXRpb24afQoORmllbGRWaW9sYXRpb24SDQoFZmllbGQYASABKAkSEwoLZGVzY3JpcHRpb24YAiABKAkSDgoGcmVhc29uGAMgASgJEjcKEWxvY2FsaXplZF9tZXNzYWdlGAQgASgLMhwuZ29vZ2xlLnJwYy5Mb2NhbGl6ZWRNZXNzYWdlIjcKC1JlcXVlc3RJbmZvEhIKCnJlcXVlc3RfaWQYASABKAkSFAoMc2VydmluZ19kYXRhGAIgASgJImAKDFJlc291cmNlSW5mbxIVCg1yZXNvdXJjZV90eXBlGAEgASgJEhUKDXJlc291cmNlX25hbWUYAiABKAkSDQoFb3duZXIYAyABKAkSEwoLZGVzY3JpcHRpb24YBCABKAkiVgoESGVscBIkCgVsaW5rcxgBIAMoCzIVLmdvb2dsZS5ycGMuSGVscC5MaW5rGigKBExpbmsSEwoLZGVzY3JpcHRpb24YASABKAkSCwoDdXJsGAIgASgJIjMKEExvY2FsaXplZE1lc3NhZ2USDgoGbG9jYWxlGAEgASgJEg8KB21lc3NhZ2UYAiABKAlCbAoOY29tLmdvb2dsZS5ycGNCEUVycm9yRGV0YWlsc1Byb3RvUAFaP2dvb2dsZS5nb2xhbmcub3JnL2dlbnByb3RvL2dvb2dsZWFwaXMvcnBjL2VycmRldGFpbHM7ZXJyZGV0YWlsc6ICA1JQQ2IGcHJvdG8z", [file_google_protobuf_duration]);
|
|
5875
5875
|
const ErrorInfoSchema = /* @__PURE__ */ messageDesc(file_google_rpc_error_details, 0);
|
|
@@ -5882,6 +5882,7 @@
|
|
|
5882
5882
|
Code2["ErrDummy"] = "ErrDummy";
|
|
5883
5883
|
Code2["ErrNotAttached"] = "ErrNotAttached";
|
|
5884
5884
|
Code2["ErrNotDetached"] = "ErrNotDetached";
|
|
5885
|
+
Code2["ErrSessionNotFound"] = "ErrSessionNotFound";
|
|
5885
5886
|
Code2["ErrDocumentRemoved"] = "ErrDocumentRemoved";
|
|
5886
5887
|
Code2["ErrDocumentSizeExceedsLimit"] = "ErrDocumentSizeExceedsLimit";
|
|
5887
5888
|
Code2["ErrDocumentSchemaValidationFailed"] = "ErrDocumentSchemaValidationFailed";
|
|
@@ -20785,12 +20786,25 @@
|
|
|
20785
20786
|
}
|
|
20786
20787
|
class Attachment {
|
|
20787
20788
|
resource;
|
|
20789
|
+
/**
|
|
20790
|
+
* For Documents: the document's resourceID, available at attach time.
|
|
20791
|
+
* For Channels: the server-issued session_id. Starts empty and is
|
|
20792
|
+
* populated after the first `RefreshChannel` first-call response.
|
|
20793
|
+
*/
|
|
20788
20794
|
resourceID;
|
|
20789
20795
|
syncMode;
|
|
20790
20796
|
changeEventReceived;
|
|
20791
20797
|
lastHeartbeatTime;
|
|
20792
20798
|
pollInterval;
|
|
20793
20799
|
pollIntervalPinned;
|
|
20800
|
+
/**
|
|
20801
|
+
* `unsubscribeLocalBroadcast` is set by `attachChannel` when it forwards
|
|
20802
|
+
* a Channel's `local-broadcast` events to the RPC client, and consumed
|
|
20803
|
+
* by `detachInternal` so the subscription does not survive a detach.
|
|
20804
|
+
* Without this, re-attaching a channel accumulates duplicate handlers
|
|
20805
|
+
* on each attach cycle.
|
|
20806
|
+
*/
|
|
20807
|
+
unsubscribeLocalBroadcast;
|
|
20794
20808
|
reconnectStreamDelay;
|
|
20795
20809
|
cancelled;
|
|
20796
20810
|
watchStream;
|
|
@@ -20798,13 +20812,13 @@
|
|
|
20798
20812
|
watchAbortController;
|
|
20799
20813
|
syncPromise;
|
|
20800
20814
|
_detaching = false;
|
|
20801
|
-
constructor(reconnectStreamDelay, resource, resourceID, syncMode, pollInterval = 0, pollIntervalPinned = false) {
|
|
20815
|
+
constructor(reconnectStreamDelay, resource, resourceID = "", syncMode, pollInterval = 0, pollIntervalPinned = false) {
|
|
20802
20816
|
this.reconnectStreamDelay = reconnectStreamDelay;
|
|
20803
20817
|
this.resource = resource;
|
|
20804
20818
|
this.resourceID = resourceID;
|
|
20805
20819
|
this.syncMode = syncMode;
|
|
20806
20820
|
this.changeEventReceived = syncMode !== void 0 ? false : void 0;
|
|
20807
|
-
this.lastHeartbeatTime =
|
|
20821
|
+
this.lastHeartbeatTime = 0;
|
|
20808
20822
|
this.pollInterval = pollInterval;
|
|
20809
20823
|
this.pollIntervalPinned = pollIntervalPinned;
|
|
20810
20824
|
this.cancelled = false;
|
|
@@ -20966,7 +20980,7 @@
|
|
|
20966
20980
|
};
|
|
20967
20981
|
}
|
|
20968
20982
|
const name = "@yorkie-js/sdk";
|
|
20969
|
-
const version = "0.7.
|
|
20983
|
+
const version = "0.7.10-rc";
|
|
20970
20984
|
const pkg = {
|
|
20971
20985
|
name,
|
|
20972
20986
|
version
|
|
@@ -21004,6 +21018,7 @@
|
|
|
21004
21018
|
ChannelEventType2["Broadcast"] = "broadcast";
|
|
21005
21019
|
ChannelEventType2["LocalBroadcast"] = "local-broadcast";
|
|
21006
21020
|
ChannelEventType2["AuthError"] = "auth-error";
|
|
21021
|
+
ChannelEventType2["SyncError"] = "sync-error";
|
|
21007
21022
|
return ChannelEventType2;
|
|
21008
21023
|
})(ChannelEventType || {});
|
|
21009
21024
|
const KeyPathSeparator = ".";
|
|
@@ -21143,6 +21158,13 @@
|
|
|
21143
21158
|
}
|
|
21144
21159
|
});
|
|
21145
21160
|
}
|
|
21161
|
+
if (typeOrTopic === "sync-error") {
|
|
21162
|
+
return this.eventStream.subscribe((event) => {
|
|
21163
|
+
if (event.type === "sync-error") {
|
|
21164
|
+
callback(event);
|
|
21165
|
+
}
|
|
21166
|
+
});
|
|
21167
|
+
}
|
|
21146
21168
|
if (typeOrTopic === "presence") {
|
|
21147
21169
|
return this.eventStream.subscribe((event) => {
|
|
21148
21170
|
if (event.type === "presence-changed" || event.type === "initialized") {
|
|
@@ -21262,13 +21284,14 @@
|
|
|
21262
21284
|
ClientCondition2["WatchLoop"] = "WatchLoop";
|
|
21263
21285
|
return ClientCondition2;
|
|
21264
21286
|
})(ClientCondition || {});
|
|
21265
|
-
const
|
|
21287
|
+
const DefaultDocumentPollIntervalMs = 3e3;
|
|
21288
|
+
const DefaultChannelHeartbeatMs = 5e3;
|
|
21266
21289
|
const DefaultClientOptions = {
|
|
21267
21290
|
rpcAddr: "https://api.yorkie.dev",
|
|
21268
21291
|
syncLoopDuration: 50,
|
|
21269
21292
|
retrySyncLoopDelay: 1e3,
|
|
21270
21293
|
reconnectStreamDelay: 1e3,
|
|
21271
|
-
channelHeartbeatInterval:
|
|
21294
|
+
channelHeartbeatInterval: DefaultChannelHeartbeatMs
|
|
21272
21295
|
};
|
|
21273
21296
|
const DefaultBroadcastOptions = {
|
|
21274
21297
|
maxRetries: Infinity,
|
|
@@ -21465,7 +21488,7 @@
|
|
|
21465
21488
|
);
|
|
21466
21489
|
}
|
|
21467
21490
|
const pollIntervalPinned = opts.documentPollInterval !== void 0;
|
|
21468
|
-
const pollInterval = pollIntervalPinned ? opts.documentPollInterval : syncMode === "polling" ?
|
|
21491
|
+
const pollInterval = pollIntervalPinned ? opts.documentPollInterval : syncMode === "polling" ? DefaultDocumentPollIntervalMs : 0;
|
|
21469
21492
|
return this.enqueueTask(async () => {
|
|
21470
21493
|
try {
|
|
21471
21494
|
const res = await this.rpcClient.attachDocument(
|
|
@@ -21594,127 +21617,88 @@
|
|
|
21594
21617
|
return this.enqueueTask(task);
|
|
21595
21618
|
}
|
|
21596
21619
|
/**
|
|
21597
|
-
* `
|
|
21598
|
-
*
|
|
21620
|
+
* `attachChannel` attaches the given channel to this client. The channel is
|
|
21621
|
+
* registered locally and the server is notified on the next RefreshChannel
|
|
21622
|
+
* heartbeat.
|
|
21599
21623
|
*/
|
|
21600
21624
|
async attachChannel(channel, opts = {}) {
|
|
21601
|
-
if (!this.isActive()) {
|
|
21602
|
-
throw new YorkieError(
|
|
21603
|
-
Code.ErrClientNotActivated,
|
|
21604
|
-
`${this.key} is not active`
|
|
21605
|
-
);
|
|
21606
|
-
}
|
|
21607
21625
|
if (channel.getStatus() !== ChannelStatus.Detached) {
|
|
21608
21626
|
throw new YorkieError(
|
|
21609
21627
|
Code.ErrNotDetached,
|
|
21610
21628
|
`${channel.getKey()} is not detached`
|
|
21611
21629
|
);
|
|
21612
21630
|
}
|
|
21613
|
-
|
|
21631
|
+
const syncMode = opts.syncMode ?? "realtime";
|
|
21632
|
+
this.assertValidChannelSyncMode(syncMode);
|
|
21633
|
+
if (opts.channelHeartbeatInterval !== void 0 && opts.channelHeartbeatInterval <= 0) {
|
|
21634
|
+
throw new YorkieError(
|
|
21635
|
+
Code.ErrInvalidArgument,
|
|
21636
|
+
"channelHeartbeatInterval must be greater than 0"
|
|
21637
|
+
);
|
|
21638
|
+
}
|
|
21639
|
+
const pollIntervalPinned = opts.channelHeartbeatInterval !== void 0;
|
|
21640
|
+
const pollInterval = opts.channelHeartbeatInterval ?? this.channelHeartbeatInterval;
|
|
21614
21641
|
const task = async () => {
|
|
21615
|
-
|
|
21616
|
-
|
|
21617
|
-
|
|
21618
|
-
|
|
21619
|
-
|
|
21620
|
-
|
|
21621
|
-
|
|
21622
|
-
|
|
21623
|
-
|
|
21624
|
-
|
|
21625
|
-
|
|
21626
|
-
|
|
21627
|
-
|
|
21628
|
-
|
|
21629
|
-
|
|
21630
|
-
const syncMode = opts.syncMode ?? "realtime";
|
|
21631
|
-
this.assertValidChannelSyncMode(syncMode);
|
|
21632
|
-
if (opts.channelHeartbeatInterval !== void 0 && opts.channelHeartbeatInterval <= 0) {
|
|
21633
|
-
throw new YorkieError(
|
|
21634
|
-
Code.ErrInvalidArgument,
|
|
21635
|
-
"channelHeartbeatInterval must be greater than 0"
|
|
21636
|
-
);
|
|
21637
|
-
}
|
|
21638
|
-
const pollIntervalPinned = opts.channelHeartbeatInterval !== void 0;
|
|
21639
|
-
const pollInterval = pollIntervalPinned ? opts.channelHeartbeatInterval : syncMode === "polling" ? DefaultPollingIntervalMs : this.channelHeartbeatInterval;
|
|
21640
|
-
const attachment = new Attachment(
|
|
21641
|
-
this.reconnectStreamDelay,
|
|
21642
|
-
channel,
|
|
21643
|
-
res.sessionId,
|
|
21644
|
-
syncMode,
|
|
21645
|
-
pollInterval,
|
|
21646
|
-
pollIntervalPinned
|
|
21647
|
-
);
|
|
21648
|
-
channel.subscribe("local-broadcast", (event) => {
|
|
21642
|
+
if (this.id) {
|
|
21643
|
+
channel.setActor(this.id);
|
|
21644
|
+
}
|
|
21645
|
+
const attachment = new Attachment(
|
|
21646
|
+
this.reconnectStreamDelay,
|
|
21647
|
+
channel,
|
|
21648
|
+
"",
|
|
21649
|
+
// sessionID populated on first refresh response
|
|
21650
|
+
syncMode,
|
|
21651
|
+
pollInterval,
|
|
21652
|
+
pollIntervalPinned
|
|
21653
|
+
);
|
|
21654
|
+
attachment.unsubscribeLocalBroadcast = channel.subscribe(
|
|
21655
|
+
"local-broadcast",
|
|
21656
|
+
(event) => {
|
|
21649
21657
|
const { topic, payload, options } = event;
|
|
21650
21658
|
this.broadcast(channel.getKey(), topic, payload, options).catch(
|
|
21651
21659
|
(error) => {
|
|
21652
|
-
if (options?.error)
|
|
21653
|
-
options.error(error);
|
|
21654
|
-
}
|
|
21660
|
+
if (options?.error) options.error(error);
|
|
21655
21661
|
logger.error(`[BC] c:"${this.getKey()}" failed: ${error}`);
|
|
21656
21662
|
}
|
|
21657
21663
|
);
|
|
21658
|
-
});
|
|
21659
|
-
this.attachmentMap.set(channel.getKey(), attachment);
|
|
21660
|
-
if (syncMode === "realtime") {
|
|
21661
|
-
await this.runWatchLoop(channel.getKey());
|
|
21662
21664
|
}
|
|
21663
|
-
|
|
21664
|
-
|
|
21665
|
-
|
|
21666
|
-
|
|
21667
|
-
|
|
21668
|
-
|
|
21669
|
-
|
|
21670
|
-
throw err;
|
|
21665
|
+
);
|
|
21666
|
+
this.attachmentMap.set(channel.getKey(), attachment);
|
|
21667
|
+
if (!this.conditions[
|
|
21668
|
+
"SyncLoop"
|
|
21669
|
+
/* SyncLoop */
|
|
21670
|
+
]) {
|
|
21671
|
+
this.runSyncLoop();
|
|
21671
21672
|
}
|
|
21673
|
+
logger.info(
|
|
21674
|
+
`[AP] c:"${this.getKey()}" attaches p:"${channel.getKey()}" mode:${syncMode}`
|
|
21675
|
+
);
|
|
21676
|
+
return channel;
|
|
21672
21677
|
};
|
|
21673
21678
|
return this.enqueueTask(task);
|
|
21674
21679
|
}
|
|
21675
21680
|
/**
|
|
21676
|
-
* `detachChannel` detaches the given channel from this client.
|
|
21677
|
-
*
|
|
21681
|
+
* `detachChannel` detaches the given channel from this client. The detach
|
|
21682
|
+
* is a local cleanup; the server reclaims the session via TTL when
|
|
21683
|
+
* heartbeats stop.
|
|
21678
21684
|
*/
|
|
21679
21685
|
async detachChannel(channel) {
|
|
21680
|
-
|
|
21681
|
-
|
|
21682
|
-
Code.ErrClientNotActivated,
|
|
21683
|
-
`${this.key} is not active`
|
|
21684
|
-
);
|
|
21685
|
-
}
|
|
21686
|
-
if (!this.attachmentMap.has(channel.getKey())) {
|
|
21686
|
+
const attachment = this.attachmentMap.get(channel.getKey());
|
|
21687
|
+
if (!attachment) {
|
|
21687
21688
|
throw new YorkieError(
|
|
21688
21689
|
Code.ErrNotAttached,
|
|
21689
21690
|
`${channel.getKey()} is not attached`
|
|
21690
21691
|
);
|
|
21691
21692
|
}
|
|
21693
|
+
attachment.markDetaching();
|
|
21694
|
+
await attachment.waitForSyncComplete();
|
|
21692
21695
|
const task = async () => {
|
|
21693
|
-
|
|
21694
|
-
|
|
21695
|
-
|
|
21696
|
-
|
|
21697
|
-
|
|
21698
|
-
|
|
21699
|
-
},
|
|
21700
|
-
{
|
|
21701
|
-
headers: {
|
|
21702
|
-
"x-shard-key": `${this.apiKey}/${channel.getFirstKeyPath()}`
|
|
21703
|
-
}
|
|
21704
|
-
}
|
|
21705
|
-
);
|
|
21706
|
-
channel.updateSessionCount(Number(res.sessionCount), 0);
|
|
21707
|
-
channel.applyStatus(ChannelStatus.Detached);
|
|
21708
|
-
this.detachInternal(channel.getKey());
|
|
21709
|
-
logger.info(
|
|
21710
|
-
`[DP] c:"${this.getKey()}" detaches p:"${channel.getKey()}" count:${channel.getSessionCount()}`
|
|
21711
|
-
);
|
|
21712
|
-
return channel;
|
|
21713
|
-
} catch (err) {
|
|
21714
|
-
logger.error(`[DP] c:"${this.getKey()}" err :`, err);
|
|
21715
|
-
await this.handleConnectError(err);
|
|
21716
|
-
throw err;
|
|
21717
|
-
}
|
|
21696
|
+
channel.applyStatus(ChannelStatus.Detached);
|
|
21697
|
+
this.detachInternal(channel.getKey());
|
|
21698
|
+
logger.info(
|
|
21699
|
+
`[DP] c:"${this.getKey()}" detaches p:"${channel.getKey()}" (local)`
|
|
21700
|
+
);
|
|
21701
|
+
return channel;
|
|
21718
21702
|
};
|
|
21719
21703
|
return this.enqueueTask(task);
|
|
21720
21704
|
}
|
|
@@ -21755,7 +21739,7 @@
|
|
|
21755
21739
|
attachment.changeEventReceived = true;
|
|
21756
21740
|
}
|
|
21757
21741
|
if (!attachment.pollIntervalPinned) {
|
|
21758
|
-
attachment.pollInterval = syncMode === "polling" ?
|
|
21742
|
+
attachment.pollInterval = syncMode === "polling" ? DefaultDocumentPollIntervalMs : 0;
|
|
21759
21743
|
}
|
|
21760
21744
|
if ((prevSyncMode === "manual" || prevSyncMode === "polling") && syncMode !== "manual" && syncMode !== "polling") {
|
|
21761
21745
|
attachment.resetCancelled();
|
|
@@ -21776,12 +21760,6 @@
|
|
|
21776
21760
|
}
|
|
21777
21761
|
}
|
|
21778
21762
|
async changeChannelSyncMode(channel, syncMode) {
|
|
21779
|
-
if (!this.isActive()) {
|
|
21780
|
-
throw new YorkieError(
|
|
21781
|
-
Code.ErrClientNotActivated,
|
|
21782
|
-
`${this.key} is not active`
|
|
21783
|
-
);
|
|
21784
|
-
}
|
|
21785
21763
|
const attachment = this.attachmentMap.get(channel.getKey());
|
|
21786
21764
|
if (!attachment) {
|
|
21787
21765
|
throw new YorkieError(
|
|
@@ -21799,7 +21777,7 @@
|
|
|
21799
21777
|
}
|
|
21800
21778
|
attachment.changeSyncMode(syncMode);
|
|
21801
21779
|
if (!attachment.pollIntervalPinned) {
|
|
21802
|
-
attachment.pollInterval = syncMode === "
|
|
21780
|
+
attachment.pollInterval = syncMode === "manual" ? 0 : this.channelHeartbeatInterval;
|
|
21803
21781
|
}
|
|
21804
21782
|
if (syncMode === "realtime") {
|
|
21805
21783
|
attachment.resetCancelled();
|
|
@@ -21811,7 +21789,7 @@
|
|
|
21811
21789
|
* `sync` implementation that handles both Document and Channel.
|
|
21812
21790
|
*/
|
|
21813
21791
|
sync(resource) {
|
|
21814
|
-
if (!this.isActive()) {
|
|
21792
|
+
if (!(resource instanceof Channel) && !this.isActive()) {
|
|
21815
21793
|
throw new YorkieError(
|
|
21816
21794
|
Code.ErrClientNotActivated,
|
|
21817
21795
|
`${this.key} is not active`
|
|
@@ -22138,12 +22116,6 @@
|
|
|
22138
22116
|
* subscribe to channel events. Polling is the caller's responsibility.
|
|
22139
22117
|
*/
|
|
22140
22118
|
async peekChannel(channelKey) {
|
|
22141
|
-
if (!this.isActive()) {
|
|
22142
|
-
throw new YorkieError(
|
|
22143
|
-
Code.ErrClientNotActivated,
|
|
22144
|
-
`${this.key} is not active`
|
|
22145
|
-
);
|
|
22146
|
-
}
|
|
22147
22119
|
return this.enqueueTask(async () => {
|
|
22148
22120
|
const firstKeyPath = channelKey.split(".")[0];
|
|
22149
22121
|
const res = await this.rpcClient.peekChannel(
|
|
@@ -22161,12 +22133,6 @@
|
|
|
22161
22133
|
* `broadcast` broadcasts the given payload to the given topic.
|
|
22162
22134
|
*/
|
|
22163
22135
|
async broadcast(key, topic, payload, options) {
|
|
22164
|
-
if (!this.isActive()) {
|
|
22165
|
-
throw new YorkieError(
|
|
22166
|
-
Code.ErrClientNotActivated,
|
|
22167
|
-
`${this.key} is not active`
|
|
22168
|
-
);
|
|
22169
|
-
}
|
|
22170
22136
|
const attachment = this.attachmentMap.get(key);
|
|
22171
22137
|
if (!attachment) {
|
|
22172
22138
|
throw new YorkieError(Code.ErrNotAttached, `${key} is not attached`);
|
|
@@ -22243,8 +22209,16 @@
|
|
|
22243
22209
|
*/
|
|
22244
22210
|
runSyncLoop() {
|
|
22245
22211
|
const doLoop = async () => {
|
|
22246
|
-
if (
|
|
22247
|
-
logger.debug(`[SL] c:"${this.getKey()}" exit sync loop`);
|
|
22212
|
+
if (this.deactivating) {
|
|
22213
|
+
logger.debug(`[SL] c:"${this.getKey()}" exit sync loop (deactivating)`);
|
|
22214
|
+
this.conditions[
|
|
22215
|
+
"SyncLoop"
|
|
22216
|
+
/* SyncLoop */
|
|
22217
|
+
] = false;
|
|
22218
|
+
return;
|
|
22219
|
+
}
|
|
22220
|
+
if (!this.isActive() && this.attachmentMap.size === 0) {
|
|
22221
|
+
logger.debug(`[SL] c:"${this.getKey()}" exit sync loop (idle)`);
|
|
22248
22222
|
this.conditions[
|
|
22249
22223
|
"SyncLoop"
|
|
22250
22224
|
/* SyncLoop */
|
|
@@ -22630,6 +22604,10 @@
|
|
|
22630
22604
|
return;
|
|
22631
22605
|
}
|
|
22632
22606
|
attachment.cancelWatchStream();
|
|
22607
|
+
if (attachment.unsubscribeLocalBroadcast) {
|
|
22608
|
+
attachment.unsubscribeLocalBroadcast();
|
|
22609
|
+
attachment.unsubscribeLocalBroadcast = void 0;
|
|
22610
|
+
}
|
|
22633
22611
|
if (attachment.resource instanceof Document) {
|
|
22634
22612
|
attachment.resource.resetOnlineClients();
|
|
22635
22613
|
}
|
|
@@ -22638,12 +22616,17 @@
|
|
|
22638
22616
|
async syncInternal(attachment, syncMode) {
|
|
22639
22617
|
const { resource } = attachment;
|
|
22640
22618
|
if (resource instanceof Channel) {
|
|
22619
|
+
const isFirstCall = !resource.getSessionID();
|
|
22641
22620
|
try {
|
|
22642
22621
|
const res = await this.rpcClient.refreshChannel(
|
|
22643
22622
|
{
|
|
22644
|
-
clientId: this.id,
|
|
22623
|
+
clientId: this.id ?? "",
|
|
22645
22624
|
channelKey: resource.getKey(),
|
|
22646
|
-
sessionId: resource.getSessionID()
|
|
22625
|
+
sessionId: resource.getSessionID() ?? "",
|
|
22626
|
+
// First-call only — these fields are ignored by the server
|
|
22627
|
+
// once a session_id is established.
|
|
22628
|
+
clientKey: isFirstCall ? this.key : "",
|
|
22629
|
+
metadata: isFirstCall ? this.metadata : {}
|
|
22647
22630
|
},
|
|
22648
22631
|
{
|
|
22649
22632
|
headers: {
|
|
@@ -22651,6 +22634,31 @@
|
|
|
22651
22634
|
}
|
|
22652
22635
|
}
|
|
22653
22636
|
);
|
|
22637
|
+
if (isFirstCall) {
|
|
22638
|
+
if (this.deactivating || attachment.isDetaching()) {
|
|
22639
|
+
return resource;
|
|
22640
|
+
}
|
|
22641
|
+
if (res.clientId && !this.id) {
|
|
22642
|
+
this.id = res.clientId;
|
|
22643
|
+
this.status = "activated";
|
|
22644
|
+
resource.setActor(res.clientId);
|
|
22645
|
+
} else if (this.id) {
|
|
22646
|
+
resource.setActor(this.id);
|
|
22647
|
+
}
|
|
22648
|
+
if (res.sessionId) {
|
|
22649
|
+
resource.setSessionID(res.sessionId);
|
|
22650
|
+
attachment.resourceID = res.sessionId;
|
|
22651
|
+
resource.applyStatus(ChannelStatus.Attached);
|
|
22652
|
+
}
|
|
22653
|
+
if (attachment.syncMode === "realtime") {
|
|
22654
|
+
this.runWatchLoop(resource.getKey()).catch((err) => {
|
|
22655
|
+
logger.error(
|
|
22656
|
+
`[WP] c:"${this.getKey()}" failed to start watch for p:"${resource.getKey()}":`,
|
|
22657
|
+
err
|
|
22658
|
+
);
|
|
22659
|
+
});
|
|
22660
|
+
}
|
|
22661
|
+
}
|
|
22654
22662
|
const prevCount = resource.getSessionCount();
|
|
22655
22663
|
if (resource.updateSessionCount(Number(res.sessionCount), 0)) {
|
|
22656
22664
|
if (resource.getSessionCount() !== prevCount) {
|
|
@@ -22665,6 +22673,21 @@
|
|
|
22665
22673
|
`[RP] c:"${this.getKey()}" refreshes p:"${resource.getKey()}" mode:${attachment.syncMode}`
|
|
22666
22674
|
);
|
|
22667
22675
|
} catch (err) {
|
|
22676
|
+
if (isErrorCode(err, Code.ErrSessionNotFound)) {
|
|
22677
|
+
logger.info(
|
|
22678
|
+
`[RP] c:"${this.getKey()}" session expired for p:"${resource.getKey()}", re-attaching`
|
|
22679
|
+
);
|
|
22680
|
+
resource.setSessionID("");
|
|
22681
|
+
attachment.resourceID = "";
|
|
22682
|
+
return resource;
|
|
22683
|
+
}
|
|
22684
|
+
if (!this.deactivating && !attachment.isDetaching()) {
|
|
22685
|
+
resource.publish({
|
|
22686
|
+
type: ChannelEventType.SyncError,
|
|
22687
|
+
error: err,
|
|
22688
|
+
method: "RefreshChannel"
|
|
22689
|
+
});
|
|
22690
|
+
}
|
|
22668
22691
|
logger.error(`[RP] c:"${this.getKey()}" err :`, err);
|
|
22669
22692
|
throw err;
|
|
22670
22693
|
}
|