@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.
- package/impact-js-api.spec.json +9 -0
- package/js-api.esm.js +806 -47
- package/js-api.esm.js.map +1 -1
- package/js-api.umd.min.js +10 -10
- package/js-api.umd.min.js.map +1 -1
- package/lib/api/events/events.helpers.d.ts +14 -2
- package/lib/apps/agenda-selector/composables/move-item-modal.use.d.ts +12 -0
- package/lib/apps/browser/App.vue.d.ts +117 -0
- package/lib/apps/browser/appTypes.d.ts +7 -7
- package/lib/apps/browser/components/Content/ActionsToolbar/ActionsToolbar.vue.d.ts +21 -4
- package/lib/apps/browser/components/Content/Content.vue.d.ts +1 -0
- package/lib/apps/browser/components/Content/Panel/DetailsDrawer/DetailsDrawer.vue.d.ts +1 -0
- package/lib/apps/browser/components/Content/Panel/FolderPanel/FolderPanel.vue.d.ts +16 -1
- package/lib/apps/browser/components/ContextMenu/ConvertToSlidesButton.vue.d.ts +6 -0
- package/lib/apps/browser/components/RepUploads.vue.d.ts +206 -0
- package/lib/apps/browser/components/UploadFilesModal/UploadFilesModal.vue.d.ts +2 -0
- package/lib/apps/browser/components/UploadFilesModal/UploadFilesModalProperties.vue.d.ts +4 -0
- package/lib/apps/browser/stores/api.d.ts +69 -10
- package/lib/apps/browser/stores/app.d.ts +1 -1
- package/lib/apps/browser/stores/repUploadsStore.d.ts +34 -0
- package/lib/apps/browser/stores/upload.d.ts +16 -4
- package/lib/apps/browser/types/actionKeys.d.ts +3 -1
- package/lib/apps/canvas-builder/App.vue.d.ts +13 -0
- package/lib/apps/canvas-builder/components/container/CanvasContent/canvas-component-map.const.d.ts +3 -0
- package/lib/apps/canvas-builder/components/container/CanvasContent/page.paginated.vue.d.ts +2 -2
- package/lib/apps/canvas-builder/components/container/CanvasContent/pageWrapper.paginated.vue.d.ts +7 -0
- package/lib/apps/canvas-builder/components/ui/Carousel/Carousel.vue.d.ts +5 -0
- package/lib/apps/canvas-builder/components/ui/CollectionPlayer/CollectionPlayer.vue.d.ts +5 -2
- package/lib/apps/canvas-builder/components/ui/ContentGrid/ContentGrid.vue.d.ts +5 -0
- package/lib/apps/canvas-builder/components/ui/ContentList/ContentList.vue.d.ts +9 -8
- package/lib/apps/canvas-builder/components/ui/CustomDataTable/CustomDataTable.vue.d.ts +5 -0
- package/lib/apps/canvas-builder/components/ui/DataCharts/DataCharts.raw.vue.d.ts +4 -0
- package/lib/apps/canvas-builder/components/ui/DataCharts/DataCharts.vue.d.ts +5 -0
- package/lib/apps/canvas-builder/components/ui/DataCharts/types.d.ts +119 -8
- package/lib/apps/canvas-builder/components/ui/DynamicContent/DynamicContent.edit.vue.d.ts +2 -0
- package/lib/apps/canvas-builder/components/ui/DynamicContent/DynamicContent.raw.vue.d.ts +8 -0
- package/lib/apps/canvas-builder/components/ui/DynamicContent/DynamicContent.settings.vue.d.ts +7 -0
- package/lib/apps/canvas-builder/components/ui/DynamicContent/DynamicContent.vue.d.ts +31 -0
- package/lib/apps/canvas-builder/components/ui/DynamicContent/DynamicContentList.vue.d.ts +12 -0
- package/lib/apps/canvas-builder/components/ui/DynamicContent/dynamicContent.const.d.ts +4 -0
- package/lib/apps/canvas-builder/components/ui/DynamicContent/section-component-map.const.d.ts +1 -0
- package/lib/apps/canvas-builder/components/ui/DynamicContent/useDynamicContent.d.ts +436 -0
- package/lib/apps/canvas-builder/components/ui/DynamicDataTable/DynamicDataTable.vue.d.ts +5 -0
- package/lib/apps/canvas-builder/components/ui/Embeddable/Embeddable.vue.d.ts +5 -0
- package/lib/apps/canvas-builder/components/ui/Grid/Grid.vue.d.ts +5 -0
- package/lib/apps/canvas-builder/components/ui/Html/Html.vue.d.ts +5 -0
- package/lib/apps/canvas-builder/components/ui/IFrame/IFrame.vue.d.ts +5 -0
- package/lib/apps/canvas-builder/components/ui/Link/Link.vue.d.ts +5 -0
- package/lib/apps/canvas-builder/components/ui/Multimedia/Multimedia.vue.d.ts +5 -0
- package/lib/apps/canvas-builder/components/ui/Page/Page.vue.d.ts +5 -0
- package/lib/apps/canvas-builder/components/ui/PageBreak/PageBreak.vue.d.ts +15 -1
- package/lib/apps/canvas-builder/components/ui/Scribble/Scribble.original.vue.d.ts +5 -0
- package/lib/apps/canvas-builder/components/ui/Scribble/Scribble.responsive.vue.d.ts +5 -0
- package/lib/apps/canvas-builder/components/ui/SectionList/SectionItemModal.vue.d.ts +4 -2
- package/lib/apps/canvas-builder/components/ui/SectionList/SectionList.vue.d.ts +9 -3
- package/lib/apps/canvas-builder/components/ui/SectionList/SectionSelectorToolbar.vue.d.ts +0 -12
- package/lib/apps/canvas-builder/components/ui/Timeline/Timeline.vue.d.ts +5 -0
- package/lib/apps/canvas-builder/composables/useCanvas.d.ts +372 -14
- package/lib/apps/canvas-builder/composables/useCanvasBlocks.d.ts +64 -2
- package/lib/apps/canvas-builder/composables/useCanvasCompletionWizard.d.ts +1 -1
- package/lib/apps/canvas-builder/composables/useCanvasHistory.d.ts +62 -0
- package/lib/apps/canvas-builder/composables/useCanvasPages.d.ts +1 -1
- package/lib/apps/canvas-builder/composables/useCanvasSectionOverrides.d.ts +1 -1
- package/lib/apps/canvas-builder/composables/useCanvasTheme.d.ts +42 -18
- package/lib/apps/canvas-builder/composables/useCanvasVisibility.d.ts +2 -2
- package/lib/apps/canvas-builder/composables/useComponentPermissions.d.ts +2 -1
- package/lib/apps/canvas-builder/composables/useContentSelector.d.ts +9 -1
- package/lib/apps/canvas-builder/composables/useCrmShape.d.ts +2 -1
- package/lib/apps/canvas-builder/composables/useCrmShapeWithSectionContext.d.ts +1 -2
- package/lib/apps/canvas-builder/composables/usePopupApps.d.ts +10 -2
- package/lib/apps/canvas-builder/composables/useReorderComponent.d.ts +3 -3
- package/lib/apps/canvas-builder/composables/useScribbleChild.d.ts +1 -1
- package/lib/apps/canvas-builder/constants/canvas.const.d.ts +4 -0
- package/lib/apps/canvas-builder/types/canvas.d.ts +25 -2
- package/lib/apps/canvas-builder/util/canvas.util.d.ts +6 -5
- package/lib/apps/canvas-builder/util/fetchAnalyticsPopularity.d.ts +18 -0
- package/lib/apps/canvas-selector/stores/app.d.ts +14 -14
- package/lib/apps/collection-player/App.vue.d.ts +0 -1
- package/lib/apps/collection-player/stores/app.store.d.ts +0 -1
- package/lib/apps/collection-selector/composables/move-slide-modal.use.d.ts +12 -0
- package/lib/apps/content-selector/appTypes.d.ts +1 -0
- package/lib/apps/content-selector/components/Content/AllContent/List/FoldersFilesList.vue.d.ts +21 -4
- package/lib/apps/content-selector/stores/app.d.ts +2 -1
- package/lib/apps/ppt-conversion-selector/composables/move-slide-modal.use.d.ts +6 -0
- package/lib/apps/ppt-conversion-selector/export.d.ts +1 -0
- package/lib/apps/ppt-conversion-selector/stores/app.store.d.ts +8 -0
- package/lib/apps/ppt-conversion-selector/utils/data.util.d.ts +1 -0
- package/lib/apps/ppt-conversion-selector/utils/data.util.test.d.ts +1 -0
- package/lib/components/CBulkToolbar/CBulkToolbar.vue.d.ts +3 -0
- package/lib/components/CComponentListItem/CComponentListItem.vue.d.ts +8 -8
- package/lib/components/CContactSelector/CContactAccountListItem.vue.d.ts +3 -0
- package/lib/components/CContactSelector/CContactSelector.vue.d.ts +3 -1
- package/lib/components/CContactSelector/CContactSelectorAccountsWithContacts.vue.d.ts +10 -4
- package/lib/components/CContentError/CContentError.vue.d.ts +2 -0
- package/lib/components/CFileAttributes/CFileAttributes.vue.d.ts +11 -0
- package/lib/components/CGlobalSearch/GlobalSearch.use.d.ts +2 -1
- package/lib/components/CSearchFilters/CSearchFilters.vue.d.ts +7 -1
- package/lib/components/CSwitch/CSwitch.vue.d.ts +4 -2
- package/lib/components/CTemplateAccessInfo/CTemplateAccessInfo.vue.d.ts +25 -0
- package/lib/components/CTemplateAccessManage/CTemplateAccessManage.vue.d.ts +26 -0
- package/lib/components/CUsersGroupsAccessManage/CUsersGroupsAccessManage.types.d.ts +3 -8
- package/lib/components/assignedCanvases/CAssignedCanvasesManagement.vue.d.ts +20 -4
- package/lib/components/assignedCanvases/CAssignedCanvasesManagementToolbar.vue.d.ts +4 -1
- package/lib/components/canvas-blocks/CBlockManagement.vue.d.ts +19 -7
- package/lib/components/canvas-blocks/CBlockManagementToolbar.vue.d.ts +4 -1
- package/lib/components/canvas-templates/CTemplateManagement.vue.d.ts +79 -15
- package/lib/components/canvas-templates/CTemplateManagementActionsCell.vue.d.ts +3 -0
- package/lib/components/canvas-templates/CTemplateManagementToolbar.vue.d.ts +28 -5
- package/lib/components/filters/CSearchFilter.vue.d.ts +1148 -1
- package/lib/components/savedCanvases/CSavedCanvasesManagement.use.d.ts +3 -0
- package/lib/components/savedCanvases/CSavedCanvasesManagement.use.spec.d.ts +1 -0
- package/lib/components/savedCanvases/CSavedCanvasesManagement.vue.d.ts +31 -4
- package/lib/components/savedCanvases/CSavedCanvasesManagementActionsCell.vue.d.ts +12 -0
- package/lib/components/savedCanvases/CSavedCanvasesManagementToolbar.vue.d.ts +5 -1
- package/lib/components/savedCanvases/smartFolders/SmartFolders.use.d.ts +4 -4
- package/lib/components/sections/CSectionManagement.vue.d.ts +23 -7
- package/lib/components/sections/CSectionManagementActionsCell.vue.d.ts +3 -0
- package/lib/components/sections/CSectionManagementToolbar.vue.d.ts +4 -1
- package/lib/components/themes/CThemeManagement.vue.d.ts +18 -4
- package/lib/components/themes/CThemeManagementActionsCell.vue.d.ts +3 -0
- package/lib/components/themes/CThemeManagementToolbar.vue.d.ts +4 -1
- package/lib/composables/presentationHistory.use.d.ts +12 -2
- package/lib/composables/useCanvasStandardFilters.d.ts +17 -2
- package/lib/composables/useFileDisplayHelpers.d.ts +1 -0
- package/lib/composables/useFilterSuggestions.d.ts +5 -1
- package/lib/composables/useMetadataSearch.d.ts +8 -2
- package/lib/composables/useSmartStore.d.ts +25 -0
- package/lib/main.lib.d.ts +8 -1
- package/lib/sdk/api/HighLevelApi.d.ts +7 -4
- package/lib/sdk/api/modules/index.d.ts +0 -1
- package/lib/sdk/api/modules/query.d.ts +145 -1
- package/lib/sdk/api/modules/ui/content.ui.d.ts +22 -1
- package/lib/sdk/api/modules/ui/index.d.ts +3 -0
- package/lib/sdk/api/modules/ui/sharing.ui.d.ts +2 -0
- package/lib/sdk/api/modules/ui/types.ui.d.ts +32 -0
- package/lib/sdk/interfaces.d.ts +16 -0
- package/lib/sdk/main.d.ts +30 -12
- package/lib/sdk/payload.types.d.ts +138 -0
- package/lib/sdk/utils/httpFetch.d.ts +2 -0
- package/lib/types/app.d.ts +2 -1
- package/lib/types/call.d.ts +9 -2
- package/lib/types/canvases.d.ts +2 -0
- package/lib/types/core/MetadataFilter.d.ts +1 -0
- package/lib/types/instanceSettings.types.d.ts +4 -2
- package/lib/types/launchDarkly.types.d.ts +11 -4
- package/lib/types/organizationSettings.types.d.ts +11 -0
- package/lib/types/sfdc.d.ts +6 -1
- package/lib/util/app.util.d.ts +46 -0
- package/lib/util/eval.d.ts +4 -0
- package/lib/util/font.util.d.ts +4 -0
- package/lib/util/handlebars.d.ts +35 -0
- package/lib/util/object.d.ts +1 -0
- package/lib/util/sfdc.util.d.ts +7 -0
- package/lib/util/sfdc.util.spec.d.ts +1 -0
- package/lib/util/smart-store.util.d.ts +53 -0
- package/lib/util/smart-store.util.spec.d.ts +1 -0
- package/package.json +2 -2
- package/types/openapi/models/Account.d.ts +1 -1
- package/types/openapi/models/AccountRequest.d.ts +1 -1
- package/types/openapi/models/CanvasRecommendedFile.d.ts +1 -0
- package/types/openapi/models/DeletedFile.d.ts +1 -0
- package/types/openapi/models/DeletedFolder.d.ts +1 -0
- package/types/openapi/models/FavoriteFile.d.ts +1 -0
- package/types/openapi/models/FavoriteFileRequest.d.ts +1 -0
- package/types/openapi/models/File.d.ts +1 -0
- package/types/openapi/models/FileContentTypeEnum.d.ts +3 -0
- package/types/openapi/models/FileCreate.d.ts +1 -0
- package/types/openapi/models/FileCreateRequest.d.ts +1 -0
- package/types/openapi/models/FilePermission.d.ts +2 -0
- package/types/openapi/models/FilePermissionRequest.d.ts +2 -0
- package/types/openapi/models/FileRetrieve.d.ts +1 -0
- package/types/openapi/models/FileUpdate.d.ts +1 -0
- package/types/openapi/models/FileUpdateRequest.d.ts +1 -0
- package/types/openapi/models/Folder.d.ts +1 -0
- package/types/openapi/models/FolderCreate.d.ts +3 -0
- package/types/openapi/models/FolderFile.d.ts +3 -0
- package/types/openapi/models/FolderRetrieve.d.ts +4 -0
- package/types/openapi/models/FolderUpdate.d.ts +3 -0
- package/types/openapi/models/InstanceMembershipUser.d.ts +1 -0
- package/types/openapi/models/OfflineSyncFolder.d.ts +1 -0
- package/types/openapi/models/PaginatedAppList.d.ts +2 -2
- package/types/openapi/models/PaginatedAuthTokenList.d.ts +2 -2
- package/types/openapi/models/PaginatedCanvasList.d.ts +2 -2
- package/types/openapi/models/PaginatedCollaborationList.d.ts +2 -2
- package/types/openapi/models/PaginatedContentDistributionGroupList.d.ts +2 -2
- package/types/openapi/models/PaginatedContentDistributionGroupMembershipList.d.ts +2 -2
- package/types/openapi/models/PaginatedEnvironmentList.d.ts +2 -2
- package/types/openapi/models/PaginatedEventList.d.ts +2 -2
- package/types/openapi/models/PaginatedFavoriteList.d.ts +2 -2
- package/types/openapi/models/PaginatedFileList.d.ts +2 -2
- package/types/openapi/models/PaginatedFileRevisionList.d.ts +2 -2
- package/types/openapi/models/PaginatedFolderList.d.ts +2 -2
- package/types/openapi/models/PaginatedInstanceAssignmentGroupList.d.ts +2 -2
- package/types/openapi/models/PaginatedInstanceAssignmentGroupMembershipList.d.ts +2 -2
- package/types/openapi/models/PaginatedInstanceList.d.ts +2 -2
- package/types/openapi/models/PaginatedInstanceMembershipList.d.ts +2 -2
- package/types/openapi/models/PaginatedInvitationList.d.ts +2 -2
- package/types/openapi/models/PaginatedMetadataTemplateList.d.ts +2 -2
- package/types/openapi/models/PaginatedOfflineSyncFolderList.d.ts +2 -2
- package/types/openapi/models/PaginatedRegionList.d.ts +2 -2
- package/types/openapi/models/PaginatedRevisionList.d.ts +2 -2
- package/types/openapi/models/PaginatedUserList.d.ts +2 -2
- package/types/openapi/models/PatchedFileUpdateRequest.d.ts +1 -0
- package/types/openapi/models/User.d.ts +5 -1
- package/lib/api/events/events.queries.d.ts +0 -9
- 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2826
|
-
|
|
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, ...
|
|
3231
|
-
const
|
|
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
|
|
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";
|