@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,152 @@
1
+ # Authorization Code Flow Template
2
+
3
+ Standard OAuth 2.0 Authorization Code flow for web applications with backend servers.
4
+
5
+ ## When to Use
6
+ - Web applications with secure backend servers
7
+ - Confidential clients that can protect client_secret
8
+ - When you need refresh tokens for long-lived access
9
+
10
+ ## Mermaid Template
11
+
12
+ ```mermaid
13
+ %%{init: {'theme': 'base', 'themeVariables': {
14
+ 'actorBkg': '#ddd6fe',
15
+ 'actorTextColor': '#1f2937',
16
+ 'actorBorder': '#6d28d9',
17
+ 'signalColor': '#334155',
18
+ 'signalTextColor': '#1f2937',
19
+ 'noteBkgColor': '#f8fafc',
20
+ 'noteTextColor': '#1f2937',
21
+ 'noteBorderColor': '#334155'
22
+ }}}%%
23
+ sequenceDiagram
24
+ autonumber
25
+
26
+ box rgba(165,243,252,0.3) BROWSER/USER
27
+ participant U as 👤 User
28
+ participant B as 🌐 Browser
29
+ end
30
+
31
+ box rgba(221,214,254,0.3) CLIENT APPLICATION
32
+ participant A as 🖥️ App Server
33
+ end
34
+
35
+ box rgba(167,243,208,0.3) SALESFORCE
36
+ participant SF as ☁️ Salesforce<br/>Authorization Server
37
+ end
38
+
39
+ Note over U,SF: Authorization Code Flow (RFC 6749)
40
+
41
+ U->>B: 1. Click "Login with Salesforce"
42
+ B->>A: 2. Initiate OAuth Login
43
+
44
+ A->>A: 3. Generate state parameter (CSRF protection)
45
+
46
+ A->>B: 4. Redirect to Salesforce /authorize
47
+ Note over A,B: response_type=code<br/>client_id=CONSUMER_KEY<br/>redirect_uri=CALLBACK_URL<br/>scope=api refresh_token<br/>state=RANDOM_STATE
48
+
49
+ B->>SF: 5. GET /services/oauth2/authorize
50
+
51
+ SF->>B: 6. Display Login Page
52
+ U->>SF: 7. Enter Username & Password
53
+
54
+ SF->>SF: 8. Authenticate User
55
+
56
+ SF->>B: 9. Display Consent Screen
57
+ Note over SF,B: "App requests access to:<br/>• API Access<br/>• Refresh Token"
58
+
59
+ U->>SF: 10. Grant Consent (Allow)
60
+
61
+ SF->>SF: 11. Generate Authorization Code
62
+
63
+ SF->>B: 12. Redirect to callback_uri
64
+ Note over SF,B: ?code=AUTH_CODE_123<br/>&state=RANDOM_STATE
65
+
66
+ B->>A: 13. Deliver Code to App Server
67
+
68
+ A->>A: 14. Verify state matches
69
+
70
+ A->>SF: 15. POST /services/oauth2/token
71
+ Note over A,SF: grant_type=authorization_code<br/>code=AUTH_CODE_123<br/>client_id=CONSUMER_KEY<br/>client_secret=CONSUMER_SECRET<br/>redirect_uri=CALLBACK_URL
72
+
73
+ SF->>SF: 16. Validate Code & Client
74
+
75
+ SF->>A: 17. Return Tokens
76
+ Note over SF,A: {<br/> access_token: "...",<br/> refresh_token: "...",<br/> instance_url: "https://...",<br/> token_type: "Bearer",<br/> issued_at: "..."<br/>}
77
+
78
+ A->>A: 18. Store tokens securely
79
+
80
+ A->>B: 19. Set user session
81
+ B->>U: 20. ✅ Successfully Logged In
82
+ ```
83
+
84
+ ## ASCII Fallback Template
85
+
86
+ ```
87
+ ┌──────────┐ ┌───────────────┐ ┌────────────────────┐
88
+ │ User/ │ │ Application │ │ Salesforce │
89
+ │ Browser │ │ Server │ │ (Auth Server) │
90
+ └────┬─────┘ └───────┬───────┘ └─────────┬──────────┘
91
+ │ │ │
92
+ │ 1. Click Login │ │
93
+ │──────────────────>│ │
94
+ │ │ │
95
+ │ 2. Redirect to │ │
96
+ │ /authorize │ │
97
+ │<──────────────────│ │
98
+ │ │ │
99
+ │ 3. GET /authorize (client_id, scope, state) │
100
+ │───────────────────────────────────────────────────────>│
101
+ │ │ │
102
+ │ 4. Login Page │
103
+ │<───────────────────────────────────────────────────────│
104
+ │ │ │
105
+ │ 5. Enter Credentials │
106
+ │───────────────────────────────────────────────────────>│
107
+ │ │ │
108
+ │ 6. Consent Screen │
109
+ │<───────────────────────────────────────────────────────│
110
+ │ │ │
111
+ │ 7. Grant Consent (Allow) │
112
+ │───────────────────────────────────────────────────────>│
113
+ │ │ │
114
+ │ 8. Redirect with ?code=ABC123&state=xyz │
115
+ │<───────────────────────────────────────────────────────│
116
+ │ │ │
117
+ │ 9. Deliver Code │ │
118
+ │──────────────────>│ │
119
+ │ │ │
120
+ │ │ 10. POST /token │
121
+ │ │ (code, secret) │
122
+ │ │──────────────────────>│
123
+ │ │ │
124
+ │ │ 11. Access Token + │
125
+ │ │ Refresh Token │
126
+ │ │<──────────────────────│
127
+ │ │ │
128
+ │ 12. Logged In ✅ │ │
129
+ │<──────────────────│ │
130
+ ```
131
+
132
+ ## Key Endpoints
133
+
134
+ | Endpoint | URL | Purpose |
135
+ |----------|-----|---------|
136
+ | Authorization | `https://login.salesforce.com/services/oauth2/authorize` | Start OAuth flow |
137
+ | Token | `https://login.salesforce.com/services/oauth2/token` | Exchange code for tokens |
138
+
139
+ ## Security Considerations
140
+
141
+ 1. **Always use HTTPS** for redirect_uri in production
142
+ 2. **Validate state parameter** to prevent CSRF attacks
143
+ 3. **Store client_secret securely** (never in client-side code)
144
+ 4. **Use short-lived access tokens** with refresh token rotation
145
+
146
+ ## Customization Points
147
+
148
+ Replace these placeholders:
149
+ - `CONSUMER_KEY` → Your Connected App's Consumer Key
150
+ - `CONSUMER_SECRET` → Your Connected App's Consumer Secret
151
+ - `CALLBACK_URL` → Your registered callback URL
152
+ - `RANDOM_STATE` → Cryptographically random state value
@@ -0,0 +1,233 @@
1
+ # Client Credentials Flow Template
2
+
3
+ OAuth 2.0 Client Credentials Grant for server-to-server authentication using client_id and client_secret.
4
+
5
+ ## When to Use
6
+ - Service accounts
7
+ - Background processes
8
+ - System-to-system integrations
9
+ - When no specific user context is needed
10
+ - External Client Apps (ECAs) with client credentials enabled
11
+
12
+ ## Prerequisites
13
+ 1. Connected App or External Client App configured
14
+ 2. Client Credentials flow enabled
15
+ 3. Execution user assigned via Permission Set (for ECAs)
16
+
17
+ ## Mermaid Template
18
+
19
+ ```mermaid
20
+ %%{init: {'theme': 'base', 'themeVariables': {
21
+ 'actorBkg': '#ddd6fe',
22
+ 'actorTextColor': '#1f2937',
23
+ 'actorBorder': '#6d28d9',
24
+ 'signalColor': '#334155',
25
+ 'signalTextColor': '#1f2937',
26
+ 'noteBkgColor': '#f8fafc',
27
+ 'noteTextColor': '#1f2937',
28
+ 'noteBorderColor': '#334155'
29
+ }}}%%
30
+ sequenceDiagram
31
+ autonumber
32
+
33
+ box rgba(221,214,254,0.3) CLIENT APPLICATION
34
+ participant C as 🖥️ Service<br/>(Backend Server)
35
+ end
36
+
37
+ box rgba(167,243,208,0.3) SALESFORCE
38
+ participant SF as ☁️ Salesforce<br/>Authorization Server
39
+ end
40
+
41
+ Note over C,SF: Client Credentials Flow (RFC 6749 Section 4.4)
42
+
43
+ C->>C: 1. Retrieve Client Credentials
44
+ Note over C: client_id = CONSUMER_KEY<br/>client_secret = CONSUMER_SECRET
45
+
46
+ C->>SF: 2. POST /services/oauth2/token
47
+ Note over C,SF: grant_type=client_credentials<br/>client_id=CONSUMER_KEY<br/>client_secret=CONSUMER_SECRET
48
+
49
+ SF->>SF: 3. Validate Client Credentials
50
+ Note over SF: Verify client_id exists<br/>Verify client_secret matches
51
+
52
+ SF->>SF: 4. Determine Execution User
53
+ Note over SF: For ECA: Use assigned<br/>Permission Set user<br/><br/>For Connected App: Use<br/>"Run As" user
54
+
55
+ SF->>SF: 5. Generate Access Token
56
+ Note over SF: Token runs in context<br/>of execution user
57
+
58
+ SF->>C: 6. Return Access Token
59
+ Note over SF,C: {<br/> "access_token": "...",<br/> "instance_url": "https://...",<br/> "token_type": "Bearer",<br/> "issued_at": "..."<br/>}
60
+
61
+ Note over C: ⚠️ No refresh_token returned<br/>⚠️ No user context (runs as service user)
62
+
63
+ C->>SF: 7. Make API Calls
64
+ Note over C,SF: Authorization: Bearer ACCESS_TOKEN
65
+
66
+ SF->>SF: 8. Execute as Service User
67
+ Note over SF: All operations run with<br/>execution user's permissions
68
+
69
+ SF->>C: 9. API Response
70
+ ```
71
+
72
+ ## ASCII Fallback Template
73
+
74
+ ```
75
+ ┌───────────────────────┐ ┌────────────────────┐
76
+ │ Service/Backend │ │ Salesforce │
77
+ │ (client_id/secret) │ │ (Auth Server) │
78
+ └───────────┬───────────┘ └─────────┬──────────┘
79
+ │ │
80
+ │ 1. POST /token │
81
+ │ grant_type= │
82
+ │ client_credentials │
83
+ │ client_id=KEY │
84
+ │ client_secret=SECRET │
85
+ │──────────────────────────>│
86
+ │ │
87
+ │ 2. Validate │
88
+ │ credentials │
89
+ │ │
90
+ │ 3. Determine │
91
+ │ execution │
92
+ │ user │
93
+ │ │
94
+ │ 4. Generate │
95
+ │ access token │
96
+ │ │
97
+ │ 5. Access Token │
98
+ │ (NO refresh token!) │
99
+ │ (NO user context!) │
100
+ │<──────────────────────────│
101
+ │ │
102
+ │ 6. API Request │
103
+ │ (Bearer token) │
104
+ │──────────────────────────>│
105
+ │ │
106
+ │ 7. API Response │
107
+ │ (runs as svc user) │
108
+ │<──────────────────────────│
109
+ ```
110
+
111
+ ## Token Request
112
+
113
+ ```bash
114
+ curl -X POST https://login.salesforce.com/services/oauth2/token \
115
+ -d "grant_type=client_credentials" \
116
+ -d "client_id=YOUR_CONSUMER_KEY" \
117
+ -d "client_secret=YOUR_CONSUMER_SECRET"
118
+ ```
119
+
120
+ ## Response Example
121
+
122
+ ```json
123
+ {
124
+ "access_token": "00D5g000001ABC...!ARcAQNlBrLGj...",
125
+ "instance_url": "https://mycompany.my.salesforce.com",
126
+ "token_type": "Bearer",
127
+ "issued_at": "1702123456789"
128
+ }
129
+ ```
130
+
131
+ ## Code Examples
132
+
133
+ ### Python
134
+ ```python
135
+ import requests
136
+
137
+ response = requests.post(
138
+ 'https://login.salesforce.com/services/oauth2/token',
139
+ data={
140
+ 'grant_type': 'client_credentials',
141
+ 'client_id': 'YOUR_CONSUMER_KEY',
142
+ 'client_secret': 'YOUR_CONSUMER_SECRET'
143
+ }
144
+ )
145
+
146
+ token_data = response.json()
147
+ access_token = token_data['access_token']
148
+ instance_url = token_data['instance_url']
149
+
150
+ # Make API call
151
+ headers = {'Authorization': f'Bearer {access_token}'}
152
+ api_response = requests.get(
153
+ f'{instance_url}/services/data/v66.0/sobjects/Account',
154
+ headers=headers
155
+ )
156
+ ```
157
+
158
+ ### Node.js
159
+ ```javascript
160
+ const axios = require('axios');
161
+
162
+ const response = await axios.post(
163
+ 'https://login.salesforce.com/services/oauth2/token',
164
+ new URLSearchParams({
165
+ grant_type: 'client_credentials',
166
+ client_id: 'YOUR_CONSUMER_KEY',
167
+ client_secret: 'YOUR_CONSUMER_SECRET'
168
+ })
169
+ );
170
+
171
+ const { access_token, instance_url } = response.data;
172
+
173
+ // Make API call
174
+ const apiResponse = await axios.get(
175
+ `${instance_url}/services/data/v66.0/sobjects/Account`,
176
+ { headers: { Authorization: `Bearer ${access_token}` } }
177
+ );
178
+ ```
179
+
180
+ ## Connected App vs External Client App
181
+
182
+ | Feature | Connected App | External Client App (ECA) |
183
+ |---------|--------------|--------------------------|
184
+ | Secret Management | Manual rotation | Automatic rotation supported |
185
+ | User Assignment | "Run As" user | Permission Set assignment |
186
+ | Configuration | Setup → App Manager | Setup → External Client Apps |
187
+ | Recommended | Legacy integrations | New integrations (2024+) |
188
+
189
+ ## Key Characteristics
190
+
191
+ | Aspect | Value |
192
+ |--------|-------|
193
+ | User Interaction | None required |
194
+ | Refresh Token | **Not returned** - re-authenticate |
195
+ | User Context | Runs as execution/service user |
196
+ | Scopes | Limited to service account permissions |
197
+ | Best For | System integrations, batch jobs |
198
+
199
+ ## Enabling Client Credentials
200
+
201
+ ### For Connected App
202
+ 1. Setup → App Manager → Edit Connected App
203
+ 2. Enable OAuth Settings
204
+ 3. Enable "Client Credentials Flow"
205
+ 4. Set "Run As" user
206
+
207
+ ### For External Client App
208
+ 1. Setup → External Client Apps → New
209
+ 2. Configure OAuth Settings
210
+ 3. Enable `isClientCredentialsEnabled`
211
+ 4. Assign Permission Set with user
212
+
213
+ ## Security Considerations
214
+
215
+ 1. **Protect client_secret** - Never expose in client-side code
216
+ 2. **Use dedicated service user** with minimal permissions
217
+ 3. **Rotate secrets regularly** (especially for Connected Apps)
218
+ 4. **Monitor API usage** - Set up event monitoring
219
+ 5. **Restrict IP ranges** if possible
220
+
221
+ ## Limitations
222
+
223
+ - No refresh tokens (must re-authenticate)
224
+ - No user context (cannot impersonate users)
225
+ - Limited to service user's permissions
226
+ - Cannot use for user-specific operations
227
+
228
+ ## Customization Points
229
+
230
+ Replace these placeholders:
231
+ - `CONSUMER_KEY` → Your Connected App's Consumer Key
232
+ - `CONSUMER_SECRET` → Your Connected App's Consumer Secret
233
+ - `login.salesforce.com` → Or `test.salesforce.com` for sandbox
@@ -0,0 +1,295 @@
1
+ # Device Authorization Flow Template
2
+
3
+ OAuth 2.0 Device Authorization Grant for input-constrained devices without browsers.
4
+
5
+ ## When to Use
6
+ - CLI tools (like Salesforce CLI)
7
+ - Smart TVs and streaming devices
8
+ - IoT devices
9
+ - Gaming consoles
10
+ - Any device without a browser or limited input capability
11
+
12
+ ## Mermaid Template
13
+
14
+ ```mermaid
15
+ %%{init: {'theme': 'base', 'themeVariables': {
16
+ 'actorBkg': '#ddd6fe',
17
+ 'actorTextColor': '#1f2937',
18
+ 'actorBorder': '#6d28d9',
19
+ 'signalColor': '#334155',
20
+ 'signalTextColor': '#1f2937',
21
+ 'noteBkgColor': '#f8fafc',
22
+ 'noteTextColor': '#1f2937',
23
+ 'noteBorderColor': '#334155'
24
+ }}}%%
25
+ sequenceDiagram
26
+ autonumber
27
+
28
+ box rgba(165,243,252,0.3) USER
29
+ participant U as 👤 User
30
+ participant B as 🌐 Browser<br/>(on phone/computer)
31
+ end
32
+
33
+ box rgba(221,214,254,0.3) DEVICE
34
+ participant D as 📺 Device<br/>(CLI, TV, IoT)
35
+ end
36
+
37
+ box rgba(167,243,208,0.3) SALESFORCE
38
+ participant SF as ☁️ Salesforce<br/>Authorization Server
39
+ end
40
+
41
+ Note over D,SF: Device Authorization Flow (RFC 8628)
42
+
43
+ U->>D: 1. Initiate Login
44
+
45
+ D->>SF: 2. POST /services/oauth2/device/code
46
+ Note over D,SF: client_id=CONSUMER_KEY<br/>scope=api refresh_token
47
+
48
+ SF->>SF: 3. Generate Device & User Codes
49
+ Note over SF: device_code = long random string<br/>user_code = short readable code
50
+
51
+ SF->>D: 4. Return Codes
52
+ Note over SF,D: {<br/> device_code: "...",<br/> user_code: "ABCD-1234",<br/> verification_uri: "https://login...",<br/> verification_uri_complete: "...",<br/> expires_in: 600,<br/> interval: 5<br/>}
53
+
54
+ D->>U: 5. Display Instructions
55
+ Note over D,U: "Visit: https://login.salesforce.com/..."<br/>"Enter code: ABCD-1234"
56
+
57
+ U->>B: 6. Open Browser
58
+
59
+ B->>SF: 7. Navigate to verification_uri
60
+
61
+ SF->>B: 8. Display Code Entry Page
62
+ U->>SF: 9. Enter user_code: ABCD-1234
63
+
64
+ SF->>B: 10. Display Login Page
65
+ U->>SF: 11. Enter Username & Password
66
+
67
+ SF->>SF: 12. Authenticate User
68
+
69
+ SF->>B: 13. Display Consent Screen
70
+ U->>SF: 14. Grant Consent (Allow)
71
+
72
+ SF->>B: 15. Display Success Message
73
+ Note over SF,B: "You may close this window"
74
+
75
+ loop Poll Every 5 Seconds
76
+ D->>SF: 16. POST /services/oauth2/token
77
+ Note over D,SF: grant_type=device<br/>client_id=CONSUMER_KEY<br/>code=DEVICE_CODE
78
+
79
+ alt Authorization Pending
80
+ SF->>D: authorization_pending
81
+ Note over SF,D: User hasn't authorized yet
82
+ else Slow Down
83
+ SF->>D: slow_down
84
+ Note over SF,D: Polling too fast, increase interval
85
+ else Authorized
86
+ SF->>D: 17. Return Tokens
87
+ end
88
+ end
89
+
90
+ Note over SF,D: {<br/> access_token: "...",<br/> refresh_token: "...",<br/> instance_url: "https://...",<br/> token_type: "Bearer"<br/>}
91
+
92
+ D->>U: 18. ✅ Successfully Logged In
93
+ ```
94
+
95
+ ## ASCII Fallback Template
96
+
97
+ ```
98
+ ┌──────────┐ ┌───────────┐ ┌────────────┐ ┌────────────────┐
99
+ │ User │ │ Browser │ │ Device │ │ Salesforce │
100
+ │ │ │(phone/PC) │ │ (CLI/TV) │ │ (Auth Server) │
101
+ └────┬─────┘ └─────┬─────┘ └──────┬─────┘ └───────┬────────┘
102
+ │ │ │ │
103
+ │ │ 1. Start │ │
104
+ │ │ Login │ │
105
+ │──────────────────────────────> │
106
+ │ │ │ │
107
+ │ │ │ 2. Request │
108
+ │ │ │ device code│
109
+ │ │ │───────────────>│
110
+ │ │ │ │
111
+ │ │ │ 3. device_code│
112
+ │ │ │ user_code │
113
+ │ │ │ ABCD-1234 │
114
+ │ │ │<───────────────│
115
+ │ │ │ │
116
+ │ 4. "Visit URL and enter: ABCD-1234" │
117
+ │<────────────────────────────── │
118
+ │ │ │ │
119
+ │ 5. Open browser │ │
120
+ │─────────────>│ │ │
121
+ │ │ │ │
122
+ │ │ 6. Visit verification URL │
123
+ │ │──────────────────────────────>│
124
+ │ │ │ │
125
+ │ │ 7. Enter code page │
126
+ │ │<──────────────────────────────│
127
+ │ │ │ │
128
+ │ 8. Enter ABCD-1234 │ │
129
+ │─────────────>│──────────────────────────────>│
130
+ │ │ │ │
131
+ │ 9. Login + Consent │ │
132
+ │─────────────────────────────────────────────>│
133
+ │ │ │ │
134
+ │ │ │ 10. Poll for │
135
+ │ │ │ token │
136
+ │ │ │ ┌───────────>│
137
+ │ │ │ │ │
138
+ │ │ │ │ (repeat) │
139
+ │ │ │ │ │
140
+ │ │ │ 11. Tokens! │
141
+ │ │ │<─┴────────────│
142
+ │ │ │ │
143
+ │ 12. Logged In ✅ │ │
144
+ │<────────────────────────────── │
145
+ ```
146
+
147
+ ## Step 1: Request Device Code
148
+
149
+ ```bash
150
+ curl -X POST https://login.salesforce.com/services/oauth2/device/code \
151
+ -d "client_id=YOUR_CONSUMER_KEY" \
152
+ -d "scope=api refresh_token"
153
+ ```
154
+
155
+ ### Response
156
+ ```json
157
+ {
158
+ "device_code": "aDEvhqZjZ2FwcAA6y...",
159
+ "user_code": "ABCD-1234",
160
+ "verification_uri": "https://login.salesforce.com/setup/connect",
161
+ "verification_uri_complete": "https://login.salesforce.com/setup/connect?user_code=ABCD-1234",
162
+ "expires_in": 600,
163
+ "interval": 5
164
+ }
165
+ ```
166
+
167
+ ## Step 2: Display to User
168
+
169
+ ```
170
+ ═══════════════════════════════════════════════════════════════
171
+ To authorize this device, please:
172
+
173
+ 1. Visit: https://login.salesforce.com/setup/connect
174
+ 2. Enter code: ABCD-1234
175
+
176
+ Waiting for authorization...
177
+ ═══════════════════════════════════════════════════════════════
178
+ ```
179
+
180
+ ## Step 3: Poll for Token
181
+
182
+ ```bash
183
+ curl -X POST https://login.salesforce.com/services/oauth2/token \
184
+ -d "grant_type=device" \
185
+ -d "client_id=YOUR_CONSUMER_KEY" \
186
+ -d "code=DEVICE_CODE"
187
+ ```
188
+
189
+ ### Possible Responses
190
+
191
+ **Authorization Pending:**
192
+ ```json
193
+ {
194
+ "error": "authorization_pending",
195
+ "error_description": "User has not yet authorized"
196
+ }
197
+ ```
198
+
199
+ **Slow Down (polling too fast):**
200
+ ```json
201
+ {
202
+ "error": "slow_down",
203
+ "error_description": "Polling too fast"
204
+ }
205
+ ```
206
+
207
+ **Success:**
208
+ ```json
209
+ {
210
+ "access_token": "00D5g000001ABC...!ARcAQNlBrLGj...",
211
+ "refresh_token": "5Aep8617...",
212
+ "instance_url": "https://mycompany.my.salesforce.com",
213
+ "token_type": "Bearer",
214
+ "issued_at": "1702123456789"
215
+ }
216
+ ```
217
+
218
+ ## Code Example (CLI Tool)
219
+
220
+ ```python
221
+ import requests
222
+ import time
223
+
224
+ CLIENT_ID = 'YOUR_CONSUMER_KEY'
225
+
226
+ # Step 1: Request device code
227
+ device_response = requests.post(
228
+ 'https://login.salesforce.com/services/oauth2/device/code',
229
+ data={'client_id': CLIENT_ID, 'scope': 'api refresh_token'}
230
+ ).json()
231
+
232
+ device_code = device_response['device_code']
233
+ user_code = device_response['user_code']
234
+ verification_uri = device_response['verification_uri']
235
+ interval = device_response['interval']
236
+
237
+ # Step 2: Display to user
238
+ print(f"\nVisit: {verification_uri}")
239
+ print(f"Enter code: {user_code}\n")
240
+
241
+ # Step 3: Poll for token
242
+ while True:
243
+ time.sleep(interval)
244
+
245
+ token_response = requests.post(
246
+ 'https://login.salesforce.com/services/oauth2/token',
247
+ data={
248
+ 'grant_type': 'device',
249
+ 'client_id': CLIENT_ID,
250
+ 'code': device_code
251
+ }
252
+ ).json()
253
+
254
+ if 'access_token' in token_response:
255
+ print("✅ Authorization successful!")
256
+ break
257
+ elif token_response.get('error') == 'slow_down':
258
+ interval += 5 # Increase polling interval
259
+ elif token_response.get('error') != 'authorization_pending':
260
+ print(f"Error: {token_response.get('error_description')}")
261
+ break
262
+
263
+ access_token = token_response['access_token']
264
+ ```
265
+
266
+ ## Key Characteristics
267
+
268
+ | Aspect | Value |
269
+ |--------|-------|
270
+ | User Interaction | On separate device |
271
+ | Polling Required | Yes (every N seconds) |
272
+ | Refresh Token | Yes, returned |
273
+ | Best For | CLI tools, IoT, TVs |
274
+ | User Code Format | Short, human-readable |
275
+
276
+ ## Timing Parameters
277
+
278
+ | Parameter | Value | Purpose |
279
+ |-----------|-------|---------|
280
+ | `expires_in` | 600 (10 min) | How long codes are valid |
281
+ | `interval` | 5 (seconds) | Minimum time between polls |
282
+
283
+ ## Security Considerations
284
+
285
+ 1. **Display user code clearly** - Use large font, easy to read
286
+ 2. **Honor interval** - Don't poll faster than specified
287
+ 3. **Handle expiration** - Codes expire after `expires_in` seconds
288
+ 4. **Secure token storage** - Store tokens securely on device
289
+
290
+ ## Customization Points
291
+
292
+ Replace these placeholders:
293
+ - `CONSUMER_KEY` → Your Connected App's Consumer Key
294
+ - `DEVICE_CODE` → Device code from initial response
295
+ - `login.salesforce.com` → Or `test.salesforce.com` for sandbox