@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,13 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Verify no duplicate Type/SubType/Language exists before creating a new OmniScript.
|
|
3
|
+
# Usage: ./check-duplicate-omniscript.sh <Type> <SubType> <Language> <org>
|
|
4
|
+
# Example: ./check-duplicate-omniscript.sh ServiceRequest NewCase English myOrg
|
|
5
|
+
|
|
6
|
+
TYPE="${1:?Usage: $0 <Type> <SubType> <Language> <org>}"
|
|
7
|
+
SUBTYPE="${2:?}"
|
|
8
|
+
LANGUAGE="${3:?}"
|
|
9
|
+
ORG="${4:?}"
|
|
10
|
+
|
|
11
|
+
sf data query \
|
|
12
|
+
-q "SELECT Id,Name,Type,SubType,Language,IsActive,VersionNumber FROM OmniProcess WHERE Type='${TYPE}' AND SubType='${SUBTYPE}' AND Language='${LANGUAGE}' AND OmniProcessType='OmniScript' LIMIT 10" \
|
|
13
|
+
-o "${ORG}"
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# OmniScript CLI command reference. Not meant to be run directly.
|
|
3
|
+
# Copy individual commands as needed. Replace <org>, <id>, <Type>, <SubType>, <Name> with actual values.
|
|
4
|
+
|
|
5
|
+
# List active OmniScripts
|
|
6
|
+
sf data query -q "SELECT Id,Name,Type,SubType,Language,IsActive,VersionNumber FROM OmniProcess WHERE IsActive=true AND OmniProcessType='OmniScript' LIMIT 50" -o <org>
|
|
7
|
+
|
|
8
|
+
# Query all elements for a specific OmniScript (ordered by hierarchy)
|
|
9
|
+
sf data query -q "SELECT Id,Name,ElementType,PropertySetConfig,Level,Order FROM OmniProcessElement WHERE OmniProcessId='<id>' ORDER BY Level,Order LIMIT 200" -o <org>
|
|
10
|
+
|
|
11
|
+
# Retrieve OmniScript metadata from org
|
|
12
|
+
sf project retrieve start -m "OmniScript:<Name>" -o <org>
|
|
13
|
+
|
|
14
|
+
# Deploy OmniScript metadata to org
|
|
15
|
+
sf project deploy start -m "OmniScript:<Name>" -o <org>
|
|
16
|
+
|
|
17
|
+
# Check all versions of a specific OmniScript
|
|
18
|
+
sf data query -q "SELECT Id,VersionNumber,IsActive,LastModifiedDate FROM OmniProcess WHERE Type='<Type>' AND SubType='<SubType>' AND OmniProcessType='OmniScript' ORDER BY VersionNumber DESC LIMIT 10" -o <org>
|
|
19
|
+
|
|
20
|
+
# Verify active version after deployment
|
|
21
|
+
sf data query -q "SELECT Id,Name,Type,SubType,Language,IsActive,VersionNumber FROM OmniProcess WHERE Type='<Type>' AND SubType='<SubType>' AND OmniProcessType='OmniScript' AND IsActive=true LIMIT 5" -o <org>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Deploy an OmniScript and verify activation.
|
|
3
|
+
# Usage: ./deploy-omniscript.sh <Name> <Type> <SubType> <org>
|
|
4
|
+
# Example: ./deploy-omniscript.sh ServiceRequest_NewCase_English ServiceRequest NewCase myOrg
|
|
5
|
+
# Run AFTER deploying all dependencies (DataRaptors, Integration Procedures).
|
|
6
|
+
|
|
7
|
+
NAME="${1:?Usage: $0 <Name> <Type> <SubType> <org>}"
|
|
8
|
+
TYPE="${2:?}"
|
|
9
|
+
SUBTYPE="${3:?}"
|
|
10
|
+
ORG="${4:?}"
|
|
11
|
+
|
|
12
|
+
echo "Step 1: Verify prerequisites — check org auth"
|
|
13
|
+
sf org display -o "${ORG}" || { echo "ERROR: Org '${ORG}' is not authenticated. Run: sf org login web --alias ${ORG}"; exit 1; }
|
|
14
|
+
|
|
15
|
+
echo "Step 2: Deploy OmniScript metadata"
|
|
16
|
+
sf project deploy start -m "OmniScript:${NAME}" -o "${ORG}"
|
|
17
|
+
if [ $? -ne 0 ]; then
|
|
18
|
+
echo "ERROR: Deployment failed. To recover:"
|
|
19
|
+
echo " 1. Check the error message above for the specific cause."
|
|
20
|
+
echo " 2. If a partial OmniProcess record was created, deactivate and delete it:"
|
|
21
|
+
echo " sf data delete record -s OmniProcess -w \"Name='${NAME}'\" -o ${ORG}"
|
|
22
|
+
echo " 3. Fix the issue and re-run this script."
|
|
23
|
+
exit 1
|
|
24
|
+
fi
|
|
25
|
+
|
|
26
|
+
echo "Step 3: Verify activation"
|
|
27
|
+
sf data query \
|
|
28
|
+
-q "SELECT Id,Name,Type,SubType,Language,IsActive,VersionNumber FROM OmniProcess WHERE Type='${TYPE}' AND SubType='${SUBTYPE}' AND OmniProcessType='OmniScript' AND IsActive=true LIMIT 5" \
|
|
29
|
+
-o "${ORG}"
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# building-sf-integrations
|
|
2
|
+
|
|
3
|
+
Creates comprehensive Salesforce integrations with 120-point scoring. Build secure Named Credentials, External Services, REST/SOAP callouts, Platform Events, and Change Data Capture patterns.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Named Credentials**: OAuth 2.0, JWT Bearer, Certificate, API Key authentication patterns
|
|
8
|
+
- **External Credentials**: Modern API 61+ credential architecture with Named Principals
|
|
9
|
+
- **External Services**: Auto-generate Apex from OpenAPI/Swagger specs
|
|
10
|
+
- **Callout Patterns**: Synchronous and asynchronous REST/SOAP implementations
|
|
11
|
+
- **Event-Driven**: Platform Events and Change Data Capture subscribers
|
|
12
|
+
- **120-Point Scoring**: Automated validation across 6 categories
|
|
13
|
+
- **Automation Scripts**: Configure credentials without UI (ConnectApi)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
## Quick Start
|
|
17
|
+
|
|
18
|
+
### 1. Invoke the skill
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
Skill: building-sf-integrations
|
|
22
|
+
Request: "Create a Named Credential for Stripe API with OAuth"
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### 2. Answer requirements questions
|
|
26
|
+
|
|
27
|
+
The skill will ask about:
|
|
28
|
+
- Integration type (REST, SOAP, Event-driven)
|
|
29
|
+
- Authentication method (OAuth, JWT, Certificate, API Key)
|
|
30
|
+
- External system details (URL, rate limits)
|
|
31
|
+
- Sync vs Async requirements
|
|
32
|
+
|
|
33
|
+
### 3. Deploy and configure
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
# Deploy credential metadata
|
|
37
|
+
sf project deploy start --metadata NamedCredential:StripeAPI --target-org MyOrg
|
|
38
|
+
|
|
39
|
+
# Run automation script to set API key
|
|
40
|
+
./scripts/configure-named-credential.sh MyOrg
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Scoring System (120 Points)
|
|
44
|
+
|
|
45
|
+
| Category | Points | Focus |
|
|
46
|
+
|----------|--------|-------|
|
|
47
|
+
| Security | 30 | Named Credentials, no hardcoded secrets, OAuth scopes |
|
|
48
|
+
| Error Handling | 25 | Retry logic, timeouts, specific exceptions |
|
|
49
|
+
| Bulkification | 20 | Batch callouts, event batching |
|
|
50
|
+
| Architecture | 20 | Async patterns, service separation |
|
|
51
|
+
| Best Practices | 15 | Governor limits, idempotency |
|
|
52
|
+
| Documentation | 10 | Clear intent, API versioning |
|
|
53
|
+
|
|
54
|
+
**Thresholds**: ⭐⭐⭐⭐⭐ 90+ | ⭐⭐⭐⭐ 80-89 | ⭐⭐⭐ 70-79 | Block: <45%
|
|
55
|
+
|
|
56
|
+
## Helper Scripts
|
|
57
|
+
|
|
58
|
+
Automate credential configuration without manual UI steps:
|
|
59
|
+
|
|
60
|
+
| Script | Purpose |
|
|
61
|
+
|--------|---------|
|
|
62
|
+
| `configure-named-credential.sh` | Set API keys via ConnectApi (Enhanced NC) |
|
|
63
|
+
| `set-api-credential.sh` | Store keys in Custom Settings (dev/test) |
|
|
64
|
+
|
|
65
|
+
**Auto-run**: When you create credential files, Claude suggests running these scripts.
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# After deploying Named Credential metadata
|
|
69
|
+
./scripts/configure-named-credential.sh MyOrg
|
|
70
|
+
# Enter API key when prompted (secure, hidden input)
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Prerequisites
|
|
74
|
+
|
|
75
|
+
- **Salesforce CLI v2+**: `sf` command
|
|
76
|
+
- **Authenticated org**: `sf org login web -a <alias>`
|
|
77
|
+
- **API Version**: 62.0+ recommended for External Credentials
|
|
78
|
+
|
|
79
|
+
## Cross-Skill Integration
|
|
80
|
+
|
|
81
|
+
| Skill | Integration |
|
|
82
|
+
|-------|-------------|
|
|
83
|
+
| configuring-connected-apps | Create OAuth Connected App for Named Credential |
|
|
84
|
+
| generating-apex | Custom callout services beyond templates |
|
|
85
|
+
| generating-flow | HTTP Callout Flow for Agentforce |
|
|
86
|
+
| deploying-metadata | Deploy credentials and callout code |
|
|
87
|
+
| developing-agentforce | Agent actions using External Services |
|
|
88
|
+
|
|
89
|
+
## Documentation
|
|
90
|
+
|
|
91
|
+
- [SKILL.md](SKILL.md) - Complete skill reference
|
|
92
|
+
- [references/named-credentials-automation.md](references/named-credentials-automation.md) - Script automation guide
|
|
93
|
+
- [references/named-credentials-guide.md](references/named-credentials-guide.md) - Template reference
|
|
94
|
+
- [references/callout-patterns.md](references/callout-patterns.md) - REST/SOAP patterns
|
|
95
|
+
- [references/event-patterns.md](references/event-patterns.md) - Platform Events & CDC
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: building-sf-integrations
|
|
3
|
+
description: "Salesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data)."
|
|
4
|
+
license: MIT
|
|
5
|
+
metadata:
|
|
6
|
+
version: "1.1"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# building-sf-integrations: Salesforce Integration Patterns Expert
|
|
10
|
+
|
|
11
|
+
Use this skill when the user needs **integration architecture and runtime plumbing**: Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, CDC, and event-driven integration design.
|
|
12
|
+
|
|
13
|
+
## When This Skill Owns the Task
|
|
14
|
+
|
|
15
|
+
Use `building-sf-integrations` when the work involves:
|
|
16
|
+
- `.namedCredential-meta.xml` or External Credential metadata
|
|
17
|
+
- outbound REST/SOAP callouts
|
|
18
|
+
- External Service registration from OpenAPI specs
|
|
19
|
+
- Platform Events, CDC, and event-driven architecture
|
|
20
|
+
- choosing sync vs async integration patterns
|
|
21
|
+
|
|
22
|
+
Delegate elsewhere when the user is:
|
|
23
|
+
- configuring the OAuth app itself → [configuring-connected-apps](../configuring-connected-apps/SKILL.md)
|
|
24
|
+
- writing Apex-only business logic → [generating-apex](../generating-apex/SKILL.md)
|
|
25
|
+
- deploying metadata → [deploying-metadata](../deploying-metadata/SKILL.md)
|
|
26
|
+
- importing/exporting data → [handling-sf-data](../handling-sf-data/SKILL.md)
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Required Context to Gather First
|
|
31
|
+
|
|
32
|
+
Ask for or infer:
|
|
33
|
+
- integration style: outbound callout, inbound event, External Service, CDC, platform event
|
|
34
|
+
- auth method
|
|
35
|
+
- sync vs async requirement
|
|
36
|
+
- system endpoint / spec details
|
|
37
|
+
- rate limits, retry expectations, and failure tolerance
|
|
38
|
+
- whether this is net-new design or repair of an existing integration
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Recommended Workflow
|
|
43
|
+
|
|
44
|
+
### 1. Choose the integration pattern
|
|
45
|
+
| Need | Default pattern |
|
|
46
|
+
|---|---|
|
|
47
|
+
| authenticated outbound API call | Named Credential / External Credential + Apex or Flow |
|
|
48
|
+
| spec-driven API client | External Service |
|
|
49
|
+
| trigger-originated callout | async callout pattern |
|
|
50
|
+
| decoupled event publishing | Platform Events |
|
|
51
|
+
| change-stream consumption | CDC |
|
|
52
|
+
|
|
53
|
+
### 2. Choose the auth model
|
|
54
|
+
Prefer secure runtime-managed auth:
|
|
55
|
+
- Named Credentials / External Credentials
|
|
56
|
+
- OAuth or JWT via the right credential model
|
|
57
|
+
- no hardcoded secrets in code
|
|
58
|
+
|
|
59
|
+
### 3. Generate from the right templates
|
|
60
|
+
Use the provided assets under:
|
|
61
|
+
- `assets/named-credentials/`
|
|
62
|
+
- `assets/external-credentials/`
|
|
63
|
+
- `assets/external-services/`
|
|
64
|
+
- `assets/callouts/`
|
|
65
|
+
- `assets/platform-events/`
|
|
66
|
+
- `assets/cdc/`
|
|
67
|
+
- `assets/soap/`
|
|
68
|
+
|
|
69
|
+
### 4. Validate operational safety
|
|
70
|
+
Check:
|
|
71
|
+
- timeout and retry handling
|
|
72
|
+
- async strategy for trigger-originated work
|
|
73
|
+
- logging / observability
|
|
74
|
+
- event retention and subscriber implications
|
|
75
|
+
|
|
76
|
+
### 5. Hand off deployment or implementation details
|
|
77
|
+
Use:
|
|
78
|
+
- [deploying-metadata](../deploying-metadata/SKILL.md) for deployment
|
|
79
|
+
- [generating-apex](../generating-apex/SKILL.md) for deeper service / retry code
|
|
80
|
+
- [generating-flow](../generating-flow/SKILL.md) for declarative HTTP callout orchestration
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## High-Signal Rules
|
|
85
|
+
|
|
86
|
+
- never hardcode credentials
|
|
87
|
+
- do not do synchronous callouts from triggers
|
|
88
|
+
- define timeout behavior explicitly
|
|
89
|
+
- plan retries for transient failures
|
|
90
|
+
- use middleware / event-driven patterns when outbound volume is high
|
|
91
|
+
- prefer External Credentials architecture for new development when supported
|
|
92
|
+
|
|
93
|
+
Common anti-patterns:
|
|
94
|
+
- sync trigger callouts
|
|
95
|
+
- no retry or dead-letter strategy
|
|
96
|
+
- no request/response logging
|
|
97
|
+
- mixing auth setup responsibilities with runtime integration design
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## Output Format
|
|
102
|
+
|
|
103
|
+
When finishing, report in this order:
|
|
104
|
+
1. **Integration pattern chosen**
|
|
105
|
+
2. **Auth model chosen**
|
|
106
|
+
3. **Files created or updated**
|
|
107
|
+
4. **Operational safeguards**
|
|
108
|
+
5. **Deployment / testing next step**
|
|
109
|
+
|
|
110
|
+
Suggested shape:
|
|
111
|
+
|
|
112
|
+
```text
|
|
113
|
+
Integration: <summary>
|
|
114
|
+
Pattern: <named credential / external service / event / cdc / callout>
|
|
115
|
+
Files: <paths>
|
|
116
|
+
Safety: <timeouts, retries, async, logging>
|
|
117
|
+
Next step: <deploy, register, test, or implement>
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Cross-Skill Integration
|
|
123
|
+
|
|
124
|
+
| Need | Delegate to | Reason |
|
|
125
|
+
|---|---|---|
|
|
126
|
+
| OAuth app setup | [configuring-connected-apps](../configuring-connected-apps/SKILL.md) | consumer key / cert / app config |
|
|
127
|
+
| advanced callout service code | [generating-apex](../generating-apex/SKILL.md) | Apex implementation |
|
|
128
|
+
| declarative HTTP callout / Flow wrapper | [generating-flow](../generating-flow/SKILL.md) | Flow orchestration |
|
|
129
|
+
| deploy integration metadata | [deploying-metadata](../deploying-metadata/SKILL.md) | validation and rollout |
|
|
130
|
+
| use integration from Agentforce | [developing-agentforce](../developing-agentforce/SKILL.md) | agent action composition |
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Reference Map
|
|
135
|
+
|
|
136
|
+
### Start here
|
|
137
|
+
- [references/named-credentials-guide.md](references/named-credentials-guide.md)
|
|
138
|
+
- [references/external-services-guide.md](references/external-services-guide.md)
|
|
139
|
+
- [references/callout-patterns.md](references/callout-patterns.md)
|
|
140
|
+
- [references/rest-callout-patterns.md](references/rest-callout-patterns.md)
|
|
141
|
+
- [references/security-best-practices.md](references/security-best-practices.md)
|
|
142
|
+
|
|
143
|
+
### Event-driven / platform patterns
|
|
144
|
+
- [references/event-patterns.md](references/event-patterns.md)
|
|
145
|
+
- [references/platform-events-guide.md](references/platform-events-guide.md)
|
|
146
|
+
- [references/cdc-guide.md](references/cdc-guide.md)
|
|
147
|
+
- [references/event-driven-architecture-guide.md](references/event-driven-architecture-guide.md)
|
|
148
|
+
- [references/messaging-api-v2.md](references/messaging-api-v2.md)
|
|
149
|
+
|
|
150
|
+
### CLI / automation / scoring
|
|
151
|
+
- [references/cli-reference.md](references/cli-reference.md)
|
|
152
|
+
- [references/named-credentials-automation.md](references/named-credentials-automation.md)
|
|
153
|
+
- [references/scoring-rubric.md](references/scoring-rubric.md)
|
|
154
|
+
- [scripts/README.md](scripts/README.md) — automation scripts overview (configure-named-credential.sh, set-api-credential.sh)
|
|
155
|
+
|
|
156
|
+
### Asset templates
|
|
157
|
+
- `assets/named-credentials/` — Named Credential XML templates (OAuth, JWT, Certificate, Custom auth)
|
|
158
|
+
- `assets/external-credentials/` — External Credential XML templates (OAuth, JWT)
|
|
159
|
+
- `assets/external-services/` — External Service registration template and operations guide
|
|
160
|
+
- `assets/callouts/` — REST sync, Queueable, retry handler, and HTTP response handler Apex templates
|
|
161
|
+
- `assets/platform-events/` — Platform Event definition, publisher, and subscriber templates
|
|
162
|
+
- `assets/cdc/` — CDC handler and subscriber trigger templates
|
|
163
|
+
- `assets/soap/` — SOAP callout service template and wsdl2apex guide
|
|
164
|
+
- `assets/endpoint-security/` — Remote Site Setting and CSP Trusted Site XML templates
|
|
165
|
+
|
|
166
|
+
### Automation hooks
|
|
167
|
+
- `hooks/scripts/suggest_credential_setup.py` — auto-suggests credential configuration steps when integration files are detected
|
|
168
|
+
- `hooks/scripts/validate_integration.py` — validates integration patterns before agent responses
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Output Expectations
|
|
173
|
+
|
|
174
|
+
When this skill completes an integration task, it produces:
|
|
175
|
+
|
|
176
|
+
1. **Credential metadata** — one or more files in `assets/named-credentials/` or `assets/external-credentials/` filled with org-specific values
|
|
177
|
+
2. **Callout Apex class** — a `.cls` file using the Named Credential pattern, with async/sync pattern chosen based on context
|
|
178
|
+
3. **Event/CDC artifacts** — Platform Event `.object-meta.xml`, subscriber trigger, or CDC config (when event-driven pattern is chosen)
|
|
179
|
+
4. **Endpoint security metadata** — Remote Site Setting and/or CSP Trusted Site XML files
|
|
180
|
+
5. **Scoring report** — 120-point score across 6 categories (Security, Error Handling, Bulkification, Architecture, Best Practices, Documentation)
|
|
181
|
+
6. **Next step** — a deployment or testing instruction for the generated artifacts
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## Score Guide
|
|
186
|
+
|
|
187
|
+
| Score | Meaning |
|
|
188
|
+
|---|---|
|
|
189
|
+
| 108+ | strong production-ready integration design |
|
|
190
|
+
| 90–107 | good design with some hardening left |
|
|
191
|
+
| 72–89 | workable but needs architectural review |
|
|
192
|
+
| < 72 | unsafe / incomplete for deployment |
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Retry Handler with Exponential Backoff for HTTP Callouts
|
|
3
|
+
*
|
|
4
|
+
* Use Case: Handle transient failures with intelligent retry
|
|
5
|
+
* - Network timeouts
|
|
6
|
+
* - 5xx server errors
|
|
7
|
+
* - Rate limiting (429)
|
|
8
|
+
*
|
|
9
|
+
* Features:
|
|
10
|
+
* - Exponential backoff between retries
|
|
11
|
+
* - Configurable retry count
|
|
12
|
+
* - Jitter to prevent thundering herd
|
|
13
|
+
* - Distinguishes retryable vs non-retryable errors
|
|
14
|
+
*
|
|
15
|
+
* IMPORTANT: Apex doesn't have Thread.sleep(), so retry with backoff
|
|
16
|
+
* is implemented via Queueable job scheduling for async contexts.
|
|
17
|
+
* For sync contexts, this provides immediate retry without delay.
|
|
18
|
+
*
|
|
19
|
+
* @author {{Author}}
|
|
20
|
+
* @date {{Date}}
|
|
21
|
+
*/
|
|
22
|
+
public with sharing class CalloutRetryHandler {
|
|
23
|
+
|
|
24
|
+
// Configuration
|
|
25
|
+
private static final Integer MAX_RETRIES = 3;
|
|
26
|
+
private static final Integer BASE_DELAY_MS = 1000; // 1 second
|
|
27
|
+
private static final Integer MAX_DELAY_MS = 30000; // 30 seconds
|
|
28
|
+
|
|
29
|
+
// Retryable status codes
|
|
30
|
+
private static final Set<Integer> RETRYABLE_STATUS_CODES = new Set<Integer>{
|
|
31
|
+
408, // Request Timeout
|
|
32
|
+
429, // Too Many Requests (Rate Limited)
|
|
33
|
+
500, // Internal Server Error
|
|
34
|
+
502, // Bad Gateway
|
|
35
|
+
503, // Service Unavailable
|
|
36
|
+
504 // Gateway Timeout
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* @description Execute HTTP request with retry logic (immediate retries)
|
|
41
|
+
* @param request HttpRequest to execute
|
|
42
|
+
* @return HttpResponse from successful call
|
|
43
|
+
* @throws CalloutException if all retries exhausted
|
|
44
|
+
*/
|
|
45
|
+
public static HttpResponse executeWithRetry(HttpRequest request) {
|
|
46
|
+
return executeWithRetry(request, MAX_RETRIES);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* @description Execute HTTP request with configurable retry count
|
|
51
|
+
* @param request HttpRequest to execute
|
|
52
|
+
* @param maxRetries Maximum retry attempts
|
|
53
|
+
* @return HttpResponse from successful call
|
|
54
|
+
* @throws CalloutException if all retries exhausted
|
|
55
|
+
*/
|
|
56
|
+
public static HttpResponse executeWithRetry(HttpRequest request, Integer maxRetries) {
|
|
57
|
+
Integer retryCount = 0;
|
|
58
|
+
HttpResponse response;
|
|
59
|
+
Exception lastException;
|
|
60
|
+
|
|
61
|
+
while (retryCount <= maxRetries) {
|
|
62
|
+
try {
|
|
63
|
+
Http http = new Http();
|
|
64
|
+
response = http.send(request);
|
|
65
|
+
|
|
66
|
+
Integer statusCode = response.getStatusCode();
|
|
67
|
+
|
|
68
|
+
// Success - return immediately
|
|
69
|
+
if (statusCode >= 200 && statusCode < 300) {
|
|
70
|
+
return response;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Client error (4xx except 408, 429) - don't retry
|
|
74
|
+
if (statusCode >= 400 && statusCode < 500 &&
|
|
75
|
+
!RETRYABLE_STATUS_CODES.contains(statusCode)) {
|
|
76
|
+
throw new NonRetryableException(
|
|
77
|
+
'Client Error (' + statusCode + '): ' + response.getBody()
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Retryable error - check if we should retry
|
|
82
|
+
if (RETRYABLE_STATUS_CODES.contains(statusCode)) {
|
|
83
|
+
retryCount++;
|
|
84
|
+
if (retryCount > maxRetries) {
|
|
85
|
+
throw new RetryExhaustedException(
|
|
86
|
+
'Max retries exhausted. Last status: ' + statusCode +
|
|
87
|
+
', Body: ' + response.getBody()
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Log retry attempt
|
|
92
|
+
System.debug(LoggingLevel.WARN,
|
|
93
|
+
'Retryable error (' + statusCode + '). Attempt ' + retryCount +
|
|
94
|
+
' of ' + maxRetries);
|
|
95
|
+
|
|
96
|
+
// For 429, check Retry-After header
|
|
97
|
+
if (statusCode == 429) {
|
|
98
|
+
String retryAfter = response.getHeader('Retry-After');
|
|
99
|
+
if (String.isNotBlank(retryAfter)) {
|
|
100
|
+
System.debug(LoggingLevel.WARN, 'Rate limited. Retry-After: ' + retryAfter);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Continue to next retry (no delay in sync Apex)
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Other status codes - don't retry
|
|
109
|
+
return response;
|
|
110
|
+
|
|
111
|
+
} catch (CalloutException e) {
|
|
112
|
+
// Network/connection error
|
|
113
|
+
lastException = e;
|
|
114
|
+
retryCount++;
|
|
115
|
+
|
|
116
|
+
if (retryCount > maxRetries) {
|
|
117
|
+
throw new RetryExhaustedException(
|
|
118
|
+
'Max retries exhausted after CalloutException: ' + e.getMessage()
|
|
119
|
+
);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
System.debug(LoggingLevel.WARN,
|
|
123
|
+
'CalloutException on attempt ' + retryCount + ': ' + e.getMessage());
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Should not reach here, but handle edge case
|
|
128
|
+
throw new RetryExhaustedException('Unexpected retry loop exit');
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* @description Calculate delay with exponential backoff and jitter
|
|
133
|
+
* (Useful for scheduled retry jobs)
|
|
134
|
+
* @param retryAttempt Current retry attempt (1-based)
|
|
135
|
+
* @return Delay in milliseconds
|
|
136
|
+
*/
|
|
137
|
+
public static Integer calculateBackoffDelay(Integer retryAttempt) {
|
|
138
|
+
// Exponential backoff: baseDelay * 2^(attempt-1)
|
|
139
|
+
Integer exponentialDelay = BASE_DELAY_MS * (Integer) Math.pow(2, retryAttempt - 1);
|
|
140
|
+
|
|
141
|
+
// Add jitter (random 0-25% of delay)
|
|
142
|
+
Double jitter = Math.random() * 0.25 * exponentialDelay;
|
|
143
|
+
Integer delayWithJitter = exponentialDelay + (Integer) jitter;
|
|
144
|
+
|
|
145
|
+
// Cap at max delay
|
|
146
|
+
return Math.min(delayWithJitter, MAX_DELAY_MS);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* @description Check if HTTP status code is retryable
|
|
151
|
+
* @param statusCode HTTP status code
|
|
152
|
+
* @return True if request should be retried
|
|
153
|
+
*/
|
|
154
|
+
public static Boolean isRetryable(Integer statusCode) {
|
|
155
|
+
return RETRYABLE_STATUS_CODES.contains(statusCode);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* @description Exception for non-retryable errors (4xx client errors)
|
|
160
|
+
*/
|
|
161
|
+
public class NonRetryableException extends Exception {}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* @description Exception when all retry attempts exhausted
|
|
165
|
+
*/
|
|
166
|
+
public class RetryExhaustedException extends Exception {}
|
|
167
|
+
}
|