@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.
Files changed (488) hide show
  1. package/package.json +1 -1
  2. package/skills/activating-datacloud/CREDITS.md +5 -0
  3. package/skills/activating-datacloud/README.md +39 -0
  4. package/skills/activating-datacloud/SKILL.md +118 -0
  5. package/skills/analyzing-omnistudio-dependencies/CREDITS.md +5 -0
  6. package/skills/analyzing-omnistudio-dependencies/SKILL.md +477 -0
  7. package/skills/analyzing-omnistudio-dependencies/references/dependency-patterns.md +508 -0
  8. package/skills/analyzing-omnistudio-dependencies/references/namespace-guide.md +300 -0
  9. package/skills/building-omnistudio-callable-apex/CREDITS.md +9 -0
  10. package/skills/building-omnistudio-callable-apex/README.md +80 -0
  11. package/skills/building-omnistudio-callable-apex/SKILL.md +276 -0
  12. package/skills/building-omnistudio-callable-apex/assets/pattern_callable_openinterface.cls +40 -0
  13. package/skills/building-omnistudio-callable-apex/assets/pattern_callable_vanilla.cls +32 -0
  14. package/skills/building-omnistudio-callable-apex/assets/pattern_migration.cls +54 -0
  15. package/skills/building-omnistudio-callable-apex/assets/pattern_openinterface.cls +45 -0
  16. package/skills/building-omnistudio-callable-apex/assets/pattern_test_class.cls +65 -0
  17. package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/IndustriesCallableException.cls +7 -0
  18. package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/Industries_QuoteByProductCallable.cls +115 -0
  19. package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/Industries_QuoteByProductCallableTest.cls +189 -0
  20. package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/TRANSCRIPT.md +115 -0
  21. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/IndustriesCallableException.cls +7 -0
  22. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomCallable.cls +74 -0
  23. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomCallableTest.cls +146 -0
  24. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomRemoteClass.cls +16 -0
  25. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/TRANSCRIPT.md +120 -0
  26. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/IndustriesCallableException.cls +7 -0
  27. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomCallable.cls +73 -0
  28. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomCallableTest.cls +128 -0
  29. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomVlocityOpenInterface2.cls +23 -0
  30. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/TRANSCRIPT.md +75 -0
  31. package/skills/building-omnistudio-datamapper/CREDITS.md +5 -0
  32. package/skills/building-omnistudio-datamapper/SKILL.md +270 -0
  33. package/skills/building-omnistudio-datamapper/assets/completion-summary-template.md +28 -0
  34. package/skills/building-omnistudio-datamapper/assets/omni-data-transform-extract.json +6 -0
  35. package/skills/building-omnistudio-datamapper/assets/omni-data-transform-item.json +12 -0
  36. package/skills/building-omnistudio-datamapper/assets/omni-data-transform-load.json +6 -0
  37. package/skills/building-omnistudio-datamapper/assets/omni-data-transform-transform.json +6 -0
  38. package/skills/building-omnistudio-datamapper/references/best-practices.md +277 -0
  39. package/skills/building-omnistudio-datamapper/references/naming-conventions.md +145 -0
  40. package/skills/building-omnistudio-flexcard/CREDITS.md +5 -0
  41. package/skills/building-omnistudio-flexcard/SKILL.md +325 -0
  42. package/skills/building-omnistudio-flexcard/assets/omni-ui-card.json +10 -0
  43. package/skills/building-omnistudio-flexcard/references/best-practices.md +291 -0
  44. package/skills/building-omnistudio-flexcard/references/data-binding-guide.md +311 -0
  45. package/skills/building-omnistudio-flexcard/references/scoring-rubric.md +66 -0
  46. package/skills/building-omnistudio-flexcard/scripts/flexcard-commands.sh +24 -0
  47. package/skills/building-omnistudio-integration-procedure/CREDITS.md +5 -0
  48. package/skills/building-omnistudio-integration-procedure/SKILL.md +275 -0
  49. package/skills/building-omnistudio-integration-procedure/assets/omni-process-element-dr-extract.json +10 -0
  50. package/skills/building-omnistudio-integration-procedure/assets/omni-process-element-set-values.json +10 -0
  51. package/skills/building-omnistudio-integration-procedure/assets/omni-process-ip.json +12 -0
  52. package/skills/building-omnistudio-integration-procedure/assets/scoring-report-format.txt +14 -0
  53. package/skills/building-omnistudio-integration-procedure/references/best-practices.md +388 -0
  54. package/skills/building-omnistudio-integration-procedure/references/element-types.md +588 -0
  55. package/skills/building-omnistudio-integration-procedure/scripts/cli-commands.sh +18 -0
  56. package/skills/building-omnistudio-omniscript/CREDITS.md +5 -0
  57. package/skills/building-omnistudio-omniscript/SKILL.md +367 -0
  58. package/skills/building-omnistudio-omniscript/assets/omni-process-element-step.json +10 -0
  59. package/skills/building-omnistudio-omniscript/assets/omni-process-element-text-block.json +11 -0
  60. package/skills/building-omnistudio-omniscript/assets/omni-process-omniscript.json +12 -0
  61. package/skills/building-omnistudio-omniscript/references/best-practices.md +480 -0
  62. package/skills/building-omnistudio-omniscript/references/element-types.md +1172 -0
  63. package/skills/building-omnistudio-omniscript/scripts/check-duplicate-omniscript.sh +13 -0
  64. package/skills/building-omnistudio-omniscript/scripts/cli-reference.sh +21 -0
  65. package/skills/building-omnistudio-omniscript/scripts/deploy-omniscript.sh +29 -0
  66. package/skills/building-sf-integrations/CREDITS.md +5 -0
  67. package/skills/building-sf-integrations/README.md +95 -0
  68. package/skills/building-sf-integrations/SKILL.md +192 -0
  69. package/skills/building-sf-integrations/assets/callouts/callout-retry-handler.cls +167 -0
  70. package/skills/building-sf-integrations/assets/callouts/http-response-handler.cls +257 -0
  71. package/skills/building-sf-integrations/assets/callouts/rest-queueable-callout.cls +262 -0
  72. package/skills/building-sf-integrations/assets/callouts/rest-sync-callout.cls +211 -0
  73. package/skills/building-sf-integrations/assets/cdc/cdc-handler.cls +246 -0
  74. package/skills/building-sf-integrations/assets/cdc/cdc-subscriber-trigger.trigger +139 -0
  75. package/skills/building-sf-integrations/assets/endpoint-security/example.cspTrustedSite-meta.xml +58 -0
  76. package/skills/building-sf-integrations/assets/endpoint-security/example.remoteSite-meta.xml +39 -0
  77. package/skills/building-sf-integrations/assets/external-credentials/jwt-external-credential.externalCredential-meta.xml +90 -0
  78. package/skills/building-sf-integrations/assets/external-credentials/oauth-external-credential.externalCredential-meta.xml +87 -0
  79. package/skills/building-sf-integrations/assets/external-services/external-service-operations.md +221 -0
  80. package/skills/building-sf-integrations/assets/external-services/openapi-registration.externalServiceRegistration-meta.xml +193 -0
  81. package/skills/building-sf-integrations/assets/named-credentials/certificate-auth.namedCredential-meta.xml +62 -0
  82. package/skills/building-sf-integrations/assets/named-credentials/custom-auth.namedCredential-meta.xml +71 -0
  83. package/skills/building-sf-integrations/assets/named-credentials/oauth-client-credentials.namedCredential-meta.xml +51 -0
  84. package/skills/building-sf-integrations/assets/named-credentials/oauth-jwt-bearer.namedCredential-meta.xml +67 -0
  85. package/skills/building-sf-integrations/assets/platform-events/event-publisher.cls +191 -0
  86. package/skills/building-sf-integrations/assets/platform-events/event-subscriber-action.cls +295 -0
  87. package/skills/building-sf-integrations/assets/platform-events/event-subscriber-trigger.trigger +108 -0
  88. package/skills/building-sf-integrations/assets/platform-events/platform-event-definition.object-meta.xml +124 -0
  89. package/skills/building-sf-integrations/assets/soap/soap-callout-service.cls +186 -0
  90. package/skills/building-sf-integrations/assets/soap/wsdl2apex-guide.md +213 -0
  91. package/skills/building-sf-integrations/hooks/scripts/suggest_credential_setup.py +271 -0
  92. package/skills/building-sf-integrations/hooks/scripts/validate_integration.py +363 -0
  93. package/skills/building-sf-integrations/references/callout-patterns.md +719 -0
  94. package/skills/building-sf-integrations/references/cdc-guide.md +288 -0
  95. package/skills/building-sf-integrations/references/cli-reference.md +94 -0
  96. package/skills/building-sf-integrations/references/event-driven-architecture-guide.md +266 -0
  97. package/skills/building-sf-integrations/references/event-patterns.md +838 -0
  98. package/skills/building-sf-integrations/references/external-services-guide.md +303 -0
  99. package/skills/building-sf-integrations/references/messaging-api-v2.md +609 -0
  100. package/skills/building-sf-integrations/references/named-credentials-automation.md +201 -0
  101. package/skills/building-sf-integrations/references/named-credentials-guide.md +173 -0
  102. package/skills/building-sf-integrations/references/platform-events-guide.md +288 -0
  103. package/skills/building-sf-integrations/references/rest-callout-patterns.md +288 -0
  104. package/skills/building-sf-integrations/references/scoring-rubric.md +59 -0
  105. package/skills/building-sf-integrations/references/security-best-practices.md +248 -0
  106. package/skills/building-sf-integrations/scripts/README.md +100 -0
  107. package/skills/building-sf-integrations/scripts/configure-named-credential.sh +236 -0
  108. package/skills/building-sf-integrations/scripts/set-api-credential.sh +146 -0
  109. package/skills/building-sf-integrations/scripts/templates/setup-credentials-with-csp.sh +158 -0
  110. package/skills/configuring-connected-apps/CREDITS.md +3 -0
  111. package/skills/configuring-connected-apps/README.md +99 -0
  112. package/skills/configuring-connected-apps/SKILL.md +224 -0
  113. package/skills/configuring-connected-apps/assets/connected-app-basic.xml +29 -0
  114. package/skills/configuring-connected-apps/assets/connected-app-canvas.xml +62 -0
  115. package/skills/configuring-connected-apps/assets/connected-app-jwt.xml +49 -0
  116. package/skills/configuring-connected-apps/assets/connected-app-oauth.xml +65 -0
  117. package/skills/configuring-connected-apps/assets/eca-global-oauth.xml +36 -0
  118. package/skills/configuring-connected-apps/assets/eca-oauth-settings.xml +36 -0
  119. package/skills/configuring-connected-apps/assets/eca-policies.xml +36 -0
  120. package/skills/configuring-connected-apps/assets/external-client-app.xml +35 -0
  121. package/skills/configuring-connected-apps/references/example-usage.md +256 -0
  122. package/skills/configuring-connected-apps/references/migration-guide.md +328 -0
  123. package/skills/configuring-connected-apps/references/oauth-flows-reference.md +660 -0
  124. package/skills/configuring-connected-apps/references/security-checklist.md +209 -0
  125. package/skills/configuring-connected-apps/references/testing-validation-guide.md +275 -0
  126. package/skills/connecting-datacloud/CREDITS.md +5 -0
  127. package/skills/connecting-datacloud/README.md +59 -0
  128. package/skills/connecting-datacloud/SKILL.md +155 -0
  129. package/skills/connecting-datacloud/examples/connections/heroku-postgres.json +15 -0
  130. package/skills/connecting-datacloud/examples/connections/ingest-api-connection.json +5 -0
  131. package/skills/connecting-datacloud/examples/connections/ingest-api-schema.json +31 -0
  132. package/skills/connecting-datacloud/examples/connections/redshift.json +16 -0
  133. package/skills/connecting-datacloud/examples/connections/sharepoint-unstructured.json +20 -0
  134. package/skills/connecting-datacloud/examples/connections/snowflake-connection.json +42 -0
  135. package/skills/debugging-apex-logs/CREDITS.md +22 -0
  136. package/skills/debugging-apex-logs/README.md +74 -0
  137. package/skills/debugging-apex-logs/SKILL.md +172 -0
  138. package/skills/debugging-apex-logs/assets/benchmarking-template.cls +327 -0
  139. package/skills/debugging-apex-logs/assets/cpu-heap-optimization.cls +307 -0
  140. package/skills/debugging-apex-logs/assets/dml-in-loop-fix.cls +219 -0
  141. package/skills/debugging-apex-logs/assets/null-pointer-fix.cls +252 -0
  142. package/skills/debugging-apex-logs/assets/soql-in-loop-fix.cls +157 -0
  143. package/skills/debugging-apex-logs/references/analysis-playbook.md +53 -0
  144. package/skills/debugging-apex-logs/references/benchmarking-guide.md +287 -0
  145. package/skills/debugging-apex-logs/references/cli-commands.md +368 -0
  146. package/skills/debugging-apex-logs/references/common-issues.md +68 -0
  147. package/skills/debugging-apex-logs/references/debug-log-reference.md +328 -0
  148. package/skills/debugging-apex-logs/references/log-analysis-tools.md +248 -0
  149. package/skills/debugging-apex-logs/references/scoring-rubric.md +21 -0
  150. package/skills/deploying-metadata/CREDITS.md +25 -0
  151. package/skills/deploying-metadata/README.md +104 -0
  152. package/skills/deploying-metadata/SKILL.md +214 -0
  153. package/skills/deploying-metadata/assets/destructiveChanges.xml +143 -0
  154. package/skills/deploying-metadata/assets/package.xml +121 -0
  155. package/skills/deploying-metadata/references/agent-deployment-guide.md +628 -0
  156. package/skills/deploying-metadata/references/deploy.sh +73 -0
  157. package/skills/deploying-metadata/references/deployment-report-template.md +89 -0
  158. package/skills/deploying-metadata/references/deployment-workflows.md +395 -0
  159. package/skills/deploying-metadata/references/orchestration.md +183 -0
  160. package/skills/deploying-metadata/references/trigger-deployment-safety.md +376 -0
  161. package/skills/deploying-omnistudio-datapacks/CREDITS.md +5 -0
  162. package/skills/deploying-omnistudio-datapacks/README.md +88 -0
  163. package/skills/deploying-omnistudio-datapacks/SKILL.md +174 -0
  164. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle/TRANSCRIPT.md +124 -0
  165. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle/deploy-business-internet-plus-bundle.yaml +11 -0
  166. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle-deploy/TRANSCRIPT.md +142 -0
  167. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle-deploy/deploy-business-internet-plus-bundle.yaml +10 -0
  168. package/skills/deploying-omnistudio-datapacks/references/job-file-template.md +42 -0
  169. package/skills/deploying-omnistudio-datapacks/references/troubleshooting-matrix.md +24 -0
  170. package/skills/developing-agentforce/assets/metadata/http-callout-flow.flow-meta.xml +1 -1
  171. package/skills/developing-agentforce/references/actions-reference.md +8 -8
  172. package/skills/fetching-salesforce-docs/README.md +66 -0
  173. package/skills/fetching-salesforce-docs/SKILL.md +209 -0
  174. package/skills/fetching-salesforce-docs/requirements.txt +2 -0
  175. package/skills/fetching-salesforce-docs/scripts/extract_help_salesforce.py +497 -0
  176. package/skills/fetching-salesforce-docs/scripts/extract_salesforce_doc.py +357 -0
  177. package/skills/fetching-salesforce-docs/scripts/runtime_bootstrap.py +58 -0
  178. package/skills/generating-apex/CREDITS.md +1 -26
  179. package/skills/generating-apex-test/CREDITS.md +2 -27
  180. package/skills/generating-lwc-components/CREDITS.md +5 -0
  181. package/skills/generating-lwc-components/README.md +126 -0
  182. package/skills/generating-lwc-components/SKILL.md +191 -0
  183. package/skills/generating-lwc-components/assets/apex-controller/LwcController.cls +327 -0
  184. package/skills/generating-lwc-components/assets/basic-component/basicComponent.css +72 -0
  185. package/skills/generating-lwc-components/assets/basic-component/basicComponent.html +111 -0
  186. package/skills/generating-lwc-components/assets/basic-component/basicComponent.js +163 -0
  187. package/skills/generating-lwc-components/assets/basic-component/basicComponent.js-meta.xml +137 -0
  188. package/skills/generating-lwc-components/assets/datatable-component/datatableComponent.html +111 -0
  189. package/skills/generating-lwc-components/assets/datatable-component/datatableComponent.js +367 -0
  190. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.css +63 -0
  191. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.html +154 -0
  192. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.js +348 -0
  193. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.js-meta.xml +87 -0
  194. package/skills/generating-lwc-components/assets/form-component/formComponent.html +165 -0
  195. package/skills/generating-lwc-components/assets/form-component/formComponent.js +275 -0
  196. package/skills/generating-lwc-components/assets/graphql-component/graphqlComponent.html +100 -0
  197. package/skills/generating-lwc-components/assets/graphql-component/graphqlComponent.js +336 -0
  198. package/skills/generating-lwc-components/assets/jest-test/componentName.test.js.example +371 -0
  199. package/skills/generating-lwc-components/assets/message-channel/RecordSelected.messageChannel-meta.xml +71 -0
  200. package/skills/generating-lwc-components/assets/message-channel/lmsPublisher.js +103 -0
  201. package/skills/generating-lwc-components/assets/message-channel/lmsSubscriber.js +181 -0
  202. package/skills/generating-lwc-components/assets/modal-component/modalComponent.html +85 -0
  203. package/skills/generating-lwc-components/assets/modal-component/modalComponent.js +199 -0
  204. package/skills/generating-lwc-components/assets/record-picker/recordPicker.html +55 -0
  205. package/skills/generating-lwc-components/assets/record-picker/recordPicker.js +199 -0
  206. package/skills/generating-lwc-components/assets/state-store/store.js +282 -0
  207. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.css +65 -0
  208. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.html +95 -0
  209. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.js-meta.xml +75 -0
  210. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.test.ts.example +301 -0
  211. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.ts +295 -0
  212. package/skills/generating-lwc-components/assets/workspace-api/workspaceComponent.html +71 -0
  213. package/skills/generating-lwc-components/assets/workspace-api/workspaceComponent.js +316 -0
  214. package/skills/generating-lwc-components/hooks/scripts/lwc-lsp-validate.py +295 -0
  215. package/skills/generating-lwc-components/hooks/scripts/post-tool-validate.py +347 -0
  216. package/skills/generating-lwc-components/hooks/scripts/slds_data/deprecated_patterns.json +74 -0
  217. package/skills/generating-lwc-components/hooks/scripts/slds_data/styling_hooks.json +111 -0
  218. package/skills/generating-lwc-components/hooks/scripts/slds_data/valid_slds_classes.json +127 -0
  219. package/skills/generating-lwc-components/hooks/scripts/slds_linter_wrapper.py +294 -0
  220. package/skills/generating-lwc-components/hooks/scripts/slds_rules/__init__.py +22 -0
  221. package/skills/generating-lwc-components/hooks/scripts/template_validator.py +332 -0
  222. package/skills/generating-lwc-components/hooks/scripts/validate_slds.py +595 -0
  223. package/skills/generating-lwc-components/references/accessibility-guide.md +843 -0
  224. package/skills/generating-lwc-components/references/advanced-features.md +108 -0
  225. package/skills/generating-lwc-components/references/async-notification-patterns.md +661 -0
  226. package/skills/generating-lwc-components/references/cli-commands.md +545 -0
  227. package/skills/generating-lwc-components/references/component-patterns.md +1476 -0
  228. package/skills/generating-lwc-components/references/flow-integration-guide.md +675 -0
  229. package/skills/generating-lwc-components/references/jest-testing.md +1011 -0
  230. package/skills/generating-lwc-components/references/lms-guide.md +860 -0
  231. package/skills/generating-lwc-components/references/lwc-best-practices.md +1310 -0
  232. package/skills/generating-lwc-components/references/performance-guide.md +861 -0
  233. package/skills/generating-lwc-components/references/scoring-and-testing.md +116 -0
  234. package/skills/generating-lwc-components/references/slds-blueprints.json +14389 -0
  235. package/skills/generating-lwc-components/references/slds-design-guide.md +166 -0
  236. package/skills/generating-lwc-components/references/state-management.md +642 -0
  237. package/skills/generating-lwc-components/references/template-anti-patterns.md +948 -0
  238. package/skills/generating-lwc-components/references/triangle-pattern.md +365 -0
  239. package/skills/generating-lwc-components/scripts/local-dev-preview.sh +34 -0
  240. package/skills/generating-mermaid-diagrams/CREDITS.md +46 -0
  241. package/skills/generating-mermaid-diagrams/README.md +114 -0
  242. package/skills/generating-mermaid-diagrams/SKILL.md +218 -0
  243. package/skills/generating-mermaid-diagrams/assets/agentforce/agent-flow.md +313 -0
  244. package/skills/generating-mermaid-diagrams/assets/architecture/system-landscape.md +351 -0
  245. package/skills/generating-mermaid-diagrams/assets/datamodel/b2b-commerce-erd.md +317 -0
  246. package/skills/generating-mermaid-diagrams/assets/datamodel/campaigns-erd.md +195 -0
  247. package/skills/generating-mermaid-diagrams/assets/datamodel/consent-erd.md +262 -0
  248. package/skills/generating-mermaid-diagrams/assets/datamodel/files-erd.md +266 -0
  249. package/skills/generating-mermaid-diagrams/assets/datamodel/forecasting-erd.md +261 -0
  250. package/skills/generating-mermaid-diagrams/assets/datamodel/fsl-erd.md +332 -0
  251. package/skills/generating-mermaid-diagrams/assets/datamodel/party-model-erd.md +237 -0
  252. package/skills/generating-mermaid-diagrams/assets/datamodel/quote-order-erd.md +277 -0
  253. package/skills/generating-mermaid-diagrams/assets/datamodel/revenue-cloud-erd.md +343 -0
  254. package/skills/generating-mermaid-diagrams/assets/datamodel/sales-cloud-erd.md +192 -0
  255. package/skills/generating-mermaid-diagrams/assets/datamodel/salesforce-erd.md +209 -0
  256. package/skills/generating-mermaid-diagrams/assets/datamodel/scheduler-erd.md +276 -0
  257. package/skills/generating-mermaid-diagrams/assets/datamodel/service-cloud-erd.md +217 -0
  258. package/skills/generating-mermaid-diagrams/assets/datamodel/territory-management-erd.md +241 -0
  259. package/skills/generating-mermaid-diagrams/assets/integration/api-sequence.md +387 -0
  260. package/skills/generating-mermaid-diagrams/assets/oauth/authorization-code-pkce.md +197 -0
  261. package/skills/generating-mermaid-diagrams/assets/oauth/authorization-code.md +152 -0
  262. package/skills/generating-mermaid-diagrams/assets/oauth/client-credentials.md +233 -0
  263. package/skills/generating-mermaid-diagrams/assets/oauth/device-authorization.md +295 -0
  264. package/skills/generating-mermaid-diagrams/assets/oauth/jwt-bearer.md +256 -0
  265. package/skills/generating-mermaid-diagrams/assets/oauth/refresh-token.md +281 -0
  266. package/skills/generating-mermaid-diagrams/assets/oauth/user-agent-social-sign-on.md +281 -0
  267. package/skills/generating-mermaid-diagrams/assets/role-hierarchy/user-hierarchy.md +322 -0
  268. package/skills/generating-mermaid-diagrams/references/color-palette.md +464 -0
  269. package/skills/generating-mermaid-diagrams/references/diagram-conventions.md +313 -0
  270. package/skills/generating-mermaid-diagrams/references/erd-conventions.md +320 -0
  271. package/skills/generating-mermaid-diagrams/references/mermaid-reference.md +434 -0
  272. package/skills/generating-mermaid-diagrams/references/mermaid-styling.md +81 -0
  273. package/skills/generating-mermaid-diagrams/references/preview-guide.md +49 -0
  274. package/skills/generating-mermaid-diagrams/references/usage-examples.md +340 -0
  275. package/skills/generating-mermaid-diagrams/scripts/README.md +160 -0
  276. package/skills/generating-mermaid-diagrams/scripts/mermaid_preview.py +654 -0
  277. package/skills/generating-mermaid-diagrams/scripts/query-org-metadata.py +293 -0
  278. package/skills/generating-visual-diagrams/CREDITS.md +80 -0
  279. package/skills/generating-visual-diagrams/README.md +83 -0
  280. package/skills/generating-visual-diagrams/SKILL.md +208 -0
  281. package/skills/generating-visual-diagrams/assets/architecture/integration-flow.md +55 -0
  282. package/skills/generating-visual-diagrams/assets/erd/core-objects.md +131 -0
  283. package/skills/generating-visual-diagrams/assets/erd/custom-objects.md +60 -0
  284. package/skills/generating-visual-diagrams/assets/lwc/dashboard-card.md +45 -0
  285. package/skills/generating-visual-diagrams/assets/lwc/data-table.md +57 -0
  286. package/skills/generating-visual-diagrams/assets/lwc/record-form.md +60 -0
  287. package/skills/generating-visual-diagrams/assets/review/apex-review.md +57 -0
  288. package/skills/generating-visual-diagrams/assets/review/lwc-review.md +48 -0
  289. package/skills/generating-visual-diagrams/references/architect-aesthetic-guide.md +257 -0
  290. package/skills/generating-visual-diagrams/references/examples-index.md +35 -0
  291. package/skills/generating-visual-diagrams/references/gemini-cli-setup.md +65 -0
  292. package/skills/generating-visual-diagrams/references/interview-questions.md +529 -0
  293. package/skills/generating-visual-diagrams/references/iteration-workflow.md +173 -0
  294. package/skills/generating-visual-diagrams/scripts/check-prerequisites.sh +101 -0
  295. package/skills/generating-visual-diagrams/scripts/generate_image.py +243 -0
  296. package/skills/handling-sf-data/CREDITS.md +5 -0
  297. package/skills/handling-sf-data/README.md +112 -0
  298. package/skills/handling-sf-data/SKILL.md +235 -0
  299. package/skills/handling-sf-data/assets/bulk/bulk-insert-10000.apex +293 -0
  300. package/skills/handling-sf-data/assets/bulk/bulk-insert-200.apex +208 -0
  301. package/skills/handling-sf-data/assets/bulk/bulk-insert-500.apex +219 -0
  302. package/skills/handling-sf-data/assets/bulk/bulk-upsert-external-id.apex +324 -0
  303. package/skills/handling-sf-data/assets/cleanup/delete-by-created-date.apex +319 -0
  304. package/skills/handling-sf-data/assets/cleanup/delete-by-name.apex +240 -0
  305. package/skills/handling-sf-data/assets/cleanup/delete-test-data.apex +311 -0
  306. package/skills/handling-sf-data/assets/cleanup/rollback-transaction.apex +266 -0
  307. package/skills/handling-sf-data/assets/csv/account-import.csv +11 -0
  308. package/skills/handling-sf-data/assets/csv/contact-import.csv +11 -0
  309. package/skills/handling-sf-data/assets/csv/custom-object-import.csv +11 -0
  310. package/skills/handling-sf-data/assets/csv/opportunity-import.csv +11 -0
  311. package/skills/handling-sf-data/assets/factories/account-factory.apex +165 -0
  312. package/skills/handling-sf-data/assets/factories/case-factory.apex +237 -0
  313. package/skills/handling-sf-data/assets/factories/contact-factory.apex +168 -0
  314. package/skills/handling-sf-data/assets/factories/custom-object-factory.apex +260 -0
  315. package/skills/handling-sf-data/assets/factories/event-factory.apex +275 -0
  316. package/skills/handling-sf-data/assets/factories/hierarchy-factory.apex +372 -0
  317. package/skills/handling-sf-data/assets/factories/lead-factory.apex +190 -0
  318. package/skills/handling-sf-data/assets/factories/opportunity-factory.apex +206 -0
  319. package/skills/handling-sf-data/assets/factories/task-factory.apex +246 -0
  320. package/skills/handling-sf-data/assets/factories/user-factory.apex +278 -0
  321. package/skills/handling-sf-data/assets/json/account-contact-tree.json +130 -0
  322. package/skills/handling-sf-data/assets/json/account-opportunity-tree.json +110 -0
  323. package/skills/handling-sf-data/assets/json/full-hierarchy-tree.json +188 -0
  324. package/skills/handling-sf-data/assets/soql/aggregate.soql +226 -0
  325. package/skills/handling-sf-data/assets/soql/child-to-parent.soql +162 -0
  326. package/skills/handling-sf-data/assets/soql/parent-to-child.soql +153 -0
  327. package/skills/handling-sf-data/assets/soql/polymorphic.soql +198 -0
  328. package/skills/handling-sf-data/assets/soql/subquery.soql +287 -0
  329. package/skills/handling-sf-data/references/anonymous-apex-guide.md +98 -0
  330. package/skills/handling-sf-data/references/bulk-operations-guide.md +94 -0
  331. package/skills/handling-sf-data/references/bulk-testing-example.md +194 -0
  332. package/skills/handling-sf-data/references/cleanup-rollback-example.md +322 -0
  333. package/skills/handling-sf-data/references/cleanup-rollback-guide.md +84 -0
  334. package/skills/handling-sf-data/references/crud-workflow-example.md +183 -0
  335. package/skills/handling-sf-data/references/governor-limits-reference.md +74 -0
  336. package/skills/handling-sf-data/references/orchestration.md +174 -0
  337. package/skills/handling-sf-data/references/relationship-query-examples.md +249 -0
  338. package/skills/handling-sf-data/references/sf-cli-data-commands.md +158 -0
  339. package/skills/handling-sf-data/references/soql-relationship-guide.md +84 -0
  340. package/skills/handling-sf-data/references/test-data-best-practices.md +104 -0
  341. package/skills/handling-sf-data/references/test-data-factory-usage.md +290 -0
  342. package/skills/handling-sf-data/references/test-data-patterns.md +98 -0
  343. package/skills/handling-sf-data/scripts/soql_validator.py +292 -0
  344. package/skills/handling-sf-data/scripts/validate_data_operation.py +379 -0
  345. package/skills/harmonizing-datacloud/CREDITS.md +3 -0
  346. package/skills/harmonizing-datacloud/README.md +31 -0
  347. package/skills/harmonizing-datacloud/SKILL.md +117 -0
  348. package/skills/modeling-omnistudio-epc-catalog/CREDITS.md +14 -0
  349. package/skills/modeling-omnistudio-epc-catalog/README.md +89 -0
  350. package/skills/modeling-omnistudio-epc-catalog/SKILL.md +395 -0
  351. package/skills/modeling-omnistudio-epc-catalog/assets/attribute-assignment-template.json +402 -0
  352. package/skills/modeling-omnistudio-epc-catalog/assets/compiled-attribute-overrides-template.json +43 -0
  353. package/skills/modeling-omnistudio-epc-catalog/assets/completion-block-template.txt +8 -0
  354. package/skills/modeling-omnistudio-epc-catalog/assets/decomposition-relationships-template.json +233 -0
  355. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_AttributeAssignments.json +514 -0
  356. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_CompiledAttributeOverrides.json +21 -0
  357. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_DataPack.json +649 -0
  358. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_DecompositionRelationships.json +200 -0
  359. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ObjectFieldAttributes.json +138 -0
  360. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_OrchestrationScenarios.json +54 -0
  361. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_OverrideDefinitions.json +266 -0
  362. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ParentKeys.json +23 -0
  363. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_PriceListEntries.json +54 -0
  364. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_PricebookEntries.json +35 -0
  365. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ProductChildItems.json +34 -0
  366. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_RuleAssignments.json +21 -0
  367. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_AttributeAssignments.json +410 -0
  368. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_DataPack.json +535 -0
  369. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_DecompositionRelationships.json +35 -0
  370. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ObjectFieldAttributes.json +138 -0
  371. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_OrchestrationScenarios.json +28 -0
  372. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ParentKeys.json +23 -0
  373. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_PriceListEntries.json +220 -0
  374. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_PricebookEntries.json +35 -0
  375. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ProductChildItems.json +414 -0
  376. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_AttributeAssignments.json +382 -0
  377. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_DataPack.json +565 -0
  378. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_DecompositionRelationships.json +35 -0
  379. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ObjectFieldAttributes.json +104 -0
  380. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_OrchestrationScenarios.json +28 -0
  381. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ParentKeys.json +13 -0
  382. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_PriceListEntries.json +106 -0
  383. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_PricebookEntries.json +35 -0
  384. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ProductChildItems.json +72 -0
  385. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_AttributeAssignments.json +142 -0
  386. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_DataPack.json +377 -0
  387. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_DecompositionRelationships.json +35 -0
  388. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ObjectFieldAttributes.json +36 -0
  389. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ParentKeys.json +8 -0
  390. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_PriceListEntries.json +54 -0
  391. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_PricebookEntries.json +35 -0
  392. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ProductChildItems.json +34 -0
  393. package/skills/modeling-omnistudio-epc-catalog/assets/object-field-attributes-template.json +138 -0
  394. package/skills/modeling-omnistudio-epc-catalog/assets/orchestration-scenarios-template.json +54 -0
  395. package/skills/modeling-omnistudio-epc-catalog/assets/override-definitions-template.json +134 -0
  396. package/skills/modeling-omnistudio-epc-catalog/assets/parent-keys-template.json +29 -0
  397. package/skills/modeling-omnistudio-epc-catalog/assets/price-list-entries-template.json +158 -0
  398. package/skills/modeling-omnistudio-epc-catalog/assets/pricebook-entries-template.json +35 -0
  399. package/skills/modeling-omnistudio-epc-catalog/assets/product-child-item-template.json +338 -0
  400. package/skills/modeling-omnistudio-epc-catalog/assets/product2-offer-template.json +527 -0
  401. package/skills/modeling-omnistudio-epc-catalog/examples/.gitkeep +1 -0
  402. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_AttributeAssignments.json +95 -0
  403. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_CompiledAttributeOverrides.json +1 -0
  404. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_DataPack.json +214 -0
  405. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_DecompositionRelationships.json +28 -0
  406. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ObjectFieldAttributes.json +98 -0
  407. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_OrchestrationScenarios.json +22 -0
  408. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_OverrideDefinitions.json +1 -0
  409. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ParentKeys.json +13 -0
  410. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_PriceListEntries.json +35 -0
  411. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_PricebookEntries.json +28 -0
  412. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ProductChildItems.json +110 -0
  413. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/TRANSCRIPT.md +58 -0
  414. package/skills/modeling-omnistudio-epc-catalog/references/epc-field-guide.md +90 -0
  415. package/skills/modeling-omnistudio-epc-catalog/references/naming-conventions.md +80 -0
  416. package/skills/modeling-omnistudio-epc-catalog/references/scoring-model.md +57 -0
  417. package/skills/modeling-omnistudio-epc-catalog/scripts/cli-validation-commands.sh +19 -0
  418. package/skills/modeling-omnistudio-epc-catalog/scripts/sample-invocations.sh +18 -0
  419. package/skills/orchestrating-datacloud/CREDITS.md +15 -0
  420. package/skills/orchestrating-datacloud/README.md +129 -0
  421. package/skills/orchestrating-datacloud/SKILL.md +236 -0
  422. package/skills/orchestrating-datacloud/UPSTREAM.md +45 -0
  423. package/skills/orchestrating-datacloud/assets/definitions/activation-target.template.json +5 -0
  424. package/skills/orchestrating-datacloud/assets/definitions/activation.template.json +7 -0
  425. package/skills/orchestrating-datacloud/assets/definitions/calculated-insight.template.json +7 -0
  426. package/skills/orchestrating-datacloud/assets/definitions/data-action-target.template.json +5 -0
  427. package/skills/orchestrating-datacloud/assets/definitions/data-action.template.json +5 -0
  428. package/skills/orchestrating-datacloud/assets/definitions/data-graph.template.json +21 -0
  429. package/skills/orchestrating-datacloud/assets/definitions/data-stream.template.json +55 -0
  430. package/skills/orchestrating-datacloud/assets/definitions/dmo.template.json +17 -0
  431. package/skills/orchestrating-datacloud/assets/definitions/identity-resolution.template.json +30 -0
  432. package/skills/orchestrating-datacloud/assets/definitions/mapping.template.json +14 -0
  433. package/skills/orchestrating-datacloud/assets/definitions/relationship.template.json +12 -0
  434. package/skills/orchestrating-datacloud/assets/definitions/search-index.template.json +9 -0
  435. package/skills/orchestrating-datacloud/assets/definitions/segment.template.json +16 -0
  436. package/skills/orchestrating-datacloud/references/feature-readiness.md +157 -0
  437. package/skills/orchestrating-datacloud/references/plugin-setup.md +140 -0
  438. package/skills/orchestrating-datacloud/scripts/bootstrap-plugin.sh +53 -0
  439. package/skills/orchestrating-datacloud/scripts/diagnose-org.mjs +511 -0
  440. package/skills/orchestrating-datacloud/scripts/generate-manifest.mjs +68 -0
  441. package/skills/orchestrating-datacloud/scripts/verify-plugin.sh +58 -0
  442. package/skills/preparing-datacloud/CREDITS.md +7 -0
  443. package/skills/preparing-datacloud/README.md +51 -0
  444. package/skills/preparing-datacloud/SKILL.md +191 -0
  445. package/skills/preparing-datacloud/examples/ingestion-api/.env.example +8 -0
  446. package/skills/preparing-datacloud/examples/ingestion-api/README.md +48 -0
  447. package/skills/preparing-datacloud/examples/ingestion-api/send-data.py +144 -0
  448. package/skills/querying-soql/CREDITS.md +21 -0
  449. package/skills/querying-soql/README.md +41 -0
  450. package/skills/querying-soql/SKILL.md +143 -0
  451. package/skills/querying-soql/assets/aggregate-queries.soql +242 -0
  452. package/skills/querying-soql/assets/basic-queries.soql +188 -0
  453. package/skills/querying-soql/assets/bulkified-query-pattern.cls +280 -0
  454. package/skills/querying-soql/assets/optimization-patterns.soql +259 -0
  455. package/skills/querying-soql/assets/relationship-queries.soql +203 -0
  456. package/skills/querying-soql/assets/selector-class.cls +219 -0
  457. package/skills/querying-soql/references/anti-patterns.md +348 -0
  458. package/skills/querying-soql/references/cli-commands.md +358 -0
  459. package/skills/querying-soql/references/field-coverage-rules.md +514 -0
  460. package/skills/querying-soql/references/query-optimization.md +142 -0
  461. package/skills/querying-soql/references/selector-patterns.md +479 -0
  462. package/skills/querying-soql/references/soql-reference.md +227 -0
  463. package/skills/querying-soql/references/soql-syntax-reference.md +208 -0
  464. package/skills/querying-soql/scripts/post-tool-validate.py +322 -0
  465. package/skills/retrieving-datacloud/CREDITS.md +7 -0
  466. package/skills/retrieving-datacloud/README.md +44 -0
  467. package/skills/retrieving-datacloud/SKILL.md +120 -0
  468. package/skills/retrieving-datacloud/examples/search-indexes/hybrid-structured.json +44 -0
  469. package/skills/retrieving-datacloud/examples/search-indexes/vector-knowledge.json +43 -0
  470. package/skills/running-apex-tests/CREDITS.md +22 -0
  471. package/skills/running-apex-tests/README.md +94 -0
  472. package/skills/running-apex-tests/SKILL.md +158 -0
  473. package/skills/running-apex-tests/assets/basic-test.cls +169 -0
  474. package/skills/running-apex-tests/assets/bulk-test.cls +255 -0
  475. package/skills/running-apex-tests/assets/dml-mock.cls +339 -0
  476. package/skills/running-apex-tests/assets/mock-callout-test.cls +353 -0
  477. package/skills/running-apex-tests/assets/stub-provider-example.cls +364 -0
  478. package/skills/running-apex-tests/assets/test-data-factory.cls +328 -0
  479. package/skills/running-apex-tests/hooks/scripts/parse-test-results.py +364 -0
  480. package/skills/running-apex-tests/references/cli-commands.md +289 -0
  481. package/skills/running-apex-tests/references/mocking-patterns.md +500 -0
  482. package/skills/running-apex-tests/references/performance-optimization.md +283 -0
  483. package/skills/running-apex-tests/references/test-fix-loop.md +49 -0
  484. package/skills/running-apex-tests/references/test-patterns.md +154 -0
  485. package/skills/running-apex-tests/references/testing-best-practices.md +509 -0
  486. package/skills/segmenting-datacloud/CREDITS.md +3 -0
  487. package/skills/segmenting-datacloud/README.md +36 -0
  488. package/skills/segmenting-datacloud/SKILL.md +115 -0
