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