@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/esm/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { forwardRef, cache, useState, useMemo } from 'react';
|
|
2
2
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
3
|
-
import { Buffer
|
|
3
|
+
import { Buffer } from 'buffer';
|
|
4
4
|
import Link from 'next/link';
|
|
5
5
|
|
|
6
6
|
/**
|
|
@@ -10,7 +10,7 @@ import Link from 'next/link';
|
|
|
10
10
|
|
|
11
11
|
// package.json
|
|
12
12
|
var package_default = {
|
|
13
|
-
version: "0.0.
|
|
13
|
+
version: "0.0.13"};
|
|
14
14
|
|
|
15
15
|
// src/tokens/index.ts
|
|
16
16
|
var baseTokens = {
|
|
@@ -187,7 +187,7 @@ var initiateLogin = defineServerAction({
|
|
|
187
187
|
visibility: "customer",
|
|
188
188
|
tags: ["auth", "login", "session"],
|
|
189
189
|
async run(input) {
|
|
190
|
-
const endpoint = `${getApiOrigin()}/
|
|
190
|
+
const endpoint = `${getApiOrigin()}/enterprise-portal/auth/magic-link`;
|
|
191
191
|
const appSlug = process.env.PORTAL_APP_SLUG;
|
|
192
192
|
if (!appSlug) {
|
|
193
193
|
throw new Error("PORTAL_APP_SLUG is not configured");
|
|
@@ -237,7 +237,7 @@ var verifyMagicLink = defineServerAction({
|
|
|
237
237
|
visibility: "customer",
|
|
238
238
|
tags: ["auth", "login", "verify"],
|
|
239
239
|
async run({ nonce }) {
|
|
240
|
-
const endpoint = `${getApiOrigin()}/
|
|
240
|
+
const endpoint = `${getApiOrigin()}/enterprise-portal/auth/magic-link/verify`;
|
|
241
241
|
if (process.env.NODE_ENV !== "production") {
|
|
242
242
|
console.debug(
|
|
243
243
|
"[portal-components] verifying magic link via %s",
|
|
@@ -293,12 +293,12 @@ var fetchCustomBrandingImpl = async () => {
|
|
|
293
293
|
if (!appSlug) {
|
|
294
294
|
throw new Error("PORTAL_APP_SLUG is not configured");
|
|
295
295
|
}
|
|
296
|
-
const url = `${getApiOrigin()}/
|
|
296
|
+
const url = `${getApiOrigin()}/enterprise-portal/public/branding?app_slug=${encodeURIComponent(
|
|
297
297
|
appSlug
|
|
298
298
|
)}`;
|
|
299
299
|
if (process.env.NODE_ENV !== "production") {
|
|
300
300
|
console.debug(
|
|
301
|
-
"[portal-components] fetching custom branding via %s",
|
|
301
|
+
"[portal-components] fetching custom branding via %s (Enterprise Portal API)",
|
|
302
302
|
url
|
|
303
303
|
);
|
|
304
304
|
}
|
|
@@ -313,13 +313,18 @@ var fetchCustomBrandingImpl = async () => {
|
|
|
313
313
|
);
|
|
314
314
|
}
|
|
315
315
|
const payload = await response.json();
|
|
316
|
-
const
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
316
|
+
const brandingObject = {
|
|
317
|
+
logo: payload.logoUrl,
|
|
318
|
+
title: payload.appName,
|
|
319
|
+
customColor1: payload.primaryColor,
|
|
320
|
+
customColor2: payload.secondaryColor,
|
|
321
|
+
favicon: payload.faviconUrl
|
|
322
|
+
};
|
|
323
|
+
const brandingData = Buffer.from(JSON.stringify(brandingObject)).toString("base64");
|
|
320
324
|
return {
|
|
321
325
|
brandingData,
|
|
322
|
-
documentation:
|
|
326
|
+
documentation: null
|
|
327
|
+
// Documentation not included in new API's public endpoint
|
|
323
328
|
};
|
|
324
329
|
};
|
|
325
330
|
var fetchCustomBranding = cache(fetchCustomBrandingImpl);
|
|
@@ -347,22 +352,6 @@ var getCustomerIdFromToken = (token) => {
|
|
|
347
352
|
}
|
|
348
353
|
return customerId.trim();
|
|
349
354
|
};
|
|
350
|
-
var resolveSupportBundlesEndpoint = () => {
|
|
351
|
-
const fallback = `${getApiOrigin()}/v3/supportbundles`;
|
|
352
|
-
const explicit = process.env.SUPPORT_BUNDLES_ENDPOINT;
|
|
353
|
-
if (!explicit) {
|
|
354
|
-
return new URL(fallback);
|
|
355
|
-
}
|
|
356
|
-
try {
|
|
357
|
-
return new URL(explicit);
|
|
358
|
-
} catch (error) {
|
|
359
|
-
console.warn(
|
|
360
|
-
`[portal-components] invalid SUPPORT_BUNDLES_ENDPOINT, using fallback`,
|
|
361
|
-
error
|
|
362
|
-
);
|
|
363
|
-
return new URL(fallback);
|
|
364
|
-
}
|
|
365
|
-
};
|
|
366
355
|
var listSupportBundles = defineServerAction({
|
|
367
356
|
id: "support/list-bundles",
|
|
368
357
|
description: "Fetches support bundles associated with the customer found in the portal session JWT.",
|
|
@@ -372,17 +361,11 @@ var listSupportBundles = defineServerAction({
|
|
|
372
361
|
if (!token || typeof token !== "string") {
|
|
373
362
|
throw new Error("Support bundle listing requires a session token");
|
|
374
363
|
}
|
|
375
|
-
const
|
|
376
|
-
const customerId = payload?.customer_id;
|
|
377
|
-
if (typeof customerId !== "string" || !customerId.trim()) {
|
|
378
|
-
throw new Error("Unable to determine customer_id from session token");
|
|
379
|
-
}
|
|
380
|
-
const url = resolveSupportBundlesEndpoint();
|
|
381
|
-
url.searchParams.set("customer_id", customerId.trim());
|
|
364
|
+
const url = `${getApiOrigin()}/enterprise-portal/support-bundles`;
|
|
382
365
|
if (process.env.NODE_ENV !== "production") {
|
|
383
|
-
console.debug("[portal-components] fetching support bundles via %s", url);
|
|
366
|
+
console.debug("[portal-components] fetching support bundles via %s (Enterprise Portal API)", url);
|
|
384
367
|
}
|
|
385
|
-
const response = await authenticatedFetch(url
|
|
368
|
+
const response = await authenticatedFetch(url, {
|
|
386
369
|
token,
|
|
387
370
|
headers: {
|
|
388
371
|
accept: "application/json"
|
|
@@ -397,7 +380,8 @@ var listSupportBundles = defineServerAction({
|
|
|
397
380
|
`Support bundles request failed (${response.status} ${response.statusText})`
|
|
398
381
|
);
|
|
399
382
|
}
|
|
400
|
-
const
|
|
383
|
+
const payload = await response.json();
|
|
384
|
+
const raw = payload.data;
|
|
401
385
|
const rawRecord = raw && typeof raw === "object" ? raw : void 0;
|
|
402
386
|
const parseInsights = (raw2) => {
|
|
403
387
|
if (!Array.isArray(raw2)) return void 0;
|
|
@@ -488,12 +472,8 @@ var downloadSupportBundle = defineServerAction({
|
|
|
488
472
|
if (!bundleId || typeof bundleId !== "string") {
|
|
489
473
|
throw new Error("Support bundle download requires a bundle ID");
|
|
490
474
|
}
|
|
491
|
-
const
|
|
492
|
-
const
|
|
493
|
-
if (typeof customerId !== "string" || !customerId.trim()) {
|
|
494
|
-
throw new Error("Unable to determine customer_id from session token");
|
|
495
|
-
}
|
|
496
|
-
const endpoint = `${getApiOrigin()}/v3/supportbundle/${encodeURIComponent(bundleId)}/download?customer_id=${encodeURIComponent(customerId.trim())}`;
|
|
475
|
+
const customerId = getCustomerIdFromToken(token);
|
|
476
|
+
const endpoint = `${getApiOrigin()}/enterprise-portal/support-bundles/${encodeURIComponent(bundleId)}/download?customer_id=${encodeURIComponent(customerId)}`;
|
|
497
477
|
if (process.env.NODE_ENV !== "production") {
|
|
498
478
|
console.debug("[portal-components] getting support bundle download URL via %s", endpoint);
|
|
499
479
|
}
|
|
@@ -531,12 +511,8 @@ var deleteSupportBundle = defineServerAction({
|
|
|
531
511
|
if (!bundleId || typeof bundleId !== "string") {
|
|
532
512
|
throw new Error("Support bundle deletion requires a bundle ID");
|
|
533
513
|
}
|
|
534
|
-
const
|
|
535
|
-
const
|
|
536
|
-
if (typeof customerId !== "string" || !customerId.trim()) {
|
|
537
|
-
throw new Error("Unable to determine customer_id from session token");
|
|
538
|
-
}
|
|
539
|
-
const endpoint = `${getApiOrigin()}/v3/supportbundle/${encodeURIComponent(bundleId)}?customer_id=${encodeURIComponent(customerId.trim())}`;
|
|
514
|
+
const customerId = getCustomerIdFromToken(token);
|
|
515
|
+
const endpoint = `${getApiOrigin()}/enterprise-portal/support-bundles/${encodeURIComponent(bundleId)}?customer_id=${encodeURIComponent(customerId)}`;
|
|
540
516
|
if (process.env.NODE_ENV !== "production") {
|
|
541
517
|
console.debug("[portal-components] deleting support bundle via %s", endpoint);
|
|
542
518
|
}
|
|
@@ -575,7 +551,7 @@ var uploadSupportBundle = defineServerAction({
|
|
|
575
551
|
if (!fileContent || !(fileContent instanceof ArrayBuffer)) {
|
|
576
552
|
throw new Error("Support bundle upload requires file content");
|
|
577
553
|
}
|
|
578
|
-
const endpoint = `${getApiOrigin()}/
|
|
554
|
+
const endpoint = `${getApiOrigin()}/enterprise-portal/support-bundles/upload/${encodeURIComponent(appId)}`;
|
|
579
555
|
if (process.env.NODE_ENV !== "production") {
|
|
580
556
|
console.debug("[portal-components] uploading support bundle via %s", endpoint);
|
|
581
557
|
}
|
|
@@ -603,7 +579,7 @@ var uploadSupportBundle = defineServerAction({
|
|
|
603
579
|
}
|
|
604
580
|
});
|
|
605
581
|
var getSupportBundleUploadUrl = (appId) => {
|
|
606
|
-
return `${getApiOrigin()}/
|
|
582
|
+
return `${getApiOrigin()}/enterprise-portal/support-bundles/upload/${encodeURIComponent(appId)}`;
|
|
607
583
|
};
|
|
608
584
|
var listReleases = defineServerAction({
|
|
609
585
|
id: "releases/list",
|
|
@@ -614,10 +590,10 @@ var listReleases = defineServerAction({
|
|
|
614
590
|
if (!token || typeof token !== "string") {
|
|
615
591
|
throw new Error("List releases requires a session token");
|
|
616
592
|
}
|
|
617
|
-
const endpoint = `${getApiOrigin()}/
|
|
618
|
-
|
|
619
|
-
endpoint
|
|
620
|
-
}
|
|
593
|
+
const endpoint = `${getApiOrigin()}/enterprise-portal/releases`;
|
|
594
|
+
if (process.env.NODE_ENV !== "production") {
|
|
595
|
+
console.debug("[portal-components] fetching releases via %s (Enterprise Portal API)", endpoint);
|
|
596
|
+
}
|
|
621
597
|
const response = await authenticatedFetch(endpoint, {
|
|
622
598
|
method: "GET",
|
|
623
599
|
token,
|
|
@@ -630,7 +606,6 @@ var listReleases = defineServerAction({
|
|
|
630
606
|
console.warn("[portal-components] listReleases read error", error);
|
|
631
607
|
return null;
|
|
632
608
|
});
|
|
633
|
-
console.log("[portal-components] listReleases response", response.status, bodyText);
|
|
634
609
|
if (!response.ok) {
|
|
635
610
|
throw new Error(
|
|
636
611
|
`List releases request failed (${response.status} ${response.statusText})`
|
|
@@ -927,7 +902,10 @@ var fetchLicenseDetails = defineServerAction({
|
|
|
927
902
|
if (typeof token !== "string" || token.trim().length === 0) {
|
|
928
903
|
throw new Error("fetchLicenseDetails requires a non-empty token");
|
|
929
904
|
}
|
|
930
|
-
const endpoint = `${getApiOrigin()}/
|
|
905
|
+
const endpoint = `${getApiOrigin()}/enterprise-portal/license`;
|
|
906
|
+
if (process.env.NODE_ENV !== "production") {
|
|
907
|
+
console.debug("[portal-components] fetching license via %s (Enterprise Portal API)", endpoint);
|
|
908
|
+
}
|
|
931
909
|
const response = await authenticatedFetch(endpoint, {
|
|
932
910
|
method: "GET",
|
|
933
911
|
token,
|
|
@@ -942,10 +920,11 @@ var fetchLicenseDetails = defineServerAction({
|
|
|
942
920
|
);
|
|
943
921
|
}
|
|
944
922
|
const payload = await response.json();
|
|
945
|
-
const
|
|
923
|
+
const licenseData = payload.data;
|
|
924
|
+
const license = normalizeLicensePayload(licenseData);
|
|
946
925
|
return {
|
|
947
926
|
license,
|
|
948
|
-
raw:
|
|
927
|
+
raw: licenseData ?? null
|
|
949
928
|
};
|
|
950
929
|
}
|
|
951
930
|
});
|
|
@@ -958,16 +937,14 @@ var getSecurityInfo = defineServerAction({
|
|
|
958
937
|
if (!token || typeof token !== "string") {
|
|
959
938
|
throw new Error("Security info request requires a session token");
|
|
960
939
|
}
|
|
961
|
-
const customerId = getCustomerIdFromToken(token);
|
|
962
940
|
const params = new URLSearchParams({
|
|
963
|
-
customer_id: customerId,
|
|
964
941
|
install_type: installType,
|
|
965
942
|
channel_sequence: channelSequence.toString(),
|
|
966
943
|
is_airgap: isAirgap.toString()
|
|
967
944
|
});
|
|
968
|
-
const url = `${getApiOrigin()}/
|
|
945
|
+
const url = `${getApiOrigin()}/enterprise-portal/security?${params.toString()}`;
|
|
969
946
|
if (process.env.NODE_ENV !== "production") {
|
|
970
|
-
console.debug("[portal-components] fetching security info via %s", url);
|
|
947
|
+
console.debug("[portal-components] fetching security info via %s (Enterprise Portal API)", url);
|
|
971
948
|
}
|
|
972
949
|
const response = await authenticatedFetch(url, {
|
|
973
950
|
token,
|
|
@@ -979,8 +956,8 @@ var getSecurityInfo = defineServerAction({
|
|
|
979
956
|
`Security info request failed (${response.status} ${response.statusText})`
|
|
980
957
|
);
|
|
981
958
|
}
|
|
982
|
-
const
|
|
983
|
-
return data;
|
|
959
|
+
const payload = await response.json();
|
|
960
|
+
return payload.data;
|
|
984
961
|
}
|
|
985
962
|
});
|
|
986
963
|
var getSecurityInfoDiff = defineServerAction({
|
|
@@ -992,15 +969,13 @@ var getSecurityInfoDiff = defineServerAction({
|
|
|
992
969
|
if (!token || typeof token !== "string") {
|
|
993
970
|
throw new Error("Security info diff request requires a session token");
|
|
994
971
|
}
|
|
995
|
-
const customerId = getCustomerIdFromToken(token);
|
|
996
972
|
const params = new URLSearchParams({
|
|
997
|
-
customer_id: customerId,
|
|
998
973
|
install_type: installType,
|
|
999
974
|
from_channel_sequence: fromChannelSequence.toString(),
|
|
1000
975
|
to_channel_sequence: toChannelSequence.toString(),
|
|
1001
976
|
is_airgap: isAirgap.toString()
|
|
1002
977
|
});
|
|
1003
|
-
const url = `${getApiOrigin()}/
|
|
978
|
+
const url = `${getApiOrigin()}/enterprise-portal/security-diff?${params.toString()}`;
|
|
1004
979
|
if (process.env.NODE_ENV !== "production") {
|
|
1005
980
|
console.debug("[portal-components] fetching security info diff via %s", url);
|
|
1006
981
|
}
|
|
@@ -1014,8 +989,8 @@ var getSecurityInfoDiff = defineServerAction({
|
|
|
1014
989
|
`Security info diff request failed (${response.status} ${response.statusText})`
|
|
1015
990
|
);
|
|
1016
991
|
}
|
|
1017
|
-
const
|
|
1018
|
-
return data;
|
|
992
|
+
const envelope = await response.json();
|
|
993
|
+
return envelope.data;
|
|
1019
994
|
}
|
|
1020
995
|
});
|
|
1021
996
|
var getSecurityInfoSBOM = defineServerAction({
|
|
@@ -1027,15 +1002,13 @@ var getSecurityInfoSBOM = defineServerAction({
|
|
|
1027
1002
|
if (!token || typeof token !== "string") {
|
|
1028
1003
|
throw new Error("Security SBOM request requires a session token");
|
|
1029
1004
|
}
|
|
1030
|
-
const customerId = getCustomerIdFromToken(token);
|
|
1031
1005
|
const params = new URLSearchParams({
|
|
1032
|
-
customer_id: customerId,
|
|
1033
1006
|
install_type: installType,
|
|
1034
1007
|
channel_sequence: channelSequence.toString(),
|
|
1035
1008
|
is_airgap: isAirgap.toString(),
|
|
1036
1009
|
unified_sbom: unifiedSbom.toString()
|
|
1037
1010
|
});
|
|
1038
|
-
const url = `${getApiOrigin()}/
|
|
1011
|
+
const url = `${getApiOrigin()}/enterprise-portal/security-sbom?${params.toString()}`;
|
|
1039
1012
|
if (process.env.NODE_ENV !== "production") {
|
|
1040
1013
|
console.debug("[portal-components] fetching security SBOM via %s", url);
|
|
1041
1014
|
}
|
|
@@ -1052,8 +1025,77 @@ var getSecurityInfoSBOM = defineServerAction({
|
|
|
1052
1025
|
`Security SBOM request failed (${response.status} ${response.statusText})`
|
|
1053
1026
|
);
|
|
1054
1027
|
}
|
|
1055
|
-
const
|
|
1056
|
-
return data;
|
|
1028
|
+
const envelope = await response.json();
|
|
1029
|
+
return envelope.data;
|
|
1030
|
+
}
|
|
1031
|
+
});
|
|
1032
|
+
var fetchDashboardComposite = defineServerAction({
|
|
1033
|
+
id: "dashboard/fetch-composite",
|
|
1034
|
+
description: "Fetches all dashboard data from the composite Enterprise Portal API endpoint",
|
|
1035
|
+
visibility: "customer",
|
|
1036
|
+
tags: ["dashboard", "enterprise-portal-api"],
|
|
1037
|
+
async run({ token }, context) {
|
|
1038
|
+
if (!token || typeof token !== "string") {
|
|
1039
|
+
throw new Error("Dashboard request requires a session token");
|
|
1040
|
+
}
|
|
1041
|
+
const origin = getApiOrigin();
|
|
1042
|
+
const url = `${origin}/enterprise-portal/dashboard`;
|
|
1043
|
+
if (process.env.NODE_ENV !== "production") {
|
|
1044
|
+
console.debug("[portal-components] fetching dashboard via %s (Enterprise Portal API)", url);
|
|
1045
|
+
}
|
|
1046
|
+
const response = await authenticatedFetch(url, {
|
|
1047
|
+
method: "GET",
|
|
1048
|
+
token,
|
|
1049
|
+
headers: { accept: "application/json" },
|
|
1050
|
+
signal: context?.signal
|
|
1051
|
+
});
|
|
1052
|
+
if (!response.ok) {
|
|
1053
|
+
throw new Error(
|
|
1054
|
+
`Dashboard request failed (${response.status} ${response.statusText})`
|
|
1055
|
+
);
|
|
1056
|
+
}
|
|
1057
|
+
const payload = await response.json();
|
|
1058
|
+
const data = payload.data;
|
|
1059
|
+
const allInstances = data?.instances || [];
|
|
1060
|
+
const channelReleases = data?.channelReleases || [];
|
|
1061
|
+
const licenseData = data?.license || {};
|
|
1062
|
+
const teamStats = data?.teamStats || {};
|
|
1063
|
+
const onlineInstances = allInstances.filter((i) => !i.isAirgap);
|
|
1064
|
+
const airgapInstances = allInstances.filter((i) => i.isAirgap);
|
|
1065
|
+
const twentyFourHoursAgo = Date.now() - 24 * 60 * 60 * 1e3;
|
|
1066
|
+
const activeOnlineInstances = onlineInstances.filter((instance) => {
|
|
1067
|
+
const lastCheckin = instance.lastCheckin ? new Date(instance.lastCheckin).getTime() : 0;
|
|
1068
|
+
return lastCheckin > twentyFourHoursAgo;
|
|
1069
|
+
});
|
|
1070
|
+
const onlineActiveCount = activeOnlineInstances.length;
|
|
1071
|
+
const airgapCount = airgapInstances.length;
|
|
1072
|
+
const calculateUpdates = (instances) => {
|
|
1073
|
+
if (!channelReleases.length) return 0;
|
|
1074
|
+
let numUpdates = 0;
|
|
1075
|
+
for (const instance of instances) {
|
|
1076
|
+
const instanceSequence = instance.channelSequence ?? 0;
|
|
1077
|
+
const matchingReleases = channelReleases.filter(
|
|
1078
|
+
(release) => release.channelId === instance.channelId
|
|
1079
|
+
);
|
|
1080
|
+
for (const release of matchingReleases) {
|
|
1081
|
+
if ((release.channelSequence ?? 0) > instanceSequence) {
|
|
1082
|
+
numUpdates++;
|
|
1083
|
+
}
|
|
1084
|
+
}
|
|
1085
|
+
}
|
|
1086
|
+
return numUpdates;
|
|
1087
|
+
};
|
|
1088
|
+
const onlineUpdates = calculateUpdates(activeOnlineInstances);
|
|
1089
|
+
const airgapUpdates = calculateUpdates(airgapInstances);
|
|
1090
|
+
return {
|
|
1091
|
+
onlineActiveCount,
|
|
1092
|
+
airgapCount,
|
|
1093
|
+
onlineUpdates,
|
|
1094
|
+
airgapUpdates,
|
|
1095
|
+
// Additional data available from the composite endpoint
|
|
1096
|
+
license: licenseData,
|
|
1097
|
+
teamStats
|
|
1098
|
+
};
|
|
1057
1099
|
}
|
|
1058
1100
|
});
|
|
1059
1101
|
var fetchCurrentUser = defineServerAction({
|
|
@@ -1065,7 +1107,7 @@ var fetchCurrentUser = defineServerAction({
|
|
|
1065
1107
|
if (!token || typeof token !== "string") {
|
|
1066
1108
|
throw new Error("Fetch current user requires a session token");
|
|
1067
1109
|
}
|
|
1068
|
-
const endpoint = `${getApiOrigin()}/
|
|
1110
|
+
const endpoint = `${getApiOrigin()}/enterprise-portal/user/profile`;
|
|
1069
1111
|
if (process.env.NODE_ENV !== "production") {
|
|
1070
1112
|
console.debug("[portal-components] fetching current user via %s", endpoint);
|
|
1071
1113
|
}
|
|
@@ -1102,7 +1144,7 @@ var updateUser = defineServerAction({
|
|
|
1102
1144
|
if (!firstName && !lastName) {
|
|
1103
1145
|
throw new Error("At least one of firstName or lastName must be provided");
|
|
1104
1146
|
}
|
|
1105
|
-
const endpoint = `${getApiOrigin()}/
|
|
1147
|
+
const endpoint = `${getApiOrigin()}/enterprise-portal/user/profile`;
|
|
1106
1148
|
if (process.env.NODE_ENV !== "production") {
|
|
1107
1149
|
console.debug("[portal-components] updating user via %s", endpoint);
|
|
1108
1150
|
}
|
|
@@ -1110,7 +1152,7 @@ var updateUser = defineServerAction({
|
|
|
1110
1152
|
if (firstName !== void 0) body.firstName = firstName;
|
|
1111
1153
|
if (lastName !== void 0) body.lastName = lastName;
|
|
1112
1154
|
const response = await authenticatedFetch(endpoint, {
|
|
1113
|
-
method: "
|
|
1155
|
+
method: "PUT",
|
|
1114
1156
|
token,
|
|
1115
1157
|
headers: {
|
|
1116
1158
|
"content-type": "application/json",
|
|
@@ -1138,9 +1180,9 @@ var fetchNotifications = defineServerAction({
|
|
|
1138
1180
|
throw new Error("Fetch notifications requires a session token");
|
|
1139
1181
|
}
|
|
1140
1182
|
if (!customerId || typeof customerId !== "string") {
|
|
1141
|
-
throw new Error("Fetch notifications requires a customerId");
|
|
1183
|
+
throw new Error("Fetch notifications requires a valid customerId");
|
|
1142
1184
|
}
|
|
1143
|
-
const endpoint = `${getApiOrigin()}/
|
|
1185
|
+
const endpoint = `${getApiOrigin()}/enterprise-portal/user/notifications?customer_id=${encodeURIComponent(customerId)}`;
|
|
1144
1186
|
if (process.env.NODE_ENV !== "production") {
|
|
1145
1187
|
console.debug("[portal-components] fetching notifications via %s", endpoint);
|
|
1146
1188
|
}
|
|
@@ -1171,12 +1213,12 @@ var updateNotifications = defineServerAction({
|
|
|
1171
1213
|
throw new Error("Update notifications requires a session token");
|
|
1172
1214
|
}
|
|
1173
1215
|
if (!customerId || typeof customerId !== "string") {
|
|
1174
|
-
throw new Error("Update notifications requires a customerId");
|
|
1216
|
+
throw new Error("Update notifications requires a valid customerId");
|
|
1175
1217
|
}
|
|
1176
1218
|
if (!Array.isArray(notifications)) {
|
|
1177
1219
|
throw new Error("Update notifications requires a notifications array");
|
|
1178
1220
|
}
|
|
1179
|
-
const endpoint = `${getApiOrigin()}/
|
|
1221
|
+
const endpoint = `${getApiOrigin()}/enterprise-portal/user/notifications?customer_id=${encodeURIComponent(customerId)}`;
|
|
1180
1222
|
if (process.env.NODE_ENV !== "production") {
|
|
1181
1223
|
console.debug("[portal-components] updating notifications via %s", endpoint);
|
|
1182
1224
|
}
|
|
@@ -1447,7 +1489,7 @@ var LicenseDetails = async ({
|
|
|
1447
1489
|
console.debug("[portal-components] license response", response.raw);
|
|
1448
1490
|
const { license } = response;
|
|
1449
1491
|
const rows = buildPrimaryRows(license);
|
|
1450
|
-
return /* @__PURE__ */ jsxs("div", { className: "rounded
|
|
1492
|
+
return /* @__PURE__ */ jsxs("div", { className: "rounded border border-gray-100 bg-white p-8 shadow-[0_18px_45px_rgba(17,24,39,0.08)]", children: [
|
|
1451
1493
|
/* @__PURE__ */ jsxs("header", { className: "flex flex-col border-b border-gray-100 pb-6", children: [
|
|
1452
1494
|
/* @__PURE__ */ jsx("h1", { className: "text-3xl font-bold text-gray-900", children: title }),
|
|
1453
1495
|
description ? /* @__PURE__ */ jsx("p", { className: "mt-2 text-sm text-gray-600", children: description }) : null
|
|
@@ -1461,7 +1503,6 @@ var LicenseDetails = async ({
|
|
|
1461
1503
|
] })
|
|
1462
1504
|
] });
|
|
1463
1505
|
};
|
|
1464
|
-
var defaultHiddenLabels = ["Download"];
|
|
1465
1506
|
var defaultTopNavLinks = [
|
|
1466
1507
|
{
|
|
1467
1508
|
label: "Dashboard",
|
|
@@ -1474,16 +1515,21 @@ var defaultTopNavLinks = [
|
|
|
1474
1515
|
className: "h-4 w-4",
|
|
1475
1516
|
fill: "none",
|
|
1476
1517
|
stroke: "currentColor",
|
|
1477
|
-
strokeWidth: "
|
|
1518
|
+
strokeWidth: "2",
|
|
1519
|
+
strokeLinecap: "round",
|
|
1520
|
+
strokeLinejoin: "round",
|
|
1478
1521
|
children: [
|
|
1479
|
-
/* @__PURE__ */ jsx("
|
|
1480
|
-
/* @__PURE__ */ jsx("
|
|
1522
|
+
/* @__PURE__ */ jsx("rect", { width: "7", height: "9", x: "3", y: "3", rx: "1" }),
|
|
1523
|
+
/* @__PURE__ */ jsx("rect", { width: "7", height: "5", x: "14", y: "3", rx: "1" }),
|
|
1524
|
+
/* @__PURE__ */ jsx("rect", { width: "7", height: "9", x: "14", y: "12", rx: "1" }),
|
|
1525
|
+
/* @__PURE__ */ jsx("rect", { width: "7", height: "5", x: "3", y: "16", rx: "1" })
|
|
1481
1526
|
]
|
|
1482
1527
|
}
|
|
1483
1528
|
)
|
|
1484
1529
|
},
|
|
1485
1530
|
{
|
|
1486
|
-
label: "
|
|
1531
|
+
label: "Install",
|
|
1532
|
+
href: "/install",
|
|
1487
1533
|
icon: /* @__PURE__ */ jsxs(
|
|
1488
1534
|
"svg",
|
|
1489
1535
|
{
|
|
@@ -1492,18 +1538,20 @@ var defaultTopNavLinks = [
|
|
|
1492
1538
|
className: "h-4 w-4",
|
|
1493
1539
|
fill: "none",
|
|
1494
1540
|
stroke: "currentColor",
|
|
1495
|
-
strokeWidth: "
|
|
1541
|
+
strokeWidth: "2",
|
|
1542
|
+
strokeLinecap: "round",
|
|
1543
|
+
strokeLinejoin: "round",
|
|
1496
1544
|
children: [
|
|
1497
|
-
/* @__PURE__ */ jsx("path", { d: "
|
|
1498
|
-
/* @__PURE__ */ jsx("
|
|
1499
|
-
/* @__PURE__ */ jsx("
|
|
1545
|
+
/* @__PURE__ */ jsx("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }),
|
|
1546
|
+
/* @__PURE__ */ jsx("polyline", { points: "7 10 12 15 17 10" }),
|
|
1547
|
+
/* @__PURE__ */ jsx("line", { x1: "12", x2: "12", y1: "15", y2: "3" })
|
|
1500
1548
|
]
|
|
1501
1549
|
}
|
|
1502
1550
|
)
|
|
1503
1551
|
},
|
|
1504
1552
|
{
|
|
1505
|
-
label: "
|
|
1506
|
-
href: "/
|
|
1553
|
+
label: "Update",
|
|
1554
|
+
href: "/update",
|
|
1507
1555
|
icon: /* @__PURE__ */ jsxs(
|
|
1508
1556
|
"svg",
|
|
1509
1557
|
{
|
|
@@ -1512,18 +1560,20 @@ var defaultTopNavLinks = [
|
|
|
1512
1560
|
className: "h-4 w-4",
|
|
1513
1561
|
fill: "none",
|
|
1514
1562
|
stroke: "currentColor",
|
|
1515
|
-
strokeWidth: "
|
|
1563
|
+
strokeWidth: "2",
|
|
1564
|
+
strokeLinecap: "round",
|
|
1565
|
+
strokeLinejoin: "round",
|
|
1516
1566
|
children: [
|
|
1517
|
-
/* @__PURE__ */ jsx("path", { d: "
|
|
1518
|
-
/* @__PURE__ */ jsx("path", { d: "
|
|
1567
|
+
/* @__PURE__ */ jsx("path", { d: "M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8" }),
|
|
1568
|
+
/* @__PURE__ */ jsx("path", { d: "M21 3v5h-5" })
|
|
1519
1569
|
]
|
|
1520
1570
|
}
|
|
1521
1571
|
)
|
|
1522
1572
|
},
|
|
1523
1573
|
{
|
|
1524
|
-
label: "
|
|
1525
|
-
href: "/
|
|
1526
|
-
icon: /* @__PURE__ */
|
|
1574
|
+
label: "Security",
|
|
1575
|
+
href: "/security",
|
|
1576
|
+
icon: /* @__PURE__ */ jsx(
|
|
1527
1577
|
"svg",
|
|
1528
1578
|
{
|
|
1529
1579
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -1531,12 +1581,10 @@ var defaultTopNavLinks = [
|
|
|
1531
1581
|
className: "h-4 w-4",
|
|
1532
1582
|
fill: "none",
|
|
1533
1583
|
stroke: "currentColor",
|
|
1534
|
-
strokeWidth: "
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
/* @__PURE__ */ jsx("path", { d: "M4 10c1.5-4 6-6 10-4m6 4c-1.5 4-6 6-10 4" })
|
|
1539
|
-
]
|
|
1584
|
+
strokeWidth: "2",
|
|
1585
|
+
strokeLinecap: "round",
|
|
1586
|
+
strokeLinejoin: "round",
|
|
1587
|
+
children: /* @__PURE__ */ 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" })
|
|
1540
1588
|
}
|
|
1541
1589
|
)
|
|
1542
1590
|
},
|
|
@@ -1551,10 +1599,15 @@ var defaultTopNavLinks = [
|
|
|
1551
1599
|
className: "h-4 w-4",
|
|
1552
1600
|
fill: "none",
|
|
1553
1601
|
stroke: "currentColor",
|
|
1554
|
-
strokeWidth: "
|
|
1602
|
+
strokeWidth: "2",
|
|
1603
|
+
strokeLinecap: "round",
|
|
1604
|
+
strokeLinejoin: "round",
|
|
1555
1605
|
children: [
|
|
1556
|
-
/* @__PURE__ */ jsx("path", { d: "
|
|
1557
|
-
/* @__PURE__ */ jsx("
|
|
1606
|
+
/* @__PURE__ */ jsx("path", { d: "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z" }),
|
|
1607
|
+
/* @__PURE__ */ jsx("path", { d: "M14 2v4a2 2 0 0 0 2 2h4" }),
|
|
1608
|
+
/* @__PURE__ */ jsx("path", { d: "M10 9H8" }),
|
|
1609
|
+
/* @__PURE__ */ jsx("path", { d: "M16 13H8" }),
|
|
1610
|
+
/* @__PURE__ */ jsx("path", { d: "M16 17H8" })
|
|
1558
1611
|
]
|
|
1559
1612
|
}
|
|
1560
1613
|
)
|
|
@@ -1570,12 +1623,13 @@ var defaultTopNavLinks = [
|
|
|
1570
1623
|
className: "h-4 w-4",
|
|
1571
1624
|
fill: "none",
|
|
1572
1625
|
stroke: "currentColor",
|
|
1573
|
-
strokeWidth: "
|
|
1626
|
+
strokeWidth: "2",
|
|
1627
|
+
strokeLinecap: "round",
|
|
1628
|
+
strokeLinejoin: "round",
|
|
1574
1629
|
children: [
|
|
1575
|
-
/* @__PURE__ */ jsx("
|
|
1576
|
-
/* @__PURE__ */ jsx("path", { d: "
|
|
1577
|
-
/* @__PURE__ */ jsx("
|
|
1578
|
-
/* @__PURE__ */ jsx("path", { d: "M9 15h6" })
|
|
1630
|
+
/* @__PURE__ */ 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" }),
|
|
1631
|
+
/* @__PURE__ */ jsx("path", { d: "m21 2-9.6 9.6" }),
|
|
1632
|
+
/* @__PURE__ */ jsx("circle", { cx: "7.5", cy: "15.5", r: "5.5" })
|
|
1579
1633
|
]
|
|
1580
1634
|
}
|
|
1581
1635
|
)
|
|
@@ -1591,10 +1645,16 @@ var defaultTopNavLinks = [
|
|
|
1591
1645
|
className: "h-4 w-4",
|
|
1592
1646
|
fill: "none",
|
|
1593
1647
|
stroke: "currentColor",
|
|
1594
|
-
strokeWidth: "
|
|
1648
|
+
strokeWidth: "2",
|
|
1649
|
+
strokeLinecap: "round",
|
|
1650
|
+
strokeLinejoin: "round",
|
|
1595
1651
|
children: [
|
|
1596
|
-
/* @__PURE__ */ jsx("
|
|
1597
|
-
/* @__PURE__ */ jsx("
|
|
1652
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10" }),
|
|
1653
|
+
/* @__PURE__ */ jsx("path", { d: "m4.93 4.93 4.24 4.24" }),
|
|
1654
|
+
/* @__PURE__ */ jsx("path", { d: "m14.83 9.17 4.24-4.24" }),
|
|
1655
|
+
/* @__PURE__ */ jsx("path", { d: "m14.83 14.83 4.24 4.24" }),
|
|
1656
|
+
/* @__PURE__ */ jsx("path", { d: "m9.17 14.83-4.24 4.24" }),
|
|
1657
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "4" })
|
|
1598
1658
|
]
|
|
1599
1659
|
}
|
|
1600
1660
|
)
|
|
@@ -1647,7 +1707,7 @@ var TopNav = async ({
|
|
|
1647
1707
|
try {
|
|
1648
1708
|
const branding = await fetchCustomBranding();
|
|
1649
1709
|
if (branding.brandingData) {
|
|
1650
|
-
const decoded = Buffer
|
|
1710
|
+
const decoded = Buffer.from(branding.brandingData, "base64").toString(
|
|
1651
1711
|
"utf-8"
|
|
1652
1712
|
);
|
|
1653
1713
|
try {
|
|
@@ -1680,8 +1740,7 @@ var TopNav = async ({
|
|
|
1680
1740
|
console.debug("[portal-components] branding fetch failed", error);
|
|
1681
1741
|
}
|
|
1682
1742
|
const baseLinks = links ?? defaultTopNavLinks;
|
|
1683
|
-
const
|
|
1684
|
-
const hiddenSet = computedHiddenLabels ? new Set(computedHiddenLabels) : null;
|
|
1743
|
+
const hiddenSet = hiddenLabels ? new Set(hiddenLabels) : null;
|
|
1685
1744
|
let resolvedLinks = baseLinks.filter(
|
|
1686
1745
|
(link) => !hiddenSet?.has(link.label)
|
|
1687
1746
|
);
|
|
@@ -1694,7 +1753,7 @@ var TopNav = async ({
|
|
|
1694
1753
|
return /* @__PURE__ */ jsx(
|
|
1695
1754
|
"div",
|
|
1696
1755
|
{
|
|
1697
|
-
className: "relative flex h-[
|
|
1756
|
+
className: "relative flex h-[280px] w-full items-start justify-center",
|
|
1698
1757
|
style: {
|
|
1699
1758
|
backgroundImage: `linear-gradient(to top, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0) 33%), linear-gradient(${gradientStart}, ${gradientEnd})`,
|
|
1700
1759
|
backgroundRepeat: "no-repeat",
|
|
@@ -1721,7 +1780,7 @@ var TopNav = async ({
|
|
|
1721
1780
|
brandTitle ? /* @__PURE__ */ jsx("span", { className: "text-lg font-semibold text-gray-900", children: brandTitle }) : null
|
|
1722
1781
|
] }) : /* @__PURE__ */ jsx("div", {}),
|
|
1723
1782
|
/* @__PURE__ */ jsxs("details", { className: "group relative", children: [
|
|
1724
|
-
/* @__PURE__ */ jsxs("summary", { className: "flex cursor-pointer items-center gap-2
|
|
1783
|
+
/* @__PURE__ */ jsxs("summary", { className: "flex cursor-pointer items-center gap-2 text-sm font-medium text-gray-600 hover:text-gray-900 list-none", children: [
|
|
1725
1784
|
/* @__PURE__ */ jsxs(
|
|
1726
1785
|
"svg",
|
|
1727
1786
|
{
|
|
@@ -1793,12 +1852,12 @@ var TopNav = async ({
|
|
|
1793
1852
|
const className = `flex items-center gap-2 px-4 py-1 transition text-gray-500 ${isActive ? "underline underline-offset-8 decoration-2" : ""}`;
|
|
1794
1853
|
if (href) {
|
|
1795
1854
|
return /* @__PURE__ */ jsxs(Link, { href, className, children: [
|
|
1796
|
-
/* @__PURE__ */ jsx("span", { className: isActive ? "text-
|
|
1855
|
+
/* @__PURE__ */ jsx("span", { className: isActive ? "text-gray-900" : "text-gray-500", children: icon }),
|
|
1797
1856
|
/* @__PURE__ */ jsx("span", { children: label })
|
|
1798
1857
|
] }, label);
|
|
1799
1858
|
}
|
|
1800
1859
|
return /* @__PURE__ */ jsxs("button", { className, type: "button", children: [
|
|
1801
|
-
/* @__PURE__ */ jsx("span", { className: isActive ? "text-
|
|
1860
|
+
/* @__PURE__ */ jsx("span", { className: isActive ? "text-gray-900" : "text-gray-500", children: icon }),
|
|
1802
1861
|
/* @__PURE__ */ jsx("span", { children: label })
|
|
1803
1862
|
] }, label);
|
|
1804
1863
|
}) })
|
|
@@ -1806,7 +1865,7 @@ var TopNav = async ({
|
|
|
1806
1865
|
}
|
|
1807
1866
|
);
|
|
1808
1867
|
};
|
|
1809
|
-
var GlobeIcon = (props) => /* @__PURE__ */
|
|
1868
|
+
var GlobeIcon = (props) => /* @__PURE__ */ jsx(
|
|
1810
1869
|
"svg",
|
|
1811
1870
|
{
|
|
1812
1871
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -1814,16 +1873,14 @@ var GlobeIcon = (props) => /* @__PURE__ */ jsxs(
|
|
|
1814
1873
|
fill: "none",
|
|
1815
1874
|
stroke: "currentColor",
|
|
1816
1875
|
strokeWidth: 1.5,
|
|
1876
|
+
strokeLinecap: "round",
|
|
1877
|
+
strokeLinejoin: "round",
|
|
1817
1878
|
"aria-hidden": "true",
|
|
1818
1879
|
...props,
|
|
1819
|
-
children:
|
|
1820
|
-
/* @__PURE__ */ jsx("circle", { cx: 12, cy: 12, r: 10 }),
|
|
1821
|
-
/* @__PURE__ */ jsx("path", { d: "M2 12h20" }),
|
|
1822
|
-
/* @__PURE__ */ 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" })
|
|
1823
|
-
]
|
|
1880
|
+
children: /* @__PURE__ */ 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" })
|
|
1824
1881
|
}
|
|
1825
1882
|
);
|
|
1826
|
-
var AirGapIcon = (props) => /* @__PURE__ */
|
|
1883
|
+
var AirGapIcon = (props) => /* @__PURE__ */ jsx(
|
|
1827
1884
|
"svg",
|
|
1828
1885
|
{
|
|
1829
1886
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -1831,15 +1888,11 @@ var AirGapIcon = (props) => /* @__PURE__ */ jsxs(
|
|
|
1831
1888
|
fill: "none",
|
|
1832
1889
|
stroke: "currentColor",
|
|
1833
1890
|
strokeWidth: 1.5,
|
|
1891
|
+
strokeLinecap: "round",
|
|
1892
|
+
strokeLinejoin: "round",
|
|
1834
1893
|
"aria-hidden": "true",
|
|
1835
1894
|
...props,
|
|
1836
|
-
children:
|
|
1837
|
-
/* @__PURE__ */ jsx("path", { d: "m4 4 16 16" }),
|
|
1838
|
-
/* @__PURE__ */ jsx("path", { d: "M7.5 4.5a8 8 0 0 1 9 0" }),
|
|
1839
|
-
/* @__PURE__ */ jsx("path", { d: "M4.5 7.5a8 8 0 0 0 0 9" }),
|
|
1840
|
-
/* @__PURE__ */ jsx("path", { d: "M16.5 19.5a8 8 0 0 0 0-9" }),
|
|
1841
|
-
/* @__PURE__ */ jsx("path", { d: "M7 12a5 5 0 0 0 5 5" })
|
|
1842
|
-
]
|
|
1895
|
+
children: /* @__PURE__ */ 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" })
|
|
1843
1896
|
}
|
|
1844
1897
|
);
|
|
1845
1898
|
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)]";
|
|
@@ -1880,7 +1933,7 @@ var UpdatesCard = ({
|
|
|
1880
1933
|
/* @__PURE__ */ jsx("footer", { className: footerClass, children: /* @__PURE__ */ jsx(Link, { href: "/update", children: "View updates \u2192" }) })
|
|
1881
1934
|
] });
|
|
1882
1935
|
UpdatesCard.displayName = "UpdatesCard";
|
|
1883
|
-
var UploadIcon = (props) => /* @__PURE__ */
|
|
1936
|
+
var UploadIcon = (props) => /* @__PURE__ */ jsx(
|
|
1884
1937
|
"svg",
|
|
1885
1938
|
{
|
|
1886
1939
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -1888,13 +1941,11 @@ var UploadIcon = (props) => /* @__PURE__ */ jsxs(
|
|
|
1888
1941
|
fill: "none",
|
|
1889
1942
|
stroke: "currentColor",
|
|
1890
1943
|
strokeWidth: 1.5,
|
|
1944
|
+
strokeLinecap: "round",
|
|
1945
|
+
strokeLinejoin: "round",
|
|
1891
1946
|
"aria-hidden": "true",
|
|
1892
1947
|
...props,
|
|
1893
|
-
children:
|
|
1894
|
-
/* @__PURE__ */ jsx("path", { d: "M12 16V3" }),
|
|
1895
|
-
/* @__PURE__ */ jsx("path", { d: "M8 7l4-4 4 4" }),
|
|
1896
|
-
/* @__PURE__ */ jsx("path", { d: "M5 21h14" })
|
|
1897
|
-
]
|
|
1948
|
+
children: /* @__PURE__ */ 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" })
|
|
1898
1949
|
}
|
|
1899
1950
|
);
|
|
1900
1951
|
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)]";
|
|
@@ -2301,7 +2352,7 @@ var UserSettingsCard = () => /* @__PURE__ */ jsxs("section", { className: baseCa
|
|
|
2301
2352
|
/* @__PURE__ */ jsx("footer", { className: footerClass3, children: /* @__PURE__ */ jsx(Link, { href: "/user-settings", children: "View user settings \u2192" }) })
|
|
2302
2353
|
] });
|
|
2303
2354
|
UserSettingsCard.displayName = "UserSettingsCard";
|
|
2304
|
-
var UsersIcon = (props) => /* @__PURE__ */
|
|
2355
|
+
var UsersIcon = (props) => /* @__PURE__ */ jsx(
|
|
2305
2356
|
"svg",
|
|
2306
2357
|
{
|
|
2307
2358
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -2309,17 +2360,14 @@ var UsersIcon = (props) => /* @__PURE__ */ jsxs(
|
|
|
2309
2360
|
fill: "none",
|
|
2310
2361
|
stroke: "currentColor",
|
|
2311
2362
|
strokeWidth: 1.5,
|
|
2363
|
+
strokeLinecap: "round",
|
|
2364
|
+
strokeLinejoin: "round",
|
|
2312
2365
|
"aria-hidden": "true",
|
|
2313
2366
|
...props,
|
|
2314
|
-
children:
|
|
2315
|
-
/* @__PURE__ */ jsx("path", { d: "M16 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" }),
|
|
2316
|
-
/* @__PURE__ */ jsx("circle", { cx: 10, cy: 8, r: 4 }),
|
|
2317
|
-
/* @__PURE__ */ jsx("path", { d: "M20 21v-2a4 4 0 0 0-3-3.87" }),
|
|
2318
|
-
/* @__PURE__ */ jsx("path", { d: "M17 3a4 4 0 0 1 0 8" })
|
|
2319
|
-
]
|
|
2367
|
+
children: /* @__PURE__ */ 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" })
|
|
2320
2368
|
}
|
|
2321
2369
|
);
|
|
2322
|
-
var KeyIcon = (props) => /* @__PURE__ */
|
|
2370
|
+
var KeyIcon = (props) => /* @__PURE__ */ jsx(
|
|
2323
2371
|
"svg",
|
|
2324
2372
|
{
|
|
2325
2373
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -2327,13 +2375,11 @@ var KeyIcon = (props) => /* @__PURE__ */ jsxs(
|
|
|
2327
2375
|
fill: "none",
|
|
2328
2376
|
stroke: "currentColor",
|
|
2329
2377
|
strokeWidth: 1.5,
|
|
2378
|
+
strokeLinecap: "round",
|
|
2379
|
+
strokeLinejoin: "round",
|
|
2330
2380
|
"aria-hidden": "true",
|
|
2331
2381
|
...props,
|
|
2332
|
-
children:
|
|
2333
|
-
/* @__PURE__ */ jsx("circle", { cx: 7, cy: 15, r: 4 }),
|
|
2334
|
-
/* @__PURE__ */ 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" }),
|
|
2335
|
-
/* @__PURE__ */ jsx("path", { d: "M16 11l1.5 1.5" })
|
|
2336
|
-
]
|
|
2382
|
+
children: /* @__PURE__ */ 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" })
|
|
2337
2383
|
}
|
|
2338
2384
|
);
|
|
2339
2385
|
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)]";
|
|
@@ -2379,6 +2425,6 @@ UpdateLayout.displayName = "UpdateLayout";
|
|
|
2379
2425
|
// src/index.ts
|
|
2380
2426
|
var portalComponentsVersion = package_default.version;
|
|
2381
2427
|
|
|
2382
|
-
export { Button, LicenseDetails, SupportCard, TeamSettingsCard, TopNav, UpdateLayout, UpdatesCard, UserSettings, UserSettingsCard, createPortalTheme, decodeJwtPayload, defaultTopNavLinks, defineServerAction, deleteSupportBundle, downloadSupportBundle, fetchCurrentUser, fetchCustomBranding, fetchLicenseDetails, fetchNotifications, getCustomerIdFromToken, getSecurityInfo, getSecurityInfoDiff, getSecurityInfoSBOM, getSupportBundleUploadUrl, initiateLogin, listReleases, listSupportBundles, portalComponentsVersion, portalThemeTokens, updateNotifications, updateUser, uploadSupportBundle, verifyMagicLink };
|
|
2428
|
+
export { Button, LicenseDetails, SupportCard, TeamSettingsCard, TopNav, UpdateLayout, UpdatesCard, UserSettings, UserSettingsCard, createPortalTheme, decodeJwtPayload, defaultTopNavLinks, defineServerAction, deleteSupportBundle, downloadSupportBundle, fetchCurrentUser, fetchCustomBranding, fetchDashboardComposite, fetchLicenseDetails, fetchNotifications, getCustomerIdFromToken, getSecurityInfo, getSecurityInfoDiff, getSecurityInfoSBOM, getSupportBundleUploadUrl, initiateLogin, listReleases, listSupportBundles, portalComponentsVersion, portalThemeTokens, updateNotifications, updateUser, uploadSupportBundle, verifyMagicLink };
|
|
2383
2429
|
//# sourceMappingURL=index.js.map
|
|
2384
2430
|
//# sourceMappingURL=index.js.map
|