@rancher/shell 0.3.14 → 0.3.16

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 (400) hide show
  1. package/assets/images/providers/nutanix.svg +1 -0
  2. package/assets/translations/en-us.yaml +84 -3
  3. package/assets/translations/zh-hans.yaml +68 -26
  4. package/chart/gatekeeper.vue +2 -2
  5. package/chart/monitoring/alerting/index.vue +3 -3
  6. package/chart/monitoring/index.vue +2 -2
  7. package/chart/monitoring/prometheus/index.vue +1 -1
  8. package/chart/rancher-backup/index.vue +2 -2
  9. package/cloud-credential/generic.vue +1 -1
  10. package/cloud-credential/harvester.vue +2 -2
  11. package/components/AssignTo.vue +1 -1
  12. package/components/AwsComplianceBanner.vue +1 -1
  13. package/components/BackLink.vue +7 -0
  14. package/components/BannerGraphic.vue +1 -0
  15. package/components/BrandImage.vue +3 -3
  16. package/components/ClusterProviderIcon.vue +1 -1
  17. package/components/CommunityLinks.vue +2 -2
  18. package/components/ConsumptionGauge.vue +17 -2
  19. package/components/CruResource.vue +3 -2
  20. package/components/DashboardMetrics.vue +8 -0
  21. package/components/DetailTop.vue +1 -1
  22. package/components/EmberPage.vue +1 -0
  23. package/components/ExplorerMembers.vue +8 -8
  24. package/components/ExplorerProjectsNamespaces.vue +9 -9
  25. package/components/FixedBanner.vue +1 -1
  26. package/components/GlobalRoleBindings.vue +11 -11
  27. package/components/GrafanaDashboard.vue +14 -2
  28. package/components/GrowlManager.vue +1 -1
  29. package/components/HarvesterServiceAddOnConfig.vue +4 -3
  30. package/components/IconOrSvg.vue +10 -3
  31. package/components/LandingPagePreference.vue +2 -2
  32. package/components/MoveModal.vue +1 -1
  33. package/components/PodSecurityAdmission.vue +3 -3
  34. package/components/ProgressBarMulti.vue +2 -2
  35. package/components/PromptRemove.vue +52 -28
  36. package/components/PromptRestore.vue +3 -3
  37. package/components/Questions/index.vue +5 -5
  38. package/components/RelatedWorkloadsTable.vue +1 -1
  39. package/components/ResourceList/Masthead.vue +1 -1
  40. package/components/ResourceTable.vue +3 -3
  41. package/components/ResourceYaml.vue +1 -1
  42. package/components/RoleBindings.vue +2 -2
  43. package/components/SimpleBox.vue +1 -0
  44. package/components/SingleClusterInfo.vue +1 -1
  45. package/components/SortableTable/actions.js +3 -3
  46. package/components/SortableTable/advanced-filtering.js +7 -7
  47. package/components/SortableTable/filtering.js +1 -1
  48. package/components/SortableTable/index.vue +14 -10
  49. package/components/SortableTable/selection.js +5 -5
  50. package/components/SortableTable/sorting.js +5 -5
  51. package/components/Tabbed/index.vue +7 -7
  52. package/components/TableSparkLine.vue +1 -1
  53. package/components/Wizard.vue +11 -23
  54. package/components/__tests__/Collapse.spec.ts +1 -1
  55. package/components/__tests__/CruResource.test.ts +74 -0
  56. package/components/__tests__/SimpleBox.spec.ts +1 -1
  57. package/components/auth/RoleDetailEdit.vue +7 -3
  58. package/components/auth/SelectPrincipal.vue +3 -3
  59. package/components/fleet/FleetResources.vue +1 -1
  60. package/components/fleet/FleetStatus.vue +4 -4
  61. package/components/fleet/FleetSummary.vue +1 -1
  62. package/components/fleet/ForceDirectedTreeChart/chartIcons.js +1 -1
  63. package/components/fleet/ForceDirectedTreeChart/index.vue +1 -1
  64. package/components/form/ArrayList.vue +11 -3
  65. package/components/form/ArrayListSelect.vue +2 -2
  66. package/components/form/FileSelector.vue +6 -0
  67. package/components/form/GitPicker.vue +528 -0
  68. package/components/form/KeyValue.vue +82 -41
  69. package/components/form/LabeledSelect.vue +2 -2
  70. package/components/form/MatchExpressions.vue +2 -2
  71. package/components/form/Members/ClusterMembershipEditor.vue +1 -2
  72. package/components/form/Members/ClusterPermissionsEditor.vue +6 -5
  73. package/components/form/Members/MembershipEditor.vue +4 -4
  74. package/components/form/Members/ProjectMembershipEditor.vue +1 -2
  75. package/components/form/NameNsDescription.vue +13 -6
  76. package/components/form/Networking.vue +2 -2
  77. package/components/form/NodeScheduling.vue +1 -1
  78. package/components/form/PodAffinity.vue +7 -2
  79. package/components/form/ProjectMemberEditor.vue +4 -4
  80. package/components/form/ResourceQuota/Namespace.vue +2 -2
  81. package/components/form/ResourceQuota/NamespaceRow.vue +2 -2
  82. package/components/form/ResourceQuota/Project.vue +1 -1
  83. package/components/form/ResourceQuota/shared.js +2 -2
  84. package/components/form/ResourceSelector.vue +1 -1
  85. package/components/form/ResourceTabs/index.vue +1 -1
  86. package/components/form/RuleSelector.vue +1 -1
  87. package/components/form/SecretSelector.vue +4 -4
  88. package/components/form/Select.vue +2 -2
  89. package/components/form/SelectOrCreateAuthSecret.vue +3 -3
  90. package/components/form/ServiceNameSelect.vue +1 -1
  91. package/components/form/ServicePorts.vue +1 -1
  92. package/components/form/ShellInput.vue +1 -1
  93. package/components/form/SimpleSecretSelector.vue +4 -4
  94. package/components/form/Taints.vue +1 -1
  95. package/components/form/ValueFromResource.vue +3 -3
  96. package/components/form/WorkloadPorts.vue +8 -7
  97. package/components/form/__tests__/Error.test.ts +1 -1
  98. package/components/form/__tests__/KeyValue.test.ts +21 -0
  99. package/components/formatter/ClusterLink.vue +1 -1
  100. package/components/formatter/ClusterProvider.vue +13 -2
  101. package/components/formatter/Endpoints.vue +1 -1
  102. package/components/formatter/FleetSummaryGraph.vue +2 -2
  103. package/components/formatter/IngressTarget.vue +2 -2
  104. package/components/formatter/PodImages.vue +1 -1
  105. package/components/formatter/PrincipalGroupBindings.vue +1 -1
  106. package/components/formatter/ReceiverIcons.vue +3 -3
  107. package/components/formatter/ServiceType.vue +1 -1
  108. package/components/formatter/WorkloadDetailEndpoints.vue +1 -1
  109. package/components/formatter/WorkloadHealthScale.vue +1 -1
  110. package/components/formatter/__tests__/LiveDate.test.ts +1 -1
  111. package/components/graph/Bar.vue +1 -1
  112. package/components/graph/LinePlot.vue +3 -3
  113. package/components/nav/Group.vue +2 -2
  114. package/components/nav/Header.vue +5 -5
  115. package/components/nav/NamespaceFilter.vue +14 -14
  116. package/components/nav/TopLevelMenu.vue +76 -11
  117. package/components/nav/WindowManager/ContainerLogs.vue +2 -2
  118. package/components/nav/WindowManager/ContainerShell.vue +1 -1
  119. package/components/nav/WorkspaceSwitcher.vue +1 -1
  120. package/config/home-links.js +4 -4
  121. package/config/labels-annotations.js +8 -9
  122. package/config/pod-security-admission.ts +1 -1
  123. package/config/product/auth.js +5 -5
  124. package/config/product/explorer.js +14 -0
  125. package/config/store.js +2 -0
  126. package/config/table-headers.js +13 -13
  127. package/config/uiplugins.js +8 -1
  128. package/core/plugin-routes.ts +3 -2
  129. package/core/plugin.ts +3 -3
  130. package/core/plugins.js +7 -7
  131. package/creators/pkg/files/index.ts +1 -1
  132. package/detail/catalog.cattle.io.clusterrepo.vue +8 -1
  133. package/detail/cis.cattle.io.clusterscan.vue +3 -3
  134. package/detail/fleet.cattle.io.bundle.vue +1 -1
  135. package/detail/helm.cattle.io.projecthelmchart.vue +16 -29
  136. package/detail/management.cattle.io.user.vue +12 -12
  137. package/detail/namespace.vue +4 -4
  138. package/detail/networking.k8s.io.ingress.vue +3 -3
  139. package/detail/node.vue +2 -2
  140. package/detail/provisioning.cattle.io.cluster.vue +9 -10
  141. package/detail/service.vue +1 -1
  142. package/detail/workload/index.vue +3 -3
  143. package/dialog/AddProjectMemberDialog.vue +2 -2
  144. package/dialog/DrainNode.vue +1 -1
  145. package/dialog/GenericPrompt.vue +9 -5
  146. package/dialog/RotateEncryptionKeyDialog.vue +2 -2
  147. package/dialog/ScaleMachineDownDialog.vue +2 -2
  148. package/edit/__tests__/monitoring.coreos.com.prometheusrule.test.ts +56 -0
  149. package/edit/auth/azuread.vue +3 -3
  150. package/edit/autoscaling.horizontalpodautoscaler/index.vue +5 -5
  151. package/edit/cis.cattle.io.clusterscan.vue +5 -5
  152. package/edit/cloudcredential.vue +4 -4
  153. package/edit/constraints.gatekeeper.sh.constraint/NamespaceList.vue +1 -1
  154. package/edit/constraints.gatekeeper.sh.constraint/index.vue +4 -4
  155. package/edit/fleet.cattle.io.gitrepo.vue +6 -6
  156. package/edit/helm.cattle.io.projecthelmchart.vue +3 -3
  157. package/edit/logging-flow/index.vue +4 -4
  158. package/edit/logging.banzaicloud.io.output/index.vue +3 -3
  159. package/edit/logging.banzaicloud.io.output/providers/elasticsearch.vue +1 -1
  160. package/edit/logging.banzaicloud.io.output/providers/forward.vue +1 -1
  161. package/edit/logging.banzaicloud.io.output/providers/logz.vue +1 -1
  162. package/edit/logging.banzaicloud.io.output/providers/opensearch.vue +1 -1
  163. package/edit/logging.banzaicloud.io.output/providers/redis.vue +1 -1
  164. package/edit/logging.banzaicloud.io.output/providers/splunkHec.vue +1 -1
  165. package/edit/management.cattle.io.clusterroletemplatebinding.vue +1 -1
  166. package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +1 -1
  167. package/edit/management.cattle.io.project.vue +3 -3
  168. package/edit/management.cattle.io.projectroletemplatebinding.vue +2 -2
  169. package/edit/management.cattle.io.setting.vue +1 -1
  170. package/edit/management.cattle.io.user.vue +2 -2
  171. package/edit/monitoring.coreos.com.alertmanagerconfig/auth.vue +2 -2
  172. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +1 -1
  173. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +1 -1
  174. package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +3 -3
  175. package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +5 -5
  176. package/edit/monitoring.coreos.com.prometheusrule/duration.js +1 -1
  177. package/edit/monitoring.coreos.com.prometheusrule/index.vue +8 -3
  178. package/edit/monitoring.coreos.com.receiver/auth.vue +2 -2
  179. package/edit/monitoring.coreos.com.receiver/tls.vue +3 -4
  180. package/edit/monitoring.coreos.com.receiver/types/__tests__/email.test.ts +53 -0
  181. package/edit/monitoring.coreos.com.receiver/types/email.vue +2 -0
  182. package/edit/monitoring.coreos.com.receiver/types/opsgenie.vue +3 -3
  183. package/edit/monitoring.coreos.com.receiver/types/webhook.add.vue +1 -1
  184. package/edit/monitoring.coreos.com.route.vue +2 -2
  185. package/edit/namespace.vue +21 -13
  186. package/edit/networking.k8s.io.ingress/Certificate.vue +2 -2
  187. package/edit/networking.k8s.io.ingress/DefaultBackend.vue +2 -2
  188. package/edit/networking.k8s.io.ingress/RulePath.vue +2 -2
  189. package/edit/networking.k8s.io.ingress/Rules.vue +2 -2
  190. package/edit/networking.k8s.io.ingress/index.vue +4 -4
  191. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +3 -3
  192. package/edit/networking.k8s.io.networkpolicy/index.vue +1 -1
  193. package/edit/persistentvolume/index.vue +4 -4
  194. package/edit/persistentvolumeclaim.vue +3 -3
  195. package/edit/provisioning.cattle.io.cluster/RegistryMirrors.vue +1 -1
  196. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +2 -2
  197. package/edit/provisioning.cattle.io.cluster/import.vue +2 -2
  198. package/edit/provisioning.cattle.io.cluster/index.vue +7 -7
  199. package/edit/provisioning.cattle.io.cluster/rke2.vue +28 -29
  200. package/edit/resources.cattle.io.backup.vue +2 -2
  201. package/edit/resources.cattle.io.restore.vue +3 -3
  202. package/edit/secret/generic.vue +1 -1
  203. package/edit/secret/index.vue +3 -3
  204. package/edit/service.vue +3 -21
  205. package/edit/serviceaccount.vue +2 -2
  206. package/edit/storage.k8s.io.storageclass/index.vue +4 -4
  207. package/edit/storage.k8s.io.storageclass/provisioners/driver.harvesterhci.io.vue +1 -1
  208. package/edit/token.vue +5 -5
  209. package/edit/workload/index.vue +1 -1
  210. package/edit/workload/mixins/workload.js +8 -8
  211. package/edit/workload/storage/ContainerMountPaths.vue +9 -9
  212. package/edit/workload/storage/Mount.vue +2 -2
  213. package/edit/workload/storage/csi/index.vue +1 -1
  214. package/edit/workload/storage/ephemeralVolume/index.vue +1 -1
  215. package/edit/workload/storage/index.vue +6 -6
  216. package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +2 -2
  217. package/initialize/client.js +8 -8
  218. package/initialize/index.js +1 -4
  219. package/layouts/default.vue +38 -11
  220. package/list/catalog.cattle.io.clusterrepo.vue +9 -1
  221. package/list/cis.cattle.io.clusterscan.vue +1 -1
  222. package/list/fleet.cattle.io.cluster.vue +2 -2
  223. package/list/group.principal.vue +1 -1
  224. package/list/helm.cattle.io.projecthelmchart.vue +2 -2
  225. package/list/management.cattle.io.cluster.vue +1 -1
  226. package/list/management.cattle.io.feature.vue +1 -1
  227. package/list/management.cattle.io.user.vue +2 -2
  228. package/list/node.vue +5 -5
  229. package/list/provisioning.cattle.io.cluster.vue +4 -5
  230. package/machine-config/amazonec2.vue +2 -2
  231. package/machine-config/digitalocean.vue +4 -4
  232. package/machine-config/linode.vue +4 -4
  233. package/machine-config/vmwarevsphere.vue +12 -12
  234. package/middleware/authenticated.js +7 -6
  235. package/mixins/brand.js +1 -1
  236. package/mixins/chart.js +6 -6
  237. package/mixins/fetch.client.js +2 -2
  238. package/mixins/form-validation.js +7 -7
  239. package/mixins/resource-fetch-namespaced.js +1 -1
  240. package/mixins/resource-fetch.js +2 -2
  241. package/models/apps.statefulset.js +2 -2
  242. package/models/batch.cronjob.js +1 -1
  243. package/models/catalog.cattle.io.app.js +4 -4
  244. package/models/cis.cattle.io.clusterscan.js +1 -1
  245. package/models/cis.cattle.io.clusterscanbenchmark.js +1 -1
  246. package/models/cis.cattle.io.clusterscanreport.js +1 -1
  247. package/models/cloudcredential.js +1 -1
  248. package/models/cluster/node.js +5 -5
  249. package/models/cluster.x-k8s.io.machinedeployment.js +2 -2
  250. package/models/fleet.cattle.io.gitrepo.js +3 -3
  251. package/models/group.principal.js +4 -4
  252. package/models/helm.cattle.io.projecthelmchart.js +2 -2
  253. package/models/logging.banzaicloud.io.clusterflow.js +2 -2
  254. package/models/logging.banzaicloud.io.flow.js +5 -5
  255. package/models/logging.banzaicloud.io.output.js +2 -2
  256. package/models/management.cattle.io.cluster.js +10 -14
  257. package/models/management.cattle.io.globalrole.js +4 -4
  258. package/models/management.cattle.io.node.js +2 -2
  259. package/models/management.cattle.io.nodepool.js +3 -3
  260. package/models/management.cattle.io.nodetemplate.js +4 -4
  261. package/models/management.cattle.io.project.js +2 -2
  262. package/models/management.cattle.io.roletemplate.js +1 -1
  263. package/models/management.cattle.io.setting.js +1 -1
  264. package/models/management.cattle.io.user.js +5 -5
  265. package/models/monitoring.coreos.com.receiver.js +9 -9
  266. package/models/namespace.js +1 -1
  267. package/models/networking.k8s.io.ingress.js +5 -5
  268. package/models/persistentvolume.js +3 -3
  269. package/models/pod.js +3 -3
  270. package/models/provisioning.cattle.io.cluster.js +39 -27
  271. package/models/rbac.authorization.k8s.io.clusterrole.js +2 -2
  272. package/models/rbac.authorization.k8s.io.role.js +3 -3
  273. package/models/secret.js +1 -1
  274. package/models/service.js +2 -2
  275. package/models/storage.k8s.io.storageclass.js +2 -2
  276. package/models/token.js +1 -1
  277. package/models/workload.js +6 -6
  278. package/models/workload.service.js +5 -21
  279. package/package.json +3 -2
  280. package/pages/about.vue +9 -9
  281. package/pages/account/index.vue +2 -2
  282. package/pages/auth/login.vue +25 -12
  283. package/pages/auth/setup.vue +4 -0
  284. package/pages/auth/verify.vue +6 -0
  285. package/pages/c/_cluster/apps/charts/index.vue +4 -4
  286. package/pages/c/_cluster/apps/charts/install.vue +28 -20
  287. package/pages/c/_cluster/auth/roles/index.vue +10 -10
  288. package/pages/c/_cluster/explorer/index.vue +41 -16
  289. package/pages/c/_cluster/explorer/tools/index.vue +8 -8
  290. package/pages/c/_cluster/fleet/GitRepoGraphConfig.js +1 -1
  291. package/pages/c/_cluster/fleet/index.vue +11 -11
  292. package/pages/c/_cluster/monitoring/index.vue +1 -1
  293. package/pages/c/_cluster/settings/links.vue +3 -3
  294. package/pages/c/_cluster/settings/performance.vue +1 -1
  295. package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +6 -6
  296. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +3 -3
  297. package/pages/c/_cluster/uiplugins/InstallDialog.vue +3 -3
  298. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +1 -1
  299. package/pages/c/_cluster/uiplugins/RemoveUIPlugins.vue +3 -3
  300. package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +6 -6
  301. package/pages/c/_cluster/uiplugins/UninstallDialog.vue +4 -4
  302. package/pages/c/_cluster/uiplugins/index.vue +22 -19
  303. package/pages/diagnostic.vue +6 -6
  304. package/pages/home.vue +8 -3
  305. package/pages/prefs.vue +2 -2
  306. package/pages/rio/mesh.vue +3 -3
  307. package/pages/support/index.vue +10 -1
  308. package/pkg/auto-import.js +1 -1
  309. package/pkg/tsconfig.json +1 -0
  310. package/pkg/vue.config.js +1 -1
  311. package/plugins/axios.js +1 -1
  312. package/plugins/clean-html-directive.js +1 -1
  313. package/plugins/dashboard-store/__tests__/mutations.spec.js +4 -4
  314. package/plugins/dashboard-store/actions.js +4 -4
  315. package/plugins/dashboard-store/getters.js +1 -1
  316. package/plugins/dashboard-store/index.js +1 -1
  317. package/plugins/dashboard-store/mutations.js +2 -2
  318. package/plugins/dashboard-store/resource-class.js +8 -8
  319. package/plugins/i18n.js +1 -1
  320. package/plugins/plugin.js +5 -1
  321. package/plugins/steve/actions.js +25 -3
  322. package/plugins/steve/getters.js +3 -3
  323. package/plugins/steve/hybrid-class.js +1 -1
  324. package/plugins/steve/mutations.js +1 -1
  325. package/plugins/steve/performanceTesting.js +1 -1
  326. package/plugins/steve/resourceWatcher.js +1 -1
  327. package/plugins/steve/subscribe.js +6 -6
  328. package/plugins/steve/worker/web-worker.basic.js +1 -1
  329. package/promptRemove/management.cattle.io.project.vue +3 -3
  330. package/promptRemove/mixin/roleDeletionCheck.js +4 -4
  331. package/promptRemove/pod.vue +1 -1
  332. package/rancher-components/components/Form/Checkbox/Checkbox.test.ts +2 -2
  333. package/rancher-components/components/Form/Checkbox/Checkbox.vue +1 -1
  334. package/rancher-components/components/Form/Radio/RadioButton.test.ts +1 -1
  335. package/rancher-components/components/Form/Radio/RadioButton.vue +2 -2
  336. package/rancher-components/components/Form/Radio/RadioGroup.vue +2 -2
  337. package/rancher-components/components/Form/TextArea/TextAreaAutoGrow.vue +1 -0
  338. package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.test.ts +1 -1
  339. package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.vue +7 -7
  340. package/rancher-components/components/StringList/StringList.test.ts +10 -9
  341. package/rancher-components/components/StringList/StringList.vue +5 -5
  342. package/scripts/extension/helm/charts/ui-plugin-server/Chart.yaml +1 -1
  343. package/store/action-menu.js +4 -4
  344. package/store/auth.js +40 -7
  345. package/store/aws.js +1 -1
  346. package/store/catalog.js +12 -11
  347. package/store/digitalocean.js +4 -4
  348. package/store/features.js +1 -0
  349. package/store/github.js +70 -213
  350. package/store/gitlab.js +159 -0
  351. package/store/growl.js +1 -1
  352. package/store/i18n.js +7 -7
  353. package/store/index.js +63 -22
  354. package/store/linode.js +1 -1
  355. package/store/plugins.js +5 -5
  356. package/store/pnap.js +1 -1
  357. package/store/prefs.js +6 -6
  358. package/store/resource-fetch.js +3 -3
  359. package/store/type-map.js +61 -42
  360. package/store/uiplugins.ts +2 -1
  361. package/store/wm.js +5 -4
  362. package/tsconfig.default.json +10 -0
  363. package/tsconfig.json +2 -9
  364. package/types/shell/index.d.ts +10 -2
  365. package/utils/__tests__/version.test.ts +28 -0
  366. package/utils/alertmanagerconfig.js +4 -4
  367. package/utils/array.ts +4 -4
  368. package/utils/async.ts +1 -1
  369. package/utils/auth.js +3 -3
  370. package/utils/axios.js +5 -5
  371. package/utils/cluster.js +4 -3
  372. package/utils/color.js +10 -0
  373. package/utils/create-yaml.js +4 -4
  374. package/utils/crypto/browserHashUtils.js +1 -1
  375. package/utils/crypto/browserMd5.js +1 -1
  376. package/utils/crypto/browserSha1.js +1 -1
  377. package/utils/crypto/browserSha256.js +1 -1
  378. package/utils/crypto/index.js +3 -3
  379. package/utils/favicon.js +2 -3
  380. package/utils/gatekeeper/util.js +3 -3
  381. package/utils/gc/gc.ts +2 -2
  382. package/utils/git.ts +92 -0
  383. package/utils/grafana.js +4 -4
  384. package/utils/monitoring.js +2 -2
  385. package/utils/nuxt.js +2 -2
  386. package/utils/object.js +5 -5
  387. package/utils/pod-security-admission.ts +1 -1
  388. package/utils/projectAndNamespaceFiltering.utils.ts +1 -1
  389. package/utils/select.js +2 -2
  390. package/utils/selector.js +2 -2
  391. package/utils/settings.ts +17 -2
  392. package/utils/socket.js +30 -6
  393. package/utils/sort.js +1 -1
  394. package/utils/string.js +1 -1
  395. package/utils/url.ts +1 -1
  396. package/utils/validators/formRules/index.ts +3 -3
  397. package/utils/validators/role-template.js +4 -4
  398. package/utils/version.js +14 -1
  399. package/vue.config.js +19 -13
  400. package/components/form/GithubPicker.vue +0 -390
