@vertexvis/viewer 1.0.2-testing.5 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/dist/cjs/{controller-C-I_MLA3.js → controller-C74GX70e.js} +138 -34
  2. package/dist/cjs/controller-C74GX70e.js.map +1 -0
  3. package/dist/cjs/index.cjs.js +1 -1
  4. package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js +9 -9
  5. package/dist/cjs/vertex-scene-tree-table-column.cjs.entry.js +1 -1
  6. package/dist/cjs/vertex-scene-tree-table-header.cjs.entry.js +1 -1
  7. package/dist/cjs/vertex-scene-tree.cjs.entry.js +3 -3
  8. package/dist/cjs/vertex-viewer-box-query-tool.cjs.entry.js +2 -2
  9. package/dist/cjs/vertex-viewer-button_3.cjs.entry.js +1 -1
  10. package/dist/cjs/vertex-viewer-default-toolbar.cjs.entry.js +1 -1
  11. package/dist/cjs/vertex-viewer-dom-element_2.cjs.entry.js +1 -1
  12. package/dist/cjs/vertex-viewer-dom-group.cjs.entry.js +1 -1
  13. package/dist/cjs/vertex-viewer-hit-result-indicator.cjs.entry.js +1 -1
  14. package/dist/cjs/vertex-viewer-layer.cjs.entry.js +1 -1
  15. package/dist/cjs/vertex-viewer-measurement-distance.cjs.entry.js.map +1 -1
  16. package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js +3 -3
  17. package/dist/cjs/vertex-viewer-pin-label_2.cjs.entry.js +4 -4
  18. package/dist/cjs/vertex-viewer.cjs.entry.js +9 -4
  19. package/dist/cjs/vertex-viewer.cjs.entry.js.map +1 -1
  20. package/dist/collection/collection-manifest.json +3 -3
  21. package/dist/collection/components/scene-tree/lib/controller.js +48 -30
  22. package/dist/collection/components/scene-tree/lib/controller.js.map +1 -1
  23. package/dist/collection/components/scene-tree/lib/jwt.js +1 -1
  24. package/dist/collection/components/scene-tree/lib/jwt.js.map +1 -1
  25. package/dist/collection/components/scene-tree/scene-tree.js +2 -2
  26. package/dist/collection/components/scene-tree-notification-banner/scene-tree-notification-banner.js +1 -1
  27. package/dist/collection/components/scene-tree-search/scene-tree-search.js +3 -3
  28. package/dist/collection/components/scene-tree-table-column/scene-tree-table-column.js +1 -1
  29. package/dist/collection/components/scene-tree-table-header/scene-tree-table-header.js +1 -1
  30. package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.js +5 -5
  31. package/dist/collection/components/viewer/viewer.css +45 -1
  32. package/dist/collection/components/viewer/viewer.js +18 -6
  33. package/dist/collection/components/viewer/viewer.js.map +1 -1
  34. package/dist/collection/components/viewer-box-query-tool/viewer-box-query-tool.js +2 -2
  35. package/dist/collection/components/viewer-button/viewer-button.js +1 -1
  36. package/dist/collection/components/viewer-default-toolbar/viewer-default-toolbar.js +1 -1
  37. package/dist/collection/components/viewer-dom-element/viewer-dom-element.js +1 -1
  38. package/dist/collection/components/viewer-dom-group/viewer-dom-group.js +1 -1
  39. package/dist/collection/components/viewer-hit-result-indicator/viewer-hit-result-indicator.js +1 -1
  40. package/dist/collection/components/viewer-layer/viewer-layer.js +1 -1
  41. package/dist/collection/components/viewer-measurement-distance/viewer-measurement-distance.js.map +1 -1
  42. package/dist/collection/components/viewer-pin-group/viewer-pin-group.js +2 -2
  43. package/dist/collection/components/viewer-pin-label/viewer-pin-label.js +3 -3
  44. package/dist/collection/components/viewer-pin-label-line/viewer-pin-label-line.js +1 -1
  45. package/dist/collection/index.js +1 -0
  46. package/dist/collection/index.js.map +1 -1
  47. package/dist/components/index.js +1 -1
  48. package/dist/components/{p-DwnNhGFv.js → p-B4MsUZ3n.js} +2 -2
  49. package/dist/components/p-BAsg2_dY.js +5 -0
  50. package/dist/components/{p-BwtZ7wGg.js → p-BEkJ7rmE.js} +2 -2
  51. package/dist/components/{p-XmNH38dk.js → p-BmoTo_-J.js} +2 -2
  52. package/dist/components/{p-Dymd58Ac.js → p-C--Voxln.js} +2 -2
  53. package/dist/components/{p-BphxnS-a.js → p-CIuxJYJL.js} +2 -2
  54. package/dist/components/p-CnYEgl0H.js +5 -0
  55. package/dist/components/p-CnYEgl0H.js.map +1 -0
  56. package/dist/components/{p-1qJWPhfT.js → p-D97fhwcJ.js} +2 -2
  57. package/dist/components/{p-CaXlgCvb.js → p-Dva0y9cX.js} +2 -2
  58. package/dist/components/{p-BxYIAIHN.js → p-NXN0rSu2.js} +2 -2
  59. package/dist/components/{p-D0KZu516.js → p-Y8W_BXUk.js} +2 -2
  60. package/dist/components/{p-CXO1zq8l.js → p-mJhaiMMT.js} +2 -2
  61. package/dist/components/vertex-scene-tree-notification-banner.js +1 -1
  62. package/dist/components/vertex-scene-tree-search.js +1 -1
  63. package/dist/components/vertex-scene-tree-table-column.js +1 -1
  64. package/dist/components/vertex-scene-tree-table-header.js +1 -1
  65. package/dist/components/vertex-scene-tree-table-layout.js +1 -1
  66. package/dist/components/vertex-scene-tree.js +1 -1
  67. package/dist/components/vertex-viewer-box-query-tool.js +1 -1
  68. package/dist/components/vertex-viewer-button.js +1 -1
  69. package/dist/components/vertex-viewer-default-toolbar.js +1 -1
  70. package/dist/components/vertex-viewer-default-toolbar.js.map +1 -1
  71. package/dist/components/vertex-viewer-dom-element.js +1 -1
  72. package/dist/components/vertex-viewer-dom-group.js +1 -1
  73. package/dist/components/vertex-viewer-hit-result-indicator.js +1 -1
  74. package/dist/components/vertex-viewer-layer.js +1 -1
  75. package/dist/components/vertex-viewer-measurement-distance.js.map +1 -1
  76. package/dist/components/vertex-viewer-pin-group.js +1 -1
  77. package/dist/components/vertex-viewer-pin-label-line.js +1 -1
  78. package/dist/components/vertex-viewer-pin-label.js +1 -1
  79. package/dist/components/vertex-viewer-pin-tool.js +1 -1
  80. package/dist/components/vertex-viewer-toolbar.js +1 -1
  81. package/dist/components/vertex-viewer-view-cube.js +1 -1
  82. package/dist/components/vertex-viewer.js +1 -1
  83. package/dist/components/vertex-viewer.js.map +1 -1
  84. package/dist/esm/{controller-CwTBp6Da.js → controller-CE2DwTNf.js} +139 -35
  85. package/dist/esm/controller-CE2DwTNf.js.map +1 -0
  86. package/dist/esm/index.js +1 -1
  87. package/dist/esm/index.mjs +1 -1
  88. package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js +9 -9
  89. package/dist/esm/vertex-scene-tree-table-column.entry.js +1 -1
  90. package/dist/esm/vertex-scene-tree-table-header.entry.js +1 -1
  91. package/dist/esm/vertex-scene-tree.entry.js +3 -3
  92. package/dist/esm/vertex-viewer-box-query-tool.entry.js +2 -2
  93. package/dist/esm/vertex-viewer-button_3.entry.js +1 -1
  94. package/dist/esm/vertex-viewer-default-toolbar.entry.js +1 -1
  95. package/dist/esm/vertex-viewer-dom-element_2.entry.js +1 -1
  96. package/dist/esm/vertex-viewer-dom-group.entry.js +1 -1
  97. package/dist/esm/vertex-viewer-hit-result-indicator.entry.js +1 -1
  98. package/dist/esm/vertex-viewer-layer.entry.js +1 -1
  99. package/dist/esm/vertex-viewer-measurement-distance.entry.js.map +1 -1
  100. package/dist/esm/vertex-viewer-pin-group.entry.js +3 -3
  101. package/dist/esm/vertex-viewer-pin-label_2.entry.js +4 -4
  102. package/dist/esm/vertex-viewer.entry.js +9 -4
  103. package/dist/esm/vertex-viewer.entry.js.map +1 -1
  104. package/dist/types/components/scene-tree/lib/controller.d.ts +2 -0
  105. package/dist/types/components/scene-tree/lib/jwt.d.ts +1 -1
  106. package/dist/types/components/viewer/viewer.d.ts +9 -1
  107. package/dist/types/components.d.ts +1 -1
  108. package/dist/types/index.d.ts +1 -0
  109. package/dist/viewer/index.esm.js +1 -1
  110. package/dist/viewer/{p-4716c5d5.entry.js → p-06c99572.entry.js} +2 -2
  111. package/dist/viewer/p-15683a45.entry.js +5 -0
  112. package/dist/viewer/{p-78b4be75.entry.js → p-39129117.entry.js} +2 -2
  113. package/dist/viewer/p-5763b907.entry.js +5 -0
  114. package/dist/viewer/p-5763b907.entry.js.map +1 -0
  115. package/dist/viewer/{p-def7870b.entry.js → p-72479c7e.entry.js} +2 -2
  116. package/dist/viewer/{p-f3eff8c9.entry.js → p-7c767052.entry.js} +2 -2
  117. package/dist/viewer/{p-dd5d4304.entry.js → p-9c02567d.entry.js} +2 -2
  118. package/dist/viewer/p-CnYEgl0H.js +5 -0
  119. package/dist/viewer/p-CnYEgl0H.js.map +1 -0
  120. package/dist/viewer/p-a180d8a2.entry.js.map +1 -1
  121. package/dist/viewer/p-aceb3ef2.entry.js +5 -0
  122. package/dist/viewer/{p-21bacf72.entry.js.map → p-aceb3ef2.entry.js.map} +1 -1
  123. package/dist/viewer/p-b6dfbeec.entry.js +5 -0
  124. package/dist/viewer/{p-5963afa1.entry.js → p-c2c3579f.entry.js} +2 -2
  125. package/dist/viewer/p-d357d235.entry.js +5 -0
  126. package/dist/viewer/{p-c07dec9d.entry.js → p-dca0a6d8.entry.js} +2 -2
  127. package/dist/viewer/{p-5e162bd2.entry.js → p-ed965902.entry.js} +2 -2
  128. package/dist/viewer/{p-c76b6bc1.entry.js → p-ff5bb594.entry.js} +2 -2
  129. package/dist/viewer/viewer.esm.js +1 -1
  130. package/package.json +11 -11
  131. package/readme.md +4 -4
  132. package/dist/cjs/controller-C-I_MLA3.js.map +0 -1
  133. package/dist/components/p-C-Bg5fev.js +0 -5
  134. package/dist/components/p-C-Bg5fev.js.map +0 -1
  135. package/dist/components/p-CDa0u-Gp.js +0 -5
  136. package/dist/esm/controller-CwTBp6Da.js.map +0 -1
  137. package/dist/viewer/p-21bacf72.entry.js +0 -5
  138. package/dist/viewer/p-27e68321.entry.js +0 -5
  139. package/dist/viewer/p-27e68321.entry.js.map +0 -1
  140. package/dist/viewer/p-686eef80.entry.js +0 -5
  141. package/dist/viewer/p-C-Bg5fev.js +0 -5
  142. package/dist/viewer/p-C-Bg5fev.js.map +0 -1
  143. package/dist/viewer/p-ba57a018.entry.js +0 -5
  144. package/dist/viewer/p-c7bd9aea.entry.js +0 -5
  145. /package/dist/components/{p-DwnNhGFv.js.map → p-B4MsUZ3n.js.map} +0 -0
  146. /package/dist/components/{p-CDa0u-Gp.js.map → p-BAsg2_dY.js.map} +0 -0
  147. /package/dist/components/{p-BwtZ7wGg.js.map → p-BEkJ7rmE.js.map} +0 -0
  148. /package/dist/components/{p-XmNH38dk.js.map → p-BmoTo_-J.js.map} +0 -0
  149. /package/dist/components/{p-Dymd58Ac.js.map → p-C--Voxln.js.map} +0 -0
  150. /package/dist/components/{p-BphxnS-a.js.map → p-CIuxJYJL.js.map} +0 -0
  151. /package/dist/components/{p-1qJWPhfT.js.map → p-D97fhwcJ.js.map} +0 -0
  152. /package/dist/components/{p-CaXlgCvb.js.map → p-Dva0y9cX.js.map} +0 -0
  153. /package/dist/components/{p-BxYIAIHN.js.map → p-NXN0rSu2.js.map} +0 -0
  154. /package/dist/components/{p-D0KZu516.js.map → p-Y8W_BXUk.js.map} +0 -0
  155. /package/dist/components/{p-CXO1zq8l.js.map → p-mJhaiMMT.js.map} +0 -0
  156. /package/dist/viewer/{p-4716c5d5.entry.js.map → p-06c99572.entry.js.map} +0 -0
  157. /package/dist/viewer/{p-c7bd9aea.entry.js.map → p-15683a45.entry.js.map} +0 -0
  158. /package/dist/viewer/{p-78b4be75.entry.js.map → p-39129117.entry.js.map} +0 -0
  159. /package/dist/viewer/{p-def7870b.entry.js.map → p-72479c7e.entry.js.map} +0 -0
  160. /package/dist/viewer/{p-f3eff8c9.entry.js.map → p-7c767052.entry.js.map} +0 -0
  161. /package/dist/viewer/{p-dd5d4304.entry.js.map → p-9c02567d.entry.js.map} +0 -0
  162. /package/dist/viewer/{p-ba57a018.entry.js.map → p-b6dfbeec.entry.js.map} +0 -0
  163. /package/dist/viewer/{p-5963afa1.entry.js.map → p-c2c3579f.entry.js.map} +0 -0
  164. /package/dist/viewer/{p-686eef80.entry.js.map → p-d357d235.entry.js.map} +0 -0
  165. /package/dist/viewer/{p-c07dec9d.entry.js.map → p-dca0a6d8.entry.js.map} +0 -0
  166. /package/dist/viewer/{p-5e162bd2.entry.js.map → p-ed965902.entry.js.map} +0 -0
  167. /package/dist/viewer/{p-c76b6bc1.entry.js.map → p-ff5bb594.entry.js.map} +0 -0
