@pitcher/js-api 1.26.0-beta.9 → 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 +6 -0
- package/js-api.esm.js +775 -48
- 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 +63 -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 +361 -13
- package/lib/apps/canvas-builder/composables/useCanvasBlocks.d.ts +60 -0
- package/lib/apps/canvas-builder/composables/useCanvasCompletionWizard.d.ts +1 -1
- package/lib/apps/canvas-builder/composables/useCanvasHistory.d.ts +60 -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 +24 -0
- 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 +24 -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/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 +77 -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/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 +6 -4
- package/lib/sdk/api/modules/index.d.ts +0 -1
- package/lib/sdk/api/modules/query.d.ts +120 -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 +27 -12
- package/lib/sdk/payload.types.d.ts +116 -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 +1 -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/CanvasRecommendedFile.d.ts +1 -0
- package/types/openapi/models/DeletedFile.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/FolderFile.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 +1 -0
- 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,16 @@ 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
|
+
}
|
|
2614
3212
|
function crmSmartDeleteObjects(payload) {
|
|
2615
3213
|
if (!payload || !payload.objects || !Array.isArray(payload.objects)) {
|
|
2616
3214
|
return Promise.reject(new Error("Payload must contain an array of objects"));
|
|
@@ -2639,7 +3237,75 @@ function crmSmartDeleteObjects(payload) {
|
|
|
2639
3237
|
}
|
|
2640
3238
|
}
|
|
2641
3239
|
}
|
|
2642
|
-
|
|
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);
|
|
2643
3309
|
}
|
|
2644
3310
|
|
|
2645
3311
|
function getFolders(payload) {
|
|
@@ -2733,18 +3399,22 @@ const modules = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
|
|
|
2733
3399
|
assignCanvasTheme,
|
|
2734
3400
|
close: close$2,
|
|
2735
3401
|
createCanvas: createCanvas$1,
|
|
2736
|
-
createEvent,
|
|
2737
3402
|
createFavorite,
|
|
2738
3403
|
createFile,
|
|
2739
3404
|
createFolder,
|
|
3405
|
+
crmCreate,
|
|
3406
|
+
crmDescribe,
|
|
3407
|
+
crmLayout,
|
|
2740
3408
|
crmQuery,
|
|
3409
|
+
crmQueryAdaptive,
|
|
2741
3410
|
crmSmartDeleteObjects,
|
|
3411
|
+
crmSmartObjectLayout,
|
|
2742
3412
|
crmSmartObjectMetadata,
|
|
2743
3413
|
crmSmartObjectValidationRules,
|
|
2744
3414
|
crmSmartQuery,
|
|
2745
3415
|
crmSmartUpsertObjects,
|
|
3416
|
+
crmUpsert,
|
|
2746
3417
|
deleteCanvas,
|
|
2747
|
-
deleteEvent,
|
|
2748
3418
|
deleteFavorite,
|
|
2749
3419
|
deleteFile,
|
|
2750
3420
|
deleteFolder,
|
|
@@ -2758,7 +3428,6 @@ const modules = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
|
|
|
2758
3428
|
getCanvases: getCanvases$1,
|
|
2759
3429
|
getCoreFolders,
|
|
2760
3430
|
getEnv: getEnv$2,
|
|
2761
|
-
getEvents,
|
|
2762
3431
|
getFavorites,
|
|
2763
3432
|
getFile: getFile$2,
|
|
2764
3433
|
getFileRevisionData,
|
|
@@ -2795,7 +3464,6 @@ const modules = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
|
|
|
2795
3464
|
unassignCanvasTheme,
|
|
2796
3465
|
updateCanvas: updateCanvas$2,
|
|
2797
3466
|
updateCanvasIndicators,
|
|
2798
|
-
updateEvent,
|
|
2799
3467
|
updateFile,
|
|
2800
3468
|
updateFolder,
|
|
2801
3469
|
updateMyUser
|
|
@@ -2841,21 +3509,17 @@ function unsafeStringify(arr, offset = 0) {
|
|
|
2841
3509
|
byteToHex[arr[offset + 15]]).toLowerCase();
|
|
2842
3510
|
}
|
|
2843
3511
|
|
|
2844
|
-
let getRandomValues;
|
|
2845
3512
|
const rnds8 = new Uint8Array(16);
|
|
2846
3513
|
function rng() {
|
|
2847
|
-
|
|
2848
|
-
if (typeof crypto === 'undefined' || !crypto.getRandomValues) {
|
|
2849
|
-
throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');
|
|
2850
|
-
}
|
|
2851
|
-
getRandomValues = crypto.getRandomValues.bind(crypto);
|
|
2852
|
-
}
|
|
2853
|
-
return getRandomValues(rnds8);
|
|
3514
|
+
return crypto.getRandomValues(rnds8);
|
|
2854
3515
|
}
|
|
2855
3516
|
|
|
2856
|
-
|
|
2857
|
-
|
|
2858
|
-
|
|
3517
|
+
function v4(options, buf, offset) {
|
|
3518
|
+
if (crypto.randomUUID) {
|
|
3519
|
+
return crypto.randomUUID();
|
|
3520
|
+
}
|
|
3521
|
+
return _v4(options);
|
|
3522
|
+
}
|
|
2859
3523
|
function _v4(options, buf, offset) {
|
|
2860
3524
|
options = options || {};
|
|
2861
3525
|
const rnds = options.random ?? options.rng?.() ?? rng();
|
|
@@ -2866,12 +3530,6 @@ function _v4(options, buf, offset) {
|
|
|
2866
3530
|
rnds[8] = (rnds[8] & 0x3f) | 0x80;
|
|
2867
3531
|
return unsafeStringify(rnds);
|
|
2868
3532
|
}
|
|
2869
|
-
function v4(options, buf, offset) {
|
|
2870
|
-
if (native.randomUUID && true && !options) {
|
|
2871
|
-
return native.randomUUID();
|
|
2872
|
-
}
|
|
2873
|
-
return _v4(options);
|
|
2874
|
-
}
|
|
2875
3533
|
|
|
2876
3534
|
const PITCHER_EVENT = "PITCHER_EVENT";
|
|
2877
3535
|
var PitcherMessageType = /* @__PURE__ */ ((PitcherMessageType2) => {
|
|
@@ -2916,6 +3574,7 @@ var PitcherEventName = /* @__PURE__ */ ((PitcherEventName2) => {
|
|
|
2916
3574
|
PitcherEventName2["ITEM_SHAREBOX_ADD_REQUESTED"] = "item_sharebox_add_requested";
|
|
2917
3575
|
PitcherEventName2["ITEM_SHAREBOX_ADD_COMPLETED"] = "item_sharebox_add_completed";
|
|
2918
3576
|
PitcherEventName2["SYNC_BADGE_VALUE_REPORTED"] = "sync_badge_value_reported";
|
|
3577
|
+
PitcherEventName2["SYNC_BOX_RESOLVE_ERROR_TAPPED"] = "sync_box_resolve_error_tapped";
|
|
2919
3578
|
PitcherEventName2["PEER_CONNECTIVITY_EVENT"] = "peer_connectivity_event";
|
|
2920
3579
|
return PitcherEventName2;
|
|
2921
3580
|
})(PitcherEventName || {});
|
|
@@ -2950,6 +3609,8 @@ const defaultSkipKeys = [
|
|
|
2950
3609
|
"id__in",
|
|
2951
3610
|
"tags__in",
|
|
2952
3611
|
"tags__not_in",
|
|
3612
|
+
"template__id",
|
|
3613
|
+
"template__id__in",
|
|
2953
3614
|
"modified_at__gtr",
|
|
2954
3615
|
"created_at__gtr",
|
|
2955
3616
|
"end_at__lt",
|
|
@@ -3191,6 +3852,17 @@ function createHttpClient(origin, token) {
|
|
|
3191
3852
|
body: JSON.stringify(body)
|
|
3192
3853
|
});
|
|
3193
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;
|
|
3194
3866
|
}
|
|
3195
3867
|
};
|
|
3196
3868
|
}
|
|
@@ -3259,8 +3931,16 @@ const onlineRestApiHandlers = {
|
|
|
3259
3931
|
},
|
|
3260
3932
|
update_canvas: async (params) => {
|
|
3261
3933
|
check();
|
|
3262
|
-
const { id, ...
|
|
3263
|
-
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 });
|
|
3264
3944
|
return res;
|
|
3265
3945
|
},
|
|
3266
3946
|
delete_canvas: async (params) => {
|
|
@@ -3332,6 +4012,18 @@ function getTopPitcherWindow(current = window) {
|
|
|
3332
4012
|
}
|
|
3333
4013
|
|
|
3334
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
|
+
];
|
|
3335
4027
|
function updateOnlineHandlersEnv(env) {
|
|
3336
4028
|
env && setEnv(env);
|
|
3337
4029
|
}
|
|
@@ -3397,7 +4089,8 @@ class LowLevelApi extends EventEmitter {
|
|
|
3397
4089
|
throw new Error("unsupported response status");
|
|
3398
4090
|
}
|
|
3399
4091
|
};
|
|
3400
|
-
const
|
|
4092
|
+
const shouldSkipSnakeCase = RAW_PAYLOAD_METHODS.includes(type);
|
|
4093
|
+
const payload = shouldSkipSnakeCase ? cloneDeep(body) : cloneDeep(snakeCaseKeys(body));
|
|
3401
4094
|
this.callbacks[id] = {
|
|
3402
4095
|
dispatched_at: Date.now(),
|
|
3403
4096
|
type,
|
|
@@ -3610,7 +4303,10 @@ const UI_API_METHOD_TYPES = {
|
|
|
3610
4303
|
UI_APP_LOADED: "ui_app_loaded",
|
|
3611
4304
|
UI_APP_RESIZE: "ui_app_resize",
|
|
3612
4305
|
UI_CLOSE_CANVAS_SECTION_EXECUTION: "ui_close_canvas_section_execution",
|
|
3613
|
-
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"
|
|
3614
4310
|
};
|
|
3615
4311
|
const UI_MESSAGE_TYPES = {
|
|
3616
4312
|
UI_MEETING_CANCELED: "ui_meeting_canceled",
|
|
@@ -3662,10 +4358,25 @@ async function selectAgendaContent$1(payload = {}) {
|
|
|
3662
4358
|
const response = await pr.send(window.parent, UI_API_METHOD_TYPES.UI_SELECT_AGENDA_CONTENT, payload);
|
|
3663
4359
|
return response.data;
|
|
3664
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
|
+
}
|
|
3665
4374
|
|
|
3666
4375
|
const contentUi = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
|
|
3667
4376
|
__proto__: null,
|
|
4377
|
+
closeGlobalPopup,
|
|
3668
4378
|
open: open$1,
|
|
4379
|
+
openGlobalPopup,
|
|
3669
4380
|
preselectSfdcMeetingId,
|
|
3670
4381
|
selectAgendaContent: selectAgendaContent$1,
|
|
3671
4382
|
selectCollectionContent: selectCollectionContent$1,
|
|
@@ -3817,6 +4528,21 @@ const piaUi = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
|
|
|
3817
4528
|
promptPia
|
|
3818
4529
|
}, Symbol.toStringTag, { value: 'Module' }));
|
|
3819
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
|
+
|
|
3820
4546
|
async function onNative(type, handler) {
|
|
3821
4547
|
const messageListener = (event) => {
|
|
3822
4548
|
if (event.data.type === type) {
|
|
@@ -3870,7 +4596,8 @@ const ui = {
|
|
|
3870
4596
|
...appErrorsUi,
|
|
3871
4597
|
...canvasUi,
|
|
3872
4598
|
...postCallUi,
|
|
3873
|
-
...piaUi
|
|
4599
|
+
...piaUi,
|
|
4600
|
+
...sharingUi
|
|
3874
4601
|
};
|
|
3875
4602
|
|
|
3876
4603
|
const ADMIN_MESSAGE = "ADMIN_MESSAGE";
|