@pitcher/js-api 1.22.0-alpha.6 → 1.22.0-beta.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 (185) hide show
  1. package/js-api.esm.js +472 -139
  2. package/js-api.esm.js.map +1 -1
  3. package/js-api.umd.min.js +10 -10
  4. package/js-api.umd.min.js.map +1 -1
  5. package/lib/api/canvases/canvases.queries.d.ts +5 -5
  6. package/lib/apps/browser/stores/api.d.ts +215 -84
  7. package/lib/apps/browser/stores/app.d.ts +7 -26
  8. package/lib/apps/browser/stores/upload.d.ts +34 -24
  9. package/lib/apps/browser/util/file.d.ts +2 -2
  10. package/lib/apps/canvas-builder/composables/useCanvas.d.ts +550 -460
  11. package/lib/apps/canvas-builder/composables/useCanvasExit.d.ts +3 -0
  12. package/lib/apps/canvas-builder/composables/useCanvasHistory.d.ts +86 -74
  13. package/lib/apps/canvas-builder/composables/useCanvasHooks.d.ts +4 -4
  14. package/lib/apps/canvas-builder/composables/useCanvasPages.d.ts +3 -3
  15. package/lib/apps/canvas-builder/composables/useCanvasSectionOverrides.d.ts +3 -3
  16. package/lib/apps/canvas-builder/composables/useCanvasTheme.d.ts +24 -17
  17. package/lib/apps/canvas-builder/composables/useCanvasVisibility.d.ts +2 -2
  18. package/lib/apps/canvas-builder/composables/useCollapsibles.d.ts +3 -3
  19. package/lib/apps/canvas-builder/composables/useComponentPermissions.d.ts +2 -2
  20. package/lib/apps/canvas-builder/composables/useContentSelector.d.ts +6 -4
  21. package/lib/apps/canvas-builder/composables/useInstalledEmbeddables.d.ts +15 -0
  22. package/lib/apps/canvas-builder/composables/useRecommendations.d.ts +5 -5
  23. package/lib/apps/canvas-builder/composables/useSectionPopularity.d.ts +2 -2
  24. package/lib/apps/canvas-builder/types/canvas.d.ts +19 -18
  25. package/lib/apps/canvas-builder/types/recommendations.types.d.ts +3 -3
  26. package/lib/apps/canvas-builder/util/canvas.util.d.ts +5 -4
  27. package/lib/apps/canvas-selector/appTypes.d.ts +9 -0
  28. package/lib/apps/content-selector/appTypes.d.ts +1 -0
  29. package/lib/apps/content-selector/stores/app.d.ts +8 -1
  30. package/lib/components/CFileViewer/CFileViewer.use.d.ts +2 -4
  31. package/lib/components/CFileViewer/CFileViewerFullScreen.use.d.ts +1 -1
  32. package/lib/components/canvases/CanvasesManagementBulk.use.d.ts +5 -5
  33. package/lib/components/filters/filter.util.d.ts +1 -1
  34. package/lib/components/savedCanvases/CSavedCanvasesManagementShareCanvas.use.d.ts +5 -3
  35. package/lib/composables/instanceTagsActions.use.d.ts +14 -0
  36. package/lib/composables/recentFiles.use.d.ts +1 -1
  37. package/lib/composables/suggestedTags.use.d.ts +3 -0
  38. package/lib/composables/tableColumnsSettings.use.d.ts +25 -0
  39. package/lib/composables/useCanvasOverlay.d.ts +20 -0
  40. package/lib/composables/useCanvasTablesPagination.d.ts +13 -0
  41. package/lib/composables/useConfirmation.d.ts +1 -0
  42. package/lib/composables/useElementHeightResize.d.ts +5 -0
  43. package/lib/composables/useFiles.d.ts +11 -0
  44. package/lib/constants/pitcherSettings.const.d.ts +4 -0
  45. package/lib/main.lib.d.ts +31 -21
  46. package/lib/sdk/api/HighLevelApi.d.ts +112 -14
  47. package/lib/sdk/api/modules/admin/canvas.admin.d.ts +53 -15
  48. package/lib/sdk/api/modules/admin/env.admin.d.ts +3 -2
  49. package/lib/sdk/api/modules/admin/files.admin.d.ts +43 -4
  50. package/lib/sdk/api/modules/admin/index.d.ts +53 -5
  51. package/lib/sdk/api/modules/admin/metadataTemplates.admin.d.ts +1 -2
  52. package/lib/sdk/api/modules/admin/types.admin.d.ts +132 -3
  53. package/lib/sdk/api/modules/canvas.d.ts +12 -14
  54. package/lib/sdk/api/modules/dsr/env.dsr.d.ts +4 -3
  55. package/lib/sdk/api/modules/dsr/index.d.ts +14 -3
  56. package/lib/sdk/api/modules/dsr/loading.dsr.d.ts +7 -1
  57. package/lib/sdk/api/modules/env.d.ts +16 -0
  58. package/lib/sdk/api/modules/favorites.d.ts +9 -0
  59. package/lib/sdk/api/modules/feedback.d.ts +3 -0
  60. package/lib/sdk/api/modules/files.d.ts +7 -4
  61. package/lib/sdk/api/modules/folders.d.ts +29 -0
  62. package/lib/sdk/api/modules/open.d.ts +6 -0
  63. package/lib/sdk/api/modules/sync.d.ts +1 -2
  64. package/lib/sdk/api/modules/ui/app-errors.ui.d.ts +13 -1
  65. package/lib/sdk/api/modules/ui/canvas.ui.d.ts +102 -8
  66. package/lib/sdk/api/modules/ui/content.ui.d.ts +52 -2
  67. package/lib/sdk/api/modules/ui/index.d.ts +150 -13
  68. package/lib/sdk/api/modules/ui/loading.ui.d.ts +9 -1
  69. package/lib/sdk/api/modules/ui/location.ui.d.ts +18 -1
  70. package/lib/sdk/api/modules/ui/post-call.ui.d.ts +35 -4
  71. package/lib/sdk/api/modules/ui/types.ui.d.ts +86 -8
  72. package/lib/sdk/api/modules/users.d.ts +6 -1
  73. package/lib/sdk/interfaces.d.ts +122 -3
  74. package/lib/sdk/main.d.ts +297 -151
  75. package/lib/sdk/payload.types.d.ts +134 -2
  76. package/lib/sdk/utils/httpFetch.d.ts +1 -1
  77. package/lib/sdk/utils/object.d.ts +1 -0
  78. package/lib/sdk/utils/object.spec.d.ts +1 -0
  79. package/lib/theme/light.d.ts +12 -0
  80. package/lib/types/app.d.ts +11 -0
  81. package/lib/types/call.d.ts +4 -3
  82. package/lib/types/files.d.ts +27 -1
  83. package/lib/types/filter.d.ts +5 -0
  84. package/lib/types/instance.types.d.ts +18 -0
  85. package/lib/types/{instanceSettings.d.ts → instanceSettings.types.d.ts} +10 -2
  86. package/lib/types/launchDarkly.types.d.ts +4 -4
  87. package/lib/types/organization.types.d.ts +2 -2
  88. package/lib/types/organizationSettings.types.d.ts +4 -0
  89. package/lib/types/recentFiles.types.d.ts +4 -1
  90. package/lib/types/users.d.ts +13 -0
  91. package/lib/util/fullscreen.util.d.ts +1 -1
  92. package/lib/util/string.d.ts +1 -0
  93. package/package.json +1 -1
  94. package/types/openapi/index.d.ts +23 -17
  95. package/types/openapi/models/AccessTypeEnum.d.ts +3 -1
  96. package/types/openapi/models/App.d.ts +1 -0
  97. package/types/openapi/models/AppRelease.d.ts +1 -0
  98. package/types/openapi/models/AppsDBEntry.d.ts +4 -0
  99. package/types/openapi/models/AppsDBEntryRequest.d.ts +3 -0
  100. package/types/openapi/models/Canvas.d.ts +10 -15
  101. package/types/openapi/models/CanvasCreate.d.ts +14 -12
  102. package/types/openapi/models/CanvasCreateRequest.d.ts +6 -5
  103. package/types/openapi/models/CanvasRecommendedFile.d.ts +6 -0
  104. package/types/openapi/models/CanvasRetrieve.d.ts +15 -13
  105. package/types/openapi/models/CanvasSection.d.ts +5 -2
  106. package/types/openapi/models/CanvasUpdate.d.ts +14 -12
  107. package/types/openapi/models/CanvasUpdateRequest.d.ts +5 -4
  108. package/types/openapi/models/CollaborationRoleEnum.d.ts +0 -4
  109. package/types/openapi/models/ContentDistributionGroupCreate.d.ts +1 -0
  110. package/types/openapi/models/DeletedApp.d.ts +1 -0
  111. package/types/openapi/models/{CanvasList.d.ts → DeletedCanvas.d.ts} +13 -9
  112. package/types/openapi/models/DeletedContentDistributionGroup.d.ts +1 -0
  113. package/types/openapi/models/DeletedEnvironment.d.ts +1 -0
  114. package/types/openapi/models/DeletedFavorite.d.ts +1 -0
  115. package/types/openapi/models/DeletedFile.d.ts +6 -0
  116. package/types/openapi/models/DeletedFolder.d.ts +4 -3
  117. package/types/openapi/models/DeletedInstance.d.ts +1 -0
  118. package/types/openapi/models/DeletedInstanceAssignmentGroup.d.ts +1 -0
  119. package/types/openapi/models/DeletedMetadataTemplate.d.ts +1 -0
  120. package/types/openapi/models/DeletedRegion.d.ts +1 -0
  121. package/types/openapi/models/Environment.d.ts +1 -0
  122. package/types/openapi/models/Favorite.d.ts +1 -0
  123. package/types/openapi/models/File.d.ts +6 -0
  124. package/types/openapi/models/FileCreate.d.ts +8 -0
  125. package/types/openapi/models/FileCreateRequest.d.ts +3 -0
  126. package/types/openapi/models/FilePermission.d.ts +4 -0
  127. package/types/openapi/models/FilePermissionRequest.d.ts +4 -0
  128. package/types/openapi/models/FileRetrieve.d.ts +8 -0
  129. package/types/openapi/models/FileRevision.d.ts +8 -0
  130. package/types/openapi/models/FileRevisionRequest.d.ts +3 -0
  131. package/types/openapi/models/FileUpdate.d.ts +8 -0
  132. package/types/openapi/models/FileUpdateRequest.d.ts +3 -0
  133. package/types/openapi/models/FileVersion.d.ts +5 -0
  134. package/types/openapi/models/Folder.d.ts +4 -3
  135. package/types/openapi/models/FolderCanvas.d.ts +11 -0
  136. package/types/openapi/models/FolderCreate.d.ts +8 -7
  137. package/types/openapi/models/FolderCreateRequest.d.ts +4 -2
  138. package/types/openapi/models/FolderFile.d.ts +3 -0
  139. package/types/openapi/models/FolderFolder.d.ts +5 -1
  140. package/types/openapi/models/FolderRetrieve.d.ts +8 -8
  141. package/types/openapi/models/FolderRule.d.ts +7 -0
  142. package/types/openapi/models/FolderRuleRequest.d.ts +7 -0
  143. package/types/openapi/models/FolderUpdate.d.ts +8 -8
  144. package/types/openapi/models/FolderUpdateRequest.d.ts +3 -0
  145. package/types/openapi/models/Instance.d.ts +1 -0
  146. package/types/openapi/models/InstanceUpdate.d.ts +1 -0
  147. package/types/openapi/models/MetadataTemplate.d.ts +1 -0
  148. package/types/openapi/models/OfflineSyncFolder.d.ts +17 -0
  149. package/types/openapi/models/OperatorEnum.d.ts +64 -0
  150. package/types/openapi/models/PaginatedCanvasList.d.ts +8 -0
  151. package/types/openapi/models/PaginatedFileRevisionList.d.ts +8 -0
  152. package/types/openapi/models/PaginatedOfflineSyncFolderList.d.ts +8 -0
  153. package/types/openapi/models/PatchedCanvasUpdateRequest.d.ts +5 -4
  154. package/types/openapi/models/PatchedFileRequest.d.ts +3 -0
  155. package/types/openapi/models/PatchedFileRevisionRequest.d.ts +3 -0
  156. package/types/openapi/models/PatchedFileUpdateRequest.d.ts +3 -0
  157. package/types/openapi/models/PatchedFolderUpdateRequest.d.ts +3 -0
  158. package/types/openapi/models/Region.d.ts +1 -0
  159. package/types/openapi/models/SearchFile.d.ts +3 -0
  160. package/types/openapi/models/SharedLink.d.ts +6 -5
  161. package/types/openapi/models/SharedLinkCanvas.d.ts +11 -0
  162. package/types/openapi/models/SharedLinkCanvasRequest.d.ts +8 -0
  163. package/types/openapi/models/SharedLinkCreate.d.ts +6 -5
  164. package/types/openapi/models/{SharedLinkInstanceSerialzier.d.ts → SharedLinkInstance.d.ts} +1 -1
  165. package/types/openapi/models/SharedLinkInstanceRequest.d.ts +5 -0
  166. package/types/openapi/models/{SharedLinkOrganizationSerialzier.d.ts → SharedLinkOrganization.d.ts} +1 -1
  167. package/types/openapi/models/SharedLinkOrganizationRequest.d.ts +6 -0
  168. package/lib/apps/canvas-builder/util/tsUtils.d.ts +0 -3
  169. package/lib/composables/useDetailsView.d.ts +0 -19
  170. package/lib/types/templateActions.d.ts +0 -10
  171. package/lib/util/gesture.util.d.ts +0 -6
  172. package/types/openapi/models/AppsDBGlobalEntry.d.ts +0 -8
  173. package/types/openapi/models/AppsDBGlobalEntryRequest.d.ts +0 -3
  174. package/types/openapi/models/AppsDBUserEntry.d.ts +0 -9
  175. package/types/openapi/models/AppsDBUserEntryRequest.d.ts +0 -3
  176. package/types/openapi/models/CanvasSectionRetrieve.d.ts +0 -7
  177. package/types/openapi/models/CanvasSectionRetrieveRequest.d.ts +0 -5
  178. package/types/openapi/models/FileRequest.d.ts +0 -13
  179. package/types/openapi/models/InstanceStorageCredentials.d.ts +0 -6
  180. package/types/openapi/models/MiniAccount.d.ts +0 -4
  181. package/types/openapi/models/PSPDFKitAuthPayload.d.ts +0 -3
  182. package/types/openapi/models/PSPDFKitAuthPayloadRequest.d.ts +0 -3
  183. package/types/openapi/models/PSPDFKitToken.d.ts +0 -7
  184. package/types/openapi/models/PSPDFKitTokenRequest.d.ts +0 -3
  185. package/types/openapi/models/PaginatedCanvasListList.d.ts +0 -8