@@ -2703,7 +2703,8 @@ function requireScene_tree_api_pb () {
2703
2703
  var f, obj = {
2704
2704
  viewId: (f = msg.getViewId()) && core_protos_uuid_pb.Uuid.toObject(includeInstance, f),
2705
2705
  pager: (f = msg.getPager()) && core_protos_paging_pb.OffsetPager.toObject(includeInstance, f),
2706
- additionalColumnKeysList: (f = jspb.Message.getRepeatedField(msg, 3)) == null ? undefined : f
2706
+ additionalColumnKeysList: (f = jspb.Message.getRepeatedField(msg, 3)) == null ? undefined : f,
2707
+ requireViewReady: jspb.Message.getBooleanFieldWithDefault(msg, 4, false)
2707
2708
  };
2708
2709
 
2709
2710
  if (includeInstance) {
@@ -2754,6 +2755,10 @@ function requireScene_tree_api_pb () {
2754
2755
  var value = /** @type {string} */ (reader.readString());
2755
2756
  msg.addAdditionalColumnKeys(value);
2756
2757
  break;
2758
+ case 4:
2759
+ var value = /** @type {boolean} */ (reader.readBool());
2760
+ msg.setRequireViewReady(value);
2761
+ break;
2757
2762
  default:
2758
2763
  reader.skipField();
2759
2764
  break;
@@ -2806,6 +2811,13 @@ function requireScene_tree_api_pb () {
2806
2811
  f
2807
2812
  );
2808
2813
  }
2814
+ f = message.getRequireViewReady();
2815
+ if (f) {
2816
+ writer.writeBool(
2817
+ 4,
2818
+ f
2819
+ );
2820
+ }
2809
2821
  };
2810
2822
 
2811
2823
 
@@ -2920,6 +2932,24 @@ function requireScene_tree_api_pb () {
2920
2932
  };
2921
2933
 
2922
2934
 
2935
+ /**
2936
+ * optional bool require_view_ready = 4;
2937
+ * @return {boolean}
2938
+ */
2939
+ proto.vertexvis.protobuf.scenetree.v1alpha1.GetTreeRequest.prototype.getRequireViewReady = function() {
2940
+ return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 4, false));
2941
+ };
2942
+
2943
+
2944
+ /**
2945
+ * @param {boolean} value
2946
+ * @return {!proto.vertexvis.protobuf.scenetree.v1alpha1.GetTreeRequest} returns this
2947
+ */
2948
+ proto.vertexvis.protobuf.scenetree.v1alpha1.GetTreeRequest.prototype.setRequireViewReady = function(value) {
2949
+ return jspb.Message.setProto3BooleanField(this, 4, value);
2950
+ };
2951
+
2952
+
2923
2953
 
