@salesforce/afv-skills 1.8.0 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/skills/activating-datacloud/CREDITS.md +5 -0
- package/skills/activating-datacloud/README.md +39 -0
- package/skills/activating-datacloud/SKILL.md +118 -0
- package/skills/analyzing-omnistudio-dependencies/CREDITS.md +5 -0
- package/skills/analyzing-omnistudio-dependencies/SKILL.md +477 -0
- package/skills/analyzing-omnistudio-dependencies/references/dependency-patterns.md +508 -0
- package/skills/analyzing-omnistudio-dependencies/references/namespace-guide.md +300 -0
- package/skills/building-omnistudio-callable-apex/CREDITS.md +9 -0
- package/skills/building-omnistudio-callable-apex/README.md +80 -0
- package/skills/building-omnistudio-callable-apex/SKILL.md +276 -0
- package/skills/building-omnistudio-callable-apex/assets/pattern_callable_openinterface.cls +40 -0
- package/skills/building-omnistudio-callable-apex/assets/pattern_callable_vanilla.cls +32 -0
- package/skills/building-omnistudio-callable-apex/assets/pattern_migration.cls +54 -0
- package/skills/building-omnistudio-callable-apex/assets/pattern_openinterface.cls +45 -0
- package/skills/building-omnistudio-callable-apex/assets/pattern_test_class.cls +65 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/IndustriesCallableException.cls +7 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/Industries_QuoteByProductCallable.cls +115 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/Industries_QuoteByProductCallableTest.cls +189 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/TRANSCRIPT.md +115 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/IndustriesCallableException.cls +7 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomCallable.cls +74 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomCallableTest.cls +146 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomRemoteClass.cls +16 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/TRANSCRIPT.md +120 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/IndustriesCallableException.cls +7 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomCallable.cls +73 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomCallableTest.cls +128 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomVlocityOpenInterface2.cls +23 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/TRANSCRIPT.md +75 -0
- package/skills/building-omnistudio-datamapper/CREDITS.md +5 -0
- package/skills/building-omnistudio-datamapper/SKILL.md +270 -0
- package/skills/building-omnistudio-datamapper/assets/completion-summary-template.md +28 -0
- package/skills/building-omnistudio-datamapper/assets/omni-data-transform-extract.json +6 -0
- package/skills/building-omnistudio-datamapper/assets/omni-data-transform-item.json +12 -0
- package/skills/building-omnistudio-datamapper/assets/omni-data-transform-load.json +6 -0
- package/skills/building-omnistudio-datamapper/assets/omni-data-transform-transform.json +6 -0
- package/skills/building-omnistudio-datamapper/references/best-practices.md +277 -0
- package/skills/building-omnistudio-datamapper/references/naming-conventions.md +145 -0
- package/skills/building-omnistudio-flexcard/CREDITS.md +5 -0
- package/skills/building-omnistudio-flexcard/SKILL.md +325 -0
- package/skills/building-omnistudio-flexcard/assets/omni-ui-card.json +10 -0
- package/skills/building-omnistudio-flexcard/references/best-practices.md +291 -0
- package/skills/building-omnistudio-flexcard/references/data-binding-guide.md +311 -0
- package/skills/building-omnistudio-flexcard/references/scoring-rubric.md +66 -0
- package/skills/building-omnistudio-flexcard/scripts/flexcard-commands.sh +24 -0
- package/skills/building-omnistudio-integration-procedure/CREDITS.md +5 -0
- package/skills/building-omnistudio-integration-procedure/SKILL.md +275 -0
- package/skills/building-omnistudio-integration-procedure/assets/omni-process-element-dr-extract.json +10 -0
- package/skills/building-omnistudio-integration-procedure/assets/omni-process-element-set-values.json +10 -0
- package/skills/building-omnistudio-integration-procedure/assets/omni-process-ip.json +12 -0
- package/skills/building-omnistudio-integration-procedure/assets/scoring-report-format.txt +14 -0
- package/skills/building-omnistudio-integration-procedure/references/best-practices.md +388 -0
- package/skills/building-omnistudio-integration-procedure/references/element-types.md +588 -0
- package/skills/building-omnistudio-integration-procedure/scripts/cli-commands.sh +18 -0
- package/skills/building-omnistudio-omniscript/CREDITS.md +5 -0
- package/skills/building-omnistudio-omniscript/SKILL.md +367 -0
- package/skills/building-omnistudio-omniscript/assets/omni-process-element-step.json +10 -0
- package/skills/building-omnistudio-omniscript/assets/omni-process-element-text-block.json +11 -0
- package/skills/building-omnistudio-omniscript/assets/omni-process-omniscript.json +12 -0
- package/skills/building-omnistudio-omniscript/references/best-practices.md +480 -0
- package/skills/building-omnistudio-omniscript/references/element-types.md +1172 -0
- package/skills/building-omnistudio-omniscript/scripts/check-duplicate-omniscript.sh +13 -0
- package/skills/building-omnistudio-omniscript/scripts/cli-reference.sh +21 -0
- package/skills/building-omnistudio-omniscript/scripts/deploy-omniscript.sh +29 -0
- package/skills/building-sf-integrations/CREDITS.md +5 -0
- package/skills/building-sf-integrations/README.md +95 -0
- package/skills/building-sf-integrations/SKILL.md +192 -0
- package/skills/building-sf-integrations/assets/callouts/callout-retry-handler.cls +167 -0
- package/skills/building-sf-integrations/assets/callouts/http-response-handler.cls +257 -0
- package/skills/building-sf-integrations/assets/callouts/rest-queueable-callout.cls +262 -0
- package/skills/building-sf-integrations/assets/callouts/rest-sync-callout.cls +211 -0
- package/skills/building-sf-integrations/assets/cdc/cdc-handler.cls +246 -0
- package/skills/building-sf-integrations/assets/cdc/cdc-subscriber-trigger.trigger +139 -0
- package/skills/building-sf-integrations/assets/endpoint-security/example.cspTrustedSite-meta.xml +58 -0
- package/skills/building-sf-integrations/assets/endpoint-security/example.remoteSite-meta.xml +39 -0
- package/skills/building-sf-integrations/assets/external-credentials/jwt-external-credential.externalCredential-meta.xml +90 -0
- package/skills/building-sf-integrations/assets/external-credentials/oauth-external-credential.externalCredential-meta.xml +87 -0
- package/skills/building-sf-integrations/assets/external-services/external-service-operations.md +221 -0
- package/skills/building-sf-integrations/assets/external-services/openapi-registration.externalServiceRegistration-meta.xml +193 -0
- package/skills/building-sf-integrations/assets/named-credentials/certificate-auth.namedCredential-meta.xml +62 -0
- package/skills/building-sf-integrations/assets/named-credentials/custom-auth.namedCredential-meta.xml +71 -0
- package/skills/building-sf-integrations/assets/named-credentials/oauth-client-credentials.namedCredential-meta.xml +51 -0
- package/skills/building-sf-integrations/assets/named-credentials/oauth-jwt-bearer.namedCredential-meta.xml +67 -0
- package/skills/building-sf-integrations/assets/platform-events/event-publisher.cls +191 -0
- package/skills/building-sf-integrations/assets/platform-events/event-subscriber-action.cls +295 -0
- package/skills/building-sf-integrations/assets/platform-events/event-subscriber-trigger.trigger +108 -0
- package/skills/building-sf-integrations/assets/platform-events/platform-event-definition.object-meta.xml +124 -0
- package/skills/building-sf-integrations/assets/soap/soap-callout-service.cls +186 -0
- package/skills/building-sf-integrations/assets/soap/wsdl2apex-guide.md +213 -0
- package/skills/building-sf-integrations/hooks/scripts/suggest_credential_setup.py +271 -0
- package/skills/building-sf-integrations/hooks/scripts/validate_integration.py +363 -0
- package/skills/building-sf-integrations/references/callout-patterns.md +719 -0
- package/skills/building-sf-integrations/references/cdc-guide.md +288 -0
- package/skills/building-sf-integrations/references/cli-reference.md +94 -0
- package/skills/building-sf-integrations/references/event-driven-architecture-guide.md +266 -0
- package/skills/building-sf-integrations/references/event-patterns.md +838 -0
- package/skills/building-sf-integrations/references/external-services-guide.md +303 -0
- package/skills/building-sf-integrations/references/messaging-api-v2.md +609 -0
- package/skills/building-sf-integrations/references/named-credentials-automation.md +201 -0
- package/skills/building-sf-integrations/references/named-credentials-guide.md +173 -0
- package/skills/building-sf-integrations/references/platform-events-guide.md +288 -0
- package/skills/building-sf-integrations/references/rest-callout-patterns.md +288 -0
- package/skills/building-sf-integrations/references/scoring-rubric.md +59 -0
- package/skills/building-sf-integrations/references/security-best-practices.md +248 -0
- package/skills/building-sf-integrations/scripts/README.md +100 -0
- package/skills/building-sf-integrations/scripts/configure-named-credential.sh +236 -0
- package/skills/building-sf-integrations/scripts/set-api-credential.sh +146 -0
- package/skills/building-sf-integrations/scripts/templates/setup-credentials-with-csp.sh +158 -0
- package/skills/configuring-connected-apps/CREDITS.md +3 -0
- package/skills/configuring-connected-apps/README.md +99 -0
- package/skills/configuring-connected-apps/SKILL.md +224 -0
- package/skills/configuring-connected-apps/assets/connected-app-basic.xml +29 -0
- package/skills/configuring-connected-apps/assets/connected-app-canvas.xml +62 -0
- package/skills/configuring-connected-apps/assets/connected-app-jwt.xml +49 -0
- package/skills/configuring-connected-apps/assets/connected-app-oauth.xml +65 -0
- package/skills/configuring-connected-apps/assets/eca-global-oauth.xml +36 -0
- package/skills/configuring-connected-apps/assets/eca-oauth-settings.xml +36 -0
- package/skills/configuring-connected-apps/assets/eca-policies.xml +36 -0
- package/skills/configuring-connected-apps/assets/external-client-app.xml +35 -0
- package/skills/configuring-connected-apps/references/example-usage.md +256 -0
- package/skills/configuring-connected-apps/references/migration-guide.md +328 -0
- package/skills/configuring-connected-apps/references/oauth-flows-reference.md +660 -0
- package/skills/configuring-connected-apps/references/security-checklist.md +209 -0
- package/skills/configuring-connected-apps/references/testing-validation-guide.md +275 -0
- package/skills/connecting-datacloud/CREDITS.md +5 -0
- package/skills/connecting-datacloud/README.md +59 -0
- package/skills/connecting-datacloud/SKILL.md +155 -0
- package/skills/connecting-datacloud/examples/connections/heroku-postgres.json +15 -0
- package/skills/connecting-datacloud/examples/connections/ingest-api-connection.json +5 -0
- package/skills/connecting-datacloud/examples/connections/ingest-api-schema.json +31 -0
- package/skills/connecting-datacloud/examples/connections/redshift.json +16 -0
- package/skills/connecting-datacloud/examples/connections/sharepoint-unstructured.json +20 -0
- package/skills/connecting-datacloud/examples/connections/snowflake-connection.json +42 -0
- package/skills/debugging-apex-logs/CREDITS.md +22 -0
- package/skills/debugging-apex-logs/README.md +74 -0
- package/skills/debugging-apex-logs/SKILL.md +172 -0
- package/skills/debugging-apex-logs/assets/benchmarking-template.cls +327 -0
- package/skills/debugging-apex-logs/assets/cpu-heap-optimization.cls +307 -0
- package/skills/debugging-apex-logs/assets/dml-in-loop-fix.cls +219 -0
- package/skills/debugging-apex-logs/assets/null-pointer-fix.cls +252 -0
- package/skills/debugging-apex-logs/assets/soql-in-loop-fix.cls +157 -0
- package/skills/debugging-apex-logs/references/analysis-playbook.md +53 -0
- package/skills/debugging-apex-logs/references/benchmarking-guide.md +287 -0
- package/skills/debugging-apex-logs/references/cli-commands.md +368 -0
- package/skills/debugging-apex-logs/references/common-issues.md +68 -0
- package/skills/debugging-apex-logs/references/debug-log-reference.md +328 -0
- package/skills/debugging-apex-logs/references/log-analysis-tools.md +248 -0
- package/skills/debugging-apex-logs/references/scoring-rubric.md +21 -0
- package/skills/deploying-metadata/CREDITS.md +25 -0
- package/skills/deploying-metadata/README.md +104 -0
- package/skills/deploying-metadata/SKILL.md +214 -0
- package/skills/deploying-metadata/assets/destructiveChanges.xml +143 -0
- package/skills/deploying-metadata/assets/package.xml +121 -0
- package/skills/deploying-metadata/references/agent-deployment-guide.md +628 -0
- package/skills/deploying-metadata/references/deploy.sh +73 -0
- package/skills/deploying-metadata/references/deployment-report-template.md +89 -0
- package/skills/deploying-metadata/references/deployment-workflows.md +395 -0
- package/skills/deploying-metadata/references/orchestration.md +183 -0
- package/skills/deploying-metadata/references/trigger-deployment-safety.md +376 -0
- package/skills/deploying-omnistudio-datapacks/CREDITS.md +5 -0
- package/skills/deploying-omnistudio-datapacks/README.md +88 -0
- package/skills/deploying-omnistudio-datapacks/SKILL.md +174 -0
- package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle/TRANSCRIPT.md +124 -0
- package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle/deploy-business-internet-plus-bundle.yaml +11 -0
- package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle-deploy/TRANSCRIPT.md +142 -0
- package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle-deploy/deploy-business-internet-plus-bundle.yaml +10 -0
- package/skills/deploying-omnistudio-datapacks/references/job-file-template.md +42 -0
- package/skills/deploying-omnistudio-datapacks/references/troubleshooting-matrix.md +24 -0
- package/skills/developing-agentforce/assets/metadata/http-callout-flow.flow-meta.xml +1 -1
- package/skills/developing-agentforce/references/actions-reference.md +8 -8
- package/skills/fetching-salesforce-docs/README.md +66 -0
- package/skills/fetching-salesforce-docs/SKILL.md +209 -0
- package/skills/fetching-salesforce-docs/requirements.txt +2 -0
- package/skills/fetching-salesforce-docs/scripts/extract_help_salesforce.py +497 -0
- package/skills/fetching-salesforce-docs/scripts/extract_salesforce_doc.py +357 -0
- package/skills/fetching-salesforce-docs/scripts/runtime_bootstrap.py +58 -0
- package/skills/generating-apex/CREDITS.md +1 -26
- package/skills/generating-apex-test/CREDITS.md +2 -27
- package/skills/generating-lwc-components/CREDITS.md +5 -0
- package/skills/generating-lwc-components/README.md +126 -0
- package/skills/generating-lwc-components/SKILL.md +191 -0
- package/skills/generating-lwc-components/assets/apex-controller/LwcController.cls +327 -0
- package/skills/generating-lwc-components/assets/basic-component/basicComponent.css +72 -0
- package/skills/generating-lwc-components/assets/basic-component/basicComponent.html +111 -0
- package/skills/generating-lwc-components/assets/basic-component/basicComponent.js +163 -0
- package/skills/generating-lwc-components/assets/basic-component/basicComponent.js-meta.xml +137 -0
- package/skills/generating-lwc-components/assets/datatable-component/datatableComponent.html +111 -0
- package/skills/generating-lwc-components/assets/datatable-component/datatableComponent.js +367 -0
- package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.css +63 -0
- package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.html +154 -0
- package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.js +348 -0
- package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.js-meta.xml +87 -0
- package/skills/generating-lwc-components/assets/form-component/formComponent.html +165 -0
- package/skills/generating-lwc-components/assets/form-component/formComponent.js +275 -0
- package/skills/generating-lwc-components/assets/graphql-component/graphqlComponent.html +100 -0
- package/skills/generating-lwc-components/assets/graphql-component/graphqlComponent.js +336 -0
- package/skills/generating-lwc-components/assets/jest-test/componentName.test.js.example +371 -0
- package/skills/generating-lwc-components/assets/message-channel/RecordSelected.messageChannel-meta.xml +71 -0
- package/skills/generating-lwc-components/assets/message-channel/lmsPublisher.js +103 -0
- package/skills/generating-lwc-components/assets/message-channel/lmsSubscriber.js +181 -0
- package/skills/generating-lwc-components/assets/modal-component/modalComponent.html +85 -0
- package/skills/generating-lwc-components/assets/modal-component/modalComponent.js +199 -0
- package/skills/generating-lwc-components/assets/record-picker/recordPicker.html +55 -0
- package/skills/generating-lwc-components/assets/record-picker/recordPicker.js +199 -0
- package/skills/generating-lwc-components/assets/state-store/store.js +282 -0
- package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.css +65 -0
- package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.html +95 -0
- package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.js-meta.xml +75 -0
- package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.test.ts.example +301 -0
- package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.ts +295 -0
- package/skills/generating-lwc-components/assets/workspace-api/workspaceComponent.html +71 -0
- package/skills/generating-lwc-components/assets/workspace-api/workspaceComponent.js +316 -0
- package/skills/generating-lwc-components/hooks/scripts/lwc-lsp-validate.py +295 -0
- package/skills/generating-lwc-components/hooks/scripts/post-tool-validate.py +347 -0
- package/skills/generating-lwc-components/hooks/scripts/slds_data/deprecated_patterns.json +74 -0
- package/skills/generating-lwc-components/hooks/scripts/slds_data/styling_hooks.json +111 -0
- package/skills/generating-lwc-components/hooks/scripts/slds_data/valid_slds_classes.json +127 -0
- package/skills/generating-lwc-components/hooks/scripts/slds_linter_wrapper.py +294 -0
- package/skills/generating-lwc-components/hooks/scripts/slds_rules/__init__.py +22 -0
- package/skills/generating-lwc-components/hooks/scripts/template_validator.py +332 -0
- package/skills/generating-lwc-components/hooks/scripts/validate_slds.py +595 -0
- package/skills/generating-lwc-components/references/accessibility-guide.md +843 -0
- package/skills/generating-lwc-components/references/advanced-features.md +108 -0
- package/skills/generating-lwc-components/references/async-notification-patterns.md +661 -0
- package/skills/generating-lwc-components/references/cli-commands.md +545 -0
- package/skills/generating-lwc-components/references/component-patterns.md +1476 -0
- package/skills/generating-lwc-components/references/flow-integration-guide.md +675 -0
- package/skills/generating-lwc-components/references/jest-testing.md +1011 -0
- package/skills/generating-lwc-components/references/lms-guide.md +860 -0
- package/skills/generating-lwc-components/references/lwc-best-practices.md +1310 -0
- package/skills/generating-lwc-components/references/performance-guide.md +861 -0
- package/skills/generating-lwc-components/references/scoring-and-testing.md +116 -0
- package/skills/generating-lwc-components/references/slds-blueprints.json +14389 -0
- package/skills/generating-lwc-components/references/slds-design-guide.md +166 -0
- package/skills/generating-lwc-components/references/state-management.md +642 -0
- package/skills/generating-lwc-components/references/template-anti-patterns.md +948 -0
- package/skills/generating-lwc-components/references/triangle-pattern.md +365 -0
- package/skills/generating-lwc-components/scripts/local-dev-preview.sh +34 -0
- package/skills/generating-mermaid-diagrams/CREDITS.md +46 -0
- package/skills/generating-mermaid-diagrams/README.md +114 -0
- package/skills/generating-mermaid-diagrams/SKILL.md +218 -0
- package/skills/generating-mermaid-diagrams/assets/agentforce/agent-flow.md +313 -0
- package/skills/generating-mermaid-diagrams/assets/architecture/system-landscape.md +351 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/b2b-commerce-erd.md +317 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/campaigns-erd.md +195 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/consent-erd.md +262 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/files-erd.md +266 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/forecasting-erd.md +261 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/fsl-erd.md +332 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/party-model-erd.md +237 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/quote-order-erd.md +277 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/revenue-cloud-erd.md +343 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/sales-cloud-erd.md +192 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/salesforce-erd.md +209 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/scheduler-erd.md +276 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/service-cloud-erd.md +217 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/territory-management-erd.md +241 -0
- package/skills/generating-mermaid-diagrams/assets/integration/api-sequence.md +387 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/authorization-code-pkce.md +197 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/authorization-code.md +152 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/client-credentials.md +233 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/device-authorization.md +295 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/jwt-bearer.md +256 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/refresh-token.md +281 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/user-agent-social-sign-on.md +281 -0
- package/skills/generating-mermaid-diagrams/assets/role-hierarchy/user-hierarchy.md +322 -0
- package/skills/generating-mermaid-diagrams/references/color-palette.md +464 -0
- package/skills/generating-mermaid-diagrams/references/diagram-conventions.md +313 -0
- package/skills/generating-mermaid-diagrams/references/erd-conventions.md +320 -0
- package/skills/generating-mermaid-diagrams/references/mermaid-reference.md +434 -0
- package/skills/generating-mermaid-diagrams/references/mermaid-styling.md +81 -0
- package/skills/generating-mermaid-diagrams/references/preview-guide.md +49 -0
- package/skills/generating-mermaid-diagrams/references/usage-examples.md +340 -0
- package/skills/generating-mermaid-diagrams/scripts/README.md +160 -0
- package/skills/generating-mermaid-diagrams/scripts/mermaid_preview.py +654 -0
- package/skills/generating-mermaid-diagrams/scripts/query-org-metadata.py +293 -0
- package/skills/generating-visual-diagrams/CREDITS.md +80 -0
- package/skills/generating-visual-diagrams/README.md +83 -0
- package/skills/generating-visual-diagrams/SKILL.md +208 -0
- package/skills/generating-visual-diagrams/assets/architecture/integration-flow.md +55 -0
- package/skills/generating-visual-diagrams/assets/erd/core-objects.md +131 -0
- package/skills/generating-visual-diagrams/assets/erd/custom-objects.md +60 -0
- package/skills/generating-visual-diagrams/assets/lwc/dashboard-card.md +45 -0
- package/skills/generating-visual-diagrams/assets/lwc/data-table.md +57 -0
- package/skills/generating-visual-diagrams/assets/lwc/record-form.md +60 -0
- package/skills/generating-visual-diagrams/assets/review/apex-review.md +57 -0
- package/skills/generating-visual-diagrams/assets/review/lwc-review.md +48 -0
- package/skills/generating-visual-diagrams/references/architect-aesthetic-guide.md +257 -0
- package/skills/generating-visual-diagrams/references/examples-index.md +35 -0
- package/skills/generating-visual-diagrams/references/gemini-cli-setup.md +65 -0
- package/skills/generating-visual-diagrams/references/interview-questions.md +529 -0
- package/skills/generating-visual-diagrams/references/iteration-workflow.md +173 -0
- package/skills/generating-visual-diagrams/scripts/check-prerequisites.sh +101 -0
- package/skills/generating-visual-diagrams/scripts/generate_image.py +243 -0
- package/skills/handling-sf-data/CREDITS.md +5 -0
- package/skills/handling-sf-data/README.md +112 -0
- package/skills/handling-sf-data/SKILL.md +235 -0
- package/skills/handling-sf-data/assets/bulk/bulk-insert-10000.apex +293 -0
- package/skills/handling-sf-data/assets/bulk/bulk-insert-200.apex +208 -0
- package/skills/handling-sf-data/assets/bulk/bulk-insert-500.apex +219 -0
- package/skills/handling-sf-data/assets/bulk/bulk-upsert-external-id.apex +324 -0
- package/skills/handling-sf-data/assets/cleanup/delete-by-created-date.apex +319 -0
- package/skills/handling-sf-data/assets/cleanup/delete-by-name.apex +240 -0
- package/skills/handling-sf-data/assets/cleanup/delete-test-data.apex +311 -0
- package/skills/handling-sf-data/assets/cleanup/rollback-transaction.apex +266 -0
- package/skills/handling-sf-data/assets/csv/account-import.csv +11 -0
- package/skills/handling-sf-data/assets/csv/contact-import.csv +11 -0
- package/skills/handling-sf-data/assets/csv/custom-object-import.csv +11 -0
- package/skills/handling-sf-data/assets/csv/opportunity-import.csv +11 -0
- package/skills/handling-sf-data/assets/factories/account-factory.apex +165 -0
- package/skills/handling-sf-data/assets/factories/case-factory.apex +237 -0
- package/skills/handling-sf-data/assets/factories/contact-factory.apex +168 -0
- package/skills/handling-sf-data/assets/factories/custom-object-factory.apex +260 -0
- package/skills/handling-sf-data/assets/factories/event-factory.apex +275 -0
- package/skills/handling-sf-data/assets/factories/hierarchy-factory.apex +372 -0
- package/skills/handling-sf-data/assets/factories/lead-factory.apex +190 -0
- package/skills/handling-sf-data/assets/factories/opportunity-factory.apex +206 -0
- package/skills/handling-sf-data/assets/factories/task-factory.apex +246 -0
- package/skills/handling-sf-data/assets/factories/user-factory.apex +278 -0
- package/skills/handling-sf-data/assets/json/account-contact-tree.json +130 -0
- package/skills/handling-sf-data/assets/json/account-opportunity-tree.json +110 -0
- package/skills/handling-sf-data/assets/json/full-hierarchy-tree.json +188 -0
- package/skills/handling-sf-data/assets/soql/aggregate.soql +226 -0
- package/skills/handling-sf-data/assets/soql/child-to-parent.soql +162 -0
- package/skills/handling-sf-data/assets/soql/parent-to-child.soql +153 -0
- package/skills/handling-sf-data/assets/soql/polymorphic.soql +198 -0
- package/skills/handling-sf-data/assets/soql/subquery.soql +287 -0
- package/skills/handling-sf-data/references/anonymous-apex-guide.md +98 -0
- package/skills/handling-sf-data/references/bulk-operations-guide.md +94 -0
- package/skills/handling-sf-data/references/bulk-testing-example.md +194 -0
- package/skills/handling-sf-data/references/cleanup-rollback-example.md +322 -0
- package/skills/handling-sf-data/references/cleanup-rollback-guide.md +84 -0
- package/skills/handling-sf-data/references/crud-workflow-example.md +183 -0
- package/skills/handling-sf-data/references/governor-limits-reference.md +74 -0
- package/skills/handling-sf-data/references/orchestration.md +174 -0
- package/skills/handling-sf-data/references/relationship-query-examples.md +249 -0
- package/skills/handling-sf-data/references/sf-cli-data-commands.md +158 -0
- package/skills/handling-sf-data/references/soql-relationship-guide.md +84 -0
- package/skills/handling-sf-data/references/test-data-best-practices.md +104 -0
- package/skills/handling-sf-data/references/test-data-factory-usage.md +290 -0
- package/skills/handling-sf-data/references/test-data-patterns.md +98 -0
- package/skills/handling-sf-data/scripts/soql_validator.py +292 -0
- package/skills/handling-sf-data/scripts/validate_data_operation.py +379 -0
- package/skills/harmonizing-datacloud/CREDITS.md +3 -0
- package/skills/harmonizing-datacloud/README.md +31 -0
- package/skills/harmonizing-datacloud/SKILL.md +117 -0
- package/skills/modeling-omnistudio-epc-catalog/CREDITS.md +14 -0
- package/skills/modeling-omnistudio-epc-catalog/README.md +89 -0
- package/skills/modeling-omnistudio-epc-catalog/SKILL.md +395 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/attribute-assignment-template.json +402 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/compiled-attribute-overrides-template.json +43 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/completion-block-template.txt +8 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/decomposition-relationships-template.json +233 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_AttributeAssignments.json +514 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_CompiledAttributeOverrides.json +21 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_DataPack.json +649 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_DecompositionRelationships.json +200 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ObjectFieldAttributes.json +138 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_OrchestrationScenarios.json +54 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_OverrideDefinitions.json +266 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ParentKeys.json +23 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_PriceListEntries.json +54 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_PricebookEntries.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ProductChildItems.json +34 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_RuleAssignments.json +21 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_AttributeAssignments.json +410 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_DataPack.json +535 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_DecompositionRelationships.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ObjectFieldAttributes.json +138 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_OrchestrationScenarios.json +28 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ParentKeys.json +23 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_PriceListEntries.json +220 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_PricebookEntries.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ProductChildItems.json +414 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_AttributeAssignments.json +382 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_DataPack.json +565 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_DecompositionRelationships.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ObjectFieldAttributes.json +104 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_OrchestrationScenarios.json +28 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ParentKeys.json +13 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_PriceListEntries.json +106 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_PricebookEntries.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ProductChildItems.json +72 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_AttributeAssignments.json +142 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_DataPack.json +377 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_DecompositionRelationships.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ObjectFieldAttributes.json +36 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ParentKeys.json +8 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_PriceListEntries.json +54 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_PricebookEntries.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ProductChildItems.json +34 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/object-field-attributes-template.json +138 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/orchestration-scenarios-template.json +54 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/override-definitions-template.json +134 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/parent-keys-template.json +29 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/price-list-entries-template.json +158 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/pricebook-entries-template.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/product-child-item-template.json +338 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/product2-offer-template.json +527 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/.gitkeep +1 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_AttributeAssignments.json +95 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_CompiledAttributeOverrides.json +1 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_DataPack.json +214 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_DecompositionRelationships.json +28 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ObjectFieldAttributes.json +98 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_OrchestrationScenarios.json +22 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_OverrideDefinitions.json +1 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ParentKeys.json +13 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_PriceListEntries.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_PricebookEntries.json +28 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ProductChildItems.json +110 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/TRANSCRIPT.md +58 -0
- package/skills/modeling-omnistudio-epc-catalog/references/epc-field-guide.md +90 -0
- package/skills/modeling-omnistudio-epc-catalog/references/naming-conventions.md +80 -0
- package/skills/modeling-omnistudio-epc-catalog/references/scoring-model.md +57 -0
- package/skills/modeling-omnistudio-epc-catalog/scripts/cli-validation-commands.sh +19 -0
- package/skills/modeling-omnistudio-epc-catalog/scripts/sample-invocations.sh +18 -0
- package/skills/orchestrating-datacloud/CREDITS.md +15 -0
- package/skills/orchestrating-datacloud/README.md +129 -0
- package/skills/orchestrating-datacloud/SKILL.md +236 -0
- package/skills/orchestrating-datacloud/UPSTREAM.md +45 -0
- package/skills/orchestrating-datacloud/assets/definitions/activation-target.template.json +5 -0
- package/skills/orchestrating-datacloud/assets/definitions/activation.template.json +7 -0
- package/skills/orchestrating-datacloud/assets/definitions/calculated-insight.template.json +7 -0
- package/skills/orchestrating-datacloud/assets/definitions/data-action-target.template.json +5 -0
- package/skills/orchestrating-datacloud/assets/definitions/data-action.template.json +5 -0
- package/skills/orchestrating-datacloud/assets/definitions/data-graph.template.json +21 -0
- package/skills/orchestrating-datacloud/assets/definitions/data-stream.template.json +55 -0
- package/skills/orchestrating-datacloud/assets/definitions/dmo.template.json +17 -0
- package/skills/orchestrating-datacloud/assets/definitions/identity-resolution.template.json +30 -0
- package/skills/orchestrating-datacloud/assets/definitions/mapping.template.json +14 -0
- package/skills/orchestrating-datacloud/assets/definitions/relationship.template.json +12 -0
- package/skills/orchestrating-datacloud/assets/definitions/search-index.template.json +9 -0
- package/skills/orchestrating-datacloud/assets/definitions/segment.template.json +16 -0
- package/skills/orchestrating-datacloud/references/feature-readiness.md +157 -0
- package/skills/orchestrating-datacloud/references/plugin-setup.md +140 -0
- package/skills/orchestrating-datacloud/scripts/bootstrap-plugin.sh +53 -0
- package/skills/orchestrating-datacloud/scripts/diagnose-org.mjs +511 -0
- package/skills/orchestrating-datacloud/scripts/generate-manifest.mjs +68 -0
- package/skills/orchestrating-datacloud/scripts/verify-plugin.sh +58 -0
- package/skills/preparing-datacloud/CREDITS.md +7 -0
- package/skills/preparing-datacloud/README.md +51 -0
- package/skills/preparing-datacloud/SKILL.md +191 -0
- package/skills/preparing-datacloud/examples/ingestion-api/.env.example +8 -0
- package/skills/preparing-datacloud/examples/ingestion-api/README.md +48 -0
- package/skills/preparing-datacloud/examples/ingestion-api/send-data.py +144 -0
- package/skills/querying-soql/CREDITS.md +21 -0
- package/skills/querying-soql/README.md +41 -0
- package/skills/querying-soql/SKILL.md +143 -0
- package/skills/querying-soql/assets/aggregate-queries.soql +242 -0
- package/skills/querying-soql/assets/basic-queries.soql +188 -0
- package/skills/querying-soql/assets/bulkified-query-pattern.cls +280 -0
- package/skills/querying-soql/assets/optimization-patterns.soql +259 -0
- package/skills/querying-soql/assets/relationship-queries.soql +203 -0
- package/skills/querying-soql/assets/selector-class.cls +219 -0
- package/skills/querying-soql/references/anti-patterns.md +348 -0
- package/skills/querying-soql/references/cli-commands.md +358 -0
- package/skills/querying-soql/references/field-coverage-rules.md +514 -0
- package/skills/querying-soql/references/query-optimization.md +142 -0
- package/skills/querying-soql/references/selector-patterns.md +479 -0
- package/skills/querying-soql/references/soql-reference.md +227 -0
- package/skills/querying-soql/references/soql-syntax-reference.md +208 -0
- package/skills/querying-soql/scripts/post-tool-validate.py +322 -0
- package/skills/retrieving-datacloud/CREDITS.md +7 -0
- package/skills/retrieving-datacloud/README.md +44 -0
- package/skills/retrieving-datacloud/SKILL.md +120 -0
- package/skills/retrieving-datacloud/examples/search-indexes/hybrid-structured.json +44 -0
- package/skills/retrieving-datacloud/examples/search-indexes/vector-knowledge.json +43 -0
- package/skills/running-apex-tests/CREDITS.md +22 -0
- package/skills/running-apex-tests/README.md +94 -0
- package/skills/running-apex-tests/SKILL.md +158 -0
- package/skills/running-apex-tests/assets/basic-test.cls +169 -0
- package/skills/running-apex-tests/assets/bulk-test.cls +255 -0
- package/skills/running-apex-tests/assets/dml-mock.cls +339 -0
- package/skills/running-apex-tests/assets/mock-callout-test.cls +353 -0
- package/skills/running-apex-tests/assets/stub-provider-example.cls +364 -0
- package/skills/running-apex-tests/assets/test-data-factory.cls +328 -0
- package/skills/running-apex-tests/hooks/scripts/parse-test-results.py +364 -0
- package/skills/running-apex-tests/references/cli-commands.md +289 -0
- package/skills/running-apex-tests/references/mocking-patterns.md +500 -0
- package/skills/running-apex-tests/references/performance-optimization.md +283 -0
- package/skills/running-apex-tests/references/test-fix-loop.md +49 -0
- package/skills/running-apex-tests/references/test-patterns.md +154 -0
- package/skills/running-apex-tests/references/testing-best-practices.md +509 -0
- package/skills/segmenting-datacloud/CREDITS.md +3 -0
- package/skills/segmenting-datacloud/README.md +36 -0
- package/skills/segmenting-datacloud/SKILL.md +115 -0
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
<!-- Parent: configuring-connected-apps/SKILL.md -->
|
|
2
|
+
# configuring-connected-apps Examples
|
|
3
|
+
|
|
4
|
+
Real-world examples of using the configuring-connected-apps skill.
|
|
5
|
+
|
|
6
|
+
## Example 1: Create a Basic API Integration Connected App
|
|
7
|
+
|
|
8
|
+
**Request**:
|
|
9
|
+
```
|
|
10
|
+
Use the configuring-connected-apps skill to create a Connected App named "DataSyncIntegration"
|
|
11
|
+
for syncing data with our external ERP system. It needs API access and refresh tokens.
|
|
12
|
+
Contact email: admin@company.com
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
**Generated Output**:
|
|
16
|
+
- `force-app/main/default/connectedApps/DataSyncIntegration.connectedApp-meta.xml`
|
|
17
|
+
|
|
18
|
+
```xml
|
|
19
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
20
|
+
<ConnectedApp xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
21
|
+
<label>DataSyncIntegration</label>
|
|
22
|
+
<contactEmail>admin@company.com</contactEmail>
|
|
23
|
+
<description>Data synchronization with external ERP system</description>
|
|
24
|
+
<oauthConfig>
|
|
25
|
+
<callbackUrl>https://erp.company.com/oauth/callback</callbackUrl>
|
|
26
|
+
<isAdminApproved>true</isAdminApproved>
|
|
27
|
+
<isConsumerSecretOptional>false</isConsumerSecretOptional>
|
|
28
|
+
<scopes>Api</scopes>
|
|
29
|
+
<scopes>RefreshToken</scopes>
|
|
30
|
+
</oauthConfig>
|
|
31
|
+
<oauthPolicy>
|
|
32
|
+
<ipRelaxation>ENFORCE</ipRelaxation>
|
|
33
|
+
<refreshTokenPolicy>infinite</refreshTokenPolicy>
|
|
34
|
+
</oauthPolicy>
|
|
35
|
+
</ConnectedApp>
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**Score**: 95/120 ⭐⭐⭐⭐
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Example 2: Create a JWT Bearer App for CI/CD
|
|
43
|
+
|
|
44
|
+
**Request**:
|
|
45
|
+
```
|
|
46
|
+
Create a Connected App for our CI/CD pipeline using JWT Bearer flow.
|
|
47
|
+
Name it "GitHubActionsDeployment" and use certificate "GH_Actions_Cert".
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**Generated Output**:
|
|
51
|
+
- `force-app/main/default/connectedApps/GitHubActionsDeployment.connectedApp-meta.xml`
|
|
52
|
+
|
|
53
|
+
```xml
|
|
54
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
55
|
+
<ConnectedApp xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
56
|
+
<label>GitHubActionsDeployment</label>
|
|
57
|
+
<contactEmail>devops@company.com</contactEmail>
|
|
58
|
+
<description>CI/CD deployment via GitHub Actions - JWT Bearer flow</description>
|
|
59
|
+
<oauthConfig>
|
|
60
|
+
<callbackUrl>https://localhost/oauth/callback</callbackUrl>
|
|
61
|
+
<certificate>GH_Actions_Cert</certificate>
|
|
62
|
+
<isAdminApproved>true</isAdminApproved>
|
|
63
|
+
<isConsumerSecretOptional>true</isConsumerSecretOptional>
|
|
64
|
+
<scopes>Api</scopes>
|
|
65
|
+
</oauthConfig>
|
|
66
|
+
<oauthPolicy>
|
|
67
|
+
<ipRelaxation>ENFORCE</ipRelaxation>
|
|
68
|
+
<refreshTokenPolicy>zero</refreshTokenPolicy>
|
|
69
|
+
</oauthPolicy>
|
|
70
|
+
</ConnectedApp>
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**Score**: 108/120 ⭐⭐⭐⭐⭐
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Example 3: Create a Mobile App with External Client App
|
|
78
|
+
|
|
79
|
+
**Request**:
|
|
80
|
+
```
|
|
81
|
+
Create an External Client App for our mobile app "FieldServiceMobile".
|
|
82
|
+
It needs PKCE enabled, refresh tokens, and should be packageable for distribution.
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**Generated Files**:
|
|
86
|
+
|
|
87
|
+
### 1. Header File: `FieldServiceMobile.eca-meta.xml`
|
|
88
|
+
```xml
|
|
89
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
90
|
+
<ExternalClientApplication xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
91
|
+
<contactEmail>mobile-team@company.com</contactEmail>
|
|
92
|
+
<description>Field Service mobile application for technicians</description>
|
|
93
|
+
<distributionState>Packageable</distributionState>
|
|
94
|
+
<isProtected>false</isProtected>
|
|
95
|
+
<label>FieldServiceMobile</label>
|
|
96
|
+
</ExternalClientApplication>
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### 2. Global OAuth: `FieldServiceMobile.ecaGlblOauth-meta.xml`
|
|
100
|
+
```xml
|
|
101
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
102
|
+
<ExtlClntAppGlobalOauthSettings xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
103
|
+
<callbackUrl>fieldservicemobile://oauth/callback</callbackUrl>
|
|
104
|
+
<externalClientApplication>FieldServiceMobile</externalClientApplication>
|
|
105
|
+
<isConsumerSecretOptional>true</isConsumerSecretOptional>
|
|
106
|
+
<isPkceRequired>true</isPkceRequired>
|
|
107
|
+
<label>Field Service Mobile Global OAuth</label>
|
|
108
|
+
<shouldRotateConsumerKey>true</shouldRotateConsumerKey>
|
|
109
|
+
<shouldRotateConsumerSecret>true</shouldRotateConsumerSecret>
|
|
110
|
+
</ExtlClntAppGlobalOauthSettings>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### 3. OAuth Settings: `FieldServiceMobile.ecaOauth-meta.xml`
|
|
114
|
+
```xml
|
|
115
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
116
|
+
<ExtlClntAppOauthSettings xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
117
|
+
<commaSeparatedOauthScopes>Api, RefreshToken, OpenID</commaSeparatedOauthScopes>
|
|
118
|
+
<externalClientApplication>FieldServiceMobile</externalClientApplication>
|
|
119
|
+
<label>Field Service Mobile OAuth Settings</label>
|
|
120
|
+
</ExtlClntAppOauthSettings>
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### 4. Optional OAuth Security Settings (retrieve-first)
|
|
124
|
+
```bash
|
|
125
|
+
sf project retrieve start \
|
|
126
|
+
--metadata ExtlClntAppOauthSecuritySettings:FieldServiceMobile \
|
|
127
|
+
--target-org my-devhub
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**Score**: 115/120 ⭐⭐⭐⭐⭐
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Example 4: Review Existing Connected Apps
|
|
135
|
+
|
|
136
|
+
**Request**:
|
|
137
|
+
```
|
|
138
|
+
Review and score my existing Connected Apps for security best practices.
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
**Process**:
|
|
142
|
+
1. Scan: `Glob: **/*.connectedApp-meta.xml`
|
|
143
|
+
2. Read each file
|
|
144
|
+
3. Validate against scoring criteria
|
|
145
|
+
4. Generate report
|
|
146
|
+
|
|
147
|
+
**Sample Report**:
|
|
148
|
+
```
|
|
149
|
+
📊 CONNECTED APP SECURITY REVIEW
|
|
150
|
+
════════════════════════════════════════════════════════════════
|
|
151
|
+
|
|
152
|
+
🔍 Apps Scanned: 3
|
|
153
|
+
📅 Review Date: 2025-01-15
|
|
154
|
+
|
|
155
|
+
┌────────────────────────────┬────────┬────────┬──────────────────┐
|
|
156
|
+
│ App Name │ Score │ Rating │ Critical Issues │
|
|
157
|
+
├────────────────────────────┼────────┼────────┼──────────────────┤
|
|
158
|
+
│ LegacyERPConnector │ 45/120 │ ⭐ │ 3 │
|
|
159
|
+
│ MobileAppV2 │ 82/120 │ ⭐⭐⭐ │ 0 │
|
|
160
|
+
│ DataSyncIntegration │ 95/120 │ ⭐⭐⭐⭐│ 0 │
|
|
161
|
+
└────────────────────────────┴────────┴────────┴──────────────────┘
|
|
162
|
+
|
|
163
|
+
🚨 CRITICAL ISSUES
|
|
164
|
+
|
|
165
|
+
LegacyERPConnector:
|
|
166
|
+
❌ Wildcard callback URL detected (https://*)
|
|
167
|
+
❌ Full scope granted (overly permissive)
|
|
168
|
+
❌ No IP restrictions configured
|
|
169
|
+
⚠️ Recommend: Migrate to External Client App
|
|
170
|
+
|
|
171
|
+
✅ RECOMMENDATIONS
|
|
172
|
+
|
|
173
|
+
1. LegacyERPConnector: URGENT - Fix security issues or migrate to ECA
|
|
174
|
+
2. MobileAppV2: Enable PKCE for mobile security
|
|
175
|
+
3. DataSyncIntegration: Consider enabling token rotation
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## Example 5: Migrate Connected App to External Client App
|
|
181
|
+
|
|
182
|
+
**Request**:
|
|
183
|
+
```
|
|
184
|
+
Migrate our "SalesPortal" Connected App to an External Client App for better security.
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
**Process**:
|
|
188
|
+
1. Read existing Connected App configuration
|
|
189
|
+
2. Map OAuth settings to ECA structure
|
|
190
|
+
3. Generate all required ECA files
|
|
191
|
+
4. Provide migration checklist
|
|
192
|
+
|
|
193
|
+
**Output**:
|
|
194
|
+
```
|
|
195
|
+
📦 MIGRATION PLAN: SalesPortal → External Client App
|
|
196
|
+
════════════════════════════════════════════════════════════════
|
|
197
|
+
|
|
198
|
+
📋 Source Configuration
|
|
199
|
+
Type: Connected App
|
|
200
|
+
OAuth Flow: Authorization Code
|
|
201
|
+
Scopes: Api, RefreshToken, OpenID
|
|
202
|
+
IP Policy: ENFORCE
|
|
203
|
+
|
|
204
|
+
📄 Files to Generate:
|
|
205
|
+
1. SalesPortalECA.eca-meta.xml
|
|
206
|
+
2. SalesPortalECA.ecaGlblOauth-meta.xml
|
|
207
|
+
3. SalesPortalECA.ecaOauth-meta.xml
|
|
208
|
+
4. (Optional) SalesPortalECA.ecaOauthSecurity-meta.xml after retrieve-first validation
|
|
209
|
+
|
|
210
|
+
🔄 Migration Steps:
|
|
211
|
+
1. ✓ Generate ECA metadata files
|
|
212
|
+
2. □ Deploy ECA to DevHub
|
|
213
|
+
3. □ Generate new Consumer Key/Secret
|
|
214
|
+
4. □ Update external application with new credentials
|
|
215
|
+
5. □ Test OAuth flow
|
|
216
|
+
6. □ Configure policies in subscriber orgs
|
|
217
|
+
7. □ Deactivate old Connected App
|
|
218
|
+
8. □ Monitor for 30 days before deletion
|
|
219
|
+
|
|
220
|
+
⚠️ Breaking Change: New Consumer Key/Secret required
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## Deployment Commands
|
|
226
|
+
|
|
227
|
+
### Deploy Connected App
|
|
228
|
+
```bash
|
|
229
|
+
sf project deploy start \
|
|
230
|
+
--source-dir force-app/main/default/connectedApps \
|
|
231
|
+
--target-org my-org
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
### Deploy External Client App
|
|
235
|
+
```bash
|
|
236
|
+
sf project deploy start \
|
|
237
|
+
--metadata ExternalClientApplication:MyECAName \
|
|
238
|
+
--metadata ExtlClntAppGlobalOauthSettings:MyECAName \
|
|
239
|
+
--metadata ExtlClntAppOauthSettings:MyECAName \
|
|
240
|
+
--target-org my-devhub
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### Retrieve Existing Apps
|
|
244
|
+
```bash
|
|
245
|
+
# Connected Apps
|
|
246
|
+
sf project retrieve start \
|
|
247
|
+
--metadata ConnectedApp:MyAppName \
|
|
248
|
+
--target-org my-org
|
|
249
|
+
|
|
250
|
+
# External Client Apps (header + companions)
|
|
251
|
+
sf project retrieve start \
|
|
252
|
+
--metadata ExternalClientApplication:MyECAName \
|
|
253
|
+
--metadata ExtlClntAppGlobalOauthSettings:MyECAName \
|
|
254
|
+
--metadata ExtlClntAppOauthSettings:MyECAName \
|
|
255
|
+
--target-org my-org
|
|
256
|
+
```
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
<!-- Parent: configuring-connected-apps/SKILL.md -->
|
|
2
|
+
# Migration Guide: Connected App → External Client App
|
|
3
|
+
|
|
4
|
+
Step-by-step guide for migrating from Connected Apps to External Client Apps (ECAs).
|
|
5
|
+
|
|
6
|
+
## Why Migrate?
|
|
7
|
+
|
|
8
|
+
| Feature | Connected App | External Client App |
|
|
9
|
+
|---------|--------------|---------------------|
|
|
10
|
+
| Metadata Compliance | Partial | Full |
|
|
11
|
+
| Secret in Sandboxes | Visible | Hidden |
|
|
12
|
+
| Key Rotation | Manual | Automated via API |
|
|
13
|
+
| Multi-Org Distribution | Manual recreation | Native 2GP packaging |
|
|
14
|
+
| Audit Logging | Limited | MFA + full audit |
|
|
15
|
+
| Security Model | Open by default | Closed by default |
|
|
16
|
+
|
|
17
|
+
**Migrate when**:
|
|
18
|
+
- Distributing to multiple orgs (ISV, enterprise)
|
|
19
|
+
- Compliance requires audit trails
|
|
20
|
+
- DevOps needs automated credential rotation
|
|
21
|
+
- Moving to 2GP packaging
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Migration Process
|
|
26
|
+
|
|
27
|
+
### Phase 1: Assessment
|
|
28
|
+
|
|
29
|
+
#### 1.1 Inventory Current Apps
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# List all Connected Apps
|
|
33
|
+
sf org list metadata --metadata-type ConnectedApp --target-org <org>
|
|
34
|
+
|
|
35
|
+
# Retrieve for analysis
|
|
36
|
+
sf project retrieve start --metadata ConnectedApp --output-dir ./migration-review
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
#### 1.2 Document Configuration
|
|
40
|
+
|
|
41
|
+
For each Connected App, record:
|
|
42
|
+
|
|
43
|
+
| Setting | Value |
|
|
44
|
+
|---------|-------|
|
|
45
|
+
| App Name | |
|
|
46
|
+
| Consumer Key | |
|
|
47
|
+
| OAuth Scopes | |
|
|
48
|
+
| Callback URLs | |
|
|
49
|
+
| IP Restrictions | |
|
|
50
|
+
| Token Policy | |
|
|
51
|
+
| Certificate (if JWT) | |
|
|
52
|
+
|
|
53
|
+
#### 1.3 Identify Integrations
|
|
54
|
+
|
|
55
|
+
List all systems using each Connected App:
|
|
56
|
+
- External applications
|
|
57
|
+
- CI/CD pipelines
|
|
58
|
+
- Third-party tools
|
|
59
|
+
- Mobile applications
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
### Phase 2: Planning
|
|
64
|
+
|
|
65
|
+
#### 2.1 Choose Distribution Model
|
|
66
|
+
|
|
67
|
+
| Scenario | Distribution State |
|
|
68
|
+
|----------|-------------------|
|
|
69
|
+
| Single org only | `Local` |
|
|
70
|
+
| Multiple orgs, same company | `Local` per org or `Packageable` |
|
|
71
|
+
| ISV/AppExchange | `Packageable` |
|
|
72
|
+
|
|
73
|
+
#### 2.2 Plan Credential Rollover
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
Timeline Example:
|
|
77
|
+
Week 1: Create ECA, deploy to DevHub
|
|
78
|
+
Week 2: Update integration systems with new credentials
|
|
79
|
+
Week 3: Test in sandbox environments
|
|
80
|
+
Week 4: Production cutover
|
|
81
|
+
Week 5-8: Monitor, keep old app active as fallback
|
|
82
|
+
Week 9: Deactivate Connected App
|
|
83
|
+
Week 12: Delete Connected App
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
### Phase 3: Create External Client App
|
|
89
|
+
|
|
90
|
+
#### 3.1 Prepare Scratch Org (if needed)
|
|
91
|
+
|
|
92
|
+
```json
|
|
93
|
+
// config/project-scratch-def.json
|
|
94
|
+
{
|
|
95
|
+
"orgName": "ECA Migration Dev",
|
|
96
|
+
"edition": "Developer",
|
|
97
|
+
"features": [
|
|
98
|
+
"ExternalClientApps",
|
|
99
|
+
"ExtlClntAppSecretExposeCtl"
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
#### 3.2 Create ECA Metadata Files
|
|
105
|
+
|
|
106
|
+
**File 1: Header** (`MyApp.eca-meta.xml`)
|
|
107
|
+
```xml
|
|
108
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
109
|
+
<ExternalClientApplication xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
110
|
+
<contactEmail>team@company.com</contactEmail>
|
|
111
|
+
<description>Migrated from Connected App: MyConnectedApp</description>
|
|
112
|
+
<distributionState>Local</distributionState>
|
|
113
|
+
<isProtected>false</isProtected>
|
|
114
|
+
<label>MyApp</label>
|
|
115
|
+
</ExternalClientApplication>
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
**File 2: Global OAuth** (`MyApp.ecaGlblOauth-meta.xml`)
|
|
119
|
+
```xml
|
|
120
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
121
|
+
<ExtlClntAppGlobalOauthSettings xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
122
|
+
<callbackUrl>https://app.example.com/oauth/callback</callbackUrl>
|
|
123
|
+
<externalClientApplication>MyApp</externalClientApplication>
|
|
124
|
+
<isConsumerSecretOptional>false</isConsumerSecretOptional>
|
|
125
|
+
<isPkceRequired>true</isPkceRequired>
|
|
126
|
+
<label>MyApp Global OAuth</label>
|
|
127
|
+
<shouldRotateConsumerKey>true</shouldRotateConsumerKey>
|
|
128
|
+
<shouldRotateConsumerSecret>true</shouldRotateConsumerSecret>
|
|
129
|
+
</ExtlClntAppGlobalOauthSettings>
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
**File 3: OAuth Settings** (`MyApp.ecaOauth-meta.xml`)
|
|
133
|
+
```xml
|
|
134
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
135
|
+
<ExtlClntAppOauthSettings xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
136
|
+
<commaSeparatedOauthScopes>Api, RefreshToken</commaSeparatedOauthScopes>
|
|
137
|
+
<externalClientApplication>MyApp</externalClientApplication>
|
|
138
|
+
<label>MyApp OAuth Settings</label>
|
|
139
|
+
</ExtlClntAppOauthSettings>
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
**Optional companion metadata (retrieve-first):** `MyApp.ecaOauthSecurity-meta.xml`
|
|
143
|
+
- Use this when you need to source-control ECA OAuth security settings now supported by the CLI/SDR registry.
|
|
144
|
+
- Recommended workflow: retrieve from an org first, then commit the retrieved file under `extlClntAppOauthSecuritySettings/`.
|
|
145
|
+
|
|
146
|
+
#### 3.3 Deploy to DevHub/Org
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
sf project deploy start \
|
|
150
|
+
--metadata ExternalClientApplication:MyApp \
|
|
151
|
+
--metadata ExtlClntAppGlobalOauthSettings:MyApp \
|
|
152
|
+
--metadata ExtlClntAppOauthSettings:MyApp \
|
|
153
|
+
--target-org <target-org>
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
#### 3.4 Retrieve New Consumer Key
|
|
157
|
+
|
|
158
|
+
After deployment:
|
|
159
|
+
1. Go to Setup → External Client App Manager
|
|
160
|
+
2. Select your ECA
|
|
161
|
+
3. View Consumer Key (MFA required)
|
|
162
|
+
4. Securely store credentials
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
### Phase 4: Update Integrations
|
|
167
|
+
|
|
168
|
+
#### 4.1 Update External Systems
|
|
169
|
+
|
|
170
|
+
For each integrated system:
|
|
171
|
+
|
|
172
|
+
1. Update OAuth endpoint (if different environment)
|
|
173
|
+
2. Replace Consumer Key
|
|
174
|
+
3. Replace Consumer Secret
|
|
175
|
+
4. Test authentication flow
|
|
176
|
+
5. Verify API access
|
|
177
|
+
|
|
178
|
+
#### 4.2 Configuration Mapping
|
|
179
|
+
|
|
180
|
+
| Connected App Setting | ECA Equivalent |
|
|
181
|
+
|----------------------|----------------|
|
|
182
|
+
| Consumer Key | New Consumer Key (different) |
|
|
183
|
+
| Consumer Secret | New Consumer Secret (different) |
|
|
184
|
+
| Callback URL | Same (in `ecaGlblOauth`) |
|
|
185
|
+
| Scopes | Same (in `ecaOauth`) |
|
|
186
|
+
| IP Relaxation | In `ecaPlcy` (admin-managed) |
|
|
187
|
+
| Refresh Token Policy | In `ecaPlcy` (admin-managed) |
|
|
188
|
+
| OAuth security controls | In `ecaOauthSecurity` when source-controlled (retrieve-first) |
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
### Phase 5: Testing
|
|
193
|
+
|
|
194
|
+
#### 5.1 Test Checklist
|
|
195
|
+
|
|
196
|
+
- [ ] Authorization Code flow works
|
|
197
|
+
- [ ] Token refresh works
|
|
198
|
+
- [ ] API calls succeed
|
|
199
|
+
- [ ] Scopes are correct
|
|
200
|
+
- [ ] Error handling works
|
|
201
|
+
- [ ] Logout/revocation works
|
|
202
|
+
|
|
203
|
+
#### 5.2 Test Script
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
# Test Authorization Code Flow
|
|
207
|
+
curl "https://login.salesforce.com/services/oauth2/authorize?\
|
|
208
|
+
response_type=code&\
|
|
209
|
+
client_id=<NEW_CONSUMER_KEY>&\
|
|
210
|
+
redirect_uri=<CALLBACK_URL>&\
|
|
211
|
+
scope=api%20refresh_token"
|
|
212
|
+
|
|
213
|
+
# Test Token Exchange
|
|
214
|
+
curl -X POST https://login.salesforce.com/services/oauth2/token \
|
|
215
|
+
-d "grant_type=authorization_code" \
|
|
216
|
+
-d "code=<AUTH_CODE>" \
|
|
217
|
+
-d "client_id=<NEW_CONSUMER_KEY>" \
|
|
218
|
+
-d "client_secret=<NEW_CONSUMER_SECRET>" \
|
|
219
|
+
-d "redirect_uri=<CALLBACK_URL>"
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
### Phase 6: Cutover
|
|
225
|
+
|
|
226
|
+
#### 6.1 Production Deployment
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
# Deploy ECA to production
|
|
230
|
+
sf project deploy start \
|
|
231
|
+
--metadata ExternalClientApplication:MyApp \
|
|
232
|
+
--metadata ExtlClntAppGlobalOauthSettings:MyApp \
|
|
233
|
+
--metadata ExtlClntAppOauthSettings:MyApp \
|
|
234
|
+
--target-org production
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
#### 6.2 Cutover Steps
|
|
238
|
+
|
|
239
|
+
1. Deploy ECA to production
|
|
240
|
+
2. Configure policies in Setup
|
|
241
|
+
3. Update production integrations
|
|
242
|
+
4. Monitor for errors
|
|
243
|
+
5. Keep Connected App active as fallback
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
### Phase 7: Decommission
|
|
248
|
+
|
|
249
|
+
#### 7.1 Deactivate Connected App
|
|
250
|
+
|
|
251
|
+
1. Go to Setup → Connected Apps → Manage Connected Apps
|
|
252
|
+
2. Select the old Connected App
|
|
253
|
+
3. Click "Edit Policies"
|
|
254
|
+
4. Set "Permitted Users" to "Admin approved users are pre-authorized"
|
|
255
|
+
5. Remove all user/profile assignments
|
|
256
|
+
|
|
257
|
+
#### 7.2 Monitor Period
|
|
258
|
+
|
|
259
|
+
- Monitor for 30 days minimum
|
|
260
|
+
- Check for authentication failures
|
|
261
|
+
- Investigate any traffic to old app
|
|
262
|
+
|
|
263
|
+
#### 7.3 Delete Connected App
|
|
264
|
+
|
|
265
|
+
After monitoring period:
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
# Remove from source control
|
|
269
|
+
rm force-app/main/default/connectedApps/OldApp.connectedApp-meta.xml
|
|
270
|
+
|
|
271
|
+
# Or delete via Setup UI
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## Rollback Plan
|
|
277
|
+
|
|
278
|
+
If migration fails:
|
|
279
|
+
|
|
280
|
+
1. **Immediate**: Revert external systems to old Consumer Key
|
|
281
|
+
2. **Short-term**: Keep Connected App active during transition
|
|
282
|
+
3. **Long-term**: Document issues and retry migration
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
## Common Issues
|
|
287
|
+
|
|
288
|
+
| Issue | Cause | Solution |
|
|
289
|
+
|-------|-------|----------|
|
|
290
|
+
| "Invalid consumer key" | Using old key | Update to new ECA key |
|
|
291
|
+
| "Callback URL mismatch" | URL not in ECA config | Add URL to `ecaGlblOauth` |
|
|
292
|
+
| "Scope not allowed" | Scope not in `ecaOauth` | Add required scope |
|
|
293
|
+
| "User not authorized" | No policy assignment | Assign user via Permission Set |
|
|
294
|
+
| "MFA required" | ECA security | Complete MFA challenge |
|
|
295
|
+
|
|
296
|
+
---
|
|
297
|
+
|
|
298
|
+
## Automation Script
|
|
299
|
+
|
|
300
|
+
```bash
|
|
301
|
+
#!/bin/bash
|
|
302
|
+
# migrate-connected-app.sh
|
|
303
|
+
|
|
304
|
+
APP_NAME=$1
|
|
305
|
+
TARGET_ORG=$2
|
|
306
|
+
|
|
307
|
+
echo "📦 Migrating Connected App: $APP_NAME"
|
|
308
|
+
|
|
309
|
+
# 1. Retrieve existing Connected App
|
|
310
|
+
sf project retrieve start \
|
|
311
|
+
--metadata "ConnectedApp:$APP_NAME" \
|
|
312
|
+
--target-org $TARGET_ORG \
|
|
313
|
+
--output-dir ./migration
|
|
314
|
+
|
|
315
|
+
# 2. Create ECA source directories
|
|
316
|
+
mkdir -p force-app/main/default/externalClientApps
|
|
317
|
+
mkdir -p force-app/main/default/extlClntAppGlobalOauthSets
|
|
318
|
+
mkdir -p force-app/main/default/extlClntAppOauthSettings
|
|
319
|
+
# Optional when you source-control security settings:
|
|
320
|
+
mkdir -p force-app/main/default/extlClntAppOauthSecuritySettings
|
|
321
|
+
|
|
322
|
+
# 3. Deploy ECA (assumes files are created)
|
|
323
|
+
sf project deploy start \
|
|
324
|
+
--source-dir force-app/main/default \
|
|
325
|
+
--target-org $TARGET_ORG
|
|
326
|
+
|
|
327
|
+
echo "✅ ECA deployed. Retrieve new Consumer Key from Setup."
|
|
328
|
+
```
|