sfdx-browserforce-plugin 5.1.1 → 5.1.3

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 (263) hide show
  1. package/lib/browserforce-command.d.ts +15 -0
  2. package/lib/browserforce-command.js +64 -0
  3. package/lib/browserforce-command.js.map +1 -0
  4. package/lib/browserforce.d.ts +25 -0
  5. package/lib/browserforce.js +169 -0
  6. package/lib/browserforce.js.map +1 -0
  7. package/lib/commands/browserforce/apply.d.ts +10 -0
  8. package/lib/commands/browserforce/apply.js +54 -0
  9. package/lib/commands/browserforce/apply.js.map +1 -0
  10. package/lib/commands/browserforce/plan.d.ts +10 -0
  11. package/lib/commands/browserforce/plan.js +56 -0
  12. package/lib/commands/browserforce/plan.js.map +1 -0
  13. package/lib/config-parser.d.ts +16 -0
  14. package/lib/config-parser.js +24 -0
  15. package/lib/config-parser.js.map +1 -0
  16. package/lib/index.d.ts +1 -0
  17. package/lib/index.js +2 -0
  18. package/lib/index.js.map +1 -0
  19. package/lib/jsforce-utils.d.ts +5 -0
  20. package/lib/jsforce-utils.js +14 -0
  21. package/lib/jsforce-utils.js.map +1 -0
  22. package/lib/pages/login.d.ts +8 -0
  23. package/lib/pages/login.js +39 -0
  24. package/lib/pages/login.js.map +1 -0
  25. package/lib/plugin.d.ts +17 -0
  26. package/lib/plugin.js +30 -0
  27. package/lib/plugin.js.map +1 -0
  28. package/lib/plugins/activity-settings/index.d.ts +9 -0
  29. package/lib/plugins/activity-settings/index.e2e-spec.d.ts +1 -0
  30. package/lib/plugins/activity-settings/index.e2e-spec.js +36 -0
  31. package/lib/plugins/activity-settings/index.e2e-spec.js.map +1 -0
  32. package/lib/plugins/activity-settings/index.js +31 -0
  33. package/lib/plugins/activity-settings/index.js.map +1 -0
  34. package/lib/plugins/company-information/index.d.ts +8 -0
  35. package/lib/plugins/company-information/index.e2e-spec.d.ts +1 -0
  36. package/lib/plugins/company-information/index.e2e-spec.js +37 -0
  37. package/lib/plugins/company-information/index.e2e-spec.js.map +1 -0
  38. package/lib/plugins/company-information/index.js +50 -0
  39. package/lib/plugins/company-information/index.js.map +1 -0
  40. package/lib/plugins/customer-portal/available-custom-objects/index.d.ts +14 -0
  41. package/lib/plugins/customer-portal/available-custom-objects/index.js +114 -0
  42. package/lib/plugins/customer-portal/available-custom-objects/index.js.map +1 -0
  43. package/lib/plugins/customer-portal/available-custom-objects/index.test.d.ts +1 -0
  44. package/lib/plugins/customer-portal/available-custom-objects/index.test.js +39 -0
  45. package/lib/plugins/customer-portal/available-custom-objects/index.test.js.map +1 -0
  46. package/lib/plugins/customer-portal/enabled/index.d.ts +6 -0
  47. package/lib/plugins/customer-portal/enabled/index.js +27 -0
  48. package/lib/plugins/customer-portal/enabled/index.js.map +1 -0
  49. package/lib/plugins/customer-portal/enabled/index.test.d.ts +1 -0
  50. package/lib/plugins/customer-portal/enabled/index.test.js +34 -0
  51. package/lib/plugins/customer-portal/enabled/index.test.js.map +1 -0
  52. package/lib/plugins/customer-portal/index.d.ts +15 -0
  53. package/lib/plugins/customer-portal/index.e2e-spec.d.ts +1 -0
  54. package/lib/plugins/customer-portal/index.e2e-spec.js +202 -0
  55. package/lib/plugins/customer-portal/index.e2e-spec.js.map +1 -0
  56. package/lib/plugins/customer-portal/index.js +59 -0
  57. package/lib/plugins/customer-portal/index.js.map +1 -0
  58. package/lib/plugins/customer-portal/index.test.d.ts +1 -0
  59. package/lib/plugins/customer-portal/index.test.js +84 -0
  60. package/lib/plugins/customer-portal/index.test.js.map +1 -0
  61. package/lib/plugins/customer-portal/portals/index.d.ts +25 -0
  62. package/lib/plugins/customer-portal/portals/index.js +180 -0
  63. package/lib/plugins/customer-portal/portals/index.js.map +1 -0
  64. package/lib/plugins/customer-portal/portals/index.test.d.ts +1 -0
  65. package/lib/plugins/customer-portal/portals/index.test.js +140 -0
  66. package/lib/plugins/customer-portal/portals/index.test.js.map +1 -0
  67. package/lib/plugins/density-settings/index.d.ts +17 -0
  68. package/lib/plugins/density-settings/index.e2e-spec.d.ts +1 -0
  69. package/lib/plugins/density-settings/index.e2e-spec.js +39 -0
  70. package/lib/plugins/density-settings/index.e2e-spec.js.map +1 -0
  71. package/lib/plugins/density-settings/index.js +46 -0
  72. package/lib/plugins/density-settings/index.js.map +1 -0
  73. package/lib/plugins/deprecated.d.ts +4 -0
  74. package/lib/plugins/deprecated.js +28 -0
  75. package/lib/plugins/deprecated.js.map +1 -0
  76. package/lib/plugins/email-deliverability/index.d.ts +9 -0
  77. package/lib/plugins/email-deliverability/index.e2e-spec.d.ts +1 -0
  78. package/lib/plugins/email-deliverability/index.e2e-spec.js +55 -0
  79. package/lib/plugins/email-deliverability/index.e2e-spec.js.map +1 -0
  80. package/lib/plugins/email-deliverability/index.js +39 -0
  81. package/lib/plugins/email-deliverability/index.js.map +1 -0
  82. package/lib/plugins/high-velocity-sales-settings/index.d.ts +10 -0
  83. package/lib/plugins/high-velocity-sales-settings/index.e2e-spec.d.ts +1 -0
  84. package/lib/plugins/high-velocity-sales-settings/index.e2e-spec.js +29 -0
  85. package/lib/plugins/high-velocity-sales-settings/index.e2e-spec.js.map +1 -0
  86. package/lib/plugins/high-velocity-sales-settings/index.js +42 -0
  87. package/lib/plugins/high-velocity-sales-settings/index.js.map +1 -0
  88. package/lib/plugins/high-velocity-sales-settings/page.d.ts +7 -0
  89. package/lib/plugins/high-velocity-sales-settings/page.js +29 -0
  90. package/lib/plugins/high-velocity-sales-settings/page.js.map +1 -0
  91. package/lib/plugins/history-tracking/index.d.ts +17 -0
  92. package/lib/plugins/history-tracking/index.e2e-spec.d.ts +1 -0
  93. package/lib/plugins/history-tracking/index.e2e-spec.js +111 -0
  94. package/lib/plugins/history-tracking/index.e2e-spec.js.map +1 -0
  95. package/lib/plugins/history-tracking/index.js +175 -0
  96. package/lib/plugins/history-tracking/index.js.map +1 -0
  97. package/lib/plugins/home-page-layouts/index.d.ts +14 -0
  98. package/lib/plugins/home-page-layouts/index.e2e-spec.d.ts +1 -0
  99. package/lib/plugins/home-page-layouts/index.e2e-spec.js +47 -0
  100. package/lib/plugins/home-page-layouts/index.e2e-spec.js.map +1 -0
  101. package/lib/plugins/home-page-layouts/index.js +90 -0
  102. package/lib/plugins/home-page-layouts/index.js.map +1 -0
  103. package/lib/plugins/home-page-layouts/index.test.d.ts +1 -0
  104. package/lib/plugins/home-page-layouts/index.test.js +104 -0
  105. package/lib/plugins/home-page-layouts/index.test.js.map +1 -0
  106. package/lib/plugins/index.d.ts +24 -0
  107. package/lib/plugins/index.js +25 -0
  108. package/lib/plugins/index.js.map +1 -0
  109. package/lib/plugins/lightning-experience-settings/index.d.ts +18 -0
  110. package/lib/plugins/lightning-experience-settings/index.e2e-spec.d.ts +1 -0
  111. package/lib/plugins/lightning-experience-settings/index.e2e-spec.js +40 -0
  112. package/lib/plugins/lightning-experience-settings/index.e2e-spec.js.map +1 -0
  113. package/lib/plugins/lightning-experience-settings/index.js +97 -0
  114. package/lib/plugins/lightning-experience-settings/index.js.map +1 -0
  115. package/lib/plugins/linkedin-sales-navigator-settings/index.d.ts +8 -0
  116. package/lib/plugins/linkedin-sales-navigator-settings/index.e2e-spec.d.ts +1 -0
  117. package/lib/plugins/linkedin-sales-navigator-settings/index.e2e-spec.js +29 -0
  118. package/lib/plugins/linkedin-sales-navigator-settings/index.e2e-spec.js.map +1 -0
  119. package/lib/plugins/linkedin-sales-navigator-settings/index.js +15 -0
  120. package/lib/plugins/linkedin-sales-navigator-settings/index.js.map +1 -0
  121. package/lib/plugins/linkedin-sales-navigator-settings/page.d.ts +8 -0
  122. package/lib/plugins/linkedin-sales-navigator-settings/page.js +32 -0
  123. package/lib/plugins/linkedin-sales-navigator-settings/page.js.map +1 -0
  124. package/lib/plugins/omni-channel-settings/index.d.ts +9 -0
  125. package/lib/plugins/omni-channel-settings/index.e2e-spec.d.ts +1 -0
  126. package/lib/plugins/omni-channel-settings/index.e2e-spec.js +26 -0
  127. package/lib/plugins/omni-channel-settings/index.e2e-spec.js.map +1 -0
  128. package/lib/plugins/omni-channel-settings/index.js +29 -0
  129. package/lib/plugins/omni-channel-settings/index.js.map +1 -0
  130. package/lib/plugins/opportunity-splits/index.d.ts +9 -0
  131. package/lib/plugins/opportunity-splits/index.e2e-spec.d.ts +1 -0
  132. package/lib/plugins/opportunity-splits/index.e2e-spec.js +46 -0
  133. package/lib/plugins/opportunity-splits/index.e2e-spec.js.map +1 -0
  134. package/lib/plugins/opportunity-splits/index.js +32 -0
  135. package/lib/plugins/opportunity-splits/index.js.map +1 -0
  136. package/lib/plugins/opportunity-splits/pages/layout-selection.d.ts +8 -0
  137. package/lib/plugins/opportunity-splits/pages/layout-selection.js +17 -0
  138. package/lib/plugins/opportunity-splits/pages/layout-selection.js.map +1 -0
  139. package/lib/plugins/opportunity-splits/pages/overview.d.ts +10 -0
  140. package/lib/plugins/opportunity-splits/pages/overview.js +38 -0
  141. package/lib/plugins/opportunity-splits/pages/overview.js.map +1 -0
  142. package/lib/plugins/opportunity-splits/pages/setup.d.ts +8 -0
  143. package/lib/plugins/opportunity-splits/pages/setup.js +19 -0
  144. package/lib/plugins/opportunity-splits/pages/setup.js.map +1 -0
  145. package/lib/plugins/permission-sets/index.d.ts +10 -0
  146. package/lib/plugins/permission-sets/index.e2e-spec.d.ts +1 -0
  147. package/lib/plugins/permission-sets/index.e2e-spec.js +36 -0
  148. package/lib/plugins/permission-sets/index.e2e-spec.js.map +1 -0
  149. package/lib/plugins/permission-sets/index.js +22 -0
  150. package/lib/plugins/permission-sets/index.js.map +1 -0
  151. package/lib/plugins/permission-sets/service-presence-status/index.d.ts +10 -0
  152. package/lib/plugins/permission-sets/service-presence-status/index.js +60 -0
  153. package/lib/plugins/permission-sets/service-presence-status/index.js.map +1 -0
  154. package/lib/plugins/picklists/field-dependencies/index.d.ts +11 -0
  155. package/lib/plugins/picklists/field-dependencies/index.js +56 -0
  156. package/lib/plugins/picklists/field-dependencies/index.js.map +1 -0
  157. package/lib/plugins/picklists/field-dependencies/index.test.d.ts +1 -0
  158. package/lib/plugins/picklists/field-dependencies/index.test.js +64 -0
  159. package/lib/plugins/picklists/field-dependencies/index.test.js.map +1 -0
  160. package/lib/plugins/picklists/field-dependencies/pages.d.ts +14 -0
  161. package/lib/plugins/picklists/field-dependencies/pages.js +57 -0
  162. package/lib/plugins/picklists/field-dependencies/pages.js.map +1 -0
  163. package/lib/plugins/picklists/index.d.ts +23 -0
  164. package/lib/plugins/picklists/index.e2e-spec.d.ts +1 -0
  165. package/lib/plugins/picklists/index.e2e-spec.js +106 -0
  166. package/lib/plugins/picklists/index.e2e-spec.js.map +1 -0
  167. package/lib/plugins/picklists/index.js +153 -0
  168. package/lib/plugins/picklists/index.js.map +1 -0
  169. package/lib/plugins/picklists/pages.d.ts +40 -0
  170. package/lib/plugins/picklists/pages.js +194 -0
  171. package/lib/plugins/picklists/pages.js.map +1 -0
  172. package/lib/plugins/picklists/standard-value-set.d.ts +1 -0
  173. package/lib/plugins/picklists/standard-value-set.js +80 -0
  174. package/lib/plugins/picklists/standard-value-set.js.map +1 -0
  175. package/lib/plugins/record-types/index.d.ts +14 -0
  176. package/lib/plugins/record-types/index.e2e-spec.d.ts +1 -0
  177. package/lib/plugins/record-types/index.e2e-spec.js +77 -0
  178. package/lib/plugins/record-types/index.e2e-spec.js.map +1 -0
  179. package/lib/plugins/record-types/index.js +72 -0
  180. package/lib/plugins/record-types/index.js.map +1 -0
  181. package/lib/plugins/record-types/pages.d.ts +15 -0
  182. package/lib/plugins/record-types/pages.js +64 -0
  183. package/lib/plugins/record-types/pages.js.map +1 -0
  184. package/lib/plugins/relate-contact-to-multiple-accounts/index.d.ts +11 -0
  185. package/lib/plugins/relate-contact-to-multiple-accounts/index.e2e-spec.d.ts +1 -0
  186. package/lib/plugins/relate-contact-to-multiple-accounts/index.e2e-spec.js +29 -0
  187. package/lib/plugins/relate-contact-to-multiple-accounts/index.e2e-spec.js.map +1 -0
  188. package/lib/plugins/relate-contact-to-multiple-accounts/index.js +72 -0
  189. package/lib/plugins/relate-contact-to-multiple-accounts/index.js.map +1 -0
  190. package/lib/plugins/reports-and-dashboards/folder-sharing/index.d.ts +8 -0
  191. package/lib/plugins/reports-and-dashboards/folder-sharing/index.e2e-spec.d.ts +1 -0
  192. package/lib/plugins/reports-and-dashboards/folder-sharing/index.e2e-spec.js +3 -0
  193. package/lib/plugins/reports-and-dashboards/folder-sharing/index.e2e-spec.js.map +1 -0
  194. package/lib/plugins/reports-and-dashboards/folder-sharing/index.js +50 -0
  195. package/lib/plugins/reports-and-dashboards/folder-sharing/index.js.map +1 -0
  196. package/lib/plugins/reports-and-dashboards/index.d.ts +11 -0
  197. package/lib/plugins/reports-and-dashboards/index.e2e-spec.d.ts +1 -0
  198. package/lib/plugins/reports-and-dashboards/index.e2e-spec.js +3 -0
  199. package/lib/plugins/reports-and-dashboards/index.e2e-spec.js.map +1 -0
  200. package/lib/plugins/reports-and-dashboards/index.js +29 -0
  201. package/lib/plugins/reports-and-dashboards/index.js.map +1 -0
  202. package/lib/plugins/salesforce-cpq-config/formConfig.d.ts +17 -0
  203. package/lib/plugins/salesforce-cpq-config/formConfig.js +649 -0
  204. package/lib/plugins/salesforce-cpq-config/formConfig.js.map +1 -0
  205. package/lib/plugins/salesforce-cpq-config/index.d.ts +7 -0
  206. package/lib/plugins/salesforce-cpq-config/index.e2e-spec.d.ts +1 -0
  207. package/lib/plugins/salesforce-cpq-config/index.e2e-spec.js +37 -0
  208. package/lib/plugins/salesforce-cpq-config/index.e2e-spec.js.map +1 -0
  209. package/lib/plugins/salesforce-cpq-config/index.js +195 -0
  210. package/lib/plugins/salesforce-cpq-config/index.js.map +1 -0
  211. package/lib/plugins/salesforce-to-salesforce/index.d.ts +9 -0
  212. package/lib/plugins/salesforce-to-salesforce/index.e2e-spec.d.ts +1 -0
  213. package/lib/plugins/salesforce-to-salesforce/index.e2e-spec.js +34 -0
  214. package/lib/plugins/salesforce-to-salesforce/index.e2e-spec.js.map +1 -0
  215. package/lib/plugins/salesforce-to-salesforce/index.js +44 -0
  216. package/lib/plugins/salesforce-to-salesforce/index.js.map +1 -0
  217. package/lib/plugins/security/authentication-configuration/index.d.ts +11 -0
  218. package/lib/plugins/security/authentication-configuration/index.e2e-spec.d.ts +1 -0
  219. package/lib/plugins/security/authentication-configuration/index.e2e-spec.js +93 -0
  220. package/lib/plugins/security/authentication-configuration/index.e2e-spec.js.map +1 -0
  221. package/lib/plugins/security/authentication-configuration/index.js +62 -0
  222. package/lib/plugins/security/authentication-configuration/index.js.map +1 -0
  223. package/lib/plugins/security/certificate-and-key-management/index.d.ts +23 -0
  224. package/lib/plugins/security/certificate-and-key-management/index.e2e-spec.d.ts +1 -0
  225. package/lib/plugins/security/certificate-and-key-management/index.e2e-spec.js +63 -0
  226. package/lib/plugins/security/certificate-and-key-management/index.e2e-spec.js.map +1 -0
  227. package/lib/plugins/security/certificate-and-key-management/index.js +159 -0
  228. package/lib/plugins/security/certificate-and-key-management/index.js.map +1 -0
  229. package/lib/plugins/security/certificate-and-key-management/index.test.d.ts +1 -0
  230. package/lib/plugins/security/certificate-and-key-management/index.test.js +61 -0
  231. package/lib/plugins/security/certificate-and-key-management/index.test.js.map +1 -0
  232. package/lib/plugins/security/index.d.ts +13 -0
  233. package/lib/plugins/security/index.js +42 -0
  234. package/lib/plugins/security/index.js.map +1 -0
  235. package/lib/plugins/service-channels/capacity/index.d.ts +18 -0
  236. package/lib/plugins/service-channels/capacity/index.js +133 -0
  237. package/lib/plugins/service-channels/capacity/index.js.map +1 -0
  238. package/lib/plugins/service-channels/index.d.ts +12 -0
  239. package/lib/plugins/service-channels/index.e2e-spec.d.ts +1 -0
  240. package/lib/plugins/service-channels/index.e2e-spec.js +57 -0
  241. package/lib/plugins/service-channels/index.e2e-spec.js.map +1 -0
  242. package/lib/plugins/service-channels/index.js +38 -0
  243. package/lib/plugins/service-channels/index.js.map +1 -0
  244. package/lib/plugins/slack/index.d.ts +9 -0
  245. package/lib/plugins/slack/index.e2e-spec.d.ts +1 -0
  246. package/lib/plugins/slack/index.e2e-spec.js +47 -0
  247. package/lib/plugins/slack/index.e2e-spec.js.map +1 -0
  248. package/lib/plugins/slack/index.js +47 -0
  249. package/lib/plugins/slack/index.js.map +1 -0
  250. package/lib/plugins/user-access-policies/index.d.ts +19 -0
  251. package/lib/plugins/user-access-policies/index.e2e-spec.d.ts +1 -0
  252. package/lib/plugins/user-access-policies/index.e2e-spec.js +63 -0
  253. package/lib/plugins/user-access-policies/index.e2e-spec.js.map +1 -0
  254. package/lib/plugins/user-access-policies/index.js +107 -0
  255. package/lib/plugins/user-access-policies/index.js.map +1 -0
  256. package/lib/plugins/user-access-policies/page.d.ts +29 -0
  257. package/lib/plugins/user-access-policies/page.js +140 -0
  258. package/lib/plugins/user-access-policies/page.js.map +1 -0
  259. package/lib/plugins/utils.d.ts +3 -0
  260. package/lib/plugins/utils.js +47 -0
  261. package/lib/plugins/utils.js.map +1 -0
  262. package/oclif.manifest.json +163 -0
  263. package/package.json +7 -6