2924
2954
  /**
2925
2955
  * List of repeated fields within this message type.
@@ -6511,10 +6541,66 @@ function webSocketSubscriptionTransportFactory(options) {
6511
6541
  }
6512
6542
  }
6513
6543
 
6514
- function e(e){this.message=e;}e.prototype=new Error,e.prototype.name="InvalidCharacterError";var r="undefined"!=typeof window&&window.atob&&window.atob.bind(window)||function(r){var t=String(r).replace(/=+$/,"");if(t.length%4==1)throw new e("'atob' failed: The string to be decoded is not correctly encoded.");for(var n,o,a=0,i=0,c="";o=t.charAt(i++);~o&&(n=a%4?64*n+o:o,a++%4)?c+=String.fromCharCode(255&n>>(-2*a&6)):0)o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(o);return c};function t(e){var t=e.replace(/-/g,"+").replace(/_/g,"/");switch(t.length%4){case 0:break;case 2:t+="==";break;case 3:t+="=";break;default:throw "Illegal base64url string!"}try{return function(e){return decodeURIComponent(r(e).replace(/(.)/g,(function(e,r){var t=r.charCodeAt(0).toString(16).toUpperCase();return t.length<2&&(t="0"+t),"%"+t})))}(t)}catch(e){return r(t)}}function n(e){this.message=e;}function o(e,r){if("string"!=typeof e)throw new n("Invalid token specified");var o=true===(r=r||{}).header?0:1;try{return JSON.parse(t(e.split(".")[o]))}catch(e){throw new n("Invalid token specified: "+e.message)}}n.prototype=new Error,n.prototype.name="InvalidTokenError";
6544
+ class InvalidTokenError extends Error {
6545
+ }
6546
+ InvalidTokenError.prototype.name = "InvalidTokenError";
6547
+ function b64DecodeUnicode(str) {
6548
+ return decodeURIComponent(atob(str).replace(/(.)/g, (m, p) => {
6549
+ let code = p.charCodeAt(0).toString(16).toUpperCase();
6550
+ if (code.length < 2) {
6551
+ code = "0" + code;
6552
+ }
6553
+ return "%" + code;
6554
+ }));
6555
+ }
6556
+ function base64UrlDecode(str) {
6557
+ let output = str.replace(/-/g, "+").replace(/_/g, "/");
6558
+ switch (output.length % 4) {
6559
+ case 0:
6560
+ break;
6561
+ case 2:
6562
+ output += "==";
6563
+ break;
6564
+ case 3:
6565
+ output += "=";
6566
+ break;
6567
+ default:
6568
+ throw new Error("base64 string is not of the correct length");
6569
+ }
6570
+ try {
6571
+ return b64DecodeUnicode(output);
6572
+ }
6573
+ catch (err) {
6574
+ return atob(output);
6575
+ }
6576
+ }
6577
+ function jwtDecode(token, options) {
6578
+ if (typeof token !== "string") {
6579
+ throw new InvalidTokenError("Invalid token specified: must be a string");
6580
+ }
6581
+ options || (options = {});
6582
+ const pos = options.header === true ? 0 : 1;
6583
+ const part = token.split(".")[pos];
6584
+ if (typeof part !== "string") {
6585
+ throw new InvalidTokenError(`Invalid token specified: missing part #${pos + 1}`);
6586
+ }
6587
+ let decoded;
6588
+ try {
6589
+ decoded = base64UrlDecode(part);
6590
+ }
6591
+ catch (e) {
6592
+ throw new InvalidTokenError(`Invalid token specified: invalid base64 for part #${pos + 1} (${e.message})`);
6593
+ }
6594
+ try {
6595
+ return JSON.parse(decoded);
6596
+ }
6597
+ catch (e) {
6598
+ throw new InvalidTokenError(`Invalid token specified: invalid json for part #${pos + 1} (${e.message})`);
6599
+ }
6600
+ }
6515
6601
 
6516
6602
  function decodeSceneTreeJwt(jwt) {
6517
- return o(jwt);
6603
+ return jwtDecode(jwt);
6518
6604
  }
6519
6605
 
6520
6606
  /**
@@ -6885,25 +6971,23 @@ class SceneTreeController {
6885
6971
  * @param index A 0 based index to fetch.
6886
6972
  */
