@harnessio/backstage-plugin-harness-iacm 0.1.0-beta

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.
package/README.md ADDED
@@ -0,0 +1,122 @@
1
+ # harness-iacm
2
+
3
+ # Harness IACM plugin
4
+
5
+ Website: [https://harness.io/](https://harness.io/)
6
+
7
+ Welcome to the Harness IACM plugin for Backstage!
8
+
9
+ ## Screenshots
10
+ <img src="./src/assets/harness-iacm-backstage-plugin-screenshot.png">
11
+
12
+
13
+
14
+ ## Getting started
15
+
16
+ ## Setup steps
17
+
18
+ 1. Open terminal and navigate to the _root of your Backstage app_. Then run
19
+
20
+ ```
21
+ yarn add --cwd packages/app @harnessio/backstage-plugin-iacm
22
+
23
+ yarn install
24
+ ```
25
+
26
+ If you are looking to get started with Backstage, check out [backstage.io/docs](https://backstage.io/docs/getting-started/).
27
+
28
+ For testing purposes, you can also clone this repository to try out the plugin. It contains an example Backstage app setup which is pre-installed with Harness plugins. However, you must create a new Backstage app if you are looking to get started with Backstage.
29
+
30
+ 2. Configure proxy for harness in your `app-config.yaml` under the `proxy` config. Add your Harness Personal Access Token or Service Account Token for `x-api-key`. See the [Harness docs](https://docs.harness.io/article/tdoad7xrh9-add-and-manage-api-keys) for generating an API Key.
31
+
32
+ ```yaml
33
+ # In app-config.yaml
34
+
35
+ proxy:
36
+ # ... existing proxy settings
37
+ '/harness/prod':
38
+ target: 'https://app.harness.io/'
39
+ headers:
40
+ 'x-api-key': '<YOUR PAT/SAT>'
41
+ # ...
42
+ ```
43
+
44
+ Notes:
45
+
46
+ - Plugin uses token configured here to make Harness API calls. Make sure the user creating this API token has necessary permissions, which include `project view` permission along with `pipeline view` and `execute` permissions and same applies for service accounts as well it must have a role assigned that has the roles with adequate permissions as described before.
47
+
48
+ - Set the value of target to your on-prem URL if you are using the Harness on-prem offering
49
+
50
+ 3. Inside your Backstage's `EntityPage.tsx`, update the `cicdContent` component to render `<EntityHarnessCiCdContent />` whenever the service is using Harness CI/CD. Something like this -
51
+
52
+ ```tsx
53
+ // In packages/app/src/components/catalog/EntityPage.tsx
54
+
55
+ import {
56
+ isHarnessIacmAvailable,
57
+ EntityIacmContent,
58
+ } from '@harnessio/backstage-plugin-iacm';
59
+
60
+ const iacmContent = (
61
+ // ...
62
+ <EntitySwitch.Case if={isHarnessIacmAvailable}>
63
+ <EntityHarnessIacmContent />
64
+ </EntitySwitch.Case>
65
+ // ...
66
+ );
67
+ ```
68
+
69
+ Note: If you have separate providers for CI and CD apart from Harness, you need to add a new tab for Harness CI/CD plugin like below instead of replacing your existing CI/CD tab mentioned above.
70
+
71
+ <details>
72
+ <summary>Instructions in case of separate CI and CD provider (Click to expand)</summary>
73
+
74
+ ```tsx
75
+ // In packages/app/src/components/catalog/EntityPage.tsx
76
+
77
+ import {
78
+ isHarnessIacmAvailable,
79
+ EntityIacmContent,
80
+ } from '@harnessio/backstage-plugin-iacm';
81
+
82
+
83
+ const serviceEntityPage = (
84
+ // ...
85
+ <EntityLayout.Route
86
+ path="/harness-iacm"
87
+ title="Harness IACM"
88
+ if={isHarnessIacmAvailable}
89
+ >
90
+ <EntityIacmContent />
91
+ </EntityLayout.Route>
92
+ // ...
93
+ );
94
+ ```
95
+
96
+ </details>
97
+
98
+ 4. Add required harness specific annotations to your software component's respective `catalog-info.yaml` file.
99
+
100
+ Here is an example: [catalog-info-new.yaml](../../examples/catalog-harness-iacm.yaml)
101
+ ```yaml
102
+ apiVersion: backstage.io/v1alpha1
103
+ kind: Component
104
+ metadata:
105
+ # ...
106
+ annotations:
107
+ # annotation
108
+ harness.io/workspace-url: |
109
+ labelA: <harness_pipeline_url>
110
+ labelB: <harness_pipeline_url>
111
+ # here labelA / labelB denotes the value you will see in dropdown in workspace list.
112
+
113
+ ```
114
+
115
+
116
+
117
+ ## Features
118
+
119
+ - Connect a Backstage service with a Harness workspace and view workspace resources.
120
+ - Navigate directly to specific pipeline from backstage
121
+
122
+
@@ -0,0 +1,17 @@
1
+ /// <reference types="react" />
2
+ import * as React from 'react';
3
+ import React__default from 'react';
4
+ import { Entity } from '@backstage/catalog-model';
5
+ import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
6
+
7
+ /** @public */
8
+ declare const isHarnessIacmAvailable: (entity: Entity) => boolean;
9
+ /** @public */
10
+ declare const Router: () => React__default.JSX.Element;
11
+
12
+ declare const harnessIacmPlugin: _backstage_core_plugin_api.BackstagePlugin<{
13
+ root: _backstage_core_plugin_api.RouteRef<undefined>;
14
+ }, {}, {}>;
15
+ declare const EntityIacmContent: () => React.JSX.Element;
16
+
17
+ export { EntityIacmContent, Router, harnessIacmPlugin, isHarnessIacmAvailable };
@@ -0,0 +1,603 @@
1
+ import React, { useState } from 'react';
2
+ import { Routes, Route } from 'react-router';
3
+ import { CircularProgress, Link, Typography, makeStyles, FormControl, InputLabel, Select, ListSubheader, MenuItem, FormHelperText } from '@material-ui/core';
4
+ import { Grid } from '@mui/material';
5
+ import { useApi, discoveryApiRef, createRouteRef, createPlugin, createRoutableExtension } from '@backstage/core-plugin-api';
6
+ import useAsyncRetry from 'react-use/lib/useAsyncRetry';
7
+ import { useEntity } from '@backstage/plugin-catalog-react';
8
+ import { match } from 'path-to-regexp';
9
+ import { Table, MissingAnnotationEmptyState } from '@backstage/core-components';
10
+ import RetryIcon from '@material-ui/icons/Replay';
11
+
12
+ var AsyncStatus = /* @__PURE__ */ ((AsyncStatus2) => {
13
+ AsyncStatus2[AsyncStatus2["Init"] = 0] = "Init";
14
+ AsyncStatus2[AsyncStatus2["Loading"] = 1] = "Loading";
15
+ AsyncStatus2[AsyncStatus2["Success"] = 2] = "Success";
16
+ AsyncStatus2[AsyncStatus2["Error"] = 3] = "Error";
17
+ AsyncStatus2[AsyncStatus2["Unauthorized"] = 4] = "Unauthorized";
18
+ return AsyncStatus2;
19
+ })(AsyncStatus || {});
20
+
21
+ function getSecureHarnessKey(key) {
22
+ try {
23
+ const token = JSON.parse(decodeURI(atob(localStorage.getItem(key) || "")));
24
+ return token ? `Bearer ${token}` : "";
25
+ } catch (_) {
26
+ console.log("Failed to read Harness tokens");
27
+ return void 0;
28
+ }
29
+ }
30
+
31
+ const useGetResources = ({
32
+ backendBaseUrl,
33
+ accountId,
34
+ orgId,
35
+ projectId,
36
+ refresh,
37
+ envFromUrl,
38
+ workspace
39
+ }) => {
40
+ const [resources, setResources] = useState(null);
41
+ const [status, setStatus] = useState(AsyncStatus.Init);
42
+ useAsyncRetry(async () => {
43
+ setStatus(AsyncStatus.Loading);
44
+ const token = getSecureHarnessKey("token");
45
+ const headers = new Headers({
46
+ "content-type": "application/json",
47
+ Authorization: token ? `${token}` : ""
48
+ });
49
+ if (!workspace) {
50
+ return;
51
+ }
52
+ const resp = await fetch(
53
+ `${await backendBaseUrl}/harness/${envFromUrl}/gateway/iacm/api/orgs/${orgId}/projects/${projectId}/workspaces/${workspace}/resources`,
54
+ {
55
+ headers
56
+ }
57
+ );
58
+ if (resp.status === 200) {
59
+ const data = await resp.json();
60
+ const dataWithId = {
61
+ ...data,
62
+ resources: data.resources.map(
63
+ (resource, index) => ({
64
+ ...resource,
65
+ id: (/* @__PURE__ */ new Date()).getTime().toString() + index.toString()
66
+ })
67
+ )
68
+ };
69
+ setResources(dataWithId);
70
+ setStatus(AsyncStatus.Success);
71
+ } else if (resp.status === 401) {
72
+ setStatus(AsyncStatus.Unauthorized);
73
+ } else {
74
+ setStatus(AsyncStatus.Error);
75
+ }
76
+ }, [accountId, orgId, projectId, refresh, envFromUrl, workspace]);
77
+ return { resources, status };
78
+ };
79
+
80
+ function convertStringToObject(inputString) {
81
+ if (!inputString)
82
+ return {};
83
+ const object = {};
84
+ const lines = inputString.split("\n");
85
+ for (const line of lines) {
86
+ if (line === "")
87
+ continue;
88
+ const [label, ...rest] = line.split(":");
89
+ const trimmedLabel = label.trim();
90
+ object[trimmedLabel] = rest.join(":").trim();
91
+ }
92
+ return object;
93
+ }
94
+ const useProjectUrlSlugEntity = () => {
95
+ var _a, _b;
96
+ const { entity } = useEntity();
97
+ const isWorkspaceAnnotationPresent = Boolean(
98
+ (_a = entity.metadata.annotations) == null ? void 0 : _a["harness.io/workspace-url"]
99
+ );
100
+ const harnessWorkspaceUrlObject = convertStringToObject(
101
+ (_b = entity.metadata.annotations) == null ? void 0 : _b["harness.io/workspace-url"]
102
+ );
103
+ return {
104
+ isWorkspaceAnnotationPresent,
105
+ harnessWorkspaceUrlObject
106
+ };
107
+ };
108
+
109
+ const useResourceSlugFromEntity = (isNewAnnotationPresent, selectedWorkspace) => {
110
+ const cleanedString = selectedWorkspace == null ? void 0 : selectedWorkspace.split(" ")[0];
111
+ let accountId;
112
+ let orgId;
113
+ let projectId;
114
+ let workspaceId;
115
+ const urlMatch = match(
116
+ "(.*)/account/:accountId/module/:module/orgs/:orgId/projects/:projectId/workspaces/:workspaceId/resources/(.*)?",
117
+ {
118
+ decode: decodeURIComponent
119
+ }
120
+ );
121
+ if (isNewAnnotationPresent && cleanedString) {
122
+ const hostname = new URL(cleanedString).hostname;
123
+ const envAB = hostname.split(".")[0];
124
+ const envFromUrl = envAB === "app" ? "prod" : envAB;
125
+ const urlParams = urlMatch(cleanedString != null ? cleanedString : "");
126
+ if (urlParams) {
127
+ accountId = urlParams.params.accountId;
128
+ orgId = urlParams.params.orgId;
129
+ projectId = urlParams.params.projectId;
130
+ workspaceId = urlParams.params.workspaceId;
131
+ }
132
+ return {
133
+ projectId,
134
+ workspaceId,
135
+ orgId,
136
+ accountId,
137
+ urlParams,
138
+ envFromUrl,
139
+ cleanedString
140
+ };
141
+ }
142
+ return {};
143
+ };
144
+
145
+ const Aws = () => /* @__PURE__ */ React.createElement(
146
+ "svg",
147
+ {
148
+ width: "25",
149
+ height: "24",
150
+ viewBox: "0 0 25 24",
151
+ fill: "none",
152
+ xmlns: "http://www.w3.org/2000/svg",
153
+ xmlnsXlink: "http://www.w3.org/1999/xlink"
154
+ },
155
+ /* @__PURE__ */ React.createElement(
156
+ "rect",
157
+ {
158
+ x: "0.950195",
159
+ y: "0.75",
160
+ width: "22.5",
161
+ height: "22.5",
162
+ fill: "url(#pattern0_5950_37598)"
163
+ }
164
+ ),
165
+ /* @__PURE__ */ React.createElement("defs", null, /* @__PURE__ */ React.createElement(
166
+ "pattern",
167
+ {
168
+ id: "pattern0_5950_37598",
169
+ patternContentUnits: "objectBoundingBox",
170
+ width: "1",
171
+ height: "1"
172
+ },
173
+ /* @__PURE__ */ React.createElement("use", { xlinkHref: "#image0_5950_37598", transform: "scale(0.00390625)" })
174
+ ), /* @__PURE__ */ React.createElement(
175
+ "image",
176
+ {
177
+ id: "image0_5950_37598",
178
+ width: "256",
179
+ height: "256",
180
+ xlinkHref: "data:image/png;base64,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"
181
+ }
182
+ ))
183
+ );
184
+
185
+ const Azure = () => /* @__PURE__ */ React.createElement(
186
+ "svg",
187
+ {
188
+ width: "24",
189
+ height: "24",
190
+ viewBox: "0 0 24 24",
191
+ fill: "none",
192
+ xmlns: "http://www.w3.org/2000/svg"
193
+ },
194
+ /* @__PURE__ */ React.createElement("g", { clipPath: "url(#clip0_3567_2033)" }, /* @__PURE__ */ React.createElement(
195
+ "path",
196
+ {
197
+ d: "M13.1126 2.42495L6.03748 8.56041L-2.28882e-05 19.3973H5.44367L13.1126 2.42495ZM14.0538 3.86047L11.0343 12.3711L16.8239 19.6452L5.59212 21.5751H24L14.0538 3.86047Z",
198
+ fill: "#0072C6"
199
+ }
200
+ )),
201
+ /* @__PURE__ */ React.createElement("defs", null, /* @__PURE__ */ React.createElement("clipPath", { id: "clip0_3567_2033" }, /* @__PURE__ */ React.createElement(
202
+ "rect",
203
+ {
204
+ width: "24",
205
+ height: "19.152",
206
+ fill: "white",
207
+ transform: "translate(0 2.424)"
208
+ }
209
+ )))
210
+ );
211
+
212
+ const Gcp = () => /* @__PURE__ */ React.createElement(
213
+ "svg",
214
+ {
215
+ width: "24",
216
+ height: "24",
217
+ viewBox: "0 0 24 24",
218
+ fill: "none",
219
+ xmlns: "http://www.w3.org/2000/svg"
220
+ },
221
+ /* @__PURE__ */ React.createElement("g", { clipPath: "url(#clip0_3567_2036)" }, /* @__PURE__ */ React.createElement(
222
+ "path",
223
+ {
224
+ d: "M15.2288 7.66161H15.9611L18.0476 5.57518L18.1502 4.6899C14.2681 1.26349 8.34173 1.63269 4.91531 5.51482C3.96263 6.59324 3.27151 7.87589 2.89527 9.26416C3.12766 9.16859 3.38519 9.1535 3.62764 9.21989L7.7995 8.5318C7.7995 8.5318 8.01177 8.1807 8.12142 8.20283C9.97748 6.16469 13.1011 5.92728 15.2439 7.66161H15.2288Z",
225
+ fill: "#EA4335"
226
+ }
227
+ ), /* @__PURE__ */ React.createElement(
228
+ "path",
229
+ {
230
+ d: "M21.0192 9.26417C20.5393 7.49865 19.5555 5.9112 18.1863 4.69696L15.2589 7.6244C16.4953 8.63442 17.1994 10.1565 17.1693 11.753V12.2731C18.6088 12.2731 19.7748 13.4401 19.7748 14.8786C19.7748 16.3182 18.6078 17.4842 17.1693 17.4842H11.9573L11.4372 18.0113V21.1369L11.9573 21.657H17.1693C20.157 21.6802 22.8078 19.7436 23.6951 16.8906C24.5804 14.0366 23.4939 10.9381 21.0192 9.26417Z",
231
+ fill: "#4285F4"
232
+ }
233
+ ), /* @__PURE__ */ React.createElement(
234
+ "path",
235
+ {
236
+ d: "M6.73817 21.6277H11.9502V17.4558H6.73817C6.36696 17.4558 5.99978 17.3764 5.66176 17.2214L4.9294 17.4478L2.8289 19.5342L2.64581 20.2666C3.82382 21.1559 5.26138 21.6337 6.73817 21.6277Z",
237
+ fill: "#34A853"
238
+ }
239
+ ), /* @__PURE__ */ React.createElement(
240
+ "path",
241
+ {
242
+ d: "M6.73817 8.09318C3.84292 8.11028 1.27864 9.96433 0.355138 12.7077C-0.568365 15.451 0.35212 18.4791 2.64679 20.2436L5.6698 17.2206C4.35799 16.628 3.77552 15.0848 4.36805 13.773C4.96058 12.4612 6.50377 11.8787 7.81559 12.4713C8.39303 12.7328 8.85579 13.1956 9.11735 13.773L12.1404 10.75C10.8537 9.06899 8.85478 8.08614 6.73817 8.09318Z",
243
+ fill: "#FBBC05"
244
+ }
245
+ )),
246
+ /* @__PURE__ */ React.createElement("defs", null, /* @__PURE__ */ React.createElement("clipPath", { id: "clip0_3567_2036" }, /* @__PURE__ */ React.createElement(
247
+ "rect",
248
+ {
249
+ width: "24",
250
+ height: "19.3141",
251
+ fill: "white",
252
+ transform: "translate(0 2.34296)"
253
+ }
254
+ )))
255
+ );
256
+
257
+ const Kubernetes = () => /* @__PURE__ */ React.createElement(
258
+ "svg",
259
+ {
260
+ width: "24",
261
+ height: "24",
262
+ viewBox: "0 0 24 24",
263
+ fill: "none",
264
+ xmlns: "http://www.w3.org/2000/svg"
265
+ },
266
+ /* @__PURE__ */ React.createElement(
267
+ "path",
268
+ {
269
+ d: "M14.0048 13.5277C13.9755 13.5218 13.9456 13.5196 13.9157 13.5209C13.864 13.5236 13.8135 13.5367 13.767 13.5595C13.6769 13.603 13.607 13.6796 13.572 13.7734C13.537 13.8671 13.5395 13.9708 13.579 14.0627L13.5763 14.0666L14.4658 16.2155C15.3168 15.6725 15.9625 14.8613 16.301 13.9102L14.0088 13.5229L14.0048 13.5277ZM10.4383 13.8322C10.4191 13.7475 10.3719 13.6717 10.3044 13.617C10.2369 13.5623 10.1531 13.5318 10.0662 13.5304C10.0405 13.5301 10.0149 13.5323 9.98973 13.5372L9.98587 13.5325L7.71364 13.9182C8.05486 14.8618 8.69793 15.6664 9.5431 16.2072L10.4236 14.0794L10.4167 14.0711C10.4492 13.9958 10.4568 13.9121 10.4383 13.8322ZM12.3413 14.6666C12.3081 14.6048 12.2588 14.5531 12.1985 14.5171C12.1382 14.4811 12.0693 14.4621 11.9991 14.4622C11.9289 14.4622 11.86 14.4814 11.7999 14.5176C11.7397 14.5537 11.6905 14.6055 11.6574 14.6675H11.6555L10.5381 16.688C11.3382 16.9604 12.1983 17.0047 13.0221 16.8158C13.1749 16.781 13.3241 16.7393 13.4698 16.6906L12.3498 14.6665L12.3413 14.6666ZM15.8786 9.97303L14.1594 11.5118L14.1604 11.5167C14.1075 11.5629 14.0682 11.6225 14.0465 11.6892C14.0249 11.756 14.0217 11.8273 14.0373 11.8957C14.0529 11.9641 14.0868 12.027 14.1352 12.0777C14.1837 12.1284 14.245 12.165 14.3126 12.1837L14.3147 12.193L16.5416 12.8345C16.6378 11.834 16.4051 10.8294 15.8786 9.97324V9.97303ZM12.6846 10.1454C12.6878 10.2155 12.71 10.2834 12.7487 10.3419C12.7874 10.4004 12.8412 10.4474 12.9045 10.4778C12.9677 10.5081 13.038 10.5208 13.1079 10.5145C13.1778 10.5081 13.2446 10.4829 13.3013 10.4417L13.3081 10.4445L15.1893 9.11066C14.4732 8.40928 13.5465 7.96257 12.5518 7.83922L12.6825 10.1448L12.6846 10.1454ZM10.6924 10.4501C10.7492 10.4914 10.816 10.5165 10.8859 10.5227C10.9558 10.529 11.0261 10.5162 11.0892 10.4857C11.1524 10.4552 11.2061 10.4081 11.2447 10.3495C11.2833 10.2909 11.3052 10.2229 11.3082 10.1529L11.3178 10.1484L11.4485 7.83911C11.2907 7.85807 11.134 7.88508 10.979 7.92005C10.1544 8.1054 9.39803 8.51757 8.79526 9.11004L10.6888 10.4523L10.6924 10.4501ZM9.68297 12.195C9.75075 12.1765 9.81224 12.14 9.86087 12.0893C9.9095 12.0386 9.94346 11.9756 9.95911 11.9071C9.97477 11.8386 9.97153 11.7672 9.94976 11.7004C9.92798 11.6336 9.88848 11.574 9.83546 11.5279L9.83734 11.5187L8.10863 9.97251C7.58125 10.8309 7.35489 11.8405 7.4653 12.8419L9.6812 12.2025L9.68297 12.195ZM11.362 12.8742L11.9997 13.1809L12.6356 12.8748L12.7935 12.1884L12.3534 11.6381H11.6452L11.2039 12.1876L11.362 12.8742Z",
270
+ fill: "#326CE5"
271
+ }
272
+ ),
273
+ /* @__PURE__ */ React.createElement(
274
+ "path",
275
+ {
276
+ d: "M22.542 14.2267L20.7249 6.33357C20.676 6.12937 20.5824 5.93856 20.4509 5.77492C20.3193 5.61127 20.1531 5.47885 19.9642 5.38723L12.6087 1.87537C12.418 1.7844 12.2095 1.73718 11.9982 1.73718C11.787 1.73718 11.5784 1.7844 11.3878 1.87537L4.03375 5.38911C3.84478 5.48067 3.67851 5.61305 3.54693 5.77669C3.41534 5.94032 3.32173 6.13113 3.27286 6.33534L1.45862 14.2282C1.41388 14.4277 1.41373 14.6347 1.45821 14.8342C1.4713 14.895 1.48841 14.9549 1.50942 15.0134C1.54492 15.1133 1.59193 15.2087 1.6495 15.2977C1.67442 15.3358 1.70071 15.3728 1.72929 15.4087L6.81967 21.7376C6.84188 21.7651 6.86639 21.7903 6.8907 21.8158C6.97057 21.9009 7.06076 21.9756 7.15917 22.0383C7.28364 22.1166 7.41928 22.1756 7.56147 22.2132C7.67806 22.2452 7.79833 22.2618 7.91922 22.2625H7.99839L16.0822 22.2607C16.1314 22.2604 16.1805 22.2576 16.2293 22.252C16.2994 22.2441 16.3687 22.2309 16.4368 22.2126C16.4856 22.1997 16.5336 22.1843 16.5808 22.1665C16.6176 22.1524 16.6543 22.1383 16.6898 22.1213C16.7429 22.0959 16.7944 22.0673 16.8441 22.0356C16.9722 21.955 17.0862 21.8541 17.1817 21.7367L17.3369 21.5438L22.2703 15.4066C22.3649 15.2881 22.4392 15.1547 22.4902 15.0118C22.5115 14.9531 22.5289 14.893 22.5423 14.832C22.5869 14.6325 22.5869 14.4262 22.542 14.2267ZM14.9126 17.2965C14.9333 17.3572 14.9577 17.4165 14.9859 17.4741C14.9409 17.5529 14.9287 17.6461 14.9518 17.7338C15.0589 17.9789 15.1896 18.213 15.3421 18.4327C15.4275 18.545 15.5063 18.6621 15.5782 18.7835C15.5959 18.8164 15.619 18.8673 15.6358 18.902C15.6675 18.955 15.6878 19.014 15.6953 19.0752C15.7028 19.1365 15.6974 19.1986 15.6795 19.2577C15.6615 19.3167 15.6314 19.3713 15.5911 19.4181C15.5508 19.4648 15.5011 19.5025 15.4453 19.5289C15.3896 19.5553 15.3289 19.5697 15.2672 19.5712C15.2055 19.5727 15.1442 19.5613 15.0871 19.5377C15.0301 19.5141 14.9787 19.4788 14.9361 19.4341C14.8936 19.3894 14.8608 19.3363 14.84 19.2782C14.8232 19.2438 14.7998 19.1979 14.7856 19.1654C14.7353 19.0335 14.6926 18.8988 14.6578 18.7619C14.5815 18.5059 14.4803 18.258 14.3557 18.0217C14.3015 17.9486 14.2209 17.8997 14.1311 17.8854C14.117 17.8611 14.0648 17.7654 14.0369 17.7161C12.7275 18.212 11.2813 18.2083 9.9745 17.7057L9.87489 17.8861C9.80378 17.8972 9.73766 17.9294 9.68517 17.9786C9.53506 18.225 9.42032 18.4912 9.34431 18.7694C9.30982 18.9063 9.2674 19.041 9.21727 19.1729C9.20319 19.2052 9.17961 19.2505 9.16282 19.2848L9.16209 19.2866C9.14132 19.3448 9.10858 19.3979 9.06599 19.4427C9.02339 19.4874 8.9719 19.5227 8.91482 19.5464C8.85773 19.57 8.79634 19.5814 8.73458 19.5798C8.67283 19.5782 8.61208 19.5638 8.55627 19.5373C8.50047 19.5108 8.45083 19.4729 8.41056 19.426C8.3703 19.3792 8.3403 19.3244 8.32251 19.2653C8.30471 19.2061 8.29951 19.1439 8.30725 19.0826C8.31498 19.0213 8.33548 18.9623 8.36741 18.9094C8.38399 18.8745 8.40621 18.8239 8.42373 18.791C8.49554 18.6693 8.57431 18.5519 8.65967 18.4392C8.81497 18.2137 8.94839 17.9739 9.0581 17.7231C9.06977 17.638 9.05613 17.5515 9.01888 17.4741L9.09899 17.2822C7.89419 16.5711 6.99125 15.4438 6.56047 14.1128L6.36866 14.1454C6.29424 14.0926 6.20651 14.0617 6.11542 14.0562C5.85295 14.1065 5.59599 14.1821 5.34817 14.282C5.21948 14.3399 5.0876 14.3904 4.95317 14.4333C4.92136 14.442 4.87547 14.4508 4.83917 14.4587C4.83625 14.4598 4.83375 14.461 4.83083 14.4618C4.82858 14.4621 4.82632 14.4623 4.82405 14.4624C4.76562 14.4816 4.70382 14.4884 4.64261 14.4824C4.5814 14.4763 4.52212 14.4576 4.46858 14.4273C4.41503 14.397 4.3684 14.3559 4.33166 14.3066C4.29492 14.2573 4.26888 14.2008 4.25521 14.1408C4.24155 14.0809 4.24055 14.0187 4.2523 13.9583C4.26404 13.898 4.28826 13.8407 4.32341 13.7902C4.35855 13.7397 4.40385 13.6972 4.4564 13.6652C4.50895 13.6332 4.5676 13.6126 4.62858 13.6046L4.63495 13.603L4.63881 13.602C4.67562 13.5933 4.72277 13.5811 4.75635 13.5747C4.89639 13.5552 5.03743 13.5439 5.17878 13.5407C5.44535 13.5232 5.70958 13.4798 5.96772 13.4111C6.04423 13.3624 6.10887 13.2972 6.15693 13.2202L6.34123 13.1664C6.14124 11.7773 6.46114 10.3631 7.23959 9.19532L7.09847 9.06953C7.09332 8.97823 7.06268 8.8902 7.01002 8.81545C6.80728 8.64117 6.588 8.48712 6.35531 8.35547C6.22967 8.2914 6.10781 8.22015 5.99036 8.14207C5.96366 8.12215 5.92819 8.09221 5.8992 8.06864L5.89263 8.06405C5.7925 7.99213 5.72491 7.8835 5.70462 7.7619C5.68433 7.6403 5.713 7.51561 5.78436 7.41508C5.82652 7.36347 5.88025 7.32252 5.9412 7.29556C6.00214 7.26859 6.06858 7.25637 6.13513 7.25988C6.24716 7.26469 6.3547 7.30526 6.44199 7.37566C6.47192 7.39912 6.51291 7.43052 6.53951 7.45336C6.64198 7.55028 6.7388 7.65301 6.82947 7.76105C7.00938 7.95871 7.20815 8.13834 7.42295 8.29738C7.50344 8.3397 7.59732 8.3488 7.68444 8.32272C7.73687 8.36097 7.78978 8.39858 7.84319 8.43558C8.61672 7.61334 9.61838 7.04108 10.7195 6.79229C10.9816 6.73294 11.2476 6.69206 11.5154 6.66995L11.5258 6.48387C11.5942 6.42311 11.6437 6.34407 11.6687 6.25607C11.6783 5.989 11.6619 5.72163 11.6197 5.45774C11.5917 5.31945 11.5716 5.17966 11.5596 5.03907C11.5584 5.00705 11.5602 4.96283 11.5606 4.92632C11.5606 4.92215 11.5596 4.91798 11.5596 4.91401C11.5533 4.85247 11.5601 4.79031 11.5793 4.73153C11.5986 4.67275 11.63 4.61866 11.6714 4.57276C11.7129 4.52685 11.7635 4.49015 11.82 4.46502C11.8765 4.43989 11.9377 4.42689 11.9996 4.42686C12.0614 4.42683 12.1226 4.43977 12.1791 4.46485C12.2357 4.48993 12.2863 4.52658 12.3278 4.57245C12.3694 4.61831 12.4008 4.67237 12.4201 4.73113C12.4394 4.78989 12.4462 4.85205 12.44 4.9136C12.44 4.95219 12.4423 5.0033 12.4409 5.03876C12.4289 5.17933 12.4087 5.31908 12.3806 5.45732C12.3381 5.72126 12.3214 5.9887 12.3307 6.25586C12.3481 6.34518 12.3997 6.42415 12.4745 6.47594C12.4761 6.50775 12.4813 6.61393 12.4852 6.67245C13.8768 6.79901 15.1751 7.42636 16.1391 8.43798L16.3066 8.31834C16.3966 8.33378 16.4891 8.32373 16.5736 8.28935C16.7884 8.13003 16.9872 7.9502 17.1671 7.7524C17.258 7.6443 17.355 7.54156 17.4578 7.4447C17.4848 7.42155 17.5256 7.39047 17.5554 7.36689C17.5996 7.32334 17.6524 7.28956 17.7105 7.26775C17.7686 7.24594 17.8306 7.23659 17.8925 7.24029C17.9544 7.244 18.0149 7.26069 18.0699 7.28927C18.125 7.31785 18.1734 7.3577 18.2121 7.40621C18.2507 7.45472 18.2788 7.51082 18.2943 7.57087C18.3099 7.63092 18.3127 7.69357 18.3025 7.75475C18.2923 7.81594 18.2693 7.8743 18.2351 7.92604C18.2009 7.97778 18.1562 8.02175 18.1038 8.05508C18.0743 8.07897 18.0353 8.11224 18.0069 8.13331C17.8892 8.21144 17.7671 8.2827 17.6412 8.34671C17.4085 8.47843 17.1892 8.63248 16.9864 8.80669C16.9274 8.87581 16.8978 8.96528 16.9038 9.05597C16.8793 9.0785 16.7933 9.15474 16.7477 9.19605C17.5283 10.3597 17.8547 11.7694 17.6647 13.1578L17.8425 13.2095C17.8869 13.2894 17.9526 13.3555 18.0323 13.4004C18.2906 13.4692 18.5549 13.5127 18.8216 13.5303C18.9628 13.5336 19.1037 13.5449 19.2437 13.5641C19.2807 13.5709 19.3342 13.5857 19.3719 13.5944C19.4329 13.6024 19.4916 13.6231 19.5441 13.655C19.5967 13.687 19.6419 13.7296 19.6771 13.7801C19.7122 13.8306 19.7364 13.8879 19.7481 13.9483C19.7598 14.0087 19.7588 14.0708 19.7451 14.1308C19.7314 14.1908 19.7053 14.2472 19.6686 14.2965C19.6318 14.3458 19.5851 14.3869 19.5316 14.4172C19.478 14.4474 19.4187 14.4661 19.3575 14.4721C19.2963 14.4782 19.2345 14.4713 19.1761 14.4521L19.1697 14.4512C19.1668 14.4505 19.1641 14.4489 19.161 14.4481C19.1248 14.4403 19.0792 14.4323 19.0474 14.424C18.9129 14.3808 18.7811 14.3299 18.6526 14.2715C18.4045 14.1715 18.1473 14.0958 17.8846 14.0457C17.7937 14.0428 17.7052 14.0757 17.6382 14.1372C17.5756 14.1253 17.5129 14.1143 17.4501 14.1042C17.0244 15.4435 16.1214 16.5797 14.9126 17.2965Z",
277
+ fill: "#326CE5"
278
+ }
279
+ ),
280
+ /* @__PURE__ */ React.createElement(
281
+ "path",
282
+ {
283
+ d: "M23.5015 14.429L21.519 5.81776C21.4657 5.59493 21.3636 5.38672 21.2201 5.20815C21.0765 5.02958 20.8951 4.88511 20.689 4.78516L12.6644 0.954133C12.4564 0.854864 12.2289 0.803345 11.9984 0.803345C11.768 0.803345 11.5404 0.854864 11.3324 0.954133L3.30862 4.78746C3.10246 4.88731 2.92104 5.03169 2.77744 5.21017C2.63385 5.38864 2.53167 5.59677 2.47827 5.81953L0.49923 14.4313C0.45459 14.6298 0.45 14.8352 0.48573 15.0355C0.52146 15.2359 0.596791 15.427 0.707314 15.5979C0.734537 15.6396 0.763428 15.6801 0.794719 15.7191L6.34841 22.6244C6.49397 22.8021 6.67691 22.9455 6.88422 23.0445C7.09152 23.1434 7.31809 23.1954 7.54778 23.1967L16.4539 23.1947C16.6835 23.1933 16.91 23.1414 17.1174 23.0427C17.3247 22.9439 17.5077 22.8006 17.6533 22.6231L23.205 15.7171C23.3472 15.5381 23.4476 15.3295 23.4989 15.1067C23.5502 14.8839 23.5511 14.6525 23.5015 14.4293V14.429ZM22.5422 14.8322C22.5288 14.8932 22.5115 14.9532 22.4903 15.0119C22.4392 15.1548 22.3648 15.2882 22.2702 15.4068L17.3368 21.5438L17.1818 21.7369C17.0862 21.8543 16.972 21.9552 16.8438 22.0357C16.7944 22.0674 16.743 22.096 16.6901 22.1215C16.6544 22.138 16.6181 22.1529 16.5811 22.1663C16.5339 22.1843 16.4857 22.1998 16.4369 22.2127C16.3688 22.2311 16.2994 22.2443 16.2294 22.2523C16.1806 22.2578 16.1315 22.2607 16.0823 22.2608L7.99847 22.2627H7.9192C7.79835 22.262 7.67811 22.2454 7.56155 22.2135C7.41943 22.1758 7.28386 22.1167 7.15946 22.0384C7.06099 21.9757 6.97072 21.901 6.89078 21.816C6.86648 21.7903 6.84197 21.7652 6.81986 21.7378L1.72937 15.4088C1.701 15.373 1.67441 15.336 1.64958 15.2976C1.59202 15.2086 1.54501 15.1132 1.5095 15.0133C1.48849 14.9547 1.47138 14.8948 1.45829 14.834C1.41384 14.6344 1.41398 14.4276 1.45871 14.2281L3.27295 6.33499C3.32185 6.13082 3.41547 5.94005 3.54705 5.77645C3.67863 5.61286 3.84489 5.48051 4.03383 5.38897L11.388 1.87554C11.5786 1.78457 11.7872 1.73736 11.9984 1.73736C12.2097 1.73736 12.4182 1.78457 12.6089 1.87554L19.9642 5.38741C20.1531 5.47903 20.3193 5.61144 20.4508 5.77509C20.5824 5.93874 20.676 6.12954 20.7248 6.33374L22.542 14.2267C22.5867 14.4261 22.5868 14.633 22.5422 14.8324V14.8322Z",
284
+ fill: "white"
285
+ }
286
+ ),
287
+ /* @__PURE__ */ React.createElement(
288
+ "path",
289
+ {
290
+ d: "M19.3718 13.5945C19.3343 13.5859 19.2806 13.571 19.2438 13.5643C19.1039 13.5449 18.963 13.5336 18.8218 13.5303C18.555 13.5128 18.2906 13.4694 18.0323 13.4007C17.9525 13.3558 17.8868 13.2897 17.8424 13.2096L17.6647 13.1579C17.8547 11.7696 17.5284 10.3599 16.7479 9.19618C16.7933 9.15488 16.8795 9.07864 16.9038 9.05621C16.8977 8.96552 16.9274 8.87605 16.9864 8.80693C17.1892 8.63272 17.4085 8.47867 17.6411 8.34695C17.7671 8.28294 17.8892 8.21168 18.0069 8.13355C18.0353 8.11248 18.0741 8.07911 18.1038 8.05532C18.1561 8.02199 18.2008 7.97804 18.235 7.92631C18.2693 7.87459 18.2922 7.81624 18.3024 7.75507C18.3126 7.6939 18.3099 7.63126 18.2943 7.57122C18.2788 7.51118 18.2508 7.45509 18.2121 7.40657C18.1735 7.35806 18.1251 7.31821 18.0701 7.2896C18.015 7.261 17.9546 7.24429 17.8927 7.24055C17.8308 7.23682 17.7688 7.24613 17.7107 7.26791C17.6526 7.28968 17.5998 7.32341 17.5556 7.36693C17.5256 7.3906 17.4847 7.42169 17.458 7.44484C17.3551 7.54169 17.258 7.64443 17.1671 7.75253C16.9871 7.95034 16.7884 8.13017 16.5736 8.28948C16.489 8.32387 16.3965 8.33392 16.3066 8.31848L16.1391 8.43811C15.1751 7.4265 13.8767 6.79914 12.4851 6.67259C12.4811 6.61407 12.4761 6.5081 12.4745 6.47608C12.3998 6.42425 12.3482 6.34528 12.3309 6.256C12.3216 5.98884 12.3383 5.7214 12.3807 5.45746C12.4088 5.31925 12.4288 5.17953 12.4407 5.039C12.4421 5.00354 12.44 4.95201 12.44 4.91373C12.4462 4.85219 12.4394 4.79003 12.4201 4.73127C12.4007 4.67251 12.3693 4.61845 12.3278 4.57258C12.2863 4.52672 12.2357 4.49007 12.1791 4.46499C12.1226 4.43991 12.0614 4.42697 11.9995 4.427C11.9377 4.42703 11.8765 4.44003 11.82 4.46516C11.7635 4.49029 11.7128 4.52699 11.6714 4.57289C11.6299 4.6188 11.5986 4.67289 11.5793 4.73167C11.56 4.79045 11.5533 4.85261 11.5596 4.91415C11.5596 4.91832 11.5605 4.92229 11.5606 4.92646C11.5602 4.96296 11.5584 5.00719 11.5596 5.03911C11.5716 5.17973 11.5916 5.31955 11.6196 5.45788C11.6618 5.72177 11.6783 5.98914 11.6687 6.25621C11.6437 6.34413 11.5941 6.42309 11.5258 6.4838L11.5153 6.67008C11.2475 6.69219 10.9816 6.73308 10.7195 6.79243C9.61847 7.04125 8.61693 7.61346 7.84347 8.43561C7.78992 8.39869 7.73687 8.36107 7.6843 8.32276C7.59721 8.34881 7.50338 8.33971 7.42292 8.29741C7.20812 8.1384 7.00935 7.95881 6.82944 7.76119C6.73887 7.65316 6.64216 7.55043 6.53979 7.4535C6.51298 7.43055 6.47199 7.39926 6.44195 7.37527C6.35467 7.30488 6.24713 7.2643 6.1351 7.2595C6.06853 7.25601 6.00208 7.26827 5.94113 7.29527C5.88019 7.32227 5.82647 7.36326 5.78433 7.41491C5.71297 7.51544 5.6843 7.64012 5.70459 7.76173C5.72487 7.88333 5.79246 7.99196 5.89259 8.06388L5.89937 8.06867C5.92816 8.09225 5.96362 8.12239 5.99032 8.1419C6.10778 8.22004 6.22963 8.29136 6.35528 8.35551C6.58794 8.48722 6.80718 8.64135 7.00988 8.81569C7.06253 8.89038 7.09321 8.97833 7.09843 9.06956L7.23935 9.19556C6.46097 10.3634 6.14114 11.7775 6.3412 13.1667L6.15689 13.2203C6.1088 13.2971 6.04416 13.3622 5.96769 13.4108C5.70953 13.4797 5.44526 13.5233 5.17864 13.5409C5.03733 13.5441 4.89632 13.5555 4.75632 13.5749C4.72253 13.5812 4.67559 13.5931 4.63877 13.6022L4.63491 13.6031L4.62865 13.6049C4.56768 13.613 4.50905 13.6336 4.45652 13.6656C4.40399 13.6976 4.35871 13.7402 4.32358 13.7906C4.28846 13.8411 4.26425 13.8984 4.25253 13.9587C4.2408 14.0191 4.2418 14.0813 4.25547 14.1412C4.26914 14.2012 4.29518 14.2576 4.33191 14.3069C4.36865 14.3563 4.41528 14.3974 4.46881 14.4276C4.52235 14.4579 4.58161 14.4766 4.64281 14.4827C4.70401 14.4887 4.7658 14.4819 4.82422 14.4627L4.83079 14.4617C4.83371 14.4611 4.83622 14.4596 4.83914 14.4591C4.87543 14.4507 4.92112 14.4421 4.95303 14.4334C5.08743 14.3905 5.21928 14.34 5.34792 14.2821C5.59582 14.1821 5.85285 14.1065 6.11538 14.0563C6.20642 14.0618 6.29408 14.0928 6.36842 14.1456L6.56034 14.1128C6.99116 15.4438 7.89418 16.5712 9.09906 17.2822L9.01885 17.4741C9.05614 17.5515 9.06981 17.6381 9.05817 17.7231C8.94845 17.9739 8.81503 18.2136 8.65974 18.4391C8.57435 18.5516 8.49554 18.6691 8.4237 18.7908C8.40618 18.8239 8.38396 18.8747 8.36717 18.9095C8.33539 18.9623 8.31504 19.0213 8.30743 19.0825C8.29981 19.1437 8.30509 19.2059 8.32293 19.2649C8.34077 19.324 8.37078 19.3787 8.41102 19.4254C8.45126 19.4722 8.50085 19.51 8.55659 19.5365C8.61233 19.5629 8.67299 19.5774 8.73466 19.579C8.79634 19.5806 8.85766 19.5692 8.91469 19.5457C8.97172 19.5222 9.02319 19.487 9.0658 19.4423C9.1084 19.3977 9.14119 19.3447 9.16206 19.2866L9.16279 19.2858V19.2847C9.17948 19.2503 9.20315 19.2052 9.21723 19.1729C9.26736 19.041 9.30978 18.9063 9.34427 18.7695C9.42028 18.4912 9.53503 18.225 9.68513 17.9787C9.73762 17.9294 9.80374 17.8971 9.87486 17.886L9.97468 17.7056C11.2815 18.2081 12.7275 18.2118 14.0368 17.7159C14.0648 17.7658 14.1169 17.8611 14.1307 17.8852C14.2206 17.8996 14.3013 17.9486 14.3555 18.0218C14.4801 18.2581 14.5814 18.506 14.6578 18.762C14.6926 18.8988 14.7352 19.0335 14.7855 19.1654C14.7998 19.198 14.8231 19.2436 14.84 19.2783C14.8608 19.3364 14.8935 19.3895 14.9361 19.4341C14.9786 19.4788 15.0301 19.5141 15.0871 19.5377C15.1441 19.5613 15.2054 19.5727 15.2671 19.5712C15.3288 19.5697 15.3895 19.5553 15.4453 19.5289C15.5011 19.5026 15.5508 19.4648 15.5911 19.4181C15.6314 19.3714 15.6615 19.3167 15.6794 19.2577C15.6974 19.1987 15.7028 19.1365 15.6953 19.0753C15.6877 19.014 15.6675 18.955 15.6358 18.9021C15.619 18.8673 15.5959 18.8165 15.5784 18.7836C15.5066 18.6622 15.4278 18.545 15.3424 18.4327C15.1899 18.213 15.0591 17.979 14.9521 17.7339C14.9289 17.6462 14.941 17.5529 14.9859 17.4741C14.9577 17.4166 14.9332 17.3572 14.9126 17.2965C16.1213 16.5797 17.0244 15.4436 17.45 14.1043C17.507 14.1134 17.6062 14.1307 17.6384 14.1373C17.7054 14.0758 17.7937 14.043 17.8846 14.0458C18.1472 14.096 18.4043 14.1716 18.6522 14.2716C18.7809 14.3301 18.9128 14.381 19.0473 14.4241C19.0791 14.4325 19.1245 14.4404 19.161 14.4484C19.164 14.4493 19.1668 14.4505 19.1697 14.4514L19.1759 14.4523C19.2343 14.4715 19.2961 14.4782 19.3573 14.4722C19.4184 14.4661 19.4776 14.4474 19.5312 14.4171C19.5847 14.3869 19.6313 14.3458 19.668 14.2965C19.7047 14.2472 19.7308 14.1908 19.7444 14.1309C19.7581 14.0709 19.7591 14.0088 19.7475 13.9485C19.7358 13.8881 19.7116 13.8309 19.6765 13.7804C19.6415 13.7299 19.5963 13.6873 19.5438 13.6553C19.4913 13.6233 19.4327 13.6026 19.3718 13.5945ZM15.1893 9.11087L13.308 10.4446L13.3014 10.4415C13.2447 10.4828 13.1779 10.508 13.108 10.5144C13.0381 10.5208 12.9678 10.5082 12.9046 10.4778C12.8413 10.4474 12.7874 10.4005 12.7487 10.342C12.71 10.2835 12.6879 10.2155 12.6847 10.1454L12.6826 10.1444L12.5519 7.839C13.5466 7.96251 14.4733 8.40937 15.1893 9.11087ZM11.6453 11.6379H12.3533L12.7935 12.1882L12.6356 12.8745L11.9998 13.1805L11.3621 12.8739L11.204 12.1873L11.6453 11.6379ZM10.9792 7.91973C11.1343 7.88483 11.2911 7.85788 11.4489 7.839L11.318 10.1479L11.3084 10.1525C11.3054 10.2226 11.2835 10.2906 11.245 10.3493C11.2064 10.4079 11.1527 10.455 11.0895 10.4855C11.0263 10.5161 10.956 10.5289 10.8861 10.5226C10.8162 10.5164 10.7494 10.4913 10.6926 10.45L10.6889 10.4521L8.79543 9.10951C9.39823 8.51712 10.1546 8.10503 10.9792 7.91973ZM8.10881 9.9724L9.83752 11.5186L9.83564 11.528C9.88863 11.5741 9.92811 11.6337 9.94986 11.7005C9.97162 11.7673 9.97485 11.8387 9.9592 11.9072C9.94354 11.9756 9.9096 12.0386 9.86098 12.0892C9.81237 12.1399 9.75091 12.1765 9.68315 12.195L9.68138 12.2025L7.46547 12.8419C7.35506 11.8405 7.58143 10.8308 8.10881 9.9724ZM10.4234 14.0798L9.54297 16.2073C8.69792 15.6664 8.055 14.8617 7.71392 13.9181L9.98594 13.5321L9.9898 13.5373C10.0149 13.5324 10.0404 13.5302 10.0659 13.5305C10.1297 13.5314 10.1922 13.548 10.2479 13.5789C10.3037 13.6097 10.351 13.6538 10.3857 13.7073C10.4204 13.7607 10.4413 13.8219 10.4468 13.8854C10.4522 13.9489 10.4419 14.0127 10.4168 14.0713L10.4234 14.0798ZM13.0222 16.8157C12.1984 17.0046 11.3383 16.9604 10.5382 16.6881L11.6556 14.6676H11.6575C11.6907 14.6058 11.74 14.5542 11.8002 14.5183C11.8604 14.4823 11.9292 14.4632 11.9993 14.4632C12.0694 14.4631 12.1382 14.482 12.1984 14.5179C12.2587 14.5538 12.3081 14.6053 12.3414 14.667H12.3497L13.47 16.6908C13.3246 16.7394 13.1753 16.7809 13.0222 16.8157ZM14.4658 16.2158L13.5763 14.0667L13.5791 14.0628C13.5396 13.9709 13.5371 13.8673 13.5722 13.7736C13.6072 13.6799 13.677 13.6033 13.7671 13.5598C13.8136 13.5371 13.8641 13.5239 13.9157 13.5212C13.9456 13.5198 13.9756 13.522 14.0049 13.5278L14.0088 13.523L16.301 13.9103C15.9627 14.8615 15.3169 15.6727 14.4658 16.2158ZM16.5418 12.8344L14.3147 12.1929L14.3126 12.1835C14.245 12.1648 14.1837 12.1282 14.1352 12.0775C14.0867 12.0268 14.0529 11.9639 14.0373 11.8955C14.0217 11.8271 14.0249 11.7557 14.0465 11.689C14.0682 11.6223 14.1075 11.5627 14.1603 11.5165L14.1595 11.512L15.8786 9.97345C16.405 10.8296 16.6379 11.8339 16.5418 12.8344Z",
291
+ fill: "white"
292
+ }
293
+ )
294
+ );
295
+
296
+ const getProviderIcon = (name) => {
297
+ if (!name)
298
+ return /* @__PURE__ */ React.createElement(Aws, null);
299
+ if (name.includes("aws")) {
300
+ return /* @__PURE__ */ React.createElement(Aws, null);
301
+ }
302
+ if (name.includes("azure")) {
303
+ return /* @__PURE__ */ React.createElement(Azure, null);
304
+ }
305
+ if (name.includes("gcp") || name.includes("google")) {
306
+ return /* @__PURE__ */ React.createElement(Gcp, null);
307
+ }
308
+ if (name.includes("kubernetes") || name.includes("k8s")) {
309
+ return /* @__PURE__ */ React.createElement(Kubernetes, null);
310
+ }
311
+ return null;
312
+ };
313
+ const ResourceTable = ({
314
+ setRefresh,
315
+ refresh,
316
+ pageSize,
317
+ currTableData,
318
+ page,
319
+ handleChangePage,
320
+ totalElements,
321
+ handleChangeRowsPerPage,
322
+ classes,
323
+ baseUrl
324
+ }) => {
325
+ const columns = [
326
+ {
327
+ title: "Provider",
328
+ field: "col1",
329
+ width: "22%",
330
+ render: (row) => {
331
+ return /* @__PURE__ */ React.createElement(
332
+ Link,
333
+ {
334
+ href: baseUrl,
335
+ target: "_blank",
336
+ style: {
337
+ display: "flex",
338
+ justifyContent: "center",
339
+ alignItems: "center"
340
+ },
341
+ key: row.id
342
+ },
343
+ /* @__PURE__ */ React.createElement("b", null, row.provider)
344
+ );
345
+ },
346
+ customFilterAndSearch: (term, row) => {
347
+ var _a;
348
+ const temp = (_a = row == null ? void 0 : row.provider) != null ? _a : "";
349
+ return temp.toLowerCase().indexOf(term.toLowerCase()) > -1;
350
+ },
351
+ customSort: (row1, row2) => {
352
+ var _a, _b;
353
+ const a = (_a = row1.provider) != null ? _a : "";
354
+ const b = (_b = row2.provider) != null ? _b : "";
355
+ return a > b ? 1 : -1;
356
+ }
357
+ },
358
+ {
359
+ title: "Type",
360
+ field: "col2",
361
+ width: "18%",
362
+ render: (row) => /* @__PURE__ */ React.createElement("span", { style: { display: "flex", gap: "5px" } }, getProviderIcon(row.provider), /* @__PURE__ */ React.createElement(Typography, { style: { fontSize: "small", color: "grey" } }, row.type)),
363
+ customFilterAndSearch: (term, row) => {
364
+ var _a;
365
+ const temp = (_a = row == null ? void 0 : row.type) != null ? _a : "";
366
+ return temp.toLowerCase().indexOf(term.toLowerCase()) > -1;
367
+ },
368
+ customSort: (row1, row2) => {
369
+ var _a, _b;
370
+ const a = (_a = row1.type) != null ? _a : "";
371
+ const b = (_b = row2.type) != null ? _b : "";
372
+ return a > b ? 1 : -1;
373
+ }
374
+ },
375
+ {
376
+ title: "Name",
377
+ field: "col3",
378
+ width: "30%",
379
+ render: (row) => /* @__PURE__ */ React.createElement(Typography, { style: { fontSize: "small", color: "grey" } }, row.name),
380
+ customFilterAndSearch: (term, row) => {
381
+ var _a;
382
+ const temp = (_a = row == null ? void 0 : row.name) != null ? _a : "";
383
+ return temp.toLowerCase().indexOf(term.toLowerCase()) > -1;
384
+ },
385
+ customSort: (row1, row2) => {
386
+ var _a, _b;
387
+ const a = (_a = row1.name) != null ? _a : "";
388
+ const b = (_b = row2.name) != null ? _b : "";
389
+ return a > b ? 1 : -1;
390
+ }
391
+ },
392
+ {
393
+ title: "Module",
394
+ field: "col4",
395
+ width: "20%",
396
+ render: (row) => /* @__PURE__ */ React.createElement(Typography, { style: { fontSize: "small", color: "grey" } }, row.module),
397
+ customFilterAndSearch: (term, row) => {
398
+ var _a;
399
+ const temp = (_a = row == null ? void 0 : row.module) != null ? _a : "";
400
+ return temp.toLowerCase().indexOf(term.toLowerCase()) > -1;
401
+ },
402
+ customSort: (row1, row2) => {
403
+ var _a, _b;
404
+ const a = (_a = row1.module) != null ? _a : "";
405
+ const b = (_b = row2.module) != null ? _b : "";
406
+ return a > b ? 1 : -1;
407
+ }
408
+ }
409
+ ];
410
+ return /* @__PURE__ */ React.createElement(
411
+ Table,
412
+ {
413
+ options: {
414
+ paging: true,
415
+ filtering: false,
416
+ emptyRowsWhenPaging: false,
417
+ pageSize,
418
+ pageSizeOptions: [5, 10, 25]
419
+ },
420
+ key: "id'",
421
+ data: currTableData != null ? currTableData : [],
422
+ columns,
423
+ actions: [
424
+ {
425
+ icon: () => /* @__PURE__ */ React.createElement(RetryIcon, null),
426
+ tooltip: "Refresh Data",
427
+ isFreeAction: true,
428
+ onClick: () => {
429
+ setRefresh(!refresh);
430
+ }
431
+ }
432
+ ],
433
+ emptyContent: /* @__PURE__ */ React.createElement("div", { className: classes.empty }, /* @__PURE__ */ React.createElement(CircularProgress, null)),
434
+ title: "Workspace Resources",
435
+ page,
436
+ onPageChange: handleChangePage,
437
+ totalCount: totalElements,
438
+ onRowsPerPageChange: handleChangeRowsPerPage
439
+ }
440
+ );
441
+ };
442
+
443
+ const useStyles = makeStyles((theme) => ({
444
+ container: {
445
+ width: "100%"
446
+ },
447
+ label: {
448
+ marginBottom: "2px",
449
+ fontSize: "1rem !important",
450
+ fontWeight: 400
451
+ },
452
+ empty: {
453
+ padding: theme.spacing(2),
454
+ display: "flex",
455
+ justifyContent: "center"
456
+ },
457
+ select: {
458
+ border: "1px solid gray ",
459
+ paddingLeft: "5px",
460
+ height: "56px",
461
+ fontWeight: 400,
462
+ fontSize: "1rem",
463
+ color: "rgba(0, 0, 0, 0.87)",
464
+ borderRadius: "4px"
465
+ },
466
+ menuItem: {
467
+ paddingLeft: "10px",
468
+ display: "flex",
469
+ alignItems: "center",
470
+ gap: "5px"
471
+ }
472
+ }));
473
+ function WorkspaceList() {
474
+ var _a;
475
+ const [refresh, setRefresh] = useState(false);
476
+ const classes = useStyles();
477
+ const discoveryApi = useApi(discoveryApiRef);
478
+ const backendBaseUrl = discoveryApi.getBaseUrl("proxy");
479
+ const { isWorkspaceAnnotationPresent, harnessWorkspaceUrlObject } = useProjectUrlSlugEntity();
480
+ const [selectedProjectUrl, setSelectedProjectUrl] = useState(() => {
481
+ return Object.keys(harnessWorkspaceUrlObject)[0];
482
+ });
483
+ const [selectedResourceUrl, setSelectedResourceUrl] = useState(() => {
484
+ return harnessWorkspaceUrlObject[Object.keys(harnessWorkspaceUrlObject)[0]];
485
+ });
486
+ const [page, setPage] = useState(0);
487
+ const [pageSize, setPageSize] = useState(5);
488
+ const {
489
+ projectId,
490
+ orgId,
491
+ accountId,
492
+ envFromUrl,
493
+ workspaceId,
494
+ cleanedString: urlForWorkspace
495
+ } = useResourceSlugFromEntity(
496
+ isWorkspaceAnnotationPresent,
497
+ selectedResourceUrl
498
+ );
499
+ const { resources, status: state } = useGetResources({
500
+ backendBaseUrl,
501
+ accountId,
502
+ orgId,
503
+ projectId,
504
+ refresh,
505
+ envFromUrl,
506
+ workspace: workspaceId || null
507
+ });
508
+ const handleWorkspaceChange = (event) => {
509
+ setSelectedProjectUrl(event.target.value);
510
+ setSelectedResourceUrl(harnessWorkspaceUrlObject[event.target.value]);
511
+ };
512
+ const handleChangePage = (currentPage, currentPageSize) => {
513
+ setPage(currentPage);
514
+ setPageSize(currentPageSize);
515
+ };
516
+ const handleChangeRowsPerPage = (currentPageSize) => {
517
+ setPage(0);
518
+ setPageSize(currentPageSize);
519
+ };
520
+ const newWorkspaceDropdown = /* @__PURE__ */ React.createElement(FormControl, { fullWidth: true }, /* @__PURE__ */ React.createElement(
521
+ InputLabel,
522
+ {
523
+ htmlFor: "Service/Workspace",
524
+ classes: {
525
+ root: classes.label
526
+ }
527
+ },
528
+ "Service / Workspace"
529
+ ), /* @__PURE__ */ React.createElement(
530
+ Select,
531
+ {
532
+ displayEmpty: true,
533
+ labelId: "Workspaces",
534
+ id: "Workspaces",
535
+ value: selectedProjectUrl,
536
+ onChange: (e) => handleWorkspaceChange(e),
537
+ className: classes.select
538
+ },
539
+ Object.keys(harnessWorkspaceUrlObject).length > 0 ? /* @__PURE__ */ React.createElement(ListSubheader, null, "Workspaces") : null,
540
+ Object.keys(harnessWorkspaceUrlObject).map((workspace) => /* @__PURE__ */ React.createElement(MenuItem, { value: workspace, key: workspace }, /* @__PURE__ */ React.createElement("span", { className: classes.menuItem }, workspace)))
541
+ ), /* @__PURE__ */ React.createElement(FormHelperText, null));
542
+ const DropDownComponent = /* @__PURE__ */ React.createElement(Grid, { container: true, spacing: 3, marginBottom: 4, marginLeft: 1, paddingTop: 2 }, isWorkspaceAnnotationPresent ? /* @__PURE__ */ React.createElement(Grid, { item: true, md: 3 }, newWorkspaceDropdown) : null);
543
+ if (state === AsyncStatus.Init || state === AsyncStatus.Loading) {
544
+ return /* @__PURE__ */ React.createElement("div", { className: classes.empty }, /* @__PURE__ */ React.createElement(CircularProgress, null));
545
+ }
546
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("div", { className: classes.container }, DropDownComponent, /* @__PURE__ */ React.createElement(
547
+ ResourceTable,
548
+ {
549
+ accountId,
550
+ orgId,
551
+ backendBaseUrl,
552
+ setRefresh,
553
+ refresh,
554
+ pageSize,
555
+ currTableData: resources == null ? void 0 : resources.resources,
556
+ page,
557
+ handleChangePage,
558
+ totalElements: (_a = resources == null ? void 0 : resources.resources) == null ? void 0 : _a.length,
559
+ handleChangeRowsPerPage,
560
+ classes,
561
+ baseUrl: urlForWorkspace
562
+ }
563
+ )));
564
+ }
565
+
566
+ const isHarnessIacmAvailable = (entity) => {
567
+ var _a;
568
+ return Boolean((_a = entity.metadata.annotations) == null ? void 0 : _a["harness.io/workspace-url"]);
569
+ };
570
+ const Router = () => {
571
+ const { entity } = useEntity();
572
+ if (!isHarnessIacmAvailable(entity)) {
573
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(MissingAnnotationEmptyState, { annotation: "harness.io/workspace-url" }));
574
+ }
575
+ return /* @__PURE__ */ React.createElement(Routes, null, /* @__PURE__ */ React.createElement(Route, { path: "/", element: /* @__PURE__ */ React.createElement(WorkspaceList, null) }));
576
+ };
577
+
578
+ var Router$1 = /*#__PURE__*/Object.freeze({
579
+ __proto__: null,
580
+ isHarnessIacmAvailable: isHarnessIacmAvailable,
581
+ Router: Router
582
+ });
583
+
584
+ const rootRouteRef = createRouteRef({
585
+ id: "harness-iacm"
586
+ });
587
+
588
+ const harnessIacmPlugin = createPlugin({
589
+ id: "harness-iacm",
590
+ routes: {
591
+ root: rootRouteRef
592
+ }
593
+ });
594
+ const EntityIacmContent = harnessIacmPlugin.provide(
595
+ createRoutableExtension({
596
+ name: "HarnessIacmPage",
597
+ component: () => Promise.resolve().then(function () { return Router$1; }).then((m) => m.Router),
598
+ mountPoint: rootRouteRef
599
+ })
600
+ );
601
+
602
+ export { EntityIacmContent, Router, harnessIacmPlugin, isHarnessIacmAvailable };
603
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../src/types.ts","../src/utils/getHarnessToken.ts","../src/hooks/useGetResources.ts","../src/hooks/useProjectUrlEntity.ts","../src/components/WorkspaceList/useResourceSlugFromEntity.tsx","../src/icons/aws.tsx","../src/icons/azure.tsx","../src/icons/gcp.tsx","../src/icons/kubernetes.tsx","../src/components/ResourceTable.tsx","../src/components/WorkspaceList/index.tsx","../src/components/Router.tsx","../src/routes.ts","../src/plugin.ts"],"sourcesContent":["export enum AsyncStatus {\n Init,\n Loading,\n Success,\n Error,\n Unauthorized,\n}\n\nexport interface TableData {\n id: string;\n name: string;\n provider: string;\n module: string;\n type: string;\n}\nexport interface Feature {\n name?: string;\n archived?: string;\n owner?: string[];\n createdAt?: any;\n modifiedAt?: string;\n kind?: string;\n identifier?: string;\n status?: { status: any };\n envProperties?: { state: string; pipelineConfigured: string };\n}\n\nexport interface FeatureStatus {\n identifier: string;\n name: string;\n results: Array<any>;\n status: {\n lastAccess: number;\n status: string;\n };\n}\n","export function getSecureHarnessKey(key: string): string | undefined {\n try {\n const token = JSON.parse(decodeURI(atob(localStorage.getItem(key) || '')));\n return token ? `Bearer ${token}` : '';\n } catch (_) {\n // eslint-disable-next-line no-console\n console.log('Failed to read Harness tokens');\n return undefined;\n }\n}\n","import useAsyncRetry from 'react-use/lib/useAsyncRetry';\nimport { useState } from 'react';\nimport { AsyncStatus } from '../types';\nimport { getSecureHarnessKey } from '../utils/getHarnessToken';\n\ninterface useGetFeatureEnvArgs {\n backendBaseUrl: Promise<string>;\n accountId: string;\n orgId: string;\n projectId: string;\n refresh: boolean;\n workspace: string | null;\n envFromUrl?: string;\n}\n\nexport interface Resource {\n id: string;\n provider: string;\n type: string;\n name: string;\n module: string;\n attributes: {\n ami: string;\n arn: string;\n associate_public_ip_address: string;\n availability_zone: string;\n };\n}\nexport interface ResourcesResponse {\n resources: { resources: Resource[] | null };\n status: AsyncStatus;\n}\n\nconst useGetResources = ({\n backendBaseUrl,\n accountId,\n orgId,\n projectId,\n refresh,\n envFromUrl,\n workspace,\n}: useGetFeatureEnvArgs): ResourcesResponse => {\n const [resources, setResources] = useState<Resource[] | null>(null);\n const [status, setStatus] = useState<AsyncStatus>(AsyncStatus.Init);\n\n useAsyncRetry(async () => {\n setStatus(AsyncStatus.Loading);\n\n const token = getSecureHarnessKey('token');\n const headers = new Headers({\n 'content-type': 'application/json',\n Authorization: token ? `${token}` : '',\n });\n if (!workspace) {\n return;\n }\n const resp = await fetch(\n `${await backendBaseUrl}/harness/${envFromUrl}/gateway/iacm/api/orgs/${orgId}/projects/${projectId}/workspaces/${workspace}/resources`,\n {\n headers,\n },\n );\n if (resp.status === 200) {\n const data = await resp.json();\n\n const dataWithId = {\n ...data,\n resources: (data.resources as Resource[]).map(\n (resource: Resource, index) => ({\n ...resource,\n id: new Date().getTime().toString() + index.toString(),\n }),\n ),\n };\n\n setResources(dataWithId);\n setStatus(AsyncStatus.Success);\n } else if (resp.status === 401) {\n setStatus(AsyncStatus.Unauthorized);\n } else {\n setStatus(AsyncStatus.Error);\n }\n }, [accountId, orgId, projectId, refresh, envFromUrl, workspace]);\n\n return { resources: resources as any, status };\n};\n\nexport default useGetResources;\n","import { useEntity } from '@backstage/plugin-catalog-react';\n\nfunction convertStringToObject(inputString: string | undefined) {\n if (!inputString) return {};\n const object: Record<string, string> = {};\n const lines = inputString.split('\\n');\n\n for (const line of lines) {\n if (line === '') continue;\n const [label, ...rest] = line.split(':');\n const trimmedLabel = label.trim();\n object[trimmedLabel] = rest.join(':').trim();\n }\n return object;\n}\n\nconst useProjectUrlSlugEntity = () => {\n const { entity } = useEntity();\n\n const isWorkspaceAnnotationPresent = Boolean(\n entity.metadata.annotations?.['harness.io/workspace-url'],\n );\n\n const harnessWorkspaceUrlObject = convertStringToObject(\n entity.metadata.annotations?.['harness.io/workspace-url'],\n );\n\n return {\n isWorkspaceAnnotationPresent,\n\n harnessWorkspaceUrlObject,\n };\n};\n\nexport default useProjectUrlSlugEntity;\n","import { match } from 'path-to-regexp';\n\nexport const useResourceSlugFromEntity = (\n isNewAnnotationPresent?: boolean,\n selectedWorkspace?: string,\n) => {\n const cleanedString = selectedWorkspace?.split(' ')[0];\n let accountId;\n let orgId;\n let projectId;\n let workspaceId;\n\n const urlMatch = match(\n '(.*)/account/:accountId/module/:module/orgs/:orgId/projects/:projectId/workspaces/:workspaceId/resources/(.*)?',\n {\n decode: decodeURIComponent,\n },\n );\n\n if (isNewAnnotationPresent && cleanedString) {\n const hostname = new URL(cleanedString).hostname;\n\n const envAB = hostname.split('.')[0];\n const envFromUrl = envAB === 'app' ? 'prod' : envAB;\n\n const urlParams: any = urlMatch(cleanedString ?? '');\n\n if (urlParams) {\n accountId = urlParams.params.accountId;\n orgId = urlParams.params.orgId;\n projectId = urlParams.params.projectId;\n workspaceId = urlParams.params.workspaceId;\n }\n\n return {\n projectId,\n workspaceId,\n orgId,\n accountId,\n urlParams,\n envFromUrl,\n cleanedString,\n };\n }\n\n return {};\n};\n","/* eslint-disable react/no-unknown-property */\nimport React from 'react';\n\nconst Aws = () => (\n <svg\n width=\"25\"\n height=\"24\"\n viewBox=\"0 0 25 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n >\n <rect\n x=\"0.950195\"\n y=\"0.75\"\n width=\"22.5\"\n height=\"22.5\"\n fill=\"url(#pattern0_5950_37598)\"\n />\n <defs>\n <pattern\n id=\"pattern0_5950_37598\"\n patternContentUnits=\"objectBoundingBox\"\n width=\"1\"\n height=\"1\"\n >\n <use xlinkHref=\"#image0_5950_37598\" transform=\"scale(0.00390625)\" />\n </pattern>\n <image\n id=\"image0_5950_37598\"\n width=\"256\"\n height=\"256\"\n xlinkHref=\"data:image/png;base64,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\"\n />\n </defs>\n </svg>\n);\n\nexport default Aws;\n","import React from 'react';\n\nconst Azure = () => (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clipPath=\"url(#clip0_3567_2033)\">\n <path\n d=\"M13.1126 2.42495L6.03748 8.56041L-2.28882e-05 19.3973H5.44367L13.1126 2.42495ZM14.0538 3.86047L11.0343 12.3711L16.8239 19.6452L5.59212 21.5751H24L14.0538 3.86047Z\"\n fill=\"#0072C6\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3567_2033\">\n <rect\n width=\"24\"\n height=\"19.152\"\n fill=\"white\"\n transform=\"translate(0 2.424)\"\n />\n </clipPath>\n </defs>\n </svg>\n);\n\nexport default Azure;\n","import React from 'react';\n\nconst Gcp = () => (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clipPath=\"url(#clip0_3567_2036)\">\n <path\n d=\"M15.2288 7.66161H15.9611L18.0476 5.57518L18.1502 4.6899C14.2681 1.26349 8.34173 1.63269 4.91531 5.51482C3.96263 6.59324 3.27151 7.87589 2.89527 9.26416C3.12766 9.16859 3.38519 9.1535 3.62764 9.21989L7.7995 8.5318C7.7995 8.5318 8.01177 8.1807 8.12142 8.20283C9.97748 6.16469 13.1011 5.92728 15.2439 7.66161H15.2288Z\"\n fill=\"#EA4335\"\n />\n <path\n d=\"M21.0192 9.26417C20.5393 7.49865 19.5555 5.9112 18.1863 4.69696L15.2589 7.6244C16.4953 8.63442 17.1994 10.1565 17.1693 11.753V12.2731C18.6088 12.2731 19.7748 13.4401 19.7748 14.8786C19.7748 16.3182 18.6078 17.4842 17.1693 17.4842H11.9573L11.4372 18.0113V21.1369L11.9573 21.657H17.1693C20.157 21.6802 22.8078 19.7436 23.6951 16.8906C24.5804 14.0366 23.4939 10.9381 21.0192 9.26417Z\"\n fill=\"#4285F4\"\n />\n <path\n d=\"M6.73817 21.6277H11.9502V17.4558H6.73817C6.36696 17.4558 5.99978 17.3764 5.66176 17.2214L4.9294 17.4478L2.8289 19.5342L2.64581 20.2666C3.82382 21.1559 5.26138 21.6337 6.73817 21.6277Z\"\n fill=\"#34A853\"\n />\n <path\n d=\"M6.73817 8.09318C3.84292 8.11028 1.27864 9.96433 0.355138 12.7077C-0.568365 15.451 0.35212 18.4791 2.64679 20.2436L5.6698 17.2206C4.35799 16.628 3.77552 15.0848 4.36805 13.773C4.96058 12.4612 6.50377 11.8787 7.81559 12.4713C8.39303 12.7328 8.85579 13.1956 9.11735 13.773L12.1404 10.75C10.8537 9.06899 8.85478 8.08614 6.73817 8.09318Z\"\n fill=\"#FBBC05\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_3567_2036\">\n <rect\n width=\"24\"\n height=\"19.3141\"\n fill=\"white\"\n transform=\"translate(0 2.34296)\"\n />\n </clipPath>\n </defs>\n </svg>\n);\n\nexport default Gcp;\n","import React from 'react';\n\nconst Kubernetes = () => (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M14.0048 13.5277C13.9755 13.5218 13.9456 13.5196 13.9157 13.5209C13.864 13.5236 13.8135 13.5367 13.767 13.5595C13.6769 13.603 13.607 13.6796 13.572 13.7734C13.537 13.8671 13.5395 13.9708 13.579 14.0627L13.5763 14.0666L14.4658 16.2155C15.3168 15.6725 15.9625 14.8613 16.301 13.9102L14.0088 13.5229L14.0048 13.5277ZM10.4383 13.8322C10.4191 13.7475 10.3719 13.6717 10.3044 13.617C10.2369 13.5623 10.1531 13.5318 10.0662 13.5304C10.0405 13.5301 10.0149 13.5323 9.98973 13.5372L9.98587 13.5325L7.71364 13.9182C8.05486 14.8618 8.69793 15.6664 9.5431 16.2072L10.4236 14.0794L10.4167 14.0711C10.4492 13.9958 10.4568 13.9121 10.4383 13.8322ZM12.3413 14.6666C12.3081 14.6048 12.2588 14.5531 12.1985 14.5171C12.1382 14.4811 12.0693 14.4621 11.9991 14.4622C11.9289 14.4622 11.86 14.4814 11.7999 14.5176C11.7397 14.5537 11.6905 14.6055 11.6574 14.6675H11.6555L10.5381 16.688C11.3382 16.9604 12.1983 17.0047 13.0221 16.8158C13.1749 16.781 13.3241 16.7393 13.4698 16.6906L12.3498 14.6665L12.3413 14.6666ZM15.8786 9.97303L14.1594 11.5118L14.1604 11.5167C14.1075 11.5629 14.0682 11.6225 14.0465 11.6892C14.0249 11.756 14.0217 11.8273 14.0373 11.8957C14.0529 11.9641 14.0868 12.027 14.1352 12.0777C14.1837 12.1284 14.245 12.165 14.3126 12.1837L14.3147 12.193L16.5416 12.8345C16.6378 11.834 16.4051 10.8294 15.8786 9.97324V9.97303ZM12.6846 10.1454C12.6878 10.2155 12.71 10.2834 12.7487 10.3419C12.7874 10.4004 12.8412 10.4474 12.9045 10.4778C12.9677 10.5081 13.038 10.5208 13.1079 10.5145C13.1778 10.5081 13.2446 10.4829 13.3013 10.4417L13.3081 10.4445L15.1893 9.11066C14.4732 8.40928 13.5465 7.96257 12.5518 7.83922L12.6825 10.1448L12.6846 10.1454ZM10.6924 10.4501C10.7492 10.4914 10.816 10.5165 10.8859 10.5227C10.9558 10.529 11.0261 10.5162 11.0892 10.4857C11.1524 10.4552 11.2061 10.4081 11.2447 10.3495C11.2833 10.2909 11.3052 10.2229 11.3082 10.1529L11.3178 10.1484L11.4485 7.83911C11.2907 7.85807 11.134 7.88508 10.979 7.92005C10.1544 8.1054 9.39803 8.51757 8.79526 9.11004L10.6888 10.4523L10.6924 10.4501ZM9.68297 12.195C9.75075 12.1765 9.81224 12.14 9.86087 12.0893C9.9095 12.0386 9.94346 11.9756 9.95911 11.9071C9.97477 11.8386 9.97153 11.7672 9.94976 11.7004C9.92798 11.6336 9.88848 11.574 9.83546 11.5279L9.83734 11.5187L8.10863 9.97251C7.58125 10.8309 7.35489 11.8405 7.4653 12.8419L9.6812 12.2025L9.68297 12.195ZM11.362 12.8742L11.9997 13.1809L12.6356 12.8748L12.7935 12.1884L12.3534 11.6381H11.6452L11.2039 12.1876L11.362 12.8742Z\"\n fill=\"#326CE5\"\n />\n <path\n d=\"M22.542 14.2267L20.7249 6.33357C20.676 6.12937 20.5824 5.93856 20.4509 5.77492C20.3193 5.61127 20.1531 5.47885 19.9642 5.38723L12.6087 1.87537C12.418 1.7844 12.2095 1.73718 11.9982 1.73718C11.787 1.73718 11.5784 1.7844 11.3878 1.87537L4.03375 5.38911C3.84478 5.48067 3.67851 5.61305 3.54693 5.77669C3.41534 5.94032 3.32173 6.13113 3.27286 6.33534L1.45862 14.2282C1.41388 14.4277 1.41373 14.6347 1.45821 14.8342C1.4713 14.895 1.48841 14.9549 1.50942 15.0134C1.54492 15.1133 1.59193 15.2087 1.6495 15.2977C1.67442 15.3358 1.70071 15.3728 1.72929 15.4087L6.81967 21.7376C6.84188 21.7651 6.86639 21.7903 6.8907 21.8158C6.97057 21.9009 7.06076 21.9756 7.15917 22.0383C7.28364 22.1166 7.41928 22.1756 7.56147 22.2132C7.67806 22.2452 7.79833 22.2618 7.91922 22.2625H7.99839L16.0822 22.2607C16.1314 22.2604 16.1805 22.2576 16.2293 22.252C16.2994 22.2441 16.3687 22.2309 16.4368 22.2126C16.4856 22.1997 16.5336 22.1843 16.5808 22.1665C16.6176 22.1524 16.6543 22.1383 16.6898 22.1213C16.7429 22.0959 16.7944 22.0673 16.8441 22.0356C16.9722 21.955 17.0862 21.8541 17.1817 21.7367L17.3369 21.5438L22.2703 15.4066C22.3649 15.2881 22.4392 15.1547 22.4902 15.0118C22.5115 14.9531 22.5289 14.893 22.5423 14.832C22.5869 14.6325 22.5869 14.4262 22.542 14.2267ZM14.9126 17.2965C14.9333 17.3572 14.9577 17.4165 14.9859 17.4741C14.9409 17.5529 14.9287 17.6461 14.9518 17.7338C15.0589 17.9789 15.1896 18.213 15.3421 18.4327C15.4275 18.545 15.5063 18.6621 15.5782 18.7835C15.5959 18.8164 15.619 18.8673 15.6358 18.902C15.6675 18.955 15.6878 19.014 15.6953 19.0752C15.7028 19.1365 15.6974 19.1986 15.6795 19.2577C15.6615 19.3167 15.6314 19.3713 15.5911 19.4181C15.5508 19.4648 15.5011 19.5025 15.4453 19.5289C15.3896 19.5553 15.3289 19.5697 15.2672 19.5712C15.2055 19.5727 15.1442 19.5613 15.0871 19.5377C15.0301 19.5141 14.9787 19.4788 14.9361 19.4341C14.8936 19.3894 14.8608 19.3363 14.84 19.2782C14.8232 19.2438 14.7998 19.1979 14.7856 19.1654C14.7353 19.0335 14.6926 18.8988 14.6578 18.7619C14.5815 18.5059 14.4803 18.258 14.3557 18.0217C14.3015 17.9486 14.2209 17.8997 14.1311 17.8854C14.117 17.8611 14.0648 17.7654 14.0369 17.7161C12.7275 18.212 11.2813 18.2083 9.9745 17.7057L9.87489 17.8861C9.80378 17.8972 9.73766 17.9294 9.68517 17.9786C9.53506 18.225 9.42032 18.4912 9.34431 18.7694C9.30982 18.9063 9.2674 19.041 9.21727 19.1729C9.20319 19.2052 9.17961 19.2505 9.16282 19.2848L9.16209 19.2866C9.14132 19.3448 9.10858 19.3979 9.06599 19.4427C9.02339 19.4874 8.9719 19.5227 8.91482 19.5464C8.85773 19.57 8.79634 19.5814 8.73458 19.5798C8.67283 19.5782 8.61208 19.5638 8.55627 19.5373C8.50047 19.5108 8.45083 19.4729 8.41056 19.426C8.3703 19.3792 8.3403 19.3244 8.32251 19.2653C8.30471 19.2061 8.29951 19.1439 8.30725 19.0826C8.31498 19.0213 8.33548 18.9623 8.36741 18.9094C8.38399 18.8745 8.40621 18.8239 8.42373 18.791C8.49554 18.6693 8.57431 18.5519 8.65967 18.4392C8.81497 18.2137 8.94839 17.9739 9.0581 17.7231C9.06977 17.638 9.05613 17.5515 9.01888 17.4741L9.09899 17.2822C7.89419 16.5711 6.99125 15.4438 6.56047 14.1128L6.36866 14.1454C6.29424 14.0926 6.20651 14.0617 6.11542 14.0562C5.85295 14.1065 5.59599 14.1821 5.34817 14.282C5.21948 14.3399 5.0876 14.3904 4.95317 14.4333C4.92136 14.442 4.87547 14.4508 4.83917 14.4587C4.83625 14.4598 4.83375 14.461 4.83083 14.4618C4.82858 14.4621 4.82632 14.4623 4.82405 14.4624C4.76562 14.4816 4.70382 14.4884 4.64261 14.4824C4.5814 14.4763 4.52212 14.4576 4.46858 14.4273C4.41503 14.397 4.3684 14.3559 4.33166 14.3066C4.29492 14.2573 4.26888 14.2008 4.25521 14.1408C4.24155 14.0809 4.24055 14.0187 4.2523 13.9583C4.26404 13.898 4.28826 13.8407 4.32341 13.7902C4.35855 13.7397 4.40385 13.6972 4.4564 13.6652C4.50895 13.6332 4.5676 13.6126 4.62858 13.6046L4.63495 13.603L4.63881 13.602C4.67562 13.5933 4.72277 13.5811 4.75635 13.5747C4.89639 13.5552 5.03743 13.5439 5.17878 13.5407C5.44535 13.5232 5.70958 13.4798 5.96772 13.4111C6.04423 13.3624 6.10887 13.2972 6.15693 13.2202L6.34123 13.1664C6.14124 11.7773 6.46114 10.3631 7.23959 9.19532L7.09847 9.06953C7.09332 8.97823 7.06268 8.8902 7.01002 8.81545C6.80728 8.64117 6.588 8.48712 6.35531 8.35547C6.22967 8.2914 6.10781 8.22015 5.99036 8.14207C5.96366 8.12215 5.92819 8.09221 5.8992 8.06864L5.89263 8.06405C5.7925 7.99213 5.72491 7.8835 5.70462 7.7619C5.68433 7.6403 5.713 7.51561 5.78436 7.41508C5.82652 7.36347 5.88025 7.32252 5.9412 7.29556C6.00214 7.26859 6.06858 7.25637 6.13513 7.25988C6.24716 7.26469 6.3547 7.30526 6.44199 7.37566C6.47192 7.39912 6.51291 7.43052 6.53951 7.45336C6.64198 7.55028 6.7388 7.65301 6.82947 7.76105C7.00938 7.95871 7.20815 8.13834 7.42295 8.29738C7.50344 8.3397 7.59732 8.3488 7.68444 8.32272C7.73687 8.36097 7.78978 8.39858 7.84319 8.43558C8.61672 7.61334 9.61838 7.04108 10.7195 6.79229C10.9816 6.73294 11.2476 6.69206 11.5154 6.66995L11.5258 6.48387C11.5942 6.42311 11.6437 6.34407 11.6687 6.25607C11.6783 5.989 11.6619 5.72163 11.6197 5.45774C11.5917 5.31945 11.5716 5.17966 11.5596 5.03907C11.5584 5.00705 11.5602 4.96283 11.5606 4.92632C11.5606 4.92215 11.5596 4.91798 11.5596 4.91401C11.5533 4.85247 11.5601 4.79031 11.5793 4.73153C11.5986 4.67275 11.63 4.61866 11.6714 4.57276C11.7129 4.52685 11.7635 4.49015 11.82 4.46502C11.8765 4.43989 11.9377 4.42689 11.9996 4.42686C12.0614 4.42683 12.1226 4.43977 12.1791 4.46485C12.2357 4.48993 12.2863 4.52658 12.3278 4.57245C12.3694 4.61831 12.4008 4.67237 12.4201 4.73113C12.4394 4.78989 12.4462 4.85205 12.44 4.9136C12.44 4.95219 12.4423 5.0033 12.4409 5.03876C12.4289 5.17933 12.4087 5.31908 12.3806 5.45732C12.3381 5.72126 12.3214 5.9887 12.3307 6.25586C12.3481 6.34518 12.3997 6.42415 12.4745 6.47594C12.4761 6.50775 12.4813 6.61393 12.4852 6.67245C13.8768 6.79901 15.1751 7.42636 16.1391 8.43798L16.3066 8.31834C16.3966 8.33378 16.4891 8.32373 16.5736 8.28935C16.7884 8.13003 16.9872 7.9502 17.1671 7.7524C17.258 7.6443 17.355 7.54156 17.4578 7.4447C17.4848 7.42155 17.5256 7.39047 17.5554 7.36689C17.5996 7.32334 17.6524 7.28956 17.7105 7.26775C17.7686 7.24594 17.8306 7.23659 17.8925 7.24029C17.9544 7.244 18.0149 7.26069 18.0699 7.28927C18.125 7.31785 18.1734 7.3577 18.2121 7.40621C18.2507 7.45472 18.2788 7.51082 18.2943 7.57087C18.3099 7.63092 18.3127 7.69357 18.3025 7.75475C18.2923 7.81594 18.2693 7.8743 18.2351 7.92604C18.2009 7.97778 18.1562 8.02175 18.1038 8.05508C18.0743 8.07897 18.0353 8.11224 18.0069 8.13331C17.8892 8.21144 17.7671 8.2827 17.6412 8.34671C17.4085 8.47843 17.1892 8.63248 16.9864 8.80669C16.9274 8.87581 16.8978 8.96528 16.9038 9.05597C16.8793 9.0785 16.7933 9.15474 16.7477 9.19605C17.5283 10.3597 17.8547 11.7694 17.6647 13.1578L17.8425 13.2095C17.8869 13.2894 17.9526 13.3555 18.0323 13.4004C18.2906 13.4692 18.5549 13.5127 18.8216 13.5303C18.9628 13.5336 19.1037 13.5449 19.2437 13.5641C19.2807 13.5709 19.3342 13.5857 19.3719 13.5944C19.4329 13.6024 19.4916 13.6231 19.5441 13.655C19.5967 13.687 19.6419 13.7296 19.6771 13.7801C19.7122 13.8306 19.7364 13.8879 19.7481 13.9483C19.7598 14.0087 19.7588 14.0708 19.7451 14.1308C19.7314 14.1908 19.7053 14.2472 19.6686 14.2965C19.6318 14.3458 19.5851 14.3869 19.5316 14.4172C19.478 14.4474 19.4187 14.4661 19.3575 14.4721C19.2963 14.4782 19.2345 14.4713 19.1761 14.4521L19.1697 14.4512C19.1668 14.4505 19.1641 14.4489 19.161 14.4481C19.1248 14.4403 19.0792 14.4323 19.0474 14.424C18.9129 14.3808 18.7811 14.3299 18.6526 14.2715C18.4045 14.1715 18.1473 14.0958 17.8846 14.0457C17.7937 14.0428 17.7052 14.0757 17.6382 14.1372C17.5756 14.1253 17.5129 14.1143 17.4501 14.1042C17.0244 15.4435 16.1214 16.5797 14.9126 17.2965Z\"\n fill=\"#326CE5\"\n />\n <path\n d=\"M23.5015 14.429L21.519 5.81776C21.4657 5.59493 21.3636 5.38672 21.2201 5.20815C21.0765 5.02958 20.8951 4.88511 20.689 4.78516L12.6644 0.954133C12.4564 0.854864 12.2289 0.803345 11.9984 0.803345C11.768 0.803345 11.5404 0.854864 11.3324 0.954133L3.30862 4.78746C3.10246 4.88731 2.92104 5.03169 2.77744 5.21017C2.63385 5.38864 2.53167 5.59677 2.47827 5.81953L0.49923 14.4313C0.45459 14.6298 0.45 14.8352 0.48573 15.0355C0.52146 15.2359 0.596791 15.427 0.707314 15.5979C0.734537 15.6396 0.763428 15.6801 0.794719 15.7191L6.34841 22.6244C6.49397 22.8021 6.67691 22.9455 6.88422 23.0445C7.09152 23.1434 7.31809 23.1954 7.54778 23.1967L16.4539 23.1947C16.6835 23.1933 16.91 23.1414 17.1174 23.0427C17.3247 22.9439 17.5077 22.8006 17.6533 22.6231L23.205 15.7171C23.3472 15.5381 23.4476 15.3295 23.4989 15.1067C23.5502 14.8839 23.5511 14.6525 23.5015 14.4293V14.429ZM22.5422 14.8322C22.5288 14.8932 22.5115 14.9532 22.4903 15.0119C22.4392 15.1548 22.3648 15.2882 22.2702 15.4068L17.3368 21.5438L17.1818 21.7369C17.0862 21.8543 16.972 21.9552 16.8438 22.0357C16.7944 22.0674 16.743 22.096 16.6901 22.1215C16.6544 22.138 16.6181 22.1529 16.5811 22.1663C16.5339 22.1843 16.4857 22.1998 16.4369 22.2127C16.3688 22.2311 16.2994 22.2443 16.2294 22.2523C16.1806 22.2578 16.1315 22.2607 16.0823 22.2608L7.99847 22.2627H7.9192C7.79835 22.262 7.67811 22.2454 7.56155 22.2135C7.41943 22.1758 7.28386 22.1167 7.15946 22.0384C7.06099 21.9757 6.97072 21.901 6.89078 21.816C6.86648 21.7903 6.84197 21.7652 6.81986 21.7378L1.72937 15.4088C1.701 15.373 1.67441 15.336 1.64958 15.2976C1.59202 15.2086 1.54501 15.1132 1.5095 15.0133C1.48849 14.9547 1.47138 14.8948 1.45829 14.834C1.41384 14.6344 1.41398 14.4276 1.45871 14.2281L3.27295 6.33499C3.32185 6.13082 3.41547 5.94005 3.54705 5.77645C3.67863 5.61286 3.84489 5.48051 4.03383 5.38897L11.388 1.87554C11.5786 1.78457 11.7872 1.73736 11.9984 1.73736C12.2097 1.73736 12.4182 1.78457 12.6089 1.87554L19.9642 5.38741C20.1531 5.47903 20.3193 5.61144 20.4508 5.77509C20.5824 5.93874 20.676 6.12954 20.7248 6.33374L22.542 14.2267C22.5867 14.4261 22.5868 14.633 22.5422 14.8324V14.8322Z\"\n fill=\"white\"\n />\n <path\n d=\"M19.3718 13.5945C19.3343 13.5859 19.2806 13.571 19.2438 13.5643C19.1039 13.5449 18.963 13.5336 18.8218 13.5303C18.555 13.5128 18.2906 13.4694 18.0323 13.4007C17.9525 13.3558 17.8868 13.2897 17.8424 13.2096L17.6647 13.1579C17.8547 11.7696 17.5284 10.3599 16.7479 9.19618C16.7933 9.15488 16.8795 9.07864 16.9038 9.05621C16.8977 8.96552 16.9274 8.87605 16.9864 8.80693C17.1892 8.63272 17.4085 8.47867 17.6411 8.34695C17.7671 8.28294 17.8892 8.21168 18.0069 8.13355C18.0353 8.11248 18.0741 8.07911 18.1038 8.05532C18.1561 8.02199 18.2008 7.97804 18.235 7.92631C18.2693 7.87459 18.2922 7.81624 18.3024 7.75507C18.3126 7.6939 18.3099 7.63126 18.2943 7.57122C18.2788 7.51118 18.2508 7.45509 18.2121 7.40657C18.1735 7.35806 18.1251 7.31821 18.0701 7.2896C18.015 7.261 17.9546 7.24429 17.8927 7.24055C17.8308 7.23682 17.7688 7.24613 17.7107 7.26791C17.6526 7.28968 17.5998 7.32341 17.5556 7.36693C17.5256 7.3906 17.4847 7.42169 17.458 7.44484C17.3551 7.54169 17.258 7.64443 17.1671 7.75253C16.9871 7.95034 16.7884 8.13017 16.5736 8.28948C16.489 8.32387 16.3965 8.33392 16.3066 8.31848L16.1391 8.43811C15.1751 7.4265 13.8767 6.79914 12.4851 6.67259C12.4811 6.61407 12.4761 6.5081 12.4745 6.47608C12.3998 6.42425 12.3482 6.34528 12.3309 6.256C12.3216 5.98884 12.3383 5.7214 12.3807 5.45746C12.4088 5.31925 12.4288 5.17953 12.4407 5.039C12.4421 5.00354 12.44 4.95201 12.44 4.91373C12.4462 4.85219 12.4394 4.79003 12.4201 4.73127C12.4007 4.67251 12.3693 4.61845 12.3278 4.57258C12.2863 4.52672 12.2357 4.49007 12.1791 4.46499C12.1226 4.43991 12.0614 4.42697 11.9995 4.427C11.9377 4.42703 11.8765 4.44003 11.82 4.46516C11.7635 4.49029 11.7128 4.52699 11.6714 4.57289C11.6299 4.6188 11.5986 4.67289 11.5793 4.73167C11.56 4.79045 11.5533 4.85261 11.5596 4.91415C11.5596 4.91832 11.5605 4.92229 11.5606 4.92646C11.5602 4.96296 11.5584 5.00719 11.5596 5.03911C11.5716 5.17973 11.5916 5.31955 11.6196 5.45788C11.6618 5.72177 11.6783 5.98914 11.6687 6.25621C11.6437 6.34413 11.5941 6.42309 11.5258 6.4838L11.5153 6.67008C11.2475 6.69219 10.9816 6.73308 10.7195 6.79243C9.61847 7.04125 8.61693 7.61346 7.84347 8.43561C7.78992 8.39869 7.73687 8.36107 7.6843 8.32276C7.59721 8.34881 7.50338 8.33971 7.42292 8.29741C7.20812 8.1384 7.00935 7.95881 6.82944 7.76119C6.73887 7.65316 6.64216 7.55043 6.53979 7.4535C6.51298 7.43055 6.47199 7.39926 6.44195 7.37527C6.35467 7.30488 6.24713 7.2643 6.1351 7.2595C6.06853 7.25601 6.00208 7.26827 5.94113 7.29527C5.88019 7.32227 5.82647 7.36326 5.78433 7.41491C5.71297 7.51544 5.6843 7.64012 5.70459 7.76173C5.72487 7.88333 5.79246 7.99196 5.89259 8.06388L5.89937 8.06867C5.92816 8.09225 5.96362 8.12239 5.99032 8.1419C6.10778 8.22004 6.22963 8.29136 6.35528 8.35551C6.58794 8.48722 6.80718 8.64135 7.00988 8.81569C7.06253 8.89038 7.09321 8.97833 7.09843 9.06956L7.23935 9.19556C6.46097 10.3634 6.14114 11.7775 6.3412 13.1667L6.15689 13.2203C6.1088 13.2971 6.04416 13.3622 5.96769 13.4108C5.70953 13.4797 5.44526 13.5233 5.17864 13.5409C5.03733 13.5441 4.89632 13.5555 4.75632 13.5749C4.72253 13.5812 4.67559 13.5931 4.63877 13.6022L4.63491 13.6031L4.62865 13.6049C4.56768 13.613 4.50905 13.6336 4.45652 13.6656C4.40399 13.6976 4.35871 13.7402 4.32358 13.7906C4.28846 13.8411 4.26425 13.8984 4.25253 13.9587C4.2408 14.0191 4.2418 14.0813 4.25547 14.1412C4.26914 14.2012 4.29518 14.2576 4.33191 14.3069C4.36865 14.3563 4.41528 14.3974 4.46881 14.4276C4.52235 14.4579 4.58161 14.4766 4.64281 14.4827C4.70401 14.4887 4.7658 14.4819 4.82422 14.4627L4.83079 14.4617C4.83371 14.4611 4.83622 14.4596 4.83914 14.4591C4.87543 14.4507 4.92112 14.4421 4.95303 14.4334C5.08743 14.3905 5.21928 14.34 5.34792 14.2821C5.59582 14.1821 5.85285 14.1065 6.11538 14.0563C6.20642 14.0618 6.29408 14.0928 6.36842 14.1456L6.56034 14.1128C6.99116 15.4438 7.89418 16.5712 9.09906 17.2822L9.01885 17.4741C9.05614 17.5515 9.06981 17.6381 9.05817 17.7231C8.94845 17.9739 8.81503 18.2136 8.65974 18.4391C8.57435 18.5516 8.49554 18.6691 8.4237 18.7908C8.40618 18.8239 8.38396 18.8747 8.36717 18.9095C8.33539 18.9623 8.31504 19.0213 8.30743 19.0825C8.29981 19.1437 8.30509 19.2059 8.32293 19.2649C8.34077 19.324 8.37078 19.3787 8.41102 19.4254C8.45126 19.4722 8.50085 19.51 8.55659 19.5365C8.61233 19.5629 8.67299 19.5774 8.73466 19.579C8.79634 19.5806 8.85766 19.5692 8.91469 19.5457C8.97172 19.5222 9.02319 19.487 9.0658 19.4423C9.1084 19.3977 9.14119 19.3447 9.16206 19.2866L9.16279 19.2858V19.2847C9.17948 19.2503 9.20315 19.2052 9.21723 19.1729C9.26736 19.041 9.30978 18.9063 9.34427 18.7695C9.42028 18.4912 9.53503 18.225 9.68513 17.9787C9.73762 17.9294 9.80374 17.8971 9.87486 17.886L9.97468 17.7056C11.2815 18.2081 12.7275 18.2118 14.0368 17.7159C14.0648 17.7658 14.1169 17.8611 14.1307 17.8852C14.2206 17.8996 14.3013 17.9486 14.3555 18.0218C14.4801 18.2581 14.5814 18.506 14.6578 18.762C14.6926 18.8988 14.7352 19.0335 14.7855 19.1654C14.7998 19.198 14.8231 19.2436 14.84 19.2783C14.8608 19.3364 14.8935 19.3895 14.9361 19.4341C14.9786 19.4788 15.0301 19.5141 15.0871 19.5377C15.1441 19.5613 15.2054 19.5727 15.2671 19.5712C15.3288 19.5697 15.3895 19.5553 15.4453 19.5289C15.5011 19.5026 15.5508 19.4648 15.5911 19.4181C15.6314 19.3714 15.6615 19.3167 15.6794 19.2577C15.6974 19.1987 15.7028 19.1365 15.6953 19.0753C15.6877 19.014 15.6675 18.955 15.6358 18.9021C15.619 18.8673 15.5959 18.8165 15.5784 18.7836C15.5066 18.6622 15.4278 18.545 15.3424 18.4327C15.1899 18.213 15.0591 17.979 14.9521 17.7339C14.9289 17.6462 14.941 17.5529 14.9859 17.4741C14.9577 17.4166 14.9332 17.3572 14.9126 17.2965C16.1213 16.5797 17.0244 15.4436 17.45 14.1043C17.507 14.1134 17.6062 14.1307 17.6384 14.1373C17.7054 14.0758 17.7937 14.043 17.8846 14.0458C18.1472 14.096 18.4043 14.1716 18.6522 14.2716C18.7809 14.3301 18.9128 14.381 19.0473 14.4241C19.0791 14.4325 19.1245 14.4404 19.161 14.4484C19.164 14.4493 19.1668 14.4505 19.1697 14.4514L19.1759 14.4523C19.2343 14.4715 19.2961 14.4782 19.3573 14.4722C19.4184 14.4661 19.4776 14.4474 19.5312 14.4171C19.5847 14.3869 19.6313 14.3458 19.668 14.2965C19.7047 14.2472 19.7308 14.1908 19.7444 14.1309C19.7581 14.0709 19.7591 14.0088 19.7475 13.9485C19.7358 13.8881 19.7116 13.8309 19.6765 13.7804C19.6415 13.7299 19.5963 13.6873 19.5438 13.6553C19.4913 13.6233 19.4327 13.6026 19.3718 13.5945ZM15.1893 9.11087L13.308 10.4446L13.3014 10.4415C13.2447 10.4828 13.1779 10.508 13.108 10.5144C13.0381 10.5208 12.9678 10.5082 12.9046 10.4778C12.8413 10.4474 12.7874 10.4005 12.7487 10.342C12.71 10.2835 12.6879 10.2155 12.6847 10.1454L12.6826 10.1444L12.5519 7.839C13.5466 7.96251 14.4733 8.40937 15.1893 9.11087ZM11.6453 11.6379H12.3533L12.7935 12.1882L12.6356 12.8745L11.9998 13.1805L11.3621 12.8739L11.204 12.1873L11.6453 11.6379ZM10.9792 7.91973C11.1343 7.88483 11.2911 7.85788 11.4489 7.839L11.318 10.1479L11.3084 10.1525C11.3054 10.2226 11.2835 10.2906 11.245 10.3493C11.2064 10.4079 11.1527 10.455 11.0895 10.4855C11.0263 10.5161 10.956 10.5289 10.8861 10.5226C10.8162 10.5164 10.7494 10.4913 10.6926 10.45L10.6889 10.4521L8.79543 9.10951C9.39823 8.51712 10.1546 8.10503 10.9792 7.91973ZM8.10881 9.9724L9.83752 11.5186L9.83564 11.528C9.88863 11.5741 9.92811 11.6337 9.94986 11.7005C9.97162 11.7673 9.97485 11.8387 9.9592 11.9072C9.94354 11.9756 9.9096 12.0386 9.86098 12.0892C9.81237 12.1399 9.75091 12.1765 9.68315 12.195L9.68138 12.2025L7.46547 12.8419C7.35506 11.8405 7.58143 10.8308 8.10881 9.9724ZM10.4234 14.0798L9.54297 16.2073C8.69792 15.6664 8.055 14.8617 7.71392 13.9181L9.98594 13.5321L9.9898 13.5373C10.0149 13.5324 10.0404 13.5302 10.0659 13.5305C10.1297 13.5314 10.1922 13.548 10.2479 13.5789C10.3037 13.6097 10.351 13.6538 10.3857 13.7073C10.4204 13.7607 10.4413 13.8219 10.4468 13.8854C10.4522 13.9489 10.4419 14.0127 10.4168 14.0713L10.4234 14.0798ZM13.0222 16.8157C12.1984 17.0046 11.3383 16.9604 10.5382 16.6881L11.6556 14.6676H11.6575C11.6907 14.6058 11.74 14.5542 11.8002 14.5183C11.8604 14.4823 11.9292 14.4632 11.9993 14.4632C12.0694 14.4631 12.1382 14.482 12.1984 14.5179C12.2587 14.5538 12.3081 14.6053 12.3414 14.667H12.3497L13.47 16.6908C13.3246 16.7394 13.1753 16.7809 13.0222 16.8157ZM14.4658 16.2158L13.5763 14.0667L13.5791 14.0628C13.5396 13.9709 13.5371 13.8673 13.5722 13.7736C13.6072 13.6799 13.677 13.6033 13.7671 13.5598C13.8136 13.5371 13.8641 13.5239 13.9157 13.5212C13.9456 13.5198 13.9756 13.522 14.0049 13.5278L14.0088 13.523L16.301 13.9103C15.9627 14.8615 15.3169 15.6727 14.4658 16.2158ZM16.5418 12.8344L14.3147 12.1929L14.3126 12.1835C14.245 12.1648 14.1837 12.1282 14.1352 12.0775C14.0867 12.0268 14.0529 11.9639 14.0373 11.8955C14.0217 11.8271 14.0249 11.7557 14.0465 11.689C14.0682 11.6223 14.1075 11.5627 14.1603 11.5165L14.1595 11.512L15.8786 9.97345C16.405 10.8296 16.6379 11.8339 16.5418 12.8344Z\"\n fill=\"white\"\n />\n </svg>\n);\n\nexport default Kubernetes;\n","import React from 'react';\nimport { CircularProgress, Link, Typography } from '@material-ui/core';\n\nimport { Table, TableColumn } from '@backstage/core-components';\nimport RetryIcon from '@material-ui/icons/Replay';\nimport { TableData } from '../types';\n\nimport Aws from '../icons/aws';\nimport Azure from '../icons/azure';\nimport Gcp from '../icons/gcp';\nimport Kubernetes from '../icons/kubernetes';\n\nexport const getProviderIcon = (name?: string): React.ReactNode => {\n if (!name) return <Aws />;\n if (name.includes('aws')) {\n return <Aws />;\n }\n\n if (name.includes('azure')) {\n return <Azure />;\n }\n if (name.includes('gcp') || name.includes('google')) {\n return <Gcp />;\n }\n if (name.includes('kubernetes') || name.includes('k8s')) {\n return <Kubernetes />;\n }\n return null;\n};\n\nconst ResourceTable: React.FC<any> = ({\n setRefresh,\n refresh,\n pageSize,\n currTableData,\n page,\n handleChangePage,\n totalElements,\n handleChangeRowsPerPage,\n classes,\n baseUrl,\n}) => {\n const columns: TableColumn[] = [\n {\n title: 'Provider',\n field: 'col1',\n width: '22%',\n render: (row: Partial<TableData>) => {\n return (\n <Link\n href={baseUrl}\n target=\"_blank\"\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n key={row.id}\n >\n <b>{row.provider}</b>\n </Link>\n );\n },\n customFilterAndSearch: (term, row: Partial<TableData>) => {\n const temp = row?.provider ?? '';\n return temp.toLowerCase().indexOf(term.toLowerCase()) > -1;\n },\n customSort: (row1: Partial<TableData>, row2: Partial<TableData>) => {\n const a = row1.provider ?? '';\n const b = row2.provider ?? '';\n return a > b ? 1 : -1;\n },\n },\n {\n title: 'Type',\n field: 'col2',\n width: '18%',\n render: (row: Partial<TableData>) => (\n <span style={{ display: 'flex', gap: '5px' }}>\n {getProviderIcon(row.provider)}\n <Typography style={{ fontSize: 'small', color: 'grey' }}>\n {row.type}\n </Typography>\n </span>\n ),\n customFilterAndSearch: (term, row: Partial<TableData>) => {\n const temp = row?.type ?? '';\n return temp.toLowerCase().indexOf(term.toLowerCase()) > -1;\n },\n customSort: (row1: Partial<TableData>, row2: Partial<TableData>) => {\n const a = row1.type ?? '';\n const b = row2.type ?? '';\n return a > b ? 1 : -1;\n },\n },\n {\n title: 'Name',\n field: 'col3',\n width: '30%',\n render: (row: Partial<TableData>) => (\n <Typography style={{ fontSize: 'small', color: 'grey' }}>\n {row.name}\n </Typography>\n ),\n customFilterAndSearch: (term, row: Partial<TableData>) => {\n const temp = row?.name ?? '';\n return temp.toLowerCase().indexOf(term.toLowerCase()) > -1;\n },\n customSort: (row1: Partial<TableData>, row2: Partial<TableData>) => {\n const a = row1.name ?? '';\n const b = row2.name ?? '';\n return a > b ? 1 : -1;\n },\n },\n {\n title: 'Module',\n field: 'col4',\n width: '20%',\n render: (row: Partial<TableData>) => (\n <Typography style={{ fontSize: 'small', color: 'grey' }}>\n {row.module}\n </Typography>\n ),\n customFilterAndSearch: (term, row: Partial<TableData>) => {\n const temp = row?.module ?? '';\n return temp.toLowerCase().indexOf(term.toLowerCase()) > -1;\n },\n customSort: (row1: Partial<TableData>, row2: Partial<TableData>) => {\n const a = row1.module ?? '';\n const b = row2.module ?? '';\n return a > b ? 1 : -1;\n },\n },\n ];\n\n return (\n <Table\n options={{\n paging: true,\n filtering: false,\n emptyRowsWhenPaging: false,\n pageSize: pageSize,\n pageSizeOptions: [5, 10, 25],\n }}\n key=\"id'\"\n data={currTableData ?? []}\n columns={columns}\n actions={[\n {\n icon: () => <RetryIcon />,\n tooltip: 'Refresh Data',\n isFreeAction: true,\n onClick: () => {\n setRefresh(!refresh);\n },\n },\n ]}\n emptyContent={\n <div className={classes.empty}>\n <CircularProgress />\n </div>\n }\n title=\"Workspace Resources\"\n page={page}\n onPageChange={handleChangePage}\n totalCount={totalElements}\n onRowsPerPageChange={handleChangeRowsPerPage}\n />\n );\n};\n\nexport default ResourceTable;\n","/* eslint-disable @backstage/no-undeclared-imports */\nimport React, { useState } from 'react';\nimport {\n CircularProgress,\n FormControl,\n FormHelperText,\n InputLabel,\n ListSubheader,\n makeStyles,\n MenuItem,\n Select,\n} from '@material-ui/core';\n// eslint-disable-next-line no-restricted-imports\nimport { Grid } from '@mui/material';\nimport { discoveryApiRef, useApi } from '@backstage/core-plugin-api';\nimport { AsyncStatus } from '../../types';\nimport useGetResources from '../../hooks/useGetResources';\nimport useProjectUrlSlugEntity from '../../hooks/useProjectUrlEntity';\nimport { useResourceSlugFromEntity } from './useResourceSlugFromEntity';\nimport ResourceTable from '../ResourceTable';\n\nconst useStyles = makeStyles(theme => ({\n container: {\n width: '100%',\n },\n label: {\n marginBottom: '2px',\n fontSize: '1rem !important',\n fontWeight: 400,\n },\n empty: {\n padding: theme.spacing(2),\n display: 'flex',\n justifyContent: 'center',\n },\n select: {\n border: '1px solid gray ',\n paddingLeft: '5px',\n height: '56px',\n fontWeight: 400,\n fontSize: '1rem',\n color: 'rgba(0, 0, 0, 0.87)',\n borderRadius: '4px',\n },\n menuItem: {\n paddingLeft: '10px',\n display: 'flex',\n alignItems: 'center',\n gap: '5px',\n },\n}));\n\nexport interface Workspace {\n identifier: string;\n name: string;\n}\n\nfunction WorkspaceList() {\n const [refresh, setRefresh] = useState(false);\n\n const classes = useStyles();\n const discoveryApi = useApi(discoveryApiRef);\n const backendBaseUrl = discoveryApi.getBaseUrl('proxy');\n\n const { isWorkspaceAnnotationPresent, harnessWorkspaceUrlObject } =\n useProjectUrlSlugEntity();\n\n const [selectedProjectUrl, setSelectedProjectUrl] = useState(() => {\n return Object.keys(harnessWorkspaceUrlObject)[0];\n });\n\n const [selectedResourceUrl, setSelectedResourceUrl] = useState(() => {\n return harnessWorkspaceUrlObject[Object.keys(harnessWorkspaceUrlObject)[0]];\n });\n const [page, setPage] = useState(0);\n const [pageSize, setPageSize] = useState(5);\n\n const {\n projectId,\n orgId,\n accountId,\n envFromUrl,\n workspaceId,\n cleanedString: urlForWorkspace,\n } = useResourceSlugFromEntity(\n isWorkspaceAnnotationPresent,\n selectedResourceUrl,\n );\n\n const { resources, status: state } = useGetResources({\n backendBaseUrl,\n accountId,\n orgId,\n projectId,\n refresh,\n envFromUrl,\n workspace: workspaceId || null,\n });\n\n const handleWorkspaceChange = (event: any) => {\n setSelectedProjectUrl(event.target.value as string);\n\n setSelectedResourceUrl(harnessWorkspaceUrlObject[event.target.value]);\n };\n\n const handleChangePage = (currentPage: number, currentPageSize: number) => {\n setPage(currentPage);\n setPageSize(currentPageSize);\n };\n\n const handleChangeRowsPerPage = (currentPageSize: number) => {\n setPage(0);\n setPageSize(currentPageSize);\n };\n\n const newWorkspaceDropdown = (\n <FormControl fullWidth>\n <InputLabel\n htmlFor=\"Service/Workspace\"\n classes={{\n root: classes.label,\n }}\n >\n Service / Workspace\n </InputLabel>\n <Select\n displayEmpty\n labelId=\"Workspaces\"\n id=\"Workspaces\"\n value={selectedProjectUrl}\n onChange={e => handleWorkspaceChange(e)}\n className={classes.select}\n >\n {Object.keys(harnessWorkspaceUrlObject).length > 0 ? (\n <ListSubheader>Workspaces</ListSubheader>\n ) : null}\n {Object.keys(harnessWorkspaceUrlObject).map(workspace => (\n <MenuItem value={workspace} key={workspace}>\n <span className={classes.menuItem}>{workspace}</span>\n </MenuItem>\n ))}\n </Select>\n <FormHelperText />\n </FormControl>\n );\n const DropDownComponent = (\n <Grid container spacing={3} marginBottom={4} marginLeft={1} paddingTop={2}>\n {isWorkspaceAnnotationPresent ? (\n <Grid item md={3}>\n {newWorkspaceDropdown}\n </Grid>\n ) : null}\n </Grid>\n );\n\n if (state === AsyncStatus.Init || state === AsyncStatus.Loading) {\n return (\n <div className={classes.empty}>\n <CircularProgress />\n </div>\n );\n }\n return (\n <>\n <div className={classes.container}>\n {DropDownComponent}\n <ResourceTable\n accountId={accountId}\n orgId={orgId}\n backendBaseUrl={backendBaseUrl}\n setRefresh={setRefresh}\n refresh={refresh}\n pageSize={pageSize}\n currTableData={resources?.resources}\n page={page}\n handleChangePage={handleChangePage}\n totalElements={resources?.resources?.length}\n handleChangeRowsPerPage={handleChangeRowsPerPage}\n classes={classes}\n baseUrl={urlForWorkspace}\n />\n </div>\n </>\n );\n}\nexport default WorkspaceList;\n","/* eslint-disable import/no-extraneous-dependencies */\n/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport { Routes, Route } from 'react-router';\nimport WorkspaceList from './WorkspaceList';\nimport { Entity } from '@backstage/catalog-model';\nimport { useEntity } from '@backstage/plugin-catalog-react';\nimport { MissingAnnotationEmptyState } from '@backstage/core-components';\n\n/** @public */\nexport const isHarnessIacmAvailable = (entity: Entity) =>\n Boolean(entity.metadata.annotations?.['harness.io/workspace-url']);\n\n/** @public */\n\nexport const Router = () => {\n const { entity } = useEntity();\n if (!isHarnessIacmAvailable(entity)) {\n return (\n <>\n <MissingAnnotationEmptyState annotation=\"harness.io/workspace-url\" />\n </>\n );\n }\n\n return (\n <Routes>\n <Route path=\"/\" element={<WorkspaceList />} />\n </Routes>\n );\n};\n","import { createRouteRef } from '@backstage/core-plugin-api';\n\nexport const rootRouteRef = createRouteRef({\n id: 'harness-iacm',\n});\n","import {\n createPlugin,\n createRoutableExtension,\n} from '@backstage/core-plugin-api';\n\nimport { rootRouteRef } from './routes';\n\nexport const harnessIacmPlugin = createPlugin({\n id: 'harness-iacm',\n routes: {\n root: rootRouteRef,\n },\n});\n\nexport const EntityIacmContent = harnessIacmPlugin.provide(\n createRoutableExtension({\n name: 'HarnessIacmPage',\n component: () => import('./components/Router').then(m => m.Router),\n mountPoint: rootRouteRef,\n }),\n);\n"],"names":["AsyncStatus"],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "@harnessio/backstage-plugin-harness-iacm",
3
+ "version": "0.1.0-beta",
4
+ "main": "dist/index.esm.js",
5
+ "types": "dist/index.d.ts",
6
+ "license": "Apache-2.0",
7
+ "private": false,
8
+ "publishConfig": {
9
+ "access": "public",
10
+ "main": "dist/index.esm.js",
11
+ "types": "dist/index.d.ts"
12
+ },
13
+ "backstage": {
14
+ "role": "frontend-plugin"
15
+ },
16
+ "sideEffects": false,
17
+ "scripts": {
18
+ "start": "backstage-cli package start",
19
+ "build": "backstage-cli package build",
20
+ "lint": "backstage-cli package lint",
21
+ "test": "backstage-cli package test",
22
+ "clean": "backstage-cli package clean",
23
+ "prepack": "backstage-cli package prepack",
24
+ "postpack": "backstage-cli package postpack"
25
+ },
26
+ "dependencies": {
27
+ "@backstage/catalog-model": "^1.5.0",
28
+ "@backstage/core-components": "^0.14.0",
29
+ "@backstage/core-plugin-api": "^1.9.0",
30
+ "@backstage/plugin-catalog-react": "^1.12.0",
31
+ "@backstage/theme": "^0.5.1",
32
+ "@material-ui/core": "^4.9.13",
33
+ "@material-ui/icons": "^4.9.1",
34
+ "@material-ui/lab": "4.0.0-alpha.61",
35
+ "dayjs": "^1.11.11",
36
+ "path-to-regexp": "^6.2.2",
37
+ "react-use": "^17.2.4"
38
+ },
39
+ "peerDependencies": {
40
+ "react": "^16.13.1 || ^17.0.0 || ^18.0.0",
41
+ "react-router": "^6.23.1"
42
+ },
43
+ "devDependencies": {
44
+ "@backstage/cli": "^0.25.0",
45
+ "@backstage/core-app-api": "^1.12.0",
46
+ "@backstage/dev-utils": "^1.0.25",
47
+ "@backstage/test-utils": "^1.4.6",
48
+ "@testing-library/jest-dom": "^6.0.0",
49
+ "@testing-library/react": "^14.0.0",
50
+ "@testing-library/user-event": "^14.0.0",
51
+ "msw": "^1.0.0"
52
+ },
53
+ "files": [
54
+ "dist"
55
+ ],
56
+ "module": "./dist/index.esm.js"
57
+ }
package/src/index.ts ADDED
@@ -0,0 +1,5 @@
1
+ export { isHarnessIacmAvailable } from './components/Router';
2
+
3
+ export { harnessIacmPlugin, EntityIacmContent } from './plugin';
4
+ export { Router } from './components/Router';
5
+ export * from './components/Router';