@@ -128,6 +128,10 @@ export default {
128
128
 
129
129
  finishDeferred(key, 'resolve', out);
130
130
 
131
+ if (opt.method === 'post' || opt.method === 'put') {
132
+ handleValidationWarnings(res);
133
+ }
134
+
131
135
  return out;
132
136
  });
133
137
  }
@@ -192,6 +196,24 @@ export default {
192
196
 
193
197
  return Promise.reject(out);
194
198
  }
199
+
200
+ function handleValidationWarnings(res) {
201
+ const warnings = (res.headers?.warning || '').split(',');
202
+
203
+ if (!warnings.length || !warnings[0]) {
204
+ return;
205
+ }
206
+
207
+ const message = warnings.reduce((message, warning) => {
208
+ return `${ message }\n${ warning.trim() }`;
209
+ }, `Validation Warnings for ${ opt.url }\n`);
210
+
211
+ if (process.env.dev) {
212
+ console.warn(`${ message }\n\n`, res.data); // eslint-disable-line no-console
213
+ } else {
214
+ console.debug(message); // eslint-disable-line no-console
215
+ }
216
+ }
195
217
  },
196
218
 
197
219
  promptMove({ commit, state }, resources) {
@@ -224,7 +246,7 @@ export default {
224
246
  if ( opt.load !== false && res.type === 'collection' ) {
225
247
  await dispatch('loadMulti', res.data);
226
248
 
227
- return res.data.map(x => getters.byId(x.type, x.id) || x);
249
+ return res.data.map((x) => getters.byId(x.type, x.id) || x);
228
250
  } else if ( opt.load !== false && res.type && res.id ) {
229
251
  return dispatch('load', { data: res });
230
252
  } else {
@@ -256,7 +278,7 @@ export default {
256
278
  if ( opt.load !== false && res.type === 'collection' ) {
257
279
  await dispatch('loadMulti', res.data);
258
280
 
259
- return res.data.map(x => getters.byId(x.type, x.id) || x);
281
+ return res.data.map((x) => getters.byId(x.type, x.id) || x);
260
282
  } else if ( opt.load !== false && res.type && res.id ) {
261
283
  return dispatch('load', { data: res });
262
284
  } else {
@@ -349,7 +371,7 @@ export default {
349
371
 
350
372
  dropKeys(obj, rootKeys);
351
373
  dropKeys(obj?.metadata, metadataKeys);
352
- (obj?.status?.conditions || []).forEach(condition => dropKeys(condition, conditionKeys));
374
+ (obj?.status?.conditions || []).forEach((condition) => dropKeys(condition, conditionKeys));
353
375
 
354
376
  return jsyaml.dump(obj);
355
377
  }
@@ -94,7 +94,7 @@ export default {
94
94
  return url;
95
95
  },
96
96
 
97
- defaultModel: state => (obj) => {
97
+ defaultModel: (state) => (obj) => {
98
98
  const which = state.config.modelBaseClass || STEVE_MODEL_TYPES.BY_TYPE.STEVE;
99
99
 
100
100
  if ( which === STEVE_MODEL_TYPES.BY_TYPE ) {
@@ -154,7 +154,7 @@ export default {
154
154
  },
155
155
 
156
156
  // Return all the pods for a given namespace
157
- podsByNamespace: state => (namespace) => {
157
+ podsByNamespace: (state) => (namespace) => {
158
158
  const map = state.podsByNamespace[namespace];
159
159
 
160
160
  return map?.list || [];
@@ -164,7 +164,7 @@ export default {
164
164
  return GC_IGNORE_TYPES;
165
165
  },
166
166
 
167
- currentGeneration: state => (type) => {
167
+ currentGeneration: (state) => (type) => {
168
168
  type = normalizeType(type);
169
169
 
170
170
  const cache = state.types[type];
@@ -9,7 +9,7 @@ import Resource from '@shell/plugins/dashboard-store/resource-class';
9
9
  export function cleanHybridResources(data) {
10
10
  const potentialNormanHoldovers = ['state', 'name', 'description', 'labels', 'annotations'];
11
11
 
12
- potentialNormanHoldovers.forEach(key => delete data[key]);
12
+ potentialNormanHoldovers.forEach((key) => delete data[key]);
13
13
 
14
14
  return data;
15
15
  }
@@ -66,7 +66,7 @@ function cleanPodsByNamespaceCache(state, resource) {
66
66
 
67
67
  // Extra defensive check that the cache exists for the namespace being removed
68
68
  if (cache) {
69
- const inList = cache.list.findIndex(p => p.id === resource.id);
69
+ const inList = cache.list.findIndex((p) => p.id === resource.id);
70
70
 
71
71
  if ( inList >= 0 ) {
72
72
  cache.list.splice(inList, 1);
@@ -81,7 +81,7 @@ function replicate(data, config) {
81
81
  const templates = [];
82
82
  let j = 0;
83
83
 
84
- data.forEach(d => templates.push(JSON.stringify(d)));
84
+ data.forEach((d) => templates.push(JSON.stringify(d)));
85
85
 
86
86
  const newData = [...data];
87
87
 
@@ -40,7 +40,7 @@ export const keyForSubscribe = ({
40
40
  resourceType, type, namespace, id, selector
41
41
  } = {}) => {
42
42
  return [(resourceType || type), namespace, id, selector] // each watch param in an array
43
- .filter(param => !!param) // filter out all the empty ones // the filter makes these keys neater
43
+ .filter((param) => !!param) // filter out all the empty ones // the filter makes these keys neater
44
44
  .join('/'); // join into a string so we can use it as an object key
45
45
  };
46
46
 
@@ -661,7 +661,7 @@ const defaultActions = {
661
661
  have = getters['all'](resourceType).slice();
662
662
 
663
663
  if ( namespace ) {
664
- have = have.filter(x => x.metadata?.namespace === namespace);
664
+ have = have.filter((x) => x.metadata?.namespace === namespace);
665
665
  }
666
666
 
667
667
  want = await dispatch('findAll', {
@@ -1012,7 +1012,7 @@ const defaultMutations = {
1012
1012
  },
1013
1013
 
1014
1014
  setWatchStarted(state, obj) {
1015
- const existing = state.started.find(entry => equivalentWatch(obj, entry));
1015
+ const existing = state.started.find((entry) => equivalentWatch(obj, entry));
1016
1016
 
1017
1017
  if ( !existing ) {
1018
1018
  addObject(state.started, obj);
@@ -1022,7 +1022,7 @@ const defaultMutations = {
1022
1022
  },
1023
1023
 
1024
1024
  setWatchStopped(state, obj) {
1025
- const existing = state.started.find(entry => equivalentWatch(obj, entry));
1025
+ const existing = state.started.find((entry) => equivalentWatch(obj, entry));
1026
1026
 
1027
1027
  if ( existing ) {
1028
1028
  removeObject(state.started, existing);
@@ -1066,12 +1066,12 @@ const defaultMutations = {
1066
1066
  * Getters that cover cases 1 & 2 (see file description)
1067
1067
  */
1068
1068
  const defaultGetters = {
1069
- inError: state => (obj) => {
1069
+ inError: (state) => (obj) => {
1070
1070
  return state.inError[keyForSubscribe(obj)];
1071
1071
  },
1072
1072
 
1073
- watchStarted: state => (obj) => {
1074
- return !!state.started.find(entry => equivalentWatch(obj, entry));
1073
+ watchStarted: (state) => (obj) => {
1074
+ return !!state.started.find((entry) => equivalentWatch(obj, entry));
1075
1075
  },
1076
1076
 
1077
1077
  nextResourceVersion: (state, getters) => (type, id) => {
@@ -105,7 +105,7 @@ const workerActions = {
105
105
  // Remove the cached schema
106
106
  removeSchema: (id) => {
107
107
  // Remove anything in the queue related to the schema - we don't want to send any pending updates later for a schema that has been removed
108
- state.queue = state.queue.filter(schema => schema.id !== id);
108
+ state.queue = state.queue.filter((schema) => schema.id !== id);
109
109
 
110
110
  // Delete the schema from the map, so if it comes back we don't ignore it if the hash is the same
111
111
  delete state.schemas[id];
@@ -52,7 +52,7 @@ export default {
52
52
 
53
53
  filteredNamespaces() {
54
54
  if (this.currentProject) {
55
- return this.allNamespaces.filter(n => n.metadata.labels[PROJECT] === this.currentProject.metadata?.name);
55
+ return this.allNamespaces.filter((n) => n.metadata.labels[PROJECT] === this.currentProject.metadata?.name);
56
56
  }
57
57
 
58
58
  return [];
@@ -69,7 +69,7 @@ export default {
69
69
  },
70
70
 
71
71
  names() {
72
- return this.filteredNamespaces.map(obj => obj.nameDisplay).slice(0, 5);
72
+ return this.filteredNamespaces.map((obj) => obj.nameDisplay).slice(0, 5);
73
73
  },
74
74
  // Only admins and cluster owners can see namespaces outside of projects
75
75
  canSeeProjectlessNamespaces() {
@@ -82,7 +82,7 @@ export default {
82
82
  // Delete all of thre namespaces and return false - this tells the prompt remove dialog to continue and delete the project
83
83
  // Delete all namespaces if the user wouldn't be able to see them after deleting the project
84
84
  if (this.deleteProjectNamespaces || !this.canSeeProjectlessNamespaces) {
85
- return Promise.all(this.filteredNamespaces.map(n => n.remove())).then(() => false);
85
+ return Promise.all(this.filteredNamespaces.map((n) => n.remove())).then(() => false);
86
86
  }
87
87
 
88
88
  // Return false so that the main promptRemoval will continue to remove the project
@@ -17,7 +17,7 @@ export default {
17
17
  ...mapGetters({ t: 'i18n/t' }),
18
18
 
19
19
  names() {
20
- return this.toRemove.map(obj => obj.nameDisplay).slice(0, 5);
20
+ return this.toRemove.map((obj) => obj.nameDisplay).slice(0, 5);
21
21
  },
22
22
 
23
23
  plusMore() {
@@ -82,14 +82,14 @@ export default {
82
82
 
83
83
  if (request.data && request.data.length) {
84
84
  rolesToRemove.forEach((toRemove) => {
85
- const usedRoles = request.data.filter(item => item[propToMatch] === toRemove.id);
85
+ const usedRoles = request.data.filter((item) => item[propToMatch] === toRemove.id);
86
86
 
87
87
  if (usedRoles.length) {
88
- const uniqueUsers = [...new Set(usedRoles.map(item => item.userName).filter(user => userMap[user]))];
88
+ const uniqueUsers = [...new Set(usedRoles.map((item) => item.userName).filter((user) => userMap[user]))];
89
89
 
90
90
  if (uniqueUsers.length) {
91
91
  numberOfRolesWithBinds++;
92
- uniqueUsers.forEach(user => uniqueUsersWithBinds.add(user));
92
+ uniqueUsers.forEach((user) => uniqueUsersWithBinds.add(user));
93
93
  }
94
94
  }
95
95
  });
@@ -79,7 +79,7 @@ export default {
79
79
  }
80
80
 
81
81
  try {
82
- await Promise.all(this.value.map(resource => this.removePod(resource)));
82
+ await Promise.all(this.value.map((resource) => this.removePod(resource)));
83
83
  if ( goTo && !isEmpty(goTo) ) {
84
84
  parentComponent.currentRouter.push(goTo);
85
85
  }
@@ -1,7 +1,7 @@
1
1
  import { shallowMount, Wrapper } from '@vue/test-utils';
2
2
  import { Checkbox } from './index';
3
3
 
4
- describe('Checkbox.vue', () => {
4
+ describe('checkbox.vue', () => {
5
5
  const event = {
6
6
  target: { tagName: 'input', href: null },
7
7
  stopPropagation: () => { },
@@ -63,6 +63,6 @@ describe('Checkbox.vue', () => {
63
63
  wrapper.vm.clicked(event);
64
64
  await wrapper.vm.$nextTick();
65
65
 
66
- expect(wrapper.emitted().input?.[0][0]).toBe(null);
66
+ expect(wrapper.emitted().input?.[0][0]).toBeNull();
67
67
  });
68
68
  });
@@ -202,7 +202,7 @@ export default Vue.extend({
202
202
  * @param value A collection of values for the checkbox.
203
203
  */
204
204
  findTrueValues(value: boolean[]): boolean {
205
- return value.find(v => v === this.valueWhenTrue) || false;
205
+ return value.find((v) => v === this.valueWhenTrue) || false;
206
206
  }
207
207
  }
208
208
  });
@@ -2,7 +2,7 @@ import { shallowMount } from '@vue/test-utils';
2
2
  import { RadioButton } from './index';
3
3
  import { cleanHtmlDirective } from '@shell/plugins/clean-html-directive';
4
4
 
5
- describe('RadioButton.vue', () => {
5
+ describe('radioButton.vue', () => {
6
6
  it('renders label slot contents', () => {
7
7
  const wrapper = shallowMount(RadioButton, { slots: { label: 'Test Label' } });
8
8
 
@@ -17,7 +17,7 @@ export default Vue.extend({
17
17
  */
18
18
  val: {
19
19
  required: true,
20
- validator: x => true
20
+ validator: () => true
21
21
  },
22
22
 
23
23
  /**
@@ -25,7 +25,7 @@ export default Vue.extend({
25
25
  */
26
26
  value: {
27
27
  required: true,
28
- validator: x => true
28
+ validator: () => true
29
29
  },
30
30
 
31
31
  /**
@@ -152,7 +152,7 @@ export default Vue.extend({
152
152
  */
153
153
  clickNext(direction: number): void {
154
154
  const opts = this.normalizedOptions;
155
- const selected = opts.find(x => x.value === this.value);
155
+ const selected = opts.find((x) => x.value === this.value);
156
156
  let newIndex = (selected ? opts.indexOf(selected) : -1) + direction;
157
157
 
158
158
  if (newIndex >= opts.length) {
@@ -209,7 +209,7 @@ export default Vue.extend({
209
209
  <slot
210
210
  :listeners="$listeners"
211
211
  :option="option"
212
- :isDisabled="isDisabled"
212
+ :is-disabled="isDisabled"
213
213
  :name="i"
214
214
  >
215
215
  <RadioButton
@@ -155,6 +155,7 @@ export default Vue.extend({
155
155
  <template>
156
156
  <textarea
157
157
  ref="ta"
158
+ data-testid="text-area-auto-grow"
158
159
  :disabled="isDisabled"
159
160
  :style="style"
160
161
  :placeholder="placeholder"
@@ -1,7 +1,7 @@
1
1
  import { shallowMount, Wrapper } from '@vue/test-utils';
2
2
  import { ToggleSwitch } from './index';
3
3
 
4
- describe('ToggleSwitch.vue', () => {
4
+ describe('toggleSwitch.vue', () => {
5
5
  it('renders falsy by default', () => {
6
6
  const wrapper = shallowMount(ToggleSwitch);
7
7
 
@@ -31,13 +31,6 @@ export default Vue.extend({
31
31
  return { state: false as boolean | string | number };
32
32
  },
33
33
 
34
- methods: {
35
- toggle(neu: boolean | string | number) {
36
- this.state = neu === null ? !this.state : neu;
37
- this.$emit('input', this.state ? this.onValue : this.offValue);
38
- }
39
- },
40
-
41
34
  watch: {
42
35
  value: {
43
36
  handler() {
@@ -45,6 +38,13 @@ export default Vue.extend({
45
38
  },
46
39
  immediate: true
47
40
  }
41
+ },
42
+
43
+ methods: {
44
+ toggle(neu: boolean | string | number) {
45
+ this.state = neu === null ? !this.state : neu;
46
+ this.$emit('input', this.state ? this.onValue : this.offValue);
47
+ }
48
48
  }
49
49
  });
50
50
  </script>
@@ -1,18 +1,19 @@
1
+ /* eslint-disable jest/no-hooks */
1
2
  import { mount, Wrapper } from '@vue/test-utils';
2
3
  import { StringList } from './index';
3
4
 
4
- describe('StringList.vue', () => {
5
+ describe('stringList.vue', () => {
5
6
  let wrapper: Wrapper<InstanceType<typeof StringList>>;
6
7
 
7
8
  beforeEach(() => {
8
9
  wrapper = mount(StringList, { propsData: { items: [] } });
9
10
  });
10
11
 
11
- describe('List box', () => {
12
+ describe('list box', () => {
12
13
  it('is empty', () => {
13
14
  const box = wrapper.find('[data-testid="div-string-list-box"]').element as HTMLElement;
14
15
 
15
- expect(box.children.length).toBe(0);
16
+ expect(box.children).toHaveLength(0);
16
17
  });
17
18
 
18
19
  it('show multiple items', async() => {
@@ -22,7 +23,7 @@ describe('StringList.vue', () => {
22
23
 
23
24
  const elements = wrapper.findAll('[data-testid^="div-item"]');
24
25
 
25
- expect(elements.length).toBe(10);
26
+ expect(elements).toHaveLength(10);
26
27
  });
27
28
 
28
29
  it('double click triggers inline edit mode', async() => {
@@ -130,7 +131,7 @@ describe('StringList.vue', () => {
130
131
  });
131
132
  });
132
133
 
133
- describe('Buttons', () => {
134
+ describe('buttons', () => {
134
135
  it('are visible by default', () => {
135
136
  const actionButtons = wrapper.find('[data-testid="div-action-buttons"]');
136
137
 
@@ -144,7 +145,7 @@ describe('StringList.vue', () => {
144
145
  expect(actionButtons.element).toBeUndefined();
145
146
  });
146
147
 
147
- describe('Add button', () => {
148
+ describe('add button', () => {
148
149
  it('is enabled by default', () => {
149
150
  const addButton = wrapper.find('[data-testid="button-add"]')?.element as HTMLButtonElement;
150
151
 
@@ -176,7 +177,7 @@ describe('StringList.vue', () => {
176
177
  });
177
178
  });
178
179
 
179
- describe('Remove button', () => {
180
+ describe('remove button', () => {
180
181
  it('is disabled by default', () => {
181
182
  const removeButton = wrapper.find('[data-testid="button-remove"]');
182
183
  const buttonElem = removeButton.element as HTMLButtonElement;
@@ -279,7 +280,7 @@ describe('StringList.vue', () => {
279
280
  });
280
281
  });
281
282
 
282
- describe('List edit', () => {
283
+ describe('list edit', () => {
283
284
  const validItem = ' item name ';
284
285
  const emptyItem = ' ';
285
286
 
@@ -397,7 +398,7 @@ describe('StringList.vue', () => {
397
398
  });
398
399
  });
399
400
 
400
- describe('Errors handling', () => {
401
+ describe('errors handling', () => {
401
402
  it('show duplicate warning icon when errorMessages is defined', async() => {
402
403
  const items = ['test'];
403
404
 
@@ -30,9 +30,9 @@ const CLASS = {
30
30
  * Manage a list of strings
31
31
  */
32
32
  export default Vue.extend({
33
- components: { LabeledInput },
34
33
 
35
- name: 'StringList',
34
+ name: 'StringList',
35
+ components: { LabeledInput },
36
36
 
37
37
  props: {
38
38
  /**
@@ -100,8 +100,8 @@ export default Vue.extend({
100
100
  */
101
101
  errorMessagesArray(): string[] {
102
102
  return (Object.keys(this.errors) as Error[])
103
- .filter(f => this.errors[f] && this.errorMessages[f])
104
- .map(k => this.errorMessages[k]);
103
+ .filter((f) => this.errors[f] && this.errorMessages[f])
104
+ .map((k) => this.errorMessages[k]);
105
105
  },
106
106
  },
107
107
 
@@ -364,7 +364,7 @@ export default Vue.extend({
364
364
  * Remove an item from items list
365
365
  */
366
366
  deleteItem(item?: string) {
367
- const items = this.items.filter(f => f !== item);
367
+ const items = this.items.filter((f) => f !== item);
368
368
 
369
369
  this.updateItems(items);
370
370
  },
@@ -1,6 +1,6 @@
1
1
  annotations:
2
2
  catalog.cattle.io/certified: rancher # Any application we are adding as a helm chart
3
- catalog.cattle.io/kube-version: '>= 1.16.0-0 < 1.26.0-0'
3
+ catalog.cattle.io/kube-version: '>= 1.16.0-0 < 1.28.0-0'
4
4
  catalog.cattle.io/namespace: cattle-ui-plugin-system # Must prefix with cattle- and suffix with -system=
5
5
  catalog.cattle.io/os: linux
6
6
  catalog.cattle.io/permits-os: linux, windows
@@ -22,10 +22,10 @@ export const state = function() {
22
22
  };
23
23
 
24
24
  export const getters = {
25
- showing: state => state.show,
26
- elem: state => state.elem,
27
- event: state => state.event,
28
- resources: state => state.resources,
25
+ showing: (state) => state.show,
26
+ elem: (state) => state.elem,
27
+ event: (state) => state.event,
28
+ resources: (state) => state.resources,
29
29
 
30
30
  options(state) {
31
31
  let selected = state.resources;
package/store/auth.js CHANGED
@@ -160,7 +160,10 @@ export const actions = {
160
160
  return findBy(authConfigs, 'id', id);
161
161
  },
162
162
 
163
- setNonce({ dispatch }, opt) {
163
+ /**
164
+ * Create the basic json object used for the nonce (this includes the random nonce/state)
165
+ */
166
+ createNonce(ctx, opt) {
164
167
  const out = { nonce: randomStr(16), to: 'vue' };
165
168
 
166
169
  if ( opt.test ) {
@@ -171,7 +174,15 @@ export const actions = {
171
174
  out.provider = opt.provider;
172
175
  }
173
176
 
174
- const strung = JSON.stringify(out);
177
+ return out;
178
+ },
179
+
180
+ /**
181
+ * Save nonce details. Information it contains will be used to validate auth requests/responses
182
+ * Note - this may be structurally different than the nonce we encode and send
183
+ */
184
+ saveNonce(ctx, opt) {
185
+ const strung = JSON.stringify(opt);
175
186
 
176
187
  this.$cookies.set(KEY, strung, {
177
188
  path: '/',
@@ -182,6 +193,15 @@ export const actions = {
182
193
  return strung;
183
194
  },
184
195
 
196
+ /**
197
+ * Convert the nonce into something we can send
198
+ */
199
+ encodeNonce(ctx, nonce) {
200
+ const stringify = JSON.stringify(nonce);
201
+
202
+ return base64Encode(stringify, 'url');
203
+ },
204
+
185
205
  async redirectTo({ state, commit, dispatch }, opt = {}) {
186
206
  const provider = opt.provider;
187
207
  let redirectUrl = opt.redirectUrl;
@@ -200,10 +220,16 @@ export const actions = {
200
220
  returnToUrl = `${ window.location.origin }/verify-auth-azure`;
201
221
  }
202
222
 
203
- const nonce = await dispatch('setNonce', opt);
223
+ // The base nonce that will be sent server way
224
+ const baseNonce = opt.nonce || await dispatch('createNonce', opt);
225
+
226
+ // Save a possibly expanded nonce
227
+ await dispatch('saveNonce', opt.persistNonce || baseNonce);
228
+ // Convert the base nonce in to something we can transmit
229
+ const encodedNonce = await dispatch('encodeNonce', baseNonce);
204
230
 
205
231
  const fromQuery = unescape(parseUrl(redirectUrl).query?.[GITHUB_SCOPE] || '');
206
- const scopes = fromQuery.split(/[, ]+/).filter(x => !!x);
232
+ const scopes = fromQuery.split(/[, ]+/).filter((x) => !!x);
207
233
 
208
234
  if (BASE_SCOPES[provider]) {
209
235
  addObjects(scopes, BASE_SCOPES[provider]);
@@ -216,8 +242,8 @@ export const actions = {
216
242
  let url = removeParam(redirectUrl, GITHUB_SCOPE);
217
243
 
218
244
  const params = {
219
- [GITHUB_SCOPE]: scopes.join(','),
220
- [GITHUB_NONCE]: base64Encode(nonce, 'url')
245
+ [GITHUB_SCOPE]: scopes.join(opt.scopesJoinChar || ','), // Some providers won't accept comma separated scopes
246
+ [GITHUB_NONCE]: encodedNonce
221
247
  };
222
248
 
223
249
  if (!url.includes(GITHUB_REDIRECT)) {
@@ -249,9 +275,16 @@ export const actions = {
249
275
  return ERR_NONCE;
250
276
  }
251
277
 
278
+ const body = { code };
279
+
280
+ // If the request came with a pkce code ensure we also sent that in the verify
281
+ if (parsed.pkceCodeVerifier) {
282
+ body.code_verifier = parsed.pkceCodeVerifier;
283
+ }
284
+
252
285
  return dispatch('login', {
253
286
  provider,
254
- body: { code }
287
+ body
255
288
  });
256
289
  },
257
290
 
package/store/aws.js CHANGED
@@ -190,7 +190,7 @@ export const actions = {
190
190
  const res = await client[cmd](opt);
191
191
 
192
192
  if ( !key ) {
193
- key = Object.keys(res).find(x => isArray(res[x]));
193
+ key = Object.keys(res).find((x) => isArray(res[x]));
194
194
  }
195
195
 
196
196
  addObjects(out, res[key]);