package/js-api.esm.js CHANGED
@@ -1,4 +1,4 @@
1
- import { camelCase, snakeCase, cloneDeep } from 'lodash-es';
1
+ import { camelCase, snakeCase, pickBy, cloneDeep, isEqual } from 'lodash-es';
2
2
 
3
3
  function _mergeNamespaces(n, m) {
4
4
  for (var i = 0; i < m.length; i++) {
@@ -2409,8 +2409,17 @@ function createCanvas$1(payload) {
2409
2409
  function deleteCanvas(payload) {
2410
2410
  return this.API.request("delete_canvas", payload);
2411
2411
  }
2412
- function updateCanvas$1(payload) {
2413
- return this.API.request("update_canvas", payload);
2412
+ function updateCanvas$2(payload) {
2413
+ let shouldDebug = false;
2414
+ if (typeof window !== "undefined") {
2415
+ const urlParams = new URLSearchParams(window.location.search);
2416
+ shouldDebug = urlParams.get("debug") === "true" || !!window.debug;
2417
+ }
2418
+ shouldDebug && console.info("JS API UPDATE CANVAS", payload);
2419
+ return this.API.request("update_canvas", payload).then((res) => {
2420
+ shouldDebug && console.info("JS API UPDATE CANVAS RESPONSE", res);
2421
+ return res;
2422
+ });
2414
2423
  }
2415
2424
  function getCanvas$1(payload) {
2416
2425
  return this.API.request("get_canvas", payload);
@@ -2419,7 +2428,7 @@ function shareCanvas(payload) {
2419
2428
  return this.API.request("share_canvas", payload);
2420
2429
  }
2421
2430
 
2422
- function getFiles(payload) {
2431
+ function getFiles$1(payload) {
2423
2432
  const p = { ...payload };
2424
2433
  if (p.type) {
2425
2434
  p.type = Array.isArray(p.type) ? p.type : [p.type];
@@ -2435,11 +2444,12 @@ function getRecentFiles(payload) {
2435
2444
  function downloadFile(payload) {
2436
2445
  return this.API.request("download_file", payload);
2437
2446
  }
2438
- function getAppConfig(payload) {
2447
+ function getAppConfig$1(payload) {
2439
2448
  return this.API.request("get_app_config", payload);
2440
2449
  }
2441
- function getFile(payload) {
2442
- return this.API.request("get_file", payload);
2450
+ function getFile$1(payload) {
2451
+ const { id, file_id } = payload;
2452
+ return this.API.request("get_file", { file_id: id || file_id });
2443
2453
  }
2444
2454
  function updateFile(payload) {
2445
2455
  return this.API.request("update_file", payload);
@@ -2462,7 +2472,10 @@ function getUsers(payload) {
2462
2472
  return this.API.request("get_users", payload);
2463
2473
  }
2464
2474
  function refreshServiceToken(payload) {
2465
- return this.API.request("refresh_service_token", payload);
2475
+ return this.API.request("refresh_service_token", payload ?? {});
2476
+ }
2477
+ function refreshAccessToken() {
2478
+ return this.API.request("refresh_access_token");
2466
2479
  }
2467
2480
 
2468
2481
  function fetchDocumentInfo(payload) {
@@ -2472,7 +2485,7 @@ function renderPageAsImage(payload) {
2472
2485
  return this.API.request("render_page_as_image", payload);
2473
2486
  }
2474
2487
 
2475
- function toast$1(payload) {
2488
+ function toast$2(payload) {
2476
2489
  return this.API.request("toast", payload);
2477
2490
  }
2478
2491
 
@@ -2551,14 +2564,14 @@ const modules = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
2551
2564
  deleteFolder,
2552
2565
  downloadFile,
2553
2566
  fetchDocumentInfo,
2554
- getAppConfig,
2567
+ getAppConfig: getAppConfig$1,
2555
2568
  getCanvas: getCanvas$1,
2556
2569
  getCanvases: getCanvases$1,
2557
2570
  getEnv: getEnv$2,
2558
2571
  getEvents,
2559
2572
  getFavorites,
2560
- getFile,
2561
- getFiles,
2573
+ getFile: getFile$1,
2574
+ getFiles: getFiles$1,
2562
2575
  getFolder,
2563
2576
  getInstanceMetadataTemplates: getInstanceMetadataTemplates$1,
2564
2577
  getLanguages,
@@ -2570,16 +2583,17 @@ const modules = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
2570
2583
  openExternalUrl,
2571
2584
  openWebViewAlwaysOnTop,
2572
2585
  query,
2586
+ refreshAccessToken,
2573
2587
  refreshServiceToken,
2574
2588
  renderPageAsImage,
2575
2589
  search,
2576
2590
  selectDeviceFile,
2577
2591
  shareCanvas,
2578
2592
  submitUserFeedback,
2579
- toast: toast$1,
2593
+ toast: toast$2,
2580
2594
  track,
2581
2595
  triggerNonFilesSync,
2582
- updateCanvas: updateCanvas$1,
2596
+ updateCanvas: updateCanvas$2,
2583
2597
  updateEvent,
2584
2598
  updateFile,
2585
2599
  updateFolder,
@@ -2761,6 +2775,29 @@ const snakeCaseKeys = (obj, skipKeys = defaultSkipKeys, skipObjectKeys = default
2761
2775
  return obj;
2762
2776
  };
2763
2777
 
2778
+ function truncateObject(obj, currentDepth = 1, lengthTrigger = 20) {
2779
+ if (typeof obj !== "object" || obj === null) {
2780
+ return obj;
2781
+ }
2782
+ if (Array.isArray(obj)) {
2783
+ if (obj.length > lengthTrigger && currentDepth <= 0) {
2784
+ return `[Truncated - ${obj.length} length array]`;
2785
+ }
2786
+ return obj.map((item) => truncateObject(item, currentDepth - 1, lengthTrigger));
2787
+ }
2788
+ const keys = Object.keys(obj);
2789
+ if (keys.length > lengthTrigger && currentDepth <= 0) {
2790
+ return `{Truncated - ${keys.length} properties obj}`;
2791
+ }
2792
+ return keys.reduce(
2793
+ (acc, key) => {
2794
+ acc[key] = truncateObject(obj[key], currentDepth - 1, lengthTrigger);
2795
+ return acc;
2796
+ },
2797
+ {}
2798
+ );
2799
+ }
2800
+
2764
2801
  function isOriginValid(event, allowedOrigins = [], isDev = ["development", "test"].includes("production")) {
2765
2802
  if (isDev) {
2766
2803
  return true;
@@ -2780,27 +2817,72 @@ function isOriginValid(event, allowedOrigins = [], isDev = ["development", "test
2780
2817
 
2781
2818
  const MAX_RETRIES = 5;
2782
2819
  const BASE_DELAY = 1e3;
2820
+ let refreshPromise = null;
2821
+ async function refreshToken() {
2822
+ if (refreshPromise) return refreshPromise;
2823
+ console.info("Refreshing access token...");
2824
+ refreshPromise = (async () => {
2825
+ try {
2826
+ return await highLevelApi.refreshAccessToken().then(
2827
+ (accessTokenResponse) => highLevelApi.getEnv().then((env) => {
2828
+ setEnv(env);
2829
+ return accessTokenResponse.access_token;
2830
+ })
2831
+ );
2832
+ } catch (error) {
2833
+ console.error("Failed to refresh token:", error);
2834
+ throw error;
2835
+ } finally {
2836
+ refreshPromise = null;
2837
+ }
2838
+ })();
2839
+ return refreshPromise;
2840
+ }
2783
2841
  function paramsSerializer(params) {
2784
2842
  const searchParams = new URLSearchParams();
2785
- for (const key in params) {
2786
- if (Array.isArray(params[key])) {
2787
- params[key].forEach((val) => searchParams.append(key, val));
2843
+ function addParam(key, value) {
2844
+ if (value === void 0 || value === null) {
2845
+ return;
2846
+ }
2847
+ if (Array.isArray(value)) {
2848
+ value.forEach((val) => addParam(key, val));
2849
+ } else if (typeof value === "object" && !Array.isArray(value)) {
2850
+ for (const subKey in value) {
2851
+ addParam(`${key}[${subKey}]`, value[subKey]);
2852
+ }
2788
2853
  } else {
2789
- searchParams.append(key, params[key]);
2854
+ searchParams.append(key, value);
2790
2855
  }
2791
2856
  }
2857
+ for (const key in params) {
2858
+ addParam(key, params[key]);
2859
+ }
2792
2860
  return searchParams.toString();
2793
2861
  }
2794
2862
  async function fetchWithRetry(url, options, remainingRetries = MAX_RETRIES) {
2795
2863
  try {
2796
2864
  const response = await fetch(url, options);
2797
2865
  if (!response.ok) {
2798
- if (response.status >= 500 && response.status < 600 && remainingRetries > 0) {
2866
+ if (response.status === 401) {
2867
+ const newToken = await refreshToken();
2868
+ options.headers = options.headers || {};
2869
+ options.headers.Authorization = `Bearer ${newToken}`;
2870
+ return fetchWithRetry(url, options, remainingRetries);
2871
+ } else if (response.status >= 500 && response.status < 600 && remainingRetries > 0) {
2799
2872
  const delay = BASE_DELAY * Math.pow(2, MAX_RETRIES - remainingRetries);
2800
2873
  await new Promise((resolve) => setTimeout(resolve, delay));
2801
2874
  return fetchWithRetry(url, options, remainingRetries - 1);
2875
+ } else {
2876
+ const errorData = await response.json();
2877
+ const error = new Error(
2878
+ `HTTP error! status: ${response.status}, message: ${errorData.message || response.statusText}`
2879
+ );
2880
+ error.status = response.status;
2881
+ throw error;
2802
2882
  }
2803
- throw new Error(`HTTP error! status: ${response.status}`);
2883
+ }
2884
+ if (response.status === 204 || response.status === 205) {
2885
+ return;
2804
2886
  }
2805
2887
  return response.json();
2806
2888
  } catch (error) {
@@ -2891,13 +2973,26 @@ function createHttpClient(origin, token) {
2891
2973
  };
2892
2974
  }
2893
2975
 
2976
+ function normalizeNetworkFilterParams(params) {
2977
+ if (!params) return {};
2978
+ return Object.entries(params).reduce(
2979
+ (acc, [key, value]) => {
2980
+ acc[key] = key.endsWith("__range") && Array.isArray(value) ? value.join(",") : value;
2981
+ return acc;
2982
+ },
2983
+ {}
2984
+ );
2985
+ }
2986
+
2894
2987
  let env;
2895
2988
  let http;
2896
- const logInfo = (msg, ...rest) => console.info(`[online handlers]: ${msg}`, ...rest);
2897
- const check = () => {
2989
+ function check() {
2898
2990
  if (!env) throw new Error("Missing env");
2899
2991
  if (!http) throw new Error("Missing http");
2900
- };
2992
+ }
2993
+ function pickNonNullish(data) {
2994
+ return pickBy(data ?? {}, (v) => v !== void 0 && v !== null);
2995
+ }
2901
2996
  const setEnv = (e) => {
2902
2997
  env = e;
2903
2998
  http = createHttpClient(
@@ -2907,21 +3002,58 @@ const setEnv = (e) => {
2907
3002
  };
2908
3003
  const onlineRestApiHandlers = {
2909
3004
  get_canvases: async (params) => {
2910
- logInfo("online handler get_canvases called with:", params);
2911
3005
  check();
2912
- const { api_base_url, ...restParams } = params;
2913
- const res = await http.get("/canvases", { params: { ...restParams, instance_id: env.pitcher.instance.id } });
3006
+ const { api_base_url, filters = {}, ...restParams } = params;
3007
+ const res = await http.get("/canvases", {
3008
+ params: {
3009
+ instance_id: env.pitcher.instance.id,
3010
+ ...normalizeNetworkFilterParams(filters),
3011
+ ...pickNonNullish(restParams)
3012
+ }
3013
+ });
2914
3014
  return res;
2915
3015
  },
2916
3016
  get_canvas: async (params) => {
2917
- logInfo("online handler get_canvas called with:", params);
2918
3017
  check();
2919
3018
  const { id, ...restParams } = params;
2920
3019
  const res = await http.get(`/canvases/${params.id}`, { params: restParams });
2921
3020
  return res;
3021
+ },
3022
+ create_canvas: async (params) => {
3023
+ check();
3024
+ const res = await http.post("/canvases", { ...params, instance_id: env.pitcher.instance.id });
3025
+ return res;
3026
+ },
3027
+ update_canvas: async (params) => {
3028
+ check();
3029
+ const { id, ...restParams } = params;
3030
+ const res = await http.patch(`/canvases/${params.id}`, restParams);
3031
+ return res;
3032
+ },
3033
+ delete_canvas: async (params) => {
3034
+ check();
3035
+ const res = await http.delete(`/canvases/${params.id}`);
3036
+ return res;
3037
+ },
3038
+ share_canvas: async (params) => {
3039
+ check();
3040
+ let link;
3041
+ try {
3042
+ link = await http.get(`/shared-links/canvas/${params.id}`);
3043
+ } catch (e) {
3044
+ if (e?.status === 404) {
3045
+ link = await http.post("/shared-links", {
3046
+ canvas_id: params.id
3047
+ });
3048
+ } else {
3049
+ throw e;
3050
+ }
3051
+ }
3052
+ return link;
2922
3053
  }
2923
3054
  };
2924
3055
 
3056
+ const TRUNCATE_LENGTH_TRIGGER = 10;
2925
3057
  function updateOnlineHandlersEnv(env) {
2926
3058
  env && setEnv(env);
2927
3059
  }
@@ -2965,7 +3097,7 @@ class LowLevelApi extends EventEmitter {
2965
3097
  this.emit("event", event);
2966
3098
  }
2967
3099
  request(type, body = null) {
2968
- const fetchMode = this.options.fetchMode ?? "prefer-online";
3100
+ const fetchMode = this.options.fetchMode ?? "postmessage";
2969
3101
  return new Promise((resolve, reject) => {
2970
3102
  const id = v4();
2971
3103
  const callback = (res) => {
@@ -2976,10 +3108,12 @@ class LowLevelApi extends EventEmitter {
2976
3108
  );
2977
3109
  if (type === "get_env") updateOnlineHandlersEnv(res.response.body);
2978
3110
  } else if (res.response.status === "error") {
2979
- this.options.errorLogger?.({
2980
- message: `Pitcher JS API call failure: ${res.request.type}`,
2981
- js_api_response: JSON.stringify(res)
2982
- });
3111
+ if (this.options.errorLogger) {
3112
+ this.options.errorLogger({
3113
+ message: `Pitcher JS API call failure: ${res.request.type}`,
3114
+ js_api_response: JSON.stringify(truncateObject(res, 3, TRUNCATE_LENGTH_TRIGGER))
3115
+ });
3116
+ }
2983
3117
  reject(this.options.casing === "camel" ? camelCaseKeys(res.response.body) : res.response.body);
2984
3118
  } else {
2985
3119
  throw new Error("unsupported response status");
@@ -3040,15 +3174,105 @@ function createHighLevelApi(options) {
3040
3174
  return {
3041
3175
  API,
3042
3176
  ...modules,
3177
+ /**
3178
+ * Subscribe to a given event type by its key.
3179
+ *
3180
+ * @param {string} type - The event type to subscribe to.
3181
+ * @param {(payload: PitcherEvent) => void} callback - The callback function to handle the event.
3182
+ * @returns A Promise resolving to a cleanup function to unsubscribe from the event. * @example
3183
+ *
3184
+ * @example
3185
+ * const unsubscribeFromSectionListUpdate = usePitcherApi().on('entered_fullscreen', (event: object) => {
3186
+ * // handle event
3187
+ * })
3188
+ * // later
3189
+ * unsubscribeFromSectionListUpdate()
3190
+ */
3043
3191
  on: (type, callback) => eventEmitter.on(type, callback),
3192
+ /**
3193
+ * Unsubscribe from a given event type by its key and the attached callback reference.
3194
+ * @param {string} type - The event type to unsubscribe from.
3195
+ * @param {(payload: PitcherEvent) => void} callback - The callback function reference to remove.
3196
+ *
3197
+ * @example
3198
+ * const callback = (event: object) => {
3199
+ * // handle event
3200
+ * }
3201
+ * usePitcherApi().on('entered_fullscreen', callback)
3202
+ * // later
3203
+ * usePitcherApi().off('entered_fullscreen', callback)
3204
+ */
3044
3205
  off: (type, callback) => eventEmitter.off(type, callback),
3206
+ /**
3207
+ * Make the entire CatalogIQ fullscreen.
3208
+ *
3209
+ * @example
3210
+ * usePitcherApi().enterFullscreen()
3211
+ */
3045
3212
  enterFullscreen: () => API.request("enter_fullscreen"),
3213
+ /**
3214
+ * Exit fullscreen mode.
3215
+ *
3216
+ * @example
3217
+ * usePitcherApi().exitFullscreen()
3218
+ */
3046
3219
  exitFullscreen: () => API.request("exit_fullscreen"),
3220
+ /**
3221
+ * Return is CatalogIQ in fullscreen.
3222
+ *
3223
+ * @example
3224
+ * usePitcherApi().isFullscreen()
3225
+ */
3226
+ isFullscreen: () => API.request("is_fullscreen"),
3227
+ /**
3228
+ * Log out the current user.
3229
+ *
3230
+ * @example
3231
+ * usePitcherApi().logout()
3232
+ */
3047
3233
  logout: () => API.request("logout"),
3234
+ /**
3235
+ * Quit the current instance and go to the instance selection screen.
3236
+ *
3237
+ * @example
3238
+ * usePitcherApi().quitInstance()
3239
+ */
3048
3240
  quitInstance: () => API.request("quit_instance"),
3241
+ /**
3242
+ * Get the request types.
3243
+ *
3244
+ * @returns {Promise<any>}
3245
+ */
3049
3246
  getRequestTypes: () => API.request("get_request_types"),
3247
+ /**
3248
+ * Broadcast an event to CatalogIQ.
3249
+ * @param {PitcherEvent} event - The event to broadcast.
3250
+ *
3251
+ * @example
3252
+ * usePitcherApi()
3253
+ * .broadcast({
3254
+ * type: "canvas_updated",
3255
+ * body: { context: { myContextProperty: 'test' } },
3256
+ * })
3257
+ * .then(function (result) {
3258
+ * useUi().toast({
3259
+ * message: "Canvas Populated.",
3260
+ * type: "info",
3261
+ * })
3262
+ * })
3263
+ */
3050
3264
  broadcast: (event) => API.request("broadcast", event),
3265
+ /**
3266
+ * Subscribe to updates.
3267
+ *
3268
+ * @returns {Promise<void>}
3269
+ */
3051
3270
  subscribe: () => API.request("subscribe"),
3271
+ /**
3272
+ * Unsubscribe from updates.
3273
+ *
3274
+ * @returns {Promise<void>}
3275
+ */
3052
3276
  unsubscribe: () => API.request("unsubscribe")
3053
3277
  };
3054
3278
  }
@@ -3062,17 +3286,20 @@ const UI_MESSAGE = "UI_MESSAGE";
3062
3286
  const UI_API_METHOD_TYPES = {
3063
3287
  UI_BROADCAST: "ui_broadcast",
3064
3288
  UI_SELECT_CONTENT: "ui_select_content",
3289
+ UI_SELECT_CANVASES: "ui_select_canvases",
3065
3290
  UI_OPEN: "ui_open",
3066
3291
  UI_EMBEDDABLE_READY: "ui_embeddable_ready",
3067
3292
  UI_TOAST: "ui_toast",
3068
3293
  UI_CAPTURE_APP_ERROR: "ui_capture_app_error",
3069
3294
  UI_UPDATE_CANVAS: "ui_update_canvas",
3295
+ UI_OPEN_CANVAS_OVERLAY: "ui_open_canvas_overlay",
3070
3296
  UI_UPDATE_LOCATION: "ui_update_location",
3071
3297
  UI_PRESELECT_SFDC_MEETING_ID: "ui_preselect_sfdc_meeting_id",
3072
3298
  UI_SET_POSTCALL_STYLE: "ui_set_postcall_style",
3073
3299
  UI_ENABLE_POSTCALL_SUBMIT: "ui_enable_postcall_submit",
3074
3300
  UI_DISABLE_POSTCALL_SUBMIT: "ui_disable_postcall_submit",
3075
3301
  UI_COMPLETE_POSTCALL: "ui_complete_postcall",
3302
+ UI_STOP_MEETING: "ui_stop_meeting",
3076
3303
  UI_CANVAS_NAVIGATE_NEXT_PAGE: "ui_canvas_navigate_next_page",
3077
3304
  UI_CANVAS_NAVIGATE_PREVIOUS_PAGE: "ui_canvas_navigate_previous_page",
3078
3305
  UI_CANVAS_NAVIGATE_PAGE: "ui_canvas_navigate_page",
@@ -3100,7 +3327,7 @@ async function ui_select_content(payload = {}) {
3100
3327
  const response = await pr.send(window.parent, UI_API_METHOD_TYPES.UI_SELECT_CONTENT, payload);
3101
3328
  return response.data;
3102
3329
  }
3103
- async function select_content(payload = {}) {
3330
+ async function selectContent$1(payload = {}) {
3104
3331
  const pr = await usePostRobot();
3105
3332
  const response = await pr.send(window.parent, UI_API_METHOD_TYPES.UI_SELECT_CONTENT, payload);
3106
3333
  return response.data;
@@ -3109,73 +3336,130 @@ async function open(payload) {
3109
3336
  const pr = await usePostRobot();
3110
3337
  await pr.send(window.parent, UI_API_METHOD_TYPES.UI_OPEN, payload);
3111
3338
  }
3112
- async function toast(payload) {
3339
+ async function toast$1(payload) {
3113
3340
  const pr = await usePostRobot();
3114
3341
  await pr.send(window.parent, UI_API_METHOD_TYPES.UI_TOAST, payload);
3115
3342
  }
3116
- async function preselect_sfdc_meeting_id(payload) {
3343
+ async function preselectSfdcMeetingId(payload) {
3117
3344
  const pr = await usePostRobot();
3118
3345
  const response = await pr.send(window.parent, UI_API_METHOD_TYPES.UI_PRESELECT_SFDC_MEETING_ID, payload);
3119
3346
  return response.data;
3120
3347
  }
3121
3348
 
3122
- async function embeddable_ready$1() {
3349
+ const contentUi = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
3350
+ __proto__: null,
3351
+ open,
3352
+ preselectSfdcMeetingId,
3353
+ selectContent: selectContent$1,
3354
+ toast: toast$1,
3355
+ ui_select_content
3356
+ }, Symbol.toStringTag, { value: 'Module' }));
3357
+
3358
+ async function embeddableReady$1() {
3123
3359
  const pr = await usePostRobot();
3124
3360
  await pr.send(window.parent, UI_API_METHOD_TYPES.UI_EMBEDDABLE_READY);
3125
3361
  }
3126
3362
 
3127
- async function update_location(payload) {
3363
+ const loadingUi = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
3364
+ __proto__: null,
3365
+ embeddableReady: embeddableReady$1
3366
+ }, Symbol.toStringTag, { value: 'Module' }));
3367
+
3368
+ async function updateLocation(payload) {
3128
3369
  const pr = await usePostRobot();
3129
3370
  return pr.send(window.top, UI_API_METHOD_TYPES.UI_UPDATE_LOCATION, payload);
3130
3371
  }
3131
3372
 
3132
- async function capture_app_error(payload) {
3373
+ const locationUi = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
3374
+ __proto__: null,
3375
+ updateLocation
3376
+ }, Symbol.toStringTag, { value: 'Module' }));
3377
+
3378
+ async function captureAppError(payload) {
3133
3379
  const pr = await usePostRobot();
3134
3380
  pr.send(window.parent, UI_API_METHOD_TYPES.UI_CAPTURE_APP_ERROR, payload);
3135
3381
  }
3136
3382
 
3137
- async function update_canvas(payload) {
3383
+ const appErrorsUi = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
3384
+ __proto__: null,
3385
+ captureAppError
3386
+ }, Symbol.toStringTag, { value: 'Module' }));
3387
+
3388
+ async function updateCanvas$1(payload) {
3138
3389
  const pr = await usePostRobot();
3139
3390
  return pr.send(window.parent, UI_API_METHOD_TYPES.UI_UPDATE_CANVAS, payload).then((response) => response.data);
3140
3391
  }
3141
- async function app_loaded() {
3392
+ async function appLoaded() {
3142
3393
  window.parent.postMessage({ type: UI_API_METHOD_TYPES.UI_APP_LOADED, body: {} }, "*");
3143
3394
  }
3144
- async function app_resize(payload) {
3395
+ async function appResize(payload) {
3145
3396
  window.parent.postMessage({ type: UI_API_METHOD_TYPES.UI_APP_RESIZE, body: payload }, "*");
3146
3397
  }
3147
- async function canvas_navigate_next_page() {
3398
+ async function canvasNavigateNextPage() {
3148
3399
  const pr = await usePostRobot();
3149
3400
  pr.send(window.parent, UI_API_METHOD_TYPES.UI_CANVAS_NAVIGATE_NEXT_PAGE);
3150
3401
  }
3151
- async function canvas_navigate_previous_page() {
3402
+ async function canvasNavigatePreviousPage() {
3152
3403
  const pr = await usePostRobot();
3153
3404
  pr.send(window.parent, UI_API_METHOD_TYPES.UI_CANVAS_NAVIGATE_PREVIOUS_PAGE);
3154
3405
  }
3155
- async function canvas_navigate_page(payload) {
3406
+ async function canvasNavigatePage(payload) {
3156
3407
  const pr = await usePostRobot();
3157
3408
  pr.send(window.parent, UI_API_METHOD_TYPES.UI_CANVAS_NAVIGATE_PAGE, payload);
3158
3409
  }
3410
+ async function openCanvasOverlay$1(payload) {
3411
+ const pr = await usePostRobot();
3412
+ await pr.send(window.parent, UI_API_METHOD_TYPES.UI_OPEN_CANVAS_OVERLAY, payload);
3413
+ }
3414
+ async function selectCanvases$1(payload = {}) {
3415
+ const pr = await usePostRobot();
3416
+ const response = await pr.send(window.parent, UI_API_METHOD_TYPES.UI_SELECT_CANVASES, payload);
3417
+ return response.data;
3418
+ }
3159
3419
 
3160
- async function complete_postcall(payload) {
3420
+ const canvasUi = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
3421
+ __proto__: null,
3422
+ appLoaded,
3423
+ appResize,
3424
+ canvasNavigateNextPage,
3425
+ canvasNavigatePage,
3426
+ canvasNavigatePreviousPage,
3427
+ openCanvasOverlay: openCanvasOverlay$1,
3428
+ selectCanvases: selectCanvases$1,
3429
+ updateCanvas: updateCanvas$1
3430
+ }, Symbol.toStringTag, { value: 'Module' }));
3431
+
3432
+ async function completePostcall(payload) {
3161
3433
  const pr = await usePostRobot();
3162
3434
  pr.send(window.parent, UI_API_METHOD_TYPES.UI_COMPLETE_POSTCALL, payload);
3163
3435
  }
3164
- async function enable_postcall_submit() {
3436
+ async function stopMeeting() {
3437
+ const pr = await usePostRobot();
3438
+ pr.send(window.parent, UI_API_METHOD_TYPES.UI_STOP_MEETING);
3439
+ }
3440
+ async function enablePostcallSubmit() {
3165
3441
  const pr = await usePostRobot();
3166
3442
  pr.send(window.parent, UI_API_METHOD_TYPES.UI_ENABLE_POSTCALL_SUBMIT);
3167
3443
  }
3168
- async function disable_postcall_submit() {
3444
+ async function disablePostcallSubmit() {
3169
3445
  const pr = await usePostRobot();
3170
3446
  pr.send(window.parent, UI_API_METHOD_TYPES.UI_DISABLE_POSTCALL_SUBMIT);
3171
3447
  }
3172
- async function set_postcall_style(payload) {
3448
+ async function setPostcallStyle(payload) {
3173
3449
  const pr = await usePostRobot();
3174
3450
  pr.send(window.parent, UI_API_METHOD_TYPES.UI_SET_POSTCALL_STYLE, payload);
3175
3451
  }
3176
3452
 
3177
- async function on_native(type, handler) {
3178
- console.log("attaching native handler for type", type);
3453
+ const postCallUi = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
3454
+ __proto__: null,
3455
+ completePostcall,
3456
+ disablePostcallSubmit,
3457
+ enablePostcallSubmit,
3458
+ setPostcallStyle,
3459
+ stopMeeting
3460
+ }, Symbol.toStringTag, { value: 'Module' }));
3461
+
3462
+ async function onNative(type, handler) {
3179
3463
  const messageListener = (event) => {
3180
3464
  if (event.data.type === type) {
3181
3465
  handler(event.data.body);
@@ -3184,65 +3468,51 @@ async function on_native(type, handler) {
3184
3468
  window.addEventListener("message", messageListener);
3185
3469
  return () => window.removeEventListener("message", messageListener);
3186
3470
  }
3187
- async function on_post_robot(type, handler) {
3471
+ async function onPostRobot(type, handler) {
3188
3472
  const pr = await usePostRobot();
3189
3473
  const listener = pr.on(type, (e) => handler(e.data));
3190
3474
  return listener.cancel;
3191
3475
  }
3192
3476
  function on$2(type, handler) {
3193
3477
  if (UI_NATIVE_MESSAGE_TYPES.includes(type)) {
3194
- return on_native(type, handler);
3478
+ return onNative(type, handler);
3195
3479
  }
3196
- return on_post_robot(type, handler);
3480
+ return onPostRobot(type, handler);
3197
3481
  }
3198
- function on_meeting_canceled(handler) {
3482
+ function onMeetingCanceled(handler) {
3199
3483
  return on$2(UI_MESSAGE_TYPES.UI_MEETING_CANCELED, handler);
3200
3484
  }
3201
- function on_canvas_updated(handler) {
3485
+ function onCanvasUpdated(handler) {
3202
3486
  return on$2(UI_MESSAGE_TYPES.UI_CANVAS_UPDATED, handler);
3203
3487
  }
3204
- function on_section_list_updated(handler) {
3488
+ function onSectionListUpdated(handler) {
3205
3489
  return on$2(UI_MESSAGE_TYPES.UI_SECTION_LIST_UPDATED, handler);
3206
3490
  }
3207
- function on_app_set_data(handler) {
3491
+ function onAppSetData(handler) {
3208
3492
  return on$2(UI_MESSAGE_TYPES.UI_APP_SET_DATA, handler);
3209
3493
  }
3210
- function on_app_update_data(handler) {
3494
+ function onAppUpdateData(handler) {
3211
3495
  return on$2(UI_MESSAGE_TYPES.UI_APP_UPDATE_DATA, handler);
3212
3496
  }
3213
- async function ui_broadcast(payload) {
3497
+ async function uiBroadcast(payload) {
3214
3498
  const pr = await usePostRobot();
3215
3499
  pr.send(window.parent, UI_API_METHOD_TYPES.UI_BROADCAST, payload);
3216
3500
  }
3217
-
3218
- const ui = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
3219
- __proto__: null,
3220
- app_loaded,
3221
- app_resize,
3222
- canvas_navigate_next_page,
3223
- canvas_navigate_page,
3224
- canvas_navigate_previous_page,
3225
- capture_app_error,
3226
- complete_postcall,
3227
- disable_postcall_submit,
3228
- embeddable_ready: embeddable_ready$1,
3229
- enable_postcall_submit,
3230
- on: on$2,
3231
- on_app_set_data,
3232
- on_app_update_data,
3233
- on_canvas_updated,
3234
- on_meeting_canceled,
3235
- on_section_list_updated,
3236
- open,
3237
- preselect_sfdc_meeting_id,
3238
- select_content,
3239
- set_postcall_style,
3240
- toast,
3241
- ui_broadcast,
3242
- ui_select_content,
3243
- update_canvas,
3244
- update_location
3245
- }, Symbol.toStringTag, { value: 'Module' }));
3501
+ const ui = {
3502
+ on: on$2,
3503
+ onMeetingCanceled,
3504
+ onCanvasUpdated,
3505
+ onSectionListUpdated,
3506
+ onAppSetData,
3507
+ onAppUpdateData,
3508
+ uiBroadcast,
3509
+ ...contentUi,
3510
+ ...loadingUi,
3511
+ ...locationUi,
3512
+ ...appErrorsUi,
3513
+ ...canvasUi,
3514
+ ...postCallUi
3515
+ };
3246
3516
 
3247
3517
  const ADMIN_MESSAGE = "ADMIN_MESSAGE";
3248
3518
  const ADMIN_MESSAGE_TYPES = {
@@ -3254,12 +3524,18 @@ const ADMIN_API_TYPES = {
3254
3524
  };
3255
3525
  const ADMIN_API_METHOD_TYPES = {
3256
3526
  CREATE_CANVAS: "admin_create_canvas",
3257
- GET_ENV: "admin_get_env",
3527
+ GET_APP_CONFIG: "admin_get_app_config",
3258
3528
  GET_CANVAS: "admin_get_canvas",
3259
3529
  GET_CANVASES: "admin_get_canvases",
3260
- UPDATE_CANVAS: "admin_update_canvas",
3530
+ OPEN_CANVAS_OVERLAY: "admin_open_canvas_overlay",
3531
+ GET_ENV: "admin_get_env",
3532
+ GET_FILE: "admin_get_file",
3533
+ GET_FILES: "admin_get_files",
3261
3534
  GET_INSTANCE_METADATA_TEMPLATES: "admin_get_instance_metadata_templates",
3262
- GET_APP_CONFIG: "admin_get_app_config"
3535
+ TOAST: "admin_toast",
3536
+ UPDATE_CANVAS: "admin_update_canvas",
3537
+ SELECT_CONTENT: "admin_select_content",
3538
+ SELECT_CANVASES: "admin_select_canvases"
3263
3539
  };
3264
3540
 
3265
3541
  async function getEnv$1() {
@@ -3268,6 +3544,11 @@ async function getEnv$1() {
3268
3544
  return response.data;
3269
3545
  }
3270
3546
 
3547
+ const envAdmin = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
3548
+ __proto__: null,
3549
+ getEnv: getEnv$1
3550
+ }, Symbol.toStringTag, { value: 'Module' }));
3551
+
3271
3552
  async function createCanvas(payload) {
3272
3553
  const pr = await usePostRobot();
3273
3554
  const response = await pr.send(window.parent, ADMIN_API_METHOD_TYPES.CREATE_CANVAS, payload);
@@ -3288,6 +3569,25 @@ async function updateCanvas(payload) {
3288
3569
  const r = await pr.send(window.parent, ADMIN_API_METHOD_TYPES.UPDATE_CANVAS, payload);
3289
3570
  return r.data;
3290
3571
  }
3572
+ async function openCanvasOverlay(payload) {
3573
+ const pr = await usePostRobot();
3574
+ await pr.send(window.parent, ADMIN_API_METHOD_TYPES.OPEN_CANVAS_OVERLAY, payload);
3575
+ }
3576
+ async function selectCanvases(payload = {}) {
3577
+ const pr = await usePostRobot();
3578
+ const response = await pr.send(window.parent, ADMIN_API_METHOD_TYPES.SELECT_CANVASES, payload);
3579
+ return response.data;
3580
+ }
3581
+
3582
+ const canvasAdmin = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
3583
+ __proto__: null,
3584
+ createCanvas,
3585
+ getCanvas,
3586
+ getCanvases,
3587
+ openCanvasOverlay,
3588
+ selectCanvases,
3589
+ updateCanvas
3590
+ }, Symbol.toStringTag, { value: 'Module' }));
3291
3591
 
3292
3592
  async function getInstanceMetadataTemplates(payload) {
3293
3593
  const pr = await usePostRobot();
@@ -3295,23 +3595,58 @@ async function getInstanceMetadataTemplates(payload) {
3295
3595
  return response.data;
3296
3596
  }
3297
3597
 
3298
- async function on$1(type, handler) {
3598
+ const metadataTemplatesAdmin = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
3599
+ __proto__: null,
3600
+ getInstanceMetadataTemplates
3601
+ }, Symbol.toStringTag, { value: 'Module' }));
3602
+
3603
+ async function getAppConfig(payload) {
3299
3604
  const pr = await usePostRobot();
3300
- const listener = pr.on(type, (e) => handler(e.data));
3301
- return listener.cancel;
3605
+ const response = await pr.send(window.parent, ADMIN_API_METHOD_TYPES.GET_APP_CONFIG, payload);
3606
+ return response.data;
3607
+ }
3608
+ async function getFile(payload) {
3609
+ const pr = await usePostRobot();
3610
+ const response = await pr.send(window.parent, ADMIN_API_METHOD_TYPES.GET_FILE, payload);
3611
+ return response.data;
3612
+ }
3613
+ async function getFiles(payload) {
3614
+ const pr = await usePostRobot();
3615
+ const response = await pr.send(window.parent, ADMIN_API_METHOD_TYPES.GET_FILES, payload);
3616
+ return response.data;
3617
+ }
3618
+ async function selectContent(payload) {
3619
+ const pr = await usePostRobot();
3620
+ const response = await pr.send(window.parent, ADMIN_API_METHOD_TYPES.SELECT_CONTENT, payload);
3621
+ return response.data;
3302
3622
  }
3303
3623
 
3304
- const admin = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
3624
+ const filesAdmin = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
3305
3625
  __proto__: null,
3306
- createCanvas,
3307
- getCanvas,
3308
- getCanvases,
3309
- getEnv: getEnv$1,
3310
- getInstanceMetadataTemplates,
3311
- on: on$1,
3312
- updateCanvas
3626
+ getAppConfig,
3627
+ getFile,
3628
+ getFiles,
3629
+ selectContent
3313
3630
  }, Symbol.toStringTag, { value: 'Module' }));
3314
3631
 
3632
+ async function on$1(type, handler) {
3633
+ const pr = await usePostRobot();
3634
+ const listener = pr.on(type, (e) => handler(e.data));
3635
+ return listener.cancel;
3636
+ }
3637
+ async function toast(payload) {
3638
+ const pr = await usePostRobot();
3639
+ await pr.send(window.parent, ADMIN_API_METHOD_TYPES.TOAST, payload);
3640
+ }
3641
+ const admin = {
3642
+ on: on$1,
3643
+ toast,
3644
+ ...envAdmin,
3645
+ ...canvasAdmin,
3646
+ ...metadataTemplatesAdmin,
3647
+ ...filesAdmin
3648
+ };
3649
+
3315
3650
  const DSR_MESSAGE = "DSR_MESSAGE";
3316
3651
  const DSR_MESSAGE_TYPES = {
3317
3652
  ENV_CHANGED: "dsr_env_changed"
@@ -3331,61 +3666,59 @@ async function getEnv() {
3331
3666
  return response.data;
3332
3667
  }
3333
3668
 
3334
- async function embeddable_ready() {
3669
+ const envDsr = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
3670
+ __proto__: null,
3671
+ getEnv
3672
+ }, Symbol.toStringTag, { value: 'Module' }));
3673
+
3674
+ async function embeddableReady() {
3335
3675
  const pr = await usePostRobot();
3336
3676
  await pr.send(window.parent, DSR_API_METHOD_TYPES.DSR_EMBEDDABLE_READY);
3337
3677
  }
3338
3678
 
3679
+ const loadingDsr = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
3680
+ __proto__: null,
3681
+ embeddableReady
3682
+ }, Symbol.toStringTag, { value: 'Module' }));
3683
+
3339
3684
  async function on(type, handler) {
3340
3685
  const pr = await usePostRobot();
3341
3686
  const listener = pr.on(type, (e) => handler(e.data));
3342
3687
  return listener.cancel;
3343
3688
  }
3344
-
3345
- const dsr = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
3346
- __proto__: null,
3347
- embeddable_ready,
3348
- getEnv,
3349
- on
3350
- }, Symbol.toStringTag, { value: 'Module' }));
3689
+ const dsr = {
3690
+ on,
3691
+ ...envDsr,
3692
+ ...loadingDsr
3693
+ };
3351
3694
 
3352
3695
  let highLevelApi;
3696
+ let prevOptions;
3353
3697
  function usePitcherApi(options) {
3354
- if (!highLevelApi) highLevelApi = createHighLevelApi(options);
3698
+ if (!highLevelApi || !isEqual(options, prevOptions)) {
3699
+ highLevelApi = createHighLevelApi(options);
3700
+ prevOptions = options;
3701
+ }
3355
3702
  return highLevelApi;
3356
3703
  }
3357
- const uiApi = Object.entries(
3358
- ui
3359
- ).reduce(
3360
- (acc, [key, value]) => {
3361
- acc[key] = value;
3362
- acc[snakeCase(key)] = value;
3363
- return acc;
3364
- },
3365
- {}
3366
- );
3704
+ function enhanceWithSnakeCase(api) {
3705
+ Object.entries(api).forEach(([key, value]) => {
3706
+ const newKey = snakeCase(key);
3707
+ if (newKey && !api[newKey]) {
3708
+ api[newKey] = value;
3709
+ }
3710
+ });
3711
+ return api;
3712
+ }
3713
+ const uiApi = enhanceWithSnakeCase(ui);
3714
+ const adminApi = enhanceWithSnakeCase(admin);
3715
+ const dsrApi = enhanceWithSnakeCase(dsr);
3367
3716
  function useUi() {
3368
3717
  return uiApi;
3369
3718
  }
3370
- const adminApi = Object.entries(admin).reduce(
3371
- (acc, [key, value]) => {
3372
- acc[key] = value;
3373
- acc[snakeCase(key)] = value;
3374
- return acc;
3375
- },
3376
- {}
3377
- );
3378
3719
  function useAdmin() {
3379
3720
  return adminApi;
3380
3721
  }
3381
- const dsrApi = Object.entries(dsr).reduce(
3382
- (acc, [key, value]) => {
3383
- acc[key] = value;
3384
- acc[snakeCase(key)] = value;
3385
- return acc;
3386
- },
3387
- {}
3388
- );
3389
3722
  function useDsr() {
3390
3723
  return dsrApi;
3391
3724
  }
@@ -3394,7 +3727,7 @@ function getAvailableApis() {
3394
3727
  const location = window.parent.jsApiLocation;
3395
3728
  return location === "ui" ? ["ui", "impact"] : [location ?? "impact"];
3396
3729
  }
3397
- function useApi() {
3730
+ function useApi(options) {
3398
3731
  if (typeof window === "undefined") throw new Error("useApi: window is not defined");
3399
3732
  const location = window.parent.jsApiLocation;
3400
3733
  switch (location) {
@@ -3405,7 +3738,7 @@ function useApi() {
3405
3738
  case "dsr":
3406
3739
  return useDsr();
3407
3740
  case "impact":
3408
- return usePitcherApi();
3741
+ return usePitcherApi(options);
3409
3742
  default:
3410
3743
  throw new Error(`Unknown api for location: ${location}`);
3411
3744
  }