sfdx-browserforce-plugin 5.1.1 → 5.2.0-next.1

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 (264) hide show
  1. package/README.md +54 -16
  2. package/lib/browserforce-command.d.ts +15 -0
  3. package/lib/browserforce-command.js +61 -0
  4. package/lib/browserforce-command.js.map +1 -0
  5. package/lib/browserforce.d.ts +29 -0
  6. package/lib/browserforce.js +194 -0
  7. package/lib/browserforce.js.map +1 -0
  8. package/lib/commands/browserforce/apply.d.ts +10 -0
  9. package/lib/commands/browserforce/apply.js +54 -0
  10. package/lib/commands/browserforce/apply.js.map +1 -0
  11. package/lib/commands/browserforce/plan.d.ts +10 -0
  12. package/lib/commands/browserforce/plan.js +56 -0
  13. package/lib/commands/browserforce/plan.js.map +1 -0
  14. package/lib/config-parser.d.ts +16 -0
  15. package/lib/config-parser.js +24 -0
  16. package/lib/config-parser.js.map +1 -0
  17. package/lib/index.d.ts +1 -0
  18. package/lib/index.js +2 -0
  19. package/lib/index.js.map +1 -0
  20. package/lib/jsforce-utils.d.ts +5 -0
  21. package/lib/jsforce-utils.js +14 -0
  22. package/lib/jsforce-utils.js.map +1 -0
  23. package/lib/pages/login.d.ts +8 -0
  24. package/lib/pages/login.js +39 -0
  25. package/lib/pages/login.js.map +1 -0
  26. package/lib/plugin.d.ts +17 -0
  27. package/lib/plugin.js +30 -0
  28. package/lib/plugin.js.map +1 -0
  29. package/lib/plugins/activity-settings/index.d.ts +9 -0
  30. package/lib/plugins/activity-settings/index.e2e-spec.d.ts +1 -0
  31. package/lib/plugins/activity-settings/index.e2e-spec.js +36 -0
  32. package/lib/plugins/activity-settings/index.e2e-spec.js.map +1 -0
  33. package/lib/plugins/activity-settings/index.js +34 -0
  34. package/lib/plugins/activity-settings/index.js.map +1 -0
  35. package/lib/plugins/company-information/index.d.ts +8 -0
  36. package/lib/plugins/company-information/index.e2e-spec.d.ts +1 -0
  37. package/lib/plugins/company-information/index.e2e-spec.js +37 -0
  38. package/lib/plugins/company-information/index.e2e-spec.js.map +1 -0
  39. package/lib/plugins/company-information/index.js +60 -0
  40. package/lib/plugins/company-information/index.js.map +1 -0
  41. package/lib/plugins/customer-portal/available-custom-objects/index.d.ts +14 -0
  42. package/lib/plugins/customer-portal/available-custom-objects/index.js +114 -0
  43. package/lib/plugins/customer-portal/available-custom-objects/index.js.map +1 -0
  44. package/lib/plugins/customer-portal/available-custom-objects/index.test.d.ts +1 -0
  45. package/lib/plugins/customer-portal/available-custom-objects/index.test.js +39 -0
  46. package/lib/plugins/customer-portal/available-custom-objects/index.test.js.map +1 -0
  47. package/lib/plugins/customer-portal/enabled/index.d.ts +6 -0
  48. package/lib/plugins/customer-portal/enabled/index.js +26 -0
  49. package/lib/plugins/customer-portal/enabled/index.js.map +1 -0
  50. package/lib/plugins/customer-portal/enabled/index.test.d.ts +1 -0
  51. package/lib/plugins/customer-portal/enabled/index.test.js +34 -0
  52. package/lib/plugins/customer-portal/enabled/index.test.js.map +1 -0
  53. package/lib/plugins/customer-portal/index.d.ts +15 -0
  54. package/lib/plugins/customer-portal/index.e2e-spec.d.ts +1 -0
  55. package/lib/plugins/customer-portal/index.e2e-spec.js +202 -0
  56. package/lib/plugins/customer-portal/index.e2e-spec.js.map +1 -0
  57. package/lib/plugins/customer-portal/index.js +59 -0
  58. package/lib/plugins/customer-portal/index.js.map +1 -0
  59. package/lib/plugins/customer-portal/index.test.d.ts +1 -0
  60. package/lib/plugins/customer-portal/index.test.js +84 -0
  61. package/lib/plugins/customer-portal/index.test.js.map +1 -0
  62. package/lib/plugins/customer-portal/portals/index.d.ts +25 -0
  63. package/lib/plugins/customer-portal/portals/index.js +216 -0
  64. package/lib/plugins/customer-portal/portals/index.js.map +1 -0
  65. package/lib/plugins/customer-portal/portals/index.test.d.ts +1 -0
  66. package/lib/plugins/customer-portal/portals/index.test.js +140 -0
  67. package/lib/plugins/customer-portal/portals/index.test.js.map +1 -0
  68. package/lib/plugins/density-settings/index.d.ts +10 -0
  69. package/lib/plugins/density-settings/index.e2e-spec.d.ts +1 -0
  70. package/lib/plugins/density-settings/index.e2e-spec.js +39 -0
  71. package/lib/plugins/density-settings/index.e2e-spec.js.map +1 -0
  72. package/lib/plugins/density-settings/index.js +54 -0
  73. package/lib/plugins/density-settings/index.js.map +1 -0
  74. package/lib/plugins/deprecated.d.ts +4 -0
  75. package/lib/plugins/deprecated.js +28 -0
  76. package/lib/plugins/deprecated.js.map +1 -0
  77. package/lib/plugins/email-deliverability/index.d.ts +9 -0
  78. package/lib/plugins/email-deliverability/index.e2e-spec.d.ts +1 -0
  79. package/lib/plugins/email-deliverability/index.e2e-spec.js +55 -0
  80. package/lib/plugins/email-deliverability/index.e2e-spec.js.map +1 -0
  81. package/lib/plugins/email-deliverability/index.js +42 -0
  82. package/lib/plugins/email-deliverability/index.js.map +1 -0
  83. package/lib/plugins/high-velocity-sales-settings/index.d.ts +10 -0
  84. package/lib/plugins/high-velocity-sales-settings/index.e2e-spec.d.ts +1 -0
  85. package/lib/plugins/high-velocity-sales-settings/index.e2e-spec.js +29 -0
  86. package/lib/plugins/high-velocity-sales-settings/index.e2e-spec.js.map +1 -0
  87. package/lib/plugins/high-velocity-sales-settings/index.js +42 -0
  88. package/lib/plugins/high-velocity-sales-settings/index.js.map +1 -0
  89. package/lib/plugins/high-velocity-sales-settings/page.d.ts +7 -0
  90. package/lib/plugins/high-velocity-sales-settings/page.js +28 -0
  91. package/lib/plugins/high-velocity-sales-settings/page.js.map +1 -0
  92. package/lib/plugins/history-tracking/index.d.ts +17 -0
  93. package/lib/plugins/history-tracking/index.e2e-spec.d.ts +1 -0
  94. package/lib/plugins/history-tracking/index.e2e-spec.js +106 -0
  95. package/lib/plugins/history-tracking/index.e2e-spec.js.map +1 -0
  96. package/lib/plugins/history-tracking/index.js +176 -0
  97. package/lib/plugins/history-tracking/index.js.map +1 -0
  98. package/lib/plugins/home-page-layouts/index.d.ts +14 -0
  99. package/lib/plugins/home-page-layouts/index.e2e-spec.d.ts +1 -0
  100. package/lib/plugins/home-page-layouts/index.e2e-spec.js +47 -0
  101. package/lib/plugins/home-page-layouts/index.e2e-spec.js.map +1 -0
  102. package/lib/plugins/home-page-layouts/index.js +94 -0
  103. package/lib/plugins/home-page-layouts/index.js.map +1 -0
  104. package/lib/plugins/home-page-layouts/index.test.d.ts +1 -0
  105. package/lib/plugins/home-page-layouts/index.test.js +104 -0
  106. package/lib/plugins/home-page-layouts/index.test.js.map +1 -0
  107. package/lib/plugins/index.d.ts +24 -0
  108. package/lib/plugins/index.js +25 -0
  109. package/lib/plugins/index.js.map +1 -0
  110. package/lib/plugins/lightning-experience-settings/index.d.ts +18 -0
  111. package/lib/plugins/lightning-experience-settings/index.e2e-spec.d.ts +1 -0
  112. package/lib/plugins/lightning-experience-settings/index.e2e-spec.js +40 -0
  113. package/lib/plugins/lightning-experience-settings/index.e2e-spec.js.map +1 -0
  114. package/lib/plugins/lightning-experience-settings/index.js +101 -0
  115. package/lib/plugins/lightning-experience-settings/index.js.map +1 -0
  116. package/lib/plugins/linkedin-sales-navigator-settings/index.d.ts +8 -0
  117. package/lib/plugins/linkedin-sales-navigator-settings/index.e2e-spec.d.ts +1 -0
  118. package/lib/plugins/linkedin-sales-navigator-settings/index.e2e-spec.js +29 -0
  119. package/lib/plugins/linkedin-sales-navigator-settings/index.e2e-spec.js.map +1 -0
  120. package/lib/plugins/linkedin-sales-navigator-settings/index.js +15 -0
  121. package/lib/plugins/linkedin-sales-navigator-settings/index.js.map +1 -0
  122. package/lib/plugins/linkedin-sales-navigator-settings/page.d.ts +10 -0
  123. package/lib/plugins/linkedin-sales-navigator-settings/page.js +42 -0
  124. package/lib/plugins/linkedin-sales-navigator-settings/page.js.map +1 -0
  125. package/lib/plugins/omni-channel-settings/index.d.ts +9 -0
  126. package/lib/plugins/omni-channel-settings/index.e2e-spec.d.ts +1 -0
  127. package/lib/plugins/omni-channel-settings/index.e2e-spec.js +30 -0
  128. package/lib/plugins/omni-channel-settings/index.e2e-spec.js.map +1 -0
  129. package/lib/plugins/omni-channel-settings/index.js +21 -0
  130. package/lib/plugins/omni-channel-settings/index.js.map +1 -0
  131. package/lib/plugins/opportunity-splits/index.d.ts +9 -0
  132. package/lib/plugins/opportunity-splits/index.e2e-spec.d.ts +1 -0
  133. package/lib/plugins/opportunity-splits/index.e2e-spec.js +46 -0
  134. package/lib/plugins/opportunity-splits/index.e2e-spec.js.map +1 -0
  135. package/lib/plugins/opportunity-splits/index.js +32 -0
  136. package/lib/plugins/opportunity-splits/index.js.map +1 -0
  137. package/lib/plugins/opportunity-splits/pages/layout-selection.d.ts +8 -0
  138. package/lib/plugins/opportunity-splits/pages/layout-selection.js +15 -0
  139. package/lib/plugins/opportunity-splits/pages/layout-selection.js.map +1 -0
  140. package/lib/plugins/opportunity-splits/pages/overview.d.ts +10 -0
  141. package/lib/plugins/opportunity-splits/pages/overview.js +33 -0
  142. package/lib/plugins/opportunity-splits/pages/overview.js.map +1 -0
  143. package/lib/plugins/opportunity-splits/pages/setup.d.ts +8 -0
  144. package/lib/plugins/opportunity-splits/pages/setup.js +17 -0
  145. package/lib/plugins/opportunity-splits/pages/setup.js.map +1 -0
  146. package/lib/plugins/permission-sets/index.d.ts +10 -0
  147. package/lib/plugins/permission-sets/index.e2e-spec.d.ts +1 -0
  148. package/lib/plugins/permission-sets/index.e2e-spec.js +47 -0
  149. package/lib/plugins/permission-sets/index.e2e-spec.js.map +1 -0
  150. package/lib/plugins/permission-sets/index.js +22 -0
  151. package/lib/plugins/permission-sets/index.js.map +1 -0
  152. package/lib/plugins/permission-sets/service-presence-status/index.d.ts +10 -0
  153. package/lib/plugins/permission-sets/service-presence-status/index.js +67 -0
  154. package/lib/plugins/permission-sets/service-presence-status/index.js.map +1 -0
  155. package/lib/plugins/picklists/field-dependencies/index.d.ts +11 -0
  156. package/lib/plugins/picklists/field-dependencies/index.js +56 -0
  157. package/lib/plugins/picklists/field-dependencies/index.js.map +1 -0
  158. package/lib/plugins/picklists/field-dependencies/index.test.d.ts +1 -0
  159. package/lib/plugins/picklists/field-dependencies/index.test.js +64 -0
  160. package/lib/plugins/picklists/field-dependencies/index.test.js.map +1 -0
  161. package/lib/plugins/picklists/field-dependencies/pages.d.ts +14 -0
  162. package/lib/plugins/picklists/field-dependencies/pages.js +49 -0
  163. package/lib/plugins/picklists/field-dependencies/pages.js.map +1 -0
  164. package/lib/plugins/picklists/index.d.ts +23 -0
  165. package/lib/plugins/picklists/index.e2e-spec.d.ts +1 -0
  166. package/lib/plugins/picklists/index.e2e-spec.js +100 -0
  167. package/lib/plugins/picklists/index.e2e-spec.js.map +1 -0
  168. package/lib/plugins/picklists/index.js +153 -0
  169. package/lib/plugins/picklists/index.js.map +1 -0
  170. package/lib/plugins/picklists/pages.d.ts +41 -0
  171. package/lib/plugins/picklists/pages.js +166 -0
  172. package/lib/plugins/picklists/pages.js.map +1 -0
  173. package/lib/plugins/picklists/standard-value-set.d.ts +1 -0
  174. package/lib/plugins/picklists/standard-value-set.js +80 -0
  175. package/lib/plugins/picklists/standard-value-set.js.map +1 -0
  176. package/lib/plugins/record-types/index.d.ts +13 -0
  177. package/lib/plugins/record-types/index.e2e-spec.d.ts +1 -0
  178. package/lib/plugins/record-types/index.e2e-spec.js +73 -0
  179. package/lib/plugins/record-types/index.e2e-spec.js.map +1 -0
  180. package/lib/plugins/record-types/index.js +70 -0
  181. package/lib/plugins/record-types/index.js.map +1 -0
  182. package/lib/plugins/record-types/pages.d.ts +15 -0
  183. package/lib/plugins/record-types/pages.js +56 -0
  184. package/lib/plugins/record-types/pages.js.map +1 -0
  185. package/lib/plugins/relate-contact-to-multiple-accounts/index.d.ts +11 -0
  186. package/lib/plugins/relate-contact-to-multiple-accounts/index.e2e-spec.d.ts +1 -0
  187. package/lib/plugins/relate-contact-to-multiple-accounts/index.e2e-spec.js +29 -0
  188. package/lib/plugins/relate-contact-to-multiple-accounts/index.e2e-spec.js.map +1 -0
  189. package/lib/plugins/relate-contact-to-multiple-accounts/index.js +62 -0
  190. package/lib/plugins/relate-contact-to-multiple-accounts/index.js.map +1 -0
  191. package/lib/plugins/reports-and-dashboards/folder-sharing/index.d.ts +8 -0
  192. package/lib/plugins/reports-and-dashboards/folder-sharing/index.e2e-spec.d.ts +1 -0
  193. package/lib/plugins/reports-and-dashboards/folder-sharing/index.e2e-spec.js +3 -0
  194. package/lib/plugins/reports-and-dashboards/folder-sharing/index.e2e-spec.js.map +1 -0
  195. package/lib/plugins/reports-and-dashboards/folder-sharing/index.js +55 -0
  196. package/lib/plugins/reports-and-dashboards/folder-sharing/index.js.map +1 -0
  197. package/lib/plugins/reports-and-dashboards/index.d.ts +11 -0
  198. package/lib/plugins/reports-and-dashboards/index.e2e-spec.d.ts +1 -0
  199. package/lib/plugins/reports-and-dashboards/index.e2e-spec.js +3 -0
  200. package/lib/plugins/reports-and-dashboards/index.e2e-spec.js.map +1 -0
  201. package/lib/plugins/reports-and-dashboards/index.js +29 -0
  202. package/lib/plugins/reports-and-dashboards/index.js.map +1 -0
  203. package/lib/plugins/salesforce-cpq-config/formConfig.d.ts +17 -0
  204. package/lib/plugins/salesforce-cpq-config/formConfig.js +649 -0
  205. package/lib/plugins/salesforce-cpq-config/formConfig.js.map +1 -0
  206. package/lib/plugins/salesforce-cpq-config/index.d.ts +7 -0
  207. package/lib/plugins/salesforce-cpq-config/index.e2e-spec.d.ts +1 -0
  208. package/lib/plugins/salesforce-cpq-config/index.e2e-spec.js +37 -0
  209. package/lib/plugins/salesforce-cpq-config/index.e2e-spec.js.map +1 -0
  210. package/lib/plugins/salesforce-cpq-config/index.js +214 -0
  211. package/lib/plugins/salesforce-cpq-config/index.js.map +1 -0
  212. package/lib/plugins/salesforce-to-salesforce/index.d.ts +9 -0
  213. package/lib/plugins/salesforce-to-salesforce/index.e2e-spec.d.ts +1 -0
  214. package/lib/plugins/salesforce-to-salesforce/index.e2e-spec.js +35 -0
  215. package/lib/plugins/salesforce-to-salesforce/index.e2e-spec.js.map +1 -0
  216. package/lib/plugins/salesforce-to-salesforce/index.js +36 -0
  217. package/lib/plugins/salesforce-to-salesforce/index.js.map +1 -0
  218. package/lib/plugins/security/authentication-configuration/index.d.ts +11 -0
  219. package/lib/plugins/security/authentication-configuration/index.e2e-spec.d.ts +1 -0
  220. package/lib/plugins/security/authentication-configuration/index.e2e-spec.js +101 -0
  221. package/lib/plugins/security/authentication-configuration/index.e2e-spec.js.map +1 -0
  222. package/lib/plugins/security/authentication-configuration/index.js +67 -0
  223. package/lib/plugins/security/authentication-configuration/index.js.map +1 -0
  224. package/lib/plugins/security/certificate-and-key-management/index.d.ts +23 -0
  225. package/lib/plugins/security/certificate-and-key-management/index.e2e-spec.d.ts +1 -0
  226. package/lib/plugins/security/certificate-and-key-management/index.e2e-spec.js +63 -0
  227. package/lib/plugins/security/certificate-and-key-management/index.e2e-spec.js.map +1 -0
  228. package/lib/plugins/security/certificate-and-key-management/index.js +154 -0
  229. package/lib/plugins/security/certificate-and-key-management/index.js.map +1 -0
  230. package/lib/plugins/security/certificate-and-key-management/index.test.d.ts +1 -0
  231. package/lib/plugins/security/certificate-and-key-management/index.test.js +61 -0
  232. package/lib/plugins/security/certificate-and-key-management/index.test.js.map +1 -0
  233. package/lib/plugins/security/index.d.ts +13 -0
  234. package/lib/plugins/security/index.js +42 -0
  235. package/lib/plugins/security/index.js.map +1 -0
  236. package/lib/plugins/service-channels/capacity/index.d.ts +18 -0
  237. package/lib/plugins/service-channels/capacity/index.js +162 -0
  238. package/lib/plugins/service-channels/capacity/index.js.map +1 -0
  239. package/lib/plugins/service-channels/index.d.ts +12 -0
  240. package/lib/plugins/service-channels/index.e2e-spec.d.ts +1 -0
  241. package/lib/plugins/service-channels/index.e2e-spec.js +61 -0
  242. package/lib/plugins/service-channels/index.e2e-spec.js.map +1 -0
  243. package/lib/plugins/service-channels/index.js +38 -0
  244. package/lib/plugins/service-channels/index.js.map +1 -0
  245. package/lib/plugins/slack/index.d.ts +9 -0
  246. package/lib/plugins/slack/index.e2e-spec.d.ts +1 -0
  247. package/lib/plugins/slack/index.e2e-spec.js +47 -0
  248. package/lib/plugins/slack/index.e2e-spec.js.map +1 -0
  249. package/lib/plugins/slack/index.js +46 -0
  250. package/lib/plugins/slack/index.js.map +1 -0
  251. package/lib/plugins/user-access-policies/index.d.ts +19 -0
  252. package/lib/plugins/user-access-policies/index.e2e-spec.d.ts +1 -0
  253. package/lib/plugins/user-access-policies/index.e2e-spec.js +63 -0
  254. package/lib/plugins/user-access-policies/index.e2e-spec.js.map +1 -0
  255. package/lib/plugins/user-access-policies/index.js +107 -0
  256. package/lib/plugins/user-access-policies/index.js.map +1 -0
  257. package/lib/plugins/user-access-policies/page.d.ts +29 -0
  258. package/lib/plugins/user-access-policies/page.js +115 -0
  259. package/lib/plugins/user-access-policies/page.js.map +1 -0
  260. package/lib/plugins/utils.d.ts +3 -0
  261. package/lib/plugins/utils.js +47 -0
  262. package/lib/plugins/utils.js.map +1 -0
  263. package/oclif.manifest.json +153 -0
  264. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.e2e-spec.js","sourceRoot":"","sources":["../../../src/plugins/service-channels/index.e2e-spec.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,KAAK,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE;IAC7B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,IAAI,MAAuB,CAAC;IAC5B,MAAM,CAAC,GAAG,EAAE;QACV,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,MAAM,wBAAwB,GAAG;QAC/B;YACE,2BAA2B,EAAE,UAAU;YACvC,QAAQ,EAAE;gBACR,aAAa,EAAE,aAAa;gBAC5B,WAAW,EAAE,WAAW;gBACxB,mBAAmB,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC;gBACjD,qCAAqC,EAAE,IAAI;gBAC3C,uCAAuC,EAAE,IAAI;aAC9C;SACF;QACD;YACE,2BAA2B,EAAE,UAAU;YACvC,QAAQ,EAAE;gBACR,aAAa,EAAE,aAAa;gBAC5B,WAAW,EAAE,eAAe;gBAC5B,mBAAmB,EAAE,CAAC,aAAa,EAAE,WAAW,CAAC;gBACjD,qCAAqC,EAAE,IAAI;gBAC3C,uCAAuC,EAAE,IAAI;aAC9C;SACF;KACF,CAAC;IACF,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,kBAAkB,GAAG,IAAI,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC9D,MAAM,kBAAkB,CAAC,GAAG,CAAC,EAAE,8BAA8B,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE;YAC5C,SAAS;YACT,QAAQ;YACR,OAAO;YACP,IAAI;YACJ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC;YACnC,QAAQ;SACT,CAAC,CAAC;QACH,MAAM,CAAC,eAAe,CACpB,eAAe,CAAC,MAAM,EACtB,CAAC,EACD,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,CAClC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,kBAAkB,GAAG,IAAI,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC9D,MAAM,kBAAkB,CAAC,GAAG,CAAC,EAAE,8BAA8B,EAAE,IAAI,EAAE,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,MAAM,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;QAC5D,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { BrowserforcePlugin } from '../../plugin.js';
