@pitcher/js-api 1.26.0-beta.8 → 1.26.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 (206) hide show
  1. package/impact-js-api.spec.json +9 -0
  2. package/js-api.esm.js +806 -47
  3. package/js-api.esm.js.map +1 -1
  4. package/js-api.umd.min.js +10 -10
  5. package/js-api.umd.min.js.map +1 -1
  6. package/lib/api/events/events.helpers.d.ts +14 -2
  7. package/lib/apps/agenda-selector/composables/move-item-modal.use.d.ts +12 -0
  8. package/lib/apps/browser/App.vue.d.ts +117 -0
  9. package/lib/apps/browser/appTypes.d.ts +7 -7
  10. package/lib/apps/browser/components/Content/ActionsToolbar/ActionsToolbar.vue.d.ts +21 -4
  11. package/lib/apps/browser/components/Content/Content.vue.d.ts +1 -0
  12. package/lib/apps/browser/components/Content/Panel/DetailsDrawer/DetailsDrawer.vue.d.ts +1 -0
  13. package/lib/apps/browser/components/Content/Panel/FolderPanel/FolderPanel.vue.d.ts +16 -1
  14. package/lib/apps/browser/components/ContextMenu/ConvertToSlidesButton.vue.d.ts +6 -0
  15. package/lib/apps/browser/components/RepUploads.vue.d.ts +206 -0
  16. package/lib/apps/browser/components/UploadFilesModal/UploadFilesModal.vue.d.ts +2 -0
  17. package/lib/apps/browser/components/UploadFilesModal/UploadFilesModalProperties.vue.d.ts +4 -0
  18. package/lib/apps/browser/stores/api.d.ts +69 -10
  19. package/lib/apps/browser/stores/app.d.ts +1 -1
  20. package/lib/apps/browser/stores/repUploadsStore.d.ts +34 -0
  21. package/lib/apps/browser/stores/upload.d.ts +16 -4
  22. package/lib/apps/browser/types/actionKeys.d.ts +3 -1
  23. package/lib/apps/canvas-builder/App.vue.d.ts +13 -0
  24. package/lib/apps/canvas-builder/components/container/CanvasContent/canvas-component-map.const.d.ts +3 -0
  25. package/lib/apps/canvas-builder/components/container/CanvasContent/page.paginated.vue.d.ts +2 -2
  26. package/lib/apps/canvas-builder/components/container/CanvasContent/pageWrapper.paginated.vue.d.ts +7 -0
  27. package/lib/apps/canvas-builder/components/ui/Carousel/Carousel.vue.d.ts +5 -0
  28. package/lib/apps/canvas-builder/components/ui/CollectionPlayer/CollectionPlayer.vue.d.ts +5 -2
  29. package/lib/apps/canvas-builder/components/ui/ContentGrid/ContentGrid.vue.d.ts +5 -0
  30. package/lib/apps/canvas-builder/components/ui/ContentList/ContentList.vue.d.ts +9 -8
  31. package/lib/apps/canvas-builder/components/ui/CustomDataTable/CustomDataTable.vue.d.ts +5 -0
  32. package/lib/apps/canvas-builder/components/ui/DataCharts/DataCharts.raw.vue.d.ts +4 -0
  33. package/lib/apps/canvas-builder/components/ui/DataCharts/DataCharts.vue.d.ts +5 -0
  34. package/lib/apps/canvas-builder/components/ui/DataCharts/types.d.ts +119 -8
  35. package/lib/apps/canvas-builder/components/ui/DynamicContent/DynamicContent.edit.vue.d.ts +2 -0
  36. package/lib/apps/canvas-builder/components/ui/DynamicContent/DynamicContent.raw.vue.d.ts +8 -0
  37. package/lib/apps/canvas-builder/components/ui/DynamicContent/DynamicContent.settings.vue.d.ts +7 -0
  38. package/lib/apps/canvas-builder/components/ui/DynamicContent/DynamicContent.vue.d.ts +31 -0
  39. package/lib/apps/canvas-builder/components/ui/DynamicContent/DynamicContentList.vue.d.ts +12 -0
  40. package/lib/apps/canvas-builder/components/ui/DynamicContent/dynamicContent.const.d.ts +4 -0
  41. package/lib/apps/canvas-builder/components/ui/DynamicContent/section-component-map.const.d.ts +1 -0
  42. package/lib/apps/canvas-builder/components/ui/DynamicContent/useDynamicContent.d.ts +436 -0
  43. package/lib/apps/canvas-builder/components/ui/DynamicDataTable/DynamicDataTable.vue.d.ts +5 -0
  44. package/lib/apps/canvas-builder/components/ui/Embeddable/Embeddable.vue.d.ts +5 -0
  45. package/lib/apps/canvas-builder/components/ui/Grid/Grid.vue.d.ts +5 -0
  46. package/lib/apps/canvas-builder/components/ui/Html/Html.vue.d.ts +5 -0
  47. package/lib/apps/canvas-builder/components/ui/IFrame/IFrame.vue.d.ts +5 -0
  48. package/lib/apps/canvas-builder/components/ui/Link/Link.vue.d.ts +5 -0
  49. package/lib/apps/canvas-builder/components/ui/Multimedia/Multimedia.vue.d.ts +5 -0
  50. package/lib/apps/canvas-builder/components/ui/Page/Page.vue.d.ts +5 -0
  51. package/lib/apps/canvas-builder/components/ui/PageBreak/PageBreak.vue.d.ts +15 -1
  52. package/lib/apps/canvas-builder/components/ui/Scribble/Scribble.original.vue.d.ts +5 -0
  53. package/lib/apps/canvas-builder/components/ui/Scribble/Scribble.responsive.vue.d.ts +5 -0
  54. package/lib/apps/canvas-builder/components/ui/SectionList/SectionItemModal.vue.d.ts +4 -2
  55. package/lib/apps/canvas-builder/components/ui/SectionList/SectionList.vue.d.ts +9 -3
  56. package/lib/apps/canvas-builder/components/ui/SectionList/SectionSelectorToolbar.vue.d.ts +0 -12
  57. package/lib/apps/canvas-builder/components/ui/Timeline/Timeline.vue.d.ts +5 -0
  58. package/lib/apps/canvas-builder/composables/useCanvas.d.ts +372 -14
  59. package/lib/apps/canvas-builder/composables/useCanvasBlocks.d.ts +64 -2
  60. package/lib/apps/canvas-builder/composables/useCanvasCompletionWizard.d.ts +1 -1
  61. package/lib/apps/canvas-builder/composables/useCanvasHistory.d.ts +62 -0
  62. package/lib/apps/canvas-builder/composables/useCanvasPages.d.ts +1 -1
  63. package/lib/apps/canvas-builder/composables/useCanvasSectionOverrides.d.ts +1 -1
  64. package/lib/apps/canvas-builder/composables/useCanvasTheme.d.ts +42 -18
  65. package/lib/apps/canvas-builder/composables/useCanvasVisibility.d.ts +2 -2
  66. package/lib/apps/canvas-builder/composables/useComponentPermissions.d.ts +2 -1
  67. package/lib/apps/canvas-builder/composables/useContentSelector.d.ts +9 -1
  68. package/lib/apps/canvas-builder/composables/useCrmShape.d.ts +2 -1
  69. package/lib/apps/canvas-builder/composables/useCrmShapeWithSectionContext.d.ts +1 -2
  70. package/lib/apps/canvas-builder/composables/usePopupApps.d.ts +10 -2
  71. package/lib/apps/canvas-builder/composables/useReorderComponent.d.ts +3 -3
  72. package/lib/apps/canvas-builder/composables/useScribbleChild.d.ts +1 -1
  73. package/lib/apps/canvas-builder/constants/canvas.const.d.ts +4 -0
  74. package/lib/apps/canvas-builder/types/canvas.d.ts +25 -2
  75. package/lib/apps/canvas-builder/util/canvas.util.d.ts +6 -5
  76. package/lib/apps/canvas-builder/util/fetchAnalyticsPopularity.d.ts +18 -0
  77. package/lib/apps/canvas-selector/stores/app.d.ts +14 -14
  78. package/lib/apps/collection-player/App.vue.d.ts +0 -1
  79. package/lib/apps/collection-player/stores/app.store.d.ts +0 -1
  80. package/lib/apps/collection-selector/composables/move-slide-modal.use.d.ts +12 -0
  81. package/lib/apps/content-selector/appTypes.d.ts +1 -0
  82. package/lib/apps/content-selector/components/Content/AllContent/List/FoldersFilesList.vue.d.ts +21 -4
  83. package/lib/apps/content-selector/stores/app.d.ts +2 -1
  84. package/lib/apps/ppt-conversion-selector/composables/move-slide-modal.use.d.ts +6 -0
  85. package/lib/apps/ppt-conversion-selector/export.d.ts +1 -0
  86. package/lib/apps/ppt-conversion-selector/stores/app.store.d.ts +8 -0
  87. package/lib/apps/ppt-conversion-selector/utils/data.util.d.ts +1 -0
  88. package/lib/apps/ppt-conversion-selector/utils/data.util.test.d.ts +1 -0
  89. package/lib/components/CBulkToolbar/CBulkToolbar.vue.d.ts +3 -0
  90. package/lib/components/CComponentListItem/CComponentListItem.vue.d.ts +8 -8
  91. package/lib/components/CContactSelector/CContactAccountListItem.vue.d.ts +3 -0
  92. package/lib/components/CContactSelector/CContactSelector.vue.d.ts +3 -1
  93. package/lib/components/CContactSelector/CContactSelectorAccountsWithContacts.vue.d.ts +10 -4
  94. package/lib/components/CContentError/CContentError.vue.d.ts +2 -0
  95. package/lib/components/CFileAttributes/CFileAttributes.vue.d.ts +11 -0
  96. package/lib/components/CGlobalSearch/GlobalSearch.use.d.ts +2 -1
  97. package/lib/components/CSearchFilters/CSearchFilters.vue.d.ts +7 -1
  98. package/lib/components/CSwitch/CSwitch.vue.d.ts +4 -2
  99. package/lib/components/CTemplateAccessInfo/CTemplateAccessInfo.vue.d.ts +25 -0
  100. package/lib/components/CTemplateAccessManage/CTemplateAccessManage.vue.d.ts +26 -0
  101. package/lib/components/CUsersGroupsAccessManage/CUsersGroupsAccessManage.types.d.ts +3 -8
  102. package/lib/components/assignedCanvases/CAssignedCanvasesManagement.vue.d.ts +20 -4
  103. package/lib/components/assignedCanvases/CAssignedCanvasesManagementToolbar.vue.d.ts +4 -1
  104. package/lib/components/canvas-blocks/CBlockManagement.vue.d.ts +19 -7
  105. package/lib/components/canvas-blocks/CBlockManagementToolbar.vue.d.ts +4 -1
  106. package/lib/components/canvas-templates/CTemplateManagement.vue.d.ts +79 -15
  107. package/lib/components/canvas-templates/CTemplateManagementActionsCell.vue.d.ts +3 -0
  108. package/lib/components/canvas-templates/CTemplateManagementToolbar.vue.d.ts +28 -5
  109. package/lib/components/filters/CSearchFilter.vue.d.ts +1148 -1
  110. package/lib/components/savedCanvases/CSavedCanvasesManagement.use.d.ts +3 -0
  111. package/lib/components/savedCanvases/CSavedCanvasesManagement.use.spec.d.ts +1 -0
  112. package/lib/components/savedCanvases/CSavedCanvasesManagement.vue.d.ts +31 -4
  113. package/lib/components/savedCanvases/CSavedCanvasesManagementActionsCell.vue.d.ts +12 -0
  114. package/lib/components/savedCanvases/CSavedCanvasesManagementToolbar.vue.d.ts +5 -1
  115. package/lib/components/savedCanvases/smartFolders/SmartFolders.use.d.ts +4 -4
  116. package/lib/components/sections/CSectionManagement.vue.d.ts +23 -7
  117. package/lib/components/sections/CSectionManagementActionsCell.vue.d.ts +3 -0
  118. package/lib/components/sections/CSectionManagementToolbar.vue.d.ts +4 -1
  119. package/lib/components/themes/CThemeManagement.vue.d.ts +18 -4
  120. package/lib/components/themes/CThemeManagementActionsCell.vue.d.ts +3 -0
  121. package/lib/components/themes/CThemeManagementToolbar.vue.d.ts +4 -1
  122. package/lib/composables/presentationHistory.use.d.ts +12 -2
  123. package/lib/composables/useCanvasStandardFilters.d.ts +17 -2
  124. package/lib/composables/useFileDisplayHelpers.d.ts +1 -0
  125. package/lib/composables/useFilterSuggestions.d.ts +5 -1
  126. package/lib/composables/useMetadataSearch.d.ts +8 -2
  127. package/lib/composables/useSmartStore.d.ts +25 -0
  128. package/lib/main.lib.d.ts +8 -1
  129. package/lib/sdk/api/HighLevelApi.d.ts +7 -4
  130. package/lib/sdk/api/modules/index.d.ts +0 -1
  131. package/lib/sdk/api/modules/query.d.ts +145 -1
  132. package/lib/sdk/api/modules/ui/content.ui.d.ts +22 -1
  133. package/lib/sdk/api/modules/ui/index.d.ts +3 -0
  134. package/lib/sdk/api/modules/ui/sharing.ui.d.ts +2 -0
  135. package/lib/sdk/api/modules/ui/types.ui.d.ts +32 -0
  136. package/lib/sdk/interfaces.d.ts +16 -0
  137. package/lib/sdk/main.d.ts +30 -12
  138. package/lib/sdk/payload.types.d.ts +138 -0
  139. package/lib/sdk/utils/httpFetch.d.ts +2 -0
  140. package/lib/types/app.d.ts +2 -1
  141. package/lib/types/call.d.ts +9 -2
  142. package/lib/types/canvases.d.ts +2 -0
  143. package/lib/types/core/MetadataFilter.d.ts +1 -0
  144. package/lib/types/instanceSettings.types.d.ts +4 -2
  145. package/lib/types/launchDarkly.types.d.ts +11 -4
  146. package/lib/types/organizationSettings.types.d.ts +11 -0
  147. package/lib/types/sfdc.d.ts +6 -1
  148. package/lib/util/app.util.d.ts +46 -0
  149. package/lib/util/eval.d.ts +4 -0
  150. package/lib/util/font.util.d.ts +4 -0
  151. package/lib/util/handlebars.d.ts +35 -0
  152. package/lib/util/object.d.ts +1 -0
  153. package/lib/util/sfdc.util.d.ts +7 -0
  154. package/lib/util/sfdc.util.spec.d.ts +1 -0
  155. package/lib/util/smart-store.util.d.ts +53 -0
  156. package/lib/util/smart-store.util.spec.d.ts +1 -0
  157. package/package.json +2 -2
  158. package/types/openapi/models/Account.d.ts +1 -1
  159. package/types/openapi/models/AccountRequest.d.ts +1 -1
  160. package/types/openapi/models/CanvasRecommendedFile.d.ts +1 -0
  161. package/types/openapi/models/DeletedFile.d.ts +1 -0
  162. package/types/openapi/models/DeletedFolder.d.ts +1 -0
  163. package/types/openapi/models/FavoriteFile.d.ts +1 -0
  164. package/types/openapi/models/FavoriteFileRequest.d.ts +1 -0
  165. package/types/openapi/models/File.d.ts +1 -0
  166. package/types/openapi/models/FileContentTypeEnum.d.ts +3 -0
  167. package/types/openapi/models/FileCreate.d.ts +1 -0
  168. package/types/openapi/models/FileCreateRequest.d.ts +1 -0
  169. package/types/openapi/models/FilePermission.d.ts +2 -0
  170. package/types/openapi/models/FilePermissionRequest.d.ts +2 -0
  171. package/types/openapi/models/FileRetrieve.d.ts +1 -0
  172. package/types/openapi/models/FileUpdate.d.ts +1 -0
  173. package/types/openapi/models/FileUpdateRequest.d.ts +1 -0
  174. package/types/openapi/models/Folder.d.ts +1 -0
  175. package/types/openapi/models/FolderCreate.d.ts +3 -0
  176. package/types/openapi/models/FolderFile.d.ts +3 -0
  177. package/types/openapi/models/FolderRetrieve.d.ts +4 -0
  178. package/types/openapi/models/FolderUpdate.d.ts +3 -0
  179. package/types/openapi/models/InstanceMembershipUser.d.ts +1 -0
  180. package/types/openapi/models/OfflineSyncFolder.d.ts +1 -0
  181. package/types/openapi/models/PaginatedAppList.d.ts +2 -2
  182. package/types/openapi/models/PaginatedAuthTokenList.d.ts +2 -2
  183. package/types/openapi/models/PaginatedCanvasList.d.ts +2 -2
  184. package/types/openapi/models/PaginatedCollaborationList.d.ts +2 -2
  185. package/types/openapi/models/PaginatedContentDistributionGroupList.d.ts +2 -2
  186. package/types/openapi/models/PaginatedContentDistributionGroupMembershipList.d.ts +2 -2
  187. package/types/openapi/models/PaginatedEnvironmentList.d.ts +2 -2
  188. package/types/openapi/models/PaginatedEventList.d.ts +2 -2
  189. package/types/openapi/models/PaginatedFavoriteList.d.ts +2 -2
  190. package/types/openapi/models/PaginatedFileList.d.ts +2 -2
  191. package/types/openapi/models/PaginatedFileRevisionList.d.ts +2 -2
  192. package/types/openapi/models/PaginatedFolderList.d.ts +2 -2
  193. package/types/openapi/models/PaginatedInstanceAssignmentGroupList.d.ts +2 -2
  194. package/types/openapi/models/PaginatedInstanceAssignmentGroupMembershipList.d.ts +2 -2
  195. package/types/openapi/models/PaginatedInstanceList.d.ts +2 -2
  196. package/types/openapi/models/PaginatedInstanceMembershipList.d.ts +2 -2
  197. package/types/openapi/models/PaginatedInvitationList.d.ts +2 -2
  198. package/types/openapi/models/PaginatedMetadataTemplateList.d.ts +2 -2
  199. package/types/openapi/models/PaginatedOfflineSyncFolderList.d.ts +2 -2
  200. package/types/openapi/models/PaginatedRegionList.d.ts +2 -2
  201. package/types/openapi/models/PaginatedRevisionList.d.ts +2 -2
  202. package/types/openapi/models/PaginatedUserList.d.ts +2 -2
  203. package/types/openapi/models/PatchedFileUpdateRequest.d.ts +1 -0
  204. package/types/openapi/models/User.d.ts +5 -1
  205. package/lib/api/events/events.queries.d.ts +0 -9
  206. package/lib/sdk/api/modules/events.d.ts +0 -6