6887
6973
  async fetchPage(index) {
6888
- return this.ifConnectionHasJwt(async (jwt) => {
6889
- if (index < 0 || index > this.maxPages - 1) {
6890
- return;
6891
- }
6892
- if (!this.pages.has(index)) {
6893
- const offset = index * this.rowLimit;
6894
- this.log('Scene tree fetching page', index, offset);
6895
- const res = this.fetchTree(offset, this.rowLimit, jwt);
6896
- const id = this.nextPageId++;
6897
- const page = { id, res, index, metadataKeys: this.metadataKeys };
6898
- this.pages.set(index, page);
6899
- page.done = this.handlePageResult(page);
6900
- }
6901
- const page = this.pages.get(index);
6902
- const [resResult] = await Promise.allSettled([page === null || page === void 0 ? void 0 : page.res, page === null || page === void 0 ? void 0 : page.done]);
6903
- if ((resResult === null || resResult === void 0 ? void 0 : resResult.status) === 'rejected') {
6904
- throw resResult.reason;
6905
- }
6906
- });
6974
+ if (index < 0 || index > this.maxPages - 1) {
6975
+ return;
6976
+ }
6977
+ if (!this.pages.has(index)) {
6978
+ const offset = index * this.rowLimit;
6979
+ this.log('Scene tree fetching page', index, offset);
6980
+ const res = this.fetchTree(offset, this.rowLimit, () => this.ifConnectionHasJwt((jwt) => jwt));
6981
+ const id = this.nextPageId++;
6982
+ const page = { id, res, index, metadataKeys: this.metadataKeys };
6983
+ this.pages.set(index, page);
6984
+ page.done = this.handlePageResult(page);
6985
+ }
6986
+ const page = this.pages.get(index);
6987
+ const [resResult] = await Promise.allSettled([page === null || page === void 0 ? void 0 : page.res, page === null || page === void 0 ? void 0 : page.done]);
6988
+ if ((resResult === null || resResult === void 0 ? void 0 : resResult.status) === 'rejected') {
6989
+ throw resResult.reason;
6990
+ }
6907
6991
  }
