@pitcher/js-api 1.30.0 → 1.31.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 (113) hide show
  1. package/js-api.esm.js +80 -17
  2. package/js-api.esm.js.map +1 -1
  3. package/js-api.umd.min.js +15 -15
  4. package/js-api.umd.min.js.map +1 -1
  5. package/lib/apps/browser/components/ContextMenu/TranslateFileButton.test.d.ts +1 -0
  6. package/lib/apps/browser/stores/api.filesFoldersDeleter.test.d.ts +1 -0
  7. package/lib/apps/canvas-builder/components/container/PopupApps/PopupAppModal.spec.d.ts +1 -0
  8. package/lib/apps/canvas-builder/components/container/PresentationTools/PresentationToolsButtons.spec.d.ts +1 -0
  9. package/lib/apps/canvas-builder/components/ui/BottomSheetModal/BottomSheetModal.integration.spec.d.ts +1 -0
  10. package/lib/apps/canvas-builder/components/ui/BottomSheetModal/BottomSheetModal.spec.d.ts +1 -0
  11. package/lib/apps/canvas-builder/components/ui/DynamicContent/section-component-bindings.util.d.ts +32 -0
  12. package/lib/apps/canvas-builder/components/ui/DynamicContent/useDynamicContent.d.ts +4 -0
  13. package/lib/apps/canvas-builder/components/ui/Link/Link.util.d.ts +8 -1
  14. package/lib/apps/canvas-builder/components/ui/Link/Link.util.test.d.ts +1 -0
  15. package/lib/apps/canvas-builder/components/ui/SectionList/SectionItemModal.spec.d.ts +1 -0
  16. package/lib/apps/canvas-builder/composables/useCanvas.d.ts +83 -9
  17. package/lib/apps/canvas-builder/composables/useCanvasBlocks.d.ts +4 -2
  18. package/lib/apps/canvas-builder/composables/useCanvasHistory.d.ts +2 -2
  19. package/lib/apps/canvas-builder/composables/useCanvasTheme.d.ts +2 -2
  20. package/lib/apps/canvas-builder/composables/useNavigatorDrawer.d.ts +25 -0
  21. package/lib/apps/canvas-builder/composables/useNavigatorDrawer.spec.d.ts +1 -0
  22. package/lib/apps/canvas-builder/composables/usePopupApps.d.ts +41 -4
  23. package/lib/apps/canvas-builder/composables/usePopupApps.spec.d.ts +1 -0
  24. package/lib/apps/canvas-builder/composables/usePresentationTools.d.ts +112 -0
  25. package/lib/apps/canvas-builder/composables/usePresentationTools.spec.d.ts +1 -0
  26. package/lib/apps/canvas-builder/types/canvas.d.ts +13 -0
  27. package/lib/apps/canvas-builder/util/canvas.util.d.ts +12 -0
  28. package/lib/apps/canvas-builder/util/completionWizard.util.d.ts +251 -11
  29. package/lib/apps/canvas-builder/util/iframe.util.d.ts +24 -2
  30. package/lib/apps/canvas-builder/util/iframe.util.test.d.ts +1 -0
  31. package/lib/apps/canvas-selector/stores/app.d.ts +14 -0
  32. package/lib/apps/collection-player/components/AppHeader.spec.d.ts +1 -0
  33. package/lib/apps/collection-player/composables/speaker-notes.use.d.ts +14 -0
  34. package/lib/apps/collection-player/composables/speaker-notes.use.spec.d.ts +1 -0
  35. package/lib/apps/collection-player/stores/app.store.d.ts +5 -1
  36. package/lib/apps/collection-player/stores/showNotesToggle.spec.d.ts +1 -0
  37. package/lib/apps/content-selector/appTypes.d.ts +16 -0
  38. package/lib/apps/content-selector/components/Content/AllContent/List/expandFileGuard.spec.d.ts +1 -0
  39. package/lib/apps/notes/NotesApp.accountNotes.spec.d.ts +1 -0
  40. package/lib/apps/notes/NotesApp.speakerNotes.spec.d.ts +1 -0
  41. package/lib/apps/notes/composables/useAccountNotes.d.ts +14 -0
  42. package/lib/apps/notes/composables/useAccountNotes.spec.d.ts +1 -0
  43. package/lib/apps/notes/composables/useAccountOnlyNotesGate.d.ts +21 -0
  44. package/lib/apps/notes/composables/useAccountOnlyNotesGate.spec.d.ts +1 -0
  45. package/lib/apps/notes/composables/useActiveSlideNotes.d.ts +42 -0
  46. package/lib/apps/notes/composables/useActiveSlideNotes.spec.d.ts +1 -0
  47. package/lib/components/CFileAccessManagement/collaborationApi.d.ts +2 -0
  48. package/lib/components/CFilePanel/Details.spec.d.ts +1 -0
  49. package/lib/components/CFilePanel/KeyMessages.spec.d.ts +1 -0
  50. package/lib/components/CFilePanel/Summary.spec.d.ts +1 -0
  51. package/lib/components/CFileViewer/pdf/CFileViewer.pdf.util.d.ts +52 -0
  52. package/lib/components/CGlobalLoader/CGlobalLoaderMark.spec.d.ts +1 -0
  53. package/lib/components/CGlobalLoader/globalLoader.paths.d.ts +2 -0
  54. package/lib/components/CGlobalSearch/globalSearchTarget.util.d.ts +31 -0
  55. package/lib/components/CGlobalSearch/globalSearchTarget.util.test.d.ts +1 -0
  56. package/lib/components/CRichTextEditor/extensions/paragraphExtended.d.ts +7 -1
  57. package/lib/components/CRichTextEditor/extensions/paragraphExtended.test.d.ts +1 -0
  58. package/lib/components/canvases/CanvasesManagementBulk.use.d.ts +12 -2
  59. package/lib/components/masterCanvases/CMasterCanvasesManagement.use.d.ts +86 -0
  60. package/lib/components/masterCanvases/CMasterCanvasesManagement.use.spec.d.ts +1 -0
  61. package/lib/components/masterCanvases/CMasterCanvasesPendingShareCell.spec.d.ts +1 -0
  62. package/lib/components/masterCanvases/CMasterCanvasesSharedWithCell.use.d.ts +39 -0
  63. package/lib/components/masterCanvases/CMasterCanvasesSharedWithCell.use.spec.d.ts +1 -0
  64. package/lib/components/masterCanvases/createFromMaster.use.d.ts +255 -0
  65. package/lib/components/masterCanvases/createFromMaster.use.spec.d.ts +1 -0
  66. package/lib/components/masterCanvases/masterCanvasDocuments.use.d.ts +56 -0
  67. package/lib/components/masterCanvases/masterCanvasDocuments.use.spec.d.ts +1 -0
  68. package/lib/components/masterCanvases/masterCanvasShares.use.d.ts +103 -0
  69. package/lib/components/masterCanvases/masterCanvasShares.use.spec.d.ts +1 -0
  70. package/lib/components/masterCanvases/masterFromCanvas.use.d.ts +122 -0
  71. package/lib/components/masterCanvases/masterFromCanvas.use.spec.d.ts +1 -0
  72. package/lib/components/masterCanvases/masterFromTemplate.use.d.ts +50 -0
  73. package/lib/components/masterCanvases/masterFromTemplate.use.spec.d.ts +1 -0
  74. package/lib/components/savedCanvases/CSavedCanvasesManagement.use.d.ts +203 -0
  75. package/lib/components/savedCanvases/savedCanvasDocuments.use.d.ts +111 -0
  76. package/lib/components/savedCanvases/savedCanvasDocuments.use.spec.d.ts +1 -0
  77. package/lib/components/savedCanvases/smartFolders/SmartFolders.use.d.ts +4 -0
  78. package/lib/constants/cdp.const.d.ts +1 -0
  79. package/lib/constants/translationLanguages.const.d.ts +86 -8
  80. package/lib/constants/translationLanguages.const.spec.d.ts +1 -0
  81. package/lib/main.lib.d.ts +5 -0
  82. package/lib/sdk/api/HighLevelApi.d.ts +2 -0
  83. package/lib/sdk/api/modules/appsDb.d.ts +4 -4
  84. package/lib/sdk/api/modules/canvas.d.ts +12 -0
  85. package/lib/sdk/api/modules/ui/types.ui.d.ts +18 -0
  86. package/lib/sdk/interfaces.d.ts +31 -1
  87. package/lib/sdk/main.d.ts +38 -0
  88. package/lib/sdk/payload.types.d.ts +45 -0
  89. package/lib/sdk/platform.d.ts +27 -0
  90. package/lib/sdk/platform.spec.d.ts +1 -0
  91. package/lib/sdk/singleton-scope.spec.d.ts +1 -0
  92. package/lib/sdk/utils/httpFetch.spec.d.ts +1 -0
  93. package/lib/theme/canvasUiUnoPreset.test.d.ts +1 -0
  94. package/lib/types/app.d.ts +55 -1
  95. package/lib/types/canvases.d.ts +15 -0
  96. package/lib/types/launchDarkly.types.d.ts +8 -1
  97. package/lib/types/organizationSettings.types.d.ts +29 -0
  98. package/lib/util/aiSummary.d.ts +30 -0
  99. package/lib/util/aiSummary.spec.d.ts +1 -0
  100. package/lib/util/network.d.ts +35 -0
  101. package/package.json +1 -1
  102. package/types/openapi/models/Canvas.d.ts +1 -0
  103. package/types/openapi/models/CanvasCreate.d.ts +1 -0
  104. package/types/openapi/models/CanvasCreateRequest.d.ts +1 -0
  105. package/types/openapi/models/CanvasRecommendedFile.d.ts +1 -1
  106. package/types/openapi/models/CanvasRetrieve.d.ts +1 -0
  107. package/types/openapi/models/CanvasUpdate.d.ts +1 -0
  108. package/types/openapi/models/CanvasUpdateRequest.d.ts +1 -0
  109. package/types/openapi/models/DeletedCanvas.d.ts +1 -0
  110. package/types/openapi/models/File.d.ts +1 -1
  111. package/types/openapi/models/PatchedCanvasUpdateRequest.d.ts +1 -0
  112. package/types/openapi/models/SharedLink.d.ts +6 -0
  113. package/types/openapi/models/SharedLinkCreateRequest.d.ts +5 -0