@@ -0,0 +1,47 @@
1
+ import assert from 'assert';
2
+ import { Slack } from './index.js';
3
+ describe.skip(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,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;IACxB,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,47 @@
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
+ const response = {
10
+ agreeToTermsAndConditions: await page
11
+ .locator(TOS_CHECKBOX)
12
+ .map((checkbox) => checkbox.checked)
13
+ .wait(),
14
+ enableSalesCloudForSlack: await page
15
+ .locator(SALES_CLOUD_FOR_SLACK_CHECKBOX)
16
+ .map((checkbox) => checkbox.checked)
17
+ .wait(),
18
+ };
19
+ await page.close();
20
+ return response;
21
+ }
22
+ async apply(config) {
23
+ if (config.agreeToTermsAndConditions === false) {
24
+ throw new Error('terms and conditions cannot be unaccepted once accepted');
25
+ }
26
+ const state = await this.retrieve();
27
+ const page = await this.browserforce.openPage(BASE_PATH);
28
+ if (state.agreeToTermsAndConditions !== config.agreeToTermsAndConditions) {
29
+ await Promise.all([
30
+ page.locator(TOAST_MESSAGE).wait(),
31
+ // NOTE: Unfortunately a simple click() on the locator does not work here
32
+ (await page.locator(TOS_CHECKBOX).waitHandle()).evaluate((checkbox) => checkbox.click()),
33
+ ]);
34
+ await page.waitForSelector(TOAST_MESSAGE, { hidden: true });
35
+ }
36
+ if (state.enableSalesCloudForSlack !== config.enableSalesCloudForSlack) {
37
+ await Promise.all([
38
+ page.locator(TOAST_MESSAGE).wait(),
39
+ // NOTE: Unfortunately a simple click() on the locator does not work here
40
+ (await page.locator(SALES_CLOUD_FOR_SLACK_CHECKBOX).waitHandle()).evaluate((checkbox) => checkbox.click()),
41
+ ]);
42
+ await page.waitForSelector(TOAST_MESSAGE, { hidden: true });
43
+ }
44
+ await page.close();
45
+ }
46
+ }
47
+ //# 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,QAAQ,GAAG;YACf,yBAAyB,EAAE,MAAM,IAAI;iBAClC,OAAO,CAAC,YAAY,CAAC;iBACrB,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;iBACnC,IAAI,EAAE;YACT,wBAAwB,EAAE,MAAM,IAAI;iBACjC,OAAO,CAAC,8BAA8B,CAAC;iBACvC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;iBACnC,IAAI,EAAE;SACV,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,IAAI,EAAE;gBAClC,yEAAyE;gBACzE,CACE,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,UAAU,EAAE,CAC9C,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;aAC3C,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9D,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,IAAI,EAAE;gBAClC,yEAAyE;gBACzE,CACE,MAAM,IAAI,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC,UAAU,EAAE,CAChE,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;aAC3C,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9D,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.skip(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 'puppeteer';
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 element to wait for
26
+ * @param timeout - Maximum time to wait in milliseconds (default: 10000)
27
+ */
28
+ private waitForButtonEnabled;
29
+ }
@@ -0,0 +1,140 @@
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 xpath = '//button[contains(., "Automate Policy")]';
17
+ let automateButton = null;
18
+ await this.page.waitForSelector(`::-p-xpath(${xpath})`, {
19
+ timeout: 5000,
20
+ });
21
+ const buttons = await this.page.$$(`xpath/.${xpath}`);
22
+ if (buttons.length > 0) {
23
+ automateButton = buttons[0];
24
+ }
25
+ if (!automateButton) {
26
+ throw new Error('Automate Policy button not found on page');
27
+ }
28
+ await this.waitForButtonEnabled(automateButton);
29
+ await automateButton.click();
30
+ await this.handleActivationModal(triggerOn);
31
+ await throwPageErrors(this.page);
32
+ }
33
+ catch (error) {
34
+ throw new Error(`Failed to activate policy: ${error.message}`);
35
+ }
36
+ }
37
+ /**
38
+ * Deactivate a policy from its detail page
39
+ */
40
+ async deactivatePolicy() {
41
+ try {
42
+ const xpath = '//button[contains(., "Deactivate")]';
43
+ let deactivateButton = null;
44
+ await this.page.waitForSelector(`::-p-xpath(${xpath})`, {
45
+ timeout: 5000,
46
+ });
47
+ const buttons = await this.page.$$(`xpath/.${xpath}`);
48
+ if (buttons.length > 0) {
49
+ deactivateButton = buttons[0];
50
+ }
51
+ if (!deactivateButton) {
52
+ throw new Error('Deactivate button not found on page');
53
+ }
54
+ await deactivateButton.click();
55
+ await this.handleConfirmationModal();
56
+ await throwPageErrors(this.page);
57
+ }
58
+ catch (error) {
59
+ throw new Error(`Failed to deactivate policy: ${error.message}`);
60
+ }
61
+ }
62
+ /**
63
+ * Handle the activation modal (select trigger option and click Activate)
64
+ */
65
+ async handleActivationModal(triggerOn) {
66
+ const modalHeaderXpath = '//lightning-modal-header[contains(@class, "automate_policy_modal")]';
67
+ await this.page.waitForSelector(`::-p-xpath(${modalHeaderXpath})`, {
68
+ timeout: 10000,
69
+ });
70
+ await new Promise((resolve) => setTimeout(resolve, 500));
71
+ const radioButtons = await this.page.$$('input[type="radio"]');
72
+ if (radioButtons.length < 3) {
73
+ throw new Error('Modal did not load - radio buttons not found');
74
+ }
75
+ let radioButton = null;
76
+ for (const button of radioButtons) {
77
+ const value = await this.page.evaluate((radio) => radio.value, button);
78
+ if (value === triggerOn) {
79
+ radioButton = button;
80
+ break;
81
+ }
82
+ }
83
+ if (!radioButton) {
84
+ throw new Error(`Radio button with value "${triggerOn}" not found`);
85
+ }
86
+ const radioId = await this.page.evaluate((radio) => radio.id, radioButton);
87
+ if (radioId) {
88
+ const label = await this.page.$(`label[for="${radioId}"]`);
89
+ await label.click();
90
+ }
91
+ const xpath = '//button[text()="Activate"] | //button[contains(text(), "Activate")]';
92
+ await this.page.waitForSelector(`::-p-xpath(${xpath})`, { timeout: 5000 });
93
+ const buttons = await this.page.$$(`xpath/.${xpath}`);
94
+ if (buttons.length === 0) {
95
+ throw new Error('Activate button not found in modal');
96
+ }
97
+ await buttons[0].click();
98
+ await new Promise((resolve) => setTimeout(resolve, 1000));
99
+ }
100
+ /**
101
+ * Handle confirmation modal that may appear after deactivation
102
+ */
103
+ async handleConfirmationModal() {
104
+ try {
105
+ await new Promise((resolve) => setTimeout(resolve, 500));
106
+ const xpath = '//lightning-modal-footer//button[text()="Deactivate"]';
107
+ await this.page.waitForSelector(`::-p-xpath(${xpath})`, {
108
+ timeout: 5000,
109
+ });
110
+ const buttons = await this.page.$$(`xpath/.${xpath}`);
111
+ if (buttons.length === 0) {
112
+ throw new Error('Deactivate button not found in confirmation modal');
113
+ }
114
+ await buttons[0].click();
115
+ await new Promise((resolve) => setTimeout(resolve, 1000));
116
+ }
117
+ catch (e) {
118
+ throw new Error(`Failed to handle deactivation confirmation modal: ${e.message}`);
119
+ }
120
+ }
121
+ /**
122
+ * Wait for a button to become enabled
123
+ * @param button - The button element to wait for
124
+ * @param timeout - Maximum time to wait in milliseconds (default: 10000)
125
+ */
126
+ async waitForButtonEnabled(button, timeout = 10000) {
127
+ const startTime = Date.now();
128
+ while (Date.now() - startTime < timeout) {
129
+ const isDisabled = await this.page.evaluate((btn) => {
130
+ return btn.disabled;
131
+ }, button);
132
+ if (!isDisabled) {
133
+ return;
134
+ }
135
+ await new Promise((resolve) => setTimeout(resolve, 500));
136
+ }
137
+ throw new Error(`Button did not become enabled within ${timeout}ms`);
138
+ }
139
+ }
140
+ //# 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"}