@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,236 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
#
|
|
3
|
+
# configure-named-credential.sh
|
|
4
|
+
#
|
|
5
|
+
# Modern script to configure Enhanced Named Credentials with External Credentials
|
|
6
|
+
# Uses ConnectApi.NamedCredentials.createCredential() for secure credential storage
|
|
7
|
+
#
|
|
8
|
+
# PREREQUISITES:
|
|
9
|
+
# 1. External Credential metadata deployed (.externalCredential-meta.xml)
|
|
10
|
+
# 2. Named Credential metadata deployed (.namedCredential-meta.xml)
|
|
11
|
+
# 3. CSP Trusted Site OR Remote Site Setting deployed
|
|
12
|
+
#
|
|
13
|
+
# Usage:
|
|
14
|
+
# ./configure-named-credential.sh <external-credential-name> <principal-name> <org-alias>
|
|
15
|
+
#
|
|
16
|
+
# Example:
|
|
17
|
+
# ./configure-named-credential.sh VisualCrossingWeather weatherAPIKey AIZoom
|
|
18
|
+
#
|
|
19
|
+
# The script will:
|
|
20
|
+
# 1. Prompt for API key securely (won't echo to terminal)
|
|
21
|
+
# 2. Generate Apex code to configure the credential
|
|
22
|
+
# 3. Execute the Apex code to store the credential securely
|
|
23
|
+
#
|
|
24
|
+
|
|
25
|
+
set -e # Exit on error
|
|
26
|
+
|
|
27
|
+
# Colors for output
|
|
28
|
+
RED='\033[0;31m'
|
|
29
|
+
GREEN='\033[0;32m'
|
|
30
|
+
YELLOW='\033[1;33m'
|
|
31
|
+
BLUE='\033[0;34m'
|
|
32
|
+
CYAN='\033[0;36m'
|
|
33
|
+
NC='\033[0m' # No Color
|
|
34
|
+
|
|
35
|
+
# Usage function
|
|
36
|
+
usage() {
|
|
37
|
+
echo -e "${BLUE}Usage:${NC}"
|
|
38
|
+
echo " $0 <external-credential-name> <principal-name> <org-alias>"
|
|
39
|
+
echo ""
|
|
40
|
+
echo -e "${BLUE}Parameters:${NC}"
|
|
41
|
+
echo " external-credential-name - Developer name of the External Credential"
|
|
42
|
+
echo " principal-name - Principal name (from External Credential metadata)"
|
|
43
|
+
echo " org-alias - Org alias for deployment"
|
|
44
|
+
echo ""
|
|
45
|
+
echo -e "${BLUE}Example:${NC}"
|
|
46
|
+
echo " $0 VisualCrossingWeather weatherAPIKey AIZoom"
|
|
47
|
+
echo ""
|
|
48
|
+
echo -e "${BLUE}Available External Credentials in this project:${NC}"
|
|
49
|
+
find . -name "*.externalCredential-meta.xml" -type f 2>/dev/null | while read file; do
|
|
50
|
+
basename "$file" .externalCredential-meta.xml | sed 's/^/ - /'
|
|
51
|
+
done
|
|
52
|
+
echo ""
|
|
53
|
+
echo -e "${BLUE}Available Orgs:${NC}"
|
|
54
|
+
sf org list --json 2>/dev/null | jq -r '.result.nonScratchOrgs[]? | " - \(.alias // .username) (\(.username))"' 2>/dev/null || echo " Run 'sf org list' to see available orgs"
|
|
55
|
+
echo ""
|
|
56
|
+
echo -e "${CYAN}Order of Operations:${NC}"
|
|
57
|
+
echo " 1. Deploy External Credential metadata"
|
|
58
|
+
echo " 2. Deploy Named Credential metadata (references External Credential)"
|
|
59
|
+
echo " 3. Deploy CSP Trusted Site OR Remote Site Setting"
|
|
60
|
+
echo " 4. Run THIS script to set the API key"
|
|
61
|
+
exit 1
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
# Check arguments
|
|
65
|
+
if [ $# -ne 3 ]; then
|
|
66
|
+
echo -e "${RED}Error: Wrong number of arguments${NC}"
|
|
67
|
+
echo ""
|
|
68
|
+
usage
|
|
69
|
+
fi
|
|
70
|
+
|
|
71
|
+
EXTERNAL_CREDENTIAL_NAME=$1
|
|
72
|
+
PRINCIPAL_NAME=$2
|
|
73
|
+
ORG_ALIAS=$3
|
|
74
|
+
|
|
75
|
+
# Validate sf CLI is installed
|
|
76
|
+
if ! command -v sf &> /dev/null; then
|
|
77
|
+
echo -e "${RED}Error: Salesforce CLI (sf) is not installed${NC}"
|
|
78
|
+
echo "Install from: https://developer.salesforce.com/tools/salesforcecli"
|
|
79
|
+
exit 1
|
|
80
|
+
fi
|
|
81
|
+
|
|
82
|
+
# Banner
|
|
83
|
+
echo -e "${CYAN}"
|
|
84
|
+
cat << 'EOF'
|
|
85
|
+
╔══════════════════════════════════════════════════════════════╗
|
|
86
|
+
║ ║
|
|
87
|
+
║ Enhanced Named Credential Configuration Tool ║
|
|
88
|
+
║ ║
|
|
89
|
+
╚══════════════════════════════════════════════════════════════╝
|
|
90
|
+
EOF
|
|
91
|
+
echo -e "${NC}"
|
|
92
|
+
|
|
93
|
+
# Validate org exists
|
|
94
|
+
echo -e "${BLUE}► Validating org connection...${NC}"
|
|
95
|
+
if ! sf org display --target-org "$ORG_ALIAS" &> /dev/null; then
|
|
96
|
+
echo -e "${RED}✗ Cannot connect to org '$ORG_ALIAS'${NC}"
|
|
97
|
+
echo "Run: sf org list"
|
|
98
|
+
exit 1
|
|
99
|
+
fi
|
|
100
|
+
|
|
101
|
+
echo -e "${GREEN}✓ Connected to org: $ORG_ALIAS${NC}"
|
|
102
|
+
echo ""
|
|
103
|
+
|
|
104
|
+
# Verify External Credential exists
|
|
105
|
+
echo -e "${BLUE}► Checking External Credential...${NC}"
|
|
106
|
+
EXT_CRED_CHECK=$(sf data query \
|
|
107
|
+
--query "SELECT Id, DeveloperName FROM ExternalCredential WHERE DeveloperName = '$EXTERNAL_CREDENTIAL_NAME' LIMIT 1" \
|
|
108
|
+
--target-org "$ORG_ALIAS" \
|
|
109
|
+
--json 2>&1 || echo '{"status":1}')
|
|
110
|
+
|
|
111
|
+
EXT_CRED_ID=$(echo "$EXT_CRED_CHECK" | jq -r '.result.records[0].Id // empty' 2>/dev/null)
|
|
112
|
+
|
|
113
|
+
if [ -z "$EXT_CRED_ID" ]; then
|
|
114
|
+
echo -e "${RED}✗ External Credential '$EXTERNAL_CREDENTIAL_NAME' not found${NC}"
|
|
115
|
+
echo ""
|
|
116
|
+
echo "Deploy it first:"
|
|
117
|
+
echo " sf project deploy start --source-dir force-app/main/default/externalCredentials/${EXTERNAL_CREDENTIAL_NAME}.externalCredential-meta.xml --target-org $ORG_ALIAS"
|
|
118
|
+
exit 1
|
|
119
|
+
fi
|
|
120
|
+
|
|
121
|
+
echo -e "${GREEN}✓ Found External Credential (ID: $EXT_CRED_ID)${NC}"
|
|
122
|
+
echo ""
|
|
123
|
+
|
|
124
|
+
# Prompt for API key (securely - won't echo to terminal)
|
|
125
|
+
echo -e "${YELLOW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
126
|
+
echo -e "${YELLOW}Enter API Key for '$EXTERNAL_CREDENTIAL_NAME'${NC}"
|
|
127
|
+
echo -e "${YELLOW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
128
|
+
echo ""
|
|
129
|
+
echo -e "${BLUE}API Key (input hidden):${NC}"
|
|
130
|
+
read -s API_KEY
|
|
131
|
+
echo ""
|
|
132
|
+
|
|
133
|
+
if [ -z "$API_KEY" ]; then
|
|
134
|
+
echo -e "${RED}Error: API key cannot be empty${NC}"
|
|
135
|
+
exit 1
|
|
136
|
+
fi
|
|
137
|
+
|
|
138
|
+
echo -e "${GREEN}✓ API key received${NC}"
|
|
139
|
+
echo ""
|
|
140
|
+
|
|
141
|
+
# Generate Apex code to configure credential
|
|
142
|
+
echo -e "${BLUE}► Generating Apex code to configure credential...${NC}"
|
|
143
|
+
|
|
144
|
+
TEMP_APEX=$(mktemp /tmp/set-credential-XXXXXX.apex)
|
|
145
|
+
|
|
146
|
+
cat > "$TEMP_APEX" << EOF
|
|
147
|
+
// Auto-generated by configure-named-credential.sh
|
|
148
|
+
// Configures External Credential: $EXTERNAL_CREDENTIAL_NAME
|
|
149
|
+
|
|
150
|
+
// Define the new credential input
|
|
151
|
+
ConnectApi.CredentialInput newCredentials = new ConnectApi.CredentialInput();
|
|
152
|
+
|
|
153
|
+
// Specify the External Credential
|
|
154
|
+
newCredentials.externalCredential = '$EXTERNAL_CREDENTIAL_NAME';
|
|
155
|
+
|
|
156
|
+
// Set authentication protocol
|
|
157
|
+
newCredentials.authenticationProtocol = ConnectApi.CredentialAuthenticationProtocol.Custom;
|
|
158
|
+
|
|
159
|
+
// Define the principal
|
|
160
|
+
newCredentials.principalType = ConnectApi.CredentialPrincipalType.NamedPrincipal;
|
|
161
|
+
newCredentials.principalName = '$PRINCIPAL_NAME';
|
|
162
|
+
|
|
163
|
+
// Create credentials map
|
|
164
|
+
Map<String, ConnectApi.CredentialValueInput> creds = new Map<String, ConnectApi.CredentialValueInput>();
|
|
165
|
+
|
|
166
|
+
// Create API key parameter
|
|
167
|
+
ConnectApi.CredentialValueInput apiKeyParam = new ConnectApi.CredentialValueInput();
|
|
168
|
+
apiKeyParam.encrypted = true; // Required for security
|
|
169
|
+
apiKeyParam.value = '$API_KEY';
|
|
170
|
+
|
|
171
|
+
// Add to credentials map
|
|
172
|
+
creds.put('apiKey', apiKeyParam);
|
|
173
|
+
|
|
174
|
+
// Assign to credential input
|
|
175
|
+
newCredentials.credentials = creds;
|
|
176
|
+
|
|
177
|
+
try {
|
|
178
|
+
// Create the credential (first-time setup)
|
|
179
|
+
ConnectApi.NamedCredentials.createCredential(newCredentials);
|
|
180
|
+
System.debug('✓ External Credential configured successfully!');
|
|
181
|
+
System.debug('Principal: $PRINCIPAL_NAME');
|
|
182
|
+
} catch (Exception e) {
|
|
183
|
+
// If already exists, try patching instead
|
|
184
|
+
if (e.getMessage().contains('already exists')) {
|
|
185
|
+
try {
|
|
186
|
+
ConnectApi.NamedCredentials.patchCredential(newCredentials);
|
|
187
|
+
System.debug('✓ External Credential updated successfully!');
|
|
188
|
+
System.debug('Principal: $PRINCIPAL_NAME');
|
|
189
|
+
} catch (Exception e2) {
|
|
190
|
+
System.debug('✗ Error updating credential: ' + e2.getMessage());
|
|
191
|
+
throw e2;
|
|
192
|
+
}
|
|
193
|
+
} else {
|
|
194
|
+
System.debug('✗ Error creating credential: ' + e.getMessage());
|
|
195
|
+
throw e;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
EOF
|
|
199
|
+
|
|
200
|
+
echo -e "${GREEN}✓ Apex code generated${NC}"
|
|
201
|
+
echo ""
|
|
202
|
+
|
|
203
|
+
# Execute Apex code
|
|
204
|
+
echo -e "${BLUE}► Executing Apex code to configure credential...${NC}"
|
|
205
|
+
|
|
206
|
+
APEX_RESULT=$(sf apex run --file "$TEMP_APEX" --target-org "$ORG_ALIAS" 2>&1)
|
|
207
|
+
|
|
208
|
+
# Check if successful
|
|
209
|
+
if echo "$APEX_RESULT" | grep -q "✓ External Credential"; then
|
|
210
|
+
echo -e "${GREEN}✓ Credential configured successfully!${NC}"
|
|
211
|
+
|
|
212
|
+
# Cleanup temp file
|
|
213
|
+
rm -f "$TEMP_APEX"
|
|
214
|
+
|
|
215
|
+
echo ""
|
|
216
|
+
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
217
|
+
echo -e "${GREEN}✓ Configuration Complete!${NC}"
|
|
218
|
+
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
219
|
+
echo ""
|
|
220
|
+
echo -e "${BLUE}What was configured:${NC}"
|
|
221
|
+
echo " • External Credential: $EXTERNAL_CREDENTIAL_NAME"
|
|
222
|
+
echo " • Principal: $PRINCIPAL_NAME"
|
|
223
|
+
echo " • Org: $ORG_ALIAS"
|
|
224
|
+
echo ""
|
|
225
|
+
echo -e "${BLUE}You can now use the Named Credential in your callouts!${NC}"
|
|
226
|
+
echo ""
|
|
227
|
+
else
|
|
228
|
+
echo -e "${RED}✗ Failed to configure credential${NC}"
|
|
229
|
+
echo ""
|
|
230
|
+
echo -e "${YELLOW}Apex execution output:${NC}"
|
|
231
|
+
echo "$APEX_RESULT"
|
|
232
|
+
echo ""
|
|
233
|
+
echo -e "${YELLOW}Temp Apex file saved at: $TEMP_APEX${NC}"
|
|
234
|
+
echo "Review the file and run manually if needed"
|
|
235
|
+
exit 1
|
|
236
|
+
fi
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
#
|
|
3
|
+
# set-api-credential.sh
|
|
4
|
+
#
|
|
5
|
+
# Simple script to set API credentials programmatically using Custom Settings
|
|
6
|
+
# Alternative to Named Credentials that allows full automation
|
|
7
|
+
#
|
|
8
|
+
# Usage:
|
|
9
|
+
# ./set-api-credential.sh <setting-name> <api-key> <org-alias>
|
|
10
|
+
#
|
|
11
|
+
# Example:
|
|
12
|
+
# ./set-api-credential.sh BlandAI sk_live_abc123 AIZoom
|
|
13
|
+
#
|
|
14
|
+
# For Named Credentials, use this to store the API key in a Custom Setting,
|
|
15
|
+
# then reference it in your Apex code
|
|
16
|
+
#
|
|
17
|
+
|
|
18
|
+
set -e
|
|
19
|
+
|
|
20
|
+
# Colors
|
|
21
|
+
RED='\033[0;31m'
|
|
22
|
+
GREEN='\033[0;32m'
|
|
23
|
+
YELLOW='\033[1;33m'
|
|
24
|
+
BLUE='\033[0;34m'
|
|
25
|
+
NC='\033[0m'
|
|
26
|
+
|
|
27
|
+
usage() {
|
|
28
|
+
echo -e "${BLUE}Usage:${NC}"
|
|
29
|
+
echo " $0 <setting-name> <api-key> <org-alias>"
|
|
30
|
+
echo ""
|
|
31
|
+
echo -e "${BLUE}Example:${NC}"
|
|
32
|
+
echo " $0 BlandAI sk_live_abc123xyz AIZoom"
|
|
33
|
+
echo ""
|
|
34
|
+
echo -e "${BLUE}Or use secure input (recommended):${NC}"
|
|
35
|
+
echo " $0 BlandAI - AIZoom"
|
|
36
|
+
echo " (Script will prompt for API key securely)"
|
|
37
|
+
exit 1
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if [ $# -ne 3 ]; then
|
|
41
|
+
usage
|
|
42
|
+
fi
|
|
43
|
+
|
|
44
|
+
SETTING_NAME=$1
|
|
45
|
+
API_KEY=$2
|
|
46
|
+
ORG_ALIAS=$3
|
|
47
|
+
|
|
48
|
+
# If API key is "-", prompt securely
|
|
49
|
+
if [ "$API_KEY" = "-" ]; then
|
|
50
|
+
echo -e "${YELLOW}Enter API key (input hidden):${NC}"
|
|
51
|
+
read -s API_KEY
|
|
52
|
+
echo ""
|
|
53
|
+
fi
|
|
54
|
+
|
|
55
|
+
# Validate inputs
|
|
56
|
+
if [ -z "$API_KEY" ]; then
|
|
57
|
+
echo -e "${RED}Error: API key cannot be empty${NC}"
|
|
58
|
+
exit 1
|
|
59
|
+
fi
|
|
60
|
+
|
|
61
|
+
# Validate org
|
|
62
|
+
echo -e "${BLUE}Validating org connection...${NC}"
|
|
63
|
+
if ! sf org display --target-org "$ORG_ALIAS" &> /dev/null; then
|
|
64
|
+
echo -e "${RED}Error: Cannot connect to org '$ORG_ALIAS'${NC}"
|
|
65
|
+
exit 1
|
|
66
|
+
fi
|
|
67
|
+
|
|
68
|
+
echo -e "${GREEN}✓ Connected to org: $ORG_ALIAS${NC}"
|
|
69
|
+
|
|
70
|
+
# Check if Custom Setting exists
|
|
71
|
+
echo -e "${BLUE}Checking for API_Credentials__c Custom Setting...${NC}"
|
|
72
|
+
|
|
73
|
+
SETTING_CHECK=$(sf data query \
|
|
74
|
+
--query "SELECT Id FROM API_Credentials__c WHERE Name = '$SETTING_NAME' LIMIT 1" \
|
|
75
|
+
--target-org "$ORG_ALIAS" \
|
|
76
|
+
--json 2>&1 || echo '{"status":1}')
|
|
77
|
+
|
|
78
|
+
if echo "$SETTING_CHECK" | grep -q "sObject type 'API_Credentials__c' is not supported"; then
|
|
79
|
+
echo -e "${YELLOW}⚠️ API_Credentials__c Custom Setting not found${NC}"
|
|
80
|
+
echo ""
|
|
81
|
+
echo -e "${BLUE}Creating Custom Setting...${NC}"
|
|
82
|
+
|
|
83
|
+
# Create the Custom Setting metadata
|
|
84
|
+
mkdir -p force-app/main/default/objects/API_Credentials__c
|
|
85
|
+
|
|
86
|
+
cat > force-app/main/default/objects/API_Credentials__c/API_Credentials__c.object-meta.xml << 'EOF'
|
|
87
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
88
|
+
<CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
89
|
+
<customSettingsType>Hierarchy</customSettingsType>
|
|
90
|
+
<enableFeeds>false</enableFeeds>
|
|
91
|
+
<label>API Credentials</label>
|
|
92
|
+
<visibility>Protected</visibility>
|
|
93
|
+
</CustomObject>
|
|
94
|
+
EOF
|
|
95
|
+
|
|
96
|
+
cat > force-app/main/default/objects/API_Credentials__c/fields/API_Key__c.field-meta.xml << 'EOF'
|
|
97
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
98
|
+
<CustomField xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
99
|
+
<fullName>API_Key__c</fullName>
|
|
100
|
+
<label>API Key</label>
|
|
101
|
+
<type>Text</type>
|
|
102
|
+
<length>255</length>
|
|
103
|
+
<required>false</required>
|
|
104
|
+
</CustomField>
|
|
105
|
+
EOF
|
|
106
|
+
|
|
107
|
+
echo -e "${BLUE}Deploying Custom Setting...${NC}"
|
|
108
|
+
sf project deploy start \
|
|
109
|
+
--source-dir force-app/main/default/objects/API_Credentials__c \
|
|
110
|
+
--target-org "$ORG_ALIAS" \
|
|
111
|
+
--wait 10
|
|
112
|
+
|
|
113
|
+
echo -e "${GREEN}✓ Custom Setting created${NC}"
|
|
114
|
+
fi
|
|
115
|
+
|
|
116
|
+
# Insert or update the credential
|
|
117
|
+
EXISTING_ID=$(echo "$SETTING_CHECK" | jq -r '.result.records[0].Id // empty' 2>/dev/null)
|
|
118
|
+
|
|
119
|
+
if [ -z "$EXISTING_ID" ]; then
|
|
120
|
+
echo -e "${BLUE}Creating new credential record...${NC}"
|
|
121
|
+
sf data create record \
|
|
122
|
+
--sobject API_Credentials__c \
|
|
123
|
+
--values "Name='$SETTING_NAME' API_Key__c='$API_KEY'" \
|
|
124
|
+
--target-org "$ORG_ALIAS"
|
|
125
|
+
echo -e "${GREEN}✓ Credential created${NC}"
|
|
126
|
+
else
|
|
127
|
+
echo -e "${BLUE}Updating existing credential...${NC}"
|
|
128
|
+
sf data update record \
|
|
129
|
+
--sobject API_Credentials__c \
|
|
130
|
+
--record-id "$EXISTING_ID" \
|
|
131
|
+
--values "API_Key__c='$API_KEY'" \
|
|
132
|
+
--target-org "$ORG_ALIAS"
|
|
133
|
+
echo -e "${GREEN}✓ Credential updated${NC}"
|
|
134
|
+
fi
|
|
135
|
+
|
|
136
|
+
echo ""
|
|
137
|
+
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
138
|
+
echo -e "${GREEN}✓ API Credential configured successfully!${NC}"
|
|
139
|
+
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
140
|
+
echo ""
|
|
141
|
+
echo -e "${BLUE}How to use in Apex:${NC}"
|
|
142
|
+
echo ""
|
|
143
|
+
echo -e "${YELLOW}API_Credentials__c cred = API_Credentials__c.getInstance('$SETTING_NAME');${NC}"
|
|
144
|
+
echo -e "${YELLOW}String apiKey = cred.API_Key__c;${NC}"
|
|
145
|
+
echo -e "${YELLOW}req.setHeader('Authorization', apiKey);${NC}"
|
|
146
|
+
echo ""
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
#
|
|
3
|
+
# Setup Credentials Template with CSP Trusted Sites / Remote Site Settings
|
|
4
|
+
#
|
|
5
|
+
# TEMPLATE FOR CREATING NEW INTEGRATION SKILLS
|
|
6
|
+
#
|
|
7
|
+
# This template includes automatic deployment of endpoint security
|
|
8
|
+
# (CSP Trusted Sites or Remote Site Settings) along with credential configuration.
|
|
9
|
+
#
|
|
10
|
+
# How to use this template:
|
|
11
|
+
# 1. Copy to your skill: cp scripts/templates/setup-credentials-with-csp.sh my-skill/scripts/setup-credentials.sh
|
|
12
|
+
# 2. Replace all {{PLACEHOLDERS}} with your values
|
|
13
|
+
# 3. Create corresponding .cspTrustedSite-meta.xml and .remoteSite-meta.xml in assets/
|
|
14
|
+
# 4. Test with your API
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
set -e
|
|
18
|
+
|
|
19
|
+
# Colors
|
|
20
|
+
RED='\033[0;31m'
|
|
21
|
+
GREEN='\033[0;32m'
|
|
22
|
+
YELLOW='\033[1;33m'
|
|
23
|
+
BLUE='\033[0;34m'
|
|
24
|
+
CYAN='\033[0;36m'
|
|
25
|
+
NC='\033[0m'
|
|
26
|
+
|
|
27
|
+
# Configuration - REPLACE THESE
|
|
28
|
+
SKILL_NAME="{{SkillName}}" # e.g., "Bland.ai", "Stripe", "Twilio"
|
|
29
|
+
CUSTOM_SETTING_NAME="{{SettingName}}" # e.g., "BlandAI", "StripeAPI", "TwilioAPI"
|
|
30
|
+
CSP_NAME="{{CSPName}}" # e.g., "BlandAPI", "StripeAPI", "TwilioAPI"
|
|
31
|
+
API_KEY_URL="{{APIKeyURL}}" # e.g., "https://app.bland.ai/settings/api"
|
|
32
|
+
|
|
33
|
+
# Banner
|
|
34
|
+
echo -e "${CYAN}"
|
|
35
|
+
cat << EOF
|
|
36
|
+
╔══════════════════════════════════════════════════════════════╗
|
|
37
|
+
║ ║
|
|
38
|
+
║ ${SKILL_NAME} Integration - Credential Setup ║
|
|
39
|
+
║ ║
|
|
40
|
+
╚══════════════════════════════════════════════════════════════╝
|
|
41
|
+
EOF
|
|
42
|
+
echo -e "${NC}"
|
|
43
|
+
|
|
44
|
+
# Usage
|
|
45
|
+
usage() {
|
|
46
|
+
echo -e "${BLUE}Usage:${NC}"
|
|
47
|
+
echo " $0 <org-alias>"
|
|
48
|
+
echo ""
|
|
49
|
+
echo -e "${BLUE}Example:${NC}"
|
|
50
|
+
echo " $0 AIZoom"
|
|
51
|
+
echo ""
|
|
52
|
+
echo -e "${YELLOW}Get your ${SKILL_NAME} API key at:${NC}"
|
|
53
|
+
echo -e " ${CYAN}${API_KEY_URL}${NC}"
|
|
54
|
+
exit 1
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if [ $# -ne 1 ]; then
|
|
58
|
+
echo -e "${RED}Error: Missing org alias${NC}"
|
|
59
|
+
echo ""
|
|
60
|
+
usage
|
|
61
|
+
fi
|
|
62
|
+
|
|
63
|
+
ORG_ALIAS=$1
|
|
64
|
+
|
|
65
|
+
# Validate sf CLI
|
|
66
|
+
if ! command -v sf &> /dev/null; then
|
|
67
|
+
echo -e "${RED}Error: Salesforce CLI (sf) is not installed${NC}"
|
|
68
|
+
exit 1
|
|
69
|
+
fi
|
|
70
|
+
|
|
71
|
+
# Validate org
|
|
72
|
+
echo -e "${BLUE}► Validating org connection...${NC}"
|
|
73
|
+
if ! sf org display --target-org "$ORG_ALIAS" &> /dev/null; then
|
|
74
|
+
echo -e "${RED}✗ Cannot connect to org '$ORG_ALIAS'${NC}"
|
|
75
|
+
exit 1
|
|
76
|
+
fi
|
|
77
|
+
echo -e "${GREEN}✓ Connected to org: $ORG_ALIAS${NC}"
|
|
78
|
+
echo ""
|
|
79
|
+
|
|
80
|
+
# Get API key
|
|
81
|
+
echo -e "${YELLOW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
82
|
+
echo -e "${YELLOW}Enter your ${SKILL_NAME} API key${NC}"
|
|
83
|
+
echo -e "${CYAN}Get it from: ${API_KEY_URL}${NC}"
|
|
84
|
+
echo -e "${YELLOW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
85
|
+
echo ""
|
|
86
|
+
echo -e "${BLUE}API Key (input hidden):${NC}"
|
|
87
|
+
read -s API_KEY
|
|
88
|
+
echo ""
|
|
89
|
+
|
|
90
|
+
if [ -z "$API_KEY" ]; then
|
|
91
|
+
echo -e "${RED}Error: API key cannot be empty${NC}"
|
|
92
|
+
exit 1
|
|
93
|
+
fi
|
|
94
|
+
|
|
95
|
+
echo -e "${GREEN}✓ API key received${NC}"
|
|
96
|
+
echo ""
|
|
97
|
+
|
|
98
|
+
# Configure Custom Setting (same logic as before)
|
|
99
|
+
echo -e "${BLUE}► Checking for API_Credentials__c Custom Setting...${NC}"
|
|
100
|
+
# ... [rest of Custom Setting logic - same as bland-ai-calls] ...
|
|
101
|
+
|
|
102
|
+
# Configure CSP Trusted Site / Remote Site Settings
|
|
103
|
+
echo -e "${BLUE}► Configuring endpoint security (CSP Trusted Sites)...${NC}"
|
|
104
|
+
|
|
105
|
+
CSP_CHECK=$(sf data query \
|
|
106
|
+
--query "SELECT Id FROM CspTrustedSite WHERE DeveloperName = '${CSP_NAME}' LIMIT 1" \
|
|
107
|
+
--target-org "$ORG_ALIAS" \
|
|
108
|
+
--json 2>&1 || echo '{"status":1}')
|
|
109
|
+
|
|
110
|
+
if echo "$CSP_CHECK" | grep -q "sObject type 'CspTrustedSite' is not supported"; then
|
|
111
|
+
# Fallback to Remote Site Settings
|
|
112
|
+
echo -e "${YELLOW}⚠ CSP Trusted Sites not supported. Using Remote Site Settings...${NC}"
|
|
113
|
+
|
|
114
|
+
REMOTE_SITE_CHECK=$(sf data query \
|
|
115
|
+
--query "SELECT Id FROM RemoteSiteSetting WHERE SiteName = '${CSP_NAME}' LIMIT 1" \
|
|
116
|
+
--target-org "$ORG_ALIAS" \
|
|
117
|
+
--json 2>&1 || echo '{"status":1}')
|
|
118
|
+
|
|
119
|
+
REMOTE_SITE_ID=$(echo "$REMOTE_SITE_CHECK" | jq -r '.result.records[0].Id // empty' 2>/dev/null)
|
|
120
|
+
|
|
121
|
+
if [ -z "$REMOTE_SITE_ID" ]; then
|
|
122
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
123
|
+
SKILL_DIR="$(dirname "$SCRIPT_DIR")"
|
|
124
|
+
|
|
125
|
+
sf project deploy start \
|
|
126
|
+
--source-dir "$SKILL_DIR/assets/${CSP_NAME}.remoteSite-meta.xml" \
|
|
127
|
+
--target-org "$ORG_ALIAS" \
|
|
128
|
+
--wait 5 > /dev/null 2>&1 || true
|
|
129
|
+
|
|
130
|
+
echo -e "${GREEN}✓ Remote Site Setting configured${NC}"
|
|
131
|
+
else
|
|
132
|
+
echo -e "${GREEN}✓ Remote Site Setting already exists${NC}"
|
|
133
|
+
fi
|
|
134
|
+
else
|
|
135
|
+
CSP_ID=$(echo "$CSP_CHECK" | jq -r '.result.records[0].Id // empty' 2>/dev/null)
|
|
136
|
+
|
|
137
|
+
if [ -z "$CSP_ID" ]; then
|
|
138
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
139
|
+
SKILL_DIR="$(dirname "$SCRIPT_DIR")"
|
|
140
|
+
|
|
141
|
+
sf project deploy start \
|
|
142
|
+
--source-dir "$SKILL_DIR/assets/${CSP_NAME}.cspTrustedSite-meta.xml" \
|
|
143
|
+
--target-org "$ORG_ALIAS" \
|
|
144
|
+
--wait 5 > /dev/null 2>&1 || true
|
|
145
|
+
|
|
146
|
+
echo -e "${GREEN}✓ CSP Trusted Site configured${NC}"
|
|
147
|
+
else
|
|
148
|
+
echo -e "${GREEN}✓ CSP Trusted Site already exists${NC}"
|
|
149
|
+
fi
|
|
150
|
+
fi
|
|
151
|
+
|
|
152
|
+
echo ""
|
|
153
|
+
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
154
|
+
echo -e "${GREEN}✓ ${SKILL_NAME} integration configured successfully!${NC}"
|
|
155
|
+
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
156
|
+
echo ""
|
|
157
|
+
|
|
158
|
+
echo -e "${BLUE}🎉 Setup complete!${NC}"
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# configuring-connected-apps
|
|
2
|
+
|
|
3
|
+
Salesforce Connected Apps & External Client Apps skill for Claude Code.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
This skill helps you create and manage:
|
|
8
|
+
|
|
9
|
+
- **Connected Apps**: Traditional OAuth-enabled applications for Salesforce integration
|
|
10
|
+
- **External Client Apps (ECAs)**: Modern, security-first applications with enhanced controls (API 61.0+)
|
|
11
|
+
|
|
12
|
+
## Features
|
|
13
|
+
|
|
14
|
+
| Feature | Description |
|
|
15
|
+
|---------|-------------|
|
|
16
|
+
| App Generation | Create Connected Apps or ECAs from requirements |
|
|
17
|
+
| Security Scoring | 120-point validation across 6 categories |
|
|
18
|
+
| Template Library | Pre-built templates for common OAuth flows |
|
|
19
|
+
| Migration Support | Guidance for Connected App → ECA migration |
|
|
20
|
+
| Best Practices | Built-in security recommendations |
|
|
21
|
+
|
|
22
|
+
## Quick Start
|
|
23
|
+
|
|
24
|
+
### Create a Connected App
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
Use the configuring-connected-apps skill to create a Connected App named "MyIntegration"
|
|
28
|
+
with API and RefreshToken scopes for server-to-server integration.
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Create an External Client App
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
Use the configuring-connected-apps skill to create an External Client App named
|
|
35
|
+
"MobileApp" for a mobile application with PKCE enabled.
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Review Existing Apps
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
Use the configuring-connected-apps skill to review and score my existing Connected Apps
|
|
42
|
+
for security best practices.
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Scoring Categories
|
|
46
|
+
|
|
47
|
+
| Category | Points | Focus |
|
|
48
|
+
|----------|--------|-------|
|
|
49
|
+
| Security | 30 | PKCE, rotation, certificates |
|
|
50
|
+
| OAuth Configuration | 25 | Callbacks, flows, tokens |
|
|
51
|
+
| Metadata Compliance | 20 | Required fields, API version |
|
|
52
|
+
| Best Practices | 20 | Minimal scopes, admin approval |
|
|
53
|
+
| Scopes | 15 | Least privilege principle |
|
|
54
|
+
| Documentation | 10 | Description, contact info |
|
|
55
|
+
|
|
56
|
+
## When to Use Each App Type
|
|
57
|
+
|
|
58
|
+
### Choose Connected App When:
|
|
59
|
+
- Simple, single-org integration
|
|
60
|
+
- Legacy system compatibility needed
|
|
61
|
+
- Quick setup is priority
|
|
62
|
+
- No cross-org deployment needs
|
|
63
|
+
|
|
64
|
+
### Choose External Client App When:
|
|
65
|
+
- Multi-org or ISV distribution
|
|
66
|
+
- Automated secret rotation required
|
|
67
|
+
- Enhanced audit logging needed
|
|
68
|
+
- Full metadata compliance required
|
|
69
|
+
- Packaging in 2GP
|
|
70
|
+
|
|
71
|
+
## Directory Structure
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
configuring-connected-apps/
|
|
75
|
+
├── skills/
|
|
76
|
+
│ └── configuring-connected-apps/
|
|
77
|
+
│ └── SKILL.md # Main skill definition
|
|
78
|
+
├── assets/
|
|
79
|
+
│ ├── connected-app-basic.xml
|
|
80
|
+
│ ├── connected-app-oauth.xml
|
|
81
|
+
│ ├── connected-app-jwt.xml
|
|
82
|
+
│ ├── connected-app-canvas.xml
|
|
83
|
+
│ ├── external-client-app.xml
|
|
84
|
+
│ ├── eca-global-oauth.xml
|
|
85
|
+
│ ├── eca-oauth-settings.xml
|
|
86
|
+
│ └── eca-policies.xml
|
|
87
|
+
├── references/
|
|
88
|
+
│ └── example-usage.md
|
|
89
|
+
├── references/
|
|
90
|
+
│ ├── oauth-flows-reference.md
|
|
91
|
+
│ ├── security-checklist.md
|
|
92
|
+
│ └── migration-guide.md
|
|
93
|
+
└── README.md
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Dependencies
|
|
97
|
+
|
|
98
|
+
- **deploying-metadata**: For deploying apps to orgs
|
|
99
|
+
- **sf-metadata**: For creating related metadata (Named Credentials)
|