package/js-api.esm.js CHANGED
@@ -2724,6 +2724,17 @@ function aiComplete(payload) {
2724
2724
  }
2725
2725
  return highLevelApi.API.request("ai.complete", payload);
2726
2726
  }
2727
+ function asCitations(value) {
2728
+ if (!Array.isArray(value)) return void 0;
2729
+ const citations = value.flatMap((entry) => {
2730
+ if (!entry || typeof entry !== "object") return [];
2731
+ const { file_id: fileId, page_indices: pageIndices } = entry;
2732
+ if (typeof fileId !== "string" || fileId === "" || !Array.isArray(pageIndices)) return [];
2733
+ const pages = pageIndices.filter((page) => Number.isInteger(page) && page >= 0);
2734
+ return pages.length > 0 ? [{ file_id: fileId, page_indices: pages }] : [];
2735
+ });
2736
+ return citations.length > 0 ? citations : void 0;
2737
+ }
2727
2738
  async function piaSearchAnswer(payload) {
2728
2739
  if (!payload || typeof payload.query !== "string" || payload.query.trim() === "") {
2729
2740
  return Promise.reject(new Error("query is required and must be a non-empty string"));
@@ -2769,9 +2780,11 @@ async function piaSearchAnswer(payload) {
2769
2780
  "pia_search"
2770
2781
  );
2771
2782
  const output = data?.pia_search ?? {};
2783
+ const citations = asCitations(output.citations);
2772
2784
  return {
2773
2785
  answer: typeof output.answer === "string" ? output.answer : "",
2774
2786
  cited_file_ids: Array.isArray(output.cited_file_ids) ? output.cited_file_ids : [],
2787
+ ...citations && { citations },
2775
2788
  ...output.confidence && { confidence: output.confidence },
2776
2789
  source: "online"
2777
2790
  };
@@ -2877,6 +2890,30 @@ async function weeklyFocusRank(payload) {
2877
2890
  };
2878
2891
  }
2879
2892
 
2893
+ const PLATFORM_TYPE = {
2894
+ web: "web",
2895
+ ios: "ios",
2896
+ android: "android",
2897
+ windows: "windows",
2898
+ macos: "macos"
2899
+ };
2900
+
2901
+ const WEB_MODE = "WEB";
2902
+ function isNativeHost(mode) {
2903
+ return typeof mode === "string" && mode !== "" && mode !== WEB_MODE;
2904
+ }
2905
+ const PLATFORM_TYPE_BY_MODE = {
2906
+ WEB: PLATFORM_TYPE.web,
2907
+ IOS: PLATFORM_TYPE.ios,
2908
+ MACOS: PLATFORM_TYPE.macos,
2909
+ WINDOWS: PLATFORM_TYPE.windows,
2910
+ ANDROID: PLATFORM_TYPE.android
2911
+ };
2912
+ function platformTypeForMode(mode) {
2913
+ if (!mode) return void 0;
2914
+ return Object.prototype.hasOwnProperty.call(PLATFORM_TYPE_BY_MODE, mode) ? PLATFORM_TYPE_BY_MODE[mode] : void 0;
2915
+ }
2916
+
2880
2917
  const APPS_DB_BASE_PATH = "/core/api/protected/appsdb";
2881
2918
  async function fetchAppsDbContext() {
2882
2919
  const env = await highLevelApi.API.request("get_env");
@@ -2885,7 +2922,7 @@ async function fetchAppsDbContext() {
2885
2922
  let origin = claimsDomain || metadataDomain || "";
2886
2923
  if (origin && !origin.startsWith("http")) origin = `https://${origin}`;
2887
2924
  return {
2888
- isIos: (env?.mode ?? env?.pitcher?.mode) === "IOS",
2925
+ isNative: isNativeHost(env?.mode ?? env?.pitcher?.mode),
2889
2926
  origin,
2890
2927
  accessToken: env?.pitcher?.access_token ?? "",
2891
2928
  instanceId: env?.pitcher?.instance?.id
@@ -3024,7 +3061,7 @@ async function appsDbGetEntries(payload) {
3024
3061
  return Promise.reject(new Error("type is required and must be a non-empty string"));
3025
3062
  }
3026
3063
  const ctx = await getAppsDbContext();
3027
- if (ctx.isIos) {
3064
+ if (ctx.isNative) {
3028
3065
  try {
3029
3066
  return await highLevelApi.API.request("appsdb_get_entries", payload);
3030
3067
  } catch (error) {
@@ -3041,7 +3078,7 @@ async function appsDbUpsertEntry(payload) {
3041
3078
  return Promise.reject(new Error("type is required when creating an entry (no id provided)"));
3042
3079
  }
3043
3080
  const ctx = await getAppsDbContext();
3044
- if (ctx.isIos) {
3081
+ if (ctx.isNative) {
3045
3082
  try {
3046
3083
  return await highLevelApi.API.request("appsdb_upsert_entry", payload);
3047
3084
  } catch (error) {
@@ -3058,7 +3095,7 @@ async function appsDbDeleteEntry(payload) {
3058
3095
  return Promise.reject(new Error("id is required and must be a non-empty string"));
3059
3096
  }
3060
3097
  const ctx = await getAppsDbContext();
3061
- if (ctx.isIos) {
3098
+ if (ctx.isNative) {
3062
3099
  try {
3063
3100
  return await highLevelApi.API.request("appsdb_delete_entry", payload);
3064
3101
  } catch (error) {
@@ -3101,7 +3138,7 @@ async function appsDbPsql(payload) {
3101
3138
  return Promise.reject(new Error("query is required and must be a non-empty string"));
3102
3139
  }
3103
3140
  const ctx = await getAppsDbContext();
3104
- if (ctx.isIos) {
3141
+ if (ctx.isNative) {
3105
3142
  const parsed = parseSimplePsql(payload.query);
3106
3143
  let mirrorUnavailable = false;
3107
3144
  if (parsed && await isDeviceOffline()) {
@@ -4545,24 +4582,32 @@ function paramsSerializer(params) {
4545
4582
  }
4546
4583
  return searchParams.toString();
4547
4584
  }
4585
+ function isNonRetryableStatus(status) {
4586
+ if (typeof status !== "number") return false;
4587
+ if (status >= 200 && status < 300) return true;
4588
+ return status >= 400 && status < 500;
4589
+ }
4548
4590
  async function fetchWithRetry(url, options, remainingRetries = MAX_RETRIES) {
4549
4591
  try {
4550
4592
  const response = await fetch(url, options);
4551
4593
  if (!response.ok) {
4552
- if (response.status === 401) {
4594
+ if (response.status === 401 && remainingRetries > 0) {
4553
4595
  const newToken = await refreshToken();
4554
4596
  options.headers = options.headers || {};
4555
4597
  options.headers.Authorization = `Bearer ${newToken}`;
4556
- return fetchWithRetry(url, options, remainingRetries);
4598
+ return fetchWithRetry(url, options, remainingRetries - 1);
4557
4599
  } else if (response.status >= 500 && response.status < 600 && remainingRetries > 0) {
4558
4600
  const delay = BASE_DELAY * Math.pow(2, MAX_RETRIES - remainingRetries);
4559
4601
  await new Promise((resolve) => setTimeout(resolve, delay));
4560
4602
  return fetchWithRetry(url, options, remainingRetries - 1);
4561
4603
  } else {
4562
- const errorData = await response.json();
4563
- const error = new Error(
4564
- `HTTP error! status: ${response.status}, message: ${errorData.message || response.statusText}`
4565
- );
4604
+ const raw = await response.text().catch(() => "");
4605
+ let message = response.statusText;
4606
+ try {
4607
+ message = JSON.parse(raw)?.message || response.statusText;
4608
+ } catch {
4609
+ }
4610
+ const error = new Error(`HTTP error! status: ${response.status}, message: ${message}`);
4566
4611
  error.status = response.status;
4567
4612
  throw error;
4568
4613
  }
@@ -4570,9 +4615,23 @@ async function fetchWithRetry(url, options, remainingRetries = MAX_RETRIES) {
4570
4615
  if (response.status === 204 || response.status === 205) {
4571
4616
  return;
4572
4617
  }
4573
- return response.json();
4618
+ const body = await response.text();
4619
+ if (!body) {
4620
+ const error = new Error(
4621
+ `Empty response body for status ${response.status} (expected JSON)`
4622
+ );
4623
+ error.status = response.status;
4624
+ throw error;
4625
+ }
4626
+ try {
4627
+ return JSON.parse(body);
4628
+ } catch (parseError) {
4629
+ ;
4630
+ parseError.status = response.status;
4631
+ throw parseError;
4632
+ }
4574
4633
  } catch (error) {
4575
- if (remainingRetries > 0 && !(error instanceof TypeError) && error.status !== 404) {
4634
+ if (remainingRetries > 0 && !(error instanceof TypeError) && !isNonRetryableStatus(error.status)) {
4576
4635
  const delay = BASE_DELAY * Math.pow(2, MAX_RETRIES - remainingRetries);
4577
4636
  await new Promise((resolve) => setTimeout(resolve, delay));
4578
4637
  return fetchWithRetry(url, options, remainingRetries - 1);
@@ -4774,7 +4833,8 @@ const onlineRestApiHandlers = {
4774
4833
  } catch (e) {
4775
4834
  if (e?.status === 404) {
4776
4835
  link = await http.post("/shared-links", {
4777
- canvas_id: params.id
4836
+ canvas_id: params.id,
4837
+ ...params.brand_id ? { brand_id: params.brand_id } : {}
4778
4838
  });
4779
4839
  } else {
4780
4840
  throw e;
@@ -5869,12 +5929,15 @@ async function sendPeerConnectivityEvent(payload, options) {
5869
5929
  let highLevelApi;
5870
5930
  let prevOptions;
5871
5931
  function usePitcherApi(options) {
5872
- if (!highLevelApi || !isEqual(options, prevOptions)) {
5932
+ if (!highLevelApi || options !== void 0 && !isEqual(options, prevOptions)) {
5873
5933
  highLevelApi = createHighLevelApi(options);
5874
- prevOptions = options;
5934
+ prevOptions = options === void 0 ? void 0 : { ...options };
5875
5935
  }
5876
5936
  return highLevelApi;
5877
5937
  }
5938
+ function createScopedPitcherApi(options) {
5939
+ return createHighLevelApi({ ...prevOptions, ...options });
5940
+ }
5878
5941
  function enhanceWithSnakeCase(api) {
5879
5942
  Object.entries(api).forEach(([key, value]) => {
5880
5943
  const newKey = snakeCase(key);
@@ -5922,5 +5985,5 @@ function useApi(options) {
5922
5985
 
5923
5986
  window.postRobot = pr;
5924
5987
 
5925
- export { ADMIN_API_METHOD_TYPES, ADMIN_API_TYPES, ADMIN_MESSAGE, ADMIN_MESSAGE_TYPES, DEFAULT_PEER_CONNECTIVITY_VERSION, DSR_API_METHOD_TYPES, DSR_API_TYPES, DSR_MESSAGE, DSR_MESSAGE_TYPES, PEER_CONNECTIVITY_EVENT, PEER_CONNECTIVITY_HANDLER_MATCH_ALL, PITCHER_EVENT, PeerConnectivityActions, PitcherBroadcastedEventName, PitcherEventName, PitcherExternalEventName, PitcherMessageType, PitcherResponseStatus, UI_API_METHOD_TYPES, UI_MESSAGE, UI_MESSAGE_TYPES, UI_NATIVE_MESSAGE_TYPES, getAvailableApis, highLevelApi, registerPeerConnectivityHandler, sendPeerConnectivityEvent, useAdmin, useApi, useDsr, usePitcherApi, useUi };
5988
+ export { ADMIN_API_METHOD_TYPES, ADMIN_API_TYPES, ADMIN_MESSAGE, ADMIN_MESSAGE_TYPES, DEFAULT_PEER_CONNECTIVITY_VERSION, DSR_API_METHOD_TYPES, DSR_API_TYPES, DSR_MESSAGE, DSR_MESSAGE_TYPES, PEER_CONNECTIVITY_EVENT, PEER_CONNECTIVITY_HANDLER_MATCH_ALL, PITCHER_EVENT, PeerConnectivityActions, PitcherBroadcastedEventName, PitcherEventName, PitcherExternalEventName, PitcherMessageType, PitcherResponseStatus, UI_API_METHOD_TYPES, UI_MESSAGE, UI_MESSAGE_TYPES, UI_NATIVE_MESSAGE_TYPES, WEB_MODE, createScopedPitcherApi, getAvailableApis, highLevelApi, isNativeHost, platformTypeForMode, registerPeerConnectivityHandler, sendPeerConnectivityEvent, useAdmin, useApi, useDsr, usePitcherApi, useUi };
5926
5989
  //# sourceMappingURL=js-api.esm.js.map