2
+ import { Capacity } from './capacity/index.js';
3
+ export class ServiceChannels extends BrowserforcePlugin {
4
+ async retrieve(definition) {
5
+ const pluginCapacity = new Capacity(this.browserforce);
6
+ const serviceChannels = [];
7
+ for await (const serviceChannel of definition) {
8
+ serviceChannels.push({
9
+ serviceChannelDeveloperName: serviceChannel.serviceChannelDeveloperName,
10
+ capacity: await pluginCapacity.retrieve(serviceChannel),
11
+ });
12
+ }
13
+ return serviceChannels;
14
+ }
15
+ diff(state, definition) {
16
+ const pluginCapacity = new Capacity(this.browserforce);
17
+ const serviceChannels = [];
18
+ for (const serviceChannelDefinition of definition) {
19
+ const serviceChannelState = state.find((serviceChannelState) => serviceChannelState.serviceChannelDeveloperName ===
20
+ serviceChannelDefinition.serviceChannelDeveloperName);
21
+ const capacity = pluginCapacity.diff(serviceChannelState.capacity, serviceChannelDefinition.capacity);
22
+ if (capacity !== undefined) {
23
+ serviceChannels.push({
24
+ serviceChannelDeveloperName: serviceChannelDefinition.serviceChannelDeveloperName,
25
+ capacity,
26
+ });
27
+ }
28
+ }
29
+ return serviceChannels.length ? serviceChannels : undefined;
30
+ }
31
+ async apply(plan) {
32
+ const pluginCapacity = new Capacity(this.browserforce);
33
+ for await (const serviceChannel of plan) {
34
+ await pluginCapacity.apply(serviceChannel);
35
+ }
36
+ }
37
+ }
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/service-channels/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAkB,MAAM,qBAAqB,CAAC;AAO/D,MAAM,OAAO,eAAgB,SAAQ,kBAAkB;IAC9C,KAAK,CAAC,QAAQ,CACnB,UAA6B;QAE7B,MAAM,cAAc,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEvD,MAAM,eAAe,GAAqB,EAAE,CAAC;QAE7C,IAAI,KAAK,EAAE,MAAM,cAAc,IAAI,UAAU,EAAE,CAAC;YAC9C,eAAe,CAAC,IAAI,CAAC;gBACnB,2BAA2B,EAAE,cAAc,CAAC,2BAA2B;gBACvE,QAAQ,EAAE,MAAM,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC;aACxD,CAAC,CAAC;QACL,CAAC;QAED,OAAO,eAAe,CAAC;IACzB,CAAC;IAEM,IAAI,CACT,KAAuB,EACvB,UAA4B;QAE5B,MAAM,cAAc,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEvD,MAAM,eAAe,GAAqB,EAAE,CAAC;QAE7C,KAAK,MAAM,wBAAwB,IAAI,UAAU,EAAE,CAAC;YAClD,MAAM,mBAAmB,GAAG,KAAK,CAAC,IAAI,CACpC,CAAC,mBAAmB,EAAE,EAAE,CACtB,mBAAmB,CAAC,2BAA2B;gBAC/C,wBAAwB,CAAC,2BAA2B,CACvD,CAAC;YAEF,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAClC,mBAAmB,CAAC,QAAQ,EAC5B,wBAAwB,CAAC,QAAQ,CAClC,CAAC;YAEF,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,eAAe,CAAC,IAAI,CAAC;oBACnB,2BAA2B,EACzB,wBAAwB,CAAC,2BAA2B;oBACtD,QAAQ;iBACT,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9D,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,IAAsB;QACvC,MAAM,cAAc,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEvD,IAAI,KAAK,EAAE,MAAM,cAAc,IAAI,IAAI,EAAE,CAAC;YACxC,MAAM,cAAc,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import { BrowserforcePlugin } from '../../plugin.js';
2
+ export type Config = {
3
+ agreeToTermsAndConditions: boolean;
4
+ enableSalesCloudForSlack: boolean;
5
+ };
6
+ export declare class Slack extends BrowserforcePlugin {
7
+ retrieve(definition?: Config): Promise<Config>;
8
+ apply(config: Config): Promise<void>;
9
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,47 @@
1
+ import assert from 'assert';
2
+ import { Slack } from './index.js';
3
+ describe(Slack.name, function () {
4
+ let plugin;
5
+ before(() => {
6
+ plugin = new Slack(global.bf);
7
+ });
8
+ const configEnable = {
9
+ agreeToTermsAndConditions: true,
10
+ enableSalesCloudForSlack: true,
11
+ };
12
+ const configDisabledSalesCloud = {
13
+ agreeToTermsAndConditions: true,
14
+ enableSalesCloudForSlack: false,
15
+ };
16
+ const configDisabled = {
17
+ agreeToTermsAndConditions: false,
18
+ enableSalesCloudForSlack: false,
19
+ };
20
+ it('should accept terms and conditions and enable Sales Cloud for Slack', async () => {
21
+ await plugin.run(configEnable);
22
+ });
23
+ it('should already be accepted and enabled', async () => {
24
+ const res = await plugin.run(configEnable);
25
+ assert.deepStrictEqual(res, { message: 'no action necessary' });
26
+ });
27
+ it('should disable Sales Cloud for Slack', async () => {
28
+ await plugin.run(configDisabledSalesCloud);
29
+ });
30
+ it('should already be disabled', async () => {
31
+ const res = await plugin.run(configDisabledSalesCloud);
32
+ assert.deepStrictEqual(res, { message: 'no action necessary' });
33
+ });
34
+ it('should fail to unaccept terms and conditions', async () => {
35
+ let err;
36
+ try {
37
+ await plugin.apply(configDisabled);
38
+ }
39
+ catch (e) {
40
+ err = e;
41
+ }
42
+ assert.throws(() => {
43
+ throw err;
44
+ }, /cannot be unaccepted/);
45
+ });
46
+ });
47
+ //# sourceMappingURL=index.e2e-spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.e2e-spec.js","sourceRoot":"","sources":["../../../src/plugins/slack/index.e2e-spec.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAe,KAAK,EAAE,MAAM,YAAY,CAAC;AAEhD,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE;IACnB,IAAI,MAAa,CAAC;IAClB,MAAM,CAAC,GAAG,EAAE;QACV,MAAM,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAW;QAC3B,yBAAyB,EAAE,IAAI;QAC/B,wBAAwB,EAAE,IAAI;KAC/B,CAAC;IACF,MAAM,wBAAwB,GAAW;QACvC,yBAAyB,EAAE,IAAI;QAC/B,wBAAwB,EAAE,KAAK;KAChC,CAAC;IACF,MAAM,cAAc,GAAW;QAC7B,yBAAyB,EAAE,KAAK;QAChC,wBAAwB,EAAE,KAAK;KAChC,CAAC;IACF,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC3C,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACvD,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,IAAI,GAAG,CAAC;QACR,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,GAAG,GAAG,CAAC,CAAC;QACV,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;YACjB,MAAM,GAAG,CAAC;QACZ,CAAC,EAAE,sBAAsB,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,46 @@
1
+ import { BrowserforcePlugin } from '../../plugin.js';
2
+ const BASE_PATH = 'lightning/setup/SlackSetupAssistant/home';
3
+ const TOS_CHECKBOX = 'setup_service-slack-agree-to-terms input[type="checkbox"]';
4
+ const SALES_CLOUD_FOR_SLACK_CHECKBOX = 'input[type="checkbox"][name="SlkSetupStepSalesCloudForSlack"]';
5
+ const TOAST_MESSAGE = 'div[id^="toastDescription"]';
6
+ export class Slack extends BrowserforcePlugin {
7
+ async retrieve(definition) {
8
+ const page = await this.browserforce.openPage(BASE_PATH);
9
+ await page.locator(TOS_CHECKBOX).waitFor();
10
+ const response = {
11
+ agreeToTermsAndConditions: await page.locator(TOS_CHECKBOX).isChecked(),
12
+ enableSalesCloudForSlack: await page
13
+ .locator(SALES_CLOUD_FOR_SLACK_CHECKBOX)
14
+ .isChecked(),
15
+ };
16
+ await page.close();
17
+ return response;
18
+ }
19
+ async apply(config) {
20
+ if (config.agreeToTermsAndConditions === false) {
21
+ throw new Error('terms and conditions cannot be unaccepted once accepted');
22
+ }
23
+ const state = await this.retrieve();
24
+ const page = await this.browserforce.openPage(BASE_PATH);
25
+ if (state.agreeToTermsAndConditions !== config.agreeToTermsAndConditions) {
26
+ await Promise.all([
27
+ page.locator(TOAST_MESSAGE).waitFor({ state: 'visible' }),
28
+ page
29
+ .locator(TOS_CHECKBOX)
30
+ .evaluate((checkbox) => checkbox.click()),
31
+ ]);
32
+ await page.locator(TOAST_MESSAGE).waitFor({ state: 'hidden' });
33
+ }
34
+ if (state.enableSalesCloudForSlack !== config.enableSalesCloudForSlack) {
35
+ await Promise.all([
36
+ page.locator(TOAST_MESSAGE).waitFor({ state: 'visible' }),
37
+ page
38
+ .locator(SALES_CLOUD_FOR_SLACK_CHECKBOX)
39
+ .evaluate((checkbox) => checkbox.click()),
40
+ ]);
41
+ await page.locator(TOAST_MESSAGE).waitFor({ state: 'hidden' });
42
+ }
43
+ await page.close();
44
+ }
45
+ }
46
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/slack/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,SAAS,GAAG,0CAA0C,CAAC;AAE7D,MAAM,YAAY,GAChB,2DAA2D,CAAC;AAC9D,MAAM,8BAA8B,GAClC,+DAA+D,CAAC;AAClE,MAAM,aAAa,GAAG,6BAA6B,CAAC;AAOpD,MAAM,OAAO,KAAM,SAAQ,kBAAkB;IACpC,KAAK,CAAC,QAAQ,CAAC,UAAmB;QACvC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACzD,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAG;YACf,yBAAyB,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,SAAS,EAAE;YACvE,wBAAwB,EAAE,MAAM,IAAI;iBACjC,OAAO,CAAC,8BAA8B,CAAC;iBACvC,SAAS,EAAE;SACf,CAAC;QACF,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,MAAc;QAC/B,IAAI,MAAM,CAAC,yBAAyB,KAAK,KAAK,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CACb,yDAAyD,CAC1D,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACzD,IAAI,KAAK,CAAC,yBAAyB,KAAK,MAAM,CAAC,yBAAyB,EAAE,CAAC;YACzE,MAAM,OAAO,CAAC,GAAG,CAAC;gBAChB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;gBACzD,IAAI;qBACD,OAAO,CAAC,YAAY,CAAC;qBACrB,QAAQ,CAAC,CAAC,QAA0B,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;aAC9D,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,KAAK,CAAC,wBAAwB,KAAK,MAAM,CAAC,wBAAwB,EAAE,CAAC;YACvE,MAAM,OAAO,CAAC,GAAG,CAAC;gBAChB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;gBACzD,IAAI;qBACD,OAAO,CAAC,8BAA8B,CAAC;qBACvC,QAAQ,CAAC,CAAC,QAA0B,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;aAC9D,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ import { BrowserforcePlugin } from '../../plugin.js';
2
+ export type PolicyTriggerType = 'Create' | 'Update' | 'CreateAndUpdate';
3
+ type AccessPolicy = {
4
+ apiName: string;
5
+ active: boolean;
6
+ on?: PolicyTriggerType;
7
+ };
8
+ export type Config = {
9
+ accessPolicies?: AccessPolicy[];
10
+ };
11
+ export declare class UserAccessPolicies extends BrowserforcePlugin {
12
+ private queryPolicies;
13
+ retrieve(definition?: Config): Promise<Config>;
14
+ apply(config: Config): Promise<void>;
15
+ private isValidTriggerType;
16
+ private needsPolicyChange;
17
+ private applyPolicyChange;
18
+ }
19
+ export {};
@@ -0,0 +1,63 @@
1
+ import assert from 'assert';
2
+ import * as child from 'child_process';
3
+ import { readFileSync } from 'node:fs';
4
+ import { fileURLToPath } from 'node:url';
5
+ import * as path from 'path';
6
+ import { UserAccessPolicies } from './index.js';
7
+ const __dirname = fileURLToPath(new URL('.', import.meta.url));
8
+ const readJsonFile = function (u) {
9
+ return JSON.parse(readFileSync(new URL(u, import.meta.url), 'utf8'));
10
+ };
11
+ describe(UserAccessPolicies.name, function () {
12
+ this.timeout('10m');
13
+ let plugin;
14
+ before(() => {
15
+ plugin = new UserAccessPolicies(global.bf);
16
+ });
17
+ const configActivate = readJsonFile('./activate.json').settings.userAccessPolicies;
18
+ const configDeactivate = readJsonFile('./deactivate.json').settings.userAccessPolicies;
19
+ const multiConfig = readJsonFile('./multiple-policies.json').settings
20
+ .userAccessPolicies;
21
+ const changeTriggerConfig = readJsonFile('./change-trigger-type.json')
22
+ .settings.userAccessPolicies;
23
+ it('should deploy a CustomObject for testing', () => {
24
+ const sourceDeployCmd = child.spawnSync('sf', [
25
+ 'project',
26
+ 'deploy',
27
+ 'start',
28
+ '-d',
29
+ path.join(__dirname, 'sfdx-source'),
30
+ '--json',
31
+ ]);
32
+ assert.deepStrictEqual(sourceDeployCmd.status, 0, sourceDeployCmd.output.toString());
33
+ });
34
+ it('should activate policy', async () => {
35
+ await plugin.run(configActivate);
36
+ });
37
+ it('should already be activated on default trigger type', async () => {
38
+ const res = await plugin.run(configActivate);
39
+ assert.deepStrictEqual(res, { message: 'no action necessary' });
40
+ });
41
+ it('should deactivate policy', async () => {
42
+ await plugin.run(configDeactivate);
43
+ });
44
+ it('should already be deactivated', async () => {
45
+ const res = await plugin.run(configDeactivate);
46
+ assert.deepStrictEqual(res, { message: 'no action necessary' });
47
+ });
48
+ it('should handle multiple policies', async () => {
49
+ await plugin.run(multiConfig);
50
+ });
51
+ it('should already have activated multiple policies on provided trigger types', async () => {
52
+ const res = await plugin.run(multiConfig);
53
+ assert.deepStrictEqual(res, { message: 'no action necessary' });
54
+ });
55
+ it('should change trigger type of an already active policy', async () => {
56
+ await plugin.run(changeTriggerConfig);
57
+ });
58
+ it('should already be activated with the new trigger type', async () => {
59
+ const res = await plugin.run(changeTriggerConfig);
60
+ assert.deepStrictEqual(res, { message: 'no action necessary' });
61
+ });
62
+ });
63
+ //# sourceMappingURL=index.e2e-spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.e2e-spec.js","sourceRoot":"","sources":["../../../src/plugins/user-access-policies/index.e2e-spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ import { BrowserforcePlugin } from '../../plugin.js';
2
+ import { UserAccessPoliciesPage } from './page.js';
3
+ const DEFAULT_TRIGGER_TYPE = 'CreateAndUpdate';
4
+ export class UserAccessPolicies extends BrowserforcePlugin {
5
+ async queryPolicies(policyApiNames) {
6
+ const quotedNames = policyApiNames.map((name) => `'${name}'`);
7
+ const query = `SELECT Id, DeveloperName, Status, TriggerType FROM UserAccessPolicy WHERE DeveloperName IN (${quotedNames.join(',')})`;
8
+ const queryResult = await this.org.getConnection().tooling.query(query);
9
+ const policyStateMap = new Map();
10
+ const policyIdMap = new Map();
11
+ const policyTriggerTypeMap = new Map();
12
+ for (const record of queryResult.records) {
13
+ policyStateMap.set(record.DeveloperName, record.Status === 'Active');
14
+ policyIdMap.set(record.DeveloperName, record.Id);
15
+ policyTriggerTypeMap.set(record.DeveloperName, record.TriggerType);
16
+ }
17
+ return { policyStateMap, policyIdMap, policyTriggerTypeMap };
18
+ }
19
+ async retrieve(definition) {
20
+ const response = {
21
+ accessPolicies: [],
22
+ };
23
+ if (!definition?.accessPolicies || definition.accessPolicies.length === 0) {
24
+ return response;
25
+ }
26
+ const policyApiNames = definition.accessPolicies.map((policy) => policy.apiName);
27
+ const { policyStateMap, policyTriggerTypeMap } = await this.queryPolicies(policyApiNames);
28
+ for (const policy of definition.accessPolicies) {
29
+ const isActive = policyStateMap.get(policy.apiName) ?? false;
30
+ const triggerType = policyTriggerTypeMap.get(policy.apiName);
31
+ const retrievedPolicy = {
32
+ apiName: policy.apiName,
33
+ active: isActive,
34
+ };
35
+ if (policy.on !== undefined && isActive && triggerType) {
36
+ if (this.isValidTriggerType(triggerType)) {
37
+ retrievedPolicy.on = triggerType;
38
+ }
39
+ }
40
+ response.accessPolicies.push(retrievedPolicy);
41
+ }
42
+ return response;
43
+ }
44
+ async apply(config) {
45
+ if (!config.accessPolicies || config.accessPolicies.length === 0) {
46
+ return;
47
+ }
48
+ const policyApiNames = config.accessPolicies.map((policy) => policy.apiName);
49
+ const { policyStateMap, policyIdMap, policyTriggerTypeMap } = await this.queryPolicies(policyApiNames);
50
+ for (const policy of config.accessPolicies) {
51
+ const currentState = policyStateMap.get(policy.apiName) ?? false;
52
+ const policyId = policyIdMap.get(policy.apiName);
53
+ const currentTriggerType = policyTriggerTypeMap.get(policy.apiName);
54
+ if (!policyId) {
55
+ throw new Error(`User Access Policy "${policy.apiName}" not found`);
56
+ }
57
+ await this.applyPolicyChange(policy, policyId, currentState, currentTriggerType);
58
+ }
59
+ }
60
+ isValidTriggerType(value) {
61
+ return (value === 'Create' || value === 'Update' || value === 'CreateAndUpdate');
62
+ }
63
+ needsPolicyChange(policy, currentState, currentTriggerType) {
64
+ if (currentState !== policy.active) {
65
+ return true;
66
+ }
67
+ if (!policy.active) {
68
+ return false;
69
+ }
70
+ if (policy.on && currentTriggerType) {
71
+ return currentTriggerType !== policy.on;
72
+ }
73
+ return false;
74
+ }
75
+ async applyPolicyChange(policy, policyId, currentState, currentTriggerType) {
76
+ const needsChange = this.needsPolicyChange(policy, currentState, currentTriggerType);
77
+ if (!needsChange) {
78
+ return;
79
+ }
80
+ const page = await this.browserforce.openPage(UserAccessPoliciesPage.getPolicyUrl(policyId));
81
+ const policiesPage = new UserAccessPoliciesPage(page);
82
+ if (policy.active) {
83
+ const needsTriggerTypeChange = currentState && policy.on && currentTriggerType !== policy.on;
84
+ if (needsTriggerTypeChange) {
85
+ await policiesPage.deactivatePolicy();
86
+ await page.close();
87
+ const newPage = await this.browserforce.openPage(UserAccessPoliciesPage.getPolicyUrl(policyId));
88
+ const newPoliciesPage = new UserAccessPoliciesPage(newPage);
89
+ await newPoliciesPage.activatePolicy(policy.on);
90
+ await newPage.close();
91
+ }
92
+ else {
93
+ const triggerOn = policy.on ||
94
+ (this.isValidTriggerType(currentTriggerType)
95
+ ? currentTriggerType
96
+ : DEFAULT_TRIGGER_TYPE);
97
+ await policiesPage.activatePolicy(triggerOn);
98
+ await page.close();
99
+ }
100
+ }
101
+ else {
102
+ await policiesPage.deactivatePolicy();
103
+ await page.close();
104
+ }
105
+ }
106
+ }
107
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/user-access-policies/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { Page } from 'playwright';
2
+ export declare class UserAccessPoliciesPage {
3
+ private page;
4
+ constructor(page: Page);
5
+ static getPolicyUrl(policyId: string): string;
6
+ /**
7
+ * Activate a policy from its detail page
8
+ * @param triggerOn - When to trigger the policy: 'Create', 'Update', or 'CreateAndUpdate' (default)
9
+ */
10
+ activatePolicy(triggerOn?: 'Create' | 'Update' | 'CreateAndUpdate'): Promise<void>;
11
+ /**
12
+ * Deactivate a policy from its detail page
13
+ */
14
+ deactivatePolicy(): Promise<void>;
15
+ /**
16
+ * Handle the activation modal (select trigger option and click Activate)
17
+ */
18
+ private handleActivationModal;
19
+ /**
20
+ * Handle confirmation modal that may appear after deactivation
21
+ */
22
+ private handleConfirmationModal;
23
+ /**
24
+ * Wait for a button to become enabled
25
+ * @param button - The button locator to wait for
26
+ * @param timeout - Maximum time to wait in milliseconds (default: 10000)
27
+ */
28
+ private waitForButtonEnabled;
29
+ }
@@ -0,0 +1,115 @@
1
+ import { throwPageErrors } from '../../browserforce.js';
2
+ export class UserAccessPoliciesPage {
3
+ page;
4
+ constructor(page) {
5
+ this.page = page;
6
+ }
7
+ static getPolicyUrl(policyId) {
8
+ return `lightning/setup/UserAccessPolicies/${policyId}/view`;
9
+ }
10
+ /**
11
+ * Activate a policy from its detail page
12
+ * @param triggerOn - When to trigger the policy: 'Create', 'Update', or 'CreateAndUpdate' (default)
13
+ */
14
+ async activatePolicy(triggerOn = 'CreateAndUpdate') {
15
+ try {
16
+ const automateButton = this.page.getByRole('button', {
17
+ name: 'Automate Policy',
18
+ });
19
+ await automateButton.waitFor({ state: 'visible', timeout: 5000 });
20
+ await this.waitForButtonEnabled(automateButton);
21
+ await automateButton.click();
22
+ await this.handleActivationModal(triggerOn);
23
+ await throwPageErrors(this.page);
24
+ }
25
+ catch (error) {
26
+ throw new Error(`Failed to activate policy: ${error.message}`);
27
+ }
28
+ }
29
+ /**
30
+ * Deactivate a policy from its detail page
31
+ */
32
+ async deactivatePolicy() {
33
+ try {
34
+ const deactivateButton = this.page.getByRole('button', {
35
+ name: 'Deactivate',
36
+ });
37
+ await deactivateButton.waitFor({ state: 'visible', timeout: 5000 });
38
+ await deactivateButton.click();
39
+ await this.handleConfirmationModal();
40
+ await throwPageErrors(this.page);
41
+ }
42
+ catch (error) {
43
+ throw new Error(`Failed to deactivate policy: ${error.message}`);
44
+ }
45
+ }
46
+ /**
47
+ * Handle the activation modal (select trigger option and click Activate)
48
+ */
49
+ async handleActivationModal(triggerOn) {
50
+ const modalHeader = this.page.locator('lightning-modal-header.automate_policy_modal');
51
+ await modalHeader.waitFor({ state: 'visible', timeout: 10000 });
52
+ await this.page.waitForTimeout(500);
53
+ const radioButtons = this.page.locator('input[type="radio"]');
54
+ const radioCount = await radioButtons.count();
55
+ if (radioCount < 3) {
56
+ throw new Error('Modal did not load - radio buttons not found');
57
+ }
58
+ let radioButton = null;
59
+ for (let i = 0; i < radioCount; i++) {
60
+ const button = radioButtons.nth(i);
61
+ const value = await button.getAttribute('value');
62
+ if (value === triggerOn) {
63
+ radioButton = button;
64
+ break;
65
+ }
66
+ }
67
+ if (!radioButton) {
68
+ throw new Error(`Radio button with value "${triggerOn}" not found`);
69
+ }
70
+ const radioId = await radioButton.getAttribute('id');
71
+ if (radioId) {
72
+ const label = this.page.locator(`label[for="${radioId}"]`);
73
+ await label.click();
74
+ }
75
+ const activateButton = this.page.getByRole('button', {
76
+ name: 'Activate',
77
+ exact: true,
78
+ });
79
+ await activateButton.waitFor({ state: 'visible', timeout: 5000 });
80
+ await activateButton.click();
81
+ await this.page.waitForTimeout(1000);
82
+ }
83
+ /**
84
+ * Handle confirmation modal that may appear after deactivation
85
+ */
86
+ async handleConfirmationModal() {
87
+ try {
88
+ await this.page.waitForTimeout(500);
89
+ const deactivateButton = this.page.locator('lightning-modal-footer button:has-text("Deactivate")');
90
+ await deactivateButton.waitFor({ state: 'visible', timeout: 5000 });
91
+ await deactivateButton.click();
92
+ await this.page.waitForTimeout(1000);
93
+ }
94
+ catch (e) {
95
+ throw new Error(`Failed to handle deactivation confirmation modal: ${e.message}`);
96
+ }
97
+ }
98
+ /**
99
+ * Wait for a button to become enabled
100
+ * @param button - The button locator to wait for
101
+ * @param timeout - Maximum time to wait in milliseconds (default: 10000)
102
+ */
103
+ async waitForButtonEnabled(button, timeout = 10000) {
104
+ const startTime = Date.now();
105
+ while (Date.now() - startTime < timeout) {
106
+ const isDisabled = await button.isDisabled();
107
+ if (!isDisabled) {
108
+ return;
109
+ }
110
+ await this.page.waitForTimeout(500);
111
+ }
112
+ throw new Error(`Button did not become enabled within ${timeout}ms`);
113
+ }
114
+ }
115
+ //# sourceMappingURL=page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page.js","sourceRoot":"","sources":["../../../src/plugins/user-access-policies/page.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function semanticallyCleanObject<T extends unknown>(obj: T, id?: string): T | undefined;
2
+ export declare function isEmptyObjectOrArray(arg: unknown): boolean;
3
+ export declare function deepDiff<T extends unknown>(source: T | undefined, target: T | undefined): T | undefined;
@@ -0,0 +1,47 @@
1
+ import { isDeepStrictEqual } from 'util';
2
+ // an object only containing an id is semantically empty
3
+ export function semanticallyCleanObject(obj, id = 'id') {
4
+ if (typeof obj === 'object' && obj !== null) {
5
+ if (Object.keys(obj).length === 1 && Object.keys(obj)[0] === id) {
6
+ return undefined;
7
+ }
8
+ }
9
+ return obj;
10
+ }
11
+ export function isEmptyObjectOrArray(arg) {
12
+ if (typeof arg === 'object' && arg !== null) {
13
+ return Object.keys(arg).length === 0;
14
+ }
15
+ return false;
16
+ }
17
+ export function deepDiff(source, target) {
18
+ if (isDeepStrictEqual(source, target)) {
19
+ return undefined;
20
+ }
21
+ if (typeof target === 'object' &&
22
+ target !== null &&
23
+ typeof source === 'object' &&
24
+ source !== null) {
25
+ let objectOrArray;
26
+ if (Array.isArray(target)) {
27
+ objectOrArray = target
28
+ .map((item, i) => deepDiff(source?.[i], item))
29
+ .filter((x) => x !== undefined);
30
+ }
31
+ else {
32
+ const targetKeys = Object.keys(target);
33
+ const minSource = Object.fromEntries(Object.entries(source).filter(([key, value]) => targetKeys.includes(key)));
34
+ if (!isDeepStrictEqual(minSource, source)) {
35
+ return deepDiff(minSource, target);
36
+ }
37
+ objectOrArray = target;
38
+ }
39
+ if (isEmptyObjectOrArray(objectOrArray)) {
40
+ return undefined;
41
+ }
42
+ return objectOrArray;
43
+ }
44
+ // simple value
45
+ return target;
46
+ }
47
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/plugins/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAEzC,wDAAwD;AACxD,MAAM,UAAU,uBAAuB,CACrC,GAAM,EACN,EAAE,GAAG,IAAI;IAET,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;YAChE,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,GAAY;IAC/C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,QAAQ,CACtB,MAAqB,EACrB,MAAqB;IAErB,IAAI,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;QACtC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IACE,OAAO,MAAM,KAAK,QAAQ;QAC1B,MAAM,KAAK,IAAI;QACf,OAAO,MAAM,KAAK,QAAQ;QAC1B,MAAM,KAAK,IAAI,EACf,CAAC;QACD,IAAI,aAA4B,CAAC;QACjC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,aAAa,GAAG,MAAM;iBACnB,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;iBAC7C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAkB,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvC,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAClC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAC7C,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CACzB,CACQ,CAAC;YACZ,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC;gBAC1C,OAAO,QAAQ,CAAC,SAAc,EAAE,MAAM,CAAC,CAAC;YAC1C,CAAC;YACD,aAAa,GAAG,MAAM,CAAC;QACzB,CAAC;QACD,IAAI,oBAAoB,CAAC,aAAa,CAAC,EAAE,CAAC;YACxC,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,eAAe;IACf,OAAO,MAAM,CAAC;AAChB,CAAC"}