@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,573 @@
|
|
|
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 { CuneiformQueryBuilder } from '../adapters/soql/cuneiform-query-builder.js';
|
|
9
|
+
import { createSuccessResult, createFailureResult } from '../models/service-result.js';
|
|
10
|
+
import { ServiceErrorCodes } from '../adapters/errors.js';
|
|
11
|
+
import { CUNEIFORM_NAMESPACE, CUNEIFORM_NAMESPACE_PREFIX } from './namespace-constants.js';
|
|
12
|
+
import { validateRequiredString, validateNamespace } from './validation.js';
|
|
13
|
+
import { ConfigureMode } from './ConfigureMode.js';
|
|
14
|
+
import { UnconfigureMode } from './UnconfigureMode.js';
|
|
15
|
+
// Re-export all public types and constants so consumers don't need to change imports
|
|
16
|
+
export { CONFIGURABLE_PERMISSION_SETS } from './UserConfigurationTypes.js';
|
|
17
|
+
/**
|
|
18
|
+
* Service for checking and updating user-level Cuneiform configuration.
|
|
19
|
+
*
|
|
20
|
+
* Provides methods to query current configuration profiles and trigger
|
|
21
|
+
* CMT updates via the ISV REST endpoint. Permission set assignment is
|
|
22
|
+
* handled via REST sObject insert.
|
|
23
|
+
*
|
|
24
|
+
* Configure and unconfigure workflows are delegated to {@link ConfigureMode}
|
|
25
|
+
* and {@link UnconfigureMode} respectively.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```typescript
|
|
29
|
+
* const service = new UserConfigurationService({
|
|
30
|
+
* soqlAdapter,
|
|
31
|
+
* restApiAdapter,
|
|
32
|
+
* });
|
|
33
|
+
*
|
|
34
|
+
* // Check current config
|
|
35
|
+
* const config = await service.getCurrentConfig(userId);
|
|
36
|
+
* if (config.success && !config.data.apiOnlyProfilingEnabled) {
|
|
37
|
+
* // Enable API-only profiling
|
|
38
|
+
* const result = await service.enableApiOnlyProfiling('Production');
|
|
39
|
+
* if (result.success && result.data.jobId) {
|
|
40
|
+
* // Check deployment status
|
|
41
|
+
* const status = await service.getDeploymentStatus(result.data.jobId);
|
|
42
|
+
* }
|
|
43
|
+
* }
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export class UserConfigurationService {
|
|
47
|
+
soqlAdapter;
|
|
48
|
+
restApiAdapter;
|
|
49
|
+
userReadinessService;
|
|
50
|
+
logger;
|
|
51
|
+
/** Configure mode handler (lazy-initialized when userReadinessService is available) */
|
|
52
|
+
configureMode;
|
|
53
|
+
/** Unconfigure mode handler (lazy-initialized when userReadinessService is available) */
|
|
54
|
+
unconfigureMode;
|
|
55
|
+
constructor(config) {
|
|
56
|
+
this.soqlAdapter = config.soqlAdapter;
|
|
57
|
+
this.restApiAdapter = config.restApiAdapter;
|
|
58
|
+
this.userReadinessService = config.userReadinessService;
|
|
59
|
+
this.logger = config.logger;
|
|
60
|
+
// Initialize mode handlers when readiness service is available.
|
|
61
|
+
// Arrow functions are used instead of .bind() so that sinon stubs
|
|
62
|
+
// applied to the service instance are respected at call time.
|
|
63
|
+
if (config.userReadinessService) {
|
|
64
|
+
const deps = {
|
|
65
|
+
soqlAdapter: this.soqlAdapter,
|
|
66
|
+
restApiAdapter: this.restApiAdapter,
|
|
67
|
+
userReadinessService: config.userReadinessService,
|
|
68
|
+
logger: this.logger,
|
|
69
|
+
getPermissionSetId: (name, namespace) => this.getPermissionSetId(name, namespace),
|
|
70
|
+
enableApiOnlyProfiling: (name) => this.enableApiOnlyProfiling(name),
|
|
71
|
+
disableApiOnlyProfiling: (name) => this.disableApiOnlyProfiling(name),
|
|
72
|
+
waitForDeploymentCompletion: (jobId) => this.waitForDeploymentCompletion(jobId),
|
|
73
|
+
};
|
|
74
|
+
this.configureMode = new ConfigureMode(deps);
|
|
75
|
+
this.unconfigureMode = new UnconfigureMode(deps);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Checks if an error message indicates Cuneiform namespace is not found.
|
|
80
|
+
*
|
|
81
|
+
* This typically means the Cuneiform for Salesforce package is not installed in the org.
|
|
82
|
+
*/
|
|
83
|
+
static isCuneiformNamespaceNotFoundError(message) {
|
|
84
|
+
const lowerMessage = message.toLowerCase();
|
|
85
|
+
return (lowerMessage.includes('sobject type') &&
|
|
86
|
+
(lowerMessage.includes('not supported') || lowerMessage.includes('invalid')));
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Creates an empty UserConfig result for error cases.
|
|
90
|
+
*/
|
|
91
|
+
static createEmptyConfig(userId) {
|
|
92
|
+
return {
|
|
93
|
+
userId,
|
|
94
|
+
apiOnlyProfilingEnabled: false,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Retrieves the current Cuneiform configuration for a user.
|
|
99
|
+
*
|
|
100
|
+
* Queries the Active Configuration CMT to get the linked Configuration Profile
|
|
101
|
+
* and its settings. Returns empty config if Cuneiform is not installed.
|
|
102
|
+
*
|
|
103
|
+
* @param userId - The Salesforce user ID (for context, not filtered)
|
|
104
|
+
* @returns ServiceResult containing UserConfig
|
|
105
|
+
*/
|
|
106
|
+
async getCurrentConfig(userId) {
|
|
107
|
+
const startTime = Date.now();
|
|
108
|
+
// Validate userId
|
|
109
|
+
const validationError = validateRequiredString(userId, 'User ID');
|
|
110
|
+
if (validationError) {
|
|
111
|
+
const emptyResult = UserConfigurationService.createEmptyConfig(userId);
|
|
112
|
+
return createFailureResult(emptyResult, ServiceErrorCodes.USER_CONFIG_USER_ID_REQUIRED, validationError, {
|
|
113
|
+
metadata: { duration: Date.now() - startTime },
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
try {
|
|
117
|
+
this.logger?.log(`Getting current config for user: ${userId}`);
|
|
118
|
+
const soql = new CuneiformQueryBuilder()
|
|
119
|
+
.select([
|
|
120
|
+
'Id',
|
|
121
|
+
'DeveloperName',
|
|
122
|
+
`${CUNEIFORM_NAMESPACE_PREFIX}Active_Configuration_Profile__r.Id`,
|
|
123
|
+
`${CUNEIFORM_NAMESPACE_PREFIX}Active_Configuration_Profile__r.DeveloperName`,
|
|
124
|
+
`${CUNEIFORM_NAMESPACE_PREFIX}Active_Configuration_Profile__r.Label`,
|
|
125
|
+
`${CUNEIFORM_NAMESPACE_PREFIX}Active_Configuration_Profile__r.${CUNEIFORM_NAMESPACE_PREFIX}Enable_API_Only_Profiling__c`,
|
|
126
|
+
])
|
|
127
|
+
.from(`${CUNEIFORM_NAMESPACE_PREFIX}Active_Configuration__mdt`)
|
|
128
|
+
.where('DeveloperName', '=', 'Active_Configuration')
|
|
129
|
+
.limit(1)
|
|
130
|
+
.toSOQL();
|
|
131
|
+
const result = await this.soqlAdapter.query(soql);
|
|
132
|
+
// Check for namespace not found error
|
|
133
|
+
if (!result.success) {
|
|
134
|
+
if (UserConfigurationService.isCuneiformNamespaceNotFoundError(result.message ?? '')) {
|
|
135
|
+
const emptyResult = UserConfigurationService.createEmptyConfig(userId);
|
|
136
|
+
return createFailureResult(emptyResult, ServiceErrorCodes.USER_CUNEIFORM_NAMESPACE_NOT_FOUND, 'Cuneiform namespace not found - package may not be installed', { metadata: { duration: Date.now() - startTime } });
|
|
137
|
+
}
|
|
138
|
+
const emptyResult = UserConfigurationService.createEmptyConfig(userId);
|
|
139
|
+
return createFailureResult(emptyResult, ServiceErrorCodes.USER_CONFIG_QUERY_FAILED, result.message ?? 'Configuration query failed', { metadata: { duration: Date.now() - startTime } });
|
|
140
|
+
}
|
|
141
|
+
// No config record found
|
|
142
|
+
if (result.data.records.length === 0) {
|
|
143
|
+
const duration = Date.now() - startTime;
|
|
144
|
+
const config = UserConfigurationService.createEmptyConfig(userId);
|
|
145
|
+
return createSuccessResult(config, {
|
|
146
|
+
message: 'No active configuration found',
|
|
147
|
+
metadata: { duration },
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
const record = result.data.records[0];
|
|
151
|
+
const profile = record[`${CUNEIFORM_NAMESPACE_PREFIX}Active_Configuration_Profile__r`];
|
|
152
|
+
// Config exists but no profile linked
|
|
153
|
+
if (!profile) {
|
|
154
|
+
const duration = Date.now() - startTime;
|
|
155
|
+
const config = UserConfigurationService.createEmptyConfig(userId);
|
|
156
|
+
return createSuccessResult(config, {
|
|
157
|
+
message: 'Configuration exists but no profile is linked',
|
|
158
|
+
metadata: { duration },
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
const config = {
|
|
162
|
+
userId,
|
|
163
|
+
profileDeveloperName: profile.DeveloperName,
|
|
164
|
+
profileLabel: profile.Label,
|
|
165
|
+
apiOnlyProfilingEnabled: profile[`${CUNEIFORM_NAMESPACE_PREFIX}Enable_API_Only_Profiling__c`] ?? false,
|
|
166
|
+
};
|
|
167
|
+
const duration = Date.now() - startTime;
|
|
168
|
+
this.logger?.log(`Config retrieved: profile=${config.profileLabel ?? 'Unknown'}, apiOnly=${config.apiOnlyProfilingEnabled}`);
|
|
169
|
+
return createSuccessResult(config, {
|
|
170
|
+
message: `Active profile: ${config.profileLabel ?? 'Unknown'}`,
|
|
171
|
+
metadata: { duration },
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
176
|
+
this.logger?.log(`Config query failed: ${errorMessage}`);
|
|
177
|
+
// Check for namespace not found in exception
|
|
178
|
+
if (UserConfigurationService.isCuneiformNamespaceNotFoundError(errorMessage)) {
|
|
179
|
+
const emptyResult = UserConfigurationService.createEmptyConfig(userId);
|
|
180
|
+
return createFailureResult(emptyResult, ServiceErrorCodes.USER_CUNEIFORM_NAMESPACE_NOT_FOUND, 'Cuneiform namespace not found - package may not be installed', { metadata: { duration: Date.now() - startTime } });
|
|
181
|
+
}
|
|
182
|
+
const emptyResult = UserConfigurationService.createEmptyConfig(userId);
|
|
183
|
+
return createFailureResult(emptyResult, ServiceErrorCodes.USER_CONFIG_QUERY_FAILED, errorMessage, {
|
|
184
|
+
metadata: { duration: Date.now() - startTime },
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Enables API-only profiling for a configuration profile.
|
|
190
|
+
*
|
|
191
|
+
* Triggers a CMT configuration update via the ISV REST endpoint.
|
|
192
|
+
* Returns the deployment job ID for status tracking.
|
|
193
|
+
*
|
|
194
|
+
* @param profileDeveloperName - The developer name of the Configuration Profile to update
|
|
195
|
+
* @returns ServiceResult containing DeploymentResult with job ID
|
|
196
|
+
*/
|
|
197
|
+
async enableApiOnlyProfiling(profileDeveloperName) {
|
|
198
|
+
return this.deployCmtViaRest(profileDeveloperName, true);
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Retrieves the status of a CMT deployment job.
|
|
202
|
+
*
|
|
203
|
+
* Queries the DeployRequest object to check deployment progress.
|
|
204
|
+
*
|
|
205
|
+
* @param jobId - The deployment job ID to check
|
|
206
|
+
* @returns ServiceResult containing DeploymentStatus
|
|
207
|
+
*/
|
|
208
|
+
async getDeploymentStatus(jobId) {
|
|
209
|
+
const startTime = Date.now();
|
|
210
|
+
// Validate job ID
|
|
211
|
+
const validationError = validateRequiredString(jobId, 'Job ID');
|
|
212
|
+
if (validationError) {
|
|
213
|
+
const emptyResult = {
|
|
214
|
+
jobId: jobId || '',
|
|
215
|
+
status: 'Unknown',
|
|
216
|
+
isComplete: false,
|
|
217
|
+
errorMessage: validationError,
|
|
218
|
+
};
|
|
219
|
+
return createFailureResult(emptyResult, ServiceErrorCodes.USER_CONFIG_INVALID_SETTINGS, validationError, {
|
|
220
|
+
metadata: { duration: Date.now() - startTime },
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
try {
|
|
224
|
+
this.logger?.log(`Checking deployment status for job: ${jobId}`);
|
|
225
|
+
// Query DeployRequest via Tooling API (needs special handling)
|
|
226
|
+
// Note: DeployRequest is accessible via regular SOQL from API v54.0+
|
|
227
|
+
const soql = new CuneiformQueryBuilder()
|
|
228
|
+
.select(['Id', 'Status', 'ErrorMessage'])
|
|
229
|
+
.from('DeployRequest')
|
|
230
|
+
.where('Id', '=', jobId)
|
|
231
|
+
.limit(1)
|
|
232
|
+
.toSOQL();
|
|
233
|
+
const result = await this.soqlAdapter.query(soql);
|
|
234
|
+
if (!result.success) {
|
|
235
|
+
const emptyResult = {
|
|
236
|
+
jobId,
|
|
237
|
+
status: 'Unknown',
|
|
238
|
+
isComplete: false,
|
|
239
|
+
errorMessage: result.message ?? 'Status query failed',
|
|
240
|
+
};
|
|
241
|
+
return createFailureResult(emptyResult, ServiceErrorCodes.USER_CONFIG_JOB_QUERY_FAILED, result.message ?? 'Deployment status query failed', { metadata: { duration: Date.now() - startTime } });
|
|
242
|
+
}
|
|
243
|
+
// No record found
|
|
244
|
+
if (result.data.records.length === 0) {
|
|
245
|
+
const duration = Date.now() - startTime;
|
|
246
|
+
const status = {
|
|
247
|
+
jobId,
|
|
248
|
+
status: 'Unknown',
|
|
249
|
+
isComplete: false,
|
|
250
|
+
errorMessage: 'Deployment job not found',
|
|
251
|
+
};
|
|
252
|
+
return createSuccessResult(status, {
|
|
253
|
+
message: 'Deployment job not found',
|
|
254
|
+
warnings: ['The job ID may be invalid or the deployment may have been purged'],
|
|
255
|
+
metadata: { duration },
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
const record = result.data.records[0];
|
|
259
|
+
const statusMap = {
|
|
260
|
+
Pending: 'Pending',
|
|
261
|
+
InProgress: 'InProgress',
|
|
262
|
+
Succeeded: 'Succeeded',
|
|
263
|
+
Failed: 'Failed',
|
|
264
|
+
Canceled: 'Canceled',
|
|
265
|
+
};
|
|
266
|
+
const status = {
|
|
267
|
+
jobId,
|
|
268
|
+
status: statusMap[record.Status] ?? 'Unknown',
|
|
269
|
+
isComplete: ['Succeeded', 'Failed', 'Canceled'].includes(record.Status),
|
|
270
|
+
errorMessage: record.ErrorMessage,
|
|
271
|
+
};
|
|
272
|
+
const duration = Date.now() - startTime;
|
|
273
|
+
this.logger?.log(`Deployment status: ${status.status}, complete=${status.isComplete}`);
|
|
274
|
+
return createSuccessResult(status, {
|
|
275
|
+
message: `Deployment ${status.status.toLowerCase()}`,
|
|
276
|
+
metadata: { duration },
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
catch (error) {
|
|
280
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
281
|
+
this.logger?.log(`Deployment status query failed: ${errorMessage}`);
|
|
282
|
+
const emptyResult = {
|
|
283
|
+
jobId,
|
|
284
|
+
status: 'Unknown',
|
|
285
|
+
isComplete: false,
|
|
286
|
+
errorMessage,
|
|
287
|
+
};
|
|
288
|
+
return createFailureResult(emptyResult, ServiceErrorCodes.USER_CONFIG_JOB_QUERY_FAILED, errorMessage, {
|
|
289
|
+
metadata: { duration: Date.now() - startTime },
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Polls for CMT deployment completion with exponential backoff.
|
|
295
|
+
*
|
|
296
|
+
* Waits for a metadata deployment to reach a terminal state (Succeeded, Failed, or Canceled).
|
|
297
|
+
* Uses exponential backoff starting at 1s, capped at 5s, with a maximum total wait of 30s.
|
|
298
|
+
*
|
|
299
|
+
* @param jobId - The deployment job ID to monitor
|
|
300
|
+
* @returns ServiceResult containing the final DeploymentStatus
|
|
301
|
+
*/
|
|
302
|
+
async waitForDeploymentCompletion(jobId) {
|
|
303
|
+
const MAX_WAIT_MS = 30_000;
|
|
304
|
+
const INITIAL_DELAY_MS = 1000;
|
|
305
|
+
const MAX_DELAY_MS = 5000;
|
|
306
|
+
const startTime = Date.now();
|
|
307
|
+
let delay = INITIAL_DELAY_MS;
|
|
308
|
+
this.logger?.log(`Waiting for deployment ${jobId} to complete (max ${MAX_WAIT_MS / 1000}s)`);
|
|
309
|
+
/* eslint-disable no-await-in-loop -- polling loop requires sequential waits */
|
|
310
|
+
while (Date.now() - startTime < MAX_WAIT_MS) {
|
|
311
|
+
const statusResult = await this.getDeploymentStatus(jobId);
|
|
312
|
+
if (!statusResult.success) {
|
|
313
|
+
return statusResult;
|
|
314
|
+
}
|
|
315
|
+
if (statusResult.data.isComplete) {
|
|
316
|
+
this.logger?.log(`Deployment ${jobId} completed: ${statusResult.data.status}`);
|
|
317
|
+
return statusResult;
|
|
318
|
+
}
|
|
319
|
+
this.logger?.log(`Deployment ${jobId} status: ${statusResult.data.status}, waiting ${delay}ms`);
|
|
320
|
+
await new Promise((resolve) => {
|
|
321
|
+
setTimeout(resolve, delay);
|
|
322
|
+
});
|
|
323
|
+
delay = Math.min(delay * 2, MAX_DELAY_MS);
|
|
324
|
+
}
|
|
325
|
+
/* eslint-enable no-await-in-loop */
|
|
326
|
+
// Timed out — return last known status
|
|
327
|
+
const finalStatus = await this.getDeploymentStatus(jobId);
|
|
328
|
+
if (finalStatus.success && !finalStatus.data.isComplete) {
|
|
329
|
+
this.logger?.log(`Deployment ${jobId} timed out after ${MAX_WAIT_MS / 1000}s`);
|
|
330
|
+
return createSuccessResult(finalStatus.data, {
|
|
331
|
+
message: `Deployment polling timed out after ${MAX_WAIT_MS / 1000}s`,
|
|
332
|
+
warnings: ['Deployment may still be in progress'],
|
|
333
|
+
metadata: { duration: Date.now() - startTime },
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
return finalStatus;
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Retrieves the ID of a permission set by name and namespace.
|
|
340
|
+
*
|
|
341
|
+
* Queries the PermissionSet object to find the permission set ID. This is
|
|
342
|
+
* needed before assigning a permission set to a user via PermissionSetAssignment.
|
|
343
|
+
*
|
|
344
|
+
* @param name - The permission set API name (e.g., 'Cuneiform_for_CRM_Global_Profiling_Support')
|
|
345
|
+
* @param namespace - The namespace prefix (e.g., 'pnova')
|
|
346
|
+
* @returns ServiceResult containing the permission set ID or null if not found
|
|
347
|
+
*/
|
|
348
|
+
async getPermissionSetId(name, namespace) {
|
|
349
|
+
const startTime = Date.now();
|
|
350
|
+
const emptyResult = null;
|
|
351
|
+
// Validate name
|
|
352
|
+
const nameValidationError = validateRequiredString(name, 'Permission set name');
|
|
353
|
+
if (nameValidationError) {
|
|
354
|
+
return createFailureResult(emptyResult, ServiceErrorCodes.USER_CONFIG_INVALID_SETTINGS, nameValidationError, {
|
|
355
|
+
metadata: { duration: Date.now() - startTime },
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
// Validate namespace
|
|
359
|
+
const namespaceValidationError = validateNamespace(namespace);
|
|
360
|
+
if (namespaceValidationError) {
|
|
361
|
+
return createFailureResult(emptyResult, ServiceErrorCodes.USER_CONFIG_INVALID_SETTINGS, namespaceValidationError, {
|
|
362
|
+
metadata: { duration: Date.now() - startTime },
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
try {
|
|
366
|
+
this.logger?.log(`Querying permission set ID: ${namespace}__${name}`);
|
|
367
|
+
// Query PermissionSet by Name and NamespacePrefix
|
|
368
|
+
const soql = new CuneiformQueryBuilder()
|
|
369
|
+
.select(['Id', 'Name', 'NamespacePrefix'])
|
|
370
|
+
.from('PermissionSet')
|
|
371
|
+
.where('Name', '=', name)
|
|
372
|
+
.andWhere('NamespacePrefix', '=', namespace)
|
|
373
|
+
.limit(1)
|
|
374
|
+
.toSOQL();
|
|
375
|
+
const result = await this.soqlAdapter.query(soql);
|
|
376
|
+
if (!result.success) {
|
|
377
|
+
return createFailureResult(emptyResult, ServiceErrorCodes.USER_CONFIG_QUERY_FAILED, result.message ?? 'Permission set query failed', { metadata: { duration: Date.now() - startTime } });
|
|
378
|
+
}
|
|
379
|
+
// Not found is a valid outcome (return null with success)
|
|
380
|
+
if (result.data.records.length === 0) {
|
|
381
|
+
const duration = Date.now() - startTime;
|
|
382
|
+
this.logger?.log(`Permission set not found: ${namespace}__${name}`);
|
|
383
|
+
return createSuccessResult(null, {
|
|
384
|
+
message: `Permission set not found: ${namespace}__${name}`,
|
|
385
|
+
warnings: [`Permission set '${name}' with namespace '${namespace}' does not exist in this org`],
|
|
386
|
+
metadata: { duration },
|
|
387
|
+
});
|
|
388
|
+
}
|
|
389
|
+
const permissionSetId = result.data.records[0].Id;
|
|
390
|
+
const duration = Date.now() - startTime;
|
|
391
|
+
this.logger?.log(`Permission set found: ${permissionSetId}`);
|
|
392
|
+
return createSuccessResult(permissionSetId, {
|
|
393
|
+
message: `Permission set ID: ${permissionSetId}`,
|
|
394
|
+
metadata: { duration },
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
catch (error) {
|
|
398
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
399
|
+
this.logger?.log(`Permission set query failed: ${errorMessage}`);
|
|
400
|
+
return createFailureResult(emptyResult, ServiceErrorCodes.USER_CONFIG_QUERY_FAILED, errorMessage, {
|
|
401
|
+
metadata: { duration: Date.now() - startTime },
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Orchestrates user configuration for Cuneiform operations.
|
|
407
|
+
*
|
|
408
|
+
* Delegates to {@link ConfigureMode} for the full configure workflow.
|
|
409
|
+
* See ConfigureMode for implementation details.
|
|
410
|
+
*
|
|
411
|
+
* @param userId - The Salesforce user ID to configure
|
|
412
|
+
* @param options - Configuration options
|
|
413
|
+
* @param options.dryRun - If true, reports planned changes without applying them (default: false)
|
|
414
|
+
* @returns ServiceResult containing UserConfigurationResult with actions taken/skipped/failed
|
|
415
|
+
*/
|
|
416
|
+
async configure(userId, options) {
|
|
417
|
+
const dependencyError = this.validateConfigureDependencies();
|
|
418
|
+
if (dependencyError) {
|
|
419
|
+
const dryRun = options?.dryRun ?? false;
|
|
420
|
+
return createFailureResult({
|
|
421
|
+
user: { id: userId, username: '' },
|
|
422
|
+
dryRun,
|
|
423
|
+
previousState: {
|
|
424
|
+
userId,
|
|
425
|
+
username: '',
|
|
426
|
+
hasRequiredPermissionSets: false,
|
|
427
|
+
missingPermissionSets: [],
|
|
428
|
+
apiOnlyProfilingEnabled: false,
|
|
429
|
+
},
|
|
430
|
+
actions: [],
|
|
431
|
+
currentState: null,
|
|
432
|
+
summary: { changesRequired: 0, changesApplied: 0, changesFailed: 0, isReady: false },
|
|
433
|
+
}, ServiceErrorCodes.USER_CONFIG_INVALID_SETTINGS, dependencyError, { metadata: { duration: 0 } });
|
|
434
|
+
}
|
|
435
|
+
return this.configureMode.execute(userId, options);
|
|
436
|
+
}
|
|
437
|
+
/**
|
|
438
|
+
* Orchestrates user unconfiguration — reverses the actions of configure().
|
|
439
|
+
*
|
|
440
|
+
* Delegates to {@link UnconfigureMode} for the full unconfigure workflow.
|
|
441
|
+
* See UnconfigureMode for implementation details.
|
|
442
|
+
*
|
|
443
|
+
* @param userId - The Salesforce user ID to unconfigure
|
|
444
|
+
* @returns ServiceResult containing UserConfigurationResult with actions taken/skipped/failed
|
|
445
|
+
*/
|
|
446
|
+
async unconfigure(userId) {
|
|
447
|
+
const dependencyError = this.validateConfigureDependencies();
|
|
448
|
+
if (dependencyError) {
|
|
449
|
+
return createFailureResult({
|
|
450
|
+
user: { id: userId, username: '' },
|
|
451
|
+
dryRun: false,
|
|
452
|
+
previousState: {
|
|
453
|
+
userId,
|
|
454
|
+
username: '',
|
|
455
|
+
hasRequiredPermissionSets: false,
|
|
456
|
+
missingPermissionSets: [],
|
|
457
|
+
apiOnlyProfilingEnabled: false,
|
|
458
|
+
},
|
|
459
|
+
actions: [],
|
|
460
|
+
currentState: null,
|
|
461
|
+
summary: { changesRequired: 0, changesApplied: 0, changesFailed: 0, isReady: false },
|
|
462
|
+
}, ServiceErrorCodes.USER_CONFIG_INVALID_SETTINGS, dependencyError, { metadata: { duration: 0 } });
|
|
463
|
+
}
|
|
464
|
+
return this.unconfigureMode.execute(userId);
|
|
465
|
+
}
|
|
466
|
+
/**
|
|
467
|
+
* Disables API-only profiling for a configuration profile.
|
|
468
|
+
*
|
|
469
|
+
* Triggers a CMT configuration update via the ISV REST endpoint to set
|
|
470
|
+
* Enable_API_Only_Profiling__c to false. Uses the same deployment
|
|
471
|
+
* pattern as enableApiOnlyProfiling().
|
|
472
|
+
*
|
|
473
|
+
* @param profileDeveloperName - The developer name of the Configuration Profile to update
|
|
474
|
+
* @returns ServiceResult containing DeploymentResult with job ID
|
|
475
|
+
*/
|
|
476
|
+
async disableApiOnlyProfiling(profileDeveloperName) {
|
|
477
|
+
return this.deployCmtViaRest(profileDeveloperName, false);
|
|
478
|
+
}
|
|
479
|
+
/**
|
|
480
|
+
* Deploys a CMT configuration update via the ISV REST endpoint and returns
|
|
481
|
+
* the result including any jobId from the response.
|
|
482
|
+
*
|
|
483
|
+
* On 404 (endpoint not available), returns a graceful error explaining that
|
|
484
|
+
* an ISV upgrade is needed.
|
|
485
|
+
*
|
|
486
|
+
* @param profileDeveloperName - The developer name of the Configuration Profile to update
|
|
487
|
+
* @param enableApiOnlyProfiling - Whether to enable (true) or disable (false) API-only profiling
|
|
488
|
+
* @returns ServiceResult containing DeploymentResult with job ID
|
|
489
|
+
*/
|
|
490
|
+
async deployCmtViaRest(profileDeveloperName, enableApiOnlyProfiling) {
|
|
491
|
+
const startTime = Date.now();
|
|
492
|
+
const action = enableApiOnlyProfiling ? 'Enabling' : 'Disabling';
|
|
493
|
+
const validationError = validateRequiredString(profileDeveloperName, 'Profile Developer Name');
|
|
494
|
+
if (validationError) {
|
|
495
|
+
const emptyResult = { triggered: false, message: validationError };
|
|
496
|
+
return createFailureResult(emptyResult, ServiceErrorCodes.USER_CONFIG_INVALID_SETTINGS, validationError, {
|
|
497
|
+
metadata: { duration: Date.now() - startTime },
|
|
498
|
+
});
|
|
499
|
+
}
|
|
500
|
+
try {
|
|
501
|
+
this.logger?.log(`${action} API-only profiling for profile: ${profileDeveloperName}`);
|
|
502
|
+
// Call the ISV REST endpoint to trigger CMT deployment
|
|
503
|
+
const restResult = await this.restApiAdapter.request({
|
|
504
|
+
url: `/services/apexrest/${CUNEIFORM_NAMESPACE}/v1/profiling/configuration`,
|
|
505
|
+
method: 'PATCH',
|
|
506
|
+
body: { profileDeveloperName, enableApiOnlyProfiling },
|
|
507
|
+
});
|
|
508
|
+
if (!restResult.success) {
|
|
509
|
+
const errorMsg = restResult.message ?? 'REST request failed';
|
|
510
|
+
// Check for 404 — endpoint not available (ISV version too old)
|
|
511
|
+
// jsforce surfaces HTTP 404 as error messages containing these patterns:
|
|
512
|
+
// - "NOT_FOUND" / "Not Found" — standard HTTP status text
|
|
513
|
+
// - "404" — numeric status code in message
|
|
514
|
+
// - "Could not find a match for URL" — Salesforce REST dispatcher message
|
|
515
|
+
if (errorMsg.includes('404') ||
|
|
516
|
+
errorMsg.includes('Not Found') ||
|
|
517
|
+
errorMsg.includes('Could not find a match for URL')) {
|
|
518
|
+
return createFailureResult({ triggered: false, message: 'Configuration endpoint not available' }, ServiceErrorCodes.USER_CONFIG_ENDPOINT_UNAVAILABLE, 'This operation requires a newer version of Cuneiform for Salesforce. ' +
|
|
519
|
+
'Contact your Salesforce administrator to upgrade the Cuneiform managed package.', { metadata: { duration: Date.now() - startTime } });
|
|
520
|
+
}
|
|
521
|
+
// Check for 403 — insufficient access to the REST endpoint
|
|
522
|
+
// jsforce surfaces HTTP 403 as error messages containing these patterns:
|
|
523
|
+
// - "403" — numeric status code in message
|
|
524
|
+
// - "Forbidden" — standard HTTP status text
|
|
525
|
+
// - "INSUFFICIENT_ACCESS" — Salesforce error code
|
|
526
|
+
if (errorMsg.includes('403') || errorMsg.includes('Forbidden') || errorMsg.includes('INSUFFICIENT_ACCESS')) {
|
|
527
|
+
return createFailureResult({ triggered: false, message: 'Insufficient access to configuration endpoint' }, ServiceErrorCodes.USER_CONFIG_ENDPOINT_INSUFFICIENT_ACCESS, 'Insufficient access to the Cuneiform REST endpoint. ' +
|
|
528
|
+
'Verify that your user profile has API access to the Cuneiform managed package. ' +
|
|
529
|
+
'Contact your Salesforce administrator to check permission set assignments.', { metadata: { duration: Date.now() - startTime } });
|
|
530
|
+
}
|
|
531
|
+
// Check for Feature Parameter not enabled
|
|
532
|
+
// ISV endpoint may return a specific error when the feature gate is disabled
|
|
533
|
+
if (errorMsg.includes('Feature is not enabled') ||
|
|
534
|
+
errorMsg.includes('FEATURE_DISABLED') ||
|
|
535
|
+
errorMsg.includes('feature parameter')) {
|
|
536
|
+
return createFailureResult({ triggered: false, message: 'Feature parameter not enabled' }, ServiceErrorCodes.USER_CONFIG_FEATURE_NOT_ENABLED, 'API-Based Profiling is not enabled in this org. ' +
|
|
537
|
+
'Contact your Salesforce administrator to enable the Cuneiform Feature Parameter before using this command.', { metadata: { duration: Date.now() - startTime } });
|
|
538
|
+
}
|
|
539
|
+
return createFailureResult({ triggered: false, message: errorMsg }, ServiceErrorCodes.USER_CONFIG_DEPLOY_TRIGGER_FAILED, errorMsg, { metadata: { duration: Date.now() - startTime } });
|
|
540
|
+
}
|
|
541
|
+
// Extract jobId from REST response
|
|
542
|
+
const jobId = restResult.data?.results?.[0]?.jobId ?? undefined;
|
|
543
|
+
const duration = Date.now() - startTime;
|
|
544
|
+
this.logger?.log(`${action} deployment triggered successfully${jobId ? `: jobId=${jobId}` : ''}`);
|
|
545
|
+
return createSuccessResult({
|
|
546
|
+
triggered: true,
|
|
547
|
+
jobId,
|
|
548
|
+
message: `CMT deployment triggered to ${enableApiOnlyProfiling ? 'enable' : 'disable'} API-only profiling for ${profileDeveloperName}`,
|
|
549
|
+
}, {
|
|
550
|
+
message: jobId ? `Deployment job started: ${jobId}` : 'Deployment triggered',
|
|
551
|
+
metadata: { duration },
|
|
552
|
+
});
|
|
553
|
+
}
|
|
554
|
+
catch (error) {
|
|
555
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
556
|
+
this.logger?.log(`${action} deployment trigger failed: ${errorMessage}`);
|
|
557
|
+
const emptyResult = { triggered: false, message: errorMessage };
|
|
558
|
+
return createFailureResult(emptyResult, ServiceErrorCodes.USER_CONFIG_DEPLOY_TRIGGER_FAILED, errorMessage, {
|
|
559
|
+
metadata: { duration: Date.now() - startTime },
|
|
560
|
+
});
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
/**
|
|
564
|
+
* Validates dependencies required for configure()/unconfigure() methods.
|
|
565
|
+
*/
|
|
566
|
+
validateConfigureDependencies() {
|
|
567
|
+
if (!this.userReadinessService) {
|
|
568
|
+
return 'UserReadinessService is required for configure() - provide userReadinessService in constructor config';
|
|
569
|
+
}
|
|
570
|
+
return null;
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
//# sourceMappingURL=UserConfigurationService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserConfigurationService.js","sourceRoot":"","sources":["../../src/services/UserConfigurationService.ts"],"names":[],"mappings":"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"}
|