package/js-api.esm.js CHANGED
@@ -33,7 +33,7 @@ var hasRequiredPostRobot$1;
33
33
  function requirePostRobot$1 () {
34
34
  if (hasRequiredPostRobot$1) return postRobot$1.exports;
35
35
  hasRequiredPostRobot$1 = 1;
36
- (function (module, exports) {
36
+ (function (module, exports$1) {
37
37
  !function(root, factory) {
38
38
  module.exports = factory() ;
39
39
  }("undefined" != typeof self ? self : postRobot, (function() {
@@ -52,17 +52,17 @@ function requirePostRobot$1 () {
52
52
  }
53
53
  __webpack_require__.m = modules;
54
54
  __webpack_require__.c = installedModules;
55
- __webpack_require__.d = function(exports, name, getter) {
56
- __webpack_require__.o(exports, name) || Object.defineProperty(exports, name, {
55
+ __webpack_require__.d = function(exports$1, name, getter) {
56
+ __webpack_require__.o(exports$1, name) || Object.defineProperty(exports$1, name, {
57
57
  enumerable: true,
58
58
  get: getter
59
59
  });
60
60
  };
61
- __webpack_require__.r = function(exports) {
62
- "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(exports, Symbol.toStringTag, {
61
+ __webpack_require__.r = function(exports$1) {
62
+ "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(exports$1, Symbol.toStringTag, {
63
63
  value: "Module"
64
64
  });
65
- Object.defineProperty(exports, "__esModule", {
65
+ Object.defineProperty(exports$1, "__esModule", {
66
66
  value: true
67
67
  });
68
68
  };
@@ -2401,19 +2401,6 @@ function getLanguages() {
2401
2401
  return this.API.request("get_languages");
2402
2402
  }
2403
2403
 
2404
- function getEvents(payload) {
2405
- return highLevelApi.API.request("get_events", payload);
2406
- }
2407
- function createEvent(payload) {
2408
- return highLevelApi.API.request("create_event", payload);
2409
- }
2410
- function updateEvent(payload) {
2411
- return highLevelApi.API.request("update_event", payload);
2412
- }
2413
- function deleteEvent(payload) {
2414
- return highLevelApi.API.request("delete_event", payload);
2415
- }
2416
-
2417
2404
  function getCanvases$1(payload) {
2418
2405
  return this.API.request("get_canvases", payload);
2419
2406
  }
@@ -2531,18 +2518,609 @@ function toast$2(payload) {
2531
2518
  return this.API.request("toast", payload);
2532
2519
  }
2533
2520
 
2521
+ const SQL_KEYWORDS = /* @__PURE__ */ new Set([
2522
+ "SELECT",
2523
+ "FROM",
2524
+ "WHERE",
2525
+ "AND",
2526
+ "OR",
2527
+ "NOT",
2528
+ "IN",
2529
+ "LIKE",
2530
+ "ORDER",
2531
+ "BY",
2532
+ "GROUP",
2533
+ "HAVING",
2534
+ "LIMIT",
2535
+ "OFFSET",
2536
+ "ASC",
2537
+ "DESC",
2538
+ "NULLS",
2539
+ "FIRST",
2540
+ "LAST",
2541
+ "NULL",
2542
+ "TRUE",
2543
+ "FALSE",
2544
+ "COUNT",
2545
+ "SUM",
2546
+ "AVG",
2547
+ "MIN",
2548
+ "MAX",
2549
+ "COUNT_DISTINCT",
2550
+ "CALENDAR_MONTH",
2551
+ "CALENDAR_QUARTER",
2552
+ "CALENDAR_YEAR",
2553
+ "DAY_IN_MONTH",
2554
+ "DAY_IN_WEEK",
2555
+ "DAY_IN_YEAR",
2556
+ "DAY_ONLY",
2557
+ "FISCAL_MONTH",
2558
+ "FISCAL_QUARTER",
2559
+ "FISCAL_YEAR",
2560
+ "HOUR_IN_DAY",
2561
+ "WEEK_IN_MONTH",
2562
+ "WEEK_IN_YEAR",
2563
+ "INCLUDES",
2564
+ "EXCLUDES",
2565
+ "ABOVE",
2566
+ "BELOW",
2567
+ "ABOVE_OR_BELOW",
2568
+ "AT",
2569
+ "TYPEOF",
2570
+ "WHEN",
2571
+ "THEN",
2572
+ "ELSE",
2573
+ "END",
2574
+ "USING",
2575
+ "SCOPE",
2576
+ "DATA",
2577
+ "CATEGORY",
2578
+ "ROLLUP",
2579
+ "CUBE",
2580
+ "FORMAT",
2581
+ "CONVERTCURRENCY",
2582
+ "TOLABEL",
2583
+ "DISTANCE",
2584
+ "GEOLOCATION"
2585
+ ]);
2586
+ const AGGREGATE_FUNCTIONS = ["COUNT", "SUM", "AVG", "MIN", "MAX", "COUNT_DISTINCT"];
2587
+ function isSqlKeyword(word) {
2588
+ return SQL_KEYWORDS.has(word.toUpperCase());
2589
+ }
2590
+ function isLiteralValue(value) {
2591
+ const trimmed = value.trim();
2592
+ if (trimmed.startsWith("'") && trimmed.endsWith("'") || trimmed.startsWith('"') && trimmed.endsWith('"')) {
2593
+ return true;
2594
+ }
2595
+ if (/^-?\d+(\.\d+)?$/.test(trimmed)) {
2596
+ return true;
2597
+ }
2598
+ if (/^(true|false)$/i.test(trimmed)) {
2599
+ return true;
2600
+ }
2601
+ if (/^null$/i.test(trimmed)) {
2602
+ return true;
2603
+ }
2604
+ if (/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d{3})?(Z|[+-]\d{2}:\d{2})?)?$/.test(trimmed)) {
2605
+ return true;
2606
+ }
2607
+ if (/^(TODAY|YESTERDAY|TOMORROW|LAST_WEEK|THIS_WEEK|NEXT_WEEK|LAST_MONTH|THIS_MONTH|NEXT_MONTH|LAST_90_DAYS|NEXT_90_DAYS|LAST_N_DAYS:\d+|NEXT_N_DAYS:\d+|LAST_N_WEEKS:\d+|NEXT_N_WEEKS:\d+|LAST_N_MONTHS:\d+|NEXT_N_MONTHS:\d+|LAST_N_QUARTERS:\d+|NEXT_N_QUARTERS:\d+|LAST_N_YEARS:\d+|NEXT_N_YEARS:\d+|THIS_QUARTER|LAST_QUARTER|NEXT_QUARTER|THIS_YEAR|LAST_YEAR|NEXT_YEAR|THIS_FISCAL_QUARTER|LAST_FISCAL_QUARTER|NEXT_FISCAL_QUARTER|THIS_FISCAL_YEAR|LAST_FISCAL_YEAR|NEXT_FISCAL_YEAR)$/i.test(
2608
+ trimmed
2609
+ )) {
2610
+ return true;
2611
+ }
2612
+ return false;
2613
+ }
2614
+ function isDateTimeLiteral(token) {
2615
+ return /^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d{3})?(Z|[+-]\d{2}:\d{2})?)?$/.test(token);
2616
+ }
2617
+ function convertFieldToSmartStore(field, primaryObject, objectAliases) {
2618
+ const trimmed = field.trim();
2619
+ if (isSqlKeyword(trimmed) || isLiteralValue(trimmed)) {
2620
+ return trimmed;
2621
+ }
2622
+ if (trimmed === "__FIELDS_ALL_PLACEHOLDER__") {
2623
+ return `{${primaryObject}:_soup}`;
2624
+ }
2625
+ if (trimmed === "*") {
2626
+ return "*";
2627
+ }
2628
+ if (trimmed.startsWith("{") && trimmed.endsWith("}")) {
2629
+ return trimmed;
2630
+ }
2631
+ if (trimmed.includes(".")) {
2632
+ const parts = trimmed.split(".");
2633
+ const alias = parts[0];
2634
+ if (objectAliases.has(alias.toLowerCase()) && objectAliases.get(alias.toLowerCase()) === primaryObject) {
2635
+ const fieldPath = parts.slice(1).join(".");
2636
+ return `{${primaryObject}:${fieldPath}}`;
2637
+ }
2638
+ return `{${primaryObject}:${trimmed}}`;
2639
+ }
2640
+ return `{${primaryObject}:${trimmed}}`;
2641
+ }
2642
+ function convertAggregateFunction(expr, primaryObject, objectAliases) {
2643
+ for (const func of AGGREGATE_FUNCTIONS) {
2644
+ const regex = new RegExp(`\\b${func}\\s*\\(([^)]+)\\)`, "gi");
2645
+ expr = expr.replace(regex, (_match, innerField) => {
2646
+ const trimmedInner = innerField.trim();
2647
+ if (trimmedInner === "*") {
2648
+ return `${func}(*)`;
2649
+ }
2650
+ if (trimmedInner.toUpperCase().startsWith("DISTINCT ")) {
2651
+ const fieldPart = trimmedInner.substring(9).trim();
2652
+ const smartField2 = convertFieldToSmartStore(fieldPart, primaryObject, objectAliases);
2653
+ return `${func}(DISTINCT ${smartField2})`;
2654
+ }
2655
+ const smartField = convertFieldToSmartStore(trimmedInner, primaryObject, objectAliases);
2656
+ return `${func}(${smartField})`;
2657
+ });
2658
+ }
2659
+ return expr;
2660
+ }
2661
+ function parseSelectFields(selectClause) {
2662
+ const fields = [];
2663
+ let depth = 0;
2664
+ let currentField = "";
2665
+ for (let i = 0; i < selectClause.length; i++) {
2666
+ const char = selectClause[i];
2667
+ if (char === "(") {
2668
+ depth++;
2669
+ currentField += char;
2670
+ } else if (char === ")") {
2671
+ depth--;
2672
+ currentField += char;
2673
+ } else if (char === "," && depth === 0) {
2674
+ if (currentField.trim()) {
2675
+ fields.push(currentField.trim());
2676
+ }
2677
+ currentField = "";
2678
+ } else {
2679
+ currentField += char;
2680
+ }
2681
+ }
2682
+ if (currentField.trim()) {
2683
+ fields.push(currentField.trim());
2684
+ }
2685
+ return fields;
2686
+ }
2687
+ function convertSelectFields(fields, primaryObject, objectAliases) {
2688
+ return fields.map((field) => {
2689
+ const aliasMatch = field.match(/^(.+?)\s+(?:AS\s+)?([A-Za-z_][A-Za-z0-9_]*)$/i);
2690
+ let expression = field;
2691
+ let alias = "";
2692
+ if (aliasMatch) {
2693
+ expression = aliasMatch[1].trim();
2694
+ alias = aliasMatch[2];
2695
+ }
2696
+ const hasAggregate = AGGREGATE_FUNCTIONS.some((func) => new RegExp(`\\b${func}\\s*\\(`, "i").test(expression));
2697
+ if (hasAggregate) {
2698
+ const converted2 = convertAggregateFunction(expression, primaryObject, objectAliases);
2699
+ return alias ? `${converted2} ${alias}` : converted2;
2700
+ }
2701
+ const converted = convertFieldToSmartStore(expression, primaryObject, objectAliases);
2702
+ return alias ? `${converted} ${alias}` : converted;
2703
+ });
2704
+ }
2705
+ function convertNullComparisons(clause) {
2706
+ let result = clause.replace(/\s*!=\s*null\b/gi, " IS NOT NULL");
2707
+ result = result.replace(/\s*<>\s*null\b/gi, " IS NOT NULL");
2708
+ result = result.replace(/\s*=\s*null\b/gi, " IS NULL");
2709
+ return result;
2710
+ }
2711
+ function convertWhereClause(whereClause, primaryObject, objectAliases) {
2712
+ let result = "";
2713
+ let i = 0;
2714
+ const len = whereClause.length;
2715
+ while (i < len) {
2716
+ const char = whereClause[i];
2717
+ if (/\s/.test(char)) {
2718
+ result += char;
2719
+ i++;
2720
+ continue;
2721
+ }
2722
+ if (char === "'" || char === '"') {
2723
+ const quote = char;
2724
+ result += char;
2725
+ i++;
2726
+ while (i < len && whereClause[i] !== quote) {
2727
+ if (whereClause[i] === "\\" && i + 1 < len) {
2728
+ result += whereClause[i] + whereClause[i + 1];
2729
+ i += 2;
2730
+ } else {
2731
+ result += whereClause[i];
2732
+ i++;
2733
+ }
2734
+ }
2735
+ if (i < len) {
2736
+ result += whereClause[i];
2737
+ i++;
2738
+ }
2739
+ continue;
2740
+ }
2741
+ if (/[()=<>!,]/.test(char)) {
2742
+ result += char;
2743
+ i++;
2744
+ if ((char === "!" || char === "<" || char === ">") && i < len && whereClause[i] === "=") {
2745
+ result += whereClause[i];
2746
+ i++;
2747
+ }
2748
+ continue;
2749
+ }
2750
+ if (/[a-zA-Z_]/.test(char)) {
2751
+ let identifier = "";
2752
+ while (i < len && /[a-zA-Z0-9_.]/.test(whereClause[i])) {
2753
+ identifier += whereClause[i];
2754
+ i++;
2755
+ }
2756
+ if (isSqlKeyword(identifier) || isLiteralValue(identifier)) {
2757
+ result += identifier;
2758
+ } else {
2759
+ result += convertFieldToSmartStore(identifier, primaryObject, objectAliases);
2760
+ }
2761
+ continue;
2762
+ }
2763
+ if (/[0-9-]/.test(char)) {
2764
+ let token = "";
2765
+ if (char === "-") {
2766
+ token += char;
2767
+ i++;
2768
+ }
2769
+ while (i < len && /[0-9.:\-TZ+]/.test(whereClause[i])) {
2770
+ token += whereClause[i];
2771
+ i++;
2772
+ }
2773
+ if (isDateTimeLiteral(token)) {
2774
+ result += `'${token}'`;
2775
+ } else {
2776
+ result += token;
2777
+ }
2778
+ continue;
2779
+ }
2780
+ result += char;
2781
+ i++;
2782
+ }
2783
+ result = convertNullComparisons(result);
2784
+ return result;
2785
+ }
2786
+ function parseOrderByClause(orderByClause) {
2787
+ const result = [];
2788
+ const parts = orderByClause.split(/,(?![^()]*\))/);
2789
+ for (const part of parts) {
2790
+ const trimmed = part.trim();
2791
+ if (!trimmed) continue;
2792
+ const match = trimmed.match(/^(.+?)\s*(ASC|DESC)?\s*(NULLS\s+(?:FIRST|LAST))?$/i);
2793
+ if (match) {
2794
+ const field = match[1].trim();
2795
+ let direction = match[2] ? match[2].toUpperCase() : "";
2796
+ if (match[3]) {
2797
+ direction += (direction ? " " : "") + match[3].toUpperCase();
2798
+ }
2799
+ result.push({ field, direction });
2800
+ } else {
2801
+ result.push({ field: trimmed, direction: "" });
2802
+ }
2803
+ }
2804
+ return result;
2805
+ }
2806
+ function convertOrderByFields(orderByParts, primaryObject, objectAliases) {
2807
+ return orderByParts.map(({ field, direction }) => {
2808
+ const hasAggregate = AGGREGATE_FUNCTIONS.some((func) => new RegExp(`\\b${func}\\s*\\(`, "i").test(field));
2809
+ let convertedField;
2810
+ if (hasAggregate) {
2811
+ convertedField = convertAggregateFunction(field, primaryObject, objectAliases);
2812
+ } else {
2813
+ convertedField = convertFieldToSmartStore(field, primaryObject, objectAliases);
2814
+ }
2815
+ return direction ? `${convertedField} ${direction}` : convertedField;
2816
+ });
2817
+ }
2818
+ function parseGroupByClause(groupByClause) {
2819
+ return groupByClause.split(/,(?![^()]*\))/).map((f) => f.trim()).filter(Boolean);
2820
+ }
2821
+ function convertGroupByFields(fields, primaryObject, objectAliases) {
2822
+ return fields.map((field) => {
2823
+ if (/^(ROLLUP|CUBE)\s*\(/i.test(field)) {
2824
+ return field.replace(/\(([^)]+)\)/g, (_match, inner) => {
2825
+ const innerFields = inner.split(",").map((f) => f.trim());
2826
+ const converted = innerFields.map((f) => convertFieldToSmartStore(f, primaryObject, objectAliases));
2827
+ return `(${converted.join(", ")})`;
2828
+ });
2829
+ }
2830
+ return convertFieldToSmartStore(field, primaryObject, objectAliases);
2831
+ });
2832
+ }
2833
+ function parseFromClause(fromClause) {
2834
+ const joins = [];
2835
+ const primaryMatch = fromClause.match(/^([A-Za-z0-9_]+)(?:\s+(?:AS\s+)?([A-Za-z_][A-Za-z0-9_]*))?/i);
2836
+ if (!primaryMatch) {
2837
+ return { primary: "", joins };
2838
+ }
2839
+ const primary = primaryMatch[1];
2840
+ const alias = primaryMatch[2];
2841
+ const joinRegex = /(LEFT\s+OUTER\s+JOIN|LEFT\s+JOIN|INNER\s+JOIN|JOIN)\s+([A-Za-z0-9_]+)(?:\s+(?:AS\s+)?([A-Za-z_][A-Za-z0-9_]*))?\s+ON\s+([^,]+?)(?=(?:LEFT|INNER|JOIN|$))/gi;
2842
+ let joinMatch;
2843
+ while ((joinMatch = joinRegex.exec(fromClause)) !== null) {
2844
+ joins.push({
2845
+ type: joinMatch[1].toUpperCase().replace(/\s+/g, " "),
2846
+ object: joinMatch[2],
2847
+ alias: joinMatch[3],
2848
+ on: joinMatch[4]?.trim()
2849
+ });
2850
+ }
2851
+ return { primary, alias, joins };
2852
+ }
2853
+ function removeSubqueries(query) {
2854
+ const subqueries = [];
2855
+ let cleanQuery = "";
2856
+ let depth = 0;
2857
+ let currentSubquery = "";
2858
+ let inSubquery = false;
2859
+ for (let i = 0; i < query.length; i++) {
2860
+ const char = query[i];
2861
+ if (char === "(") {
2862
+ depth++;
2863
+ if (depth === 1) {
2864
+ const remaining = query.substring(i + 1).trimStart();
2865
+ if (/^SELECT\s/i.test(remaining)) {
2866
+ inSubquery = true;
2867
+ currentSubquery = char;
2868
+ continue;
2869
+ }
2870
+ }
2871
+ if (inSubquery) {
2872
+ currentSubquery += char;
2873
+ } else {
2874
+ cleanQuery += char;
2875
+ }
2876
+ } else if (char === ")") {
2877
+ if (inSubquery) {
2878
+ currentSubquery += char;
2879
+ depth--;
2880
+ if (depth === 0) {
2881
+ subqueries.push(currentSubquery);
2882
+ currentSubquery = "";
2883
+ inSubquery = false;
2884
+ }
2885
+ } else {
2886
+ depth--;
2887
+ cleanQuery += char;
2888
+ }
2889
+ } else {
2890
+ if (inSubquery) {
2891
+ currentSubquery += char;
2892
+ } else {
2893
+ cleanQuery += char;
2894
+ }
2895
+ }
2896
+ }
2897
+ return { cleanQuery, subqueries };
2898
+ }
2899
+ function findMainFromClause(query) {
2900
+ const { cleanQuery } = removeSubqueries(query);
2901
+ const fromMatch = cleanQuery.match(
2902
+ /FROM\s+([A-Za-z0-9_]+)(?:\s+(?:AS\s+)?[A-Za-z_][A-Za-z0-9_]*)?(?=\s+WHERE\s+|\s+ORDER\s+BY\s+|\s+GROUP\s+BY\s+|\s+HAVING\s+|\s+LIMIT\s+|\s+OFFSET\s+|\s*$)/i
2903
+ );
2904
+ const primaryObject = fromMatch ? fromMatch[1] : null;
2905
+ return { primaryObject, cleanQuery };
2906
+ }
2907
+ function convertSoqlToSmartQuery(soqlQuery) {
2908
+ if (!soqlQuery || typeof soqlQuery !== "string") {
2909
+ return "";
2910
+ }
2911
+ let normalizedQuery = soqlQuery.replace(/\s+/g, " ").trim();
2912
+ const { primaryObject, cleanQuery } = findMainFromClause(normalizedQuery);
2913
+ if (!primaryObject) {
2914
+ return soqlQuery;
2915
+ }
2916
+ normalizedQuery = cleanQuery;
2917
+ normalizedQuery = normalizedQuery.replace(
2918
+ /\bFIELDS\s*\(\s*(ALL|STANDARD|CUSTOM)\s*\)/gi,
2919
+ "__FIELDS_ALL_PLACEHOLDER__"
2920
+ );
2921
+ const selectMatch = normalizedQuery.match(/SELECT\s+([\s\S]+?)\s+FROM\s+/i);
2922
+ if (!selectMatch) {
2923
+ return soqlQuery;
2924
+ }
2925
+ const fromMatch = normalizedQuery.match(
2926
+ /FROM\s+([\s\S]+?)(?=\s+WHERE\s+|\s+ORDER\s+BY\s+|\s+GROUP\s+BY\s+|\s+HAVING\s+|\s+LIMIT\s+|\s+OFFSET\s+|\s*$)/i
2927
+ );
2928
+ const fromParsed = fromMatch ? parseFromClause(fromMatch[1].trim()) : { };
2929
+ const whereMatch = normalizedQuery.match(
2930
+ /WHERE\s+([\s\S]+?)(?=\s+ORDER\s+BY\s+|\s+GROUP\s+BY\s+|\s+HAVING\s+|\s+LIMIT\s+|\s+OFFSET\s+|\s*$)/i
2931
+ );
2932
+ const groupByMatch = normalizedQuery.match(
2933
+ /GROUP\s+BY\s+([\s\S]+?)(?=\s+HAVING\s+|\s+ORDER\s+BY\s+|\s+LIMIT\s+|\s+OFFSET\s+|\s*$)/i
2934
+ );
2935
+ const havingMatch = normalizedQuery.match(/HAVING\s+([\s\S]+?)(?=\s+ORDER\s+BY\s+|\s+LIMIT\s+|\s+OFFSET\s+|\s*$)/i);
2936
+ const orderByMatch = normalizedQuery.match(/ORDER\s+BY\s+([\s\S]+?)(?=\s+LIMIT\s+|\s+OFFSET\s+|\s*$)/i);
2937
+ const limitMatch = normalizedQuery.match(/LIMIT\s+(\d+)/i);
2938
+ const offsetMatch = normalizedQuery.match(/OFFSET\s+(\d+)/i);
2939
+ const objectAliases = /* @__PURE__ */ new Map();
2940
+ if (fromParsed.alias) {
2941
+ objectAliases.set(fromParsed.alias.toLowerCase(), primaryObject);
2942
+ }
2943
+ objectAliases.set(primaryObject.toLowerCase(), primaryObject);
2944
+ const parts = [];
2945
+ const selectFields = parseSelectFields(selectMatch[1].trim());
2946
+ const smartSelectFields = convertSelectFields(selectFields, primaryObject, objectAliases);
2947
+ parts.push(`SELECT ${smartSelectFields.join(", ")}`);
2948
+ parts.push(`FROM {${primaryObject}}`);
2949
+ const whereConditions = [];
2950
+ if (whereMatch) {
2951
+ const smartWhere = convertWhereClause(whereMatch[1].trim(), primaryObject, objectAliases);
2952
+ whereConditions.push(smartWhere);
2953
+ }
2954
+ if (whereConditions.length > 0) {
2955
+ parts.push(`WHERE ${whereConditions.join(" AND ")}`);
2956
+ }
2957
+ if (groupByMatch) {
2958
+ const groupByFields = parseGroupByClause(groupByMatch[1].trim());
2959
+ const smartGroupBy = convertGroupByFields(groupByFields, primaryObject, objectAliases);
2960
+ parts.push(`GROUP BY ${smartGroupBy.join(", ")}`);
2961
+ }
2962
+ if (havingMatch) {
2963
+ const smartHaving = convertWhereClause(havingMatch[1].trim(), primaryObject, objectAliases);
2964
+ parts.push(`HAVING ${smartHaving}`);
2965
+ }
2966
+ if (orderByMatch) {
2967
+ const orderByParts = parseOrderByClause(orderByMatch[1].trim());
2968
+ const smartOrderBy = convertOrderByFields(orderByParts, primaryObject, objectAliases);
2969
+ parts.push(`ORDER BY ${smartOrderBy.join(", ")}`);
2970
+ }
2971
+ if (limitMatch) {
2972
+ parts.push(`LIMIT ${limitMatch[1]}`);
2973
+ }
2974
+ if (offsetMatch) {
2975
+ parts.push(`OFFSET ${offsetMatch[1]}`);
2976
+ }
2977
+ return parts.join(" ");
2978
+ }
2979
+
2534
2980
  function query(payload) {
2535
2981
  return highLevelApi.API.request("query", payload);
2536
2982
  }
2537
2983
  function crmQuery(payload) {
2538
2984
  return highLevelApi.API.request("crm_query", payload);
2539
2985
  }
2986
+ function extractFieldsFromSoql(soqlQuery) {
2987
+ const { cleanQuery } = findMainFromClause(soqlQuery.replace(/\s+/g, " ").trim());
2988
+ const selectMatch = cleanQuery.match(/SELECT\s+([\s\S]+?)\s+FROM\s+/i);
2989
+ if (!selectMatch) return [];
2990
+ const selectClause = selectMatch[1];
2991
+ const fields = [];
2992
+ let depth = 0;
2993
+ let currentField = "";
2994
+ for (let i = 0; i < selectClause.length; i++) {
2995
+ const char = selectClause[i];
2996
+ if (char === "(") {
2997
+ depth++;
2998
+ currentField += char;
2999
+ } else if (char === ")") {
3000
+ depth--;
3001
+ currentField += char;
3002
+ } else if (char === "," && depth === 0) {
3003
+ if (currentField.trim()) {
3004
+ fields.push(currentField.trim());
3005
+ }
3006
+ currentField = "";
3007
+ } else {
3008
+ currentField += char;
3009
+ }
3010
+ }
3011
+ if (currentField.trim()) {
3012
+ fields.push(currentField.trim());
3013
+ }
3014
+ return fields.map((field) => {
3015
+ const aliasMatch = field.match(/^(.+?)\s+(?:AS\s+)?([A-Za-z_][A-Za-z0-9_]*)$/i);
3016
+ const fieldExpr = aliasMatch ? aliasMatch[1].trim() : field.trim();
3017
+ return fieldExpr;
3018
+ });
3019
+ }
3020
+ function extractObjectFromSoql(soqlQuery) {
3021
+ const { primaryObject } = findMainFromClause(soqlQuery.replace(/\s+/g, " ").trim());
3022
+ return primaryObject ?? "";
3023
+ }
3024
+ function setNestedProperty(obj, path, value) {
3025
+ const parts = path.split(".");
3026
+ if (parts.length === 1) {
3027
+ obj[path] = value;
3028
+ return;
3029
+ }
3030
+ let current = obj;
3031
+ for (let i = 0; i < parts.length - 1; i++) {
3032
+ const part = parts[i];
3033
+ if (!current[part] || typeof current[part] !== "object") {
3034
+ current[part] = {};
3035
+ }
3036
+ current = current[part];
3037
+ }
3038
+ current[parts[parts.length - 1]] = value;
3039
+ }
3040
+ function isAllFieldsSelector(field) {
3041
+ const trimmed = field.trim();
3042
+ return trimmed === "*" || /^FIELDS\s*\(\s*(ALL|STANDARD|CUSTOM)\s*\)$/i.test(trimmed);
3043
+ }
3044
+ function transformSmartStoreResults(smartStoreResults, fields, objectName) {
3045
+ if (!smartStoreResults || !Array.isArray(smartStoreResults)) {
3046
+ return [];
3047
+ }
3048
+ return smartStoreResults.map((row) => {
3049
+ const record = {};
3050
+ fields.forEach((field, index) => {
3051
+ if (index < row.length) {
3052
+ const value = row[index];
3053
+ if (isAllFieldsSelector(field)) {
3054
+ if (value && typeof value === "object" && !Array.isArray(value)) {
3055
+ Object.assign(record, value);
3056
+ }
3057
+ } else {
3058
+ setNestedProperty(record, field, value);
3059
+ }
3060
+ }
3061
+ });
3062
+ const recordId = record["Id"] || record["id"] || "";
3063
+ record["attributes"] = {
3064
+ type: objectName,
3065
+ url: recordId ? `/services/data/v57.0/sobjects/${objectName}/${recordId}` : ""
3066
+ };
3067
+ return record;
3068
+ });
3069
+ }
3070
+ async function crmQueryAdaptive(payload) {
3071
+ const query2 = payload.query;
3072
+ if (!query2 || typeof query2 !== "string") {
3073
+ return Promise.reject(new Error("Query is required and must be a string"));
3074
+ }
3075
+ let useSmartStore = false;
3076
+ try {
3077
+ const env = await highLevelApi.API.request("get_env");
3078
+ const isIos = env?.mode === "IOS";
3079
+ const isSfdcSyncEnabled = env?.launch_darkly?.sfdc_offline_enabled === true;
3080
+ useSmartStore = isIos && isSfdcSyncEnabled;
3081
+ } catch {
3082
+ useSmartStore = false;
3083
+ }
3084
+ console.log(`[crmQueryAdaptive] Called query: `, query2);
3085
+ if (useSmartStore) {
3086
+ const fields = extractFieldsFromSoql(query2);
3087
+ const objectName = extractObjectFromSoql(query2);
3088
+ let smartQuery = convertSoqlToSmartQuery(query2);
3089
+ if (!smartQuery.includes("__locally_deleted__")) {
3090
+ const fromMatch = smartQuery.match(/FROM\s+\{([A-Za-z0-9_]+)\}/);
3091
+ const primaryObject = fromMatch?.[1];
3092
+ if (primaryObject) {
3093
+ const filter = `({${primaryObject}:__locally_deleted__} = 0 OR {${primaryObject}:__locally_deleted__} = 'false' OR {${primaryObject}:__locally_deleted__} IS NULL)`;
3094
+ if (smartQuery.includes(" WHERE ")) {
3095
+ smartQuery = smartQuery.replace(
3096
+ /\s+WHERE\s+([\s\S]+?)(?=\s+ORDER\s+BY\s+|\s+GROUP\s+BY\s+|\s+HAVING\s+|\s+LIMIT\s+|\s+OFFSET\s+|\s*$)/i,
3097
+ (_, conditions) => ` WHERE (${conditions}) AND ${filter}`
3098
+ );
3099
+ } else {
3100
+ smartQuery = smartQuery.replace(
3101
+ /(FROM\s+\{[A-Za-z0-9_]+\})((\s+(?:ORDER\s+BY|GROUP\s+BY|HAVING|LIMIT|OFFSET)[\s\S]*)?)$/i,
3102
+ (_, fromClause, rest) => `${fromClause} WHERE ${filter}${rest}`
3103
+ );
3104
+ }
3105
+ }
3106
+ }
3107
+ console.log(`[crmSmartQuery] Called query: `, smartQuery);
3108
+ const smartStoreResults = await crmSmartQuery({ query: smartQuery });
3109
+ const records = transformSmartStoreResults(smartStoreResults, fields, objectName);
3110
+ console.log(`[SmartStore] Results: `, records);
3111
+ return {
3112
+ records,
3113
+ totalSize: records.length
3114
+ };
3115
+ }
3116
+ return crmQuery(payload);
3117
+ }
2540
3118
  function crmSmartQuery(payload) {
2541
3119
  const query2 = payload.query;
2542
3120
  if (!query2 || typeof query2 !== "string") {
2543
3121
  return Promise.reject(new Error("Query is required and must be a string"));
2544
3122
  }
2545
- const smartStorePattern = /\{[^}]+:[^}]+\}/;
3123
+ const smartStorePattern = /\{[^}]+:[^}]+}/;
2546
3124
  if (!smartStorePattern.test(query2.trim())) {
2547
3125
  return Promise.reject(
2548
3126
  new Error(
@@ -2560,6 +3138,9 @@ function crmSmartObjectMetadata(payload) {
2560
3138
  if (!objectName || typeof objectName !== "string" || objectName.trim() === "") {
2561
3139
  return Promise.reject(new Error("Object name is required and must be a non-empty string"));
2562
3140
  }
3141
+ if (payload.record_type_id !== void 0 && (typeof payload.record_type_id !== "string" || payload.record_type_id.trim() === "")) {
3142
+ return Promise.reject(new Error("record_type_id must be a non-empty string if provided"));
3143
+ }
2563
3144
  return highLevelApi.API.request("crm_smart_object_metadata", payload);
2564
3145
  }
2565
3146
  function crmSmartUpsertObjects(payload) {
@@ -2599,7 +3180,14 @@ function crmSmartUpsertObjects(payload) {
2599
3180
  }
2600
3181
  }
2601
3182
  }
2602
- return highLevelApi.API.request("crm_smart_upsert_objects", payload);
3183
+ console.log("[crmSmartUpsertObjects] Request payload:", JSON.stringify(payload, null, 2));
3184
+ return highLevelApi.API.request("crm_smart_upsert_objects", payload).then((result) => {
3185
+ console.log("[crmSmartUpsertObjects] Success:", result);
3186
+ return result;
3187
+ }).catch((error) => {
3188
+ console.error("[crmSmartUpsertObjects] Error:", error);
3189
+ throw error;
3190
+ });
2603
3191
  }
2604
3192
  function crmSmartObjectValidationRules(payload) {
2605
3193
  if (!payload) {
@@ -2611,6 +3199,114 @@ function crmSmartObjectValidationRules(payload) {
2611
3199
  }
2612
3200
  return highLevelApi.API.request("crm_smart_object_validation_rules", payload);
2613
3201
  }
3202
+ function crmSmartObjectLayout(payload) {
3203
+ if (!payload) {
3204
+ return Promise.reject(new Error("Payload is required"));
3205
+ }
3206
+ const objectName = payload.object;
3207
+ if (!objectName || typeof objectName !== "string" || objectName.trim() === "") {
3208
+ return Promise.reject(new Error("Object name is required and must be a non-empty string"));
3209
+ }
3210
+ return highLevelApi.API.request("crm_smart_object_layout", payload);
3211
+ }
3212
+ function crmSmartDeleteObjects(payload) {
3213
+ if (!payload || !payload.objects || !Array.isArray(payload.objects)) {
3214
+ return Promise.reject(new Error("Payload must contain an array of objects"));
3215
+ }
3216
+ if (payload.objects.length === 0) {
3217
+ return Promise.reject(new Error("Objects array cannot be empty"));
3218
+ }
3219
+ for (const obj of payload.objects) {
3220
+ if (!obj) {
3221
+ return Promise.reject(new Error("Objects array cannot contain null or undefined elements"));
3222
+ }
3223
+ if (!obj.table_name || typeof obj.table_name !== "string" || obj.table_name.trim() === "") {
3224
+ return Promise.reject(new Error("Each object must have a valid non-empty table_name"));
3225
+ }
3226
+ if (!obj.ids || !Array.isArray(obj.ids) || obj.ids.length === 0) {
3227
+ return Promise.reject(new Error(`Object for table ${obj.table_name} must have a non-empty ids array`));
3228
+ }
3229
+ for (let i = 0; i < obj.ids.length; i++) {
3230
+ const id = obj.ids[i];
3231
+ if (!id || typeof id !== "string" || id.trim() === "") {
3232
+ return Promise.reject(
3233
+ new Error(
3234
+ `Object for table ${obj.table_name} contains invalid id at index ${i}. All IDs must be non-empty strings.`
3235
+ )
3236
+ );
3237
+ }
3238
+ }
3239
+ }
3240
+ console.log("[crmSmartDeleteObjects] Request payload:", JSON.stringify(payload, null, 2));
3241
+ return highLevelApi.API.request("crm_smart_delete_objects", payload).then((result) => {
3242
+ console.log("[crmSmartDeleteObjects] Success:", result);
3243
+ return result;
3244
+ }).catch((error) => {
3245
+ console.error("[crmSmartDeleteObjects] Error:", error);
3246
+ throw error;
3247
+ });
3248
+ }
3249
+ function crmCreate(payload) {
3250
+ if (!payload) {
3251
+ return Promise.reject(new Error("Payload is required"));
3252
+ }
3253
+ if (!payload.sobject || typeof payload.sobject !== "string" || payload.sobject.trim() === "") {
3254
+ return Promise.reject(new Error("sobject is required and must be a non-empty string"));
3255
+ }
3256
+ if (!payload.records || !Array.isArray(payload.records) || payload.records.length === 0) {
3257
+ return Promise.reject(new Error("records is required and must be a non-empty array"));
3258
+ }
3259
+ for (let i = 0; i < payload.records.length; i++) {
3260
+ const record = payload.records[i];
3261
+ if (!record || typeof record !== "object" || Array.isArray(record)) {
3262
+ return Promise.reject(
3263
+ new Error(`records contains invalid element at index ${i}. All records must be valid objects.`)
3264
+ );
3265
+ }
3266
+ }
3267
+ return highLevelApi.API.request("crm_create", payload);
3268
+ }
3269
+ function crmUpsert(payload) {
3270
+ if (!payload) {
3271
+ return Promise.reject(new Error("Payload is required"));
3272
+ }
3273
+ if (!payload.sobject || typeof payload.sobject !== "string" || payload.sobject.trim() === "") {
3274
+ return Promise.reject(new Error("sobject is required and must be a non-empty string"));
3275
+ }
3276
+ if (!payload.records || !Array.isArray(payload.records) || payload.records.length === 0) {
3277
+ return Promise.reject(new Error("records is required and must be a non-empty array"));
3278
+ }
3279
+ if (!payload.external_id_field || typeof payload.external_id_field !== "string" || payload.external_id_field.trim() === "") {
3280
+ return Promise.reject(new Error("external_id_field is required and must be a non-empty string"));
3281
+ }
3282
+ for (let i = 0; i < payload.records.length; i++) {
3283
+ const record = payload.records[i];
3284
+ if (!record || typeof record !== "object" || Array.isArray(record)) {
3285
+ return Promise.reject(
3286
+ new Error(`records contains invalid element at index ${i}. All records must be valid objects.`)
3287
+ );
3288
+ }
3289
+ }
3290
+ return highLevelApi.API.request("crm_upsert", payload);
3291
+ }
3292
+ function crmDescribe(payload) {
3293
+ if (!payload) {
3294
+ return Promise.reject(new Error("Payload is required"));
3295
+ }
3296
+ if (!payload.sobject || typeof payload.sobject !== "string" || payload.sobject.trim() === "") {
3297
+ return Promise.reject(new Error("sobject is required and must be a non-empty string"));
3298
+ }
3299
+ return highLevelApi.API.request("crm_describe", payload);
3300
+ }
3301
+ function crmLayout(payload) {
3302
+ if (!payload) {
3303
+ return Promise.reject(new Error("Payload is required"));
3304
+ }
3305
+ if (!payload.sobject || typeof payload.sobject !== "string" || payload.sobject.trim() === "") {
3306
+ return Promise.reject(new Error("sobject is required and must be a non-empty string"));
3307
+ }
3308
+ return highLevelApi.API.request("crm_layout", payload);
3309
+ }
2614
3310
 
2615
3311
  function getFolders(payload) {
2616
3312
  return this.API.request("get_folders", payload);
@@ -2703,17 +3399,22 @@ const modules = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
2703
3399
  assignCanvasTheme,
2704
3400
  close: close$2,
2705
3401
  createCanvas: createCanvas$1,
2706
- createEvent,
2707
3402
  createFavorite,
2708
3403
  createFile,
2709
3404
  createFolder,
3405
+ crmCreate,
3406
+ crmDescribe,
3407
+ crmLayout,
2710
3408
  crmQuery,
3409
+ crmQueryAdaptive,
3410
+ crmSmartDeleteObjects,
3411
+ crmSmartObjectLayout,
2711
3412
  crmSmartObjectMetadata,
2712
3413
  crmSmartObjectValidationRules,
2713
3414
  crmSmartQuery,
2714
3415
  crmSmartUpsertObjects,
3416
+ crmUpsert,
2715
3417
  deleteCanvas,
2716
- deleteEvent,
2717
3418
  deleteFavorite,
2718
3419
  deleteFile,
2719
3420
  deleteFolder,
@@ -2727,7 +3428,6 @@ const modules = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
2727
3428
  getCanvases: getCanvases$1,
2728
3429
  getCoreFolders,
2729
3430
  getEnv: getEnv$2,
2730
- getEvents,
2731
3431
  getFavorites,
2732
3432
  getFile: getFile$2,
2733
3433
  getFileRevisionData,
@@ -2764,7 +3464,6 @@ const modules = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
2764
3464
  unassignCanvasTheme,
2765
3465
  updateCanvas: updateCanvas$2,
2766
3466
  updateCanvasIndicators,
2767
- updateEvent,
2768
3467
  updateFile,
2769
3468
  updateFolder,
2770
3469
  updateMyUser
@@ -2810,21 +3509,17 @@ function unsafeStringify(arr, offset = 0) {
2810
3509
  byteToHex[arr[offset + 15]]).toLowerCase();
2811
3510
  }
2812
3511
 
2813
- let getRandomValues;
2814
3512
  const rnds8 = new Uint8Array(16);
2815
3513
  function rng() {
2816
- if (!getRandomValues) {
2817
- if (typeof crypto === 'undefined' || !crypto.getRandomValues) {
2818
- throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');
2819
- }
2820
- getRandomValues = crypto.getRandomValues.bind(crypto);
2821
- }
2822
- return getRandomValues(rnds8);
3514
+ return crypto.getRandomValues(rnds8);
2823
3515
  }
2824
3516
 
2825
- const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);
2826
- const native = { randomUUID };
2827
-
3517
+ function v4(options, buf, offset) {
3518
+ if (crypto.randomUUID) {
3519
+ return crypto.randomUUID();
3520
+ }
3521
+ return _v4(options);
3522
+ }
2828
3523
  function _v4(options, buf, offset) {
2829
3524
  options = options || {};
2830
3525
  const rnds = options.random ?? options.rng?.() ?? rng();
@@ -2835,12 +3530,6 @@ function _v4(options, buf, offset) {
2835
3530
  rnds[8] = (rnds[8] & 0x3f) | 0x80;
2836
3531
  return unsafeStringify(rnds);
2837
3532
  }
2838
- function v4(options, buf, offset) {
2839
- if (native.randomUUID && true && !options) {
2840
- return native.randomUUID();
2841
- }
2842
- return _v4(options);
2843
- }
2844
3533
 
2845
3534
  const PITCHER_EVENT = "PITCHER_EVENT";
2846
3535
  var PitcherMessageType = /* @__PURE__ */ ((PitcherMessageType2) => {
@@ -2885,6 +3574,7 @@ var PitcherEventName = /* @__PURE__ */ ((PitcherEventName2) => {
2885
3574
  PitcherEventName2["ITEM_SHAREBOX_ADD_REQUESTED"] = "item_sharebox_add_requested";
2886
3575
  PitcherEventName2["ITEM_SHAREBOX_ADD_COMPLETED"] = "item_sharebox_add_completed";
2887
3576
  PitcherEventName2["SYNC_BADGE_VALUE_REPORTED"] = "sync_badge_value_reported";
3577
+ PitcherEventName2["SYNC_BOX_RESOLVE_ERROR_TAPPED"] = "sync_box_resolve_error_tapped";
2888
3578
  PitcherEventName2["PEER_CONNECTIVITY_EVENT"] = "peer_connectivity_event";
2889
3579
  return PitcherEventName2;
2890
3580
  })(PitcherEventName || {});
@@ -2918,6 +3608,9 @@ function assert(exp, message) {
2918
3608
  const defaultSkipKeys = [
2919
3609
  "id__in",
2920
3610
  "tags__in",
3611
+ "tags__not_in",
3612
+ "template__id",
3613
+ "template__id__in",
2921
3614
  "modified_at__gtr",
2922
3615
  "created_at__gtr",
2923
3616
  "end_at__lt",
@@ -3159,6 +3852,17 @@ function createHttpClient(origin, token) {
3159
3852
  body: JSON.stringify(body)
3160
3853
  });
3161
3854
  return data;
3855
+ },
3856
+ /** PATCH with a full absolute URL (bypasses /api/v1 prefix). */
3857
+ patchUrl: async (absoluteUrl, body, options = {}) => {
3858
+ const data = await fetchWithRetry(absoluteUrl, {
3859
+ ...baseCommon,
3860
+ ...options,
3861
+ method: "PATCH",
3862
+ headers,
3863
+ body: JSON.stringify(body)
3864
+ });
3865
+ return data;
3162
3866
  }
3163
3867
  };
3164
3868
  }
@@ -3227,8 +3931,16 @@ const onlineRestApiHandlers = {
3227
3931
  },
3228
3932
  update_canvas: async (params) => {
3229
3933
  check();
3230
- const { id, ...restParams } = params;
3231
- const res = await http.patch(`/canvases/${params.id}`, restParams);
3934
+ const { id, fields, ...canvasData } = params;
3935
+ const useCoreEndpoint = env?.launch_darkly?.enable_canvas_core_patch === true;
3936
+ if (useCoreEndpoint) {
3937
+ const origin = env.pitcher.token_claims["https://pitcher.com/claims/urls"].custom_domain;
3938
+ const fieldsQs = fields ? `?fields=${encodeURIComponent(fields)}` : "";
3939
+ const url = `${origin}/core/api/protected/v1/canvases/${id}${fieldsQs}`;
3940
+ const res2 = await http.patchUrl(url, canvasData);
3941
+ return res2;
3942
+ }
3943
+ const res = await http.patch(`/canvases/${id}`, { fields, ...canvasData });
3232
3944
  return res;
3233
3945
  },
3234
3946
  delete_canvas: async (params) => {
@@ -3300,6 +4012,18 @@ function getTopPitcherWindow(current = window) {
3300
4012
  }
3301
4013
 
3302
4014
  const TRUNCATE_LENGTH_TRIGGER = 10;
4015
+ const RAW_PAYLOAD_METHODS = [
4016
+ "crm_create",
4017
+ "crm_upsert",
4018
+ "crm_describe",
4019
+ "crm_layout",
4020
+ "crm_smart_query",
4021
+ "crm_smart_object_metadata",
4022
+ "crm_smart_object_validation_rules",
4023
+ "crm_smart_object_layout",
4024
+ "crm_smart_upsert_objects",
4025
+ "crm_smart_delete_objects"
4026
+ ];
3303
4027
  function updateOnlineHandlersEnv(env) {
3304
4028
  env && setEnv(env);
3305
4029
  }
@@ -3365,7 +4089,8 @@ class LowLevelApi extends EventEmitter {
3365
4089
  throw new Error("unsupported response status");
3366
4090
  }
3367
4091
  };
3368
- const payload = cloneDeep(snakeCaseKeys(body));
4092
+ const shouldSkipSnakeCase = RAW_PAYLOAD_METHODS.includes(type);
4093
+ const payload = shouldSkipSnakeCase ? cloneDeep(body) : cloneDeep(snakeCaseKeys(body));
3369
4094
  this.callbacks[id] = {
3370
4095
  dispatched_at: Date.now(),
3371
4096
  type,
@@ -3578,7 +4303,10 @@ const UI_API_METHOD_TYPES = {
3578
4303
  UI_APP_LOADED: "ui_app_loaded",
3579
4304
  UI_APP_RESIZE: "ui_app_resize",
3580
4305
  UI_CLOSE_CANVAS_SECTION_EXECUTION: "ui_close_canvas_section_execution",
3581
- UI_CLOSE_CANVAS_DRAWER: "ui_close_canvas_drawer"
4306
+ UI_CLOSE_CANVAS_DRAWER: "ui_close_canvas_drawer",
4307
+ UI_OPEN_GLOBAL_POPUP: "ui_open_global_popup",
4308
+ UI_CLOSE_GLOBAL_POPUP: "ui_close_global_popup",
4309
+ UI_OPEN_SHARING_SETTINGS: "ui_open_sharing_settings"
3582
4310
  };
3583
4311
  const UI_MESSAGE_TYPES = {
3584
4312
  UI_MEETING_CANCELED: "ui_meeting_canceled",
@@ -3630,10 +4358,25 @@ async function selectAgendaContent$1(payload = {}) {
3630
4358
  const response = await pr.send(window.parent, UI_API_METHOD_TYPES.UI_SELECT_AGENDA_CONTENT, payload);
3631
4359
  return response.data;
3632
4360
  }
4361
+ async function openGlobalPopup(appName, extraContext) {
4362
+ const pr = await usePostRobot();
4363
+ const payload = {
4364
+ app_name: appName,
4365
+ extra_context: extraContext
4366
+ };
4367
+ const response = await pr.send(window.parent, UI_API_METHOD_TYPES.UI_OPEN_GLOBAL_POPUP, payload);
4368
+ return response.data;
4369
+ }
4370
+ async function closeGlobalPopup() {
4371
+ const pr = await usePostRobot();
4372
+ await pr.send(window.parent, UI_API_METHOD_TYPES.UI_CLOSE_GLOBAL_POPUP, {});
4373
+ }
3633
4374
 
3634
4375
  const contentUi = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
3635
4376
  __proto__: null,
4377
+ closeGlobalPopup,
3636
4378
  open: open$1,
4379
+ openGlobalPopup,
3637
4380
  preselectSfdcMeetingId,
3638
4381
  selectAgendaContent: selectAgendaContent$1,
3639
4382
  selectCollectionContent: selectCollectionContent$1,
@@ -3785,6 +4528,21 @@ const piaUi = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
3785
4528
  promptPia
3786
4529
  }, Symbol.toStringTag, { value: 'Module' }));
3787
4530
 
4531
+ async function openSharingSettings(payload) {
4532
+ const pr = await usePostRobot();
4533
+ const response = await pr.send(
4534
+ window.parent,
4535
+ UI_API_METHOD_TYPES.UI_OPEN_SHARING_SETTINGS,
4536
+ payload
4537
+ );
4538
+ return response.data;
4539
+ }
4540
+
4541
+ const sharingUi = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
4542
+ __proto__: null,
4543
+ openSharingSettings
4544
+ }, Symbol.toStringTag, { value: 'Module' }));
4545
+
3788
4546
  async function onNative(type, handler) {
3789
4547
  const messageListener = (event) => {
3790
4548
  if (event.data.type === type) {
@@ -3838,7 +4596,8 @@ const ui = {
3838
4596
  ...appErrorsUi,
3839
4597
  ...canvasUi,
3840
4598
  ...postCallUi,
3841
- ...piaUi
4599
+ ...piaUi,
4600
+ ...sharingUi
3842
4601
  };
3843
4602
 
3844
4603
  const ADMIN_MESSAGE = "ADMIN_MESSAGE";