@yorkie-js/sdk 0.7.9 → 0.7.10-rc2
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 +181 -125
- package/dist/yorkie-js-sdk.es.js.map +1 -1
- package/dist/yorkie-js-sdk.js +181 -125
- 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-rc2";
|
|
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,
|
|
@@ -21327,10 +21350,43 @@
|
|
|
21327
21350
|
baseUrl: rpcAddr,
|
|
21328
21351
|
interceptors: [authInterceptor, createMetricInterceptor(opts?.userAgent)],
|
|
21329
21352
|
fetch: (input, init) => {
|
|
21353
|
+
const url = typeof input === "string" ? input : input instanceof URL ? input.toString() : input.url;
|
|
21354
|
+
if (/\/yorkie\.v1\.YorkieService\/Watch/.test(url)) {
|
|
21355
|
+
return fetch(input, {
|
|
21356
|
+
...init,
|
|
21357
|
+
keepalive: this.keepalive
|
|
21358
|
+
});
|
|
21359
|
+
}
|
|
21360
|
+
const callerSignal = init?.signal ?? (input instanceof Request ? input.signal : void 0);
|
|
21361
|
+
const innerAC = new AbortController();
|
|
21362
|
+
let onCallerAbort;
|
|
21363
|
+
if (callerSignal) {
|
|
21364
|
+
if (callerSignal.aborted) {
|
|
21365
|
+
innerAC.abort(callerSignal.reason);
|
|
21366
|
+
} else {
|
|
21367
|
+
onCallerAbort = () => innerAC.abort(callerSignal.reason);
|
|
21368
|
+
callerSignal.addEventListener("abort", onCallerAbort);
|
|
21369
|
+
}
|
|
21370
|
+
}
|
|
21371
|
+
const detach = () => {
|
|
21372
|
+
if (callerSignal && onCallerAbort) {
|
|
21373
|
+
callerSignal.removeEventListener("abort", onCallerAbort);
|
|
21374
|
+
}
|
|
21375
|
+
};
|
|
21330
21376
|
return fetch(input, {
|
|
21331
21377
|
...init,
|
|
21378
|
+
signal: innerAC.signal,
|
|
21332
21379
|
keepalive: this.keepalive
|
|
21333
|
-
})
|
|
21380
|
+
}).then(
|
|
21381
|
+
(res) => {
|
|
21382
|
+
detach();
|
|
21383
|
+
return res;
|
|
21384
|
+
},
|
|
21385
|
+
(err) => {
|
|
21386
|
+
detach();
|
|
21387
|
+
throw err;
|
|
21388
|
+
}
|
|
21389
|
+
);
|
|
21334
21390
|
}
|
|
21335
21391
|
};
|
|
21336
21392
|
this.rpcClient = createClient(
|
|
@@ -21465,7 +21521,7 @@
|
|
|
21465
21521
|
);
|
|
21466
21522
|
}
|
|
21467
21523
|
const pollIntervalPinned = opts.documentPollInterval !== void 0;
|
|
21468
|
-
const pollInterval = pollIntervalPinned ? opts.documentPollInterval : syncMode === "polling" ?
|
|
21524
|
+
const pollInterval = pollIntervalPinned ? opts.documentPollInterval : syncMode === "polling" ? DefaultDocumentPollIntervalMs : 0;
|
|
21469
21525
|
return this.enqueueTask(async () => {
|
|
21470
21526
|
try {
|
|
21471
21527
|
const res = await this.rpcClient.attachDocument(
|
|
@@ -21594,127 +21650,88 @@
|
|
|
21594
21650
|
return this.enqueueTask(task);
|
|
21595
21651
|
}
|
|
21596
21652
|
/**
|
|
21597
|
-
* `
|
|
21598
|
-
*
|
|
21653
|
+
* `attachChannel` attaches the given channel to this client. The channel is
|
|
21654
|
+
* registered locally and the server is notified on the next RefreshChannel
|
|
21655
|
+
* heartbeat.
|
|
21599
21656
|
*/
|
|
21600
21657
|
async attachChannel(channel, opts = {}) {
|
|
21601
|
-
if (!this.isActive()) {
|
|
21602
|
-
throw new YorkieError(
|
|
21603
|
-
Code.ErrClientNotActivated,
|
|
21604
|
-
`${this.key} is not active`
|
|
21605
|
-
);
|
|
21606
|
-
}
|
|
21607
21658
|
if (channel.getStatus() !== ChannelStatus.Detached) {
|
|
21608
21659
|
throw new YorkieError(
|
|
21609
21660
|
Code.ErrNotDetached,
|
|
21610
21661
|
`${channel.getKey()} is not detached`
|
|
21611
21662
|
);
|
|
21612
21663
|
}
|
|
21613
|
-
|
|
21664
|
+
const syncMode = opts.syncMode ?? "realtime";
|
|
21665
|
+
this.assertValidChannelSyncMode(syncMode);
|
|
21666
|
+
if (opts.channelHeartbeatInterval !== void 0 && opts.channelHeartbeatInterval <= 0) {
|
|
21667
|
+
throw new YorkieError(
|
|
21668
|
+
Code.ErrInvalidArgument,
|
|
21669
|
+
"channelHeartbeatInterval must be greater than 0"
|
|
21670
|
+
);
|
|
21671
|
+
}
|
|
21672
|
+
const pollIntervalPinned = opts.channelHeartbeatInterval !== void 0;
|
|
21673
|
+
const pollInterval = opts.channelHeartbeatInterval ?? this.channelHeartbeatInterval;
|
|
21614
21674
|
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) => {
|
|
21675
|
+
if (this.id) {
|
|
21676
|
+
channel.setActor(this.id);
|
|
21677
|
+
}
|
|
21678
|
+
const attachment = new Attachment(
|
|
21679
|
+
this.reconnectStreamDelay,
|
|
21680
|
+
channel,
|
|
21681
|
+
"",
|
|
21682
|
+
// sessionID populated on first refresh response
|
|
21683
|
+
syncMode,
|
|
21684
|
+
pollInterval,
|
|
21685
|
+
pollIntervalPinned
|
|
21686
|
+
);
|
|
21687
|
+
attachment.unsubscribeLocalBroadcast = channel.subscribe(
|
|
21688
|
+
"local-broadcast",
|
|
21689
|
+
(event) => {
|
|
21649
21690
|
const { topic, payload, options } = event;
|
|
21650
21691
|
this.broadcast(channel.getKey(), topic, payload, options).catch(
|
|
21651
21692
|
(error) => {
|
|
21652
|
-
if (options?.error)
|
|
21653
|
-
options.error(error);
|
|
21654
|
-
}
|
|
21693
|
+
if (options?.error) options.error(error);
|
|
21655
21694
|
logger.error(`[BC] c:"${this.getKey()}" failed: ${error}`);
|
|
21656
21695
|
}
|
|
21657
21696
|
);
|
|
21658
|
-
});
|
|
21659
|
-
this.attachmentMap.set(channel.getKey(), attachment);
|
|
21660
|
-
if (syncMode === "realtime") {
|
|
21661
|
-
await this.runWatchLoop(channel.getKey());
|
|
21662
21697
|
}
|
|
21663
|
-
|
|
21664
|
-
|
|
21665
|
-
|
|
21666
|
-
|
|
21667
|
-
|
|
21668
|
-
|
|
21669
|
-
|
|
21670
|
-
throw err;
|
|
21698
|
+
);
|
|
21699
|
+
this.attachmentMap.set(channel.getKey(), attachment);
|
|
21700
|
+
if (!this.conditions[
|
|
21701
|
+
"SyncLoop"
|
|
21702
|
+
/* SyncLoop */
|
|
21703
|
+
]) {
|
|
21704
|
+
this.runSyncLoop();
|
|
21671
21705
|
}
|
|
21706
|
+
logger.info(
|
|
21707
|
+
`[AP] c:"${this.getKey()}" attaches p:"${channel.getKey()}" mode:${syncMode}`
|
|
21708
|
+
);
|
|
21709
|
+
return channel;
|
|
21672
21710
|
};
|
|
21673
21711
|
return this.enqueueTask(task);
|
|
21674
21712
|
}
|
|
21675
21713
|
/**
|
|
21676
|
-
* `detachChannel` detaches the given channel from this client.
|
|
21677
|
-
*
|
|
21714
|
+
* `detachChannel` detaches the given channel from this client. The detach
|
|
21715
|
+
* is a local cleanup; the server reclaims the session via TTL when
|
|
21716
|
+
* heartbeats stop.
|
|
21678
21717
|
*/
|
|
21679
21718
|
async detachChannel(channel) {
|
|
21680
|
-
|
|
21681
|
-
|
|
21682
|
-
Code.ErrClientNotActivated,
|
|
21683
|
-
`${this.key} is not active`
|
|
21684
|
-
);
|
|
21685
|
-
}
|
|
21686
|
-
if (!this.attachmentMap.has(channel.getKey())) {
|
|
21719
|
+
const attachment = this.attachmentMap.get(channel.getKey());
|
|
21720
|
+
if (!attachment) {
|
|
21687
21721
|
throw new YorkieError(
|
|
21688
21722
|
Code.ErrNotAttached,
|
|
21689
21723
|
`${channel.getKey()} is not attached`
|
|
21690
21724
|
);
|
|
21691
21725
|
}
|
|
21726
|
+
attachment.markDetaching();
|
|
21727
|
+
await attachment.waitForSyncComplete();
|
|
21692
21728
|
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
|
-
}
|
|
21729
|
+
channel.applyStatus(ChannelStatus.Detached);
|
|
21730
|
+
this.detachInternal(channel.getKey());
|
|
21731
|
+
logger.info(
|
|
21732
|
+
`[DP] c:"${this.getKey()}" detaches p:"${channel.getKey()}" (local)`
|
|
21733
|
+
);
|
|
21734
|
+
return channel;
|
|
21718
21735
|
};
|
|
21719
21736
|
return this.enqueueTask(task);
|
|
21720
21737
|
}
|
|
@@ -21755,7 +21772,7 @@
|
|
|
21755
21772
|
attachment.changeEventReceived = true;
|
|
21756
21773
|
}
|
|
21757
21774
|
if (!attachment.pollIntervalPinned) {
|
|
21758
|
-
attachment.pollInterval = syncMode === "polling" ?
|
|
21775
|
+
attachment.pollInterval = syncMode === "polling" ? DefaultDocumentPollIntervalMs : 0;
|
|
21759
21776
|
}
|
|
21760
21777
|
if ((prevSyncMode === "manual" || prevSyncMode === "polling") && syncMode !== "manual" && syncMode !== "polling") {
|
|
21761
21778
|
attachment.resetCancelled();
|
|
@@ -21776,12 +21793,6 @@
|
|
|
21776
21793
|
}
|
|
21777
21794
|
}
|
|
21778
21795
|
async changeChannelSyncMode(channel, syncMode) {
|
|
21779
|
-
if (!this.isActive()) {
|
|
21780
|
-
throw new YorkieError(
|
|
21781
|
-
Code.ErrClientNotActivated,
|
|
21782
|
-
`${this.key} is not active`
|
|
21783
|
-
);
|
|
21784
|
-
}
|
|
21785
21796
|
const attachment = this.attachmentMap.get(channel.getKey());
|
|
21786
21797
|
if (!attachment) {
|
|
21787
21798
|
throw new YorkieError(
|
|
@@ -21799,7 +21810,7 @@
|
|
|
21799
21810
|
}
|
|
21800
21811
|
attachment.changeSyncMode(syncMode);
|
|
21801
21812
|
if (!attachment.pollIntervalPinned) {
|
|
21802
|
-
attachment.pollInterval = syncMode === "
|
|
21813
|
+
attachment.pollInterval = syncMode === "manual" ? 0 : this.channelHeartbeatInterval;
|
|
21803
21814
|
}
|
|
21804
21815
|
if (syncMode === "realtime") {
|
|
21805
21816
|
attachment.resetCancelled();
|
|
@@ -21811,7 +21822,7 @@
|
|
|
21811
21822
|
* `sync` implementation that handles both Document and Channel.
|
|
21812
21823
|
*/
|
|
21813
21824
|
sync(resource) {
|
|
21814
|
-
if (!this.isActive()) {
|
|
21825
|
+
if (!(resource instanceof Channel) && !this.isActive()) {
|
|
21815
21826
|
throw new YorkieError(
|
|
21816
21827
|
Code.ErrClientNotActivated,
|
|
21817
21828
|
`${this.key} is not active`
|
|
@@ -22138,12 +22149,6 @@
|
|
|
22138
22149
|
* subscribe to channel events. Polling is the caller's responsibility.
|
|
22139
22150
|
*/
|
|
22140
22151
|
async peekChannel(channelKey) {
|
|
22141
|
-
if (!this.isActive()) {
|
|
22142
|
-
throw new YorkieError(
|
|
22143
|
-
Code.ErrClientNotActivated,
|
|
22144
|
-
`${this.key} is not active`
|
|
22145
|
-
);
|
|
22146
|
-
}
|
|
22147
22152
|
return this.enqueueTask(async () => {
|
|
22148
22153
|
const firstKeyPath = channelKey.split(".")[0];
|
|
22149
22154
|
const res = await this.rpcClient.peekChannel(
|
|
@@ -22161,12 +22166,6 @@
|
|
|
22161
22166
|
* `broadcast` broadcasts the given payload to the given topic.
|
|
22162
22167
|
*/
|
|
22163
22168
|
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
22169
|
const attachment = this.attachmentMap.get(key);
|
|
22171
22170
|
if (!attachment) {
|
|
22172
22171
|
throw new YorkieError(Code.ErrNotAttached, `${key} is not attached`);
|
|
@@ -22243,8 +22242,16 @@
|
|
|
22243
22242
|
*/
|
|
22244
22243
|
runSyncLoop() {
|
|
22245
22244
|
const doLoop = async () => {
|
|
22246
|
-
if (
|
|
22247
|
-
logger.debug(`[SL] c:"${this.getKey()}" exit sync loop`);
|
|
22245
|
+
if (this.deactivating) {
|
|
22246
|
+
logger.debug(`[SL] c:"${this.getKey()}" exit sync loop (deactivating)`);
|
|
22247
|
+
this.conditions[
|
|
22248
|
+
"SyncLoop"
|
|
22249
|
+
/* SyncLoop */
|
|
22250
|
+
] = false;
|
|
22251
|
+
return;
|
|
22252
|
+
}
|
|
22253
|
+
if (!this.isActive() && this.attachmentMap.size === 0) {
|
|
22254
|
+
logger.debug(`[SL] c:"${this.getKey()}" exit sync loop (idle)`);
|
|
22248
22255
|
this.conditions[
|
|
22249
22256
|
"SyncLoop"
|
|
22250
22257
|
/* SyncLoop */
|
|
@@ -22630,6 +22637,10 @@
|
|
|
22630
22637
|
return;
|
|
22631
22638
|
}
|
|
22632
22639
|
attachment.cancelWatchStream();
|
|
22640
|
+
if (attachment.unsubscribeLocalBroadcast) {
|
|
22641
|
+
attachment.unsubscribeLocalBroadcast();
|
|
22642
|
+
attachment.unsubscribeLocalBroadcast = void 0;
|
|
22643
|
+
}
|
|
22633
22644
|
if (attachment.resource instanceof Document) {
|
|
22634
22645
|
attachment.resource.resetOnlineClients();
|
|
22635
22646
|
}
|
|
@@ -22638,12 +22649,17 @@
|
|
|
22638
22649
|
async syncInternal(attachment, syncMode) {
|
|
22639
22650
|
const { resource } = attachment;
|
|
22640
22651
|
if (resource instanceof Channel) {
|
|
22652
|
+
const isFirstCall = !resource.getSessionID();
|
|
22641
22653
|
try {
|
|
22642
22654
|
const res = await this.rpcClient.refreshChannel(
|
|
22643
22655
|
{
|
|
22644
|
-
clientId: this.id,
|
|
22656
|
+
clientId: this.id ?? "",
|
|
22645
22657
|
channelKey: resource.getKey(),
|
|
22646
|
-
sessionId: resource.getSessionID()
|
|
22658
|
+
sessionId: resource.getSessionID() ?? "",
|
|
22659
|
+
// First-call only — these fields are ignored by the server
|
|
22660
|
+
// once a session_id is established.
|
|
22661
|
+
clientKey: isFirstCall ? this.key : "",
|
|
22662
|
+
metadata: isFirstCall ? this.metadata : {}
|
|
22647
22663
|
},
|
|
22648
22664
|
{
|
|
22649
22665
|
headers: {
|
|
@@ -22651,6 +22667,31 @@
|
|
|
22651
22667
|
}
|
|
22652
22668
|
}
|
|
22653
22669
|
);
|
|
22670
|
+
if (isFirstCall) {
|
|
22671
|
+
if (this.deactivating || attachment.isDetaching()) {
|
|
22672
|
+
return resource;
|
|
22673
|
+
}
|
|
22674
|
+
if (res.clientId && !this.id) {
|
|
22675
|
+
this.id = res.clientId;
|
|
22676
|
+
this.status = "activated";
|
|
22677
|
+
resource.setActor(res.clientId);
|
|
22678
|
+
} else if (this.id) {
|
|
22679
|
+
resource.setActor(this.id);
|
|
22680
|
+
}
|
|
22681
|
+
if (res.sessionId) {
|
|
22682
|
+
resource.setSessionID(res.sessionId);
|
|
22683
|
+
attachment.resourceID = res.sessionId;
|
|
22684
|
+
resource.applyStatus(ChannelStatus.Attached);
|
|
22685
|
+
}
|
|
22686
|
+
if (attachment.syncMode === "realtime") {
|
|
22687
|
+
this.runWatchLoop(resource.getKey()).catch((err) => {
|
|
22688
|
+
logger.error(
|
|
22689
|
+
`[WP] c:"${this.getKey()}" failed to start watch for p:"${resource.getKey()}":`,
|
|
22690
|
+
err
|
|
22691
|
+
);
|
|
22692
|
+
});
|
|
22693
|
+
}
|
|
22694
|
+
}
|
|
22654
22695
|
const prevCount = resource.getSessionCount();
|
|
22655
22696
|
if (resource.updateSessionCount(Number(res.sessionCount), 0)) {
|
|
22656
22697
|
if (resource.getSessionCount() !== prevCount) {
|
|
@@ -22665,6 +22706,21 @@
|
|
|
22665
22706
|
`[RP] c:"${this.getKey()}" refreshes p:"${resource.getKey()}" mode:${attachment.syncMode}`
|
|
22666
22707
|
);
|
|
22667
22708
|
} catch (err) {
|
|
22709
|
+
if (isErrorCode(err, Code.ErrSessionNotFound)) {
|
|
22710
|
+
logger.info(
|
|
22711
|
+
`[RP] c:"${this.getKey()}" session expired for p:"${resource.getKey()}", re-attaching`
|
|
22712
|
+
);
|
|
22713
|
+
resource.setSessionID("");
|
|
22714
|
+
attachment.resourceID = "";
|
|
22715
|
+
return resource;
|
|
22716
|
+
}
|
|
22717
|
+
if (!this.deactivating && !attachment.isDetaching()) {
|
|
22718
|
+
resource.publish({
|
|
22719
|
+
type: ChannelEventType.SyncError,
|
|
22720
|
+
error: err,
|
|
22721
|
+
method: "RefreshChannel"
|
|
22722
|
+
});
|
|
22723
|
+
}
|
|
22668
22724
|
logger.error(`[RP] c:"${this.getKey()}" err :`, err);
|
|
22669
22725
|
throw err;
|
|
22670
22726
|
}
|