6908
6992
  /**
6909
6993
  * Fetches a page that contains the given row offset.
@@ -7325,16 +7409,34 @@ class SceneTreeController {
7325
7409
  const pageEnd = this.getPageForOffset(end);
7326
7410
  return [pageStart, pageEnd];
7327
7411
  }
7328
- async fetchTree(offset, limit, jwt) {
7329
- return this.requestUnary(jwt, (metadata, handler) => {
7330
- const pager = new errors.paging_pbExports.OffsetPager();
7331
- pager.setOffset(offset);
7332
- pager.setLimit(limit);
7333
- const req = new scene_tree_api_pbExports.GetTreeRequest();
7334
- req.setPager(pager);
7335
- req.setAdditionalColumnKeysList(this.metadataKeys);
7336
- this.client.getTree(req, metadata, handler);
7337
- });
7412
+ async fetchTree(offset, limit, jwtProvider, currentAttempt = 1) {
7413
+ const maxAttempts = SceneTreeController.MAX_GET_TREE_ATTEMPTS;
7414
+ try {
7415
+ const jwt = await jwtProvider();
7416
+ return await this.requestUnary(jwt, (metadata, handler) => {
7417
+ const pager = new errors.paging_pbExports.OffsetPager();
7418
+ pager.setOffset(offset);
7419
+ pager.setLimit(limit);
7420
+ const req = new scene_tree_api_pbExports.GetTreeRequest();
7421
+ req.setPager(pager);
7422
+ req.setAdditionalColumnKeysList(this.metadataKeys);
7423
+ req.setRequireViewReady(true);
7424
+ this.client.getTree(req, metadata, handler);
7425
+ });
7426
+ }
7427
+ catch (error) {
7428
+ if (!isGrpcServiceError(error) || error.code !== wrappers_pb.grpcWebClient_umdExports.grpc.Code.Unavailable) {
7429
+ throw error;
7430
+ }
7431
+ if (currentAttempt >= maxAttempts) {
7432
+ throw new Error(`Failed to retrieve scene tree after ${maxAttempts} attempts.`);
7433
+ }
7434
+ const delay = SceneTreeController.GET_TREE_RETRY_DELAYS_IN_MS[currentAttempt - 1];
7435
+ const nextAttempt = currentAttempt + 1;
7436
+ console.warn(`GetTree failed because the view is not ready. Retrying in ${delay}ms (attempt ${nextAttempt}/${maxAttempts}).`);
7437
+ await bundle.async.delay(delay);
7438
+ return this.fetchTree(offset, limit, jwtProvider, nextAttempt);
7439
+ }
7338
7440
  }
7339
7441
  // TODO(dan): used shared grpc lib
7340
7442
  requestUnary(jwt, req) {
@@ -7436,11 +7538,13 @@ class SceneTreeController {
7436
7538
  SceneTreeController.IDLE_RECONNECT_IN_SECONDS = 4 * 60;
7437
7539
  SceneTreeController.LOST_CONNECTION_RECONNECT_IN_SECONDS = 2;
7438
7540
  SceneTreeController.MAX_SUBSCRIPTION_RETRY_COUNT = 2;
7541
+ SceneTreeController.MAX_GET_TREE_ATTEMPTS = 6;
7542
+ SceneTreeController.GET_TREE_RETRY_DELAYS_IN_MS = [1000, 2000, 4000, 8000, 15000];
7439
7543
 
7440
7544
  exports.SceneTreeController = SceneTreeController;
7441
7545
  exports.SceneTreeErrorDetails = SceneTreeErrorDetails;
7442
7546
  exports.scene_tree_api_pb_serviceExports = scene_tree_api_pb_serviceExports;
7443
7547
  exports.webSocketSubscriptionTransportFactory = webSocketSubscriptionTransportFactory;
7444
- //# sourceMappingURL=controller-C-I_MLA3.js.map
7548
+ //# sourceMappingURL=controller-C74GX70e.js.map
7445
7549
 
7446
- //# sourceMappingURL=controller-C-I_MLA3.js.map
7550
+ //# sourceMappingURL=controller-C74GX70e.js.map