@replicated/portal-components 0.0.11 → 0.0.13
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/components/metadata/registry.json +2 -2
- package/components/metadata/registry.md +2 -2
- package/datadog/tracer.d.ts +3 -0
- package/datadog/tracer.js +82 -0
- package/datadog/tracer.ts +101 -0
- package/dist/actions/index.d.mts +26 -4
- package/dist/actions/index.d.ts +26 -4
- package/dist/actions/index.js +171 -124
- package/dist/actions/index.js.map +1 -1
- package/dist/airgap-instances.js.map +1 -1
- package/dist/esm/actions/index.js +170 -124
- package/dist/esm/actions/index.js.map +1 -1
- package/dist/esm/airgap-instances.js.map +1 -1
- package/dist/esm/helm-install-wizard.js +15 -9
- package/dist/esm/helm-install-wizard.js.map +1 -1
- package/dist/esm/index.js +204 -158
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/install-actions.js +42 -47
- package/dist/esm/install-actions.js.map +1 -1
- package/dist/esm/install-card.js +8 -21
- package/dist/esm/install-card.js.map +1 -1
- package/dist/esm/instance-card.js.map +1 -1
- package/dist/esm/license-card.js +8 -12
- package/dist/esm/license-card.js.map +1 -1
- package/dist/esm/license-details.js +21 -11
- package/dist/esm/license-details.js.map +1 -1
- package/dist/esm/linux-install-wizard.js +26 -47
- package/dist/esm/linux-install-wizard.js.map +1 -1
- package/dist/esm/online-instance-list.js.map +1 -1
- package/dist/esm/support-card.js +22 -55
- package/dist/esm/support-card.js.map +1 -1
- package/dist/esm/team-settings-card.js +8 -13
- package/dist/esm/team-settings-card.js.map +1 -1
- package/dist/esm/top-nav.js +69 -47
- package/dist/esm/top-nav.js.map +1 -1
- package/dist/esm/update-layout.js +69 -47
- package/dist/esm/update-layout.js.map +1 -1
- package/dist/esm/updates-card.js +8 -14
- package/dist/esm/updates-card.js.map +1 -1
- package/dist/esm/utils/index.js +14 -10
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/esm/utils/observability/index.js +193 -0
- package/dist/esm/utils/observability/index.js.map +1 -0
- package/dist/helm-install-wizard.js +15 -9
- package/dist/helm-install-wizard.js.map +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +203 -156
- package/dist/index.js.map +1 -1
- package/dist/install-actions.js +43 -48
- package/dist/install-actions.js.map +1 -1
- package/dist/install-card.js +8 -21
- package/dist/install-card.js.map +1 -1
- package/dist/instance-card.js.map +1 -1
- package/dist/license-card.js +8 -12
- package/dist/license-card.js.map +1 -1
- package/dist/license-details.js +21 -11
- package/dist/license-details.js.map +1 -1
- package/dist/linux-install-wizard.js +26 -47
- package/dist/linux-install-wizard.js.map +1 -1
- package/dist/online-instance-list.js.map +1 -1
- package/dist/styles.css +2 -2
- package/dist/support-card.js +22 -55
- package/dist/support-card.js.map +1 -1
- package/dist/team-settings-card.js +8 -13
- package/dist/team-settings-card.js.map +1 -1
- package/dist/top-nav.js +69 -47
- package/dist/top-nav.js.map +1 -1
- package/dist/update-layout.js +69 -47
- package/dist/update-layout.js.map +1 -1
- package/dist/updates-card.js +8 -14
- package/dist/updates-card.js.map +1 -1
- package/dist/utils/index.js +14 -10
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/observability/index.d.mts +13 -0
- package/dist/utils/observability/index.d.ts +13 -0
- package/dist/utils/observability/index.js +198 -0
- package/dist/utils/observability/index.js.map +1 -0
- package/instrumentation.d.ts +8 -0
- package/instrumentation.js +22 -0
- package/package.json +16 -3
package/dist/index.js
CHANGED
|
@@ -16,7 +16,7 @@ var Link__default = /*#__PURE__*/_interopDefault(Link);
|
|
|
16
16
|
|
|
17
17
|
// package.json
|
|
18
18
|
var package_default = {
|
|
19
|
-
version: "0.0.
|
|
19
|
+
version: "0.0.13"};
|
|
20
20
|
|
|
21
21
|
// src/tokens/index.ts
|
|
22
22
|
var baseTokens = {
|
|
@@ -193,7 +193,7 @@ var initiateLogin = defineServerAction({
|
|
|
193
193
|
visibility: "customer",
|
|
194
194
|
tags: ["auth", "login", "session"],
|
|
195
195
|
async run(input) {
|
|
196
|
-
const endpoint = `${getApiOrigin()}/
|
|
196
|
+
const endpoint = `${getApiOrigin()}/enterprise-portal/auth/magic-link`;
|
|
197
197
|
const appSlug = process.env.PORTAL_APP_SLUG;
|
|
198
198
|
if (!appSlug) {
|
|
199
199
|
throw new Error("PORTAL_APP_SLUG is not configured");
|
|
@@ -243,7 +243,7 @@ var verifyMagicLink = defineServerAction({
|
|
|
243
243
|
visibility: "customer",
|
|
244
244
|
tags: ["auth", "login", "verify"],
|
|
245
245
|
async run({ nonce }) {
|
|
246
|
-
const endpoint = `${getApiOrigin()}/
|
|
246
|
+
const endpoint = `${getApiOrigin()}/enterprise-portal/auth/magic-link/verify`;
|
|
247
247
|
if (process.env.NODE_ENV !== "production") {
|
|
248
248
|
console.debug(
|
|
249
249
|
"[portal-components] verifying magic link via %s",
|
|
@@ -299,12 +299,12 @@ var fetchCustomBrandingImpl = async () => {
|
|
|
299
299
|
if (!appSlug) {
|
|
300
300
|
throw new Error("PORTAL_APP_SLUG is not configured");
|
|
301
301
|
}
|
|
302
|
-
const url = `${getApiOrigin()}/
|
|
302
|
+
const url = `${getApiOrigin()}/enterprise-portal/public/branding?app_slug=${encodeURIComponent(
|
|
303
303
|
appSlug
|
|
304
304
|
)}`;
|
|
305
305
|
if (process.env.NODE_ENV !== "production") {
|
|
306
306
|
console.debug(
|
|
307
|
-
"[portal-components] fetching custom branding via %s",
|
|
307
|
+
"[portal-components] fetching custom branding via %s (Enterprise Portal API)",
|
|
308
308
|
url
|
|
309
309
|
);
|
|
310
310
|
}
|
|
@@ -319,13 +319,18 @@ var fetchCustomBrandingImpl = async () => {
|
|
|
319
319
|
);
|
|
320
320
|
}
|
|
321
321
|
const payload = await response.json();
|
|
322
|
-
const
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
322
|
+
const brandingObject = {
|
|
323
|
+
logo: payload.logoUrl,
|
|
324
|
+
title: payload.appName,
|
|
325
|
+
customColor1: payload.primaryColor,
|
|
326
|
+
customColor2: payload.secondaryColor,
|
|
327
|
+
favicon: payload.faviconUrl
|
|
328
|
+
};
|
|
329
|
+
const brandingData = buffer.Buffer.from(JSON.stringify(brandingObject)).toString("base64");
|
|
326
330
|
return {
|
|
327
331
|
brandingData,
|
|
328
|
-
documentation:
|
|
332
|
+
documentation: null
|
|
333
|
+
// Documentation not included in new API's public endpoint
|
|
329
334
|
};
|
|
330
335
|
};
|
|
331
336
|
var fetchCustomBranding = react.cache(fetchCustomBrandingImpl);
|
|
@@ -342,7 +347,7 @@ var decodeJwtPayload = (token) => {
|
|
|
342
347
|
payloadSegment.length + (4 - payloadSegment.length % 4) % 4,
|
|
343
348
|
"="
|
|
344
349
|
);
|
|
345
|
-
const decoded = Buffer.from(padded, "base64").toString("utf-8");
|
|
350
|
+
const decoded = buffer.Buffer.from(padded, "base64").toString("utf-8");
|
|
346
351
|
return JSON.parse(decoded);
|
|
347
352
|
};
|
|
348
353
|
var getCustomerIdFromToken = (token) => {
|
|
@@ -353,22 +358,6 @@ var getCustomerIdFromToken = (token) => {
|
|
|
353
358
|
}
|
|
354
359
|
return customerId.trim();
|
|
355
360
|
};
|
|
356
|
-
var resolveSupportBundlesEndpoint = () => {
|
|
357
|
-
const fallback = `${getApiOrigin()}/v3/supportbundles`;
|
|
358
|
-
const explicit = process.env.SUPPORT_BUNDLES_ENDPOINT;
|
|
359
|
-
if (!explicit) {
|
|
360
|
-
return new URL(fallback);
|
|
361
|
-
}
|
|
362
|
-
try {
|
|
363
|
-
return new URL(explicit);
|
|
364
|
-
} catch (error) {
|
|
365
|
-
console.warn(
|
|
366
|
-
`[portal-components] invalid SUPPORT_BUNDLES_ENDPOINT, using fallback`,
|
|
367
|
-
error
|
|
368
|
-
);
|
|
369
|
-
return new URL(fallback);
|
|
370
|
-
}
|
|
371
|
-
};
|
|
372
361
|
var listSupportBundles = defineServerAction({
|
|
373
362
|
id: "support/list-bundles",
|
|
374
363
|
description: "Fetches support bundles associated with the customer found in the portal session JWT.",
|
|
@@ -378,17 +367,11 @@ var listSupportBundles = defineServerAction({
|
|
|
378
367
|
if (!token || typeof token !== "string") {
|
|
379
368
|
throw new Error("Support bundle listing requires a session token");
|
|
380
369
|
}
|
|
381
|
-
const
|
|
382
|
-
const customerId = payload?.customer_id;
|
|
383
|
-
if (typeof customerId !== "string" || !customerId.trim()) {
|
|
384
|
-
throw new Error("Unable to determine customer_id from session token");
|
|
385
|
-
}
|
|
386
|
-
const url = resolveSupportBundlesEndpoint();
|
|
387
|
-
url.searchParams.set("customer_id", customerId.trim());
|
|
370
|
+
const url = `${getApiOrigin()}/enterprise-portal/support-bundles`;
|
|
388
371
|
if (process.env.NODE_ENV !== "production") {
|
|
389
|
-
console.debug("[portal-components] fetching support bundles via %s", url);
|
|
372
|
+
console.debug("[portal-components] fetching support bundles via %s (Enterprise Portal API)", url);
|
|
390
373
|
}
|
|
391
|
-
const response = await authenticatedFetch(url
|
|
374
|
+
const response = await authenticatedFetch(url, {
|
|
392
375
|
token,
|
|
393
376
|
headers: {
|
|
394
377
|
accept: "application/json"
|
|
@@ -403,7 +386,8 @@ var listSupportBundles = defineServerAction({
|
|
|
403
386
|
`Support bundles request failed (${response.status} ${response.statusText})`
|
|
404
387
|
);
|
|
405
388
|
}
|
|
406
|
-
const
|
|
389
|
+
const payload = await response.json();
|
|
390
|
+
const raw = payload.data;
|
|
407
391
|
const rawRecord = raw && typeof raw === "object" ? raw : void 0;
|
|
408
392
|
const parseInsights = (raw2) => {
|
|
409
393
|
if (!Array.isArray(raw2)) return void 0;
|
|
@@ -494,12 +478,8 @@ var downloadSupportBundle = defineServerAction({
|
|
|
494
478
|
if (!bundleId || typeof bundleId !== "string") {
|
|
495
479
|
throw new Error("Support bundle download requires a bundle ID");
|
|
496
480
|
}
|
|
497
|
-
const
|
|
498
|
-
const
|
|
499
|
-
if (typeof customerId !== "string" || !customerId.trim()) {
|
|
500
|
-
throw new Error("Unable to determine customer_id from session token");
|
|
501
|
-
}
|
|
502
|
-
const endpoint = `${getApiOrigin()}/v3/supportbundle/${encodeURIComponent(bundleId)}/download?customer_id=${encodeURIComponent(customerId.trim())}`;
|
|
481
|
+
const customerId = getCustomerIdFromToken(token);
|
|
482
|
+
const endpoint = `${getApiOrigin()}/enterprise-portal/support-bundles/${encodeURIComponent(bundleId)}/download?customer_id=${encodeURIComponent(customerId)}`;
|
|
503
483
|
if (process.env.NODE_ENV !== "production") {
|
|
504
484
|
console.debug("[portal-components] getting support bundle download URL via %s", endpoint);
|
|
505
485
|
}
|
|
@@ -537,12 +517,8 @@ var deleteSupportBundle = defineServerAction({
|
|
|
537
517
|
if (!bundleId || typeof bundleId !== "string") {
|
|
538
518
|
throw new Error("Support bundle deletion requires a bundle ID");
|
|
539
519
|
}
|
|
540
|
-
const
|
|
541
|
-
const
|
|
542
|
-
if (typeof customerId !== "string" || !customerId.trim()) {
|
|
543
|
-
throw new Error("Unable to determine customer_id from session token");
|
|
544
|
-
}
|
|
545
|
-
const endpoint = `${getApiOrigin()}/v3/supportbundle/${encodeURIComponent(bundleId)}?customer_id=${encodeURIComponent(customerId.trim())}`;
|
|
520
|
+
const customerId = getCustomerIdFromToken(token);
|
|
521
|
+
const endpoint = `${getApiOrigin()}/enterprise-portal/support-bundles/${encodeURIComponent(bundleId)}?customer_id=${encodeURIComponent(customerId)}`;
|
|
546
522
|
if (process.env.NODE_ENV !== "production") {
|
|
547
523
|
console.debug("[portal-components] deleting support bundle via %s", endpoint);
|
|
548
524
|
}
|
|
@@ -581,7 +557,7 @@ var uploadSupportBundle = defineServerAction({
|
|
|
581
557
|
if (!fileContent || !(fileContent instanceof ArrayBuffer)) {
|
|
582
558
|
throw new Error("Support bundle upload requires file content");
|
|
583
559
|
}
|
|
584
|
-
const endpoint = `${getApiOrigin()}/
|
|
560
|
+
const endpoint = `${getApiOrigin()}/enterprise-portal/support-bundles/upload/${encodeURIComponent(appId)}`;
|
|
585
561
|
if (process.env.NODE_ENV !== "production") {
|
|
586
562
|
console.debug("[portal-components] uploading support bundle via %s", endpoint);
|
|
587
563
|
}
|
|
@@ -609,7 +585,7 @@ var uploadSupportBundle = defineServerAction({
|
|
|
609
585
|
}
|
|
610
586
|
});
|
|
611
587
|
var getSupportBundleUploadUrl = (appId) => {
|
|
612
|
-
return `${getApiOrigin()}/
|
|
588
|
+
return `${getApiOrigin()}/enterprise-portal/support-bundles/upload/${encodeURIComponent(appId)}`;
|
|
613
589
|
};
|
|
614
590
|
var listReleases = defineServerAction({
|
|
615
591
|
id: "releases/list",
|
|
@@ -620,10 +596,10 @@ var listReleases = defineServerAction({
|
|
|
620
596
|
if (!token || typeof token !== "string") {
|
|
621
597
|
throw new Error("List releases requires a session token");
|
|
622
598
|
}
|
|
623
|
-
const endpoint = `${getApiOrigin()}/
|
|
624
|
-
|
|
625
|
-
endpoint
|
|
626
|
-
}
|
|
599
|
+
const endpoint = `${getApiOrigin()}/enterprise-portal/releases`;
|
|
600
|
+
if (process.env.NODE_ENV !== "production") {
|
|
601
|
+
console.debug("[portal-components] fetching releases via %s (Enterprise Portal API)", endpoint);
|
|
602
|
+
}
|
|
627
603
|
const response = await authenticatedFetch(endpoint, {
|
|
628
604
|
method: "GET",
|
|
629
605
|
token,
|
|
@@ -636,7 +612,6 @@ var listReleases = defineServerAction({
|
|
|
636
612
|
console.warn("[portal-components] listReleases read error", error);
|
|
637
613
|
return null;
|
|
638
614
|
});
|
|
639
|
-
console.log("[portal-components] listReleases response", response.status, bodyText);
|
|
640
615
|
if (!response.ok) {
|
|
641
616
|
throw new Error(
|
|
642
617
|
`List releases request failed (${response.status} ${response.statusText})`
|
|
@@ -933,7 +908,10 @@ var fetchLicenseDetails = defineServerAction({
|
|
|
933
908
|
if (typeof token !== "string" || token.trim().length === 0) {
|
|
934
909
|
throw new Error("fetchLicenseDetails requires a non-empty token");
|
|
935
910
|
}
|
|
936
|
-
const endpoint = `${getApiOrigin()}/
|
|
911
|
+
const endpoint = `${getApiOrigin()}/enterprise-portal/license`;
|
|
912
|
+
if (process.env.NODE_ENV !== "production") {
|
|
913
|
+
console.debug("[portal-components] fetching license via %s (Enterprise Portal API)", endpoint);
|
|
914
|
+
}
|
|
937
915
|
const response = await authenticatedFetch(endpoint, {
|
|
938
916
|
method: "GET",
|
|
939
917
|
token,
|
|
@@ -948,10 +926,11 @@ var fetchLicenseDetails = defineServerAction({
|
|
|
948
926
|
);
|
|
949
927
|
}
|
|
950
928
|
const payload = await response.json();
|
|
951
|
-
const
|
|
929
|
+
const licenseData = payload.data;
|
|
930
|
+
const license = normalizeLicensePayload(licenseData);
|
|
952
931
|
return {
|
|
953
932
|
license,
|
|
954
|
-
raw:
|
|
933
|
+
raw: licenseData ?? null
|
|
955
934
|
};
|
|
956
935
|
}
|
|
957
936
|
});
|
|
@@ -964,16 +943,14 @@ var getSecurityInfo = defineServerAction({
|
|
|
964
943
|
if (!token || typeof token !== "string") {
|
|
965
944
|
throw new Error("Security info request requires a session token");
|
|
966
945
|
}
|
|
967
|
-
const customerId = getCustomerIdFromToken(token);
|
|
968
946
|
const params = new URLSearchParams({
|
|
969
|
-
customer_id: customerId,
|
|
970
947
|
install_type: installType,
|
|
971
948
|
channel_sequence: channelSequence.toString(),
|
|
972
949
|
is_airgap: isAirgap.toString()
|
|
973
950
|
});
|
|
974
|
-
const url = `${getApiOrigin()}/
|
|
951
|
+
const url = `${getApiOrigin()}/enterprise-portal/security?${params.toString()}`;
|
|
975
952
|
if (process.env.NODE_ENV !== "production") {
|
|
976
|
-
console.debug("[portal-components] fetching security info via %s", url);
|
|
953
|
+
console.debug("[portal-components] fetching security info via %s (Enterprise Portal API)", url);
|
|
977
954
|
}
|
|
978
955
|
const response = await authenticatedFetch(url, {
|
|
979
956
|
token,
|
|
@@ -985,8 +962,8 @@ var getSecurityInfo = defineServerAction({
|
|
|
985
962
|
`Security info request failed (${response.status} ${response.statusText})`
|
|
986
963
|
);
|
|
987
964
|
}
|
|
988
|
-
const
|
|
989
|
-
return data;
|
|
965
|
+
const payload = await response.json();
|
|
966
|
+
return payload.data;
|
|
990
967
|
}
|
|
991
968
|
});
|
|
992
969
|
var getSecurityInfoDiff = defineServerAction({
|
|
@@ -998,15 +975,13 @@ var getSecurityInfoDiff = defineServerAction({
|
|
|
998
975
|
if (!token || typeof token !== "string") {
|
|
999
976
|
throw new Error("Security info diff request requires a session token");
|
|
1000
977
|
}
|
|
1001
|
-
const customerId = getCustomerIdFromToken(token);
|
|
1002
978
|
const params = new URLSearchParams({
|
|
1003
|
-
customer_id: customerId,
|
|
1004
979
|
install_type: installType,
|
|
1005
980
|
from_channel_sequence: fromChannelSequence.toString(),
|
|
1006
981
|
to_channel_sequence: toChannelSequence.toString(),
|
|
1007
982
|
is_airgap: isAirgap.toString()
|
|
1008
983
|
});
|
|
1009
|
-
const url = `${getApiOrigin()}/
|
|
984
|
+
const url = `${getApiOrigin()}/enterprise-portal/security-diff?${params.toString()}`;
|
|
1010
985
|
if (process.env.NODE_ENV !== "production") {
|
|
1011
986
|
console.debug("[portal-components] fetching security info diff via %s", url);
|
|
1012
987
|
}
|
|
@@ -1020,8 +995,8 @@ var getSecurityInfoDiff = defineServerAction({
|
|
|
1020
995
|
`Security info diff request failed (${response.status} ${response.statusText})`
|
|
1021
996
|
);
|
|
1022
997
|
}
|
|
1023
|
-
const
|
|
1024
|
-
return data;
|
|
998
|
+
const envelope = await response.json();
|
|
999
|
+
return envelope.data;
|
|
1025
1000
|
}
|
|
1026
1001
|
});
|
|
1027
1002
|
var getSecurityInfoSBOM = defineServerAction({
|
|
@@ -1033,15 +1008,13 @@ var getSecurityInfoSBOM = defineServerAction({
|
|
|
1033
1008
|
if (!token || typeof token !== "string") {
|
|
1034
1009
|
throw new Error("Security SBOM request requires a session token");
|
|
1035
1010
|
}
|
|
1036
|
-
const customerId = getCustomerIdFromToken(token);
|
|
1037
1011
|
const params = new URLSearchParams({
|
|
1038
|
-
customer_id: customerId,
|
|
1039
1012
|
install_type: installType,
|
|
1040
1013
|
channel_sequence: channelSequence.toString(),
|
|
1041
1014
|
is_airgap: isAirgap.toString(),
|
|
1042
1015
|
unified_sbom: unifiedSbom.toString()
|
|
1043
1016
|
});
|
|
1044
|
-
const url = `${getApiOrigin()}/
|
|
1017
|
+
const url = `${getApiOrigin()}/enterprise-portal/security-sbom?${params.toString()}`;
|
|
1045
1018
|
if (process.env.NODE_ENV !== "production") {
|
|
1046
1019
|
console.debug("[portal-components] fetching security SBOM via %s", url);
|
|
1047
1020
|
}
|
|
@@ -1058,8 +1031,77 @@ var getSecurityInfoSBOM = defineServerAction({
|
|
|
1058
1031
|
`Security SBOM request failed (${response.status} ${response.statusText})`
|
|
1059
1032
|
);
|
|
1060
1033
|
}
|
|
1061
|
-
const
|
|
1062
|
-
return data;
|
|
1034
|
+
const envelope = await response.json();
|
|
1035
|
+
return envelope.data;
|
|
1036
|
+
}
|
|
1037
|
+
});
|
|
1038
|
+
var fetchDashboardComposite = defineServerAction({
|
|
1039
|
+
id: "dashboard/fetch-composite",
|
|
1040
|
+
description: "Fetches all dashboard data from the composite Enterprise Portal API endpoint",
|
|
1041
|
+
visibility: "customer",
|
|
1042
|
+
tags: ["dashboard", "enterprise-portal-api"],
|
|
1043
|
+
async run({ token }, context) {
|
|
1044
|
+
if (!token || typeof token !== "string") {
|
|
1045
|
+
throw new Error("Dashboard request requires a session token");
|
|
1046
|
+
}
|
|
1047
|
+
const origin = getApiOrigin();
|
|
1048
|
+
const url = `${origin}/enterprise-portal/dashboard`;
|
|
1049
|
+
if (process.env.NODE_ENV !== "production") {
|
|
1050
|
+
console.debug("[portal-components] fetching dashboard via %s (Enterprise Portal API)", url);
|
|
1051
|
+
}
|
|
1052
|
+
const response = await authenticatedFetch(url, {
|
|
1053
|
+
method: "GET",
|
|
1054
|
+
token,
|
|
1055
|
+
headers: { accept: "application/json" },
|
|
1056
|
+
signal: context?.signal
|
|
1057
|
+
});
|
|
1058
|
+
if (!response.ok) {
|
|
1059
|
+
throw new Error(
|
|
1060
|
+
`Dashboard request failed (${response.status} ${response.statusText})`
|
|
1061
|
+
);
|
|
1062
|
+
}
|
|
1063
|
+
const payload = await response.json();
|
|
1064
|
+
const data = payload.data;
|
|
1065
|
+
const allInstances = data?.instances || [];
|
|
1066
|
+
const channelReleases = data?.channelReleases || [];
|
|
1067
|
+
const licenseData = data?.license || {};
|
|
1068
|
+
const teamStats = data?.teamStats || {};
|
|
1069
|
+
const onlineInstances = allInstances.filter((i) => !i.isAirgap);
|
|
1070
|
+
const airgapInstances = allInstances.filter((i) => i.isAirgap);
|
|
1071
|
+
const twentyFourHoursAgo = Date.now() - 24 * 60 * 60 * 1e3;
|
|
1072
|
+
const activeOnlineInstances = onlineInstances.filter((instance) => {
|
|
1073
|
+
const lastCheckin = instance.lastCheckin ? new Date(instance.lastCheckin).getTime() : 0;
|
|
1074
|
+
return lastCheckin > twentyFourHoursAgo;
|
|
1075
|
+
});
|
|
1076
|
+
const onlineActiveCount = activeOnlineInstances.length;
|
|
1077
|
+
const airgapCount = airgapInstances.length;
|
|
1078
|
+
const calculateUpdates = (instances) => {
|
|
1079
|
+
if (!channelReleases.length) return 0;
|
|
1080
|
+
let numUpdates = 0;
|
|
1081
|
+
for (const instance of instances) {
|
|
1082
|
+
const instanceSequence = instance.channelSequence ?? 0;
|
|
1083
|
+
const matchingReleases = channelReleases.filter(
|
|
1084
|
+
(release) => release.channelId === instance.channelId
|
|
1085
|
+
);
|
|
1086
|
+
for (const release of matchingReleases) {
|
|
1087
|
+
if ((release.channelSequence ?? 0) > instanceSequence) {
|
|
1088
|
+
numUpdates++;
|
|
1089
|
+
}
|
|
1090
|
+
}
|
|
1091
|
+
}
|
|
1092
|
+
return numUpdates;
|
|
1093
|
+
};
|
|
1094
|
+
const onlineUpdates = calculateUpdates(activeOnlineInstances);
|
|
1095
|
+
const airgapUpdates = calculateUpdates(airgapInstances);
|
|
1096
|
+
return {
|
|
1097
|
+
onlineActiveCount,
|
|
1098
|
+
airgapCount,
|
|
1099
|
+
onlineUpdates,
|
|
1100
|
+
airgapUpdates,
|
|
1101
|
+
// Additional data available from the composite endpoint
|
|
1102
|
+
license: licenseData,
|
|
1103
|
+
teamStats
|
|
1104
|
+
};
|
|
1063
1105
|
}
|
|
1064
1106
|
});
|
|
1065
1107
|
var fetchCurrentUser = defineServerAction({
|
|
@@ -1071,7 +1113,7 @@ var fetchCurrentUser = defineServerAction({
|
|
|
1071
1113
|
if (!token || typeof token !== "string") {
|
|
1072
1114
|
throw new Error("Fetch current user requires a session token");
|
|
1073
1115
|
}
|
|
1074
|
-
const endpoint = `${getApiOrigin()}/
|
|
1116
|
+
const endpoint = `${getApiOrigin()}/enterprise-portal/user/profile`;
|
|
1075
1117
|
if (process.env.NODE_ENV !== "production") {
|
|
1076
1118
|
console.debug("[portal-components] fetching current user via %s", endpoint);
|
|
1077
1119
|
}
|
|
@@ -1108,7 +1150,7 @@ var updateUser = defineServerAction({
|
|
|
1108
1150
|
if (!firstName && !lastName) {
|
|
1109
1151
|
throw new Error("At least one of firstName or lastName must be provided");
|
|
1110
1152
|
}
|
|
1111
|
-
const endpoint = `${getApiOrigin()}/
|
|
1153
|
+
const endpoint = `${getApiOrigin()}/enterprise-portal/user/profile`;
|
|
1112
1154
|
if (process.env.NODE_ENV !== "production") {
|
|
1113
1155
|
console.debug("[portal-components] updating user via %s", endpoint);
|
|
1114
1156
|
}
|
|
@@ -1116,7 +1158,7 @@ var updateUser = defineServerAction({
|
|
|
1116
1158
|
if (firstName !== void 0) body.firstName = firstName;
|
|
1117
1159
|
if (lastName !== void 0) body.lastName = lastName;
|
|
1118
1160
|
const response = await authenticatedFetch(endpoint, {
|
|
1119
|
-
method: "
|
|
1161
|
+
method: "PUT",
|
|
1120
1162
|
token,
|
|
1121
1163
|
headers: {
|
|
1122
1164
|
"content-type": "application/json",
|
|
@@ -1144,9 +1186,9 @@ var fetchNotifications = defineServerAction({
|
|
|
1144
1186
|
throw new Error("Fetch notifications requires a session token");
|
|
1145
1187
|
}
|
|
1146
1188
|
if (!customerId || typeof customerId !== "string") {
|
|
1147
|
-
throw new Error("Fetch notifications requires a customerId");
|
|
1189
|
+
throw new Error("Fetch notifications requires a valid customerId");
|
|
1148
1190
|
}
|
|
1149
|
-
const endpoint = `${getApiOrigin()}/
|
|
1191
|
+
const endpoint = `${getApiOrigin()}/enterprise-portal/user/notifications?customer_id=${encodeURIComponent(customerId)}`;
|
|
1150
1192
|
if (process.env.NODE_ENV !== "production") {
|
|
1151
1193
|
console.debug("[portal-components] fetching notifications via %s", endpoint);
|
|
1152
1194
|
}
|
|
@@ -1177,12 +1219,12 @@ var updateNotifications = defineServerAction({
|
|
|
1177
1219
|
throw new Error("Update notifications requires a session token");
|
|
1178
1220
|
}
|
|
1179
1221
|
if (!customerId || typeof customerId !== "string") {
|
|
1180
|
-
throw new Error("Update notifications requires a customerId");
|
|
1222
|
+
throw new Error("Update notifications requires a valid customerId");
|
|
1181
1223
|
}
|
|
1182
1224
|
if (!Array.isArray(notifications)) {
|
|
1183
1225
|
throw new Error("Update notifications requires a notifications array");
|
|
1184
1226
|
}
|
|
1185
|
-
const endpoint = `${getApiOrigin()}/
|
|
1227
|
+
const endpoint = `${getApiOrigin()}/enterprise-portal/user/notifications?customer_id=${encodeURIComponent(customerId)}`;
|
|
1186
1228
|
if (process.env.NODE_ENV !== "production") {
|
|
1187
1229
|
console.debug("[portal-components] updating notifications via %s", endpoint);
|
|
1188
1230
|
}
|
|
@@ -1453,7 +1495,7 @@ var LicenseDetails = async ({
|
|
|
1453
1495
|
console.debug("[portal-components] license response", response.raw);
|
|
1454
1496
|
const { license } = response;
|
|
1455
1497
|
const rows = buildPrimaryRows(license);
|
|
1456
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded
|
|
1498
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded border border-gray-100 bg-white p-8 shadow-[0_18px_45px_rgba(17,24,39,0.08)]", children: [
|
|
1457
1499
|
/* @__PURE__ */ jsxRuntime.jsxs("header", { className: "flex flex-col border-b border-gray-100 pb-6", children: [
|
|
1458
1500
|
/* @__PURE__ */ jsxRuntime.jsx("h1", { className: "text-3xl font-bold text-gray-900", children: title }),
|
|
1459
1501
|
description ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-sm text-gray-600", children: description }) : null
|
|
@@ -1467,7 +1509,6 @@ var LicenseDetails = async ({
|
|
|
1467
1509
|
] })
|
|
1468
1510
|
] });
|
|
1469
1511
|
};
|
|
1470
|
-
var defaultHiddenLabels = ["Download"];
|
|
1471
1512
|
var defaultTopNavLinks = [
|
|
1472
1513
|
{
|
|
1473
1514
|
label: "Dashboard",
|
|
@@ -1480,16 +1521,21 @@ var defaultTopNavLinks = [
|
|
|
1480
1521
|
className: "h-4 w-4",
|
|
1481
1522
|
fill: "none",
|
|
1482
1523
|
stroke: "currentColor",
|
|
1483
|
-
strokeWidth: "
|
|
1524
|
+
strokeWidth: "2",
|
|
1525
|
+
strokeLinecap: "round",
|
|
1526
|
+
strokeLinejoin: "round",
|
|
1484
1527
|
children: [
|
|
1485
|
-
/* @__PURE__ */ jsxRuntime.jsx("
|
|
1486
|
-
/* @__PURE__ */ jsxRuntime.jsx("
|
|
1528
|
+
/* @__PURE__ */ jsxRuntime.jsx("rect", { width: "7", height: "9", x: "3", y: "3", rx: "1" }),
|
|
1529
|
+
/* @__PURE__ */ jsxRuntime.jsx("rect", { width: "7", height: "5", x: "14", y: "3", rx: "1" }),
|
|
1530
|
+
/* @__PURE__ */ jsxRuntime.jsx("rect", { width: "7", height: "9", x: "14", y: "12", rx: "1" }),
|
|
1531
|
+
/* @__PURE__ */ jsxRuntime.jsx("rect", { width: "7", height: "5", x: "3", y: "16", rx: "1" })
|
|
1487
1532
|
]
|
|
1488
1533
|
}
|
|
1489
1534
|
)
|
|
1490
1535
|
},
|
|
1491
1536
|
{
|
|
1492
|
-
label: "
|
|
1537
|
+
label: "Install",
|
|
1538
|
+
href: "/install",
|
|
1493
1539
|
icon: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1494
1540
|
"svg",
|
|
1495
1541
|
{
|
|
@@ -1498,18 +1544,20 @@ var defaultTopNavLinks = [
|
|
|
1498
1544
|
className: "h-4 w-4",
|
|
1499
1545
|
fill: "none",
|
|
1500
1546
|
stroke: "currentColor",
|
|
1501
|
-
strokeWidth: "
|
|
1547
|
+
strokeWidth: "2",
|
|
1548
|
+
strokeLinecap: "round",
|
|
1549
|
+
strokeLinejoin: "round",
|
|
1502
1550
|
children: [
|
|
1503
|
-
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "
|
|
1504
|
-
/* @__PURE__ */ jsxRuntime.jsx("
|
|
1505
|
-
/* @__PURE__ */ jsxRuntime.jsx("
|
|
1551
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }),
|
|
1552
|
+
/* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "7 10 12 15 17 10" }),
|
|
1553
|
+
/* @__PURE__ */ jsxRuntime.jsx("line", { x1: "12", x2: "12", y1: "15", y2: "3" })
|
|
1506
1554
|
]
|
|
1507
1555
|
}
|
|
1508
1556
|
)
|
|
1509
1557
|
},
|
|
1510
1558
|
{
|
|
1511
|
-
label: "
|
|
1512
|
-
href: "/
|
|
1559
|
+
label: "Update",
|
|
1560
|
+
href: "/update",
|
|
1513
1561
|
icon: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1514
1562
|
"svg",
|
|
1515
1563
|
{
|
|
@@ -1518,18 +1566,20 @@ var defaultTopNavLinks = [
|
|
|
1518
1566
|
className: "h-4 w-4",
|
|
1519
1567
|
fill: "none",
|
|
1520
1568
|
stroke: "currentColor",
|
|
1521
|
-
strokeWidth: "
|
|
1569
|
+
strokeWidth: "2",
|
|
1570
|
+
strokeLinecap: "round",
|
|
1571
|
+
strokeLinejoin: "round",
|
|
1522
1572
|
children: [
|
|
1523
|
-
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "
|
|
1524
|
-
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "
|
|
1573
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8" }),
|
|
1574
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M21 3v5h-5" })
|
|
1525
1575
|
]
|
|
1526
1576
|
}
|
|
1527
1577
|
)
|
|
1528
1578
|
},
|
|
1529
1579
|
{
|
|
1530
|
-
label: "
|
|
1531
|
-
href: "/
|
|
1532
|
-
icon: /* @__PURE__ */ jsxRuntime.
|
|
1580
|
+
label: "Security",
|
|
1581
|
+
href: "/security",
|
|
1582
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1533
1583
|
"svg",
|
|
1534
1584
|
{
|
|
1535
1585
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -1537,12 +1587,10 @@ var defaultTopNavLinks = [
|
|
|
1537
1587
|
className: "h-4 w-4",
|
|
1538
1588
|
fill: "none",
|
|
1539
1589
|
stroke: "currentColor",
|
|
1540
|
-
strokeWidth: "
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4 10c1.5-4 6-6 10-4m6 4c-1.5 4-6 6-10 4" })
|
|
1545
|
-
]
|
|
1590
|
+
strokeWidth: "2",
|
|
1591
|
+
strokeLinecap: "round",
|
|
1592
|
+
strokeLinejoin: "round",
|
|
1593
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z" })
|
|
1546
1594
|
}
|
|
1547
1595
|
)
|
|
1548
1596
|
},
|
|
@@ -1557,10 +1605,15 @@ var defaultTopNavLinks = [
|
|
|
1557
1605
|
className: "h-4 w-4",
|
|
1558
1606
|
fill: "none",
|
|
1559
1607
|
stroke: "currentColor",
|
|
1560
|
-
strokeWidth: "
|
|
1608
|
+
strokeWidth: "2",
|
|
1609
|
+
strokeLinecap: "round",
|
|
1610
|
+
strokeLinejoin: "round",
|
|
1561
1611
|
children: [
|
|
1562
|
-
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "
|
|
1563
|
-
/* @__PURE__ */ jsxRuntime.jsx("
|
|
1612
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z" }),
|
|
1613
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M14 2v4a2 2 0 0 0 2 2h4" }),
|
|
1614
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M10 9H8" }),
|
|
1615
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 13H8" }),
|
|
1616
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 17H8" })
|
|
1564
1617
|
]
|
|
1565
1618
|
}
|
|
1566
1619
|
)
|
|
@@ -1576,12 +1629,13 @@ var defaultTopNavLinks = [
|
|
|
1576
1629
|
className: "h-4 w-4",
|
|
1577
1630
|
fill: "none",
|
|
1578
1631
|
stroke: "currentColor",
|
|
1579
|
-
strokeWidth: "
|
|
1632
|
+
strokeWidth: "2",
|
|
1633
|
+
strokeLinecap: "round",
|
|
1634
|
+
strokeLinejoin: "round",
|
|
1580
1635
|
children: [
|
|
1581
|
-
/* @__PURE__ */ jsxRuntime.jsx("
|
|
1582
|
-
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "
|
|
1583
|
-
/* @__PURE__ */ jsxRuntime.jsx("
|
|
1584
|
-
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9 15h6" })
|
|
1636
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4" }),
|
|
1637
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "m21 2-9.6 9.6" }),
|
|
1638
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "7.5", cy: "15.5", r: "5.5" })
|
|
1585
1639
|
]
|
|
1586
1640
|
}
|
|
1587
1641
|
)
|
|
@@ -1597,10 +1651,16 @@ var defaultTopNavLinks = [
|
|
|
1597
1651
|
className: "h-4 w-4",
|
|
1598
1652
|
fill: "none",
|
|
1599
1653
|
stroke: "currentColor",
|
|
1600
|
-
strokeWidth: "
|
|
1654
|
+
strokeWidth: "2",
|
|
1655
|
+
strokeLinecap: "round",
|
|
1656
|
+
strokeLinejoin: "round",
|
|
1601
1657
|
children: [
|
|
1602
|
-
/* @__PURE__ */ jsxRuntime.jsx("
|
|
1603
|
-
/* @__PURE__ */ jsxRuntime.jsx("
|
|
1658
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }),
|
|
1659
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "m4.93 4.93 4.24 4.24" }),
|
|
1660
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "m14.83 9.17 4.24-4.24" }),
|
|
1661
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "m14.83 14.83 4.24 4.24" }),
|
|
1662
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "m9.17 14.83-4.24 4.24" }),
|
|
1663
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "4" })
|
|
1604
1664
|
]
|
|
1605
1665
|
}
|
|
1606
1666
|
)
|
|
@@ -1686,8 +1746,7 @@ var TopNav = async ({
|
|
|
1686
1746
|
console.debug("[portal-components] branding fetch failed", error);
|
|
1687
1747
|
}
|
|
1688
1748
|
const baseLinks = links ?? defaultTopNavLinks;
|
|
1689
|
-
const
|
|
1690
|
-
const hiddenSet = computedHiddenLabels ? new Set(computedHiddenLabels) : null;
|
|
1749
|
+
const hiddenSet = hiddenLabels ? new Set(hiddenLabels) : null;
|
|
1691
1750
|
let resolvedLinks = baseLinks.filter(
|
|
1692
1751
|
(link) => !hiddenSet?.has(link.label)
|
|
1693
1752
|
);
|
|
@@ -1700,7 +1759,7 @@ var TopNav = async ({
|
|
|
1700
1759
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1701
1760
|
"div",
|
|
1702
1761
|
{
|
|
1703
|
-
className: "relative flex h-[
|
|
1762
|
+
className: "relative flex h-[280px] w-full items-start justify-center",
|
|
1704
1763
|
style: {
|
|
1705
1764
|
backgroundImage: `linear-gradient(to top, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0) 33%), linear-gradient(${gradientStart}, ${gradientEnd})`,
|
|
1706
1765
|
backgroundRepeat: "no-repeat",
|
|
@@ -1727,7 +1786,7 @@ var TopNav = async ({
|
|
|
1727
1786
|
brandTitle ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-lg font-semibold text-gray-900", children: brandTitle }) : null
|
|
1728
1787
|
] }) : /* @__PURE__ */ jsxRuntime.jsx("div", {}),
|
|
1729
1788
|
/* @__PURE__ */ jsxRuntime.jsxs("details", { className: "group relative", children: [
|
|
1730
|
-
/* @__PURE__ */ jsxRuntime.jsxs("summary", { className: "flex cursor-pointer items-center gap-2
|
|
1789
|
+
/* @__PURE__ */ jsxRuntime.jsxs("summary", { className: "flex cursor-pointer items-center gap-2 text-sm font-medium text-gray-600 hover:text-gray-900 list-none", children: [
|
|
1731
1790
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1732
1791
|
"svg",
|
|
1733
1792
|
{
|
|
@@ -1799,12 +1858,12 @@ var TopNav = async ({
|
|
|
1799
1858
|
const className = `flex items-center gap-2 px-4 py-1 transition text-gray-500 ${isActive ? "underline underline-offset-8 decoration-2" : ""}`;
|
|
1800
1859
|
if (href) {
|
|
1801
1860
|
return /* @__PURE__ */ jsxRuntime.jsxs(Link__default.default, { href, className, children: [
|
|
1802
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: isActive ? "text-
|
|
1861
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: isActive ? "text-gray-900" : "text-gray-500", children: icon }),
|
|
1803
1862
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: label })
|
|
1804
1863
|
] }, label);
|
|
1805
1864
|
}
|
|
1806
1865
|
return /* @__PURE__ */ jsxRuntime.jsxs("button", { className, type: "button", children: [
|
|
1807
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: isActive ? "text-
|
|
1866
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: isActive ? "text-gray-900" : "text-gray-500", children: icon }),
|
|
1808
1867
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: label })
|
|
1809
1868
|
] }, label);
|
|
1810
1869
|
}) })
|
|
@@ -1812,7 +1871,7 @@ var TopNav = async ({
|
|
|
1812
1871
|
}
|
|
1813
1872
|
);
|
|
1814
1873
|
};
|
|
1815
|
-
var GlobeIcon = (props) => /* @__PURE__ */ jsxRuntime.
|
|
1874
|
+
var GlobeIcon = (props) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1816
1875
|
"svg",
|
|
1817
1876
|
{
|
|
1818
1877
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -1820,16 +1879,14 @@ var GlobeIcon = (props) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
|
1820
1879
|
fill: "none",
|
|
1821
1880
|
stroke: "currentColor",
|
|
1822
1881
|
strokeWidth: 1.5,
|
|
1882
|
+
strokeLinecap: "round",
|
|
1883
|
+
strokeLinejoin: "round",
|
|
1823
1884
|
"aria-hidden": "true",
|
|
1824
1885
|
...props,
|
|
1825
|
-
children:
|
|
1826
|
-
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: 12, cy: 12, r: 10 }),
|
|
1827
|
-
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M2 12h20" }),
|
|
1828
|
-
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10Z" })
|
|
1829
|
-
]
|
|
1886
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 21a9.004 9.004 0 008.716-6.747M12 21a9.004 9.004 0 01-8.716-6.747M12 21c2.485 0 4.5-4.03 4.5-9S14.485 3 12 3m0 18c-2.485 0-4.5-4.03-4.5-9S9.515 3 12 3m0 0a8.997 8.997 0 017.843 4.582M12 3a8.997 8.997 0 00-7.843 4.582m15.686 0A11.953 11.953 0 0112 10.5c-2.998 0-5.74-1.1-7.843-2.918m15.686 0A8.959 8.959 0 0121 12c0 .778-.099 1.533-.284 2.253m0 0A17.919 17.919 0 0112 16.5c-3.162 0-6.133-.815-8.716-2.247m0 0A9.015 9.015 0 013 12c0-1.605.42-3.113 1.157-4.418" })
|
|
1830
1887
|
}
|
|
1831
1888
|
);
|
|
1832
|
-
var AirGapIcon = (props) => /* @__PURE__ */ jsxRuntime.
|
|
1889
|
+
var AirGapIcon = (props) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1833
1890
|
"svg",
|
|
1834
1891
|
{
|
|
1835
1892
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -1837,15 +1894,11 @@ var AirGapIcon = (props) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
|
1837
1894
|
fill: "none",
|
|
1838
1895
|
stroke: "currentColor",
|
|
1839
1896
|
strokeWidth: 1.5,
|
|
1897
|
+
strokeLinecap: "round",
|
|
1898
|
+
strokeLinejoin: "round",
|
|
1840
1899
|
"aria-hidden": "true",
|
|
1841
1900
|
...props,
|
|
1842
|
-
children:
|
|
1843
|
-
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "m4 4 16 16" }),
|
|
1844
|
-
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7.5 4.5a8 8 0 0 1 9 0" }),
|
|
1845
|
-
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4.5 7.5a8 8 0 0 0 0 9" }),
|
|
1846
|
-
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16.5 19.5a8 8 0 0 0 0-9" }),
|
|
1847
|
-
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7 12a5 5 0 0 0 5 5" })
|
|
1848
|
-
]
|
|
1901
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M13.181 8.68a4.503 4.503 0 0 1 1.903 6.405m-9.768-2.782L3.56 14.06a4.5 4.5 0 0 0 6.364 6.365l3.129-3.129m5.614-5.615 1.757-1.757a4.5 4.5 0 0 0-6.364-6.365l-4.5 4.5c-.258.26-.479.541-.661.84m1.903 6.405a4.495 4.495 0 0 1-1.242-.88 4.483 4.483 0 0 1-1.062-1.683m6.587 2.345 5.907 5.907m-5.907-5.907L8.898 8.898M2.991 2.99 8.898 8.9" })
|
|
1849
1902
|
}
|
|
1850
1903
|
);
|
|
1851
1904
|
var baseCardClass = "flex h-full flex-col rounded-xl border border-gray-200 bg-white p-6 shadow-[0_16px_32px_rgba(15,23,42,0.05)]";
|
|
@@ -1886,7 +1939,7 @@ var UpdatesCard = ({
|
|
|
1886
1939
|
/* @__PURE__ */ jsxRuntime.jsx("footer", { className: footerClass, children: /* @__PURE__ */ jsxRuntime.jsx(Link__default.default, { href: "/update", children: "View updates \u2192" }) })
|
|
1887
1940
|
] });
|
|
1888
1941
|
UpdatesCard.displayName = "UpdatesCard";
|
|
1889
|
-
var UploadIcon = (props) => /* @__PURE__ */ jsxRuntime.
|
|
1942
|
+
var UploadIcon = (props) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1890
1943
|
"svg",
|
|
1891
1944
|
{
|
|
1892
1945
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -1894,13 +1947,11 @@ var UploadIcon = (props) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
|
1894
1947
|
fill: "none",
|
|
1895
1948
|
stroke: "currentColor",
|
|
1896
1949
|
strokeWidth: 1.5,
|
|
1950
|
+
strokeLinecap: "round",
|
|
1951
|
+
strokeLinejoin: "round",
|
|
1897
1952
|
"aria-hidden": "true",
|
|
1898
1953
|
...props,
|
|
1899
|
-
children:
|
|
1900
|
-
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 16V3" }),
|
|
1901
|
-
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M8 7l4-4 4 4" }),
|
|
1902
|
-
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5 21h14" })
|
|
1903
|
-
]
|
|
1954
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3 16.5v2.25A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75V16.5m-13.5-9L12 3m0 0l4.5 4.5M12 3v13.5" })
|
|
1904
1955
|
}
|
|
1905
1956
|
);
|
|
1906
1957
|
var baseCardClass2 = "flex h-full flex-col rounded-xl border border-gray-200 bg-white p-6 shadow-[0_16px_32px_rgba(15,23,42,0.05)]";
|
|
@@ -2307,7 +2358,7 @@ var UserSettingsCard = () => /* @__PURE__ */ jsxRuntime.jsxs("section", { classN
|
|
|
2307
2358
|
/* @__PURE__ */ jsxRuntime.jsx("footer", { className: footerClass3, children: /* @__PURE__ */ jsxRuntime.jsx(Link__default.default, { href: "/user-settings", children: "View user settings \u2192" }) })
|
|
2308
2359
|
] });
|
|
2309
2360
|
UserSettingsCard.displayName = "UserSettingsCard";
|
|
2310
|
-
var UsersIcon = (props) => /* @__PURE__ */ jsxRuntime.
|
|
2361
|
+
var UsersIcon = (props) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2311
2362
|
"svg",
|
|
2312
2363
|
{
|
|
2313
2364
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -2315,17 +2366,14 @@ var UsersIcon = (props) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
|
2315
2366
|
fill: "none",
|
|
2316
2367
|
stroke: "currentColor",
|
|
2317
2368
|
strokeWidth: 1.5,
|
|
2369
|
+
strokeLinecap: "round",
|
|
2370
|
+
strokeLinejoin: "round",
|
|
2318
2371
|
"aria-hidden": "true",
|
|
2319
2372
|
...props,
|
|
2320
|
-
children:
|
|
2321
|
-
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" }),
|
|
2322
|
-
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: 10, cy: 8, r: 4 }),
|
|
2323
|
-
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M20 21v-2a4 4 0 0 0-3-3.87" }),
|
|
2324
|
-
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M17 3a4 4 0 0 1 0 8" })
|
|
2325
|
-
]
|
|
2373
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M15 19.128a9.38 9.38 0 002.625.372 9.337 9.337 0 004.121-.952 4.125 4.125 0 00-7.533-2.493M15 19.128v-.003c0-1.113-.285-2.16-.786-3.07M15 19.128v.106A12.318 12.318 0 018.624 21c-2.331 0-4.512-.645-6.374-1.766l-.001-.109a6.375 6.375 0 0111.964-3.07M12 6.375a3.375 3.375 0 11-6.75 0 3.375 3.375 0 016.75 0zm8.25 2.25a2.625 2.625 0 11-5.25 0 2.625 2.625 0 015.25 0z" })
|
|
2326
2374
|
}
|
|
2327
2375
|
);
|
|
2328
|
-
var KeyIcon = (props) => /* @__PURE__ */ jsxRuntime.
|
|
2376
|
+
var KeyIcon = (props) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2329
2377
|
"svg",
|
|
2330
2378
|
{
|
|
2331
2379
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -2333,13 +2381,11 @@ var KeyIcon = (props) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
|
2333
2381
|
fill: "none",
|
|
2334
2382
|
stroke: "currentColor",
|
|
2335
2383
|
strokeWidth: 1.5,
|
|
2384
|
+
strokeLinecap: "round",
|
|
2385
|
+
strokeLinejoin: "round",
|
|
2336
2386
|
"aria-hidden": "true",
|
|
2337
2387
|
...props,
|
|
2338
|
-
children:
|
|
2339
|
-
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: 7, cy: 15, r: 4 }),
|
|
2340
|
-
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "m10.85 12.15 4.3-4.3a2 2 0 0 1 2.83 0l.47.47a2 2 0 0 1 0 2.83l-4.3 4.3" }),
|
|
2341
|
-
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 11l1.5 1.5" })
|
|
2342
|
-
]
|
|
2388
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M15.75 5.25a3 3 0 013 3m3 0a6 6 0 01-7.029 5.912c-.563-.097-1.159.026-1.563.43L10.5 17.25H8.25v2.25H6v2.25H2.25v-2.818c0-.597.237-1.17.659-1.591l6.499-6.499c.404-.404.527-1 .43-1.563A6 6 0 1121.75 8.25z" })
|
|
2343
2389
|
}
|
|
2344
2390
|
);
|
|
2345
2391
|
var baseCardClass4 = "flex h-full flex-col rounded-xl border border-gray-200 bg-white p-6 shadow-[0_16px_32px_rgba(15,23,42,0.05)]";
|
|
@@ -2402,6 +2448,7 @@ exports.deleteSupportBundle = deleteSupportBundle;
|
|
|
2402
2448
|
exports.downloadSupportBundle = downloadSupportBundle;
|
|
2403
2449
|
exports.fetchCurrentUser = fetchCurrentUser;
|
|
2404
2450
|
exports.fetchCustomBranding = fetchCustomBranding;
|
|
2451
|
+
exports.fetchDashboardComposite = fetchDashboardComposite;
|
|
2405
2452
|
exports.fetchLicenseDetails = fetchLicenseDetails;
|
|
2406
2453
|
exports.fetchNotifications = fetchNotifications;
|
|
2407
2454
|
exports.getCustomerIdFromToken = getCustomerIdFromToken;
|