@peernova/cuneiform-sf 1.0.2 → 1.0.4-beta.8
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/LICENSE +81 -30
- package/README.md +59 -95
- package/lib/adapters/connection-facade.d.ts +458 -0
- package/lib/adapters/connection-facade.js +379 -0
- package/lib/adapters/connection-facade.js.map +1 -0
- package/lib/adapters/errors.d.ts +547 -0
- package/lib/adapters/errors.js +937 -0
- package/lib/adapters/errors.js.map +1 -0
- package/lib/adapters/index.d.ts +33 -0
- package/lib/adapters/index.js +50 -0
- package/lib/adapters/index.js.map +1 -0
- package/lib/adapters/lifecycle.d.ts +119 -0
- package/lib/adapters/lifecycle.js +94 -0
- package/lib/adapters/lifecycle.js.map +1 -0
- package/lib/adapters/rest/cache.d.ts +69 -0
- package/lib/adapters/rest/cache.js +133 -0
- package/lib/adapters/rest/cache.js.map +1 -0
- package/lib/adapters/rest/index.d.ts +11 -0
- package/lib/adapters/rest/index.js +18 -0
- package/lib/adapters/rest/index.js.map +1 -0
- package/lib/adapters/rest/profiling-rest-client.d.ts +137 -0
- package/lib/adapters/rest/profiling-rest-client.js +115 -0
- package/lib/adapters/rest/profiling-rest-client.js.map +1 -0
- package/lib/adapters/rest/rest-api-adapter.d.ts +389 -0
- package/lib/adapters/rest/rest-api-adapter.js +747 -0
- package/lib/adapters/rest/rest-api-adapter.js.map +1 -0
- package/lib/adapters/rest/types.d.ts +34 -0
- package/lib/adapters/rest/types.js +9 -0
- package/lib/adapters/rest/types.js.map +1 -0
- package/lib/adapters/retry.d.ts +91 -0
- package/lib/adapters/retry.js +215 -0
- package/lib/adapters/retry.js.map +1 -0
- package/lib/adapters/soql/cuneiform-query-builder.d.ts +391 -0
- package/lib/adapters/soql/cuneiform-query-builder.js +559 -0
- package/lib/adapters/soql/cuneiform-query-builder.js.map +1 -0
- package/lib/adapters/soql/index.d.ts +13 -0
- package/lib/adapters/soql/index.js +21 -0
- package/lib/adapters/soql/index.js.map +1 -0
- package/lib/adapters/soql/soql-query-adapter.d.ts +141 -0
- package/lib/adapters/soql/soql-query-adapter.js +259 -0
- package/lib/adapters/soql/soql-query-adapter.js.map +1 -0
- package/lib/adapters/soql/types.d.ts +37 -0
- package/lib/adapters/soql/types.js +19 -0
- package/lib/adapters/soql/types.js.map +1 -0
- package/lib/adapters/testing/index.d.ts +37 -0
- package/lib/adapters/testing/index.js +20 -0
- package/lib/adapters/testing/index.js.map +1 -0
- package/lib/adapters/testing/mock-connection.d.ts +77 -0
- package/lib/adapters/testing/mock-connection.js +207 -0
- package/lib/adapters/testing/mock-connection.js.map +1 -0
- package/lib/adapters/testing/mock-logger.d.ts +29 -0
- package/lib/adapters/testing/mock-logger.js +57 -0
- package/lib/adapters/testing/mock-logger.js.map +1 -0
- package/lib/adapters/testing/mock-mcp-adapters.d.ts +32 -0
- package/lib/adapters/testing/mock-mcp-adapters.js +52 -0
- package/lib/adapters/testing/mock-mcp-adapters.js.map +1 -0
- package/lib/adapters/testing/mock-oclif-config.d.ts +22 -0
- package/lib/adapters/testing/mock-oclif-config.js +90 -0
- package/lib/adapters/testing/mock-oclif-config.js.map +1 -0
- package/lib/adapters/testing/mock-rest-adapter.d.ts +26 -0
- package/lib/adapters/testing/mock-rest-adapter.js +243 -0
- package/lib/adapters/testing/mock-rest-adapter.js.map +1 -0
- package/lib/adapters/testing/mock-salesforce-connection.d.ts +40 -0
- package/lib/adapters/testing/mock-salesforce-connection.js +61 -0
- package/lib/adapters/testing/mock-salesforce-connection.js.map +1 -0
- package/lib/adapters/testing/mock-soql-adapter.d.ts +30 -0
- package/lib/adapters/testing/mock-soql-adapter.js +120 -0
- package/lib/adapters/testing/mock-soql-adapter.js.map +1 -0
- package/lib/adapters/testing/mock-tooling-adapter.d.ts +24 -0
- package/lib/adapters/testing/mock-tooling-adapter.js +163 -0
- package/lib/adapters/testing/mock-tooling-adapter.js.map +1 -0
- package/lib/adapters/testing/stub-connection.d.ts +93 -0
- package/lib/adapters/testing/stub-connection.js +97 -0
- package/lib/adapters/testing/stub-connection.js.map +1 -0
- package/lib/adapters/testing/stub-rest-adapter.d.ts +52 -0
- package/lib/adapters/testing/stub-rest-adapter.js +58 -0
- package/lib/adapters/testing/stub-rest-adapter.js.map +1 -0
- package/lib/adapters/testing/stub-soql-adapter.d.ts +56 -0
- package/lib/adapters/testing/stub-soql-adapter.js +50 -0
- package/lib/adapters/testing/stub-soql-adapter.js.map +1 -0
- package/lib/adapters/testing/types.d.ts +71 -0
- package/lib/adapters/testing/types.js +9 -0
- package/lib/adapters/testing/types.js.map +1 -0
- package/lib/adapters/tooling/index.d.ts +10 -0
- package/lib/adapters/tooling/index.js +17 -0
- package/lib/adapters/tooling/index.js.map +1 -0
- package/lib/adapters/tooling/tooling-api-adapter.d.ts +157 -0
- package/lib/adapters/tooling/tooling-api-adapter.js +339 -0
- package/lib/adapters/tooling/tooling-api-adapter.js.map +1 -0
- package/lib/adapters/tooling/types.d.ts +81 -0
- package/lib/adapters/tooling/types.js +9 -0
- package/lib/adapters/tooling/types.js.map +1 -0
- package/lib/adapters/types.d.ts +112 -0
- package/lib/adapters/types.js +169 -0
- package/lib/adapters/types.js.map +1 -0
- package/lib/base/cuneiform-command.d.ts +152 -0
- package/lib/base/cuneiform-command.js +243 -0
- package/lib/base/cuneiform-command.js.map +1 -0
- package/lib/commands/cuneiform/compatibility/check.d.ts +43 -0
- package/lib/commands/cuneiform/compatibility/check.js +114 -0
- package/lib/commands/cuneiform/compatibility/check.js.map +1 -0
- package/lib/commands/cuneiform/definition/create.d.ts +119 -0
- package/lib/commands/cuneiform/definition/create.js +693 -0
- package/lib/commands/cuneiform/definition/create.js.map +1 -0
- package/lib/commands/cuneiform/definition/export.d.ts +57 -0
- package/lib/commands/cuneiform/definition/export.js +133 -0
- package/lib/commands/cuneiform/definition/export.js.map +1 -0
- package/lib/commands/cuneiform/definition/get.d.ts +86 -0
- package/lib/commands/cuneiform/definition/get.js +270 -0
- package/lib/commands/cuneiform/definition/get.js.map +1 -0
- package/lib/commands/cuneiform/definition/import.d.ts +54 -0
- package/lib/commands/cuneiform/definition/import.js +118 -0
- package/lib/commands/cuneiform/definition/import.js.map +1 -0
- package/lib/commands/cuneiform/definition/list.d.ts +110 -0
- package/lib/commands/cuneiform/definition/list.js +344 -0
- package/lib/commands/cuneiform/definition/list.js.map +1 -0
- package/lib/commands/cuneiform/definition/purge.d.ts +105 -0
- package/lib/commands/cuneiform/definition/purge.js +533 -0
- package/lib/commands/cuneiform/definition/purge.js.map +1 -0
- package/lib/commands/cuneiform/definition/update.d.ts +58 -0
- package/lib/commands/cuneiform/definition/update.js +206 -0
- package/lib/commands/cuneiform/definition/update.js.map +1 -0
- package/lib/commands/cuneiform/mcp/serve.d.ts +56 -0
- package/lib/commands/cuneiform/mcp/serve.js +109 -0
- package/lib/commands/cuneiform/mcp/serve.js.map +1 -0
- package/lib/commands/cuneiform/object/describe.d.ts +61 -0
- package/lib/commands/cuneiform/object/describe.js +461 -0
- package/lib/commands/cuneiform/object/describe.js.map +1 -0
- package/lib/commands/cuneiform/object/list.d.ts +111 -0
- package/lib/commands/cuneiform/object/list.js +239 -0
- package/lib/commands/cuneiform/object/list.js.map +1 -0
- package/lib/commands/cuneiform/org/details.d.ts +99 -0
- package/lib/commands/cuneiform/org/details.js +521 -0
- package/lib/commands/cuneiform/org/details.js.map +1 -0
- package/lib/commands/cuneiform/org/reset.d.ts +46 -0
- package/lib/commands/cuneiform/org/reset.js +135 -0
- package/lib/commands/cuneiform/org/reset.js.map +1 -0
- package/lib/commands/cuneiform/profile/request/cancel.d.ts +59 -0
- package/lib/commands/cuneiform/profile/request/cancel.js +202 -0
- package/lib/commands/cuneiform/profile/request/cancel.js.map +1 -0
- package/lib/commands/cuneiform/profile/request/delete.d.ts +59 -0
- package/lib/commands/cuneiform/profile/request/delete.js +223 -0
- package/lib/commands/cuneiform/profile/request/delete.js.map +1 -0
- package/lib/commands/cuneiform/profile/request/list.d.ts +35 -0
- package/lib/commands/cuneiform/profile/request/list.js +102 -0
- package/lib/commands/cuneiform/profile/request/list.js.map +1 -0
- package/lib/commands/cuneiform/profile.d.ts +90 -0
- package/lib/commands/cuneiform/profile.js +322 -0
- package/lib/commands/cuneiform/profile.js.map +1 -0
- package/lib/commands/cuneiform/summary/purge.d.ts +77 -0
- package/lib/commands/cuneiform/summary/purge.js +429 -0
- package/lib/commands/cuneiform/summary/purge.js.map +1 -0
- package/lib/commands/cuneiform/summary/reprofile.d.ts +60 -0
- package/lib/commands/cuneiform/summary/reprofile.js +236 -0
- package/lib/commands/cuneiform/summary/reprofile.js.map +1 -0
- package/lib/commands/cuneiform/summary/stop.d.ts +59 -0
- package/lib/commands/cuneiform/summary/stop.js +234 -0
- package/lib/commands/cuneiform/summary/stop.js.map +1 -0
- package/lib/commands/cuneiform/user/details.d.ts +73 -0
- package/lib/commands/cuneiform/user/details.js +391 -0
- package/lib/commands/cuneiform/user/details.js.map +1 -0
- package/lib/constants/index.d.ts +8 -0
- package/lib/constants/index.js +16 -0
- package/lib/constants/index.js.map +1 -0
- package/lib/constants/namespace-constants.d.ts +91 -0
- package/lib/constants/namespace-constants.js +211 -0
- package/lib/constants/namespace-constants.js.map +1 -0
- package/lib/debug/command-debug-proxy.d.ts +101 -0
- package/lib/debug/command-debug-proxy.js +171 -0
- package/lib/debug/command-debug-proxy.js.map +1 -0
- package/lib/debug/debug-logger.d.ts +85 -0
- package/lib/debug/debug-logger.js +133 -0
- package/lib/debug/debug-logger.js.map +1 -0
- package/lib/debug/index.d.ts +12 -0
- package/lib/debug/index.js +20 -0
- package/lib/debug/index.js.map +1 -0
- package/lib/debug/service-debug-proxy.d.ts +30 -0
- package/lib/debug/service-debug-proxy.js +102 -0
- package/lib/debug/service-debug-proxy.js.map +1 -0
- package/lib/hooks/prerun.d.ts +25 -0
- package/lib/hooks/prerun.js +47 -0
- package/lib/hooks/prerun.js.map +1 -0
- package/lib/mcp/config/mcp-config.d.ts +55 -0
- package/lib/mcp/config/mcp-config.js +51 -0
- package/lib/mcp/config/mcp-config.js.map +1 -0
- package/lib/mcp/config/pagination.d.ts +96 -0
- package/lib/mcp/config/pagination.js +108 -0
- package/lib/mcp/config/pagination.js.map +1 -0
- package/lib/mcp/config/system-prompts.d.ts +18 -0
- package/lib/mcp/config/system-prompts.js +92 -0
- package/lib/mcp/config/system-prompts.js.map +1 -0
- package/lib/mcp/errors.d.ts +23 -0
- package/lib/mcp/errors.js +27 -0
- package/lib/mcp/errors.js.map +1 -0
- package/lib/mcp/schemas/input-schemas.d.ts +327 -0
- package/lib/mcp/schemas/input-schemas.js +302 -0
- package/lib/mcp/schemas/input-schemas.js.map +1 -0
- package/lib/mcp/server.d.ts +40 -0
- package/lib/mcp/server.js +316 -0
- package/lib/mcp/server.js.map +1 -0
- package/lib/mcp/tools/contactpoint-tools.d.ts +14 -0
- package/lib/mcp/tools/contactpoint-tools.js +34 -0
- package/lib/mcp/tools/contactpoint-tools.js.map +1 -0
- package/lib/mcp/tools/definition-io-tools.d.ts +19 -0
- package/lib/mcp/tools/definition-io-tools.js +152 -0
- package/lib/mcp/tools/definition-io-tools.js.map +1 -0
- package/lib/mcp/tools/definition-tools.d.ts +51 -0
- package/lib/mcp/tools/definition-tools.js +199 -0
- package/lib/mcp/tools/definition-tools.js.map +1 -0
- package/lib/mcp/tools/index.d.ts +37 -0
- package/lib/mcp/tools/index.js +88 -0
- package/lib/mcp/tools/index.js.map +1 -0
- package/lib/mcp/tools/object-tools.d.ts +22 -0
- package/lib/mcp/tools/object-tools.js +306 -0
- package/lib/mcp/tools/object-tools.js.map +1 -0
- package/lib/mcp/tools/org-tools.d.ts +14 -0
- package/lib/mcp/tools/org-tools.js +177 -0
- package/lib/mcp/tools/org-tools.js.map +1 -0
- package/lib/mcp/tools/profile-tools.d.ts +59 -0
- package/lib/mcp/tools/profile-tools.js +213 -0
- package/lib/mcp/tools/profile-tools.js.map +1 -0
- package/lib/mcp/tools/summary-tools.d.ts +14 -0
- package/lib/mcp/tools/summary-tools.js +38 -0
- package/lib/mcp/tools/summary-tools.js.map +1 -0
- package/lib/mcp/tools/tool-factory.d.ts +63 -0
- package/lib/mcp/tools/tool-factory.js +146 -0
- package/lib/mcp/tools/tool-factory.js.map +1 -0
- package/lib/mcp/tools/user-tools.d.ts +25 -0
- package/lib/mcp/tools/user-tools.js +167 -0
- package/lib/mcp/tools/user-tools.js.map +1 -0
- package/lib/models/date-literal.d.ts +211 -0
- package/lib/models/date-literal.js +615 -0
- package/lib/models/date-literal.js.map +1 -0
- package/lib/models/object-describe-types.d.ts +173 -0
- package/lib/models/object-describe-types.js +9 -0
- package/lib/models/object-describe-types.js.map +1 -0
- package/lib/models/profile-request-types.d.ts +118 -0
- package/lib/models/profile-request-types.js +23 -0
- package/lib/models/profile-request-types.js.map +1 -0
- package/lib/models/profiling-execution-types.d.ts +154 -0
- package/lib/models/profiling-execution-types.js +14 -0
- package/lib/models/profiling-execution-types.js.map +1 -0
- package/lib/models/service-result.d.ts +114 -0
- package/lib/models/service-result.js +81 -0
- package/lib/models/service-result.js.map +1 -0
- package/lib/models/sfdmu-types.d.ts +53 -0
- package/lib/models/sfdmu-types.js +23 -0
- package/lib/models/sfdmu-types.js.map +1 -0
- package/lib/models/status-types.d.ts +38 -0
- package/lib/models/status-types.js +12 -0
- package/lib/models/status-types.js.map +1 -0
- package/lib/models/summary-bulk-types.d.ts +61 -0
- package/lib/models/summary-bulk-types.js +23 -0
- package/lib/models/summary-bulk-types.js.map +1 -0
- package/lib/models/user-details-types.d.ts +163 -0
- package/lib/models/user-details-types.js +9 -0
- package/lib/models/user-details-types.js.map +1 -0
- package/lib/models/year-range.d.ts +78 -0
- package/lib/models/year-range.js +153 -0
- package/lib/models/year-range.js.map +1 -0
- package/lib/operations/CompatibilityCheckOperation.d.ts +62 -0
- package/lib/operations/CompatibilityCheckOperation.js +102 -0
- package/lib/operations/CompatibilityCheckOperation.js.map +1 -0
- package/lib/operations/DefinitionCreateOperation.d.ts +411 -0
- package/lib/operations/DefinitionCreateOperation.js +1121 -0
- package/lib/operations/DefinitionCreateOperation.js.map +1 -0
- package/lib/operations/DefinitionExportOperation.d.ts +155 -0
- package/lib/operations/DefinitionExportOperation.js +281 -0
- package/lib/operations/DefinitionExportOperation.js.map +1 -0
- package/lib/operations/DefinitionImportOperation.d.ts +144 -0
- package/lib/operations/DefinitionImportOperation.js +357 -0
- package/lib/operations/DefinitionImportOperation.js.map +1 -0
- package/lib/operations/DefinitionListOperation.d.ts +66 -0
- package/lib/operations/DefinitionListOperation.js +108 -0
- package/lib/operations/DefinitionListOperation.js.map +1 -0
- package/lib/operations/DefinitionPurgeOperation.d.ts +199 -0
- package/lib/operations/DefinitionPurgeOperation.js +465 -0
- package/lib/operations/DefinitionPurgeOperation.js.map +1 -0
- package/lib/operations/DefinitionUpdateOperation.d.ts +78 -0
- package/lib/operations/DefinitionUpdateOperation.js +142 -0
- package/lib/operations/DefinitionUpdateOperation.js.map +1 -0
- package/lib/operations/OrgDetailsOperation.d.ts +253 -0
- package/lib/operations/OrgDetailsOperation.js +456 -0
- package/lib/operations/OrgDetailsOperation.js.map +1 -0
- package/lib/operations/OrgResetOperation.d.ts +114 -0
- package/lib/operations/OrgResetOperation.js +209 -0
- package/lib/operations/OrgResetOperation.js.map +1 -0
- package/lib/operations/ProfileOperation.d.ts +187 -0
- package/lib/operations/ProfileOperation.js +373 -0
- package/lib/operations/ProfileOperation.js.map +1 -0
- package/lib/operations/ProfileRequestCancelOperation.d.ts +59 -0
- package/lib/operations/ProfileRequestCancelOperation.js +137 -0
- package/lib/operations/ProfileRequestCancelOperation.js.map +1 -0
- package/lib/operations/ProfileRequestDeleteOperation.d.ts +64 -0
- package/lib/operations/ProfileRequestDeleteOperation.js +134 -0
- package/lib/operations/ProfileRequestDeleteOperation.js.map +1 -0
- package/lib/operations/ProfileRequestListOperation.d.ts +39 -0
- package/lib/operations/ProfileRequestListOperation.js +61 -0
- package/lib/operations/ProfileRequestListOperation.js.map +1 -0
- package/lib/operations/SummaryPurgeOperation.d.ts +134 -0
- package/lib/operations/SummaryPurgeOperation.js +257 -0
- package/lib/operations/SummaryPurgeOperation.js.map +1 -0
- package/lib/operations/SummaryReprofileOperation.d.ts +88 -0
- package/lib/operations/SummaryReprofileOperation.js +174 -0
- package/lib/operations/SummaryReprofileOperation.js.map +1 -0
- package/lib/operations/SummaryStopOperation.d.ts +87 -0
- package/lib/operations/SummaryStopOperation.js +175 -0
- package/lib/operations/SummaryStopOperation.js.map +1 -0
- package/lib/services/BulkExecutionService.d.ts +120 -0
- package/lib/services/BulkExecutionService.js +535 -0
- package/lib/services/BulkExecutionService.js.map +1 -0
- package/lib/services/CompatibilityService.d.ts +81 -0
- package/lib/services/CompatibilityService.js +118 -0
- package/lib/services/CompatibilityService.js.map +1 -0
- package/lib/services/ConfigureMode.d.ts +85 -0
- package/lib/services/ConfigureMode.js +390 -0
- package/lib/services/ConfigureMode.js.map +1 -0
- package/lib/services/ContactPointService.d.ts +111 -0
- package/lib/services/ContactPointService.js +286 -0
- package/lib/services/ContactPointService.js.map +1 -0
- package/lib/services/DataAvailabilityService.d.ts +81 -0
- package/lib/services/DataAvailabilityService.js +128 -0
- package/lib/services/DataAvailabilityService.js.map +1 -0
- package/lib/services/DefinitionFieldGenerationService.d.ts +309 -0
- package/lib/services/DefinitionFieldGenerationService.js +795 -0
- package/lib/services/DefinitionFieldGenerationService.js.map +1 -0
- package/lib/services/DefinitionQueryBuilder.d.ts +59 -0
- package/lib/services/DefinitionQueryBuilder.js +234 -0
- package/lib/services/DefinitionQueryBuilder.js.map +1 -0
- package/lib/services/ObjectDescribeService.d.ts +436 -0
- package/lib/services/ObjectDescribeService.js +869 -0
- package/lib/services/ObjectDescribeService.js.map +1 -0
- package/lib/services/ObjectFilteringService.d.ts +400 -0
- package/lib/services/ObjectFilteringService.js +878 -0
- package/lib/services/ObjectFilteringService.js.map +1 -0
- package/lib/services/ObjectListCommandService.d.ts +429 -0
- package/lib/services/ObjectListCommandService.js +873 -0
- package/lib/services/ObjectListCommandService.js.map +1 -0
- package/lib/services/ObjectListService.d.ts +201 -0
- package/lib/services/ObjectListService.js +345 -0
- package/lib/services/ObjectListService.js.map +1 -0
- package/lib/services/OrgInfoService.d.ts +485 -0
- package/lib/services/OrgInfoService.js +1122 -0
- package/lib/services/OrgInfoService.js.map +1 -0
- package/lib/services/PollingService.d.ts +105 -0
- package/lib/services/PollingService.js +117 -0
- package/lib/services/PollingService.js.map +1 -0
- package/lib/services/ProfileRequestService.d.ts +186 -0
- package/lib/services/ProfileRequestService.js +555 -0
- package/lib/services/ProfileRequestService.js.map +1 -0
- package/lib/services/ProfilingDefinitionService.d.ts +535 -0
- package/lib/services/ProfilingDefinitionService.js +981 -0
- package/lib/services/ProfilingDefinitionService.js.map +1 -0
- package/lib/services/ProfilingExecutionService.d.ts +122 -0
- package/lib/services/ProfilingExecutionService.js +320 -0
- package/lib/services/ProfilingExecutionService.js.map +1 -0
- package/lib/services/ProfilingSummaryService.d.ts +292 -0
- package/lib/services/ProfilingSummaryService.js +685 -0
- package/lib/services/ProfilingSummaryService.js.map +1 -0
- package/lib/services/RecordTypeService.d.ts +129 -0
- package/lib/services/RecordTypeService.js +284 -0
- package/lib/services/RecordTypeService.js.map +1 -0
- package/lib/services/SFDMUService.d.ts +133 -0
- package/lib/services/SFDMUService.js +295 -0
- package/lib/services/SFDMUService.js.map +1 -0
- package/lib/services/TabDetectionService.d.ts +105 -0
- package/lib/services/TabDetectionService.js +206 -0
- package/lib/services/TabDetectionService.js.map +1 -0
- package/lib/services/UnconfigureMode.d.ts +74 -0
- package/lib/services/UnconfigureMode.js +378 -0
- package/lib/services/UnconfigureMode.js.map +1 -0
- package/lib/services/UserConfigurationService.d.ts +155 -0
- package/lib/services/UserConfigurationService.js +573 -0
- package/lib/services/UserConfigurationService.js.map +1 -0
- package/lib/services/UserConfigurationTypes.d.ts +181 -0
- package/lib/services/UserConfigurationTypes.js +14 -0
- package/lib/services/UserConfigurationTypes.js.map +1 -0
- package/lib/services/UserReadinessService.d.ts +330 -0
- package/lib/services/UserReadinessService.js +831 -0
- package/lib/services/UserReadinessService.js.map +1 -0
- package/lib/services/constants.d.ts +53 -0
- package/lib/services/constants.js +71 -0
- package/lib/services/constants.js.map +1 -0
- package/lib/services/namespace-constants.d.ts +1 -0
- package/lib/services/namespace-constants.js +11 -0
- package/lib/services/namespace-constants.js.map +1 -0
- package/lib/services/validation.d.ts +47 -0
- package/lib/services/validation.js +119 -0
- package/lib/services/validation.js.map +1 -0
- package/lib/utils/batch-processor.d.ts +13 -0
- package/lib/utils/batch-processor.js +39 -0
- package/lib/utils/batch-processor.js.map +1 -0
- package/lib/utils/formatting/availability-grid.d.ts +81 -0
- package/lib/utils/formatting/availability-grid.js +94 -0
- package/lib/utils/formatting/availability-grid.js.map +1 -0
- package/lib/utils/formatting/business-process-grid.d.ts +51 -0
- package/lib/utils/formatting/business-process-grid.js +58 -0
- package/lib/utils/formatting/business-process-grid.js.map +1 -0
- package/lib/utils/formatting/command-display.d.ts +154 -0
- package/lib/utils/formatting/command-display.js +154 -0
- package/lib/utils/formatting/command-display.js.map +1 -0
- package/lib/utils/formatting/definition-create-display.d.ts +118 -0
- package/lib/utils/formatting/definition-create-display.js +231 -0
- package/lib/utils/formatting/definition-create-display.js.map +1 -0
- package/lib/utils/formatting/empty-states.d.ts +35 -0
- package/lib/utils/formatting/empty-states.js +70 -0
- package/lib/utils/formatting/empty-states.js.map +1 -0
- package/lib/utils/formatting/errors.d.ts +33 -0
- package/lib/utils/formatting/errors.js +72 -0
- package/lib/utils/formatting/errors.js.map +1 -0
- package/lib/utils/formatting/field-types.d.ts +32 -0
- package/lib/utils/formatting/field-types.js +88 -0
- package/lib/utils/formatting/field-types.js.map +1 -0
- package/lib/utils/formatting/index.d.ts +29 -0
- package/lib/utils/formatting/index.js +28 -0
- package/lib/utils/formatting/index.js.map +1 -0
- package/lib/utils/formatting/indicators.d.ts +113 -0
- package/lib/utils/formatting/indicators.js +161 -0
- package/lib/utils/formatting/indicators.js.map +1 -0
- package/lib/utils/formatting/loading-messages.d.ts +37 -0
- package/lib/utils/formatting/loading-messages.js +50 -0
- package/lib/utils/formatting/loading-messages.js.map +1 -0
- package/lib/utils/formatting/namespace-display.d.ts +31 -0
- package/lib/utils/formatting/namespace-display.js +64 -0
- package/lib/utils/formatting/namespace-display.js.map +1 -0
- package/lib/utils/formatting/numbers.d.ts +73 -0
- package/lib/utils/formatting/numbers.js +187 -0
- package/lib/utils/formatting/numbers.js.map +1 -0
- package/lib/utils/formatting/object-describe-display.d.ts +114 -0
- package/lib/utils/formatting/object-describe-display.js +440 -0
- package/lib/utils/formatting/object-describe-display.js.map +1 -0
- package/lib/utils/formatting/object-list-display.d.ts +213 -0
- package/lib/utils/formatting/object-list-display.js +672 -0
- package/lib/utils/formatting/object-list-display.js.map +1 -0
- package/lib/utils/formatting/org-identity.d.ts +15 -0
- package/lib/utils/formatting/org-identity.js +28 -0
- package/lib/utils/formatting/org-identity.js.map +1 -0
- package/lib/utils/formatting/record-age-grid.d.ts +41 -0
- package/lib/utils/formatting/record-age-grid.js +56 -0
- package/lib/utils/formatting/record-age-grid.js.map +1 -0
- package/lib/utils/formatting/sections.d.ts +108 -0
- package/lib/utils/formatting/sections.js +150 -0
- package/lib/utils/formatting/sections.js.map +1 -0
- package/lib/utils/formatting/tables.d.ts +90 -0
- package/lib/utils/formatting/tables.js +113 -0
- package/lib/utils/formatting/tables.js.map +1 -0
- package/lib/utils/formatting/user-details-display.d.ts +101 -0
- package/lib/utils/formatting/user-details-display.js +425 -0
- package/lib/utils/formatting/user-details-display.js.map +1 -0
- package/lib/utils/pagination/index.d.ts +11 -0
- package/lib/utils/pagination/index.js +18 -0
- package/lib/utils/pagination/index.js.map +1 -0
- package/lib/utils/pagination/keypress-reader.d.ts +20 -0
- package/lib/utils/pagination/keypress-reader.js +63 -0
- package/lib/utils/pagination/keypress-reader.js.map +1 -0
- package/lib/utils/pagination/paginate-output.d.ts +48 -0
- package/lib/utils/pagination/paginate-output.js +136 -0
- package/lib/utils/pagination/paginate-output.js.map +1 -0
- package/messages/compatibility.check.md +71 -0
- package/messages/cuneiform.access.md +138 -0
- package/messages/definition.create.md +511 -0
- package/messages/definition.export.md +84 -0
- package/messages/definition.get.md +147 -0
- package/messages/definition.import.md +65 -0
- package/messages/definition.list.md +264 -0
- package/messages/definition.purge.md +318 -0
- package/messages/definition.update.md +118 -0
- package/messages/mcp.serve.md +66 -0
- package/messages/object.describe.md +201 -0
- package/messages/object.list.md +443 -0
- package/messages/org.details.md +386 -0
- package/messages/org.reset.md +71 -0
- package/messages/profile.md +231 -0
- package/messages/profile.request.cancel.md +143 -0
- package/messages/profile.request.delete.md +139 -0
- package/messages/profile.request.list.md +89 -0
- package/messages/summary.purge.md +218 -0
- package/messages/summary.reprofile.md +150 -0
- package/messages/summary.stop.md +157 -0
- package/messages/user.details.md +501 -0
- package/oclif.lock +2887 -2149
- package/oclif.manifest.json +2813 -31
- package/package.json +94 -19
- package/lib/commands/cuneiform/about.d.ts +0 -13
- package/lib/commands/cuneiform/about.js +0 -26
- package/lib/commands/cuneiform/about.js.map +0 -1
- package/lib/commands/hello/world.d.ts +0 -14
- package/lib/commands/hello/world.js +0 -27
- package/lib/commands/hello/world.js.map +0 -1
- package/lib/index.d.ts +0 -2
- package/lib/index.js +0 -2
- package/lib/index.js.map +0 -1
- package/messages/cuneiform.about.md +0 -19
- package/messages/hello.world.md +0 -29
|
@@ -0,0 +1,555 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2026, PeerNova, Inc. All Rights Reserved.
|
|
3
|
+
* PROPRIETARY AND CONFIDENTIAL. Unauthorized copying, modification,
|
|
4
|
+
* or distribution is strictly prohibited. Use is governed by the
|
|
5
|
+
* Master Subscription Agreement (MSA) between PeerNova, Inc. and the
|
|
6
|
+
* licensee. See LICENSE file in the repo root.
|
|
7
|
+
*/
|
|
8
|
+
import { createSuccessResult, createFailureResult } from '../models/service-result.js';
|
|
9
|
+
import { ServiceErrorCodes } from '../adapters/errors.js';
|
|
10
|
+
import { CuneiformQueryBuilder } from '../adapters/soql/cuneiform-query-builder.js';
|
|
11
|
+
import { CANCELLABLE_STATUSES, DELETABLE_STATUSES } from '../models/profile-request-types.js';
|
|
12
|
+
import { validateSalesforceId, validatePagination } from './validation.js';
|
|
13
|
+
import { PROFILING_REST_BASE } from './constants.js';
|
|
14
|
+
/**
|
|
15
|
+
* Default pagination limit for profile request queries.
|
|
16
|
+
*/
|
|
17
|
+
const DEFAULT_REQUEST_LIMIT = 25;
|
|
18
|
+
/**
|
|
19
|
+
* Maximum pagination limit for profile request queries.
|
|
20
|
+
*/
|
|
21
|
+
const MAX_REQUEST_LIMIT = 200;
|
|
22
|
+
/**
|
|
23
|
+
* SOQL fields selected when querying pnova__Profiling_Request__c.
|
|
24
|
+
*/
|
|
25
|
+
const REQUEST_QUERY_FIELDS = [
|
|
26
|
+
'Id',
|
|
27
|
+
'Name',
|
|
28
|
+
'pnova__Prop_RequestStatus__c',
|
|
29
|
+
'pnova__ProfilingDef__c',
|
|
30
|
+
'pnova__ProfilingDef__r.Name',
|
|
31
|
+
'pnova__PDef_Label__c',
|
|
32
|
+
'CreatedDate',
|
|
33
|
+
'LastModifiedDate',
|
|
34
|
+
'CreatedBy.Name',
|
|
35
|
+
];
|
|
36
|
+
/**
|
|
37
|
+
* Service for managing profiling request records (pnova__Profiling_Request__c).
|
|
38
|
+
*
|
|
39
|
+
* Provides operations to list profiling requests with filtering and pagination,
|
|
40
|
+
* and to cancel queued or in-progress requests. All methods return ServiceResult<T>
|
|
41
|
+
* with duration metadata.
|
|
42
|
+
*
|
|
43
|
+
* @design
|
|
44
|
+
* **Query Pattern**: Uses CuneiformQueryBuilder for type-safe SOQL construction
|
|
45
|
+
* with status filtering and pagination support.
|
|
46
|
+
*
|
|
47
|
+
* @design
|
|
48
|
+
* **Cancel Strategy**: Cancellation updates each request's status to 'Canceled'
|
|
49
|
+
* via the REST adapter. Partial failures are tracked and reported with E4905.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```typescript
|
|
53
|
+
* const service = new ProfileRequestService({ soqlAdapter, restAdapter });
|
|
54
|
+
* const listResult = await service.listRequests({ status: 'Queued', limit: 10 });
|
|
55
|
+
* const cancelResult = await service.cancelRequests({ all: true, dryRun: true });
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export class ProfileRequestService {
|
|
59
|
+
soqlAdapter;
|
|
60
|
+
restAdapter;
|
|
61
|
+
logger;
|
|
62
|
+
constructor(config) {
|
|
63
|
+
this.soqlAdapter = config.soqlAdapter;
|
|
64
|
+
this.restAdapter = config.restAdapter;
|
|
65
|
+
this.logger = config.logger;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Maps a raw Salesforce record to the IProfileRequest domain type.
|
|
69
|
+
*
|
|
70
|
+
* @param record - Raw SOQL query result record
|
|
71
|
+
* @returns Mapped IProfileRequest
|
|
72
|
+
*/
|
|
73
|
+
static mapRecord(record) {
|
|
74
|
+
return {
|
|
75
|
+
id: record.Id,
|
|
76
|
+
name: record.Name,
|
|
77
|
+
status: record.pnova__Prop_RequestStatus__c,
|
|
78
|
+
definitionId: record.pnova__ProfilingDef__c,
|
|
79
|
+
definitionName: record.pnova__ProfilingDef__r.Name,
|
|
80
|
+
objectName: record.pnova__PDef_Label__c,
|
|
81
|
+
createdDate: record.CreatedDate,
|
|
82
|
+
lastModifiedDate: record.LastModifiedDate,
|
|
83
|
+
submittedBy: record.CreatedBy.Name,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Builds a SOQL query for profiling requests with optional status filter and pagination.
|
|
88
|
+
*
|
|
89
|
+
* @param options - Filtering and pagination options
|
|
90
|
+
* @returns SOQL query string
|
|
91
|
+
*/
|
|
92
|
+
static buildListQuery(options) {
|
|
93
|
+
const builder = CuneiformQueryBuilder.create().select(REQUEST_QUERY_FIELDS).from('pnova__Profiling_Request__c');
|
|
94
|
+
// Apply status filter
|
|
95
|
+
if (options?.status) {
|
|
96
|
+
if (Array.isArray(options.status)) {
|
|
97
|
+
if (options.status.length === 1) {
|
|
98
|
+
builder.where('pnova__Prop_RequestStatus__c', '=', options.status[0]);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
builder.andWhereIn('pnova__Prop_RequestStatus__c', options.status);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
builder.where('pnova__Prop_RequestStatus__c', '=', options.status);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Apply pagination
|
|
109
|
+
const limit = options?.limit ?? DEFAULT_REQUEST_LIMIT;
|
|
110
|
+
builder.orderBy('CreatedDate', 'DESC').limit(limit).offset(options?.offset);
|
|
111
|
+
return builder.toSOQL();
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Builds a SOQL query to find cancellable requests, optionally filtered by IDs.
|
|
115
|
+
*
|
|
116
|
+
* @param requestIds - Optional specific IDs to filter by
|
|
117
|
+
* @returns SOQL query string
|
|
118
|
+
*/
|
|
119
|
+
static buildCancellableQuery(requestIds) {
|
|
120
|
+
const builder = CuneiformQueryBuilder.create()
|
|
121
|
+
.select(REQUEST_QUERY_FIELDS)
|
|
122
|
+
.from('pnova__Profiling_Request__c')
|
|
123
|
+
.andWhereIn('pnova__Prop_RequestStatus__c', CANCELLABLE_STATUSES);
|
|
124
|
+
if (requestIds && requestIds.length > 0) {
|
|
125
|
+
builder.andWhereIn('Id', requestIds);
|
|
126
|
+
}
|
|
127
|
+
builder.orderBy('CreatedDate', 'DESC');
|
|
128
|
+
return builder.toSOQL();
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Creates an empty cancel result for error/validation responses.
|
|
132
|
+
*
|
|
133
|
+
* @param dryRun - Whether this was a dry run
|
|
134
|
+
* @returns Empty ProfileRequestCancelResult
|
|
135
|
+
*/
|
|
136
|
+
static emptyCancelResult(dryRun) {
|
|
137
|
+
return {
|
|
138
|
+
cancelled: [],
|
|
139
|
+
failed: [],
|
|
140
|
+
dryRun,
|
|
141
|
+
totalCancellable: 0,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Validates cancel request options for mutual exclusivity and ID format.
|
|
146
|
+
*
|
|
147
|
+
* @param options - The cancel options to validate
|
|
148
|
+
* @param emptyResult - Empty result for failure responses
|
|
149
|
+
* @param startTime - Operation start time for duration tracking
|
|
150
|
+
* @returns Failure ServiceResult if invalid, undefined if valid
|
|
151
|
+
*/
|
|
152
|
+
static validateCancelOptions(options, emptyResult, startTime) {
|
|
153
|
+
if (options.all && options.requestIds && options.requestIds.length > 0) {
|
|
154
|
+
return createFailureResult(emptyResult, ServiceErrorCodes.REQUEST_INVALID_IDS, 'Options "all" and "requestIds" are mutually exclusive. Provide one or the other.', { metadata: { duration: Date.now() - startTime } });
|
|
155
|
+
}
|
|
156
|
+
if (!options.all && (!options.requestIds || options.requestIds.length === 0)) {
|
|
157
|
+
return createFailureResult(emptyResult, ServiceErrorCodes.REQUEST_INVALID_IDS, 'You must provide either "all: true" or a non-empty "requestIds" array.', { metadata: { duration: Date.now() - startTime } });
|
|
158
|
+
}
|
|
159
|
+
if (options.requestIds) {
|
|
160
|
+
for (const id of options.requestIds) {
|
|
161
|
+
const idError = validateSalesforceId(id);
|
|
162
|
+
if (idError) {
|
|
163
|
+
return createFailureResult(emptyResult, ServiceErrorCodes.REQUEST_INVALID_IDS, idError, {
|
|
164
|
+
metadata: { duration: Date.now() - startTime },
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return undefined;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Builds a SOQL query to find deletable requests, optionally filtered by IDs.
|
|
173
|
+
*
|
|
174
|
+
* Deletable requests are those in 'Canceled' or 'Rejected' status.
|
|
175
|
+
* These never produced a summary and are safe to delete.
|
|
176
|
+
*
|
|
177
|
+
* @param requestIds - Optional specific IDs to filter by
|
|
178
|
+
* @returns SOQL query string
|
|
179
|
+
*/
|
|
180
|
+
static buildDeletableQuery(requestIds) {
|
|
181
|
+
const builder = CuneiformQueryBuilder.create()
|
|
182
|
+
.select(REQUEST_QUERY_FIELDS)
|
|
183
|
+
.from('pnova__Profiling_Request__c')
|
|
184
|
+
.andWhereIn('pnova__Prop_RequestStatus__c', DELETABLE_STATUSES);
|
|
185
|
+
if (requestIds && requestIds.length > 0) {
|
|
186
|
+
builder.andWhereIn('Id', requestIds);
|
|
187
|
+
}
|
|
188
|
+
builder.orderBy('CreatedDate', 'DESC');
|
|
189
|
+
return builder.toSOQL();
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Creates an empty delete result for error/validation responses.
|
|
193
|
+
*
|
|
194
|
+
* @param dryRun - Whether this was a dry run
|
|
195
|
+
* @returns Empty ProfileRequestDeleteResult
|
|
196
|
+
*/
|
|
197
|
+
static emptyDeleteResult(dryRun) {
|
|
198
|
+
return {
|
|
199
|
+
deleted: [],
|
|
200
|
+
failed: [],
|
|
201
|
+
dryRun,
|
|
202
|
+
totalDeletable: 0,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Validates delete request options for mutual exclusivity and ID format.
|
|
207
|
+
*
|
|
208
|
+
* @param options - The delete options to validate
|
|
209
|
+
* @param emptyResult - Empty result for failure responses
|
|
210
|
+
* @param startTime - Operation start time for duration tracking
|
|
211
|
+
* @returns Failure ServiceResult if invalid, undefined if valid
|
|
212
|
+
*/
|
|
213
|
+
static validateDeleteOptions(options, emptyResult, startTime) {
|
|
214
|
+
if (options.all && options.requestIds && options.requestIds.length > 0) {
|
|
215
|
+
return createFailureResult(emptyResult, ServiceErrorCodes.REQUEST_INVALID_IDS, 'Options "all" and "requestIds" are mutually exclusive. Provide one or the other.', { metadata: { duration: Date.now() - startTime } });
|
|
216
|
+
}
|
|
217
|
+
if (!options.all && (!options.requestIds || options.requestIds.length === 0)) {
|
|
218
|
+
return createFailureResult(emptyResult, ServiceErrorCodes.REQUEST_INVALID_IDS, 'You must provide either "all: true" or a non-empty "requestIds" array.', { metadata: { duration: Date.now() - startTime } });
|
|
219
|
+
}
|
|
220
|
+
if (options.requestIds) {
|
|
221
|
+
for (const id of options.requestIds) {
|
|
222
|
+
const idError = validateSalesforceId(id);
|
|
223
|
+
if (idError) {
|
|
224
|
+
return createFailureResult(emptyResult, ServiceErrorCodes.REQUEST_INVALID_IDS, idError, {
|
|
225
|
+
metadata: { duration: Date.now() - startTime },
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
return undefined;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* List profiling requests with optional filtering and pagination.
|
|
234
|
+
*
|
|
235
|
+
* Queries pnova__Profiling_Request__c records via SOQL with support for
|
|
236
|
+
* status filtering (single or multiple values) and pagination controls.
|
|
237
|
+
*
|
|
238
|
+
* @param options - Optional filtering and pagination settings
|
|
239
|
+
* @returns ServiceResult containing an array of IProfileRequest
|
|
240
|
+
*/
|
|
241
|
+
async listRequests(options) {
|
|
242
|
+
const startTime = Date.now();
|
|
243
|
+
// Validate pagination
|
|
244
|
+
const paginationError = validatePagination(options?.limit, options?.offset, MAX_REQUEST_LIMIT);
|
|
245
|
+
if (paginationError) {
|
|
246
|
+
return createFailureResult([], ServiceErrorCodes.INVALID_PAGINATION, paginationError, {
|
|
247
|
+
metadata: { duration: Date.now() - startTime },
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
try {
|
|
251
|
+
this.logger?.log('Listing profiling requests');
|
|
252
|
+
const soql = ProfileRequestService.buildListQuery(options);
|
|
253
|
+
const queryResult = await this.soqlAdapter.query(soql);
|
|
254
|
+
if (!queryResult.success) {
|
|
255
|
+
return createFailureResult([], ServiceErrorCodes.REQUEST_LIST_QUERY_FAILED, queryResult.message ?? 'Profile request query failed', { metadata: { duration: Date.now() - startTime } });
|
|
256
|
+
}
|
|
257
|
+
const requests = queryResult.data.records.map((r) => ProfileRequestService.mapRecord(r));
|
|
258
|
+
const duration = Date.now() - startTime;
|
|
259
|
+
this.logger?.log(`Found ${requests.length} profiling requests`);
|
|
260
|
+
return createSuccessResult(requests, {
|
|
261
|
+
message: `Found ${requests.length} profiling requests`,
|
|
262
|
+
metadata: { duration },
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
catch (error) {
|
|
266
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
267
|
+
this.logger?.log(`Profile request list failed: ${errorMessage}`);
|
|
268
|
+
return createFailureResult([], ServiceErrorCodes.REQUEST_LIST_QUERY_FAILED, errorMessage, {
|
|
269
|
+
metadata: { duration: Date.now() - startTime },
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Cancel profiling requests by IDs or all cancellable requests.
|
|
275
|
+
*
|
|
276
|
+
* Supports three modes:
|
|
277
|
+
* 1. `all: true` - Cancel all requests in Queued status
|
|
278
|
+
* 2. `requestIds: [...]` - Cancel specific requests (must be in cancellable status)
|
|
279
|
+
* 3. `dryRun: true` - Preview what would be cancelled without making changes
|
|
280
|
+
*
|
|
281
|
+
* @param options - Cancel options specifying which requests to cancel
|
|
282
|
+
* @returns ServiceResult containing the cancel operation results
|
|
283
|
+
*/
|
|
284
|
+
async cancelRequests(options) {
|
|
285
|
+
const startTime = Date.now();
|
|
286
|
+
const dryRun = options.dryRun ?? false;
|
|
287
|
+
const emptyResult = ProfileRequestService.emptyCancelResult(dryRun);
|
|
288
|
+
// Validate options
|
|
289
|
+
const validationError = ProfileRequestService.validateCancelOptions(options, emptyResult, startTime);
|
|
290
|
+
if (validationError) {
|
|
291
|
+
return validationError;
|
|
292
|
+
}
|
|
293
|
+
try {
|
|
294
|
+
const logPrefix = options.all ? 'all cancellable' : `IDs: ${options.requestIds.join(', ')}`;
|
|
295
|
+
this.logger?.log(`Cancelling profiling requests (${logPrefix})`);
|
|
296
|
+
// Query for cancellable requests
|
|
297
|
+
const soql = ProfileRequestService.buildCancellableQuery(options.requestIds);
|
|
298
|
+
const queryResult = await this.soqlAdapter.query(soql);
|
|
299
|
+
if (!queryResult.success) {
|
|
300
|
+
return createFailureResult(emptyResult, ServiceErrorCodes.REQUEST_CANCEL_FAILED, queryResult.message ?? 'Failed to query cancellable requests', { metadata: { duration: Date.now() - startTime } });
|
|
301
|
+
}
|
|
302
|
+
const cancellableRecords = queryResult.data.records;
|
|
303
|
+
if (cancellableRecords.length === 0) {
|
|
304
|
+
return createFailureResult(emptyResult, ServiceErrorCodes.REQUEST_NO_CANCELLABLE, 'No cancellable requests found matching the specified criteria.', { metadata: { duration: Date.now() - startTime } });
|
|
305
|
+
}
|
|
306
|
+
const mappedRequests = cancellableRecords.map((r) => ProfileRequestService.mapRecord(r));
|
|
307
|
+
// Dry run: return what would be cancelled without updating
|
|
308
|
+
if (dryRun) {
|
|
309
|
+
this.logger?.log(`Dry run: ${mappedRequests.length} requests would be cancelled`);
|
|
310
|
+
return createSuccessResult({
|
|
311
|
+
cancelled: mappedRequests,
|
|
312
|
+
failed: [],
|
|
313
|
+
dryRun: true,
|
|
314
|
+
totalCancellable: mappedRequests.length,
|
|
315
|
+
}, {
|
|
316
|
+
message: `Dry run: ${mappedRequests.length} requests would be cancelled`,
|
|
317
|
+
metadata: { duration: Date.now() - startTime },
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
// Execute cancellations and build result
|
|
321
|
+
const { cancelled, failed } = await this.executeCancellations(mappedRequests);
|
|
322
|
+
return this.buildCancelResult(cancelled, failed, mappedRequests.length, Date.now() - startTime);
|
|
323
|
+
}
|
|
324
|
+
catch (error) {
|
|
325
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
326
|
+
this.logger?.log(`Profile request cancel failed: ${errorMessage}`);
|
|
327
|
+
return createFailureResult(emptyResult, ServiceErrorCodes.REQUEST_CANCEL_FAILED, errorMessage, {
|
|
328
|
+
metadata: { duration: Date.now() - startTime },
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Delete profiling requests by IDs or all deletable requests.
|
|
334
|
+
*
|
|
335
|
+
* Supports three modes:
|
|
336
|
+
* 1. `all: true` - Delete all requests in Canceled/Rejected status
|
|
337
|
+
* 2. `requestIds: [...]` - Delete specific requests (must be in Canceled/Rejected status)
|
|
338
|
+
* 3. `dryRun: true` - Preview what would be deleted without making changes
|
|
339
|
+
*
|
|
340
|
+
* Uses the ISV bulk REST endpoint (`DELETE /v1/profiling/requests?ids=...`) for
|
|
341
|
+
* the actual deletion. IDs are passed via query params because jsforce strips
|
|
342
|
+
* the body from DELETE requests (RFC 7231 defines no semantics for DELETE payloads).
|
|
343
|
+
*
|
|
344
|
+
* This is an irreversible operation.
|
|
345
|
+
*
|
|
346
|
+
* @param options - Delete options specifying which requests to delete
|
|
347
|
+
* @returns ServiceResult containing the delete operation results
|
|
348
|
+
*/
|
|
349
|
+
async deleteRequests(options) {
|
|
350
|
+
const startTime = Date.now();
|
|
351
|
+
const dryRun = options.dryRun ?? false;
|
|
352
|
+
const emptyResult = ProfileRequestService.emptyDeleteResult(dryRun);
|
|
353
|
+
// Validate options
|
|
354
|
+
const validationError = ProfileRequestService.validateDeleteOptions(options, emptyResult, startTime);
|
|
355
|
+
if (validationError) {
|
|
356
|
+
return validationError;
|
|
357
|
+
}
|
|
358
|
+
try {
|
|
359
|
+
const logPrefix = options.all ? 'all deletable' : `IDs: ${options.requestIds.join(', ')}`;
|
|
360
|
+
this.logger?.log(`Deleting profiling requests (${logPrefix})`);
|
|
361
|
+
// Query for deletable requests
|
|
362
|
+
const soql = ProfileRequestService.buildDeletableQuery(options.requestIds);
|
|
363
|
+
const queryResult = await this.soqlAdapter.query(soql);
|
|
364
|
+
if (!queryResult.success) {
|
|
365
|
+
return createFailureResult(emptyResult, ServiceErrorCodes.REQUEST_DELETE_FAILED, queryResult.message ?? 'Failed to query deletable requests', { metadata: { duration: Date.now() - startTime } });
|
|
366
|
+
}
|
|
367
|
+
const deletableRecords = queryResult.data.records;
|
|
368
|
+
const mappedRequests = deletableRecords.map((r) => ProfileRequestService.mapRecord(r));
|
|
369
|
+
// Compute which requested IDs were filtered out (not in a deletable state)
|
|
370
|
+
const nonDeletableFailed = [];
|
|
371
|
+
if (options.requestIds && options.requestIds.length > 0) {
|
|
372
|
+
const returnedIds = new Set(mappedRequests.map((r) => r.id));
|
|
373
|
+
for (const id of options.requestIds) {
|
|
374
|
+
if (!returnedIds.has(id)) {
|
|
375
|
+
nonDeletableFailed.push({
|
|
376
|
+
id,
|
|
377
|
+
error: 'Request is not in a deletable state (must be Canceled or Rejected)',
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
if (deletableRecords.length === 0) {
|
|
383
|
+
return createFailureResult({ ...emptyResult, failed: nonDeletableFailed }, ServiceErrorCodes.REQUEST_NO_DELETABLE, 'No deletable requests found matching the specified criteria.', { metadata: { duration: Date.now() - startTime } });
|
|
384
|
+
}
|
|
385
|
+
// Dry run: return what would be deleted without calling ISV endpoint
|
|
386
|
+
if (dryRun) {
|
|
387
|
+
this.logger?.log(`Dry run: ${mappedRequests.length} requests would be deleted`);
|
|
388
|
+
return createSuccessResult({
|
|
389
|
+
deleted: mappedRequests,
|
|
390
|
+
failed: nonDeletableFailed,
|
|
391
|
+
dryRun: true,
|
|
392
|
+
totalDeletable: mappedRequests.length,
|
|
393
|
+
}, {
|
|
394
|
+
message: `Dry run: ${mappedRequests.length} requests would be deleted`,
|
|
395
|
+
metadata: { duration: Date.now() - startTime },
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
// Execute deletion via ISV bulk REST endpoint
|
|
399
|
+
const requestIds = mappedRequests.map((r) => r.id);
|
|
400
|
+
const deleteResult = await this.executeIsvDelete(requestIds);
|
|
401
|
+
if (!deleteResult.success) {
|
|
402
|
+
return createFailureResult(emptyResult, ServiceErrorCodes.REQUEST_DELETE_FAILED, deleteResult.message ?? 'Delete operation failed', { metadata: { duration: Date.now() - startTime } });
|
|
403
|
+
}
|
|
404
|
+
// Map ISV response to rich result with IProfileRequest details
|
|
405
|
+
return this.buildDeleteResult(deleteResult.data, mappedRequests, Date.now() - startTime, nonDeletableFailed);
|
|
406
|
+
}
|
|
407
|
+
catch (error) {
|
|
408
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
409
|
+
this.logger?.log(`Profile request delete failed: ${errorMessage}`);
|
|
410
|
+
return createFailureResult(emptyResult, ServiceErrorCodes.REQUEST_DELETE_FAILED, errorMessage, {
|
|
411
|
+
metadata: { duration: Date.now() - startTime },
|
|
412
|
+
});
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* Executes cancellation via the Cuneiform REST API cancel-requests action.
|
|
417
|
+
* Direct DML is blocked by a trigger guard on Profiling_Request__c;
|
|
418
|
+
* cancellation must go through GlobalProfilingService.cancelProfilingRequests().
|
|
419
|
+
*
|
|
420
|
+
* @param requests - The mapped requests to cancel
|
|
421
|
+
* @returns Object with cancelled and failed arrays
|
|
422
|
+
*/
|
|
423
|
+
async executeCancellations(requests) {
|
|
424
|
+
const requestIds = requests.map((r) => r.id);
|
|
425
|
+
const restResult = await this.restAdapter.request({
|
|
426
|
+
url: `${PROFILING_REST_BASE}/cancel-requests`,
|
|
427
|
+
method: 'POST',
|
|
428
|
+
body: { requestsToCancel: requestIds },
|
|
429
|
+
});
|
|
430
|
+
if (!restResult.success) {
|
|
431
|
+
return {
|
|
432
|
+
cancelled: [],
|
|
433
|
+
failed: requests.map((r) => ({ id: r.id, error: restResult.message ?? 'Cancel REST call failed' })),
|
|
434
|
+
};
|
|
435
|
+
}
|
|
436
|
+
const response = restResult.data;
|
|
437
|
+
if (!response.success) {
|
|
438
|
+
const errorMsg = response.errors?.join('; ') ?? 'Cancel operation failed';
|
|
439
|
+
return {
|
|
440
|
+
cancelled: [],
|
|
441
|
+
failed: requests.map((r) => ({ id: r.id, error: errorMsg })),
|
|
442
|
+
};
|
|
443
|
+
}
|
|
444
|
+
// All requests cancelled successfully via the service
|
|
445
|
+
return { cancelled: requests, failed: [] };
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* Builds the final cancel result based on update outcomes.
|
|
449
|
+
*
|
|
450
|
+
* @param cancelled - Successfully cancelled requests
|
|
451
|
+
* @param failed - Requests that failed to cancel
|
|
452
|
+
* @param totalCancellable - Total number of cancellable requests found
|
|
453
|
+
* @param duration - Operation duration in milliseconds
|
|
454
|
+
* @returns ServiceResult with appropriate error code for partial/total failure
|
|
455
|
+
*/
|
|
456
|
+
buildCancelResult(cancelled, failed, totalCancellable, duration) {
|
|
457
|
+
const resultData = {
|
|
458
|
+
cancelled,
|
|
459
|
+
failed,
|
|
460
|
+
dryRun: false,
|
|
461
|
+
totalCancellable,
|
|
462
|
+
};
|
|
463
|
+
if (cancelled.length === 0) {
|
|
464
|
+
this.logger?.log(`Cancel failed: all ${failed.length} updates failed`);
|
|
465
|
+
return createFailureResult(resultData, ServiceErrorCodes.REQUEST_CANCEL_FAILED, `All ${failed.length} cancel operations failed`, { metadata: { duration } });
|
|
466
|
+
}
|
|
467
|
+
if (failed.length > 0) {
|
|
468
|
+
this.logger?.log(`Cancel partial: ${cancelled.length} succeeded, ${failed.length} failed`);
|
|
469
|
+
return createFailureResult(resultData, ServiceErrorCodes.REQUEST_CANCEL_PARTIAL_FAILURE, `${cancelled.length} of ${totalCancellable} requests cancelled; ${failed.length} failed`, { metadata: { duration } });
|
|
470
|
+
}
|
|
471
|
+
this.logger?.log(`Cancelled ${cancelled.length} profiling requests`);
|
|
472
|
+
return createSuccessResult(resultData, {
|
|
473
|
+
message: `Cancelled ${cancelled.length} profiling requests`,
|
|
474
|
+
metadata: { duration },
|
|
475
|
+
});
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* Calls the ISV REST endpoint to delete profiling requests in bulk.
|
|
479
|
+
*
|
|
480
|
+
* IDs are passed via query params instead of request body because RFC 7231
|
|
481
|
+
* defines no semantics for DELETE payloads, and jsforce's transport layer
|
|
482
|
+
* strips the body for DELETE requests — causing the call to hang indefinitely.
|
|
483
|
+
*
|
|
484
|
+
* @param requestIds - Array of request IDs to delete (max 200, ISV backend limit)
|
|
485
|
+
* @returns ServiceResult containing the raw ISV API response
|
|
486
|
+
*/
|
|
487
|
+
async executeIsvDelete(requestIds) {
|
|
488
|
+
return this.restAdapter.request({
|
|
489
|
+
url: `${PROFILING_REST_BASE}/requests?ids=${encodeURIComponent(requestIds.join(','))}`,
|
|
490
|
+
method: 'DELETE',
|
|
491
|
+
});
|
|
492
|
+
}
|
|
493
|
+
/**
|
|
494
|
+
* Builds the final delete result by correlating ISV API response items
|
|
495
|
+
* with the queried IProfileRequest objects.
|
|
496
|
+
*
|
|
497
|
+
* @param apiResponse - Raw ISV API response
|
|
498
|
+
* @param queriedRequests - Full IProfileRequest objects from SOQL
|
|
499
|
+
* @param duration - Operation duration in milliseconds
|
|
500
|
+
* @returns ServiceResult with rich delete result
|
|
501
|
+
*/
|
|
502
|
+
buildDeleteResult(apiResponse, queriedRequests, duration, nonDeletableFailed = []) {
|
|
503
|
+
const emptyResult = ProfileRequestService.emptyDeleteResult(false);
|
|
504
|
+
// Handle top-level API error
|
|
505
|
+
if (!apiResponse.success && apiResponse.errors) {
|
|
506
|
+
const errorMsg = apiResponse.errors.join('; ');
|
|
507
|
+
return createFailureResult(emptyResult, ServiceErrorCodes.REQUEST_DELETE_FAILED, errorMsg, {
|
|
508
|
+
metadata: { duration },
|
|
509
|
+
});
|
|
510
|
+
}
|
|
511
|
+
// Handle null results (defensive)
|
|
512
|
+
if (!apiResponse.results) {
|
|
513
|
+
return createFailureResult(emptyResult, ServiceErrorCodes.REQUEST_DELETE_FAILED, 'Delete endpoint returned no results', { metadata: { duration } });
|
|
514
|
+
}
|
|
515
|
+
// Build ID-to-request lookup for rich result mapping
|
|
516
|
+
const requestMap = new Map(queriedRequests.map((r) => [r.id, r]));
|
|
517
|
+
const deleted = [];
|
|
518
|
+
const failed = [...nonDeletableFailed];
|
|
519
|
+
for (const item of apiResponse.results) {
|
|
520
|
+
if (item.success) {
|
|
521
|
+
const request = requestMap.get(item.id);
|
|
522
|
+
if (request) {
|
|
523
|
+
deleted.push(request);
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
else {
|
|
527
|
+
failed.push({
|
|
528
|
+
id: item.id,
|
|
529
|
+
error: item.message ?? 'Delete failed',
|
|
530
|
+
});
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
const totalDeletable = queriedRequests.length;
|
|
534
|
+
const resultData = {
|
|
535
|
+
deleted,
|
|
536
|
+
failed,
|
|
537
|
+
dryRun: false,
|
|
538
|
+
totalDeletable,
|
|
539
|
+
};
|
|
540
|
+
if (deleted.length === 0) {
|
|
541
|
+
this.logger?.log(`Delete failed: all ${failed.length} operations failed`);
|
|
542
|
+
return createFailureResult(resultData, ServiceErrorCodes.REQUEST_DELETE_FAILED, `All ${failed.length} delete operations failed`, { metadata: { duration } });
|
|
543
|
+
}
|
|
544
|
+
if (failed.length > 0) {
|
|
545
|
+
this.logger?.log(`Delete partial: ${deleted.length} succeeded, ${failed.length} failed`);
|
|
546
|
+
return createFailureResult(resultData, ServiceErrorCodes.REQUEST_DELETE_PARTIAL_FAILURE, `${deleted.length} of ${totalDeletable} requests deleted; ${failed.length} failed`, { metadata: { duration } });
|
|
547
|
+
}
|
|
548
|
+
this.logger?.log(`Deleted ${deleted.length} profiling requests`);
|
|
549
|
+
return createSuccessResult(resultData, {
|
|
550
|
+
message: `Deleted ${deleted.length} profiling requests`,
|
|
551
|
+
metadata: { duration },
|
|
552
|
+
});
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
//# sourceMappingURL=ProfileRequestService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProfileRequestService.js","sourceRoot":"","sources":["../../src/services/ProfileRequestService.ts"],"names":[],"mappings":"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"}
|