@@ -0,0 +1,211 @@
1
+ /**
2
+ * @description Synchronous REST Callout Service for {{ServiceName}}
3
+ *
4
+ * Use Case: Real-time API calls where immediate response is needed
5
+ * - User-initiated actions requiring feedback
6
+ * - API calls NOT triggered from DML operations
7
+ *
8
+ * IMPORTANT: Do NOT use synchronous callouts from triggers or DML contexts.
9
+ * Use rest-queueable-callout.cls template instead.
10
+ *
11
+ * @author {{Author}}
12
+ * @date {{Date}}
13
+ */
14
+ public with sharing class {{ServiceName}}Callout {
15
+
16
+ // Named Credential reference (configured in Setup)
17
+ private static final String NAMED_CREDENTIAL = 'callout:{{NamedCredentialName}}';
18
+
19
+ // Default timeout (max 120000 ms = 120 seconds)
20
+ private static final Integer DEFAULT_TIMEOUT = 120000;
21
+
22
+ /**
23
+ * @description Make HTTP request to external API
24
+ * @param method HTTP method (GET, POST, PUT, PATCH, DELETE)
25
+ * @param endpoint API endpoint path (appended to Named Credential base URL)
26
+ * @param body Request body (null for GET/DELETE)
27
+ * @return HttpResponse from external API
28
+ */
29
+ public static HttpResponse makeRequest(String method, String endpoint, String body) {
30
+ HttpRequest req = new HttpRequest();
31
+ req.setEndpoint(NAMED_CREDENTIAL + endpoint);
32
+ req.setMethod(method);
33
+ req.setHeader('Content-Type', 'application/json');
34
+ req.setHeader('Accept', 'application/json');
35
+ req.setTimeout(DEFAULT_TIMEOUT);
36
+
37
+ if (String.isNotBlank(body) && (method == 'POST' || method == 'PUT' || method == 'PATCH')) {
38
+ req.setBody(body);
39
+ }
40
+
41
+ Http http = new Http();
42
+ return http.send(req);
43
+ }
44
+
45
+ /**
46
+ * @description GET request
47
+ * @param endpoint API endpoint path
48
+ * @return Parsed response as Map
49
+ */
50
+ public static Map<String, Object> get(String endpoint) {
51
+ HttpResponse res = makeRequest('GET', endpoint, null);
52
+ return handleResponse(res);
53
+ }
54
+
55
+ /**
56
+ * @description GET request with query parameters
57
+ * @param endpoint API endpoint path
58
+ * @param params Query parameters
59
+ * @return Parsed response as Map
60
+ */
61
+ public static Map<String, Object> get(String endpoint, Map<String, String> params) {
62
+ String queryString = buildQueryString(params);
63
+ String fullEndpoint = String.isNotBlank(queryString)
64
+ ? endpoint + '?' + queryString
65
+ : endpoint;
66
+ return get(fullEndpoint);
67
+ }
68
+
69
+ /**
70
+ * @description POST request
71
+ * @param endpoint API endpoint path
72
+ * @param payload Request body as Map
73
+ * @return Parsed response as Map
74
+ */
75
+ public static Map<String, Object> post(String endpoint, Map<String, Object> payload) {
76
+ HttpResponse res = makeRequest('POST', endpoint, JSON.serialize(payload));
77
+ return handleResponse(res);
78
+ }
79
+
80
+ /**
81
+ * @description PUT request (full resource update)
82
+ * @param endpoint API endpoint path
83
+ * @param payload Request body as Map
84
+ * @return Parsed response as Map
85
+ */
86
+ public static Map<String, Object> put(String endpoint, Map<String, Object> payload) {
87
+ HttpResponse res = makeRequest('PUT', endpoint, JSON.serialize(payload));
88
+ return handleResponse(res);
89
+ }
90
+
91
+ /**
92
+ * @description PATCH request (partial resource update)
93
+ * @param endpoint API endpoint path
94
+ * @param payload Request body as Map
95
+ * @return Parsed response as Map
96
+ */
97
+ public static Map<String, Object> patch(String endpoint, Map<String, Object> payload) {
98
+ HttpResponse res = makeRequest('PATCH', endpoint, JSON.serialize(payload));
99
+ return handleResponse(res);
100
+ }
101
+
102
+ /**
103
+ * @description DELETE request
104
+ * @param endpoint API endpoint path
105
+ * @return Parsed response as Map (may be empty for 204)
106
+ */
107
+ public static Map<String, Object> del(String endpoint) {
108
+ HttpResponse res = makeRequest('DELETE', endpoint, null);
109
+ return handleResponse(res);
110
+ }
111
+
112
+ /**
113
+ * @description Handle HTTP response and parse JSON
114
+ * @param res HttpResponse from callout
115
+ * @return Parsed response as Map
116
+ * @throws CalloutException for error status codes
117
+ */
118
+ private static Map<String, Object> handleResponse(HttpResponse res) {
119
+ Integer statusCode = res.getStatusCode();
120
+ String responseBody = res.getBody();
121
+
122
+ // Log for debugging (consider removing in production or use custom logging)
123
+ System.debug(LoggingLevel.DEBUG, 'Response Status: ' + statusCode);
124
+ System.debug(LoggingLevel.DEBUG, 'Response Body: ' + responseBody);
125
+
126
+ // Success (2xx)
127
+ if (statusCode >= 200 && statusCode < 300) {
128
+ if (String.isBlank(responseBody) || statusCode == 204) {
129
+ return new Map<String, Object>();
130
+ }
131
+ return (Map<String, Object>) JSON.deserializeUntyped(responseBody);
132
+ }
133
+
134
+ // Client Error (4xx)
135
+ if (statusCode >= 400 && statusCode < 500) {
136
+ String errorMessage = parseErrorMessage(responseBody);
137
+ throw new ClientException('Client Error (' + statusCode + '): ' + errorMessage);
138
+ }
139
+
140
+ // Server Error (5xx)
141
+ if (statusCode >= 500) {
142
+ throw new ServerException('Server Error (' + statusCode + '): ' + responseBody);
143
+ }
144
+
145
+ // Unexpected status
146
+ throw new CalloutException('Unexpected status code: ' + statusCode);
147
+ }
148
+
149
+ /**
150
+ * @description Parse error message from response body
151
+ * @param responseBody Raw response body
152
+ * @return Error message string
153
+ */
154
+ private static String parseErrorMessage(String responseBody) {
155
+ try {
156
+ Map<String, Object> errorResponse = (Map<String, Object>) JSON.deserializeUntyped(responseBody);
157
+
158
+ // Common error message field names
159
+ if (errorResponse.containsKey('error')) {
160
+ Object error = errorResponse.get('error');
161
+ if (error instanceof String) {
162
+ return (String) error;
163
+ } else if (error instanceof Map<String, Object>) {
164
+ Map<String, Object> errorObj = (Map<String, Object>) error;
165
+ return (String) errorObj.get('message');
166
+ }
167
+ }
168
+ if (errorResponse.containsKey('message')) {
169
+ return (String) errorResponse.get('message');
170
+ }
171
+ if (errorResponse.containsKey('errors')) {
172
+ return JSON.serialize(errorResponse.get('errors'));
173
+ }
174
+
175
+ return responseBody;
176
+ } catch (Exception e) {
177
+ return responseBody;
178
+ }
179
+ }
180
+
181
+ /**
182
+ * @description Build URL query string from parameters
183
+ * @param params Map of query parameters
184
+ * @return Encoded query string
185
+ */
186
+ private static String buildQueryString(Map<String, String> params) {
187
+ if (params == null || params.isEmpty()) {
188
+ return '';
189
+ }
190
+
191
+ List<String> pairs = new List<String>();
192
+ for (String key : params.keySet()) {
193
+ String value = params.get(key);
194
+ if (String.isNotBlank(value)) {
195
+ pairs.add(EncodingUtil.urlEncode(key, 'UTF-8') + '=' +
196
+ EncodingUtil.urlEncode(value, 'UTF-8'));
197
+ }
198
+ }
199
+ return String.join(pairs, '&');
200
+ }
201
+
202
+ /**
203
+ * @description Client error (4xx) exception
204
+ */
205
+ public class ClientException extends Exception {}
206
+
207
+ /**
208
+ * @description Server error (5xx) exception
209
+ */
210
+ public class ServerException extends Exception {}
211
+ }
@@ -0,0 +1,246 @@
1
+ /**
2
+ * @description Change Data Capture (CDC) Handler for {{ObjectName}}
3
+ *
4
+ * Use Case: Business logic for processing CDC events
5
+ * - Sync changes to external systems
6
+ * - Maintain audit logs
7
+ * - Trigger downstream processes
8
+ *
9
+ * This class is called by the {{ObjectName}}CDCSubscriber trigger
10
+ * and contains all business logic for CDC event processing.
11
+ *
12
+ * @author {{Author}}
13
+ * @date {{Date}}
14
+ */
15
+ public with sharing class {{ObjectName}}CDCHandler {
16
+
17
+ // Fields to watch for sync (ignore changes to other fields)
18
+ private static final Set<String> SYNC_FIELDS = new Set<String>{
19
+ 'Name',
20
+ 'Status__c',
21
+ 'Amount__c'
22
+ // Add fields that should trigger sync
23
+ };
24
+
25
+ /**
26
+ * @description Handle CREATE change events
27
+ * @param event The CDC event
28
+ * @param header The change event header
29
+ */
30
+ public static void handleCreate({{ObjectName}}ChangeEvent event, EventBus.ChangeEventHeader header) {
31
+ List<String> recordIds = header.getRecordIds();
32
+ Datetime commitTime = header.getCommitTimestamp();
33
+
34
+ System.debug(LoggingLevel.DEBUG,
35
+ 'CDC CREATE - Records: ' + recordIds + ' at ' + commitTime);
36
+
37
+ // Build payload from event field values
38
+ Map<String, Object> payload = buildPayloadFromEvent(event);
39
+ payload.put('recordIds', recordIds);
40
+ payload.put('operation', 'CREATE');
41
+ payload.put('timestamp', commitTime);
42
+
43
+ // Queue sync to external system
44
+ System.enqueueJob(new ExternalSyncQueueable(payload));
45
+ }
46
+
47
+ /**
48
+ * @description Handle UPDATE change events
49
+ * @param event The CDC event
50
+ * @param header The change event header
51
+ * @param changedFields List of changed field API names
52
+ */
53
+ public static void handleUpdate(
54
+ {{ObjectName}}ChangeEvent event,
55
+ EventBus.ChangeEventHeader header,
56
+ List<String> changedFields
57
+ ) {
58
+ List<String> recordIds = header.getRecordIds();
59
+
60
+ // Check if any sync-relevant fields changed
61
+ Boolean relevantChange = false;
62
+ List<String> relevantFields = new List<String>();
63
+
64
+ for (String field : changedFields) {
65
+ if (SYNC_FIELDS.contains(field)) {
66
+ relevantChange = true;
67
+ relevantFields.add(field);
68
+ }
69
+ }
70
+
71
+ if (!relevantChange) {
72
+ System.debug(LoggingLevel.DEBUG,
73
+ 'CDC UPDATE - Ignoring (no sync fields changed): ' + changedFields);
74
+ return;
75
+ }
76
+
77
+ System.debug(LoggingLevel.DEBUG,
78
+ 'CDC UPDATE - Records: ' + recordIds +
79
+ ', Relevant changed fields: ' + relevantFields);
80
+
81
+ // Build payload with changed values
82
+ Map<String, Object> payload = buildPayloadFromEvent(event);
83
+ payload.put('recordIds', recordIds);
84
+ payload.put('operation', 'UPDATE');
85
+ payload.put('changedFields', relevantFields);
86
+ payload.put('timestamp', header.getCommitTimestamp());
87
+
88
+ // Queue sync to external system
89
+ System.enqueueJob(new ExternalSyncQueueable(payload));
90
+ }
91
+
92
+ /**
93
+ * @description Handle DELETE change events
94
+ * @param recordIds Deleted record IDs
95
+ * @param header The change event header
96
+ */
97
+ public static void handleDelete(List<String> recordIds, EventBus.ChangeEventHeader header) {
98
+ System.debug(LoggingLevel.DEBUG,
99
+ 'CDC DELETE - Records: ' + recordIds);
100
+
101
+ Map<String, Object> payload = new Map<String, Object>{
102
+ 'recordIds' => recordIds,
103
+ 'operation' => 'DELETE',
104
+ 'timestamp' => header.getCommitTimestamp()
105
+ };
106
+
107
+ // Queue delete sync to external system
108
+ System.enqueueJob(new ExternalSyncQueueable(payload));
109
+ }
110
+
111
+ /**
112
+ * @description Handle UNDELETE change events
113
+ * @param event The CDC event
114
+ * @param header The change event header
115
+ */
116
+ public static void handleUndelete({{ObjectName}}ChangeEvent event, EventBus.ChangeEventHeader header) {
117
+ // Treat undelete like create - sync full record
118
+ handleCreate(event, header);
119
+ }
120
+
121
+ /**
122
+ * @description Handle GAP events (missed events)
123
+ * @param recordIds Affected record IDs
124
+ * @param gapType Type of gap event
125
+ */
126
+ public static void handleGap(List<String> recordIds, String gapType) {
127
+ System.debug(LoggingLevel.WARN,
128
+ 'CDC GAP - Type: ' + gapType + ', Records: ' + recordIds);
129
+
130
+ // Query current state of records and sync
131
+ // This ensures we have accurate data despite missed events
132
+ /*
133
+ List<{{ObjectName}}> records = [
134
+ SELECT Id, Name, Status__c, Amount__c
135
+ FROM {{ObjectName}}
136
+ WHERE Id IN :recordIds
137
+ WITH USER_MODE
138
+ ];
139
+
140
+ for ({{ObjectName}} record : records) {
141
+ Map<String, Object> payload = new Map<String, Object>{
142
+ 'recordIds' => new List<String>{record.Id},
143
+ 'operation' => 'SYNC', // Full sync due to gap
144
+ 'data' => record
145
+ };
146
+ System.enqueueJob(new ExternalSyncQueueable(payload));
147
+ }
148
+ */
149
+ }
150
+
151
+ /**
152
+ * @description Handle GAP_OVERFLOW (too many changes)
153
+ * @param entityName The object API name
154
+ */
155
+ public static void handleOverflow(String entityName) {
156
+ System.debug(LoggingLevel.ERROR,
157
+ 'CDC OVERFLOW for ' + entityName + ' - Full sync required!');
158
+
159
+ // Create alert/task for admin attention
160
+ /*
161
+ Task alertTask = new Task(
162
+ Subject = 'CDC Overflow - Full Sync Required for ' + entityName,
163
+ Description = 'Change Data Capture experienced overflow. ' +
164
+ 'Some events were missed. Full sync is required.',
165
+ Priority = 'High',
166
+ Status = 'Open',
167
+ ActivityDate = Date.today()
168
+ );
169
+ insert alertTask;
170
+ */
171
+
172
+ // Consider triggering a batch job for full sync
173
+ // Database.executeBatch(new FullSyncBatch(entityName));
174
+ }
175
+
176
+ /**
177
+ * @description Build payload map from CDC event field values
178
+ * @param event The CDC event
179
+ * @return Map of field values
180
+ */
181
+ private static Map<String, Object> buildPayloadFromEvent({{ObjectName}}ChangeEvent event) {
182
+ Map<String, Object> payload = new Map<String, Object>();
183
+
184
+ // Map event fields to payload
185
+ // Only non-null values are changed fields
186
+ payload.put('Name', event.Name);
187
+ // payload.put('Status__c', event.Status__c);
188
+ // payload.put('Amount__c', event.Amount__c);
189
+ // Add more fields as needed
190
+
191
+ // Remove null values (unchanged fields)
192
+ Set<String> keysToRemove = new Set<String>();
193
+ for (String key : payload.keySet()) {
194
+ if (payload.get(key) == null) {
195
+ keysToRemove.add(key);
196
+ }
197
+ }
198
+ for (String key : keysToRemove) {
199
+ payload.remove(key);
200
+ }
201
+
202
+ return payload;
203
+ }
204
+
205
+ /**
206
+ * @description Queueable job for syncing to external system
207
+ */
208
+ public class ExternalSyncQueueable implements Queueable, Database.AllowsCallouts {
209
+ private Map<String, Object> payload;
210
+
211
+ public ExternalSyncQueueable(Map<String, Object> payload) {
212
+ this.payload = payload;
213
+ }
214
+
215
+ public void execute(QueueableContext context) {
216
+ try {
217
+ // Call external system with payload
218
+ // Example: Use Named Credential + REST callout
219
+ /*
220
+ HttpRequest req = new HttpRequest();
221
+ req.setEndpoint('callout:ExternalSystem/sync');
222
+ req.setMethod('POST');
223
+ req.setHeader('Content-Type', 'application/json');
224
+ req.setBody(JSON.serialize(payload));
225
+
226
+ Http http = new Http();
227
+ HttpResponse res = http.send(req);
228
+
229
+ if (res.getStatusCode() >= 200 && res.getStatusCode() < 300) {
230
+ System.debug('Sync successful');
231
+ } else {
232
+ System.debug('Sync failed: ' + res.getStatusCode());
233
+ }
234
+ */
235
+
236
+ System.debug(LoggingLevel.DEBUG,
237
+ 'External sync payload: ' + JSON.serialize(payload));
238
+
239
+ } catch (Exception e) {
240
+ System.debug(LoggingLevel.ERROR,
241
+ 'External sync failed: ' + e.getMessage());
242
+ // Consider: Create error log, retry logic, DLQ
243
+ }
244
+ }
245
+ }
246
+ }
@@ -0,0 +1,139 @@
1
+ /**
2
+ * @description Change Data Capture (CDC) Subscriber Trigger for {{ObjectName}}
3
+ *
4
+ * Use Case: React to data changes in near real-time
5
+ * - Sync data to external systems
6
+ * - Audit logging
7
+ * - Cache invalidation
8
+ * - Event-driven integrations
9
+ *
10
+ * CDC Channel Name: {{ObjectName}}ChangeEvent
11
+ * - Standard objects: AccountChangeEvent, ContactChangeEvent, etc.
12
+ * - Custom objects: MyObject__ChangeEvent (append "ChangeEvent" to API name)
13
+ *
14
+ * Key Concepts:
15
+ * - ChangeEventHeader contains metadata (changeType, changedFields, recordIds)
16
+ * - Event contains changed field values (nulls for unchanged fields)
17
+ * - Supports CREATE, UPDATE, DELETE, UNDELETE change types
18
+ * - Gap events indicate missed events (handle replay)
19
+ *
20
+ * IMPORTANT:
21
+ * - Enable CDC for object in Setup → Integrations → Change Data Capture
22
+ * - Triggers fire in separate transaction from DML
23
+ * - Events are retained for 3 days (replay window)
24
+ *
25
+ * @author {{Author}}
26
+ * @date {{Date}}
27
+ */
28
+ trigger {{ObjectName}}CDCSubscriber on {{ObjectName}}ChangeEvent (after insert) {
29
+
30
+ // Track replay ID for checkpoint
31
+ String lastReplayId = '';
32
+
33
+ for ({{ObjectName}}ChangeEvent event : Trigger.new) {
34
+ // Store replay ID
35
+ lastReplayId = event.ReplayId;
36
+
37
+ // Get change event header (metadata about the change)
38
+ EventBus.ChangeEventHeader header = event.ChangeEventHeader;
39
+
40
+ // Extract header information
41
+ String changeType = header.getChangeType();
42
+ List<String> changedFields = header.getChangedFields();
43
+ List<String> recordIds = header.getRecordIds();
44
+ String entityName = header.getEntityName();
45
+ Long commitNumber = header.getCommitNumber();
46
+ Datetime commitTimestamp = header.getCommitTimestamp();
47
+ String transactionKey = header.getTransactionKey();
48
+
49
+ // Log event details
50
+ System.debug(LoggingLevel.DEBUG,
51
+ 'CDC Event - Type: ' + changeType +
52
+ ', Entity: ' + entityName +
53
+ ', Records: ' + recordIds +
54
+ ', Changed Fields: ' + changedFields);
55
+
56
+ try {
57
+ // Route based on change type
58
+ switch on changeType {
59
+ when 'CREATE' {
60
+ {{ObjectName}}CDCHandler.handleCreate(event, header);
61
+ }
62
+ when 'UPDATE' {
63
+ {{ObjectName}}CDCHandler.handleUpdate(event, header, changedFields);
64
+ }
65
+ when 'DELETE' {
66
+ {{ObjectName}}CDCHandler.handleDelete(recordIds, header);
67
+ }
68
+ when 'UNDELETE' {
69
+ {{ObjectName}}CDCHandler.handleUndelete(event, header);
70
+ }
71
+ when 'GAP_CREATE', 'GAP_UPDATE', 'GAP_DELETE', 'GAP_UNDELETE' {
72
+ // Gap events indicate missed events
73
+ // Should trigger full sync for affected records
74
+ System.debug(LoggingLevel.WARN,
75
+ 'GAP event detected - some events may have been missed. ' +
76
+ 'Type: ' + changeType + ', Records: ' + recordIds);
77
+ {{ObjectName}}CDCHandler.handleGap(recordIds, changeType);
78
+ }
79
+ when 'GAP_OVERFLOW' {
80
+ // Too many changes to track - full sync needed
81
+ System.debug(LoggingLevel.ERROR,
82
+ 'GAP_OVERFLOW - full sync required for ' + entityName);
83
+ {{ObjectName}}CDCHandler.handleOverflow(entityName);
84
+ }
85
+ }
86
+
87
+ } catch (Exception e) {
88
+ // Log error but continue processing
89
+ System.debug(LoggingLevel.ERROR,
90
+ 'CDC processing error for ' + recordIds + ': ' + e.getMessage());
91
+ System.debug(LoggingLevel.ERROR, 'Stack: ' + e.getStackTraceString());
92
+ }
93
+ }
94
+
95
+ // Set resume checkpoint for durability
96
+ if (String.isNotBlank(lastReplayId)) {
97
+ EventBus.TriggerContext.currentContext().setResumeCheckpoint(lastReplayId);
98
+ }
99
+ }
100
+
101
+ /*
102
+ * ============================================================================
103
+ * CDC TRIGGER BEST PRACTICES
104
+ * ============================================================================
105
+ *
106
+ * 1. ENABLE CDC FOR OBJECT
107
+ * Setup → Integrations → Change Data Capture → Select Objects
108
+ *
109
+ * 2. HANDLE ALL CHANGE TYPES
110
+ * - CREATE: New record
111
+ * - UPDATE: Record modified
112
+ * - DELETE: Record deleted
113
+ * - UNDELETE: Record restored from recycle bin
114
+ * - GAP_*: Events were missed (sync required)
115
+ * - GAP_OVERFLOW: Too many changes (full sync needed)
116
+ *
117
+ * 3. USE CHANGEDEVENTHEAD FOR METADATA
118
+ * - getChangeType(): Operation type
119
+ * - getChangedFields(): List of changed field API names
120
+ * - getRecordIds(): Affected record IDs
121
+ * - getCommitTimestamp(): When change occurred
122
+ *
123
+ * 4. FIELD VALUES IN EVENT
124
+ * - Changed fields have new values
125
+ * - Unchanged fields are NULL
126
+ * - Use changedFields list to know what changed
127
+ *
128
+ * 5. IDEMPOTENT HANDLERS
129
+ * - Same event might fire multiple times
130
+ * - Use transactionKey to detect duplicates
131
+ * - Design handlers to be safe for replay
132
+ *
133
+ * 6. BULK CONSIDERATIONS
134
+ * - Multiple records can be in single event (batch DML)
135
+ * - Use getRecordIds() to get all affected IDs
136
+ * - Process all record IDs efficiently
137
+ *
138
+ * ============================================================================
139
+ */
@@ -0,0 +1,58 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ CSP Trusted Site Template
4
+
5
+ Use this template when creating integration skills that make HTTP callouts
6
+ to external APIs.
7
+
8
+ RECOMMENDED: This is the MODERN approach (API 48+ / Spring '20+)
9
+ that replaces Remote Site Settings.
10
+
11
+ CSP (Content Security Policy) advantages:
12
+ - More granular control over security contexts
13
+ - Better alignment with web security standards
14
+ - Per-context security (Apex, Lightning, etc.)
15
+ - Future-proof
16
+
17
+ Setup:
18
+ 1. Copy this file to your skill's assets/ directory
19
+ 2. Replace {{placeholders}} with your values
20
+ 3. Deploy to org OR let setup script deploy automatically
21
+
22
+ File Location: force-app/main/default/cspTrustedSites/{{APIName}}.cspTrustedSite-meta.xml
23
+ -->
24
+ <CspTrustedSite xmlns="http://soap.sforce.com/2006/04/metadata">
25
+ <!-- API Name - must be unique, alphanumeric only -->
26
+ <fullName>{{APIName}}</fullName>
27
+
28
+ <!-- Description - what this endpoint is for -->
29
+ <description>{{Description}}</description>
30
+
31
+ <!-- Endpoint URL - the base domain (no trailing slash) -->
32
+ <!-- Examples:
33
+ - https://api.stripe.com
34
+ - https://api.twilio.com
35
+ - https://graph.microsoft.com
36
+ -->
37
+ <endpointUrl>{{BaseURL}}</endpointUrl>
38
+
39
+ <!-- Active - set to true to enable -->
40
+ <isActive>true</isActive>
41
+
42
+ <!--
43
+ Context: Where this trusted site applies
44
+
45
+ Available contexts:
46
+ - All: Apply to all contexts (recommended for most integrations)
47
+ - Connect: Apex HTTP callouts only
48
+ - Frame: iframe embedding
49
+ - Img: Image resources
50
+ - Script: JavaScript resources
51
+ - Style: CSS resources
52
+
53
+ For Apex HTTP callouts (most common), use either:
54
+ - "All" (simplest, covers everything)
55
+ - "Connect" (most specific, Apex callouts only)
56
+ -->
57
+ <context>{{Context}}</context>
58
+ </CspTrustedSite>
@@ -0,0 +1,39 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Remote Site Setting Template
4
+
5
+ Use this template when creating integration skills that make HTTP callouts
6
+ to external APIs.
7
+
8
+ IMPORTANT:
9
+ - This is the LEGACY approach (still works in all API versions)
10
+ - For API 48+ (Spring '20+), prefer CSP Trusted Sites (see example.cspTrustedSite-meta.xml)
11
+
12
+ Setup:
13
+ 1. Copy this file to your skill's assets/ directory
14
+ 2. Replace {{placeholders}} with your values
15
+ 3. Deploy to org OR let setup script deploy automatically
16
+
17
+ File Location: force-app/main/default/remoteSiteSettings/{{APIName}}.remoteSite-meta.xml
18
+ -->
19
+ <RemoteSiteSetting xmlns="http://soap.sforce.com/2006/04/metadata">
20
+ <!-- API Name - must be unique, alphanumeric only -->
21
+ <fullName>{{APIName}}</fullName>
22
+
23
+ <!-- Description - what this endpoint is for -->
24
+ <description>{{Description}}</description>
25
+
26
+ <!-- Security - ALWAYS keep this false (don't allow HTTP, only HTTPS) -->
27
+ <disableProtocolSecurity>false</disableProtocolSecurity>
28
+
29
+ <!-- Active - set to true to enable -->
30
+ <isActive>true</isActive>
31
+
32
+ <!-- URL - the base domain (no path, no trailing slash) -->
33
+ <!-- Examples:
34
+ - https://api.stripe.com
35
+ - https://api.twilio.com
36
+ - https://graph.microsoft.com
37
+ -->
38
+ <url>{{BaseURL}}</url>
39
+ </RemoteSiteSetting>