From 57f5fd51e6055f18792678847771c4001a08d337 Mon Sep 17 00:00:00 2001 From: Pablo Lara Date: Thu, 25 Jul 2024 10:30:28 +0200 Subject: [PATCH 01/17] fix: add suppressHydrationWarning to resolve console errors --- app/(prowler)/layout.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/app/(prowler)/layout.tsx b/app/(prowler)/layout.tsx index 9c9b7d2a93..149a706445 100644 --- a/app/(prowler)/layout.tsx +++ b/app/(prowler)/layout.tsx @@ -37,6 +37,7 @@ export default function RootLayout({ Date: Fri, 26 Jul 2024 09:32:48 +0200 Subject: [PATCH 02/17] chore: add server-only library --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 11352e1295..a4aa735b6d 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "next-themes": "^0.2.1", "react": "18.3.1", "react-dom": "18.3.1", + "server-only": "^0.0.1", "swr": "^2.2.5" }, "devDependencies": { From 0ee60efaa7af45a30d6af55a3c24affb082d7d25 Mon Sep 17 00:00:00 2001 From: Pablo Lara Date: Fri, 26 Jul 2024 18:01:50 +0200 Subject: [PATCH 03/17] WIP: Mock API for providers and start rendering data --- app/api/providers/route.ts | 10 ++++ app/data/dataProvider.ts | 8 +++ app/data/index.ts | 1 + dataProviders.json | 99 ++++++++++++++++++++++++++++++++++++++ utils/fetcher.tsx | 1 - utils/index.ts | 1 + 6 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 app/api/providers/route.ts create mode 100644 app/data/dataProvider.ts create mode 100644 app/data/index.ts create mode 100644 dataProviders.json delete mode 100644 utils/fetcher.tsx create mode 100644 utils/index.ts diff --git a/app/api/providers/route.ts b/app/api/providers/route.ts new file mode 100644 index 0000000000..ef9b5995e2 --- /dev/null +++ b/app/api/providers/route.ts @@ -0,0 +1,10 @@ +import { NextResponse } from "next/server"; + +import data from "../../../dataProviders.json"; + +export async function GET() { + // Simulate fetching data with a delay + await new Promise((resolve) => setTimeout(resolve, 2000)); + + return NextResponse.json({ providers: data }); +} diff --git a/app/data/dataProvider.ts b/app/data/dataProvider.ts new file mode 100644 index 0000000000..429f18f4cc --- /dev/null +++ b/app/data/dataProvider.ts @@ -0,0 +1,8 @@ +import "server-only"; + +export default async function getProvider() { + const res = await fetch("http://localhost:3000/api/providers"); + const product = await res.json(); + + return product; +} diff --git a/app/data/index.ts b/app/data/index.ts new file mode 100644 index 0000000000..138e0c8df1 --- /dev/null +++ b/app/data/index.ts @@ -0,0 +1 @@ +export * from "./dataProvider"; diff --git a/dataProviders.json b/dataProviders.json new file mode 100644 index 0000000000..6aec7c9584 --- /dev/null +++ b/dataProviders.json @@ -0,0 +1,99 @@ +{ + "links": { + "first": "https://api.prowler.com/api/v1/providers?page%5Bnumber%5D=1", + "last": "https://api.prowler.com/api/v1/providers?page%5Bnumber%5D=1", + "next": null, + "prev": null + }, + "data": [ + { + "id": "5fd8f121-269e-4715-84cf-f92373f15dfa", + "type": "providers", + "attributes": { + "provider": "aws", + "provider_id": "1234567890", + "alias": "mock_aws_connected", + "connection": { + "connected": true, + "last_checked_at": "2024-07-17T09:55:14.191475Z" + }, + "scanner_args": { + "only_logs": true, + "excluded_checks": [ + "awslambda_function_no_secrets_in_code", + "cloudwatch_log_group_no_secrets_in_logs" + ], + "aws_retries_max_attempts": 5 + }, + "inserted_at": "2024-07-17T09:55:14.191475Z", + "updated_at": "2024-07-17T09:55:14.191475Z", + "created_by": { + "object": "user", + "id": "eea048ab-7cb3-47eb-9e5e-dce591ade41f" + } + } + }, + { + "id": "16aaeb4e-d3cd-4bb6-86f8-6c39cf93821e", + "type": "providers", + "attributes": { + "provider": "aws", + "provider_id": "1234567891", + "alias": "mock_aws_not_connected", + "connection": { + "connected": false, + "last_checked_at": "2024-07-17T09:55:18.987425Z" + }, + "scanner_args": { + "only_logs": true, + "excluded_checks": [ + "awslambda_function_no_secrets_in_code", + "cloudwatch_log_group_no_secrets_in_logs" + ], + "aws_retries_max_attempts": 5 + }, + "inserted_at": "2024-07-17T09:50:18.987425Z", + "updated_at": "2024-07-17T09:55:18.987425Z", + "created_by": { + "object": "user", + "id": "a8f5e964-5964-4aaf-9176-844e2c3b0716" + } + } + }, + { + "id": "63f16b03-7849-4054-b40b-300e331f46f0", + "type": "providers", + "attributes": { + "provider": "gcp", + "provider_id": "1234567895", + "alias": "mock_gcp", + "connection": { + "connected": true, + "last_checked_at": "2024-07-17T09:55:18.987425Z" + }, + "scanner_args": { + "only_logs": true, + "excluded_checks": [ + "apikeys_key_exists", + "cloudsql_instance_public_ip" + ], + "excluded_services": ["kms"] + }, + "inserted_at": "2024-07-17T09:50:18.987425Z", + "updated_at": "2024-07-17T09:55:18.987425Z", + "created_by": { + "object": "user", + "id": "eea048ab-7cb3-47eb-9e5e-dce591ade41f" + } + } + } + ], + "meta": { + "pagination": { + "page": 1, + "pages": 1, + "count": 3 + }, + "version": "v1" + } +} diff --git a/utils/fetcher.tsx b/utils/fetcher.tsx deleted file mode 100644 index 50b047c9ad..0000000000 --- a/utils/fetcher.tsx +++ /dev/null @@ -1 +0,0 @@ -export const fetcher = (url: string) => fetch(url).then((res) => res.json()); diff --git a/utils/index.ts b/utils/index.ts new file mode 100644 index 0000000000..d6820eec0c --- /dev/null +++ b/utils/index.ts @@ -0,0 +1 @@ +export * from "./capitalize"; From b8de7134978dbd081fa5d1e970d94507b7c92962 Mon Sep 17 00:00:00 2001 From: Pablo Lara Date: Sun, 28 Jul 2024 16:35:45 +0200 Subject: [PATCH 04/17] chore: relocate utils folder to proper directory --- lib/actions/index.ts | 1 + lib/actions/provider.actions.ts | 13 ++++++ lib/index.ts | 1 + lib/utils.ts | 81 +++++++++++++++++++++++++++++++++ utils/capitalize.ts | 3 -- utils/index.ts | 1 - 6 files changed, 96 insertions(+), 4 deletions(-) create mode 100644 lib/actions/index.ts create mode 100644 lib/actions/provider.actions.ts create mode 100644 lib/index.ts create mode 100644 lib/utils.ts delete mode 100644 utils/capitalize.ts delete mode 100644 utils/index.ts diff --git a/lib/actions/index.ts b/lib/actions/index.ts new file mode 100644 index 0000000000..67b97f1e4a --- /dev/null +++ b/lib/actions/index.ts @@ -0,0 +1 @@ +export * from "./provider.actions"; diff --git a/lib/actions/provider.actions.ts b/lib/actions/provider.actions.ts new file mode 100644 index 0000000000..02cb2578e9 --- /dev/null +++ b/lib/actions/provider.actions.ts @@ -0,0 +1,13 @@ +import "server-only"; + +import { parseStringify } from "../utils"; + +export const getProvider = async () => { + try { + const providers = await fetch("http://localhost:3000/api/providers"); + const data = await providers.json(); + return parseStringify(data); + } catch (error) { + console.log(error); + } +}; diff --git a/lib/index.ts b/lib/index.ts new file mode 100644 index 0000000000..178cd64f81 --- /dev/null +++ b/lib/index.ts @@ -0,0 +1 @@ +export * from "./utils"; diff --git a/lib/utils.ts b/lib/utils.ts new file mode 100644 index 0000000000..261f2865a8 --- /dev/null +++ b/lib/utils.ts @@ -0,0 +1,81 @@ +import { type ClassValue, clsx } from "clsx"; +import { twMerge } from "tailwind-merge"; + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} + +export function capitalize(str: string): string { + return str.charAt(0).toUpperCase() + str.slice(1); +} + +export const parseStringify = (value: any) => JSON.parse(JSON.stringify(value)); + +export const convertFileToUrl = (file: File) => URL.createObjectURL(file); + +// FORMAT DATE TIME +export const formatDateTime = (dateString: Date | string) => { + const dateTimeOptions: Intl.DateTimeFormatOptions = { + // weekday: "short", // abbreviated weekday name (e.g., 'Mon') + month: "short", // abbreviated month name (e.g., 'Oct') + day: "numeric", // numeric day of the month (e.g., '25') + year: "numeric", // numeric year (e.g., '2023') + hour: "numeric", // numeric hour (e.g., '8') + minute: "numeric", // numeric minute (e.g., '30') + hour12: true, // use 12-hour clock (true) or 24-hour clock (false) + }; + + const dateDayOptions: Intl.DateTimeFormatOptions = { + weekday: "short", // abbreviated weekday name (e.g., 'Mon') + year: "numeric", // numeric year (e.g., '2023') + month: "2-digit", // abbreviated month name (e.g., 'Oct') + day: "2-digit", // numeric day of the month (e.g., '25') + }; + + const dateOptions: Intl.DateTimeFormatOptions = { + month: "short", // abbreviated month name (e.g., 'Oct') + year: "numeric", // numeric year (e.g., '2023') + day: "numeric", // numeric day of the month (e.g., '25') + }; + + const timeOptions: Intl.DateTimeFormatOptions = { + hour: "numeric", // numeric hour (e.g., '8') + minute: "numeric", // numeric minute (e.g., '30') + hour12: true, // use 12-hour clock (true) or 24-hour clock (false) + }; + + const formattedDateTime: string = new Date(dateString).toLocaleString( + "en-US", + dateTimeOptions, + ); + + const formattedDateDay: string = new Date(dateString).toLocaleString( + "en-US", + dateDayOptions, + ); + + const formattedDate: string = new Date(dateString).toLocaleString( + "en-US", + dateOptions, + ); + + const formattedTime: string = new Date(dateString).toLocaleString( + "en-US", + timeOptions, + ); + + return { + dateTime: formattedDateTime, + dateDay: formattedDateDay, + dateOnly: formattedDate, + timeOnly: formattedTime, + }; +}; + +export function encryptKey(passkey: string) { + return btoa(passkey); +} + +export function decryptKey(passkey: string) { + return atob(passkey); +} diff --git a/utils/capitalize.ts b/utils/capitalize.ts deleted file mode 100644 index 9996d36f81..0000000000 --- a/utils/capitalize.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function capitalize(str: string): string { - return str.charAt(0).toUpperCase() + str.slice(1); -} diff --git a/utils/index.ts b/utils/index.ts deleted file mode 100644 index d6820eec0c..0000000000 --- a/utils/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./capitalize"; From 54b3fc3ae643d994bdb0f231e6831ac5943a68b5 Mon Sep 17 00:00:00 2001 From: Pablo Lara Date: Sun, 28 Jul 2024 16:40:29 +0200 Subject: [PATCH 05/17] chore: install shadcn for tables, adding sttings page --- app/(prowler)/layout.tsx | 4 ++-- app/(prowler)/settings/page.tsx | 12 ++++++++++++ app/data/dataProvider.ts | 8 -------- app/data/index.ts | 1 - config/fonts.ts | 5 ++++- dataProviders.json | 2 +- package.json | 9 +++++++-- types/components.ts | 25 +++++++++++++++++++++++++ 8 files changed, 51 insertions(+), 15 deletions(-) create mode 100644 app/(prowler)/settings/page.tsx delete mode 100644 app/data/dataProvider.ts delete mode 100644 app/data/index.ts diff --git a/app/(prowler)/layout.tsx b/app/(prowler)/layout.tsx index 149a706445..13319c3540 100644 --- a/app/(prowler)/layout.tsx +++ b/app/(prowler)/layout.tsx @@ -1,12 +1,12 @@ import "@/styles/globals.css"; -import clsx from "clsx"; import { Metadata, Viewport } from "next"; import React from "react"; import { SidebarWrap } from "@/components"; import { fontSans } from "@/config/fonts"; import { siteConfig } from "@/config/site"; +import { cn } from "@/lib/utils"; import { Providers } from "../providers"; @@ -38,7 +38,7 @@ export default function RootLayout({ +
+ + + ); +} diff --git a/app/data/dataProvider.ts b/app/data/dataProvider.ts deleted file mode 100644 index 429f18f4cc..0000000000 --- a/app/data/dataProvider.ts +++ /dev/null @@ -1,8 +0,0 @@ -import "server-only"; - -export default async function getProvider() { - const res = await fetch("http://localhost:3000/api/providers"); - const product = await res.json(); - - return product; -} diff --git a/app/data/index.ts b/app/data/index.ts deleted file mode 100644 index 138e0c8df1..0000000000 --- a/app/data/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./dataProvider"; diff --git a/config/fonts.ts b/config/fonts.ts index 0e7d9c9422..16c934d5a6 100644 --- a/config/fonts.ts +++ b/config/fonts.ts @@ -1,4 +1,7 @@ -import { Fira_Code as FontMono, Inter as FontSans } from "next/font/google"; +import { + Fira_Code as FontMono, + Plus_Jakarta_Sans as FontSans, +} from "next/font/google"; export const fontSans = FontSans({ subsets: ["latin"], diff --git a/dataProviders.json b/dataProviders.json index 6aec7c9584..5199fe7228 100644 --- a/dataProviders.json +++ b/dataProviders.json @@ -37,7 +37,7 @@ "id": "16aaeb4e-d3cd-4bb6-86f8-6c39cf93821e", "type": "providers", "attributes": { - "provider": "aws", + "provider": "azure", "provider_id": "1234567891", "alias": "mock_aws_not_connected", "connection": { diff --git a/package.json b/package.json index c3aaef6df5..c0dd46c781 100644 --- a/package.json +++ b/package.json @@ -5,16 +5,21 @@ "@nextui-org/theme": "2.2.5", "@react-aria/ssr": "3.9.4", "@react-aria/visually-hidden": "3.8.12", - "clsx": "2.1.1", + "@tanstack/react-table": "^8.19.3", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.1", "date-fns": "^3.6.0", "framer-motion": "~11.1.1", "intl-messageformat": "^10.5.0", + "lucide-react": "^0.417.0", "next": "14.2.3", "next-themes": "^0.2.1", "react": "18.3.1", "react-dom": "18.3.1", "server-only": "^0.0.1", - "swr": "^2.2.5" + "swr": "^2.2.5", + "tailwind-merge": "^2.4.0", + "tailwindcss-animate": "^1.0.7" }, "devDependencies": { "@iconify/react": "^5.0.1", diff --git a/types/components.ts b/types/components.ts index c9b078e314..14bfe0b219 100644 --- a/types/components.ts +++ b/types/components.ts @@ -8,3 +8,28 @@ export type IconProps = { icon: React.FC; style?: React.CSSProperties; }; + +export interface ProviderProps { + id: string; + type: "providers"; + attributes: { + provider: "aws" | "azure" | "gcp"; + provider_id: string; + alias: string; + connection: { + connected: boolean; + last_checked_at: string; + }; + scanner_args: { + only_logs: boolean; + excluded_checks: string[]; + aws_retries_max_attempts: number; + }; + inserted_at: string; + updated_at: string; + created_by: { + object: string; + id: string; + }; + }; +} From 8ce28dd3119a4252e1b367a47b73061d5297b1e0 Mon Sep 17 00:00:00 2001 From: Pablo Lara Date: Mon, 29 Jul 2024 11:13:39 +0200 Subject: [PATCH 06/17] refactor: improve sidebar display behavior --- components/ui/sidebar/SidebarWrap.tsx | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/components/ui/sidebar/SidebarWrap.tsx b/components/ui/sidebar/SidebarWrap.tsx index f2212850bb..e68958a446 100644 --- a/components/ui/sidebar/SidebarWrap.tsx +++ b/components/ui/sidebar/SidebarWrap.tsx @@ -17,8 +17,9 @@ import { sectionItemsWithTeams } from "./SidebarItems"; import { UserAvatar } from "./UserAvatar"; export const SidebarWrap = () => { - const [isCollapsed, setIsCollapsed] = useState(false); - const [isLoaded, setIsLoaded] = useState(false); + const [isCollapsed, setIsCollapsed] = useState( + !!localStorage.getItem("isCollapsed") ?? true, + ); const pathname = usePathname(); const currentPath = pathname === "/" ? "overview" : pathname.split("/")?.[1]; @@ -32,7 +33,6 @@ export const SidebarWrap = () => { if (savedState !== null) { setIsCollapsed(JSON.parse(savedState)); } - setIsLoaded(true); }, []); const onToggle = useCallback(() => { @@ -43,8 +43,6 @@ export const SidebarWrap = () => { }); }, []); - if (!isLoaded) return null; - return (
Date: Mon, 29 Jul 2024 11:14:30 +0200 Subject: [PATCH 07/17] chore: add fake data to the dataProviders --- dataProviders.json | 6 ++++++ types/components.ts | 2 ++ 2 files changed, 8 insertions(+) diff --git a/dataProviders.json b/dataProviders.json index 5199fe7228..ab8a058620 100644 --- a/dataProviders.json +++ b/dataProviders.json @@ -13,6 +13,8 @@ "provider": "aws", "provider_id": "1234567890", "alias": "mock_aws_connected", + "status": "cancelled", + "resources": 101, "connection": { "connected": true, "last_checked_at": "2024-07-17T09:55:14.191475Z" @@ -40,6 +42,8 @@ "provider": "azure", "provider_id": "1234567891", "alias": "mock_aws_not_connected", + "status": "pending", + "resources": 222, "connection": { "connected": false, "last_checked_at": "2024-07-17T09:55:18.987425Z" @@ -67,6 +71,8 @@ "provider": "gcp", "provider_id": "1234567895", "alias": "mock_gcp", + "status": "completed", + "resources": 143, "connection": { "connected": true, "last_checked_at": "2024-07-17T09:55:18.987425Z" diff --git a/types/components.ts b/types/components.ts index 14bfe0b219..994adf02a2 100644 --- a/types/components.ts +++ b/types/components.ts @@ -16,6 +16,8 @@ export interface ProviderProps { provider: "aws" | "azure" | "gcp"; provider_id: string; alias: string; + status: "completed" | "pending" | "cancelled"; + resources: number; connection: { connected: boolean; last_checked_at: string; From 151fca146ec764e8936990776e6939e9de5b3451 Mon Sep 17 00:00:00 2001 From: Pablo Lara Date: Mon, 29 Jul 2024 11:16:18 +0200 Subject: [PATCH 08/17] chore: remove the old table and rename ProviderInfo component --- app/(prowler)/providers/data.ts | 371 ---------------- .../{AccountInfo.tsx => ProviderInfo.tsx} | 16 +- components/ui/table/CustomTable.tsx | 406 ------------------ 3 files changed, 8 insertions(+), 785 deletions(-) delete mode 100644 app/(prowler)/providers/data.ts rename components/providers/{AccountInfo.tsx => ProviderInfo.tsx} (76%) delete mode 100644 components/ui/table/CustomTable.tsx diff --git a/app/(prowler)/providers/data.ts b/app/(prowler)/providers/data.ts deleted file mode 100644 index 98f013fdcd..0000000000 --- a/app/(prowler)/providers/data.ts +++ /dev/null @@ -1,371 +0,0 @@ -export type Status = "active" | "paused" | "warning"; - -export const statusColorMap: Record = - { - active: "success", - paused: "danger", - warning: "warning", - }; - -export interface Provider { - id: number; - account: string; - provider_id: number; - connected: boolean; - group: string; - scan_status: Status; - scan_status_time: string; - last_scan: string; - next_scan: string; - provider_img: string; - resources: number; - added: string; - actions?: React.ReactNode; -} - -export const statusOptions = [ - { name: "Active", uid: "active" }, - { name: "Paused", uid: "paused" }, - { name: "Warning", uid: "warning" }, -]; - -// Define columns explicitly -export const columns = [ - { name: "ID", uid: "id", sortable: true, initial_visible: false }, - { name: "ACCOUNT", uid: "account", sortable: false, initial_visible: true }, - { name: "GROUP(s)", uid: "group", sortable: false, initial_visible: false }, - { - name: "SCAN STATUS", - uid: "scan_status", - sortable: false, - initial_visible: false, - }, - { - name: "LAST SCAN", - uid: "last_scan", - sortable: false, - initial_visible: true, - }, - { - name: "NEXT SCAN", - uid: "next_scan", - sortable: false, - initial_visible: true, - }, - { - name: "RESOURCES", - uid: "resources", - sortable: true, - initial_visible: true, - }, - { - name: "ADDED", - uid: "added", - sortable: true, - initial_visible: true, - }, - { name: "ACTIONS", uid: "actions", initial_visible: false }, -]; - -export const providers = [ - { - id: 1, - account: "aws", - provider_id: 740350143844, - connected: true, - group: "Production, Bank 1, Development", - scan_status: "active", - scan_status_time: "5 minutes, 4 seconds", - last_scan: "Jul 17, 2024 4:46pm UTC", - next_scan: "Jul 18, 2024 4:46pm UTC", - provider_img: - "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI1NiAyNTYiPjxnIGZpbGw9Im5vbmUiPjxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiBmaWxsPSIjZjRmMmVkIiByeD0iNjAiLz48cGF0aCBmaWxsPSIjMjUyZjNlIiBkPSJNODQuNzQ1IDExMS45NjFjMCAyLjQzNC4yNjMgNC40MDcuNzIzIDUuODU1YTM1IDM1IDAgMCAwIDIuMTA2IDQuNzM3Yy4zMjkuNTI2LjQ2IDEuMDUyLjQ2IDEuNTEzYzAgLjY1OC0uMzk1IDEuMzE2LTEuMjUgMS45NzNsLTQuMTQ1IDIuNzY0Yy0uNTkyLjM5NC0xLjE4NC41OTItMS43MS41OTJjLS42NTggMC0xLjMxNi0uMzI5LTEuOTc0LS45MjFhMjAuNCAyMC40IDAgMCAxLTIuMzY4LTMuMDkyYTUxIDUxIDAgMCAxLTIuMDQtMy44ODJxLTcuNjk3IDkuMDgtMTkuMzQyIDkuMDc5Yy01LjUyNiAwLTkuOTM0LTEuNTc5LTEzLjE1OC00LjczN2MtMy4yMjMtMy4xNTgtNC44NjgtNy4zNjgtNC44NjgtMTIuNjMxYzAtNS41OTMgMS45NzQtMTAuMTMyIDUuOTg3LTEzLjU1M3M5LjM0Mi01LjEzMiAxNi4xMTgtNS4xMzJjMi4yMzcgMCA0LjU0LjE5OCA2Ljk3NC41MjdzNC45MzQuODU1IDcuNTY2IDEuNDQ3di00LjgwM2MwLTUtMS4wNTMtOC40ODctMy4wOTItMTAuNTI2Yy0yLjEwNi0yLjA0LTUuNjU4LTMuMDI2LTEwLjcyNC0zLjAyNmMtMi4zMDMgMC00LjY3MS4yNjMtNy4xMDUuODU1cy00LjgwMyAxLjMxNi03LjEwNiAyLjIzN2ExOSAxOSAwIDAgMS0yLjMwMi44NTVjLS40Ni4xMzItLjc5LjE5OC0xLjA1My4xOThjLS45MiAwLTEuMzgyLS42NTgtMS4zODItMi4wNHYtMy4yMjRjMC0xLjA1Mi4xMzItMS44NDIuNDYxLTIuMzAycy45MjEtLjkyMSAxLjg0Mi0xLjM4MnEzLjQ1NC0xLjc3NiA4LjI5LTIuOTZjMy4yMjMtLjg1NiA2LjY0NC0xLjI1IDEwLjI2My0xLjI1YzcuODI5IDAgMTMuNTUyIDEuNzc2IDE3LjIzNyA1LjMyOGMzLjYxOCAzLjU1MyA1LjQ2IDguOTQ4IDUuNDYgMTYuMTg1djIxLjMxNnptLTI2LjcxIDEwYzIuMTcgMCA0LjQwNy0uMzk1IDYuNzc2LTEuMTg1YzIuMzY4LS43ODkgNC40NzMtMi4yMzcgNi4yNS00LjIxYzEuMDUyLTEuMjUgMS44NDItMi42MzIgMi4yMzYtNC4yMTFzLjY1OC0zLjQ4Ny42NTgtNS43MjN2LTIuNzY0YTU1IDU1IDAgMCAwLTYuMDUyLTEuMTE4YTUwIDUwIDAgMCAwLTYuMTg1LS4zOTVjLTQuNDA4IDAtNy42MzEuODU2LTkuODAyIDIuNjMycy0zLjIyNCA0LjI3Ni0zLjIyNCA3LjU2NmMwIDMuMDkyLjc5IDUuMzk0IDIuNDM0IDYuOTczYzEuNTggMS42NDUgMy44ODIgMi40MzUgNi45MDggMi40MzVtNTIuODI4IDcuMTA1Yy0xLjE4NCAwLTEuOTc0LS4xOTgtMi41LS42NThjLS41MjYtLjM5NS0uOTg3LTEuMzE2LTEuMzgxLTIuNTY2bC0xNS40Ni01MC44NTVjLS4zOTYtMS4zMTYtLjU5My0yLjE3MS0uNTkzLTIuNjMyYzAtMS4wNTIuNTI2LTEuNjQ1IDEuNTc5LTEuNjQ1aDYuNDQ3YzEuMjUgMCAyLjEwNi4xOTggMi41NjYuNjU4Yy41MjYuMzk1LjkyMSAxLjMxNiAxLjMxNiAyLjU2NmwxMS4wNTIgNDMuNTUzbDEwLjI2NC00My41NTNjLjMyOS0xLjMxNi43MjMtMi4xNyAxLjI1LTIuNTY2Yy41MjYtLjM5NCAxLjQ0Ny0uNjU3IDIuNjMxLS42NTdoNS4yNjNjMS4yNSAwIDIuMTA2LjE5NyAyLjYzMi42NTdjLjUyNi4zOTUuOTg3IDEuMzE2IDEuMjUgMi41NjZsMTAuMzk1IDQ0LjA3OWwxMS4zODEtNDQuMDc5Yy4zOTUtMS4zMTYuODU2LTIuMTcgMS4zMTYtMi41NjZjLjUyNi0uMzk0IDEuMzgyLS42NTcgMi41NjYtLjY1N2g2LjExOGMxLjA1MyAwIDEuNjQ1LjUyNiAxLjY0NSAxLjY0NGMwIC4zMy0uMDY2LjY1OC0uMTMyIDEuMDUzYy0uMDY1LjM5NS0uMTk3LjkyLS40NiAxLjY0NWwtMTUuODU1IDUwLjg1NXEtLjU5MyAxLjk3NC0xLjM4MiAyLjU2NmMtLjUyNi4zOTQtMS4zODIuNjU4LTIuNS42NThoLTUuNjU4Yy0xLjI1IDAtMi4xMDUtLjE5OC0yLjYzMS0uNjU4Yy0uNTI3LS40NjEtLjk4Ny0xLjMxNi0xLjI1LTIuNjMybC0xMC4xOTgtNDIuNDM0bC0xMC4xMzEgNDIuMzY4Yy0uMzI5IDEuMzE2LS43MjQgMi4xNzEtMS4yNSAyLjYzMmMtLjUyNy40Ni0xLjQ0OC42NTgtMi42MzIuNjU4em04NC41NCAxLjc3NmMtMy40MjEgMC02Ljg0Mi0uMzk1LTEwLjEzMi0xLjE4NGMtMy4yODktLjc5LTUuODU1LTEuNjQ1LTcuNTY2LTIuNjMyYy0xLjA1Mi0uNTkyLTEuNzc2LTEuMjUtMi4wMzktMS44NDJhNC42NSA0LjY1IDAgMCAxLS4zOTUtMS44NDJ2LTMuMzU1YzAtMS4zODIuNTI2LTIuMDQgMS41MTMtMi4wNHEuNTkzIDAgMS4xODQuMTk4Yy4zOTUuMTMxLjk4Ny4zOTQgMS42NDUuNjU4YTM1LjggMzUuOCAwIDAgMCA3LjIzNyAyLjMwMmEzOS41IDM5LjUgMCAwIDAgNy44MjkuNzljNC4xNDUgMCA3LjM2OC0uNzI0IDkuNjA1LTIuMTcxYzIuMjM3LTEuNDQ4IDMuNDIxLTMuNTUzIDMuNDIxLTYuMjVjMC0xLjg0Mi0uNTkyLTMuMzU2LTEuNzc2LTQuNjA2cy0zLjQyMS0yLjM2OC02LjY0NS0zLjQyMWwtOS41MzktMi45NmMtNC44MDMtMS41MTMtOC4zNTYtMy43NS0xMC41MjctNi43MWMtMi4xNzEtMi44OTUtMy4yODktNi4xMi0zLjI4OS05LjU0cTAtNC4xNDQgMS43NzYtNy4zMDNjMS4xODQtMi4xMDUgMi43NjMtMy45NDcgNC43MzctNS4zOTRjMS45NzQtMS41MTQgNC4yMTEtMi42MzIgNi44NDItMy40MjJjMi42MzItLjc5IDUuMzk1LTEuMTE4IDguMjktMS4xMThjMS40NDcgMCAyLjk2LjA2NiA0LjQwOC4yNjNjMS41MTMuMTk3IDIuODk0LjQ2IDQuMjc2LjcyNGMxLjMxNi4zMjkgMi41NjYuNjU4IDMuNzUgMS4wNTNxMS43NzYuNTkxIDIuNzYzIDEuMTg0Yy45MjEuNTI2IDEuNTc5IDEuMDUyIDEuOTc0IDEuNjQ0cS41OTIuNzkuNTkyIDIuMTcydjMuMDkyYzAgMS4zODEtLjUyNiAyLjEwNS0xLjUxMyAyLjEwNWMtLjUyNyAwLTEuMzgyLS4yNjMtMi41LS43OXEtNS42MjUtMi41NjUtMTIuNjMyLTIuNTY1Yy0zLjc1IDAtNi43MS41OTItOC43NSAxLjg0MnMtMy4wOTIgMy4xNTgtMy4wOTIgNS44NTVjMCAxLjg0Mi42NTggMy40MjEgMS45NzQgNC42NzFzMy43NSAyLjUgNy4yMzcgMy42MThsOS4zNDIgMi45NmM0LjczNiAxLjUxNCA4LjE1OCAzLjYxOSAxMC4xOTcgNi4zMTdzMy4wMjYgNS43ODkgMy4wMjYgOS4yMWMwIDIuODI5LS41OTIgNS4zOTUtMS43MSA3LjYzMmMtMS4xODQgMi4yMzctMi43NjMgNC4yMS00LjgwMyA1Ljc4OWMtMi4wMzkgMS42NDUtNC40NzQgMi44MjktNy4zMDIgMy42ODVjLTIuOTYxLjkyMS02LjA1MyAxLjM4MS05LjQwOCAxLjM4MSIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIwNy44MzcgMTYyLjgxNmMtMjEuNjQ1IDE1Ljk4Ny01My4wOTIgMjQuNDc0LTgwLjEzMiAyNC40NzRjLTM3Ljg5NCAwLTcyLjA0LTE0LjAxNC05Ny44MjktMzcuMzAzYy0yLjA0LTEuODQyLS4xOTctNC4zNDIgMi4yMzctMi44OTVjMjcuODk1IDE2LjE4NCA2Mi4zMDMgMjUuOTg3IDk3Ljg5NSAyNS45ODdjMjQuMDEzIDAgNTAuMzk1LTUgNzQuNjcxLTE1LjI2M2MzLjYxOC0xLjY0NSA2LjcxIDIuMzY4IDMuMTU4IDUiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIxNi44NSAxNTIuNTUzYy0yLjc2My0zLjU1My0xOC4yODktMS43MTEtMjUuMzI5LS44NTZjLTIuMTA1LjI2NC0yLjQzNC0xLjU3OS0uNTI2LTIuOTZjMTIuMzY4LTguNjg0IDMyLjY5Ny02LjE4NCAzNS4wNjYtMy4yOWMyLjM2OCAyLjk2MS0uNjU4IDIzLjI5LTEyLjIzNyAzMy4wMjdjLTEuNzc3IDEuNTEzLTMuNDg3LjcyMy0yLjY5OC0xLjI1YzIuNjMyLTYuNTEzIDguNDg3LTIxLjE4NSA1LjcyNC0yNC42NzEiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=", - resources: 132, - added: "Apr 1, 2024", - }, - { - id: 2, - account: "gcp", - provider_id: 740350143845, - connected: false, - group: "Development", - scan_status: "paused", - scan_status_time: "10 minutes, 15 seconds", - last_scan: "Jul 17, 2024 3:46pm UTC", - next_scan: "Jul 18, 2024 3:46pm UTC", - provider_img: - "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI1NiAyNTYiPjxnIGZpbGw9Im5vbmUiPjxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiBmaWxsPSIjZjRmMmVkIiByeD0iNjAiLz48cGF0aCBmaWxsPSIjMjUyZjNlIiBkPSJNODQuNzQ1IDExMS45NjFjMCAyLjQzNC4yNjMgNC40MDcuNzIzIDUuODU1YTM1IDM1IDAgMCAwIDIuMTA2IDQuNzM3Yy4zMjkuNTI2LjQ2IDEuMDUyLjQ2IDEuNTEzYzAgLjY1OC0uMzk1IDEuMzE2LTEuMjUgMS45NzNsLTQuMTQ1IDIuNzY0Yy0uNTkyLjM5NC0xLjE4NC41OTItMS43MS41OTJjLS42NTggMC0xLjMxNi0uMzI5LTEuOTc0LS45MjFhMjAuNCAyMC40IDAgMCAxLTIuMzY4LTMuMDkyYTUxIDUxIDAgMCAxLTIuMDQtMy44ODJxLTcuNjk3IDkuMDgtMTkuMzQyIDkuMDc5Yy01LjUyNiAwLTkuOTM0LTEuNTc5LTEzLjE1OC00LjczN2MtMy4yMjMtMy4xNTgtNC44NjgtNy4zNjgtNC44NjgtMTIuNjMxYzAtNS41OTMgMS45NzQtMTAuMTMyIDUuOTg3LTEzLjU1M3M5LjM0Mi01LjEzMiAxNi4xMTgtNS4xMzJjMi4yMzcgMCA0LjU0LjE5OCA2Ljk3NC41MjdzNC45MzQuODU1IDcuNTY2IDEuNDQ3di00LjgwM2MwLTUtMS4wNTMtOC40ODctMy4wOTItMTAuNTI2Yy0yLjEwNi0yLjA0LTUuNjU4LTMuMDI2LTEwLjcyNC0zLjAyNmMtMi4zMDMgMC00LjY3MS4yNjMtNy4xMDUuODU1cy00LjgwMyAxLjMxNi03LjEwNiAyLjIzN2ExOSAxOSAwIDAgMS0yLjMwMi44NTVjLS40Ni4xMzItLjc5LjE5OC0xLjA1My4xOThjLS45MiAwLTEuMzgyLS42NTgtMS4zODItMi4wNHYtMy4yMjRjMC0xLjA1Mi4xMzItMS44NDIuNDYxLTIuMzAycy45MjEtLjkyMSAxLjg0Mi0xLjM4MnEzLjQ1NC0xLjc3NiA4LjI5LTIuOTZjMy4yMjMtLjg1NiA2LjY0NC0xLjI1IDEwLjI2My0xLjI1YzcuODI5IDAgMTMuNTUyIDEuNzc2IDE3LjIzNyA1LjMyOGMzLjYxOCAzLjU1MyA1LjQ2IDguOTQ4IDUuNDYgMTYuMTg1djIxLjMxNnptLTI2LjcxIDEwYzIuMTcgMCA0LjQwNy0uMzk1IDYuNzc2LTEuMTg1YzIuMzY4LS43ODkgNC40NzMtMi4yMzcgNi4yNS00LjIxYzEuMDUyLTEuMjUgMS44NDItMi42MzIgMi4yMzYtNC4yMTFzLjY1OC0zLjQ4Ny42NTgtNS43MjN2LTIuNzY0YTU1IDU1IDAgMCAwLTYuMDUyLTEuMTE4YTUwIDUwIDAgMCAwLTYuMTg1LS4zOTVjLTQuNDA4IDAtNy42MzEuODU2LTkuODAyIDIuNjMycy0zLjIyNCA0LjI3Ni0zLjIyNCA3LjU2NmMwIDMuMDkyLjc5IDUuMzk0IDIuNDM0IDYuOTczYzEuNTggMS42NDUgMy44ODIgMi40MzUgNi45MDggMi40MzVtNTIuODI4IDcuMTA1Yy0xLjE4NCAwLTEuOTc0LS4xOTgtMi41LS42NThjLS41MjYtLjM5NS0uOTg3LTEuMzE2LTEuMzgxLTIuNTY2bC0xNS40Ni01MC44NTVjLS4zOTYtMS4zMTYtLjU5My0yLjE3MS0uNTkzLTIuNjMyYzAtMS4wNTIuNTI2LTEuNjQ1IDEuNTc5LTEuNjQ1aDYuNDQ3YzEuMjUgMCAyLjEwNi4xOTggMi41NjYuNjU4Yy41MjYuMzk1LjkyMSAxLjMxNiAxLjMxNiAyLjU2NmwxMS4wNTIgNDMuNTUzbDEwLjI2NC00My41NTNjLjMyOS0xLjMxNi43MjMtMi4xNyAxLjI1LTIuNTY2Yy41MjYtLjM5NCAxLjQ0Ny0uNjU3IDIuNjMxLS42NTdoNS4yNjNjMS4yNSAwIDIuMTA2LjE5NyAyLjYzMi42NTdjLjUyNi4zOTUuOTg3IDEuMzE2IDEuMjUgMi41NjZsMTAuMzk1IDQ0LjA3OWwxMS4zODEtNDQuMDc5Yy4zOTUtMS4zMTYuODU2LTIuMTcgMS4zMTYtMi41NjZjLjUyNi0uMzk0IDEuMzgyLS42NTcgMi41NjYtLjY1N2g2LjExOGMxLjA1MyAwIDEuNjQ1LjUyNiAxLjY0NSAxLjY0NGMwIC4zMy0uMDY2LjY1OC0uMTMyIDEuMDUzYy0uMDY1LjM5NS0uMTk3LjkyLS40NiAxLjY0NWwtMTUuODU1IDUwLjg1NXEtLjU5MyAxLjk3NC0xLjM4MiAyLjU2NmMtLjUyNi4zOTQtMS4zODIuNjU4LTIuNS42NThoLTUuNjU4Yy0xLjI1IDAtMi4xMDUtLjE5OC0yLjYzMS0uNjU4Yy0uNTI3LS40NjEtLjk4Ny0xLjMxNi0xLjI1LTIuNjMybC0xMC4xOTgtNDIuNDM0bC0xMC4xMzEgNDIuMzY4Yy0uMzI5IDEuMzE2LS43MjQgMi4xNzEtMS4yNSAyLjYzMmMtLjUyNy40Ni0xLjQ0OC42NTgtMi42MzIuNjU4em04NC41NCAxLjc3NmMtMy40MjEgMC02Ljg0Mi0uMzk1LTEwLjEzMi0xLjE4NGMtMy4yODktLjc5LTUuODU1LTEuNjQ1LTcuNTY2LTIuNjMyYy0xLjA1Mi0uNTkyLTEuNzc2LTEuMjUtMi4wMzktMS44NDJhNC42NSA0LjY1IDAgMCAxLS4zOTUtMS44NDJ2LTMuMzU1YzAtMS4zODIuNTI2LTIuMDQgMS41MTMtMi4wNHEuNTkzIDAgMS4xODQuMTk4Yy4zOTUuMTMxLjk4Ny4zOTQgMS42NDUuNjU4YTM1LjggMzUuOCAwIDAgMCA3LjIzNyAyLjMwMmEzOS41IDM5LjUgMCAwIDAgNy44MjkuNzljNC4xNDUgMCA3LjM2OC0uNzI0IDkuNjA1LTIuMTcxYzIuMjM3LTEuNDQ4IDMuNDIxLTMuNTUzIDMuNDIxLTYuMjVjMC0xLjg0Mi0uNTkyLTMuMzU2LTEuNzc2LTQuNjA2cy0zLjQyMS0yLjM2OC02LjY0NS0zLjQyMWwtOS41MzktMi45NmMtNC44MDMtMS41MTMtOC4zNTYtMy43NS0xMC41MjctNi43MWMtMi4xNzEtMi44OTUtMy4yODktNi4xMi0zLjI4OS05LjU0cTAtNC4xNDQgMS43NzYtNy4zMDNjMS4xODQtMi4xMDUgMi43NjMtMy45NDcgNC43MzctNS4zOTRjMS45NzQtMS41MTQgNC4yMTEtMi42MzIgNi44NDItMy40MjJjMi42MzItLjc5IDUuMzk1LTEuMTE4IDguMjktMS4xMThjMS40NDcgMCAyLjk2LjA2NiA0LjQwOC4yNjNjMS41MTMuMTk3IDIuODk0LjQ2IDQuMjc2LjcyNGMxLjMxNi4zMjkgMi41NjYuNjU4IDMuNzUgMS4wNTNxMS43NzYuNTkxIDIuNzYzIDEuMTg0Yy45MjEuNTI2IDEuNTc5IDEuMDUyIDEuOTc0IDEuNjQ0cS41OTIuNzkuNTkyIDIuMTcydjMuMDkyYzAgMS4zODEtLjUyNiAyLjEwNS0xLjUxMyAyLjEwNWMtLjUyNyAwLTEuMzgyLS4yNjMtMi41LS43OXEtNS42MjUtMi41NjUtMTIuNjMyLTIuNTY1Yy0zLjc1IDAtNi43MS41OTItOC43NSAxLjg0MnMtMy4wOTIgMy4xNTgtMy4wOTIgNS44NTVjMCAxLjg0Mi42NTggMy40MjEgMS45NzQgNC42NzFzMy43NSAyLjUgNy4yMzcgMy42MThsOS4zNDIgMi45NmM0LjczNiAxLjUxNCA4LjE1OCAzLjYxOSAxMC4xOTcgNi4zMTdzMy4wMjYgNS43ODkgMy4wMjYgOS4yMWMwIDIuODI5LS41OTIgNS4zOTUtMS43MSA3LjYzMmMtMS4xODQgMi4yMzctMi43NjMgNC4yMS00LjgwMyA1Ljc4OWMtMi4wMzkgMS42NDUtNC40NzQgMi44MjktNy4zMDIgMy42ODVjLTIuOTYxLjkyMS02LjA1MyAxLjM4MS05LjQwOCAxLjM4MSIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIwNy44MzcgMTYyLjgxNmMtMjEuNjQ1IDE1Ljk4Ny01My4wOTIgMjQuNDc0LTgwLjEzMiAyNC40NzRjLTM3Ljg5NCAwLTcyLjA0LTE0LjAxNC05Ny44MjktMzcuMzAzYy0yLjA0LTEuODQyLS4xOTctNC4zNDIgMi4yMzctMi44OTVjMjcuODk1IDE2LjE4NCA2Mi4zMDMgMjUuOTg3IDk3Ljg5NSAyNS45ODdjMjQuMDEzIDAgNTAuMzk1LTUgNzQuNjcxLTE1LjI2M2MzLjYxOC0xLjY0NSA2LjcxIDIuMzY4IDMuMTU4IDUiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIxNi44NSAxNTIuNTUzYy0yLjc2My0zLjU1My0xOC4yODktMS43MTEtMjUuMzI5LS44NTZjLTIuMTA1LjI2NC0yLjQzNC0xLjU3OS0uNTI2LTIuOTZjMTIuMzY4LTguNjg0IDMyLjY5Ny02LjE4NCAzNS4wNjYtMy4yOWMyLjM2OCAyLjk2MS0uNjU4IDIzLjI5LTEyLjIzNyAzMy4wMjdjLTEuNzc3IDEuNTEzLTMuNDg3LjcyMy0yLjY5OC0xLjI1YzIuNjMyLTYuNTEzIDguNDg3LTIxLjE4NSA1LjcyNC0yNC42NzEiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=", - resources: 98, - added: "Mar 15, 2024", - }, - { - id: 3, - account: "azure", - provider_id: 740350143846, - connected: true, - group: "Production, Development", - scan_status: "active", - scan_status_time: "2 minutes, 30 seconds", - last_scan: "Jul 17, 2024 2:46pm UTC", - next_scan: "Jul 18, 2024 2:46pm UTC", - provider_img: - "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI1NiAyNTYiPjxnIGZpbGw9Im5vbmUiPjxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiBmaWxsPSIjZjRmMmVkIiByeD0iNjAiLz48cGF0aCBmaWxsPSIjMjUyZjNlIiBkPSJNODQuNzQ1IDExMS45NjFjMCAyLjQzNC4yNjMgNC40MDcuNzIzIDUuODU1YTM1IDM1IDAgMCAwIDIuMTA2IDQuNzM3Yy4zMjkuNTI2LjQ2IDEuMDUyLjQ2IDEuNTEzYzAgLjY1OC0uMzk1IDEuMzE2LTEuMjUgMS45NzNsLTQuMTQ1IDIuNzY0Yy0uNTkyLjM5NC0xLjE4NC41OTItMS43MS41OTJjLS42NTggMC0xLjMxNi0uMzI5LTEuOTc0LS45MjFhMjAuNCAyMC40IDAgMCAxLTIuMzY4LTMuMDkyYTUxIDUxIDAgMCAxLTIuMDQtMy44ODJxLTcuNjk3IDkuMDgtMTkuMzQyIDkuMDc5Yy01LjUyNiAwLTkuOTM0LTEuNTc5LTEzLjE1OC00LjczN2MtMy4yMjMtMy4xNTgtNC44NjgtNy4zNjgtNC44NjgtMTIuNjMxYzAtNS41OTMgMS45NzQtMTAuMTMyIDUuOTg3LTEzLjU1M3M5LjM0Mi01LjEzMiAxNi4xMTgtNS4xMzJjMi4yMzcgMCA0LjU0LjE5OCA2Ljk3NC41MjdzNC45MzQuODU1IDcuNTY2IDEuNDQ3di00LjgwM2MwLTUtMS4wNTMtOC40ODctMy4wOTItMTAuNTI2Yy0yLjEwNi0yLjA0LTUuNjU4LTMuMDI2LTEwLjcyNC0zLjAyNmMtMi4zMDMgMC00LjY3MS4yNjMtNy4xMDUuODU1cy00LjgwMyAxLjMxNi03LjEwNiAyLjIzN2ExOSAxOSAwIDAgMS0yLjMwMi44NTVjLS40Ni4xMzItLjc5LjE5OC0xLjA1My4xOThjLS45MiAwLTEuMzgyLS42NTgtMS4zODItMi4wNHYtMy4yMjRjMC0xLjA1Mi4xMzItMS44NDIuNDYxLTIuMzAycy45MjEtLjkyMSAxLjg0Mi0xLjM4MnEzLjQ1NC0xLjc3NiA4LjI5LTIuOTZjMy4yMjMtLjg1NiA2LjY0NC0xLjI1IDEwLjI2My0xLjI1YzcuODI5IDAgMTMuNTUyIDEuNzc2IDE3LjIzNyA1LjMyOGMzLjYxOCAzLjU1MyA1LjQ2IDguOTQ4IDUuNDYgMTYuMTg1djIxLjMxNnptLTI2LjcxIDEwYzIuMTcgMCA0LjQwNy0uMzk1IDYuNzc2LTEuMTg1YzIuMzY4LS43ODkgNC40NzMtMi4yMzcgNi4yNS00LjIxYzEuMDUyLTEuMjUgMS44NDItMi42MzIgMi4yMzYtNC4yMTFzLjY1OC0zLjQ4Ny42NTgtNS43MjN2LTIuNzY0YTU1IDU1IDAgMCAwLTYuMDUyLTEuMTE4YTUwIDUwIDAgMCAwLTYuMTg1LS4zOTVjLTQuNDA4IDAtNy42MzEuODU2LTkuODAyIDIuNjMycy0zLjIyNCA0LjI3Ni0zLjIyNCA3LjU2NmMwIDMuMDkyLjc5IDUuMzk0IDIuNDM0IDYuOTczYzEuNTggMS42NDUgMy44ODIgMi40MzUgNi45MDggMi40MzVtNTIuODI4IDcuMTA1Yy0xLjE4NCAwLTEuOTc0LS4xOTgtMi41LS42NThjLS41MjYtLjM5NS0uOTg3LTEuMzE2LTEuMzgxLTIuNTY2bC0xNS40Ni01MC44NTVjLS4zOTYtMS4zMTYtLjU5My0yLjE3MS0uNTkzLTIuNjMyYzAtMS4wNTIuNTI2LTEuNjQ1IDEuNTc5LTEuNjQ1aDYuNDQ3YzEuMjUgMCAyLjEwNi4xOTggMi41NjYuNjU4Yy41MjYuMzk1LjkyMSAxLjMxNiAxLjMxNiAyLjU2NmwxMS4wNTIgNDMuNTUzbDEwLjI2NC00My41NTNjLjMyOS0xLjMxNi43MjMtMi4xNyAxLjI1LTIuNTY2Yy41MjYtLjM5NCAxLjQ0Ny0uNjU3IDIuNjMxLS42NTdoNS4yNjNjMS4yNSAwIDIuMTA2LjE5NyAyLjYzMi42NTdjLjUyNi4zOTUuOTg3IDEuMzE2IDEuMjUgMi41NjZsMTAuMzk1IDQ0LjA3OWwxMS4zODEtNDQuMDc5Yy4zOTUtMS4zMTYuODU2LTIuMTcgMS4zMTYtMi41NjZjLjUyNi0uMzk0IDEuMzgyLS42NTcgMi41NjYtLjY1N2g2LjExOGMxLjA1MyAwIDEuNjQ1LjUyNiAxLjY0NSAxLjY0NGMwIC4zMy0uMDY2LjY1OC0uMTMyIDEuMDUzYy0uMDY1LjM5NS0uMTk3LjkyLS40NiAxLjY0NWwtMTUuODU1IDUwLjg1NXEtLjU5MyAxLjk3NC0xLjM4MiAyLjU2NmMtLjUyNi4zOTQtMS4zODIuNjU4LTIuNS42NThoLTUuNjU4Yy0xLjI1IDAtMi4xMDUtLjE5OC0yLjYzMS0uNjU4Yy0uNTI3LS40NjEtLjk4Ny0xLjMxNi0xLjI1LTIuNjMybC0xMC4xOTgtNDIuNDM0bC0xMC4xMzEgNDIuMzY4Yy0uMzI5IDEuMzE2LS43MjQgMi4xNzEtMS4yNSAyLjYzMmMtLjUyNy40Ni0xLjQ0OC42NTgtMi42MzIuNjU4em04NC41NCAxLjc3NmMtMy40MjEgMC02Ljg0Mi0uMzk1LTEwLjEzMi0xLjE4NGMtMy4yODktLjc5LTUuODU1LTEuNjQ1LTcuNTY2LTIuNjMyYy0xLjA1Mi0uNTkyLTEuNzc2LTEuMjUtMi4wMzktMS44NDJhNC42NSA0LjY1IDAgMCAxLS4zOTUtMS44NDJ2LTMuMzU1YzAtMS4zODIuNTI2LTIuMDQgMS41MTMtMi4wNHEuNTkzIDAgMS4xODQuMTk4Yy4zOTUuMTMxLjk4Ny4zOTQgMS42NDUuNjU4YTM1LjggMzUuOCAwIDAgMCA3LjIzNyAyLjMwMmEzOS41IDM5LjUgMCAwIDAgNy44MjkuNzljNC4xNDUgMCA3LjM2OC0uNzI0IDkuNjA1LTIuMTcxYzIuMjM3LTEuNDQ4IDMuNDIxLTMuNTUzIDMuNDIxLTYuMjVjMC0xLjg0Mi0uNTkyLTMuMzU2LTEuNzc2LTQuNjA2cy0zLjQyMS0yLjM2OC02LjY0NS0zLjQyMWwtOS41MzktMi45NmMtNC44MDMtMS41MTMtOC4zNTYtMy43NS0xMC41MjctNi43MWMtMi4xNzEtMi44OTUtMy4yODktNi4xMi0zLjI4OS05LjU0cTAtNC4xNDQgMS43NzYtNy4zMDNjMS4xODQtMi4xMDUgMi43NjMtMy45NDcgNC43MzctNS4zOTRjMS45NzQtMS41MTQgNC4yMTEtMi42MzIgNi44NDItMy40MjJjMi42MzItLjc5IDUuMzk1LTEuMTE4IDguMjktMS4xMThjMS40NDcgMCAyLjk2LjA2NiA0LjQwOC4yNjNjMS41MTMuMTk3IDIuODk0LjQ2IDQuMjc2LjcyNGMxLjMxNi4zMjkgMi41NjYuNjU4IDMuNzUgMS4wNTNxMS43NzYuNTkxIDIuNzYzIDEuMTg0Yy45MjEuNTI2IDEuNTc5IDEuMDUyIDEuOTc0IDEuNjQ0cS41OTIuNzkuNTkyIDIuMTcydjMuMDkyYzAgMS4zODEtLjUyNiAyLjEwNS0xLjUxMyAyLjEwNWMtLjUyNyAwLTEuMzgyLS4yNjMtMi41LS43OXEtNS42MjUtMi41NjUtMTIuNjMyLTIuNTY1Yy0zLjc1IDAtNi43MS41OTItOC43NSAxLjg0MnMtMy4wOTIgMy4xNTgtMy4wOTIgNS44NTVjMCAxLjg0Mi42NTggMy40MjEgMS45NzQgNC42NzFzMy43NSAyLjUgNy4yMzcgMy42MThsOS4zNDIgMi45NmM0LjczNiAxLjUxNCA4LjE1OCAzLjYxOSAxMC4xOTcgNi4zMTdzMy4wMjYgNS43ODkgMy4wMjYgOS4yMWMwIDIuODI5LS41OTIgNS4zOTUtMS43MSA3LjYzMmMtMS4xODQgMi4yMzctMi43NjMgNC4yMS00LjgwMyA1Ljc4OWMtMi4wMzkgMS42NDUtNC40NzQgMi44MjktNy4zMDIgMy42ODVjLTIuOTYxLjkyMS02LjA1MyAxLjM4MS05LjQwOCAxLjM4MSIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIwNy44MzcgMTYyLjgxNmMtMjEuNjQ1IDE1Ljk4Ny01My4wOTIgMjQuNDc0LTgwLjEzMiAyNC40NzRjLTM3Ljg5NCAwLTcyLjA0LTE0LjAxNC05Ny44MjktMzcuMzAzYy0yLjA0LTEuODQyLS4xOTctNC4zNDIgMi4yMzctMi44OTVjMjcuODk1IDE2LjE4NCA2Mi4zMDMgMjUuOTg3IDk3Ljg5NSAyNS45ODdjMjQuMDEzIDAgNTAuMzk1LTUgNzQuNjcxLTE1LjI2M2MzLjYxOC0xLjY0NSA2LjcxIDIuMzY4IDMuMTU4IDUiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIxNi44NSAxNTIuNTUzYy0yLjc2My0zLjU1My0xOC4yODktMS43MTEtMjUuMzI5LS44NTZjLTIuMTA1LjI2NC0yLjQzNC0xLjU3OS0uNTI2LTIuOTZjMTIuMzY4LTguNjg0IDMyLjY5Ny02LjE4NCAzNS4wNjYtMy4yOWMyLjM2OCAyLjk2MS0uNjU4IDIzLjI5LTEyLjIzNyAzMy4wMjdjLTEuNzc3IDEuNTEzLTMuNDg3LjcyMy0yLjY5OC0xLjI1YzIuNjMyLTYuNTEzIDguNDg3LTIxLjE4NSA1LjcyNC0yNC42NzEiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=", - resources: 210, - added: "Feb 20, 2024", - }, - { - id: 4, - account: "digitalocean", - provider_id: 740350143847, - connected: true, - group: "Marketing, Development", - scan_status: "completed", - scan_status_time: "15 minutes, 10 seconds", - last_scan: "Jul 17, 2024 1:46pm UTC", - next_scan: "Jul 18, 2024 1:46pm UTC", - provider_img: - "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI1NiAyNTYiPjxnIGZpbGw9Im5vbmUiPjxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiBmaWxsPSIjZjRmMmVkIiByeD0iNjAiLz48cGF0aCBmaWxsPSIjMjUyZjNlIiBkPSJNODQuNzQ1IDExMS45NjFjMCAyLjQzNC4yNjMgNC40MDcuNzIzIDUuODU1YTM1IDM1IDAgMCAwIDIuMTA2IDQuNzM3Yy4zMjkuNTI2LjQ2IDEuMDUyLjQ2IDEuNTEzYzAgLjY1OC0uMzk1IDEuMzE2LTEuMjUgMS45NzNsLTQuMTQ1IDIuNzY0Yy0uNTkyLjM5NC0xLjE4NC41OTItMS43MS41OTJjLS42NTggMC0xLjMxNi0uMzI5LTEuOTc0LS45MjFhMjAuNCAyMC40IDAgMCAxLTIuMzY4LTMuMDkyYTUxIDUxIDAgMCAxLTIuMDQtMy44ODJxLTcuNjk3IDkuMDgtMTkuMzQyIDkuMDc5Yy01LjUyNiAwLTkuOTM0LTEuNTc5LTEzLjE1OC00LjczN2MtMy4yMjMtMy4xNTgtNC44NjgtNy4zNjgtNC44NjgtMTIuNjMxYzAtNS41OTMgMS45NzQtMTAuMTMyIDUuOTg3LTEzLjU1M3M5LjM0Mi01LjEzMiAxNi4xMTgtNS4xMzJjMi4yMzcgMCA0LjU0LjE5OCA2Ljk3NC41MjdzNC45MzQuODU1IDcuNTY2IDEuNDQ3di00LjgwM2MwLTUtMS4wNTMtOC40ODctMy4wOTItMTAuNTI2Yy0yLjEwNi0yLjA0LTUuNjU4LTMuMDI2LTEwLjcyNC0zLjAyNmMtMi4zMDMgMC00LjY3MS4yNjMtNy4xMDUuODU1cy00LjgwMyAxLjMxNi03LjEwNiAyLjIzN2ExOSAxOSAwIDAgMS0yLjMwMi44NTVjLS40Ni4xMzItLjc5LjE5OC0xLjA1My4xOThjLS45MiAwLTEuMzgyLS42NTgtMS4zODItMi4wNHYtMy4yMjRjMC0xLjA1Mi4xMzItMS44NDIuNDYxLTIuMzAycy45MjEtLjkyMSAxLjg0Mi0xLjM4MnEzLjQ1NC0xLjc3NiA4LjI5LTIuOTZjMy4yMjMtLjg1NiA2LjY0NC0xLjI1IDEwLjI2My0xLjI1YzcuODI5IDAgMTMuNTUyIDEuNzc2IDE3LjIzNyA1LjMyOGMzLjYxOCAzLjU1MyA1LjQ2IDguOTQ4IDUuNDYgMTYuMTg1djIxLjMxNnptLTI2LjcxIDEwYzIuMTcgMCA0LjQwNy0uMzk1IDYuNzc2LTEuMTg1YzIuMzY4LS43ODkgNC40NzMtMi4yMzcgNi4yNS00LjIxYzEuMDUyLTEuMjUgMS44NDItMi42MzIgMi4yMzYtNC4yMTFzLjY1OC0zLjQ4Ny42NTgtNS43MjN2LTIuNzY0YTU1IDU1IDAgMCAwLTYuMDUyLTEuMTE4YTUwIDUwIDAgMCAwLTYuMTg1LS4zOTVjLTQuNDA4IDAtNy42MzEuODU2LTkuODAyIDIuNjMycy0zLjIyNCA0LjI3Ni0zLjIyNCA3LjU2NmMwIDMuMDkyLjc5IDUuMzk0IDIuNDM0IDYuOTczYzEuNTggMS42NDUgMy44ODIgMi40MzUgNi45MDggMi40MzVtNTIuODI4IDcuMTA1Yy0xLjE4NCAwLTEuOTc0LS4xOTgtMi41LS42NThjLS41MjYtLjM5NS0uOTg3LTEuMzE2LTEuMzgxLTIuNTY2bC0xNS40Ni01MC44NTVjLS4zOTYtMS4zMTYtLjU5My0yLjE3MS0uNTkzLTIuNjMyYzAtMS4wNTIuNTI2LTEuNjQ1IDEuNTc5LTEuNjQ1aDYuNDQ3YzEuMjUgMCAyLjEwNi4xOTggMi41NjYuNjU4Yy41MjYuMzk1LjkyMSAxLjMxNiAxLjMxNiAyLjU2NmwxMS4wNTIgNDMuNTUzbDEwLjI2NC00My41NTNjLjMyOS0xLjMxNi43MjMtMi4xNyAxLjI1LTIuNTY2Yy41MjYtLjM5NCAxLjQ0Ny0uNjU3IDIuNjMxLS42NTdoNS4yNjNjMS4yNSAwIDIuMTA2LjE5NyAyLjYzMi42NTdjLjUyNi4zOTUuOTg3IDEuMzE2IDEuMjUgMi41NjZsMTAuMzk1IDQ0LjA3OWwxMS4zODEtNDQuMDc5Yy4zOTUtMS4zMTYuODU2LTIuMTcgMS4zMTYtMi41NjZjLjUyNi0uMzk0IDEuMzgyLS42NTcgMi41NjYtLjY1N2g2LjExOGMxLjA1MyAwIDEuNjQ1LjUyNiAxLjY0NSAxLjY0NGMwIC4zMy0uMDY2LjY1OC0uMTMyIDEuMDUzYy0uMDY1LjM5NS0uMTk3LjkyLS40NiAxLjY0NWwtMTUuODU1IDUwLjg1NXEtLjU5MyAxLjk3NC0xLjM4MiAyLjU2NmMtLjUyNi4zOTQtMS4zODIuNjU4LTIuNS42NThoLTUuNjU4Yy0xLjI1IDAtMi4xMDUtLjE5OC0yLjYzMS0uNjU4Yy0uNTI3LS40NjEtLjk4Ny0xLjMxNi0xLjI1LTIuNjMybC0xMC4xOTgtNDIuNDM0bC0xMC4xMzEgNDIuMzY4Yy0uMzI5IDEuMzE2LS43MjQgMi4xNzEtMS4yNSAyLjYzMmMtLjUyNy40Ni0xLjQ0OC42NTgtMi42MzIuNjU4em04NC41NCAxLjc3NmMtMy40MjEgMC02Ljg0Mi0uMzk1LTEwLjEzMi0xLjE4NGMtMy4yODktLjc5LTUuODU1LTEuNjQ1LTcuNTY2LTIuNjMyYy0xLjA1Mi0uNTkyLTEuNzc2LTEuMjUtMi4wMzktMS44NDJhNC42NSA0LjY1IDAgMCAxLS4zOTUtMS44NDJ2LTMuMzU1YzAtMS4zODIuNTI2LTIuMDQgMS41MTMtMi4wNHEuNTkzIDAgMS4xODQuMTk4Yy4zOTUuMTMxLjk4Ny4zOTQgMS42NDUuNjU4YTM1LjggMzUuOCAwIDAgMCA3LjIzNyAyLjMwMmEzOS41IDM5LjUgMCAwIDAgNy44MjkuNzljNC4xNDUgMCA3LjM2OC0uNzI0IDkuNjA1LTIuMTcxYzIuMjM3LTEuNDQ4IDMuNDIxLTMuNTUzIDMuNDIxLTYuMjVjMC0xLjg0Mi0uNTkyLTMuMzU2LTEuNzc2LTQuNjA2cy0zLjQyMS0yLjM2OC02LjY0NS0zLjQyMWwtOS41MzktMi45NmMtNC44MDMtMS41MTMtOC4zNTYtMy43NS0xMC41MjctNi43MWMtMi4xNzEtMi44OTUtMy4yODktNi4xMi0zLjI4OS05LjU0cTAtNC4xNDQgMS43NzYtNy4zMDNjMS4xODQtMi4xMDUgMi43NjMtMy45NDcgNC43MzctNS4zOTRjMS45NzQtMS41MTQgNC4yMTEtMi42MzIgNi44NDItMy40MjJjMi42MzItLjc5IDUuMzk1LTEuMTE4IDguMjktMS4xMThjMS40NDcgMCAyLjk2LjA2NiA0LjQwOC4yNjNjMS41MTMuMTk3IDIuODk0LjQ2IDQuMjc2LjcyNGMxLjMxNi4zMjkgMi41NjYuNjU4IDMuNzUgMS4wNTNxMS43NzYuNTkxIDIuNzYzIDEuMTg0Yy45MjEuNTI2IDEuNTc5IDEuMDUyIDEuOTc0IDEuNjQ0cS41OTIuNzkuNTkyIDIuMTcydjMuMDkyYzAgMS4zODEtLjUyNiAyLjEwNS0xLjUxMyAyLjEwNWMtLjUyNyAwLTEuMzgyLS4yNjMtMi41LS43OXEtNS42MjUtMi41NjUtMTIuNjMyLTIuNTY1Yy0zLjc1IDAtNi43MS41OTItOC43NSAxLjg0MnMtMy4wOTIgMy4xNTgtMy4wOTIgNS44NTVjMCAxLjg0Mi42NTggMy40MjEgMS45NzQgNC42NzFzMy43NSAyLjUgNy4yMzcgMy42MThsOS4zNDIgMi45NmM0LjczNiAxLjUxNCA4LjE1OCAzLjYxOSAxMC4xOTcgNi4zMTdzMy4wMjYgNS43ODkgMy4wMjYgOS4yMWMwIDIuODI5LS41OTIgNS4zOTUtMS43MSA3LjYzMmMtMS4xODQgMi4yMzctMi43NjMgNC4yMS00LjgwMyA1Ljc4OWMtMi4wMzkgMS42NDUtNC40NzQgMi44MjktNy4zMDIgMy42ODVjLTIuOTYxLjkyMS02LjA1MyAxLjM4MS05LjQwOCAxLjM4MSIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIwNy44MzcgMTYyLjgxNmMtMjEuNjQ1IDE1Ljk4Ny01My4wOTIgMjQuNDc0LTgwLjEzMiAyNC40NzRjLTM3Ljg5NCAwLTcyLjA0LTE0LjAxNC05Ny44MjktMzcuMzAzYy0yLjA0LTEuODQyLS4xOTctNC4zNDIgMi4yMzctMi44OTVjMjcuODk1IDE2LjE4NCA2Mi4zMDMgMjUuOTg3IDk3Ljg5NSAyNS45ODdjMjQuMDEzIDAgNTAuMzk1LTUgNzQuNjcxLTE1LjI2M2MzLjYxOC0xLjY0NSA2LjcxIDIuMzY4IDMuMTU4IDUiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIxNi44NSAxNTIuNTUzYy0yLjc2My0zLjU1My0xOC4yODktMS43MTEtMjUuMzI5LS44NTZjLTIuMTA1LjI2NC0yLjQzNC0xLjU3OS0uNTI2LTIuOTZjMTIuMzY4LTguNjg0IDMyLjY5Ny02LjE4NCAzNS4wNjYtMy4yOWMyLjM2OCAyLjk2MS0uNjU4IDIzLjI5LTEyLjIzNyAzMy4wMjdjLTEuNzc3IDEuNTEzLTMuNDg3LjcyMy0yLjY5OC0xLjI1YzIuNjMyLTYuNTEzIDguNDg3LTIxLjE4NSA1LjcyNC0yNC42NzEiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=", - resources: 85, - added: "Jan 10, 2024", - }, - { - id: 5, - account: "aws", - provider_id: 740350143848, - connected: true, - group: "Sales", - scan_status: "active", - scan_status_time: "7 minutes, 45 seconds", - last_scan: "Jul 17, 2024 12:46pm UTC", - next_scan: "Jul 18, 2024 12:46pm UTC", - provider_img: - "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI1NiAyNTYiPjxnIGZpbGw9Im5vbmUiPjxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiBmaWxsPSIjZjRmMmVkIiByeD0iNjAiLz48cGF0aCBmaWxsPSIjMjUyZjNlIiBkPSJNODQuNzQ1IDExMS45NjFjMCAyLjQzNC4yNjMgNC40MDcuNzIzIDUuODU1YTM1IDM1IDAgMCAwIDIuMTA2IDQuNzM3Yy4zMjkuNTI2LjQ2IDEuMDUyLjQ2IDEuNTEzYzAgLjY1OC0uMzk1IDEuMzE2LTEuMjUgMS45NzNsLTQuMTQ1IDIuNzY0Yy0uNTkyLjM5NC0xLjE4NC41OTItMS43MS41OTJjLS42NTggMC0xLjMxNi0uMzI5LTEuOTc0LS45MjFhMjAuNCAyMC40IDAgMCAxLTIuMzY4LTMuMDkyYTUxIDUxIDAgMCAxLTIuMDQtMy44ODJxLTcuNjk3IDkuMDgtMTkuMzQyIDkuMDc5Yy01LjUyNiAwLTkuOTM0LTEuNTc5LTEzLjE1OC00LjczN2MtMy4yMjMtMy4xNTgtNC44NjgtNy4zNjgtNC44NjgtMTIuNjMxYzAtNS41OTMgMS45NzQtMTAuMTMyIDUuOTg3LTEzLjU1M3M5LjM0Mi01LjEzMiAxNi4xMTgtNS4xMzJjMi4yMzcgMCA0LjU0LjE5OCA2Ljk3NC41MjdzNC45MzQuODU1IDcuNTY2IDEuNDQ3di00LjgwM2MwLTUtMS4wNTMtOC40ODctMy4wOTItMTAuNTI2Yy0yLjEwNi0yLjA0LTUuNjU4LTMuMDI2LTEwLjcyNC0zLjAyNmMtMi4zMDMgMC00LjY3MS4yNjMtNy4xMDUuODU1cy00LjgwMyAxLjMxNi03LjEwNiAyLjIzN2ExOSAxOSAwIDAgMS0yLjMwMi44NTVjLS40Ni4xMzItLjc5LjE5OC0xLjA1My4xOThjLS45MiAwLTEuMzgyLS42NTgtMS4zODItMi4wNHYtMy4yMjRjMC0xLjA1Mi4xMzItMS44NDIuNDYxLTIuMzAycy45MjEtLjkyMSAxLjg0Mi0xLjM4MnEzLjQ1NC0xLjc3NiA4LjI5LTIuOTZjMy4yMjMtLjg1NiA2LjY0NC0xLjI1IDEwLjI2My0xLjI1YzcuODI5IDAgMTMuNTUyIDEuNzc2IDE3LjIzNyA1LjMyOGMzLjYxOCAzLjU1MyA1LjQ2IDguOTQ4IDUuNDYgMTYuMTg1djIxLjMxNnptLTI2LjcxIDEwYzIuMTcgMCA0LjQwNy0uMzk1IDYuNzc2LTEuMTg1YzIuMzY4LS43ODkgNC40NzMtMi4yMzcgNi4yNS00LjIxYzEuMDUyLTEuMjUgMS44NDItMi42MzIgMi4yMzYtNC4yMTFzLjY1OC0zLjQ4Ny42NTgtNS43MjN2LTIuNzY0YTU1IDU1IDAgMCAwLTYuMDUyLTEuMTE4YTUwIDUwIDAgMCAwLTYuMTg1LS4zOTVjLTQuNDA4IDAtNy42MzEuODU2LTkuODAyIDIuNjMycy0zLjIyNCA0LjI3Ni0zLjIyNCA3LjU2NmMwIDMuMDkyLjc5IDUuMzk0IDIuNDM0IDYuOTczYzEuNTggMS42NDUgMy44ODIgMi40MzUgNi45MDggMi40MzVtNTIuODI4IDcuMTA1Yy0xLjE4NCAwLTEuOTc0LS4xOTgtMi41LS42NThjLS41MjYtLjM5NS0uOTg3LTEuMzE2LTEuMzgxLTIuNTY2bC0xNS40Ni01MC44NTVjLS4zOTYtMS4zMTYtLjU5My0yLjE3MS0uNTkzLTIuNjMyYzAtMS4wNTIuNTI2LTEuNjQ1IDEuNTc5LTEuNjQ1aDYuNDQ3YzEuMjUgMCAyLjEwNi4xOTggMi41NjYuNjU4Yy41MjYuMzk1LjkyMSAxLjMxNiAxLjMxNiAyLjU2NmwxMS4wNTIgNDMuNTUzbDEwLjI2NC00My41NTNjLjMyOS0xLjMxNi43MjMtMi4xNyAxLjI1LTIuNTY2Yy41MjYtLjM5NCAxLjQ0Ny0uNjU3IDIuNjMxLS42NTdoNS4yNjNjMS4yNSAwIDIuMTA2LjE5NyAyLjYzMi42NTdjLjUyNi4zOTUuOTg3IDEuMzE2IDEuMjUgMi41NjZsMTAuMzk1IDQ0LjA3OWwxMS4zODEtNDQuMDc5Yy4zOTUtMS4zMTYuODU2LTIuMTcgMS4zMTYtMi41NjZjLjUyNi0uMzk0IDEuMzgyLS42NTcgMi41NjYtLjY1N2g2LjExOGMxLjA1MyAwIDEuNjQ1LjUyNiAxLjY0NSAxLjY0NGMwIC4zMy0uMDY2LjY1OC0uMTMyIDEuMDUzYy0uMDY1LjM5NS0uMTk3LjkyLS40NiAxLjY0NWwtMTUuODU1IDUwLjg1NXEtLjU5MyAxLjk3NC0xLjM4MiAyLjU2NmMtLjUyNi4zOTQtMS4zODIuNjU4LTIuNS42NThoLTUuNjU4Yy0xLjI1IDAtMi4xMDUtLjE5OC0yLjYzMS0uNjU4Yy0uNTI3LS40NjEtLjk4Ny0xLjMxNi0xLjI1LTIuNjMybC0xMC4xOTgtNDIuNDM0bC0xMC4xMzEgNDIuMzY4Yy0uMzI5IDEuMzE2LS43MjQgMi4xNzEtMS4yNSAyLjYzMmMtLjUyNy40Ni0xLjQ0OC42NTgtMi42MzIuNjU4em04NC41NCAxLjc3NmMtMy40MjEgMC02Ljg0Mi0uMzk1LTEwLjEzMi0xLjE4NGMtMy4yODktLjc5LTUuODU1LTEuNjQ1LTcuNTY2LTIuNjMyYy0xLjA1Mi0uNTkyLTEuNzc2LTEuMjUtMi4wMzktMS44NDJhNC42NSA0LjY1IDAgMCAxLS4zOTUtMS44NDJ2LTMuMzU1YzAtMS4zODIuNTI2LTIuMDQgMS41MTMtMi4wNHEuNTkzIDAgMS4xODQuMTk4Yy4zOTUuMTMxLjk4Ny4zOTQgMS42NDUuNjU4YTM1LjggMzUuOCAwIDAgMCA3LjIzNyAyLjMwMmEzOS41IDM5LjUgMCAwIDAgNy44MjkuNzljNC4xNDUgMCA3LjM2OC0uNzI0IDkuNjA1LTIuMTcxYzIuMjM3LTEuNDQ4IDMuNDIxLTMuNTUzIDMuNDIxLTYuMjVjMC0xLjg0Mi0uNTkyLTMuMzU2LTEuNzc2LTQuNjA2cy0zLjQyMS0yLjM2OC02LjY0NS0zLjQyMWwtOS41MzktMi45NmMtNC44MDMtMS41MTMtOC4zNTYtMy43NS0xMC41MjctNi43MWMtMi4xNzEtMi44OTUtMy4yODktNi4xMi0zLjI4OS05LjU0cTAtNC4xNDQgMS43NzYtNy4zMDNjMS4xODQtMi4xMDUgMi43NjMtMy45NDcgNC43MzctNS4zOTRjMS45NzQtMS41MTQgNC4yMTEtMi42MzIgNi44NDItMy40MjJjMi42MzItLjc5IDUuMzk1LTEuMTE4IDguMjktMS4xMThjMS40NDcgMCAyLjk2LjA2NiA0LjQwOC4yNjNjMS41MTMuMTk3IDIuODk0LjQ2IDQuMjc2LjcyNGMxLjMxNi4zMjkgMi41NjYuNjU4IDMuNzUgMS4wNTNxMS43NzYuNTkxIDIuNzYzIDEuMTg0Yy45MjEuNTI2IDEuNTc5IDEuMDUyIDEuOTc0IDEuNjQ0cS41OTIuNzkuNTkyIDIuMTcydjMuMDkyYzAgMS4zODEtLjUyNiAyLjEwNS0xLjUxMyAyLjEwNWMtLjUyNyAwLTEuMzgyLS4yNjMtMi41LS43OXEtNS42MjUtMi41NjUtMTIuNjMyLTIuNTY1Yy0zLjc1IDAtNi43MS41OTItOC43NSAxLjg0MnMtMy4wOTIgMy4xNTgtMy4wOTIgNS44NTVjMCAxLjg0Mi42NTggMy40MjEgMS45NzQgNC42NzFzMy43NSAyLjUgNy4yMzcgMy42MThsOS4zNDIgMi45NmM0LjczNiAxLjUxNCA4LjE1OCAzLjYxOSAxMC4xOTcgNi4zMTdzMy4wMjYgNS43ODkgMy4wMjYgOS4yMWMwIDIuODI5LS41OTIgNS4zOTUtMS43MSA3LjYzMmMtMS4xODQgMi4yMzctMi43NjMgNC4yMS00LjgwMyA1Ljc4OWMtMi4wMzkgMS42NDUtNC40NzQgMi44MjktNy4zMDIgMy42ODVjLTIuOTYxLjkyMS02LjA1MyAxLjM4MS05LjQwOCAxLjM4MSIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIwNy44MzcgMTYyLjgxNmMtMjEuNjQ1IDE1Ljk4Ny01My4wOTIgMjQuNDc0LTgwLjEzMiAyNC40NzRjLTM3Ljg5NCAwLTcyLjA0LTE0LjAxNC05Ny44MjktMzcuMzAzYy0yLjA0LTEuODQyLS4xOTctNC4zNDIgMi4yMzctMi44OTVjMjcuODk1IDE2LjE4NCA2Mi4zMDMgMjUuOTg3IDk3Ljg5NSAyNS45ODdjMjQuMDEzIDAgNTAuMzk1LTUgNzQuNjcxLTE1LjI2M2MzLjYxOC0xLjY0NSA2LjcxIDIuMzY4IDMuMTU4IDUiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIxNi44NSAxNTIuNTUzYy0yLjc2My0zLjU1My0xOC4yODktMS43MTEtMjUuMzI5LS44NTZjLTIuMTA1LjI2NC0yLjQzNC0xLjU3OS0uNTI2LTIuOTZjMTIuMzY4LTguNjg0IDMyLjY5Ny02LjE4NCAzNS4wNjYtMy4yOWMyLjM2OCAyLjk2MS0uNjU4IDIzLjI5LTEyLjIzNyAzMy4wMjdjLTEuNzc3IDEuNTEzLTMuNDg3LjcyMy0yLjY5OC0xLjI1YzIuNjMyLTYuNTEzIDguNDg3LTIxLjE4NSA1LjcyNC0yNC42NzEiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=", - resources: 156, - added: "May 5, 2024", - }, - { - id: 6, - account: "aws", - provider_id: 740350143849, - connected: true, - group: "Management", - scan_status: "active", - scan_status_time: "3 minutes, 10 seconds", - last_scan: "Jul 17, 2024 11:46am UTC", - next_scan: "Jul 18, 2024 11:46am UTC", - provider_img: - "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI1NiAyNTYiPjxnIGZpbGw9Im5vbmUiPjxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiBmaWxsPSIjZjRmMmVkIiByeD0iNjAiLz48cGF0aCBmaWxsPSIjMjUyZjNlIiBkPSJNODQuNzQ1IDExMS45NjFjMCAyLjQzNC4yNjMgNC40MDcuNzIzIDUuODU1YTM1IDM1IDAgMCAwIDIuMTA2IDQuNzM3Yy4zMjkuNTI2LjQ2IDEuMDUyLjQ2IDEuNTEzYzAgLjY1OC0uMzk1IDEuMzE2LTEuMjUgMS45NzNsLTQuMTQ1IDIuNzY0Yy0uNTkyLjM5NC0xLjE4NC41OTItMS43MS41OTJjLS42NTggMC0xLjMxNi0uMzI5LTEuOTc0LS45MjFhMjAuNCAyMC40IDAgMCAxLTIuMzY4LTMuMDkyYTUxIDUxIDAgMCAxLTIuMDQtMy44ODJxLTcuNjk3IDkuMDgtMTkuMzQyIDkuMDc5Yy01LjUyNiAwLTkuOTM0LTEuNTc5LTEzLjE1OC00LjczN2MtMy4yMjMtMy4xNTgtNC44NjgtNy4zNjgtNC44NjgtMTIuNjMxYzAtNS41OTMgMS45NzQtMTAuMTMyIDUuOTg3LTEzLjU1M3M5LjM0Mi01LjEzMiAxNi4xMTgtNS4xMzJjMi4yMzcgMCA0LjU0LjE5OCA2Ljk3NC41MjdzNC45MzQuODU1IDcuNTY2IDEuNDQ3di00LjgwM2MwLTUtMS4wNTMtOC40ODctMy4wOTItMTAuNTI2Yy0yLjEwNi0yLjA0LTUuNjU4LTMuMDI2LTEwLjcyNC0zLjAyNmMtMi4zMDMgMC00LjY3MS4yNjMtNy4xMDUuODU1cy00LjgwMyAxLjMxNi03LjEwNiAyLjIzN2ExOSAxOSAwIDAgMS0yLjMwMi44NTVjLS40Ni4xMzItLjc5LjE5OC0xLjA1My4xOThjLS45MiAwLTEuMzgyLS42NTgtMS4zODItMi4wNHYtMy4yMjRjMC0xLjA1Mi4xMzItMS44NDIuNDYxLTIuMzAycy45MjEtLjkyMSAxLjg0Mi0xLjM4MnEzLjQ1NC0xLjc3NiA4LjI5LTIuOTZjMy4yMjMtLjg1NiA2LjY0NC0xLjI1IDEwLjI2My0xLjI1YzcuODI5IDAgMTMuNTUyIDEuNzc2IDE3LjIzNyA1LjMyOGMzLjYxOCAzLjU1MyA1LjQ2IDguOTQ4IDUuNDYgMTYuMTg1djIxLjMxNnptLTI2LjcxIDEwYzIuMTcgMCA0LjQwNy0uMzk1IDYuNzc2LTEuMTg1YzIuMzY4LS43ODkgNC40NzMtMi4yMzcgNi4yNS00LjIxYzEuMDUyLTEuMjUgMS44NDItMi42MzIgMi4yMzYtNC4yMTFzLjY1OC0zLjQ4Ny42NTgtNS43MjN2LTIuNzY0YTU1IDU1IDAgMCAwLTYuMDUyLTEuMTE4YTUwIDUwIDAgMCAwLTYuMTg1LS4zOTVjLTQuNDA4IDAtNy42MzEuODU2LTkuODAyIDIuNjMycy0zLjIyNCA0LjI3Ni0zLjIyNCA3LjU2NmMwIDMuMDkyLjc5IDUuMzk0IDIuNDM0IDYuOTczYzEuNTggMS42NDUgMy44ODIgMi40MzUgNi45MDggMi40MzVtNTIuODI4IDcuMTA1Yy0xLjE4NCAwLTEuOTc0LS4xOTgtMi41LS42NThjLS41MjYtLjM5NS0uOTg3LTEuMzE2LTEuMzgxLTIuNTY2bC0xNS40Ni01MC44NTVjLS4zOTYtMS4zMTYtLjU5My0yLjE3MS0uNTkzLTIuNjMyYzAtMS4wNTIuNTI2LTEuNjQ1IDEuNTc5LTEuNjQ1aDYuNDQ3YzEuMjUgMCAyLjEwNi4xOTggMi41NjYuNjU4Yy41MjYuMzk1LjkyMSAxLjMxNiAxLjMxNiAyLjU2NmwxMS4wNTIgNDMuNTUzbDEwLjI2NC00My41NTNjLjMyOS0xLjMxNi43MjMtMi4xNyAxLjI1LTIuNTY2Yy41MjYtLjM5NCAxLjQ0Ny0uNjU3IDIuNjMxLS42NTdoNS4yNjNjMS4yNSAwIDIuMTA2LjE5NyAyLjYzMi42NTdjLjUyNi4zOTUuOTg3IDEuMzE2IDEuMjUgMi41NjZsMTAuMzk1IDQ0LjA3OWwxMS4zODEtNDQuMDc5Yy4zOTUtMS4zMTYuODU2LTIuMTcgMS4zMTYtMi41NjZjLjUyNi0uMzk0IDEuMzgyLS42NTcgMi41NjYtLjY1N2g2LjExOGMxLjA1MyAwIDEuNjQ1LjUyNiAxLjY0NSAxLjY0NGMwIC4zMy0uMDY2LjY1OC0uMTMyIDEuMDUzYy0uMDY1LjM5NS0uMTk3LjkyLS40NiAxLjY0NWwtMTUuODU1IDUwLjg1NXEtLjU5MyAxLjk3NC0xLjM4MiAyLjU2NmMtLjUyNi4zOTQtMS4zODIuNjU4LTIuNS42NThoLTUuNjU4Yy0xLjI1IDAtMi4xMDUtLjE5OC0yLjYzMS0uNjU4Yy0uNTI3LS40NjEtLjk4Ny0xLjMxNi0xLjI1LTIuNjMybC0xMC4xOTgtNDIuNDM0bC0xMC4xMzEgNDIuMzY4Yy0uMzI5IDEuMzE2LS43MjQgMi4xNzEtMS4yNSAyLjYzMmMtLjUyNy40Ni0xLjQ0OC42NTgtMi42MzIuNjU4em04NC41NCAxLjc3NmMtMy40MjEgMC02Ljg0Mi0uMzk1LTEwLjEzMi0xLjE4NGMtMy4yODktLjc5LTUuODU1LTEuNjQ1LTcuNTY2LTIuNjMyYy0xLjA1Mi0uNTkyLTEuNzc2LTEuMjUtMi4wMzktMS44NDJhNC42NSA0LjY1IDAgMCAxLS4zOTUtMS44NDJ2LTMuMzU1YzAtMS4zODIuNTI2LTIuMDQgMS41MTMtMi4wNHEuNTkzIDAgMS4xODQuMTk4Yy4zOTUuMTMxLjk4Ny4zOTQgMS42NDUuNjU4YTM1LjggMzUuOCAwIDAgMCA3LjIzNyAyLjMwMmEzOS41IDM5LjUgMCAwIDAgNy44MjkuNzljNC4xNDUgMCA3LjM2OC0uNzI0IDkuNjA1LTIuMTcxYzIuMjM3LTEuNDQ4IDMuNDIxLTMuNTUzIDMuNDIxLTYuMjVjMC0xLjg0Mi0uNTkyLTMuMzU2LTEuNzc2LTQuNjA2cy0zLjQyMS0yLjM2OC02LjY0NS0zLjQyMWwtOS41MzktMi45NmMtNC44MDMtMS41MTMtOC4zNTYtMy43NS0xMC41MjctNi43MWMtMi4xNzEtMi44OTUtMy4yODktNi4xMi0zLjI4OS05LjU0cTAtNC4xNDQgMS43NzYtNy4zMDNjMS4xODQtMi4xMDUgMi43NjMtMy45NDcgNC43MzctNS4zOTRjMS45NzQtMS41MTQgNC4yMTEtMi42MzIgNi44NDItMy40MjJjMi42MzItLjc5IDUuMzk1LTEuMTE4IDguMjktMS4xMThjMS40NDcgMCAyLjk2LjA2NiA0LjQwOC4yNjNjMS41MTMuMTk3IDIuODk0LjQ2IDQuMjc2LjcyNGMxLjMxNi4zMjkgMi41NjYuNjU4IDMuNzUgMS4wNTNxMS43NzYuNTkxIDIuNzYzIDEuMTg0Yy45MjEuNTI2IDEuNTc5IDEuMDUyIDEuOTc0IDEuNjQ0cS41OTIuNzkuNTkyIDIuMTcydjMuMDkyYzAgMS4zODEtLjUyNiAyLjEwNS0xLjUxMyAyLjEwNWMtLjUyNyAwLTEuMzgyLS4yNjMtMi41LS43OXEtNS42MjUtMi41NjUtMTIuNjMyLTIuNTY1Yy0zLjc1IDAtNi43MS41OTItOC43NSAxLjg0MnMtMy4wOTIgMy4xNTgtMy4wOTIgNS44NTVjMCAxLjg0Mi42NTggMy40MjEgMS45NzQgNC42NzFzMy43NSAyLjUgNy4yMzcgMy42MThsOS4zNDIgMi45NmM0LjczNiAxLjUxNCA4LjE1OCAzLjYxOSAxMC4xOTcgNi4zMTdzMy4wMjYgNS43ODkgMy4wMjYgOS4yMWMwIDIuODI5LS41OTIgNS4zOTUtMS43MSA3LjYzMmMtMS4xODQgMi4yMzctMi43NjMgNC4yMS00LjgwMyA1Ljc4OWMtMi4wMzkgMS42NDUtNC40NzQgMi44MjktNy4zMDIgMy42ODVjLTIuOTYxLjkyMS02LjA1MyAxLjM4MS05LjQwOCAxLjM4MSIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIwNy44MzcgMTYyLjgxNmMtMjEuNjQ1IDE1Ljk4Ny01My4wOTIgMjQuNDc0LTgwLjEzMiAyNC40NzRjLTM3Ljg5NCAwLTcyLjA0LTE0LjAxNC05Ny44MjktMzcuMzAzYy0yLjA0LTEuODQyLS4xOTctNC4zNDIgMi4yMzctMi44OTVjMjcuODk1IDE2LjE4NCA2Mi4zMDMgMjUuOTg3IDk3Ljg5NSAyNS45ODdjMjQuMDEzIDAgNTAuMzk1LTUgNzQuNjcxLTE1LjI2M2MzLjYxOC0xLjY0NSA2LjcxIDIuMzY4IDMuMTU4IDUiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIxNi44NSAxNTIuNTUzYy0yLjc2My0zLjU1My0xOC4yODktMS43MTEtMjUuMzI5LS44NTZjLTIuMTA1LjI2NC0yLjQzNC0xLjU3OS0uNTI2LTIuOTZjMTIuMzY4LTguNjg0IDMyLjY5Ny02LjE4NCAzNS4wNjYtMy4yOWMyLjM2OCAyLjk2MS0uNjU4IDIzLjI5LTEyLjIzNyAzMy4wMjdjLTEuNzc3IDEuNTEzLTMuNDg3LjcyMy0yLjY5OC0xLjI1YzIuNjMyLTYuNTEzIDguNDg3LTIxLjE4NSA1LjcyNC0yNC42NzEiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=", - resources: 98, - added: "Mar 22, 2024", - }, - { - id: 7, - account: "aws", - provider_id: 740350143850, - connected: false, - group: "Design", - scan_status: "paused", - scan_status_time: "12 minutes, 5 seconds", - last_scan: "Jul 17, 2024 10:46am UTC", - next_scan: "Jul 18, 2024 10:46am UTC", - provider_img: - "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI1NiAyNTYiPjxnIGZpbGw9Im5vbmUiPjxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiBmaWxsPSIjZjRmMmVkIiByeD0iNjAiLz48cGF0aCBmaWxsPSIjMjUyZjNlIiBkPSJNODQuNzQ1IDExMS45NjFjMCAyLjQzNC4yNjMgNC40MDcuNzIzIDUuODU1YTM1IDM1IDAgMCAwIDIuMTA2IDQuNzM3Yy4zMjkuNTI2LjQ2IDEuMDUyLjQ2IDEuNTEzYzAgLjY1OC0uMzk1IDEuMzE2LTEuMjUgMS45NzNsLTQuMTQ1IDIuNzY0Yy0uNTkyLjM5NC0xLjE4NC41OTItMS43MS41OTJjLS42NTggMC0xLjMxNi0uMzI5LTEuOTc0LS45MjFhMjAuNCAyMC40IDAgMCAxLTIuMzY4LTMuMDkyYTUxIDUxIDAgMCAxLTIuMDQtMy44ODJxLTcuNjk3IDkuMDgtMTkuMzQyIDkuMDc5Yy01LjUyNiAwLTkuOTM0LTEuNTc5LTEzLjE1OC00LjczN2MtMy4yMjMtMy4xNTgtNC44NjgtNy4zNjgtNC44NjgtMTIuNjMxYzAtNS41OTMgMS45NzQtMTAuMTMyIDUuOTg3LTEzLjU1M3M5LjM0Mi01LjEzMiAxNi4xMTgtNS4xMzJjMi4yMzcgMCA0LjU0LjE5OCA2Ljk3NC41MjdzNC45MzQuODU1IDcuNTY2IDEuNDQ3di00LjgwM2MwLTUtMS4wNTMtOC40ODctMy4wOTItMTAuNTI2Yy0yLjEwNi0yLjA0LTUuNjU4LTMuMDI2LTEwLjcyNC0zLjAyNmMtMi4zMDMgMC00LjY3MS4yNjMtNy4xMDUuODU1cy00LjgwMyAxLjMxNi03LjEwNiAyLjIzN2ExOSAxOSAwIDAgMS0yLjMwMi44NTVjLS40Ni4xMzItLjc5LjE5OC0xLjA1My4xOThjLS45MiAwLTEuMzgyLS42NTgtMS4zODItMi4wNHYtMy4yMjRjMC0xLjA1Mi4xMzItMS44NDIuNDYxLTIuMzAycy45MjEtLjkyMSAxLjg0Mi0xLjM4MnEzLjQ1NC0xLjc3NiA4LjI5LTIuOTZjMy4yMjMtLjg1NiA2LjY0NC0xLjI1IDEwLjI2My0xLjI1YzcuODI5IDAgMTMuNTUyIDEuNzc2IDE3LjIzNyA1LjMyOGMzLjYxOCAzLjU1MyA1LjQ2IDguOTQ4IDUuNDYgMTYuMTg1djIxLjMxNnptLTI2LjcxIDEwYzIuMTcgMCA0LjQwNy0uMzk1IDYuNzc2LTEuMTg1YzIuMzY4LS43ODkgNC40NzMtMi4yMzcgNi4yNS00LjIxYzEuMDUyLTEuMjUgMS44NDItMi42MzIgMi4yMzYtNC4yMTFzLjY1OC0zLjQ4Ny42NTgtNS43MjN2LTIuNzY0YTU1IDU1IDAgMCAwLTYuMDUyLTEuMTE4YTUwIDUwIDAgMCAwLTYuMTg1LS4zOTVjLTQuNDA4IDAtNy42MzEuODU2LTkuODAyIDIuNjMycy0zLjIyNCA0LjI3Ni0zLjIyNCA3LjU2NmMwIDMuMDkyLjc5IDUuMzk0IDIuNDM0IDYuOTczYzEuNTggMS42NDUgMy44ODIgMi40MzUgNi45MDggMi40MzVtNTIuODI4IDcuMTA1Yy0xLjE4NCAwLTEuOTc0LS4xOTgtMi41LS42NThjLS41MjYtLjM5NS0uOTg3LTEuMzE2LTEuMzgxLTIuNTY2bC0xNS40Ni01MC44NTVjLS4zOTYtMS4zMTYtLjU5My0yLjE3MS0uNTkzLTIuNjMyYzAtMS4wNTIuNTI2LTEuNjQ1IDEuNTc5LTEuNjQ1aDYuNDQ3YzEuMjUgMCAyLjEwNi4xOTggMi41NjYuNjU4Yy41MjYuMzk1LjkyMSAxLjMxNiAxLjMxNiAyLjU2NmwxMS4wNTIgNDMuNTUzbDEwLjI2NC00My41NTNjLjMyOS0xLjMxNi43MjMtMi4xNyAxLjI1LTIuNTY2Yy41MjYtLjM5NCAxLjQ0Ny0uNjU3IDIuNjMxLS42NTdoNS4yNjNjMS4yNSAwIDIuMTA2LjE5NyAyLjYzMi42NTdjLjUyNi4zOTUuOTg3IDEuMzE2IDEuMjUgMi41NjZsMTAuMzk1IDQ0LjA3OWwxMS4zODEtNDQuMDc5Yy4zOTUtMS4zMTYuODU2LTIuMTcgMS4zMTYtMi41NjZjLjUyNi0uMzk0IDEuMzgyLS42NTcgMi41NjYtLjY1N2g2LjExOGMxLjA1MyAwIDEuNjQ1LjUyNiAxLjY0NSAxLjY0NGMwIC4zMy0uMDY2LjY1OC0uMTMyIDEuMDUzYy0uMDY1LjM5NS0uMTk3LjkyLS40NiAxLjY0NWwtMTUuODU1IDUwLjg1NXEtLjU5MyAxLjk3NC0xLjM4MiAyLjU2NmMtLjUyNi4zOTQtMS4zODIuNjU4LTIuNS42NThoLTUuNjU4Yy0xLjI1IDAtMi4xMDUtLjE5OC0yLjYzMS0uNjU4Yy0uNTI3LS40NjEtLjk4Ny0xLjMxNi0xLjI1LTIuNjMybC0xMC4xOTgtNDIuNDM0bC0xMC4xMzEgNDIuMzY4Yy0uMzI5IDEuMzE2LS43MjQgMi4xNzEtMS4yNSAyLjYzMmMtLjUyNy40Ni0xLjQ0OC42NTgtMi42MzIuNjU4em04NC41NCAxLjc3NmMtMy40MjEgMC02Ljg0Mi0uMzk1LTEwLjEzMi0xLjE4NGMtMy4yODktLjc5LTUuODU1LTEuNjQ1LTcuNTY2LTIuNjMyYy0xLjA1Mi0uNTkyLTEuNzc2LTEuMjUtMi4wMzktMS44NDJhNC42NSA0LjY1IDAgMCAxLS4zOTUtMS44NDJ2LTMuMzU1YzAtMS4zODIuNTI2LTIuMDQgMS41MTMtMi4wNHEuNTkzIDAgMS4xODQuMTk4Yy4zOTUuMTMxLjk4Ny4zOTQgMS42NDUuNjU4YTM1LjggMzUuOCAwIDAgMCA3LjIzNyAyLjMwMmEzOS41IDM5LjUgMCAwIDAgNy44MjkuNzljNC4xNDUgMCA3LjM2OC0uNzI0IDkuNjA1LTIuMTcxYzIuMjM3LTEuNDQ4IDMuNDIxLTMuNTUzIDMuNDIxLTYuMjVjMC0xLjg0Mi0uNTkyLTMuMzU2LTEuNzc2LTQuNjA2cy0zLjQyMS0yLjM2OC02LjY0NS0zLjQyMWwtOS41MzktMi45NmMtNC44MDMtMS41MTMtOC4zNTYtMy43NS0xMC41MjctNi43MWMtMi4xNzEtMi44OTUtMy4yODktNi4xMi0zLjI4OS05LjU0cTAtNC4xNDQgMS43NzYtNy4zMDNjMS4xODQtMi4xMDUgMi43NjMtMy45NDcgNC43MzctNS4zOTRjMS45NzQtMS41MTQgNC4yMTEtMi42MzIgNi44NDItMy40MjJjMi42MzItLjc5IDUuMzk1LTEuMTE4IDguMjktMS4xMThjMS40NDcgMCAyLjk2LjA2NiA0LjQwOC4yNjNjMS41MTMuMTk3IDIuODk0LjQ2IDQuMjc2LjcyNGMxLjMxNi4zMjkgMi41NjYuNjU4IDMuNzUgMS4wNTNxMS43NzYuNTkxIDIuNzYzIDEuMTg0Yy45MjEuNTI2IDEuNTc5IDEuMDUyIDEuOTc0IDEuNjQ0cS41OTIuNzkuNTkyIDIuMTcydjMuMDkyYzAgMS4zODEtLjUyNiAyLjEwNS0xLjUxMyAyLjEwNWMtLjUyNyAwLTEuMzgyLS4yNjMtMi41LS43OXEtNS42MjUtMi41NjUtMTIuNjMyLTIuNTY1Yy0zLjc1IDAtNi43MS41OTItOC43NSAxLjg0MnMtMy4wOTIgMy4xNTgtMy4wOTIgNS44NTVjMCAxLjg0Mi42NTggMy40MjEgMS45NzQgNC42NzFzMy43NSAyLjUgNy4yMzcgMy42MThsOS4zNDIgMi45NmM0LjczNiAxLjUxNCA4LjE1OCAzLjYxOSAxMC4xOTcgNi4zMTdzMy4wMjYgNS43ODkgMy4wMjYgOS4yMWMwIDIuODI5LS41OTIgNS4zOTUtMS43MSA3LjYzMmMtMS4xODQgMi4yMzctMi43NjMgNC4yMS00LjgwMyA1Ljc4OWMtMi4wMzkgMS42NDUtNC40NzQgMi44MjktNy4zMDIgMy42ODVjLTIuOTYxLjkyMS02LjA1MyAxLjM4MS05LjQwOCAxLjM4MSIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIwNy44MzcgMTYyLjgxNmMtMjEuNjQ1IDE1Ljk4Ny01My4wOTIgMjQuNDc0LTgwLjEzMiAyNC40NzRjLTM3Ljg5NCAwLTcyLjA0LTE0LjAxNC05Ny44MjktMzcuMzAzYy0yLjA0LTEuODQyLS4xOTctNC4zNDIgMi4yMzctMi44OTVjMjcuODk1IDE2LjE4NCA2Mi4zMDMgMjUuOTg3IDk3Ljg5NSAyNS45ODdjMjQuMDEzIDAgNTAuMzk1LTUgNzQuNjcxLTE1LjI2M2MzLjYxOC0xLjY0NSA2LjcxIDIuMzY4IDMuMTU4IDUiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIxNi44NSAxNTIuNTUzYy0yLjc2My0zLjU1My0xOC4yODktMS43MTEtMjUuMzI5LS44NTZjLTIuMTA1LjI2NC0yLjQzNC0xLjU3OS0uNTI2LTIuOTZjMTIuMzY4LTguNjg0IDMyLjY5Ny02LjE4NCAzNS4wNjYtMy4yOWMyLjM2OCAyLjk2MS0uNjU4IDIzLjI5LTEyLjIzNyAzMy4wMjdjLTEuNzc3IDEuNTEzLTMuNDg3LjcyMy0yLjY5OC0xLjI1YzIuNjMyLTYuNTEzIDguNDg3LTIxLjE4NSA1LjcyNC0yNC42NzEiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=", - resources: 76, - added: "Feb 28, 2024", - }, - { - id: 8, - account: "aws", - provider_id: 740350143851, - connected: true, - group: "HR", - scan_status: "active", - scan_status_time: "8 minutes, 20 seconds", - last_scan: "Jul 17, 2024 9:46am UTC", - next_scan: "Jul 18, 2024 9:46am UTC", - provider_img: - "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI1NiAyNTYiPjxnIGZpbGw9Im5vbmUiPjxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiBmaWxsPSIjZjRmMmVkIiByeD0iNjAiLz48cGF0aCBmaWxsPSIjMjUyZjNlIiBkPSJNODQuNzQ1IDExMS45NjFjMCAyLjQzNC4yNjMgNC40MDcuNzIzIDUuODU1YTM1IDM1IDAgMCAwIDIuMTA2IDQuNzM3Yy4zMjkuNTI2LjQ2IDEuMDUyLjQ2IDEuNTEzYzAgLjY1OC0uMzk1IDEuMzE2LTEuMjUgMS45NzNsLTQuMTQ1IDIuNzY0Yy0uNTkyLjM5NC0xLjE4NC41OTItMS43MS41OTJjLS42NTggMC0xLjMxNi0uMzI5LTEuOTc0LS45MjFhMjAuNCAyMC40IDAgMCAxLTIuMzY4LTMuMDkyYTUxIDUxIDAgMCAxLTIuMDQtMy44ODJxLTcuNjk3IDkuMDgtMTkuMzQyIDkuMDc5Yy01LjUyNiAwLTkuOTM0LTEuNTc5LTEzLjE1OC00LjczN2MtMy4yMjMtMy4xNTgtNC44NjgtNy4zNjgtNC44NjgtMTIuNjMxYzAtNS41OTMgMS45NzQtMTAuMTMyIDUuOTg3LTEzLjU1M3M5LjM0Mi01LjEzMiAxNi4xMTgtNS4xMzJjMi4yMzcgMCA0LjU0LjE5OCA2Ljk3NC41MjdzNC45MzQuODU1IDcuNTY2IDEuNDQ3di00LjgwM2MwLTUtMS4wNTMtOC40ODctMy4wOTItMTAuNTI2Yy0yLjEwNi0yLjA0LTUuNjU4LTMuMDI2LTEwLjcyNC0zLjAyNmMtMi4zMDMgMC00LjY3MS4yNjMtNy4xMDUuODU1cy00LjgwMyAxLjMxNi03LjEwNiAyLjIzN2ExOSAxOSAwIDAgMS0yLjMwMi44NTVjLS40Ni4xMzItLjc5LjE5OC0xLjA1My4xOThjLS45MiAwLTEuMzgyLS42NTgtMS4zODItMi4wNHYtMy4yMjRjMC0xLjA1Mi4xMzItMS44NDIuNDYxLTIuMzAycy45MjEtLjkyMSAxLjg0Mi0xLjM4MnEzLjQ1NC0xLjc3NiA4LjI5LTIuOTZjMy4yMjMtLjg1NiA2LjY0NC0xLjI1IDEwLjI2My0xLjI1YzcuODI5IDAgMTMuNTUyIDEuNzc2IDE3LjIzNyA1LjMyOGMzLjYxOCAzLjU1MyA1LjQ2IDguOTQ4IDUuNDYgMTYuMTg1djIxLjMxNnptLTI2LjcxIDEwYzIuMTcgMCA0LjQwNy0uMzk1IDYuNzc2LTEuMTg1YzIuMzY4LS43ODkgNC40NzMtMi4yMzcgNi4yNS00LjIxYzEuMDUyLTEuMjUgMS44NDItMi42MzIgMi4yMzYtNC4yMTFzLjY1OC0zLjQ4Ny42NTgtNS43MjN2LTIuNzY0YTU1IDU1IDAgMCAwLTYuMDUyLTEuMTE4YTUwIDUwIDAgMCAwLTYuMTg1LS4zOTVjLTQuNDA4IDAtNy42MzEuODU2LTkuODAyIDIuNjMycy0zLjIyNCA0LjI3Ni0zLjIyNCA3LjU2NmMwIDMuMDkyLjc5IDUuMzk0IDIuNDM0IDYuOTczYzEuNTggMS42NDUgMy44ODIgMi40MzUgNi45MDggMi40MzVtNTIuODI4IDcuMTA1Yy0xLjE4NCAwLTEuOTc0LS4xOTgtMi41LS42NThjLS41MjYtLjM5NS0uOTg3LTEuMzE2LTEuMzgxLTIuNTY2bC0xNS40Ni01MC44NTVjLS4zOTYtMS4zMTYtLjU5My0yLjE3MS0uNTkzLTIuNjMyYzAtMS4wNTIuNTI2LTEuNjQ1IDEuNTc5LTEuNjQ1aDYuNDQ3YzEuMjUgMCAyLjEwNi4xOTggMi41NjYuNjU4Yy41MjYuMzk1LjkyMSAxLjMxNiAxLjMxNiAyLjU2NmwxMS4wNTIgNDMuNTUzbDEwLjI2NC00My41NTNjLjMyOS0xLjMxNi43MjMtMi4xNyAxLjI1LTIuNTY2Yy41MjYtLjM5NCAxLjQ0Ny0uNjU3IDIuNjMxLS42NTdoNS4yNjNjMS4yNSAwIDIuMTA2LjE5NyAyLjYzMi42NTdjLjUyNi4zOTUuOTg3IDEuMzE2IDEuMjUgMi41NjZsMTAuMzk1IDQ0LjA3OWwxMS4zODEtNDQuMDc5Yy4zOTUtMS4zMTYuODU2LTIuMTcgMS4zMTYtMi41NjZjLjUyNi0uMzk0IDEuMzgyLS42NTcgMi41NjYtLjY1N2g2LjExOGMxLjA1MyAwIDEuNjQ1LjUyNiAxLjY0NSAxLjY0NGMwIC4zMy0uMDY2LjY1OC0uMTMyIDEuMDUzYy0uMDY1LjM5NS0uMTk3LjkyLS40NiAxLjY0NWwtMTUuODU1IDUwLjg1NXEtLjU5MyAxLjk3NC0xLjM4MiAyLjU2NmMtLjUyNi4zOTQtMS4zODIuNjU4LTIuNS42NThoLTUuNjU4Yy0xLjI1IDAtMi4xMDUtLjE5OC0yLjYzMS0uNjU4Yy0uNTI3LS40NjEtLjk4Ny0xLjMxNi0xLjI1LTIuNjMybC0xMC4xOTgtNDIuNDM0bC0xMC4xMzEgNDIuMzY4Yy0uMzI5IDEuMzE2LS43MjQgMi4xNzEtMS4yNSAyLjYzMmMtLjUyNy40Ni0xLjQ0OC42NTgtMi42MzIuNjU4em04NC41NCAxLjc3NmMtMy40MjEgMC02Ljg0Mi0uMzk1LTEwLjEzMi0xLjE4NGMtMy4yODktLjc5LTUuODU1LTEuNjQ1LTcuNTY2LTIuNjMyYy0xLjA1Mi0uNTkyLTEuNzc2LTEuMjUtMi4wMzktMS44NDJhNC42NSA0LjY1IDAgMCAxLS4zOTUtMS44NDJ2LTMuMzU1YzAtMS4zODIuNTI2LTIuMDQgMS41MTMtMi4wNHEuNTkzIDAgMS4xODQuMTk4Yy4zOTUuMTMxLjk4Ny4zOTQgMS42NDUuNjU4YTM1LjggMzUuOCAwIDAgMCA3LjIzNyAyLjMwMmEzOS41IDM5LjUgMCAwIDAgNy44MjkuNzljNC4xNDUgMCA3LjM2OC0uNzI0IDkuNjA1LTIuMTcxYzIuMjM3LTEuNDQ4IDMuNDIxLTMuNTUzIDMuNDIxLTYuMjVjMC0xLjg0Mi0uNTkyLTMuMzU2LTEuNzc2LTQuNjA2cy0zLjQyMS0yLjM2OC02LjY0NS0zLjQyMWwtOS41MzktMi45NmMtNC44MDMtMS41MTMtOC4zNTYtMy43NS0xMC41MjctNi43MWMtMi4xNzEtMi44OTUtMy4yODktNi4xMi0zLjI4OS05LjU0cTAtNC4xNDQgMS43NzYtNy4zMDNjMS4xODQtMi4xMDUgMi43NjMtMy45NDcgNC43MzctNS4zOTRjMS45NzQtMS41MTQgNC4yMTEtMi42MzIgNi44NDItMy40MjJjMi42MzItLjc5IDUuMzk1LTEuMTE4IDguMjktMS4xMThjMS40NDcgMCAyLjk2LjA2NiA0LjQwOC4yNjNjMS41MTMuMTk3IDIuODk0LjQ2IDQuMjc2LjcyNGMxLjMxNi4zMjkgMi41NjYuNjU4IDMuNzUgMS4wNTNxMS43NzYuNTkxIDIuNzYzIDEuMTg0Yy45MjEuNTI2IDEuNTc5IDEuMDUyIDEuOTc0IDEuNjQ0cS41OTIuNzkuNTkyIDIuMTcydjMuMDkyYzAgMS4zODEtLjUyNiAyLjEwNS0xLjUxMyAyLjEwNWMtLjUyNyAwLTEuMzgyLS4yNjMtMi41LS43OXEtNS42MjUtMi41NjUtMTIuNjMyLTIuNTY1Yy0zLjc1IDAtNi43MS41OTItOC43NSAxLjg0MnMtMy4wOTIgMy4xNTgtMy4wOTIgNS44NTVjMCAxLjg0Mi42NTggMy40MjEgMS45NzQgNC42NzFzMy43NSAyLjUgNy4yMzcgMy42MThsOS4zNDIgMi45NmM0LjczNiAxLjUxNCA4LjE1OCAzLjYxOSAxMC4xOTcgNi4zMTdzMy4wMjYgNS43ODkgMy4wMjYgOS4yMWMwIDIuODI5LS41OTIgNS4zOTUtMS43MSA3LjYzMmMtMS4xODQgMi4yMzctMi43NjMgNC4yMS00LjgwMyA1Ljc4OWMtMi4wMzkgMS42NDUtNC40NzQgMi44MjktNy4zMDIgMy42ODVjLTIuOTYxLjkyMS02LjA1MyAxLjM4MS05LjQwOCAxLjM4MSIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIwNy44MzcgMTYyLjgxNmMtMjEuNjQ1IDE1Ljk4Ny01My4wOTIgMjQuNDc0LTgwLjEzMiAyNC40NzRjLTM3Ljg5NCAwLTcyLjA0LTE0LjAxNC05Ny44MjktMzcuMzAzYy0yLjA0LTEuODQyLS4xOTctNC4zNDIgMi4yMzctMi44OTVjMjcuODk1IDE2LjE4NCA2Mi4zMDMgMjUuOTg3IDk3Ljg5NSAyNS45ODdjMjQuMDEzIDAgNTAuMzk1LTUgNzQuNjcxLTE1LjI2M2MzLjYxOC0xLjY0NSA2LjcxIDIuMzY4IDMuMTU4IDUiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIxNi44NSAxNTIuNTUzYy0yLjc2My0zLjU1My0xOC4yODktMS43MTEtMjUuMzI5LS44NTZjLTIuMTA1LjI2NC0yLjQzNC0xLjU3OS0uNTI2LTIuOTZjMTIuMzY4LTguNjg0IDMyLjY5Ny02LjE4NCAzNS4wNjYtMy4yOWMyLjM2OCAyLjk2MS0uNjU4IDIzLjI5LTEyLjIzNyAzMy4wMjdjLTEuNzc3IDEuNTEzLTMuNDg3LjcyMy0yLjY5OC0xLjI1YzIuNjMyLTYuNTEzIDguNDg3LTIxLjE4NSA1LjcyNC0yNC42NzEiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=", - resources: 110, - added: "Apr 14, 2024", - }, - { - id: 9, - account: "aws", - provider_id: 740350143852, - connected: true, - group: "Finance", - scan_status: "completed", - scan_status_time: "20 minutes, 30 seconds", - last_scan: "Jul 17, 2024 8:46am UTC", - next_scan: "Jul 18, 2024 8:46am UTC", - provider_img: - "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI1NiAyNTYiPjxnIGZpbGw9Im5vbmUiPjxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiBmaWxsPSIjZjRmMmVkIiByeD0iNjAiLz48cGF0aCBmaWxsPSIjMjUyZjNlIiBkPSJNODQuNzQ1IDExMS45NjFjMCAyLjQzNC4yNjMgNC40MDcuNzIzIDUuODU1YTM1IDM1IDAgMCAwIDIuMTA2IDQuNzM3Yy4zMjkuNTI2LjQ2IDEuMDUyLjQ2IDEuNTEzYzAgLjY1OC0uMzk1IDEuMzE2LTEuMjUgMS45NzNsLTQuMTQ1IDIuNzY0Yy0uNTkyLjM5NC0xLjE4NC41OTItMS43MS41OTJjLS42NTggMC0xLjMxNi0uMzI5LTEuOTc0LS45MjFhMjAuNCAyMC40IDAgMCAxLTIuMzY4LTMuMDkyYTUxIDUxIDAgMCAxLTIuMDQtMy44ODJxLTcuNjk3IDkuMDgtMTkuMzQyIDkuMDc5Yy01LjUyNiAwLTkuOTM0LTEuNTc5LTEzLjE1OC00LjczN2MtMy4yMjMtMy4xNTgtNC44NjgtNy4zNjgtNC44NjgtMTIuNjMxYzAtNS41OTMgMS45NzQtMTAuMTMyIDUuOTg3LTEzLjU1M3M5LjM0Mi01LjEzMiAxNi4xMTgtNS4xMzJjMi4yMzcgMCA0LjU0LjE5OCA2Ljk3NC41MjdzNC45MzQuODU1IDcuNTY2IDEuNDQ3di00LjgwM2MwLTUtMS4wNTMtOC40ODctMy4wOTItMTAuNTI2Yy0yLjEwNi0yLjA0LTUuNjU4LTMuMDI2LTEwLjcyNC0zLjAyNmMtMi4zMDMgMC00LjY3MS4yNjMtNy4xMDUuODU1cy00LjgwMyAxLjMxNi03LjEwNiAyLjIzN2ExOSAxOSAwIDAgMS0yLjMwMi44NTVjLS40Ni4xMzItLjc5LjE5OC0xLjA1My4xOThjLS45MiAwLTEuMzgyLS42NTgtMS4zODItMi4wNHYtMy4yMjRjMC0xLjA1Mi4xMzItMS44NDIuNDYxLTIuMzAycy45MjEtLjkyMSAxLjg0Mi0xLjM4MnEzLjQ1NC0xLjc3NiA4LjI5LTIuOTZjMy4yMjMtLjg1NiA2LjY0NC0xLjI1IDEwLjI2My0xLjI1YzcuODI5IDAgMTMuNTUyIDEuNzc2IDE3LjIzNyA1LjMyOGMzLjYxOCAzLjU1MyA1LjQ2IDguOTQ4IDUuNDYgMTYuMTg1djIxLjMxNnptLTI2LjcxIDEwYzIuMTcgMCA0LjQwNy0uMzk1IDYuNzc2LTEuMTg1YzIuMzY4LS43ODkgNC40NzMtMi4yMzcgNi4yNS00LjIxYzEuMDUyLTEuMjUgMS44NDItMi42MzIgMi4yMzYtNC4yMTFzLjY1OC0zLjQ4Ny42NTgtNS43MjN2LTIuNzY0YTU1IDU1IDAgMCAwLTYuMDUyLTEuMTE4YTUwIDUwIDAgMCAwLTYuMTg1LS4zOTVjLTQuNDA4IDAtNy42MzEuODU2LTkuODAyIDIuNjMycy0zLjIyNCA0LjI3Ni0zLjIyNCA3LjU2NmMwIDMuMDkyLjc5IDUuMzk0IDIuNDM0IDYuOTczYzEuNTggMS42NDUgMy44ODIgMi40MzUgNi45MDggMi40MzVtNTIuODI4IDcuMTA1Yy0xLjE4NCAwLTEuOTc0LS4xOTgtMi41LS42NThjLS41MjYtLjM5NS0uOTg3LTEuMzE2LTEuMzgxLTIuNTY2bC0xNS40Ni01MC44NTVjLS4zOTYtMS4zMTYtLjU5My0yLjE3MS0uNTkzLTIuNjMyYzAtMS4wNTIuNTI2LTEuNjQ1IDEuNTc5LTEuNjQ1aDYuNDQ3YzEuMjUgMCAyLjEwNi4xOTggMi41NjYuNjU4Yy41MjYuMzk1LjkyMSAxLjMxNiAxLjMxNiAyLjU2NmwxMS4wNTIgNDMuNTUzbDEwLjI2NC00My41NTNjLjMyOS0xLjMxNi43MjMtMi4xNyAxLjI1LTIuNTY2Yy41MjYtLjM5NCAxLjQ0Ny0uNjU3IDIuNjMxLS42NTdoNS4yNjNjMS4yNSAwIDIuMTA2LjE5NyAyLjYzMi42NTdjLjUyNi4zOTUuOTg3IDEuMzE2IDEuMjUgMi41NjZsMTAuMzk1IDQ0LjA3OWwxMS4zODEtNDQuMDc5Yy4zOTUtMS4zMTYuODU2LTIuMTcgMS4zMTYtMi41NjZjLjUyNi0uMzk0IDEuMzgyLS42NTcgMi41NjYtLjY1N2g2LjExOGMxLjA1MyAwIDEuNjQ1LjUyNiAxLjY0NSAxLjY0NGMwIC4zMy0uMDY2LjY1OC0uMTMyIDEuMDUzYy0uMDY1LjM5NS0uMTk3LjkyLS40NiAxLjY0NWwtMTUuODU1IDUwLjg1NXEtLjU5MyAxLjk3NC0xLjM4MiAyLjU2NmMtLjUyNi4zOTQtMS4zODIuNjU4LTIuNS42NThoLTUuNjU4Yy0xLjI1IDAtMi4xMDUtLjE5OC0yLjYzMS0uNjU4Yy0uNTI3LS40NjEtLjk4Ny0xLjMxNi0xLjI1LTIuNjMybC0xMC4xOTgtNDIuNDM0bC0xMC4xMzEgNDIuMzY4Yy0uMzI5IDEuMzE2LS43MjQgMi4xNzEtMS4yNSAyLjYzMmMtLjUyNy40Ni0xLjQ0OC42NTgtMi42MzIuNjU4em04NC41NCAxLjc3NmMtMy40MjEgMC02Ljg0Mi0uMzk1LTEwLjEzMi0xLjE4NGMtMy4yODktLjc5LTUuODU1LTEuNjQ1LTcuNTY2LTIuNjMyYy0xLjA1Mi0uNTkyLTEuNzc2LTEuMjUtMi4wMzktMS44NDJhNC42NSA0LjY1IDAgMCAxLS4zOTUtMS44NDJ2LTMuMzU1YzAtMS4zODIuNTI2LTIuMDQgMS41MTMtMi4wNHEuNTkzIDAgMS4xODQuMTk4Yy4zOTUuMTMxLjk4Ny4zOTQgMS42NDUuNjU4YTM1LjggMzUuOCAwIDAgMCA3LjIzNyAyLjMwMmEzOS41IDM5LjUgMCAwIDAgNy44MjkuNzljNC4xNDUgMCA3LjM2OC0uNzI0IDkuNjA1LTIuMTcxYzIuMjM3LTEuNDQ4IDMuNDIxLTMuNTUzIDMuNDIxLTYuMjVjMC0xLjg0Mi0uNTkyLTMuMzU2LTEuNzc2LTQuNjA2cy0zLjQyMS0yLjM2OC02LjY0NS0zLjQyMWwtOS41MzktMi45NmMtNC44MDMtMS41MTMtOC4zNTYtMy43NS0xMC41MjctNi43MWMtMi4xNzEtMi44OTUtMy4yODktNi4xMi0zLjI4OS05LjU0cTAtNC4xNDQgMS43NzYtNy4zMDNjMS4xODQtMi4xMDUgMi43NjMtMy45NDcgNC43MzctNS4zOTRjMS45NzQtMS41MTQgNC4yMTEtMi42MzIgNi44NDItMy40MjJjMi42MzItLjc5IDUuMzk1LTEuMTE4IDguMjktMS4xMThjMS40NDcgMCAyLjk2LjA2NiA0LjQwOC4yNjNjMS41MTMuMTk3IDIuODk0LjQ2IDQuMjc2LjcyNGMxLjMxNi4zMjkgMi41NjYuNjU4IDMuNzUgMS4wNTNxMS43NzYuNTkxIDIuNzYzIDEuMTg0Yy45MjEuNTI2IDEuNTc5IDEuMDUyIDEuOTc0IDEuNjQ0cS41OTIuNzkuNTkyIDIuMTcydjMuMDkyYzAgMS4zODEtLjUyNiAyLjEwNS0xLjUxMyAyLjEwNWMtLjUyNyAwLTEuMzgyLS4yNjMtMi41LS43OXEtNS42MjUtMi41NjUtMTIuNjMyLTIuNTY1Yy0zLjc1IDAtNi43MS41OTItOC43NSAxLjg0MnMtMy4wOTIgMy4xNTgtMy4wOTIgNS44NTVjMCAxLjg0Mi42NTggMy40MjEgMS45NzQgNC42NzFzMy43NSAyLjUgNy4yMzcgMy42MThsOS4zNDIgMi45NmM0LjczNiAxLjUxNCA4LjE1OCAzLjYxOSAxMC4xOTcgNi4zMTdzMy4wMjYgNS43ODkgMy4wMjYgOS4yMWMwIDIuODI5LS41OTIgNS4zOTUtMS43MSA3LjYzMmMtMS4xODQgMi4yMzctMi43NjMgNC4yMS00LjgwMyA1Ljc4OWMtMi4wMzkgMS42NDUtNC40NzQgMi44MjktNy4zMDIgMy42ODVjLTIuOTYxLjkyMS02LjA1MyAxLjM4MS05LjQwOCAxLjM4MSIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIwNy44MzcgMTYyLjgxNmMtMjEuNjQ1IDE1Ljk4Ny01My4wOTIgMjQuNDc0LTgwLjEzMiAyNC40NzRjLTM3Ljg5NCAwLTcyLjA0LTE0LjAxNC05Ny44MjktMzcuMzAzYy0yLjA0LTEuODQyLS4xOTctNC4zNDIgMi4yMzctMi44OTVjMjcuODk1IDE2LjE4NCA2Mi4zMDMgMjUuOTg3IDk3Ljg5NSAyNS45ODdjMjQuMDEzIDAgNTAuMzk1LTUgNzQuNjcxLTE1LjI2M2MzLjYxOC0xLjY0NSA2LjcxIDIuMzY4IDMuMTU4IDUiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIxNi44NSAxNTIuNTUzYy0yLjc2My0zLjU1My0xOC4yODktMS43MTEtMjUuMzI5LS44NTZjLTIuMTA1LjI2NC0yLjQzNC0xLjU3OS0uNTI2LTIuOTZjMTIuMzY4LTguNjg0IDMyLjY5Ny02LjE4NCAzNS4wNjYtMy4yOWMyLjM2OCAyLjk2MS0uNjU4IDIzLjI5LTEyLjIzNyAzMy4wMjdjLTEuNzc3IDEuNTEzLTMuNDg3LjcyMy0yLjY5OC0xLjI1YzIuNjMyLTYuNTEzIDguNDg3LTIxLjE4NSA1LjcyNC0yNC42NzEiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=", - resources: 145, - added: "Jan 5, 2024", - }, - { - id: 10, - account: "aws", - provider_id: 740350143853, - connected: true, - group: "Operations", - scan_status: "active", - scan_status_time: "6 minutes, 50 seconds", - last_scan: "Jul 17, 2024 7:46am UTC", - next_scan: "Jul 18, 2024 7:46am UTC", - provider_img: - "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI1NiAyNTYiPjxnIGZpbGw9Im5vbmUiPjxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiBmaWxsPSIjZjRmMmVkIiByeD0iNjAiLz48cGF0aCBmaWxsPSIjMjUyZjNlIiBkPSJNODQuNzQ1IDExMS45NjFjMCAyLjQzNC4yNjMgNC40MDcuNzIzIDUuODU1YTM1IDM1IDAgMCAwIDIuMTA2IDQuNzM3Yy4zMjkuNTI2LjQ2IDEuMDUyLjQ2IDEuNTEzYzAgLjY1OC0uMzk1IDEuMzE2LTEuMjUgMS45NzNsLTQuMTQ1IDIuNzY0Yy0uNTkyLjM5NC0xLjE4NC41OTItMS43MS41OTJjLS42NTggMC0xLjMxNi0uMzI5LTEuOTc0LS45MjFhMjAuNCAyMC40IDAgMCAxLTIuMzY4LTMuMDkyYTUxIDUxIDAgMCAxLTIuMDQtMy44ODJxLTcuNjk3IDkuMDgtMTkuMzQyIDkuMDc5Yy01LjUyNiAwLTkuOTM0LTEuNTc5LTEzLjE1OC00LjczN2MtMy4yMjMtMy4xNTgtNC44NjgtNy4zNjgtNC44NjgtMTIuNjMxYzAtNS41OTMgMS45NzQtMTAuMTMyIDUuOTg3LTEzLjU1M3M5LjM0Mi01LjEzMiAxNi4xMTgtNS4xMzJjMi4yMzcgMCA0LjU0LjE5OCA2Ljk3NC41MjdzNC45MzQuODU1IDcuNTY2IDEuNDQ3di00LjgwM2MwLTUtMS4wNTMtOC40ODctMy4wOTItMTAuNTI2Yy0yLjEwNi0yLjA0LTUuNjU4LTMuMDI2LTEwLjcyNC0zLjAyNmMtMi4zMDMgMC00LjY3MS4yNjMtNy4xMDUuODU1cy00LjgwMyAxLjMxNi03LjEwNiAyLjIzN2ExOSAxOSAwIDAgMS0yLjMwMi44NTVjLS40Ni4xMzItLjc5LjE5OC0xLjA1My4xOThjLS45MiAwLTEuMzgyLS42NTgtMS4zODItMi4wNHYtMy4yMjRjMC0xLjA1Mi4xMzItMS44NDIuNDYxLTIuMzAycy45MjEtLjkyMSAxLjg0Mi0xLjM4MnEzLjQ1NC0xLjc3NiA4LjI5LTIuOTZjMy4yMjMtLjg1NiA2LjY0NC0xLjI1IDEwLjI2My0xLjI1YzcuODI5IDAgMTMuNTUyIDEuNzc2IDE3LjIzNyA1LjMyOGMzLjYxOCAzLjU1MyA1LjQ2IDguOTQ4IDUuNDYgMTYuMTg1djIxLjMxNnptLTI2LjcxIDEwYzIuMTcgMCA0LjQwNy0uMzk1IDYuNzc2LTEuMTg1YzIuMzY4LS43ODkgNC40NzMtMi4yMzcgNi4yNS00LjIxYzEuMDUyLTEuMjUgMS44NDItMi42MzIgMi4yMzYtNC4yMTFzLjY1OC0zLjQ4Ny42NTgtNS43MjN2LTIuNzY0YTU1IDU1IDAgMCAwLTYuMDUyLTEuMTE4YTUwIDUwIDAgMCAwLTYuMTg1LS4zOTVjLTQuNDA4IDAtNy42MzEuODU2LTkuODAyIDIuNjMycy0zLjIyNCA0LjI3Ni0zLjIyNCA3LjU2NmMwIDMuMDkyLjc5IDUuMzk0IDIuNDM0IDYuOTczYzEuNTggMS42NDUgMy44ODIgMi40MzUgNi45MDggMi40MzVtNTIuODI4IDcuMTA1Yy0xLjE4NCAwLTEuOTc0LS4xOTgtMi41LS42NThjLS41MjYtLjM5NS0uOTg3LTEuMzE2LTEuMzgxLTIuNTY2bC0xNS40Ni01MC44NTVjLS4zOTYtMS4zMTYtLjU5My0yLjE3MS0uNTkzLTIuNjMyYzAtMS4wNTIuNTI2LTEuNjQ1IDEuNTc5LTEuNjQ1aDYuNDQ3YzEuMjUgMCAyLjEwNi4xOTggMi41NjYuNjU4Yy41MjYuMzk1LjkyMSAxLjMxNiAxLjMxNiAyLjU2NmwxMS4wNTIgNDMuNTUzbDEwLjI2NC00My41NTNjLjMyOS0xLjMxNi43MjMtMi4xNyAxLjI1LTIuNTY2Yy41MjYtLjM5NCAxLjQ0Ny0uNjU3IDIuNjMxLS42NTdoNS4yNjNjMS4yNSAwIDIuMTA2LjE5NyAyLjYzMi42NTdjLjUyNi4zOTUuOTg3IDEuMzE2IDEuMjUgMi41NjZsMTAuMzk1IDQ0LjA3OWwxMS4zODEtNDQuMDc5Yy4zOTUtMS4zMTYuODU2LTIuMTcgMS4zMTYtMi41NjZjLjUyNi0uMzk0IDEuMzgyLS42NTcgMi41NjYtLjY1N2g2LjExOGMxLjA1MyAwIDEuNjQ1LjUyNiAxLjY0NSAxLjY0NGMwIC4zMy0uMDY2LjY1OC0uMTMyIDEuMDUzYy0uMDY1LjM5NS0uMTk3LjkyLS40NiAxLjY0NWwtMTUuODU1IDUwLjg1NXEtLjU5MyAxLjk3NC0xLjM4MiAyLjU2NmMtLjUyNi4zOTQtMS4zODIuNjU4LTIuNS42NThoLTUuNjU4Yy0xLjI1IDAtMi4xMDUtLjE5OC0yLjYzMS0uNjU4Yy0uNTI3LS40NjEtLjk4Ny0xLjMxNi0xLjI1LTIuNjMybC0xMC4xOTgtNDIuNDM0bC0xMC4xMzEgNDIuMzY4Yy0uMzI5IDEuMzE2LS43MjQgMi4xNzEtMS4yNSAyLjYzMmMtLjUyNy40Ni0xLjQ0OC42NTgtMi42MzIuNjU4em04NC41NCAxLjc3NmMtMy40MjEgMC02Ljg0Mi0uMzk1LTEwLjEzMi0xLjE4NGMtMy4yODktLjc5LTUuODU1LTEuNjQ1LTcuNTY2LTIuNjMyYy0xLjA1Mi0uNTkyLTEuNzc2LTEuMjUtMi4wMzktMS44NDJhNC42NSA0LjY1IDAgMCAxLS4zOTUtMS44NDJ2LTMuMzU1YzAtMS4zODIuNTI2LTIuMDQgMS41MTMtMi4wNHEuNTkzIDAgMS4xODQuMTk4Yy4zOTUuMTMxLjk4Ny4zOTQgMS42NDUuNjU4YTM1LjggMzUuOCAwIDAgMCA3LjIzNyAyLjMwMmEzOS41IDM5LjUgMCAwIDAgNy44MjkuNzljNC4xNDUgMCA3LjM2OC0uNzI0IDkuNjA1LTIuMTcxYzIuMjM3LTEuNDQ4IDMuNDIxLTMuNTUzIDMuNDIxLTYuMjVjMC0xLjg0Mi0uNTkyLTMuMzU2LTEuNzc2LTQuNjA2cy0zLjQyMS0yLjM2OC02LjY0NS0zLjQyMWwtOS41MzktMi45NmMtNC44MDMtMS41MTMtOC4zNTYtMy43NS0xMC41MjctNi43MWMtMi4xNzEtMi44OTUtMy4yODktNi4xMi0zLjI4OS05LjU0cTAtNC4xNDQgMS43NzYtNy4zMDNjMS4xODQtMi4xMDUgMi43NjMtMy45NDcgNC43MzctNS4zOTRjMS45NzQtMS41MTQgNC4yMTEtMi42MzIgNi44NDItMy40MjJjMi42MzItLjc5IDUuMzk1LTEuMTE4IDguMjktMS4xMThjMS40NDcgMCAyLjk2LjA2NiA0LjQwOC4yNjNjMS41MTMuMTk3IDIuODk0LjQ2IDQuMjc2LjcyNGMxLjMxNi4zMjkgMi41NjYuNjU4IDMuNzUgMS4wNTNxMS43NzYuNTkxIDIuNzYzIDEuMTg0Yy45MjEuNTI2IDEuNTc5IDEuMDUyIDEuOTc0IDEuNjQ0cS41OTIuNzkuNTkyIDIuMTcydjMuMDkyYzAgMS4zODEtLjUyNiAyLjEwNS0xLjUxMyAyLjEwNWMtLjUyNyAwLTEuMzgyLS4yNjMtMi41LS43OXEtNS42MjUtMi41NjUtMTIuNjMyLTIuNTY1Yy0zLjc1IDAtNi43MS41OTItOC43NSAxLjg0MnMtMy4wOTIgMy4xNTgtMy4wOTIgNS44NTVjMCAxLjg0Mi42NTggMy40MjEgMS45NzQgNC42NzFzMy43NSAyLjUgNy4yMzcgMy42MThsOS4zNDIgMi45NmM0LjczNiAxLjUxNCA4LjE1OCAzLjYxOSAxMC4xOTcgNi4zMTdzMy4wMjYgNS43ODkgMy4wMjYgOS4yMWMwIDIuODI5LS41OTIgNS4zOTUtMS43MSA3LjYzMmMtMS4xODQgMi4yMzctMi43NjMgNC4yMS00LjgwMyA1Ljc4OWMtMi4wMzkgMS42NDUtNC40NzQgMi44MjktNy4zMDIgMy42ODVjLTIuOTYxLjkyMS02LjA1MyAxLjM4MS05LjQwOCAxLjM4MSIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIwNy44MzcgMTYyLjgxNmMtMjEuNjQ1IDE1Ljk4Ny01My4wOTIgMjQuNDc0LTgwLjEzMiAyNC40NzRjLTM3Ljg5NCAwLTcyLjA0LTE0LjAxNC05Ny44MjktMzcuMzAzYy0yLjA0LTEuODQyLS4xOTctNC4zNDIgMi4yMzctMi44OTVjMjcuODk1IDE2LjE4NCA2Mi4zMDMgMjUuOTg3IDk3Ljg5NSAyNS45ODdjMjQuMDEzIDAgNTAuMzk1LTUgNzQuNjcxLTE1LjI2M2MzLjYxOC0xLjY0NSA2LjcxIDIuMzY4IDMuMTU4IDUiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIxNi44NSAxNTIuNTUzYy0yLjc2My0zLjU1My0xOC4yODktMS43MTEtMjUuMzI5LS44NTZjLTIuMTA1LjI2NC0yLjQzNC0xLjU3OS0uNTI2LTIuOTZjMTIuMzY4LTguNjg0IDMyLjY5Ny02LjE4NCAzNS4wNjYtMy4yOWMyLjM2OCAyLjk2MS0uNjU4IDIzLjI5LTEyLjIzNyAzMy4wMjdjLTEuNzc3IDEuNTEzLTMuNDg3LjcyMy0yLjY5OC0xLjI1YzIuNjMyLTYuNTEzIDguNDg3LTIxLjE4NSA1LjcyNC0yNC42NzEiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=", - resources: 132, - added: "Mar 8, 2024", - }, - { - id: 11, - account: "aws", - provider_id: 740350143854, - connected: true, - group: "Development", - scan_status: "active", - scan_status_time: "4 minutes, 15 seconds", - last_scan: "Jul 17, 2024 6:46am UTC", - next_scan: "Jul 18, 2024 6:46am UTC", - provider_img: - "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI1NiAyNTYiPjxnIGZpbGw9Im5vbmUiPjxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiBmaWxsPSIjZjRmMmVkIiByeD0iNjAiLz48cGF0aCBmaWxsPSIjMjUyZjNlIiBkPSJNODQuNzQ1IDExMS45NjFjMCAyLjQzNC4yNjMgNC40MDcuNzIzIDUuODU1YTM1IDM1IDAgMCAwIDIuMTA2IDQuNzM3Yy4zMjkuNTI2LjQ2IDEuMDUyLjQ2IDEuNTEzYzAgLjY1OC0uMzk1IDEuMzE2LTEuMjUgMS45NzNsLTQuMTQ1IDIuNzY0Yy0uNTkyLjM5NC0xLjE4NC41OTItMS43MS41OTJjLS42NTggMC0xLjMxNi0uMzI5LTEuOTc0LS45MjFhMjAuNCAyMC40IDAgMCAxLTIuMzY4LTMuMDkyYTUxIDUxIDAgMCAxLTIuMDQtMy44ODJxLTcuNjk3IDkuMDgtMTkuMzQyIDkuMDc5Yy01LjUyNiAwLTkuOTM0LTEuNTc5LTEzLjE1OC00LjczN2MtMy4yMjMtMy4xNTgtNC44NjgtNy4zNjgtNC44NjgtMTIuNjMxYzAtNS41OTMgMS45NzQtMTAuMTMyIDUuOTg3LTEzLjU1M3M5LjM0Mi01LjEzMiAxNi4xMTgtNS4xMzJjMi4yMzcgMCA0LjU0LjE5OCA2Ljk3NC41MjdzNC45MzQuODU1IDcuNTY2IDEuNDQ3di00LjgwM2MwLTUtMS4wNTMtOC40ODctMy4wOTItMTAuNTI2Yy0yLjEwNi0yLjA0LTUuNjU4LTMuMDI2LTEwLjcyNC0zLjAyNmMtMi4zMDMgMC00LjY3MS4yNjMtNy4xMDUuODU1cy00LjgwMyAxLjMxNi03LjEwNiAyLjIzN2ExOSAxOSAwIDAgMS0yLjMwMi44NTVjLS40Ni4xMzItLjc5LjE5OC0xLjA1My4xOThjLS45MiAwLTEuMzgyLS42NTgtMS4zODItMi4wNHYtMy4yMjRjMC0xLjA1Mi4xMzItMS44NDIuNDYxLTIuMzAycy45MjEtLjkyMSAxLjg0Mi0xLjM4MnEzLjQ1NC0xLjc3NiA4LjI5LTIuOTZjMy4yMjMtLjg1NiA2LjY0NC0xLjI1IDEwLjI2My0xLjI1YzcuODI5IDAgMTMuNTUyIDEuNzc2IDE3LjIzNyA1LjMyOGMzLjYxOCAzLjU1MyA1LjQ2IDguOTQ4IDUuNDYgMTYuMTg1djIxLjMxNnptLTI2LjcxIDEwYzIuMTcgMCA0LjQwNy0uMzk1IDYuNzc2LTEuMTg1YzIuMzY4LS43ODkgNC40NzMtMi4yMzcgNi4yNS00LjIxYzEuMDUyLTEuMjUgMS44NDItMi42MzIgMi4yMzYtNC4yMTFzLjY1OC0zLjQ4Ny42NTgtNS43MjN2LTIuNzY0YTU1IDU1IDAgMCAwLTYuMDUyLTEuMTE4YTUwIDUwIDAgMCAwLTYuMTg1LS4zOTVjLTQuNDA4IDAtNy42MzEuODU2LTkuODAyIDIuNjMycy0zLjIyNCA0LjI3Ni0zLjIyNCA3LjU2NmMwIDMuMDkyLjc5IDUuMzk0IDIuNDM0IDYuOTczYzEuNTggMS42NDUgMy44ODIgMi40MzUgNi45MDggMi40MzVtNTIuODI4IDcuMTA1Yy0xLjE4NCAwLTEuOTc0LS4xOTgtMi41LS42NThjLS41MjYtLjM5NS0uOTg3LTEuMzE2LTEuMzgxLTIuNTY2bC0xNS40Ni01MC44NTVjLS4zOTYtMS4zMTYtLjU5My0yLjE3MS0uNTkzLTIuNjMyYzAtMS4wNTIuNTI2LTEuNjQ1IDEuNTc5LTEuNjQ1aDYuNDQ3YzEuMjUgMCAyLjEwNi4xOTggMi41NjYuNjU4Yy41MjYuMzk1LjkyMSAxLjMxNiAxLjMxNiAyLjU2NmwxMS4wNTIgNDMuNTUzbDEwLjI2NC00My41NTNjLjMyOS0xLjMxNi43MjMtMi4xNyAxLjI1LTIuNTY2Yy41MjYtLjM5NCAxLjQ0Ny0uNjU3IDIuNjMxLS42NTdoNS4yNjNjMS4yNSAwIDIuMTA2LjE5NyAyLjYzMi42NTdjLjUyNi4zOTUuOTg3IDEuMzE2IDEuMjUgMi41NjZsMTAuMzk1IDQ0LjA3OWwxMS4zODEtNDQuMDc5Yy4zOTUtMS4zMTYuODU2LTIuMTcgMS4zMTYtMi41NjZjLjUyNi0uMzk0IDEuMzgyLS42NTcgMi41NjYtLjY1N2g2LjExOGMxLjA1MyAwIDEuNjQ1LjUyNiAxLjY0NSAxLjY0NGMwIC4zMy0uMDY2LjY1OC0uMTMyIDEuMDUzYy0uMDY1LjM5NS0uMTk3LjkyLS40NiAxLjY0NWwtMTUuODU1IDUwLjg1NXEtLjU5MyAxLjk3NC0xLjM4MiAyLjU2NmMtLjUyNi4zOTQtMS4zODIuNjU4LTIuNS42NThoLTUuNjU4Yy0xLjI1IDAtMi4xMDUtLjE5OC0yLjYzMS0uNjU4Yy0uNTI3LS40NjEtLjk4Ny0xLjMxNi0xLjI1LTIuNjMybC0xMC4xOTgtNDIuNDM0bC0xMC4xMzEgNDIuMzY4Yy0uMzI5IDEuMzE2LS43MjQgMi4xNzEtMS4yNSAyLjYzMmMtLjUyNy40Ni0xLjQ0OC42NTgtMi42MzIuNjU4em04NC41NCAxLjc3NmMtMy40MjEgMC02Ljg0Mi0uMzk1LTEwLjEzMi0xLjE4NGMtMy4yODktLjc5LTUuODU1LTEuNjQ1LTcuNTY2LTIuNjMyYy0xLjA1Mi0uNTkyLTEuNzc2LTEuMjUtMi4wMzktMS44NDJhNC42NSA0LjY1IDAgMCAxLS4zOTUtMS44NDJ2LTMuMzU1YzAtMS4zODIuNTI2LTIuMDQgMS41MTMtMi4wNHEuNTkzIDAgMS4xODQuMTk4Yy4zOTUuMTMxLjk4Ny4zOTQgMS42NDUuNjU4YTM1LjggMzUuOCAwIDAgMCA3LjIzNyAyLjMwMmEzOS41IDM5LjUgMCAwIDAgNy44MjkuNzljNC4xNDUgMCA3LjM2OC0uNzI0IDkuNjA1LTIuMTcxYzIuMjM3LTEuNDQ4IDMuNDIxLTMuNTUzIDMuNDIxLTYuMjVjMC0xLjg0Mi0uNTkyLTMuMzU2LTEuNzc2LTQuNjA2cy0zLjQyMS0yLjM2OC02LjY0NS0zLjQyMWwtOS41MzktMi45NmMtNC44MDMtMS41MTMtOC4zNTYtMy43NS0xMC41MjctNi43MWMtMi4xNzEtMi44OTUtMy4yODktNi4xMi0zLjI4OS05LjU0cTAtNC4xNDQgMS43NzYtNy4zMDNjMS4xODQtMi4xMDUgMi43NjMtMy45NDcgNC43MzctNS4zOTRjMS45NzQtMS41MTQgNC4yMTEtMi42MzIgNi44NDItMy40MjJjMi42MzItLjc5IDUuMzk1LTEuMTE4IDguMjktMS4xMThjMS40NDcgMCAyLjk2LjA2NiA0LjQwOC4yNjNjMS41MTMuMTk3IDIuODk0LjQ2IDQuMjc2LjcyNGMxLjMxNi4zMjkgMi41NjYuNjU4IDMuNzUgMS4wNTNxMS43NzYuNTkxIDIuNzYzIDEuMTg0Yy45MjEuNTI2IDEuNTc5IDEuMDUyIDEuOTc0IDEuNjQ0cS41OTIuNzkuNTkyIDIuMTcydjMuMDkyYzAgMS4zODEtLjUyNiAyLjEwNS0xLjUxMyAyLjEwNWMtLjUyNyAwLTEuMzgyLS4yNjMtMi41LS43OXEtNS42MjUtMi41NjUtMTIuNjMyLTIuNTY1Yy0zLjc1IDAtNi43MS41OTItOC43NSAxLjg0MnMtMy4wOTIgMy4xNTgtMy4wOTIgNS44NTVjMCAxLjg0Mi42NTggMy40MjEgMS45NzQgNC42NzFzMy43NSAyLjUgNy4yMzcgMy42MThsOS4zNDIgMi45NmM0LjczNiAxLjUxNCA4LjE1OCAzLjYxOSAxMC4xOTcgNi4zMTdzMy4wMjYgNS43ODkgMy4wMjYgOS4yMWMwIDIuODI5LS41OTIgNS4zOTUtMS43MSA3LjYzMmMtMS4xODQgMi4yMzctMi43NjMgNC4yMS00LjgwMyA1Ljc4OWMtMi4wMzkgMS42NDUtNC40NzQgMi44MjktNy4zMDIgMy42ODVjLTIuOTYxLjkyMS02LjA1MyAxLjM4MS05LjQwOCAxLjM4MSIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIwNy44MzcgMTYyLjgxNmMtMjEuNjQ1IDE1Ljk4Ny01My4wOTIgMjQuNDc0LTgwLjEzMiAyNC40NzRjLTM3Ljg5NCAwLTcyLjA0LTE0LjAxNC05Ny44MjktMzcuMzAzYy0yLjA0LTEuODQyLS4xOTctNC4zNDIgMi4yMzctMi44OTVjMjcuODk1IDE2LjE4NCA2Mi4zMDMgMjUuOTg3IDk3Ljg5NSAyNS45ODdjMjQuMDEzIDAgNTAuMzk1LTUgNzQuNjcxLTE1LjI2M2MzLjYxOC0xLjY0NSA2LjcxIDIuMzY4IDMuMTU4IDUiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIxNi44NSAxNTIuNTUzYy0yLjc2My0zLjU1My0xOC4yODktMS43MTEtMjUuMzI5LS44NTZjLTIuMTA1LjI2NC0yLjQzNC0xLjU3OS0uNTI2LTIuOTZjMTIuMzY4LTguNjg0IDMyLjY5Ny02LjE4NCAzNS4wNjYtMy4yOWMyLjM2OCAyLjk2MS0uNjU4IDIzLjI5LTEyLjIzNyAzMy4wMjdjLTEuNzc3IDEuNTEzLTMuNDg3LjcyMy0yLjY5OC0xLjI1YzIuNjMyLTYuNTEzIDguNDg3LTIxLjE4NSA1LjcyNC0yNC42NzEiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=", - resources: 121, - added: "Apr 21, 2024", - }, - { - id: 12, - account: "aws", - provider_id: 740350143855, - connected: false, - group: "Product", - scan_status: "paused", - scan_status_time: "11 minutes, 40 seconds", - last_scan: "Jul 17, 2024 5:46am UTC", - next_scan: "Jul 18, 2024 5:46am UTC", - provider_img: - "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI1NiAyNTYiPjxnIGZpbGw9Im5vbmUiPjxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiBmaWxsPSIjZjRmMmVkIiByeD0iNjAiLz48cGF0aCBmaWxsPSIjMjUyZjNlIiBkPSJNODQuNzQ1IDExMS45NjFjMCAyLjQzNC4yNjMgNC40MDcuNzIzIDUuODU1YTM1IDM1IDAgMCAwIDIuMTA2IDQuNzM3Yy4zMjkuNTI2LjQ2IDEuMDUyLjQ2IDEuNTEzYzAgLjY1OC0uMzk1IDEuMzE2LTEuMjUgMS45NzNsLTQuMTQ1IDIuNzY0Yy0uNTkyLjM5NC0xLjE4NC41OTItMS43MS41OTJjLS42NTggMC0xLjMxNi0uMzI5LTEuOTc0LS45MjFhMjAuNCAyMC40IDAgMCAxLTIuMzY4LTMuMDkyYTUxIDUxIDAgMCAxLTIuMDQtMy44ODJxLTcuNjk3IDkuMDgtMTkuMzQyIDkuMDc5Yy01LjUyNiAwLTkuOTM0LTEuNTc5LTEzLjE1OC00LjczN2MtMy4yMjMtMy4xNTgtNC44NjgtNy4zNjgtNC44NjgtMTIuNjMxYzAtNS41OTMgMS45NzQtMTAuMTMyIDUuOTg3LTEzLjU1M3M5LjM0Mi01LjEzMiAxNi4xMTgtNS4xMzJjMi4yMzcgMCA0LjU0LjE5OCA2Ljk3NC41MjdzNC45MzQuODU1IDcuNTY2IDEuNDQ3di00LjgwM2MwLTUtMS4wNTMtOC40ODctMy4wOTItMTAuNTI2Yy0yLjEwNi0yLjA0LTUuNjU4LTMuMDI2LTEwLjcyNC0zLjAyNmMtMi4zMDMgMC00LjY3MS4yNjMtNy4xMDUuODU1cy00LjgwMyAxLjMxNi03LjEwNiAyLjIzN2ExOSAxOSAwIDAgMS0yLjMwMi44NTVjLS40Ni4xMzItLjc5LjE5OC0xLjA1My4xOThjLS45MiAwLTEuMzgyLS42NTgtMS4zODItMi4wNHYtMy4yMjRjMC0xLjA1Mi4xMzItMS44NDIuNDYxLTIuMzAycy45MjEtLjkyMSAxLjg0Mi0xLjM4MnEzLjQ1NC0xLjc3NiA4LjI5LTIuOTZjMy4yMjMtLjg1NiA2LjY0NC0xLjI1IDEwLjI2My0xLjI1YzcuODI5IDAgMTMuNTUyIDEuNzc2IDE3LjIzNyA1LjMyOGMzLjYxOCAzLjU1MyA1LjQ2IDguOTQ4IDUuNDYgMTYuMTg1djIxLjMxNnptLTI2LjcxIDEwYzIuMTcgMCA0LjQwNy0uMzk1IDYuNzc2LTEuMTg1YzIuMzY4LS43ODkgNC40NzMtMi4yMzcgNi4yNS00LjIxYzEuMDUyLTEuMjUgMS44NDItMi42MzIgMi4yMzYtNC4yMTFzLjY1OC0zLjQ4Ny42NTgtNS43MjN2LTIuNzY0YTU1IDU1IDAgMCAwLTYuMDUyLTEuMTE4YTUwIDUwIDAgMCAwLTYuMTg1LS4zOTVjLTQuNDA4IDAtNy42MzEuODU2LTkuODAyIDIuNjMycy0zLjIyNCA0LjI3Ni0zLjIyNCA3LjU2NmMwIDMuMDkyLjc5IDUuMzk0IDIuNDM0IDYuOTczYzEuNTggMS42NDUgMy44ODIgMi40MzUgNi45MDggMi40MzVtNTIuODI4IDcuMTA1Yy0xLjE4NCAwLTEuOTc0LS4xOTgtMi41LS42NThjLS41MjYtLjM5NS0uOTg3LTEuMzE2LTEuMzgxLTIuNTY2bC0xNS40Ni01MC44NTVjLS4zOTYtMS4zMTYtLjU5My0yLjE3MS0uNTkzLTIuNjMyYzAtMS4wNTIuNTI2LTEuNjQ1IDEuNTc5LTEuNjQ1aDYuNDQ3YzEuMjUgMCAyLjEwNi4xOTggMi41NjYuNjU4Yy41MjYuMzk1LjkyMSAxLjMxNiAxLjMxNiAyLjU2NmwxMS4wNTIgNDMuNTUzbDEwLjI2NC00My41NTNjLjMyOS0xLjMxNi43MjMtMi4xNyAxLjI1LTIuNTY2Yy41MjYtLjM5NCAxLjQ0Ny0uNjU3IDIuNjMxLS42NTdoNS4yNjNjMS4yNSAwIDIuMTA2LjE5NyAyLjYzMi42NTdjLjUyNi4zOTUuOTg3IDEuMzE2IDEuMjUgMi41NjZsMTAuMzk1IDQ0LjA3OWwxMS4zODEtNDQuMDc5Yy4zOTUtMS4zMTYuODU2LTIuMTcgMS4zMTYtMi41NjZjLjUyNi0uMzk0IDEuMzgyLS42NTcgMi41NjYtLjY1N2g2LjExOGMxLjA1MyAwIDEuNjQ1LjUyNiAxLjY0NSAxLjY0NGMwIC4zMy0uMDY2LjY1OC0uMTMyIDEuMDUzYy0uMDY1LjM5NS0uMTk3LjkyLS40NiAxLjY0NWwtMTUuODU1IDUwLjg1NXEtLjU5MyAxLjk3NC0xLjM4MiAyLjU2NmMtLjUyNi4zOTQtMS4zODIuNjU4LTIuNS42NThoLTUuNjU4Yy0xLjI1IDAtMi4xMDUtLjE5OC0yLjYzMS0uNjU4Yy0uNTI3LS40NjEtLjk4Ny0xLjMxNi0xLjI1LTIuNjMybC0xMC4xOTgtNDIuNDM0bC0xMC4xMzEgNDIuMzY4Yy0uMzI5IDEuMzE2LS43MjQgMi4xNzEtMS4yNSAyLjYzMmMtLjUyNy40Ni0xLjQ0OC42NTgtMi42MzIuNjU4em04NC41NCAxLjc3NmMtMy40MjEgMC02Ljg0Mi0uMzk1LTEwLjEzMi0xLjE4NGMtMy4yODktLjc5LTUuODU1LTEuNjQ1LTcuNTY2LTIuNjMyYy0xLjA1Mi0uNTkyLTEuNzc2LTEuMjUtMi4wMzktMS44NDJhNC42NSA0LjY1IDAgMCAxLS4zOTUtMS44NDJ2LTMuMzU1YzAtMS4zODIuNTI2LTIuMDQgMS41MTMtMi4wNHEuNTkzIDAgMS4xODQuMTk4Yy4zOTUuMTMxLjk4Ny4zOTQgMS42NDUuNjU4YTM1LjggMzUuOCAwIDAgMCA3LjIzNyAyLjMwMmEzOS41IDM5LjUgMCAwIDAgNy44MjkuNzljNC4xNDUgMCA3LjM2OC0uNzI0IDkuNjA1LTIuMTcxYzIuMjM3LTEuNDQ4IDMuNDIxLTMuNTUzIDMuNDIxLTYuMjVjMC0xLjg0Mi0uNTkyLTMuMzU2LTEuNzc2LTQuNjA2cy0zLjQyMS0yLjM2OC02LjY0NS0zLjQyMWwtOS41MzktMi45NmMtNC44MDMtMS41MTMtOC4zNTYtMy43NS0xMC41MjctNi43MWMtMi4xNzEtMi44OTUtMy4yODktNi4xMi0zLjI4OS05LjU0cTAtNC4xNDQgMS43NzYtNy4zMDNjMS4xODQtMi4xMDUgMi43NjMtMy45NDcgNC43MzctNS4zOTRjMS45NzQtMS41MTQgNC4yMTEtMi42MzIgNi44NDItMy40MjJjMi42MzItLjc5IDUuMzk1LTEuMTE4IDguMjktMS4xMThjMS40NDcgMCAyLjk2LjA2NiA0LjQwOC4yNjNjMS41MTMuMTk3IDIuODk0LjQ2IDQuMjc2LjcyNGMxLjMxNi4zMjkgMi41NjYuNjU4IDMuNzUgMS4wNTNxMS43NzYuNTkxIDIuNzYzIDEuMTg0Yy45MjEuNTI2IDEuNTc5IDEuMDUyIDEuOTc0IDEuNjQ0cS41OTIuNzkuNTkyIDIuMTcydjMuMDkyYzAgMS4zODEtLjUyNiAyLjEwNS0xLjUxMyAyLjEwNWMtLjUyNyAwLTEuMzgyLS4yNjMtMi41LS43OXEtNS42MjUtMi41NjUtMTIuNjMyLTIuNTY1Yy0zLjc1IDAtNi43MS41OTItOC43NSAxLjg0MnMtMy4wOTIgMy4xNTgtMy4wOTIgNS44NTVjMCAxLjg0Mi42NTggMy40MjEgMS45NzQgNC42NzFzMy43NSAyLjUgNy4yMzcgMy42MThsOS4zNDIgMi45NmM0LjczNiAxLjUxNCA4LjE1OCAzLjYxOSAxMC4xOTcgNi4zMTdzMy4wMjYgNS43ODkgMy4wMjYgOS4yMWMwIDIuODI5LS41OTIgNS4zOTUtMS43MSA3LjYzMmMtMS4xODQgMi4yMzctMi43NjMgNC4yMS00LjgwMyA1Ljc4OWMtMi4wMzkgMS42NDUtNC40NzQgMi44MjktNy4zMDIgMy42ODVjLTIuOTYxLjkyMS02LjA1MyAxLjM4MS05LjQwOCAxLjM4MSIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIwNy44MzcgMTYyLjgxNmMtMjEuNjQ1IDE1Ljk4Ny01My4wOTIgMjQuNDc0LTgwLjEzMiAyNC40NzRjLTM3Ljg5NCAwLTcyLjA0LTE0LjAxNC05Ny44MjktMzcuMzAzYy0yLjA0LTEuODQyLS4xOTctNC4zNDIgMi4yMzctMi44OTVjMjcuODk1IDE2LjE4NCA2Mi4zMDMgMjUuOTg3IDk3Ljg5NSAyNS45ODdjMjQuMDEzIDAgNTAuMzk1LTUgNzQuNjcxLTE1LjI2M2MzLjYxOC0xLjY0NSA2LjcxIDIuMzY4IDMuMTU4IDUiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIxNi44NSAxNTIuNTUzYy0yLjc2My0zLjU1My0xOC4yODktMS43MTEtMjUuMzI5LS44NTZjLTIuMTA1LjI2NC0yLjQzNC0xLjU3OS0uNTI2LTIuOTZjMTIuMzY4LTguNjg0IDMyLjY5Ny02LjE4NCAzNS4wNjYtMy4yOWMyLjM2OCAyLjk2MS0uNjU4IDIzLjI5LTEyLjIzNyAzMy4wMjdjLTEuNzc3IDEuNTEzLTMuNDg3LjcyMy0yLjY5OC0xLjI1YzIuNjMyLTYuNTEzIDguNDg3LTIxLjE4NSA1LjcyNC0yNC42NzEiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=", - resources: 102, - added: "Feb 11, 2024", - }, - { - id: 13, - account: "aws", - provider_id: 740350143856, - connected: true, - group: "Security", - scan_status: "active", - scan_status_time: "9 minutes, 50 seconds", - last_scan: "Jul 17, 2024 4:46am UTC", - next_scan: "Jul 18, 2024 4:46am UTC", - provider_img: - "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI1NiAyNTYiPjxnIGZpbGw9Im5vbmUiPjxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiBmaWxsPSIjZjRmMmVkIiByeD0iNjAiLz48cGF0aCBmaWxsPSIjMjUyZjNlIiBkPSJNODQuNzQ1IDExMS45NjFjMCAyLjQzNC4yNjMgNC40MDcuNzIzIDUuODU1YTM1IDM1IDAgMCAwIDIuMTA2IDQuNzM3Yy4zMjkuNTI2LjQ2IDEuMDUyLjQ2IDEuNTEzYzAgLjY1OC0uMzk1IDEuMzE2LTEuMjUgMS45NzNsLTQuMTQ1IDIuNzY0Yy0uNTkyLjM5NC0xLjE4NC41OTItMS43MS41OTJjLS42NTggMC0xLjMxNi0uMzI5LTEuOTc0LS45MjFhMjAuNCAyMC40IDAgMCAxLTIuMzY4LTMuMDkyYTUxIDUxIDAgMCAxLTIuMDQtMy44ODJxLTcuNjk3IDkuMDgtMTkuMzQyIDkuMDc5Yy01LjUyNiAwLTkuOTM0LTEuNTc5LTEzLjE1OC00LjczN2MtMy4yMjMtMy4xNTgtNC44NjgtNy4zNjgtNC44NjgtMTIuNjMxYzAtNS41OTMgMS45NzQtMTAuMTMyIDUuOTg3LTEzLjU1M3M5LjM0Mi01LjEzMiAxNi4xMTgtNS4xMzJjMi4yMzcgMCA0LjU0LjE5OCA2Ljk3NC41MjdzNC45MzQuODU1IDcuNTY2IDEuNDQ3di00LjgwM2MwLTUtMS4wNTMtOC40ODctMy4wOTItMTAuNTI2Yy0yLjEwNi0yLjA0LTUuNjU4LTMuMDI2LTEwLjcyNC0zLjAyNmMtMi4zMDMgMC00LjY3MS4yNjMtNy4xMDUuODU1cy00LjgwMyAxLjMxNi03LjEwNiAyLjIzN2ExOSAxOSAwIDAgMS0yLjMwMi44NTVjLS40Ni4xMzItLjc5LjE5OC0xLjA1My4xOThjLS45MiAwLTEuMzgyLS42NTgtMS4zODItMi4wNHYtMy4yMjRjMC0xLjA1Mi4xMzItMS44NDIuNDYxLTIuMzAycy45MjEtLjkyMSAxLjg0Mi0xLjM4MnEzLjQ1NC0xLjc3NiA4LjI5LTIuOTZjMy4yMjMtLjg1NiA2LjY0NC0xLjI1IDEwLjI2My0xLjI1YzcuODI5IDAgMTMuNTUyIDEuNzc2IDE3LjIzNyA1LjMyOGMzLjYxOCAzLjU1MyA1LjQ2IDguOTQ4IDUuNDYgMTYuMTg1djIxLjMxNnptLTI2LjcxIDEwYzIuMTcgMCA0LjQwNy0uMzk1IDYuNzc2LTEuMTg1YzIuMzY4LS43ODkgNC40NzMtMi4yMzcgNi4yNS00LjIxYzEuMDUyLTEuMjUgMS44NDItMi42MzIgMi4yMzYtNC4yMTFzLjY1OC0zLjQ4Ny42NTgtNS43MjN2LTIuNzY0YTU1IDU1IDAgMCAwLTYuMDUyLTEuMTE4YTUwIDUwIDAgMCAwLTYuMTg1LS4zOTVjLTQuNDA4IDAtNy42MzEuODU2LTkuODAyIDIuNjMycy0zLjIyNCA0LjI3Ni0zLjIyNCA3LjU2NmMwIDMuMDkyLjc5IDUuMzk0IDIuNDM0IDYuOTczYzEuNTggMS42NDUgMy44ODIgMi40MzUgNi45MDggMi40MzVtNTIuODI4IDcuMTA1Yy0xLjE4NCAwLTEuOTc0LS4xOTgtMi41LS42NThjLS41MjYtLjM5NS0uOTg3LTEuMzE2LTEuMzgxLTIuNTY2bC0xNS40Ni01MC44NTVjLS4zOTYtMS4zMTYtLjU5My0yLjE3MS0uNTkzLTIuNjMyYzAtMS4wNTIuNTI2LTEuNjQ1IDEuNTc5LTEuNjQ1aDYuNDQ3YzEuMjUgMCAyLjEwNi4xOTggMi41NjYuNjU4Yy41MjYuMzk1LjkyMSAxLjMxNiAxLjMxNiAyLjU2NmwxMS4wNTIgNDMuNTUzbDEwLjI2NC00My41NTNjLjMyOS0xLjMxNi43MjMtMi4xNyAxLjI1LTIuNTY2Yy41MjYtLjM5NCAxLjQ0Ny0uNjU3IDIuNjMxLS42NTdoNS4yNjNjMS4yNSAwIDIuMTA2LjE5NyAyLjYzMi42NTdjLjUyNi4zOTUuOTg3IDEuMzE2IDEuMjUgMi41NjZsMTAuMzk1IDQ0LjA3OWwxMS4zODEtNDQuMDc5Yy4zOTUtMS4zMTYuODU2LTIuMTcgMS4zMTYtMi41NjZjLjUyNi0uMzk0IDEuMzgyLS42NTcgMi41NjYtLjY1N2g2LjExOGMxLjA1MyAwIDEuNjQ1LjUyNiAxLjY0NSAxLjY0NGMwIC4zMy0uMDY2LjY1OC0uMTMyIDEuMDUzYy0uMDY1LjM5NS0uMTk3LjkyLS40NiAxLjY0NWwtMTUuODU1IDUwLjg1NXEtLjU5MyAxLjk3NC0xLjM4MiAyLjU2NmMtLjUyNi4zOTQtMS4zODIuNjU4LTIuNS42NThoLTUuNjU4Yy0xLjI1IDAtMi4xMDUtLjE5OC0yLjYzMS0uNjU4Yy0uNTI3LS40NjEtLjk4Ny0xLjMxNi0xLjI1LTIuNjMybC0xMC4xOTgtNDIuNDM0bC0xMC4xMzEgNDIuMzY4Yy0uMzI5IDEuMzE2LS43MjQgMi4xNzEtMS4yNSAyLjYzMmMtLjUyNy40Ni0xLjQ0OC42NTgtMi42MzIuNjU4em04NC41NCAxLjc3NmMtMy40MjEgMC02Ljg0Mi0uMzk1LTEwLjEzMi0xLjE4NGMtMy4yODktLjc5LTUuODU1LTEuNjQ1LTcuNTY2LTIuNjMyYy0xLjA1Mi0uNTkyLTEuNzc2LTEuMjUtMi4wMzktMS44NDJhNC42NSA0LjY1IDAgMCAxLS4zOTUtMS44NDJ2LTMuMzU1YzAtMS4zODIuNTI2LTIuMDQgMS41MTMtMi4wNHEuNTkzIDAgMS4xODQuMTk4Yy4zOTUuMTMxLjk4Ny4zOTQgMS42NDUuNjU4YTM1LjggMzUuOCAwIDAgMCA3LjIzNyAyLjMwMmEzOS41IDM5LjUgMCAwIDAgNy44MjkuNzljNC4xNDUgMCA3LjM2OC0uNzI0IDkuNjA1LTIuMTcxYzIuMjM3LTEuNDQ4IDMuNDIxLTMuNTUzIDMuNDIxLTYuMjVjMC0xLjg0Mi0uNTkyLTMuMzU2LTEuNzc2LTQuNjA2cy0zLjQyMS0yLjM2OC02LjY0NS0zLjQyMWwtOS41MzktMi45NmMtNC44MDMtMS41MTMtOC4zNTYtMy43NS0xMC41MjctNi43MWMtMi4xNzEtMi44OTUtMy4yODktNi4xMi0zLjI4OS05LjU0cTAtNC4xNDQgMS43NzYtNy4zMDNjMS4xODQtMi4xMDUgMi43NjMtMy45NDcgNC43MzctNS4zOTRjMS45NzQtMS41MTQgNC4yMTEtMi42MzIgNi44NDItMy40MjJjMi42MzItLjc5IDUuMzk1LTEuMTE4IDguMjktMS4xMThjMS40NDcgMCAyLjk2LjA2NiA0LjQwOC4yNjNjMS41MTMuMTk3IDIuODk0LjQ2IDQuMjc2LjcyNGMxLjMxNi4zMjkgMi41NjYuNjU4IDMuNzUgMS4wNTNxMS43NzYuNTkxIDIuNzYzIDEuMTg0Yy45MjEuNTI2IDEuNTc5IDEuMDUyIDEuOTc0IDEuNjQ0cS41OTIuNzkuNTkyIDIuMTcydjMuMDkyYzAgMS4zODEtLjUyNiAyLjEwNS0xLjUxMyAyLjEwNWMtLjUyNyAwLTEuMzgyLS4yNjMtMi41LS43OXEtNS42MjUtMi41NjUtMTIuNjMyLTIuNTY1Yy0zLjc1IDAtNi43MS41OTItOC43NSAxLjg0MnMtMy4wOTIgMy4xNTgtMy4wOTIgNS44NTVjMCAxLjg0Mi42NTggMy40MjEgMS45NzQgNC42NzFzMy43NSAyLjUgNy4yMzcgMy42MThsOS4zNDIgMi45NmM0LjczNiAxLjUxNCA4LjE1OCAzLjYxOSAxMC4xOTcgNi4zMTdzMy4wMjYgNS43ODkgMy4wMjYgOS4yMWMwIDIuODI5LS41OTIgNS4zOTUtMS43MSA3LjYzMmMtMS4xODQgMi4yMzctMi43NjMgNC4yMS00LjgwMyA1Ljc4OWMtMi4wMzkgMS42NDUtNC40NzQgMi44MjktNy4zMDIgMy42ODVjLTIuOTYxLjkyMS02LjA1MyAxLjM4MS05LjQwOCAxLjM4MSIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIwNy44MzcgMTYyLjgxNmMtMjEuNjQ1IDE1Ljk4Ny01My4wOTIgMjQuNDc0LTgwLjEzMiAyNC40NzRjLTM3Ljg5NCAwLTcyLjA0LTE0LjAxNC05Ny44MjktMzcuMzAzYy0yLjA0LTEuODQyLS4xOTctNC4zNDIgMi4yMzctMi44OTVjMjcuODk1IDE2LjE4NCA2Mi4zMDMgMjUuOTg3IDk3Ljg5NSAyNS45ODdjMjQuMDEzIDAgNTAuMzk1LTUgNzQuNjcxLTE1LjI2M2MzLjYxOC0xLjY0NSA2LjcxIDIuMzY4IDMuMTU4IDUiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIxNi44NSAxNTIuNTUzYy0yLjc2My0zLjU1My0xOC4yODktMS43MTEtMjUuMzI5LS44NTZjLTIuMTA1LjI2NC0yLjQzNC0xLjU3OS0uNTI2LTIuOTZjMTIuMzY4LTguNjg0IDMyLjY5Ny02LjE4NCAzNS4wNjYtMy4yOWMyLjM2OCAyLjk2MS0uNjU4IDIzLjI5LTEyLjIzNyAzMy4wMjdjLTEuNzc3IDEuNTEzLTMuNDg3LjcyMy0yLjY5OC0xLjI1YzIuNjMyLTYuNTEzIDguNDg3LTIxLjE4NSA1LjcyNC0yNC42NzEiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=", - resources: 154, - added: "Jan 25, 2024", - }, - { - id: 14, - account: "aws", - provider_id: 740350143857, - connected: true, - group: "Marketing", - scan_status: "active", - scan_status_time: "3 minutes, 55 seconds", - last_scan: "Jul 17, 2024 3:46am UTC", - next_scan: "Jul 18, 2024 3:46am UTC", - provider_img: - "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI1NiAyNTYiPjxnIGZpbGw9Im5vbmUiPjxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiBmaWxsPSIjZjRmMmVkIiByeD0iNjAiLz48cGF0aCBmaWxsPSIjMjUyZjNlIiBkPSJNODQuNzQ1IDExMS45NjFjMCAyLjQzNC4yNjMgNC40MDcuNzIzIDUuODU1YTM1IDM1IDAgMCAwIDIuMTA2IDQuNzM3Yy4zMjkuNTI2LjQ2IDEuMDUyLjQ2IDEuNTEzYzAgLjY1OC0uMzk1IDEuMzE2LTEuMjUgMS45NzNsLTQuMTQ1IDIuNzY0Yy0uNTkyLjM5NC0xLjE4NC41OTItMS43MS41OTJjLS42NTggMC0xLjMxNi0uMzI5LTEuOTc0LS45MjFhMjAuNCAyMC40IDAgMCAxLTIuMzY4LTMuMDkyYTUxIDUxIDAgMCAxLTIuMDQtMy44ODJxLTcuNjk3IDkuMDgtMTkuMzQyIDkuMDc5Yy01LjUyNiAwLTkuOTM0LTEuNTc5LTEzLjE1OC00LjczN2MtMy4yMjMtMy4xNTgtNC44NjgtNy4zNjgtNC44NjgtMTIuNjMxYzAtNS41OTMgMS45NzQtMTAuMTMyIDUuOTg3LTEzLjU1M3M5LjM0Mi01LjEzMiAxNi4xMTgtNS4xMzJjMi4yMzcgMCA0LjU0LjE5OCA2Ljk3NC41MjdzNC45MzQuODU1IDcuNTY2IDEuNDQ3di00LjgwM2MwLTUtMS4wNTMtOC40ODctMy4wOTItMTAuNTI2Yy0yLjEwNi0yLjA0LTUuNjU4LTMuMDI2LTEwLjcyNC0zLjAyNmMtMi4zMDMgMC00LjY3MS4yNjMtNy4xMDUuODU1cy00LjgwMyAxLjMxNi03LjEwNiAyLjIzN2ExOSAxOSAwIDAgMS0yLjMwMi44NTVjLS40Ni4xMzItLjc5LjE5OC0xLjA1My4xOThjLS45MiAwLTEuMzgyLS42NTgtMS4zODItMi4wNHYtMy4yMjRjMC0xLjA1Mi4xMzItMS44NDIuNDYxLTIuMzAycy45MjEtLjkyMSAxLjg0Mi0xLjM4MnEzLjQ1NC0xLjc3NiA4LjI5LTIuOTZjMy4yMjMtLjg1NiA2LjY0NC0xLjI1IDEwLjI2My0xLjI1YzcuODI5IDAgMTMuNTUyIDEuNzc2IDE3LjIzNyA1LjMyOGMzLjYxOCAzLjU1MyA1LjQ2IDguOTQ4IDUuNDYgMTYuMTg1djIxLjMxNnptLTI2LjcxIDEwYzIuMTcgMCA0LjQwNy0uMzk1IDYuNzc2LTEuMTg1YzIuMzY4LS43ODkgNC40NzMtMi4yMzcgNi4yNS00LjIxYzEuMDUyLTEuMjUgMS44NDItMi42MzIgMi4yMzYtNC4yMTFzLjY1OC0zLjQ4Ny42NTgtNS43MjN2LTIuNzY0YTU1IDU1IDAgMCAwLTYuMDUyLTEuMTE4YTUwIDUwIDAgMCAwLTYuMTg1LS4zOTVjLTQuNDA4IDAtNy42MzEuODU2LTkuODAyIDIuNjMycy0zLjIyNCA0LjI3Ni0zLjIyNCA3LjU2NmMwIDMuMDkyLjc5IDUuMzk0IDIuNDM0IDYuOTczYzEuNTggMS42NDUgMy44ODIgMi40MzUgNi45MDggMi40MzVtNTIuODI4IDcuMTA1Yy0xLjE4NCAwLTEuOTc0LS4xOTgtMi41LS42NThjLS41MjYtLjM5NS0uOTg3LTEuMzE2LTEuMzgxLTIuNTY2bC0xNS40Ni01MC44NTVjLS4zOTYtMS4zMTYtLjU5My0yLjE3MS0uNTkzLTIuNjMyYzAtMS4wNTIuNTI2LTEuNjQ1IDEuNTc5LTEuNjQ1aDYuNDQ3YzEuMjUgMCAyLjEwNi4xOTggMi41NjYuNjU4Yy41MjYuMzk1LjkyMSAxLjMxNiAxLjMxNiAyLjU2NmwxMS4wNTIgNDMuNTUzbDEwLjI2NC00My41NTNjLjMyOS0xLjMxNi43MjMtMi4xNyAxLjI1LTIuNTY2Yy41MjYtLjM5NCAxLjQ0Ny0uNjU3IDIuNjMxLS42NTdoNS4yNjNjMS4yNSAwIDIuMTA2LjE5NyAyLjYzMi42NTdjLjUyNi4zOTUuOTg3IDEuMzE2IDEuMjUgMi41NjZsMTAuMzk1IDQ0LjA3OWwxMS4zODEtNDQuMDc5Yy4zOTUtMS4zMTYuODU2LTIuMTcgMS4zMTYtMi41NjZjLjUyNi0uMzk0IDEuMzgyLS42NTcgMi41NjYtLjY1N2g2LjExOGMxLjA1MyAwIDEuNjQ1LjUyNiAxLjY0NSAxLjY0NGMwIC4zMy0uMDY2LjY1OC0uMTMyIDEuMDUzYy0uMDY1LjM5NS0uMTk3LjkyLS40NiAxLjY0NWwtMTUuODU1IDUwLjg1NXEtLjU5MyAxLjk3NC0xLjM4MiAyLjU2NmMtLjUyNi4zOTQtMS4zODIuNjU4LTIuNS42NThoLTUuNjU4Yy0xLjI1IDAtMi4xMDUtLjE5OC0yLjYzMS0uNjU4Yy0uNTI3LS40NjEtLjk4Ny0xLjMxNi0xLjI1LTIuNjMybC0xMC4xOTgtNDIuNDM0bC0xMC4xMzEgNDIuMzY4Yy0uMzI5IDEuMzE2LS43MjQgMi4xNzEtMS4yNSAyLjYzMmMtLjUyNy40Ni0xLjQ0OC42NTgtMi42MzIuNjU4em04NC41NCAxLjc3NmMtMy40MjEgMC02Ljg0Mi0uMzk1LTEwLjEzMi0xLjE4NGMtMy4yODktLjc5LTUuODU1LTEuNjQ1LTcuNTY2LTIuNjMyYy0xLjA1Mi0uNTkyLTEuNzc2LTEuMjUtMi4wMzktMS44NDJhNC42NSA0LjY1IDAgMCAxLS4zOTUtMS44NDJ2LTMuMzU1YzAtMS4zODIuNTI2LTIuMDQgMS41MTMtMi4wNHEuNTkzIDAgMS4xODQuMTk4Yy4zOTUuMTMxLjk4Ny4zOTQgMS42NDUuNjU4YTM1LjggMzUuOCAwIDAgMCA3LjIzNyAyLjMwMmEzOS41IDM5LjUgMCAwIDAgNy44MjkuNzljNC4xNDUgMCA3LjM2OC0uNzI0IDkuNjA1LTIuMTcxYzIuMjM3LTEuNDQ4IDMuNDIxLTMuNTUzIDMuNDIxLTYuMjVjMC0xLjg0Mi0uNTkyLTMuMzU2LTEuNzc2LTQuNjA2cy0zLjQyMS0yLjM2OC02LjY0NS0zLjQyMWwtOS41MzktMi45NmMtNC44MDMtMS41MTMtOC4zNTYtMy43NS0xMC41MjctNi43MWMtMi4xNzEtMi44OTUtMy4yODktNi4xMi0zLjI4OS05LjU0cTAtNC4xNDQgMS43NzYtNy4zMDNjMS4xODQtMi4xMDUgMi43NjMtMy45NDcgNC43MzctNS4zOTRjMS45NzQtMS41MTQgNC4yMTEtMi42MzIgNi44NDItMy40MjJjMi42MzItLjc5IDUuMzk1LTEuMTE4IDguMjktMS4xMThjMS40NDcgMCAyLjk2LjA2NiA0LjQwOC4yNjNjMS41MTMuMTk3IDIuODk0LjQ2IDQuMjc2LjcyNGMxLjMxNi4zMjkgMi41NjYuNjU4IDMuNzUgMS4wNTNxMS43NzYuNTkxIDIuNzYzIDEuMTg0Yy45MjEuNTI2IDEuNTc5IDEuMDUyIDEuOTc0IDEuNjQ0cS41OTIuNzkuNTkyIDIuMTcydjMuMDkyYzAgMS4zODEtLjUyNiAyLjEwNS0xLjUxMyAyLjEwNWMtLjUyNyAwLTEuMzgyLS4yNjMtMi41LS43OXEtNS42MjUtMi41NjUtMTIuNjMyLTIuNTY1Yy0zLjc1IDAtNi43MS41OTItOC43NSAxLjg0MnMtMy4wOTIgMy4xNTgtMy4wOTIgNS44NTVjMCAxLjg0Mi42NTggMy40MjEgMS45NzQgNC42NzFzMy43NSAyLjUgNy4yMzcgMy42MThsOS4zNDIgMi45NmM0LjczNiAxLjUxNCA4LjE1OCAzLjYxOSAxMC4xOTcgNi4zMTdzMy4wMjYgNS43ODkgMy4wMjYgOS4yMWMwIDIuODI5LS41OTIgNS4zOTUtMS43MSA3LjYzMmMtMS4xODQgMi4yMzctMi43NjMgNC4yMS00LjgwMyA1Ljc4OWMtMi4wMzkgMS42NDUtNC40NzQgMi44MjktNy4zMDIgMy42ODVjLTIuOTYxLjkyMS02LjA1MyAxLjM4MS05LjQwOCAxLjM4MSIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIwNy44MzcgMTYyLjgxNmMtMjEuNjQ1IDE1Ljk4Ny01My4wOTIgMjQuNDc0LTgwLjEzMiAyNC40NzRjLTM3Ljg5NCAwLTcyLjA0LTE0LjAxNC05Ny44MjktMzcuMzAzYy0yLjA0LTEuODQyLS4xOTctNC4zNDIgMi4yMzctMi44OTVjMjcuODk1IDE2LjE4NCA2Mi4zMDMgMjUuOTg3IDk3Ljg5NSAyNS45ODdjMjQuMDEzIDAgNTAuMzk1LTUgNzQuNjcxLTE1LjI2M2MzLjYxOC0xLjY0NSA2LjcxIDIuMzY4IDMuMTU4IDUiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIxNi44NSAxNTIuNTUzYy0yLjc2My0zLjU1My0xOC4yODktMS43MTEtMjUuMzI5LS44NTZjLTIuMTA1LjI2NC0yLjQzNC0xLjU3OS0uNTI2LTIuOTZjMTIuMzY4LTguNjg0IDMyLjY5Ny02LjE4NCAzNS4wNjYtMy4yOWMyLjM2OCAyLjk2MS0uNjU4IDIzLjI5LTEyLjIzNyAzMy4wMjdjLTEuNzc3IDEuNTEzLTMuNDg3LjcyMy0yLjY5OC0xLjI1YzIuNjMyLTYuNTEzIDguNDg3LTIxLjE4NSA1LjcyNC0yNC42NzEiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=", - resources: 138, - added: "Mar 12, 2024", - }, - { - id: 15, - account: "aws", - provider_id: 740350143858, - connected: false, - group: "Information Technology", - scan_status: "paused", - scan_status_time: "13 minutes, 25 seconds", - last_scan: "Jul 17, 2024 2:46am UTC", - next_scan: "Jul 18, 2024 2:46am UTC", - provider_img: - "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI1NiAyNTYiPjxnIGZpbGw9Im5vbmUiPjxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiBmaWxsPSIjZjRmMmVkIiByeD0iNjAiLz48cGF0aCBmaWxsPSIjMjUyZjNlIiBkPSJNODQuNzQ1IDExMS45NjFjMCAyLjQzNC4yNjMgNC40MDcuNzIzIDUuODU1YTM1IDM1IDAgMCAwIDIuMTA2IDQuNzM3Yy4zMjkuNTI2LjQ2IDEuMDUyLjQ2IDEuNTEzYzAgLjY1OC0uMzk1IDEuMzE2LTEuMjUgMS45NzNsLTQuMTQ1IDIuNzY0Yy0uNTkyLjM5NC0xLjE4NC41OTItMS43MS41OTJjLS42NTggMC0xLjMxNi0uMzI5LTEuOTc0LS45MjFhMjAuNCAyMC40IDAgMCAxLTIuMzY4LTMuMDkyYTUxIDUxIDAgMCAxLTIuMDQtMy44ODJxLTcuNjk3IDkuMDgtMTkuMzQyIDkuMDc5Yy01LjUyNiAwLTkuOTM0LTEuNTc5LTEzLjE1OC00LjczN2MtMy4yMjMtMy4xNTgtNC44NjgtNy4zNjgtNC44NjgtMTIuNjMxYzAtNS41OTMgMS45NzQtMTAuMTMyIDUuOTg3LTEzLjU1M3M5LjM0Mi01LjEzMiAxNi4xMTgtNS4xMzJjMi4yMzcgMCA0LjU0LjE5OCA2Ljk3NC41MjdzNC45MzQuODU1IDcuNTY2IDEuNDQ3di00LjgwM2MwLTUtMS4wNTMtOC40ODctMy4wOTItMTAuNTI2Yy0yLjEwNi0yLjA0LTUuNjU4LTMuMDI2LTEwLjcyNC0zLjAyNmMtMi4zMDMgMC00LjY3MS4yNjMtNy4xMDUuODU1cy00LjgwMyAxLjMxNi03LjEwNiAyLjIzN2ExOSAxOSAwIDAgMS0yLjMwMi44NTVjLS40Ni4xMzItLjc5LjE5OC0xLjA1My4xOThjLS45MiAwLTEuMzgyLS42NTgtMS4zODItMi4wNHYtMy4yMjRjMC0xLjA1Mi4xMzItMS44NDIuNDYxLTIuMzAycy45MjEtLjkyMSAxLjg0Mi0xLjM4MnEzLjQ1NC0xLjc3NiA4LjI5LTIuOTZjMy4yMjMtLjg1NiA2LjY0NC0xLjI1IDEwLjI2My0xLjI1YzcuODI5IDAgMTMuNTUyIDEuNzc2IDE3LjIzNyA1LjMyOGMzLjYxOCAzLjU1MyA1LjQ2IDguOTQ4IDUuNDYgMTYuMTg1djIxLjMxNnptLTI2LjcxIDEwYzIuMTcgMCA0LjQwNy0uMzk1IDYuNzc2LTEuMTg1YzIuMzY4LS43ODkgNC40NzMtMi4yMzcgNi4yNS00LjIxYzEuMDUyLTEuMjUgMS44NDItMi42MzIgMi4yMzYtNC4yMTFzLjY1OC0zLjQ4Ny42NTgtNS43MjN2LTIuNzY0YTU1IDU1IDAgMCAwLTYuMDUyLTEuMTE4YTUwIDUwIDAgMCAwLTYuMTg1LS4zOTVjLTQuNDA4IDAtNy42MzEuODU2LTkuODAyIDIuNjMycy0zLjIyNCA0LjI3Ni0zLjIyNCA3LjU2NmMwIDMuMDkyLjc5IDUuMzk0IDIuNDM0IDYuOTczYzEuNTggMS42NDUgMy44ODIgMi40MzUgNi45MDggMi40MzVtNTIuODI4IDcuMTA1Yy0xLjE4NCAwLTEuOTc0LS4xOTgtMi41LS42NThjLS41MjYtLjM5NS0uOTg3LTEuMzE2LTEuMzgxLTIuNTY2bC0xNS40Ni01MC44NTVjLS4zOTYtMS4zMTYtLjU5My0yLjE3MS0uNTkzLTIuNjMyYzAtMS4wNTIuNTI2LTEuNjQ1IDEuNTc5LTEuNjQ1aDYuNDQ3YzEuMjUgMCAyLjEwNi4xOTggMi41NjYuNjU4Yy41MjYuMzk1LjkyMSAxLjMxNiAxLjMxNiAyLjU2NmwxMS4wNTIgNDMuNTUzbDEwLjI2NC00My41NTNjLjMyOS0xLjMxNi43MjMtMi4xNyAxLjI1LTIuNTY2Yy41MjYtLjM5NCAxLjQ0Ny0uNjU3IDIuNjMxLS42NTdoNS4yNjNjMS4yNSAwIDIuMTA2LjE5NyAyLjYzMi42NTdjLjUyNi4zOTUuOTg3IDEuMzE2IDEuMjUgMi41NjZsMTAuMzk1IDQ0LjA3OWwxMS4zODEtNDQuMDc5Yy4zOTUtMS4zMTYuODU2LTIuMTcgMS4zMTYtMi41NjZjLjUyNi0uMzk0IDEuMzgyLS42NTcgMi41NjYtLjY1N2g2LjExOGMxLjA1MyAwIDEuNjQ1LjUyNiAxLjY0NSAxLjY0NGMwIC4zMy0uMDY2LjY1OC0uMTMyIDEuMDUzYy0uMDY1LjM5NS0uMTk3LjkyLS40NiAxLjY0NWwtMTUuODU1IDUwLjg1NXEtLjU5MyAxLjk3NC0xLjM4MiAyLjU2NmMtLjUyNi4zOTQtMS4zODIuNjU4LTIuNS42NThoLTUuNjU4Yy0xLjI1IDAtMi4xMDUtLjE5OC0yLjYzMS0uNjU4Yy0uNTI3LS40NjEtLjk4Ny0xLjMxNi0xLjI1LTIuNjMybC0xMC4xOTgtNDIuNDM0bC0xMC4xMzEgNDIuMzY4Yy0uMzI5IDEuMzE2LS43MjQgMi4xNzEtMS4yNSAyLjYzMmMtLjUyNy40Ni0xLjQ0OC42NTgtMi42MzIuNjU4em04NC41NCAxLjc3NmMtMy40MjEgMC02Ljg0Mi0uMzk1LTEwLjEzMi0xLjE4NGMtMy4yODktLjc5LTUuODU1LTEuNjQ1LTcuNTY2LTIuNjMyYy0xLjA1Mi0uNTkyLTEuNzc2LTEuMjUtMi4wMzktMS44NDJhNC42NSA0LjY1IDAgMCAxLS4zOTUtMS44NDJ2LTMuMzU1YzAtMS4zODIuNTI2LTIuMDQgMS41MTMtMi4wNHEuNTkzIDAgMS4xODQuMTk4Yy4zOTUuMTMxLjk4Ny4zOTQgMS42NDUuNjU4YTM1LjggMzUuOCAwIDAgMCA3LjIzNyAyLjMwMmEzOS41IDM5LjUgMCAwIDAgNy44MjkuNzljNC4xNDUgMCA3LjM2OC0uNzI0IDkuNjA1LTIuMTcxYzIuMjM3LTEuNDQ4IDMuNDIxLTMuNTUzIDMuNDIxLTYuMjVjMC0xLjg0Mi0uNTkyLTMuMzU2LTEuNzc2LTQuNjA2cy0zLjQyMS0yLjM2OC02LjY0NS0zLjQyMWwtOS41MzktMi45NmMtNC44MDMtMS41MTMtOC4zNTYtMy43NS0xMC41MjctNi43MWMtMi4xNzEtMi44OTUtMy4yODktNi4xMi0zLjI4OS05LjU0cTAtNC4xNDQgMS43NzYtNy4zMDNjMS4xODQtMi4xMDUgMi43NjMtMy45NDcgNC43MzctNS4zOTRjMS45NzQtMS41MTQgNC4yMTEtMi42MzIgNi44NDItMy40MjJjMi42MzItLjc5IDUuMzk1LTEuMTE4IDguMjktMS4xMThjMS40NDcgMCAyLjk2LjA2NiA0LjQwOC4yNjNjMS41MTMuMTk3IDIuODk0LjQ2IDQuMjc2LjcyNGMxLjMxNi4zMjkgMi41NjYuNjU4IDMuNzUgMS4wNTNxMS43NzYuNTkxIDIuNzYzIDEuMTg0Yy45MjEuNTI2IDEuNTc5IDEuMDUyIDEuOTc0IDEuNjQ0cS41OTIuNzkuNTkyIDIuMTcydjMuMDkyYzAgMS4zODEtLjUyNiAyLjEwNS0xLjUxMyAyLjEwNWMtLjUyNyAwLTEuMzgyLS4yNjMtMi41LS43OXEtNS42MjUtMi41NjUtMTIuNjMyLTIuNTY1Yy0zLjc1IDAtNi43MS41OTItOC43NSAxLjg0MnMtMy4wOTIgMy4xNTgtMy4wOTIgNS44NTVjMCAxLjg0Mi42NTggMy40MjEgMS45NzQgNC42NzFzMy43NSAyLjUgNy4yMzcgMy42MThsOS4zNDIgMi45NmM0LjczNiAxLjUxNCA4LjE1OCAzLjYxOSAxMC4xOTcgNi4zMTdzMy4wMjYgNS43ODkgMy4wMjYgOS4yMWMwIDIuODI5LS41OTIgNS4zOTUtMS43MSA3LjYzMmMtMS4xODQgMi4yMzctMi43NjMgNC4yMS00LjgwMyA1Ljc4OWMtMi4wMzkgMS42NDUtNC40NzQgMi44MjktNy4zMDIgMy42ODVjLTIuOTYxLjkyMS02LjA1MyAxLjM4MS05LjQwOCAxLjM4MSIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIwNy44MzcgMTYyLjgxNmMtMjEuNjQ1IDE1Ljk4Ny01My4wOTIgMjQuNDc0LTgwLjEzMiAyNC40NzRjLTM3Ljg5NCAwLTcyLjA0LTE0LjAxNC05Ny44MjktMzcuMzAzYy0yLjA0LTEuODQyLS4xOTctNC4zNDIgMi4yMzctMi44OTVjMjcuODk1IDE2LjE4NCA2Mi4zMDMgMjUuOTg3IDk3Ljg5NSAyNS45ODdjMjQuMDEzIDAgNTAuMzk1LTUgNzQuNjcxLTE1LjI2M2MzLjYxOC0xLjY0NSA2LjcxIDIuMzY4IDMuMTU4IDUiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIxNi44NSAxNTIuNTUzYy0yLjc2My0zLjU1My0xOC4yODktMS43MTEtMjUuMzI5LS44NTZjLTIuMTA1LjI2NC0yLjQzNC0xLjU3OS0uNTI2LTIuOTZjMTIuMzY4LTguNjg0IDMyLjY5Ny02LjE4NCAzNS4wNjYtMy4yOWMyLjM2OCAyLjk2MS0uNjU4IDIzLjI5LTEyLjIzNyAzMy4wMjdjLTEuNzc3IDEuNTEzLTMuNDg3LjcyMy0yLjY5OC0xLjI1YzIuNjMyLTYuNTEzIDguNDg3LTIxLjE4NSA1LjcyNC0yNC42NzEiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=", - resources: 112, - added: "Feb 17, 2024", - }, - { - id: 16, - account: "aws", - provider_id: 740350143859, - connected: true, - group: "Sales", - scan_status: "active", - scan_status_time: "6 minutes, 10 seconds", - last_scan: "Jul 17, 2024 1:46am UTC", - next_scan: "Jul 18, 2024 1:46am UTC", - provider_img: - "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI1NiAyNTYiPjxnIGZpbGw9Im5vbmUiPjxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiBmaWxsPSIjZjRmMmVkIiByeD0iNjAiLz48cGF0aCBmaWxsPSIjMjUyZjNlIiBkPSJNODQuNzQ1IDExMS45NjFjMCAyLjQzNC4yNjMgNC40MDcuNzIzIDUuODU1YTM1IDM1IDAgMCAwIDIuMTA2IDQuNzM3Yy4zMjkuNTI2LjQ2IDEuMDUyLjQ2IDEuNTEzYzAgLjY1OC0uMzk1IDEuMzE2LTEuMjUgMS45NzNsLTQuMTQ1IDIuNzY0Yy0uNTkyLjM5NC0xLjE4NC41OTItMS43MS41OTJjLS42NTggMC0xLjMxNi0uMzI5LTEuOTc0LS45MjFhMjAuNCAyMC40IDAgMCAxLTIuMzY4LTMuMDkyYTUxIDUxIDAgMCAxLTIuMDQtMy44ODJxLTcuNjk3IDkuMDgtMTkuMzQyIDkuMDc5Yy01LjUyNiAwLTkuOTM0LTEuNTc5LTEzLjE1OC00LjczN2MtMy4yMjMtMy4xNTgtNC44NjgtNy4zNjgtNC44NjgtMTIuNjMxYzAtNS41OTMgMS45NzQtMTAuMTMyIDUuOTg3LTEzLjU1M3M5LjM0Mi01LjEzMiAxNi4xMTgtNS4xMzJjMi4yMzcgMCA0LjU0LjE5OCA2Ljk3NC41MjdzNC45MzQuODU1IDcuNTY2IDEuNDQ3di00LjgwM2MwLTUtMS4wNTMtOC40ODctMy4wOTItMTAuNTI2Yy0yLjEwNi0yLjA0LTUuNjU4LTMuMDI2LTEwLjcyNC0zLjAyNmMtMi4zMDMgMC00LjY3MS4yNjMtNy4xMDUuODU1cy00LjgwMyAxLjMxNi03LjEwNiAyLjIzN2ExOSAxOSAwIDAgMS0yLjMwMi44NTVjLS40Ni4xMzItLjc5LjE5OC0xLjA1My4xOThjLS45MiAwLTEuMzgyLS42NTgtMS4zODItMi4wNHYtMy4yMjRjMC0xLjA1Mi4xMzItMS44NDIuNDYxLTIuMzAycy45MjEtLjkyMSAxLjg0Mi0xLjM4MnEzLjQ1NC0xLjc3NiA4LjI5LTIuOTZjMy4yMjMtLjg1NiA2LjY0NC0xLjI1IDEwLjI2My0xLjI1YzcuODI5IDAgMTMuNTUyIDEuNzc2IDE3LjIzNyA1LjMyOGMzLjYxOCAzLjU1MyA1LjQ2IDguOTQ4IDUuNDYgMTYuMTg1djIxLjMxNnptLTI2LjcxIDEwYzIuMTcgMCA0LjQwNy0uMzk1IDYuNzc2LTEuMTg1YzIuMzY4LS43ODkgNC40NzMtMi4yMzcgNi4yNS00LjIxYzEuMDUyLTEuMjUgMS44NDItMi42MzIgMi4yMzYtNC4yMTFzLjY1OC0zLjQ4Ny42NTgtNS43MjN2LTIuNzY0YTU1IDU1IDAgMCAwLTYuMDUyLTEuMTE4YTUwIDUwIDAgMCAwLTYuMTg1LS4zOTVjLTQuNDA4IDAtNy42MzEuODU2LTkuODAyIDIuNjMycy0zLjIyNCA0LjI3Ni0zLjIyNCA3LjU2NmMwIDMuMDkyLjc5IDUuMzk0IDIuNDM0IDYuOTczYzEuNTggMS42NDUgMy44ODIgMi40MzUgNi45MDggMi40MzVtNTIuODI4IDcuMTA1Yy0xLjE4NCAwLTEuOTc0LS4xOTgtMi41LS42NThjLS41MjYtLjM5NS0uOTg3LTEuMzE2LTEuMzgxLTIuNTY2bC0xNS40Ni01MC44NTVjLS4zOTYtMS4zMTYtLjU5My0yLjE3MS0uNTkzLTIuNjMyYzAtMS4wNTIuNTI2LTEuNjQ1IDEuNTc5LTEuNjQ1aDYuNDQ3YzEuMjUgMCAyLjEwNi4xOTggMi41NjYuNjU4Yy41MjYuMzk1LjkyMSAxLjMxNiAxLjMxNiAyLjU2NmwxMS4wNTIgNDMuNTUzbDEwLjI2NC00My41NTNjLjMyOS0xLjMxNi43MjMtMi4xNyAxLjI1LTIuNTY2Yy41MjYtLjM5NCAxLjQ0Ny0uNjU3IDIuNjMxLS42NTdoNS4yNjNjMS4yNSAwIDIuMTA2LjE5NyAyLjYzMi42NTdjLjUyNi4zOTUuOTg3IDEuMzE2IDEuMjUgMi41NjZsMTAuMzk1IDQ0LjA3OWwxMS4zODEtNDQuMDc5Yy4zOTUtMS4zMTYuODU2LTIuMTcgMS4zMTYtMi41NjZjLjUyNi0uMzk0IDEuMzgyLS42NTcgMi41NjYtLjY1N2g2LjExOGMxLjA1MyAwIDEuNjQ1LjUyNiAxLjY0NSAxLjY0NGMwIC4zMy0uMDY2LjY1OC0uMTMyIDEuMDUzYy0uMDY1LjM5NS0uMTk3LjkyLS40NiAxLjY0NWwtMTUuODU1IDUwLjg1NXEtLjU5MyAxLjk3NC0xLjM4MiAyLjU2NmMtLjUyNi4zOTQtMS4zODIuNjU4LTIuNS42NThoLTUuNjU4Yy0xLjI1IDAtMi4xMDUtLjE5OC0yLjYzMS0uNjU4Yy0uNTI3LS40NjEtLjk4Ny0xLjMxNi0xLjI1LTIuNjMybC0xMC4xOTgtNDIuNDM0bC0xMC4xMzEgNDIuMzY4Yy0uMzI5IDEuMzE2LS43MjQgMi4xNzEtMS4yNSAyLjYzMmMtLjUyNy40Ni0xLjQ0OC42NTgtMi42MzIuNjU4em04NC41NCAxLjc3NmMtMy40MjEgMC02Ljg0Mi0uMzk1LTEwLjEzMi0xLjE4NGMtMy4yODktLjc5LTUuODU1LTEuNjQ1LTcuNTY2LTIuNjMyYy0xLjA1Mi0uNTkyLTEuNzc2LTEuMjUtMi4wMzktMS44NDJhNC42NSA0LjY1IDAgMCAxLS4zOTUtMS44NDJ2LTMuMzU1YzAtMS4zODIuNTI2LTIuMDQgMS41MTMtMi4wNHEuNTkzIDAgMS4xODQuMTk4Yy4zOTUuMTMxLjk4Ny4zOTQgMS42NDUuNjU4YTM1LjggMzUuOCAwIDAgMCA3LjIzNyAyLjMwMmEzOS41IDM5LjUgMCAwIDAgNy44MjkuNzljNC4xNDUgMCA3LjM2OC0uNzI0IDkuNjA1LTIuMTcxYzIuMjM3LTEuNDQ4IDMuNDIxLTMuNTUzIDMuNDIxLTYuMjVjMC0xLjg0Mi0uNTkyLTMuMzU2LTEuNzc2LTQuNjA2cy0zLjQyMS0yLjM2OC02LjY0NS0zLjQyMWwtOS41MzktMi45NmMtNC44MDMtMS41MTMtOC4zNTYtMy43NS0xMC41MjctNi43MWMtMi4xNzEtMi44OTUtMy4yODktNi4xMi0zLjI4OS05LjU0cTAtNC4xNDQgMS43NzYtNy4zMDNjMS4xODQtMi4xMDUgMi43NjMtMy45NDcgNC43MzctNS4zOTRjMS45NzQtMS41MTQgNC4yMTEtMi42MzIgNi44NDItMy40MjJjMi42MzItLjc5IDUuMzk1LTEuMTE4IDguMjktMS4xMThjMS40NDcgMCAyLjk2LjA2NiA0LjQwOC4yNjNjMS41MTMuMTk3IDIuODk0LjQ2IDQuMjc2LjcyNGMxLjMxNi4zMjkgMi41NjYuNjU4IDMuNzUgMS4wNTNxMS43NzYuNTkxIDIuNzYzIDEuMTg0Yy45MjEuNTI2IDEuNTc5IDEuMDUyIDEuOTc0IDEuNjQ0cS41OTIuNzkuNTkyIDIuMTcydjMuMDkyYzAgMS4zODEtLjUyNiAyLjEwNS0xLjUxMyAyLjEwNWMtLjUyNyAwLTEuMzgyLS4yNjMtMi41LS43OXEtNS42MjUtMi41NjUtMTIuNjMyLTIuNTY1Yy0zLjc1IDAtNi43MS41OTItOC43NSAxLjg0MnMtMy4wOTIgMy4xNTgtMy4wOTIgNS44NTVjMCAxLjg0Mi42NTggMy40MjEgMS45NzQgNC42NzFzMy43NSAyLjUgNy4yMzcgMy42MThsOS4zNDIgMi45NmM0LjczNiAxLjUxNCA4LjE1OCAzLjYxOSAxMC4xOTcgNi4zMTdzMy4wMjYgNS43ODkgMy4wMjYgOS4yMWMwIDIuODI5LS41OTIgNS4zOTUtMS43MSA3LjYzMmMtMS4xODQgMi4yMzctMi43NjMgNC4yMS00LjgwMyA1Ljc4OWMtMi4wMzkgMS42NDUtNC40NzQgMi44MjktNy4zMDIgMy42ODVjLTIuOTYxLjkyMS02LjA1MyAxLjM4MS05LjQwOCAxLjM4MSIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIwNy44MzcgMTYyLjgxNmMtMjEuNjQ1IDE1Ljk4Ny01My4wOTIgMjQuNDc0LTgwLjEzMiAyNC40NzRjLTM3Ljg5NCAwLTcyLjA0LTE0LjAxNC05Ny44MjktMzcuMzAzYy0yLjA0LTEuODQyLS4xOTctNC4zNDIgMi4yMzctMi44OTVjMjcuODk1IDE2LjE4NCA2Mi4zMDMgMjUuOTg3IDk3Ljg5NSAyNS45ODdjMjQuMDEzIDAgNTAuMzk1LTUgNzQuNjcxLTE1LjI2M2MzLjYxOC0xLjY0NSA2LjcxIDIuMzY4IDMuMTU4IDUiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIxNi44NSAxNTIuNTUzYy0yLjc2My0zLjU1My0xOC4yODktMS43MTEtMjUuMzI5LS44NTZjLTIuMTA1LjI2NC0yLjQzNC0xLjU3OS0uNTI2LTIuOTZjMTIuMzY4LTguNjg0IDMyLjY5Ny02LjE4NCAzNS4wNjYtMy4yOWMyLjM2OCAyLjk2MS0uNjU4IDIzLjI5LTEyLjIzNyAzMy4wMjdjLTEuNzc3IDEuNTEzLTMuNDg3LjcyMy0yLjY5OC0xLjI1YzIuNjMyLTYuNTEzIDguNDg3LTIxLjE4NSA1LjcyNC0yNC42NzEiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=", - resources: 140, - added: "Apr 1, 2024", - }, - { - id: 17, - account: "aws", - provider_id: 740350143860, - connected: true, - group: "Analysis", - scan_status: "active", - scan_status_time: "5 minutes, 30 seconds", - last_scan: "Jul 17, 2024 12:46am UTC", - next_scan: "Jul 18, 2024 12:46am UTC", - provider_img: - "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI1NiAyNTYiPjxnIGZpbGw9Im5vbmUiPjxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiBmaWxsPSIjZjRmMmVkIiByeD0iNjAiLz48cGF0aCBmaWxsPSIjMjUyZjNlIiBkPSJNODQuNzQ1IDExMS45NjFjMCAyLjQzNC4yNjMgNC40MDcuNzIzIDUuODU1YTM1IDM1IDAgMCAwIDIuMTA2IDQuNzM3Yy4zMjkuNTI2LjQ2IDEuMDUyLjQ2IDEuNTEzYzAgLjY1OC0uMzk1IDEuMzE2LTEuMjUgMS45NzNsLTQuMTQ1IDIuNzY0Yy0uNTkyLjM5NC0xLjE4NC41OTItMS43MS41OTJjLS42NTggMC0xLjMxNi0uMzI5LTEuOTc0LS45MjFhMjAuNCAyMC40IDAgMCAxLTIuMzY4LTMuMDkyYTUxIDUxIDAgMCAxLTIuMDQtMy44ODJxLTcuNjk3IDkuMDgtMTkuMzQyIDkuMDc5Yy01LjUyNiAwLTkuOTM0LTEuNTc5LTEzLjE1OC00LjczN2MtMy4yMjMtMy4xNTgtNC44NjgtNy4zNjgtNC44NjgtMTIuNjMxYzAtNS41OTMgMS45NzQtMTAuMTMyIDUuOTg3LTEzLjU1M3M5LjM0Mi01LjEzMiAxNi4xMTgtNS4xMzJjMi4yMzcgMCA0LjU0LjE5OCA2Ljk3NC41MjdzNC45MzQuODU1IDcuNTY2IDEuNDQ3di00LjgwM2MwLTUtMS4wNTMtOC40ODctMy4wOTItMTAuNTI2Yy0yLjEwNi0yLjA0LTUuNjU4LTMuMDI2LTEwLjcyNC0zLjAyNmMtMi4zMDMgMC00LjY3MS4yNjMtNy4xMDUuODU1cy00LjgwMyAxLjMxNi03LjEwNiAyLjIzN2ExOSAxOSAwIDAgMS0yLjMwMi44NTVjLS40Ni4xMzItLjc5LjE5OC0xLjA1My4xOThjLS45MiAwLTEuMzgyLS42NTgtMS4zODItMi4wNHYtMy4yMjRjMC0xLjA1Mi4xMzItMS44NDIuNDYxLTIuMzAycy45MjEtLjkyMSAxLjg0Mi0xLjM4MnEzLjQ1NC0xLjc3NiA4LjI5LTIuOTZjMy4yMjMtLjg1NiA2LjY0NC0xLjI1IDEwLjI2My0xLjI1YzcuODI5IDAgMTMuNTUyIDEuNzc2IDE3LjIzNyA1LjMyOGMzLjYxOCAzLjU1MyA1LjQ2IDguOTQ4IDUuNDYgMTYuMTg1djIxLjMxNnptLTI2LjcxIDEwYzIuMTcgMCA0LjQwNy0uMzk1IDYuNzc2LTEuMTg1YzIuMzY4LS43ODkgNC40NzMtMi4yMzcgNi4yNS00LjIxYzEuMDUyLTEuMjUgMS44NDItMi42MzIgMi4yMzYtNC4yMTFzLjY1OC0zLjQ4Ny42NTgtNS43MjN2LTIuNzY0YTU1IDU1IDAgMCAwLTYuMDUyLTEuMTE4YTUwIDUwIDAgMCAwLTYuMTg1LS4zOTVjLTQuNDA4IDAtNy42MzEuODU2LTkuODAyIDIuNjMycy0zLjIyNCA0LjI3Ni0zLjIyNCA3LjU2NmMwIDMuMDkyLjc5IDUuMzk0IDIuNDM0IDYuOTczYzEuNTggMS42NDUgMy44ODIgMi40MzUgNi45MDggMi40MzVtNTIuODI4IDcuMTA1Yy0xLjE4NCAwLTEuOTc0LS4xOTgtMi41LS42NThjLS41MjYtLjM5NS0uOTg3LTEuMzE2LTEuMzgxLTIuNTY2bC0xNS40Ni01MC44NTVjLS4zOTYtMS4zMTYtLjU5My0yLjE3MS0uNTkzLTIuNjMyYzAtMS4wNTIuNTI2LTEuNjQ1IDEuNTc5LTEuNjQ1aDYuNDQ3YzEuMjUgMCAyLjEwNi4xOTggMi41NjYuNjU4Yy41MjYuMzk1LjkyMSAxLjMxNiAxLjMxNiAyLjU2NmwxMS4wNTIgNDMuNTUzbDEwLjI2NC00My41NTNjLjMyOS0xLjMxNi43MjMtMi4xNyAxLjI1LTIuNTY2Yy41MjYtLjM5NCAxLjQ0Ny0uNjU3IDIuNjMxLS42NTdoNS4yNjNjMS4yNSAwIDIuMTA2LjE5NyAyLjYzMi42NTdjLjUyNi4zOTUuOTg3IDEuMzE2IDEuMjUgMi41NjZsMTAuMzk1IDQ0LjA3OWwxMS4zODEtNDQuMDc5Yy4zOTUtMS4zMTYuODU2LTIuMTcgMS4zMTYtMi41NjZjLjUyNi0uMzk0IDEuMzgyLS42NTcgMi41NjYtLjY1N2g2LjExOGMxLjA1MyAwIDEuNjQ1LjUyNiAxLjY0NSAxLjY0NGMwIC4zMy0uMDY2LjY1OC0uMTMyIDEuMDUzYy0uMDY1LjM5NS0uMTk3LjkyLS40NiAxLjY0NWwtMTUuODU1IDUwLjg1NXEtLjU5MyAxLjk3NC0xLjM4MiAyLjU2NmMtLjUyNi4zOTQtMS4zODIuNjU4LTIuNS42NThoLTUuNjU4Yy0xLjI1IDAtMi4xMDUtLjE5OC0yLjYzMS0uNjU4Yy0uNTI3LS40NjEtLjk4Ny0xLjMxNi0xLjI1LTIuNjMybC0xMC4xOTgtNDIuNDM0bC0xMC4xMzEgNDIuMzY4Yy0uMzI5IDEuMzE2LS43MjQgMi4xNzEtMS4yNSAyLjYzMmMtLjUyNy40Ni0xLjQ0OC42NTgtMi42MzIuNjU4em04NC41NCAxLjc3NmMtMy40MjEgMC02Ljg0Mi0uMzk1LTEwLjEzMi0xLjE4NGMtMy4yODktLjc5LTUuODU1LTEuNjQ1LTcuNTY2LTIuNjMyYy0xLjA1Mi0uNTkyLTEuNzc2LTEuMjUtMi4wMzktMS44NDJhNC42NSA0LjY1IDAgMCAxLS4zOTUtMS44NDJ2LTMuMzU1YzAtMS4zODIuNTI2LTIuMDQgMS41MTMtMi4wNHEuNTkzIDAgMS4xODQuMTk4Yy4zOTUuMTMxLjk4Ny4zOTQgMS42NDUuNjU4YTM1LjggMzUuOCAwIDAgMCA3LjIzNyAyLjMwMmEzOS41IDM5LjUgMCAwIDAgNy44MjkuNzljNC4xNDUgMCA3LjM2OC0uNzI0IDkuNjA1LTIuMTcxYzIuMjM3LTEuNDQ4IDMuNDIxLTMuNTUzIDMuNDIxLTYuMjVjMC0xLjg0Mi0uNTkyLTMuMzU2LTEuNzc2LTQuNjA2cy0zLjQyMS0yLjM2OC02LjY0NS0zLjQyMWwtOS41MzktMi45NmMtNC44MDMtMS41MTMtOC4zNTYtMy43NS0xMC41MjctNi43MWMtMi4xNzEtMi44OTUtMy4yODktNi4xMi0zLjI4OS05LjU0cTAtNC4xNDQgMS43NzYtNy4zMDNjMS4xODQtMi4xMDUgMi43NjMtMy45NDcgNC43MzctNS4zOTRjMS45NzQtMS41MTQgNC4yMTEtMi42MzIgNi44NDItMy40MjJjMi42MzItLjc5IDUuMzk1LTEuMTE4IDguMjktMS4xMThjMS40NDcgMCAyLjk2LjA2NiA0LjQwOC4yNjNjMS41MTMuMTk3IDIuODk0LjQ2IDQuMjc2LjcyNGMxLjMxNi4zMjkgMi41NjYuNjU4IDMuNzUgMS4wNTNxMS43NzYuNTkxIDIuNzYzIDEuMTg0Yy45MjEuNTI2IDEuNTc5IDEuMDUyIDEuOTc0IDEuNjQ0cS41OTIuNzkuNTkyIDIuMTcydjMuMDkyYzAgMS4zODEtLjUyNiAyLjEwNS0xLjUxMyAyLjEwNWMtLjUyNyAwLTEuMzgyLS4yNjMtMi41LS43OXEtNS42MjUtMi41NjUtMTIuNjMyLTIuNTY1Yy0zLjc1IDAtNi43MS41OTItOC43NSAxLjg0MnMtMy4wOTIgMy4xNTgtMy4wOTIgNS44NTVjMCAxLjg0Mi42NTggMy40MjEgMS45NzQgNC42NzFzMy43NSAyLjUgNy4yMzcgMy42MThsOS4zNDIgMi45NmM0LjczNiAxLjUxNCA4LjE1OCAzLjYxOSAxMC4xOTcgNi4zMTdzMy4wMjYgNS43ODkgMy4wMjYgOS4yMWMwIDIuODI5LS41OTIgNS4zOTUtMS43MSA3LjYzMmMtMS4xODQgMi4yMzctMi43NjMgNC4yMS00LjgwMyA1Ljc4OWMtMi4wMzkgMS42NDUtNC40NzQgMi44MjktNy4zMDIgMy42ODVjLTIuOTYxLjkyMS02LjA1MyAxLjM4MS05LjQwOCAxLjM4MSIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIwNy44MzcgMTYyLjgxNmMtMjEuNjQ1IDE1Ljk4Ny01My4wOTIgMjQuNDc0LTgwLjEzMiAyNC40NzRjLTM3Ljg5NCAwLTcyLjA0LTE0LjAxNC05Ny44MjktMzcuMzAzYy0yLjA0LTEuODQyLS4xOTctNC4zNDIgMi4yMzctMi44OTVjMjcuODk1IDE2LjE4NCA2Mi4zMDMgMjUuOTg3IDk3Ljg5NSAyNS45ODdjMjQuMDEzIDAgNTAuMzk1LTUgNzQuNjcxLTE1LjI2M2MzLjYxOC0xLjY0NSA2LjcxIDIuMzY4IDMuMTU4IDUiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIxNi44NSAxNTIuNTUzYy0yLjc2My0zLjU1My0xOC4yODktMS43MTEtMjUuMzI5LS44NTZjLTIuMTA1LjI2NC0yLjQzNC0xLjU3OS0uNTI2LTIuOTZjMTIuMzY4LTguNjg0IDMyLjY5Ny02LjE4NCAzNS4wNjYtMy4yOWMyLjM2OCAyLjk2MS0uNjU4IDIzLjI5LTEyLjIzNyAzMy4wMjdjLTEuNzc3IDEuNTEzLTMuNDg3LjcyMy0yLjY5OC0xLjI1YzIuNjMyLTYuNTEzIDguNDg3LTIxLjE4NSA1LjcyNC0yNC42NzEiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=", - resources: 126, - added: "Jan 30, 2024", - }, - { - id: 18, - account: "aws", - provider_id: 740350143861, - connected: true, - group: "Testing", - scan_status: "active", - scan_status_time: "8 minutes, 5 seconds", - last_scan: "Jul 16, 2024 11:46pm UTC", - next_scan: "Jul 17, 2024 11:46pm UTC", - provider_img: - "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI1NiAyNTYiPjxnIGZpbGw9Im5vbmUiPjxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiBmaWxsPSIjZjRmMmVkIiByeD0iNjAiLz48cGF0aCBmaWxsPSIjMjUyZjNlIiBkPSJNODQuNzQ1IDExMS45NjFjMCAyLjQzNC4yNjMgNC40MDcuNzIzIDUuODU1YTM1IDM1IDAgMCAwIDIuMTA2IDQuNzM3Yy4zMjkuNTI2LjQ2IDEuMDUyLjQ2IDEuNTEzYzAgLjY1OC0uMzk1IDEuMzE2LTEuMjUgMS45NzNsLTQuMTQ1IDIuNzY0Yy0uNTkyLjM5NC0xLjE4NC41OTItMS43MS41OTJjLS42NTggMC0xLjMxNi0uMzI5LTEuOTc0LS45MjFhMjAuNCAyMC40IDAgMCAxLTIuMzY4LTMuMDkyYTUxIDUxIDAgMCAxLTIuMDQtMy44ODJxLTcuNjk3IDkuMDgtMTkuMzQyIDkuMDc5Yy01LjUyNiAwLTkuOTM0LTEuNTc5LTEzLjE1OC00LjczN2MtMy4yMjMtMy4xNTgtNC44NjgtNy4zNjgtNC44NjgtMTIuNjMxYzAtNS41OTMgMS45NzQtMTAuMTMyIDUuOTg3LTEzLjU1M3M5LjM0Mi01LjEzMiAxNi4xMTgtNS4xMzJjMi4yMzcgMCA0LjU0LjE5OCA2Ljk3NC41MjdzNC45MzQuODU1IDcuNTY2IDEuNDQ3di00LjgwM2MwLTUtMS4wNTMtOC40ODctMy4wOTItMTAuNTI2Yy0yLjEwNi0yLjA0LTUuNjU4LTMuMDI2LTEwLjcyNC0zLjAyNmMtMi4zMDMgMC00LjY3MS4yNjMtNy4xMDUuODU1cy00LjgwMyAxLjMxNi03LjEwNiAyLjIzN2ExOSAxOSAwIDAgMS0yLjMwMi44NTVjLS40Ni4xMzItLjc5LjE5OC0xLjA1My4xOThjLS45MiAwLTEuMzgyLS42NTgtMS4zODItMi4wNHYtMy4yMjRjMC0xLjA1Mi4xMzItMS44NDIuNDYxLTIuMzAycy45MjEtLjkyMSAxLjg0Mi0xLjM4MnEzLjQ1NC0xLjc3NiA4LjI5LTIuOTZjMy4yMjMtLjg1NiA2LjY0NC0xLjI1IDEwLjI2My0xLjI1YzcuODI5IDAgMTMuNTUyIDEuNzc2IDE3LjIzNyA1LjMyOGMzLjYxOCAzLjU1MyA1LjQ2IDguOTQ4IDUuNDYgMTYuMTg1djIxLjMxNnptLTI2LjcxIDEwYzIuMTcgMCA0LjQwNy0uMzk1IDYuNzc2LTEuMTg1YzIuMzY4LS43ODkgNC40NzMtMi4yMzcgNi4yNS00LjIxYzEuMDUyLTEuMjUgMS44NDItMi42MzIgMi4yMzYtNC4yMTFzLjY1OC0zLjQ4Ny42NTgtNS43MjN2LTIuNzY0YTU1IDU1IDAgMCAwLTYuMDUyLTEuMTE4YTUwIDUwIDAgMCAwLTYuMTg1LS4zOTVjLTQuNDA4IDAtNy42MzEuODU2LTkuODAyIDIuNjMycy0zLjIyNCA0LjI3Ni0zLjIyNCA3LjU2NmMwIDMuMDkyLjc5IDUuMzk0IDIuNDM0IDYuOTczYzEuNTggMS42NDUgMy44ODIgMi40MzUgNi45MDggMi40MzVtNTIuODI4IDcuMTA1Yy0xLjE4NCAwLTEuOTc0LS4xOTgtMi41LS42NThjLS41MjYtLjM5NS0uOTg3LTEuMzE2LTEuMzgxLTIuNTY2bC0xNS40Ni01MC44NTVjLS4zOTYtMS4zMTYtLjU5My0yLjE3MS0uNTkzLTIuNjMyYzAtMS4wNTIuNTI2LTEuNjQ1IDEuNTc5LTEuNjQ1aDYuNDQ3YzEuMjUgMCAyLjEwNi4xOTggMi41NjYuNjU4Yy41MjYuMzk1LjkyMSAxLjMxNiAxLjMxNiAyLjU2NmwxMS4wNTIgNDMuNTUzbDEwLjI2NC00My41NTNjLjMyOS0xLjMxNi43MjMtMi4xNyAxLjI1LTIuNTY2Yy41MjYtLjM5NCAxLjQ0Ny0uNjU3IDIuNjMxLS42NTdoNS4yNjNjMS4yNSAwIDIuMTA2LjE5NyAyLjYzMi42NTdjLjUyNi4zOTUuOTg3IDEuMzE2IDEuMjUgMi41NjZsMTAuMzk1IDQ0LjA3OWwxMS4zODEtNDQuMDc5Yy4zOTUtMS4zMTYuODU2LTIuMTcgMS4zMTYtMi41NjZjLjUyNi0uMzk0IDEuMzgyLS42NTcgMi41NjYtLjY1N2g2LjExOGMxLjA1MyAwIDEuNjQ1LjUyNiAxLjY0NSAxLjY0NGMwIC4zMy0uMDY2LjY1OC0uMTMyIDEuMDUzYy0uMDY1LjM5NS0uMTk3LjkyLS40NiAxLjY0NWwtMTUuODU1IDUwLjg1NXEtLjU5MyAxLjk3NC0xLjM4MiAyLjU2NmMtLjUyNi4zOTQtMS4zODIuNjU4LTIuNS42NThoLTUuNjU4Yy0xLjI1IDAtMi4xMDUtLjE5OC0yLjYzMS0uNjU4Yy0uNTI3LS40NjEtLjk4Ny0xLjMxNi0xLjI1LTIuNjMybC0xMC4xOTgtNDIuNDM0bC0xMC4xMzEgNDIuMzY4Yy0uMzI5IDEuMzE2LS43MjQgMi4xNzEtMS4yNSAyLjYzMmMtLjUyNy40Ni0xLjQ0OC42NTgtMi42MzIuNjU4em04NC41NCAxLjc3NmMtMy40MjEgMC02Ljg0Mi0uMzk1LTEwLjEzMi0xLjE4NGMtMy4yODktLjc5LTUuODU1LTEuNjQ1LTcuNTY2LTIuNjMyYy0xLjA1Mi0uNTkyLTEuNzc2LTEuMjUtMi4wMzktMS44NDJhNC42NSA0LjY1IDAgMCAxLS4zOTUtMS44NDJ2LTMuMzU1YzAtMS4zODIuNTI2LTIuMDQgMS41MTMtMi4wNHEuNTkzIDAgMS4xODQuMTk4Yy4zOTUuMTMxLjk4Ny4zOTQgMS42NDUuNjU4YTM1LjggMzUuOCAwIDAgMCA3LjIzNyAyLjMwMmEzOS41IDM5LjUgMCAwIDAgNy44MjkuNzljNC4xNDUgMCA3LjM2OC0uNzI0IDkuNjA1LTIuMTcxYzIuMjM3LTEuNDQ4IDMuNDIxLTMuNTUzIDMuNDIxLTYuMjVjMC0xLjg0Mi0uNTkyLTMuMzU2LTEuNzc2LTQuNjA2cy0zLjQyMS0yLjM2OC02LjY0NS0zLjQyMWwtOS41MzktMi45NmMtNC44MDMtMS41MTMtOC4zNTYtMy43NS0xMC41MjctNi43MWMtMi4xNzEtMi44OTUtMy4yODktNi4xMi0zLjI4OS05LjU0cTAtNC4xNDQgMS43NzYtNy4zMDNjMS4xODQtMi4xMDUgMi43NjMtMy45NDcgNC43MzctNS4zOTRjMS45NzQtMS41MTQgNC4yMTEtMi42MzIgNi44NDItMy40MjJjMi42MzItLjc5IDUuMzk1LTEuMTE4IDguMjktMS4xMThjMS40NDcgMCAyLjk2LjA2NiA0LjQwOC4yNjNjMS41MTMuMTk3IDIuODk0LjQ2IDQuMjc2LjcyNGMxLjMxNi4zMjkgMi41NjYuNjU4IDMuNzUgMS4wNTNxMS43NzYuNTkxIDIuNzYzIDEuMTg0Yy45MjEuNTI2IDEuNTc5IDEuMDUyIDEuOTc0IDEuNjQ0cS41OTIuNzkuNTkyIDIuMTcydjMuMDkyYzAgMS4zODEtLjUyNiAyLjEwNS0xLjUxMyAyLjEwNWMtLjUyNyAwLTEuMzgyLS4yNjMtMi41LS43OXEtNS42MjUtMi41NjUtMTIuNjMyLTIuNTY1Yy0zLjc1IDAtNi43MS41OTItOC43NSAxLjg0MnMtMy4wOTIgMy4xNTgtMy4wOTIgNS44NTVjMCAxLjg0Mi42NTggMy40MjEgMS45NzQgNC42NzFzMy43NSAyLjUgNy4yMzcgMy42MThsOS4zNDIgMi45NmM0LjczNiAxLjUxNCA4LjE1OCAzLjYxOSAxMC4xOTcgNi4zMTdzMy4wMjYgNS43ODkgMy4wMjYgOS4yMWMwIDIuODI5LS41OTIgNS4zOTUtMS43MSA3LjYzMmMtMS4xODQgMi4yMzctMi43NjMgNC4yMS00LjgwMyA1Ljc4OWMtMi4wMzkgMS42NDUtNC40NzQgMi44MjktNy4zMDIgMy42ODVjLTIuOTYxLjkyMS02LjA1MyAxLjM4MS05LjQwOCAxLjM4MSIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIwNy44MzcgMTYyLjgxNmMtMjEuNjQ1IDE1Ljk4Ny01My4wOTIgMjQuNDc0LTgwLjEzMiAyNC40NzRjLTM3Ljg5NCAwLTcyLjA0LTE0LjAxNC05Ny44MjktMzcuMzAzYy0yLjA0LTEuODQyLS4xOTctNC4zNDIgMi4yMzctMi44OTVjMjcuODk1IDE2LjE4NCA2Mi4zMDMgMjUuOTg3IDk3Ljg5NSAyNS45ODdjMjQuMDEzIDAgNTAuMzk1LTUgNzQuNjcxLTE1LjI2M2MzLjYxOC0xLjY0NSA2LjcxIDIuMzY4IDMuMTU4IDUiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIxNi44NSAxNTIuNTUzYy0yLjc2My0zLjU1My0xOC4yODktMS43MTEtMjUuMzI5LS44NTZjLTIuMTA1LjI2NC0yLjQzNC0xLjU3OS0uNTI2LTIuOTZjMTIuMzY4LTguNjg0IDMyLjY5Ny02LjE4NCAzNS4wNjYtMy4yOWMyLjM2OCAyLjk2MS0uNjU4IDIzLjI5LTEyLjIzNyAzMy4wMjdjLTEuNzc3IDEuNTEzLTMuNDg3LjcyMy0yLjY5OC0xLjI1YzIuNjMyLTYuNTEzIDguNDg3LTIxLjE4NSA1LjcyNC0yNC42NzEiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=", - resources: 142, - added: "Mar 19, 2024", - }, - { - id: 19, - account: "aws", - provider_id: 740350143862, - connected: false, - group: "Information Technology", - scan_status: "paused", - scan_status_time: "14 minutes, 45 seconds", - last_scan: "Jul 16, 2024 10:46pm UTC", - next_scan: "Jul 17, 2024 10:46pm UTC", - provider_img: - "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI1NiAyNTYiPjxnIGZpbGw9Im5vbmUiPjxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiBmaWxsPSIjZjRmMmVkIiByeD0iNjAiLz48cGF0aCBmaWxsPSIjMjUyZjNlIiBkPSJNODQuNzQ1IDExMS45NjFjMCAyLjQzNC4yNjMgNC40MDcuNzIzIDUuODU1YTM1IDM1IDAgMCAwIDIuMTA2IDQuNzM3Yy4zMjkuNTI2LjQ2IDEuMDUyLjQ2IDEuNTEzYzAgLjY1OC0uMzk1IDEuMzE2LTEuMjUgMS45NzNsLTQuMTQ1IDIuNzY0Yy0uNTkyLjM5NC0xLjE4NC41OTItMS43MS41OTJjLS42NTggMC0xLjMxNi0uMzI5LTEuOTc0LS45MjFhMjAuNCAyMC40IDAgMCAxLTIuMzY4LTMuMDkyYTUxIDUxIDAgMCAxLTIuMDQtMy44ODJxLTcuNjk3IDkuMDgtMTkuMzQyIDkuMDc5Yy01LjUyNiAwLTkuOTM0LTEuNTc5LTEzLjE1OC00LjczN2MtMy4yMjMtMy4xNTgtNC44NjgtNy4zNjgtNC44NjgtMTIuNjMxYzAtNS41OTMgMS45NzQtMTAuMTMyIDUuOTg3LTEzLjU1M3M5LjM0Mi01LjEzMiAxNi4xMTgtNS4xMzJjMi4yMzcgMCA0LjU0LjE5OCA2Ljk3NC41MjdzNC45MzQuODU1IDcuNTY2IDEuNDQ3di00LjgwM2MwLTUtMS4wNTMtOC40ODctMy4wOTItMTAuNTI2Yy0yLjEwNi0yLjA0LTUuNjU4LTMuMDI2LTEwLjcyNC0zLjAyNmMtMi4zMDMgMC00LjY3MS4yNjMtNy4xMDUuODU1cy00LjgwMyAxLjMxNi03LjEwNiAyLjIzN2ExOSAxOSAwIDAgMS0yLjMwMi44NTVjLS40Ni4xMzItLjc5LjE5OC0xLjA1My4xOThjLS45MiAwLTEuMzgyLS42NTgtMS4zODItMi4wNHYtMy4yMjRjMC0xLjA1Mi4xMzItMS44NDIuNDYxLTIuMzAycy45MjEtLjkyMSAxLjg0Mi0xLjM4MnEzLjQ1NC0xLjc3NiA4LjI5LTIuOTZjMy4yMjMtLjg1NiA2LjY0NC0xLjI1IDEwLjI2My0xLjI1YzcuODI5IDAgMTMuNTUyIDEuNzc2IDE3LjIzNyA1LjMyOGMzLjYxOCAzLjU1MyA1LjQ2IDguOTQ4IDUuNDYgMTYuMTg1djIxLjMxNnptLTI2LjcxIDEwYzIuMTcgMCA0LjQwNy0uMzk1IDYuNzc2LTEuMTg1YzIuMzY4LS43ODkgNC40NzMtMi4yMzcgNi4yNS00LjIxYzEuMDUyLTEuMjUgMS44NDItMi42MzIgMi4yMzYtNC4yMTFzLjY1OC0zLjQ4Ny42NTgtNS43MjN2LTIuNzY0YTU1IDU1IDAgMCAwLTYuMDUyLTEuMTE4YTUwIDUwIDAgMCAwLTYuMTg1LS4zOTVjLTQuNDA4IDAtNy42MzEuODU2LTkuODAyIDIuNjMycy0zLjIyNCA0LjI3Ni0zLjIyNCA3LjU2NmMwIDMuMDkyLjc5IDUuMzk0IDIuNDM0IDYuOTczYzEuNTggMS42NDUgMy44ODIgMi40MzUgNi45MDggMi40MzVtNTIuODI4IDcuMTA1Yy0xLjE4NCAwLTEuOTc0LS4xOTgtMi41LS42NThjLS41MjYtLjM5NS0uOTg3LTEuMzE2LTEuMzgxLTIuNTY2bC0xNS40Ni01MC44NTVjLS4zOTYtMS4zMTYtLjU5My0yLjE3MS0uNTkzLTIuNjMyYzAtMS4wNTIuNTI2LTEuNjQ1IDEuNTc5LTEuNjQ1aDYuNDQ3YzEuMjUgMCAyLjEwNi4xOTggMi41NjYuNjU4Yy41MjYuMzk1LjkyMSAxLjMxNiAxLjMxNiAyLjU2NmwxMS4wNTIgNDMuNTUzbDEwLjI2NC00My41NTNjLjMyOS0xLjMxNi43MjMtMi4xNyAxLjI1LTIuNTY2Yy41MjYtLjM5NCAxLjQ0Ny0uNjU3IDIuNjMxLS42NTdoNS4yNjNjMS4yNSAwIDIuMTA2LjE5NyAyLjYzMi42NTdjLjUyNi4zOTUuOTg3IDEuMzE2IDEuMjUgMi41NjZsMTAuMzk1IDQ0LjA3OWwxMS4zODEtNDQuMDc5Yy4zOTUtMS4zMTYuODU2LTIuMTcgMS4zMTYtMi41NjZjLjUyNi0uMzk0IDEuMzgyLS42NTcgMi41NjYtLjY1N2g2LjExOGMxLjA1MyAwIDEuNjQ1LjUyNiAxLjY0NSAxLjY0NGMwIC4zMy0uMDY2LjY1OC0uMTMyIDEuMDUzYy0uMDY1LjM5NS0uMTk3LjkyLS40NiAxLjY0NWwtMTUuODU1IDUwLjg1NXEtLjU5MyAxLjk3NC0xLjM4MiAyLjU2NmMtLjUyNi4zOTQtMS4zODIuNjU4LTIuNS42NThoLTUuNjU4Yy0xLjI1IDAtMi4xMDUtLjE5OC0yLjYzMS0uNjU4Yy0uNTI3LS40NjEtLjk4Ny0xLjMxNi0xLjI1LTIuNjMybC0xMC4xOTgtNDIuNDM0bC0xMC4xMzEgNDIuMzY4Yy0uMzI5IDEuMzE2LS43MjQgMi4xNzEtMS4yNSAyLjYzMmMtLjUyNy40Ni0xLjQ0OC42NTgtMi42MzIuNjU4em04NC41NCAxLjc3NmMtMy40MjEgMC02Ljg0Mi0uMzk1LTEwLjEzMi0xLjE4NGMtMy4yODktLjc5LTUuODU1LTEuNjQ1LTcuNTY2LTIuNjMyYy0xLjA1Mi0uNTkyLTEuNzc2LTEuMjUtMi4wMzktMS44NDJhNC42NSA0LjY1IDAgMCAxLS4zOTUtMS44NDJ2LTMuMzU1YzAtMS4zODIuNTI2LTIuMDQgMS41MTMtMi4wNHEuNTkzIDAgMS4xODQuMTk4Yy4zOTUuMTMxLjk4Ny4zOTQgMS42NDUuNjU4YTM1LjggMzUuOCAwIDAgMCA3LjIzNyAyLjMwMmEzOS41IDM5LjUgMCAwIDAgNy44MjkuNzljNC4xNDUgMCA3LjM2OC0uNzI0IDkuNjA1LTIuMTcxYzIuMjM3LTEuNDQ4IDMuNDIxLTMuNTUzIDMuNDIxLTYuMjVjMC0xLjg0Mi0uNTkyLTMuMzU2LTEuNzc2LTQuNjA2cy0zLjQyMS0yLjM2OC02LjY0NS0zLjQyMWwtOS41MzktMi45NmMtNC44MDMtMS41MTMtOC4zNTYtMy43NS0xMC41MjctNi43MWMtMi4xNzEtMi44OTUtMy4yODktNi4xMi0zLjI4OS05LjU0cTAtNC4xNDQgMS43NzYtNy4zMDNjMS4xODQtMi4xMDUgMi43NjMtMy45NDcgNC43MzctNS4zOTRjMS45NzQtMS41MTQgNC4yMTEtMi42MzIgNi44NDItMy40MjJjMi42MzItLjc5IDUuMzk1LTEuMTE4IDguMjktMS4xMThjMS40NDcgMCAyLjk2LjA2NiA0LjQwOC4yNjNjMS41MTMuMTk3IDIuODk0LjQ2IDQuMjc2LjcyNGMxLjMxNi4zMjkgMi41NjYuNjU4IDMuNzUgMS4wNTNxMS43NzYuNTkxIDIuNzYzIDEuMTg0Yy45MjEuNTI2IDEuNTc5IDEuMDUyIDEuOTc0IDEuNjQ0cS41OTIuNzkuNTkyIDIuMTcydjMuMDkyYzAgMS4zODEtLjUyNiAyLjEwNS0xLjUxMyAyLjEwNWMtLjUyNyAwLTEuMzgyLS4yNjMtMi41LS43OXEtNS42MjUtMi41NjUtMTIuNjMyLTIuNTY1Yy0zLjc1IDAtNi43MS41OTItOC43NSAxLjg0MnMtMy4wOTIgMy4xNTgtMy4wOTIgNS44NTVjMCAxLjg0Mi42NTggMy40MjEgMS45NzQgNC42NzFzMy43NSAyLjUgNy4yMzcgMy42MThsOS4zNDIgMi45NmM0LjczNiAxLjUxNCA4LjE1OCAzLjYxOSAxMC4xOTcgNi4zMTdzMy4wMjYgNS43ODkgMy4wMjYgOS4yMWMwIDIuODI5LS41OTIgNS4zOTUtMS43MSA3LjYzMmMtMS4xODQgMi4yMzctMi43NjMgNC4yMS00LjgwMyA1Ljc4OWMtMi4wMzkgMS42NDUtNC40NzQgMi44MjktNy4zMDIgMy42ODVjLTIuOTYxLjkyMS02LjA1MyAxLjM4MS05LjQwOCAxLjM4MSIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIwNy44MzcgMTYyLjgxNmMtMjEuNjQ1IDE1Ljk4Ny01My4wOTIgMjQuNDc0LTgwLjEzMiAyNC40NzRjLTM3Ljg5NCAwLTcyLjA0LTE0LjAxNC05Ny44MjktMzcuMzAzYy0yLjA0LTEuODQyLS4xOTctNC4zNDIgMi4yMzctMi44OTVjMjcuODk1IDE2LjE4NCA2Mi4zMDMgMjUuOTg3IDk3Ljg5NSAyNS45ODdjMjQuMDEzIDAgNTAuMzk1LTUgNzQuNjcxLTE1LjI2M2MzLjYxOC0xLjY0NSA2LjcxIDIuMzY4IDMuMTU4IDUiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIxNi44NSAxNTIuNTUzYy0yLjc2My0zLjU1My0xOC4yODktMS43MTEtMjUuMzI5LS44NTZjLTIuMTA1LjI2NC0yLjQzNC0xLjU3OS0uNTI2LTIuOTZjMTIuMzY4LTguNjg0IDMyLjY5Ny02LjE4NCAzNS4wNjYtMy4yOWMyLjM2OCAyLjk2MS0uNjU4IDIzLjI5LTEyLjIzNyAzMy4wMjdjLTEuNzc3IDEuNTEzLTMuNDg3LjcyMy0yLjY5OC0xLjI1YzIuNjMyLTYuNTEzIDguNDg3LTIxLjE4NSA1LjcyNC0yNC42NzEiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=", - resources: 130, - added: "Feb 23, 2024", - }, - { - id: 20, - account: "aws", - provider_id: 740350143863, - connected: true, - group: "Operations", - scan_status: "active", - scan_status_time: "7 minutes, 20 seconds", - last_scan: "Jul 16, 2024 9:46pm UTC", - next_scan: "Jul 17, 2024 9:46pm UTC", - provider_img: - "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI1NiAyNTYiPjxnIGZpbGw9Im5vbmUiPjxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiBmaWxsPSIjZjRmMmVkIiByeD0iNjAiLz48cGF0aCBmaWxsPSIjMjUyZjNlIiBkPSJNODQuNzQ1IDExMS45NjFjMCAyLjQzNC4yNjMgNC40MDcuNzIzIDUuODU1YTM1IDM1IDAgMCAwIDIuMTA2IDQuNzM3Yy4zMjkuNTI2LjQ2IDEuMDUyLjQ2IDEuNTEzYzAgLjY1OC0uMzk1IDEuMzE2LTEuMjUgMS45NzNsLTQuMTQ1IDIuNzY0Yy0uNTkyLjM5NC0xLjE4NC41OTItMS43MS41OTJjLS42NTggMC0xLjMxNi0uMzI5LTEuOTc0LS45MjFhMjAuNCAyMC40IDAgMCAxLTIuMzY4LTMuMDkyYTUxIDUxIDAgMCAxLTIuMDQtMy44ODJxLTcuNjk3IDkuMDgtMTkuMzQyIDkuMDc5Yy01LjUyNiAwLTkuOTM0LTEuNTc5LTEzLjE1OC00LjczN2MtMy4yMjMtMy4xNTgtNC44NjgtNy4zNjgtNC44NjgtMTIuNjMxYzAtNS41OTMgMS45NzQtMTAuMTMyIDUuOTg3LTEzLjU1M3M5LjM0Mi01LjEzMiAxNi4xMTgtNS4xMzJjMi4yMzcgMCA0LjU0LjE5OCA2Ljk3NC41MjdzNC45MzQuODU1IDcuNTY2IDEuNDQ3di00LjgwM2MwLTUtMS4wNTMtOC40ODctMy4wOTItMTAuNTI2Yy0yLjEwNi0yLjA0LTUuNjU4LTMuMDI2LTEwLjcyNC0zLjAyNmMtMi4zMDMgMC00LjY3MS4yNjMtNy4xMDUuODU1cy00LjgwMyAxLjMxNi03LjEwNiAyLjIzN2ExOSAxOSAwIDAgMS0yLjMwMi44NTVjLS40Ni4xMzItLjc5LjE5OC0xLjA1My4xOThjLS45MiAwLTEuMzgyLS42NTgtMS4zODItMi4wNHYtMy4yMjRjMC0xLjA1Mi4xMzItMS44NDIuNDYxLTIuMzAycy45MjEtLjkyMSAxLjg0Mi0xLjM4MnEzLjQ1NC0xLjc3NiA4LjI5LTIuOTZjMy4yMjMtLjg1NiA2LjY0NC0xLjI1IDEwLjI2My0xLjI1YzcuODI5IDAgMTMuNTUyIDEuNzc2IDE3LjIzNyA1LjMyOGMzLjYxOCAzLjU1MyA1LjQ2IDguOTQ4IDUuNDYgMTYuMTg1djIxLjMxNnptLTI2LjcxIDEwYzIuMTcgMCA0LjQwNy0uMzk1IDYuNzc2LTEuMTg1YzIuMzY4LS43ODkgNC40NzMtMi4yMzcgNi4yNS00LjIxYzEuMDUyLTEuMjUgMS44NDItMi42MzIgMi4yMzYtNC4yMTFzLjY1OC0zLjQ4Ny42NTgtNS43MjN2LTIuNzY0YTU1IDU1IDAgMCAwLTYuMDUyLTEuMTE4YTUwIDUwIDAgMCAwLTYuMTg1LS4zOTVjLTQuNDA4IDAtNy42MzEuODU2LTkuODAyIDIuNjMycy0zLjIyNCA0LjI3Ni0zLjIyNCA3LjU2NmMwIDMuMDkyLjc5IDUuMzk0IDIuNDM0IDYuOTczYzEuNTggMS42NDUgMy44ODIgMi40MzUgNi45MDggMi40MzVtNTIuODI4IDcuMTA1Yy0xLjE4NCAwLTEuOTc0LS4xOTgtMi41LS42NThjLS41MjYtLjM5NS0uOTg3LTEuMzE2LTEuMzgxLTIuNTY2bC0xNS40Ni01MC44NTVjLS4zOTYtMS4zMTYtLjU5My0yLjE3MS0uNTkzLTIuNjMyYzAtMS4wNTIuNTI2LTEuNjQ1IDEuNTc5LTEuNjQ1aDYuNDQ3YzEuMjUgMCAyLjEwNi4xOTggMi41NjYuNjU4Yy41MjYuMzk1LjkyMSAxLjMxNiAxLjMxNiAyLjU2NmwxMS4wNTIgNDMuNTUzbDEwLjI2NC00My41NTNjLjMyOS0xLjMxNi43MjMtMi4xNyAxLjI1LTIuNTY2Yy41MjYtLjM5NCAxLjQ0Ny0uNjU3IDIuNjMxLS42NTdoNS4yNjNjMS4yNSAwIDIuMTA2LjE5NyAyLjYzMi42NTdjLjUyNi4zOTUuOTg3IDEuMzE2IDEuMjUgMi41NjZsMTAuMzk1IDQ0LjA3OWwxMS4zODEtNDQuMDc5Yy4zOTUtMS4zMTYuODU2LTIuMTcgMS4zMTYtMi41NjZjLjUyNi0uMzk0IDEuMzgyLS42NTcgMi41NjYtLjY1N2g2LjExOGMxLjA1MyAwIDEuNjQ1LjUyNiAxLjY0NSAxLjY0NGMwIC4zMy0uMDY2LjY1OC0uMTMyIDEuMDUzYy0uMDY1LjM5NS0uMTk3LjkyLS40NiAxLjY0NWwtMTUuODU1IDUwLjg1NXEtLjU5MyAxLjk3NC0xLjM4MiAyLjU2NmMtLjUyNi4zOTQtMS4zODIuNjU4LTIuNS42NThoLTUuNjU4Yy0xLjI1IDAtMi4xMDUtLjE5OC0yLjYzMS0uNjU4Yy0uNTI3LS40NjEtLjk4Ny0xLjMxNi0xLjI1LTIuNjMybC0xMC4xOTgtNDIuNDM0bC0xMC4xMzEgNDIuMzY4Yy0uMzI5IDEuMzE2LS43MjQgMi4xNzEtMS4yNSAyLjYzMmMtLjUyNy40Ni0xLjQ0OC42NTgtMi42MzIuNjU4em04NC41NCAxLjc3NmMtMy40MjEgMC02Ljg0Mi0uMzk1LTEwLjEzMi0xLjE4NGMtMy4yODktLjc5LTUuODU1LTEuNjQ1LTcuNTY2LTIuNjMyYy0xLjA1Mi0uNTkyLTEuNzc2LTEuMjUtMi4wMzktMS44NDJhNC42NSA0LjY1IDAgMCAxLS4zOTUtMS44NDJ2LTMuMzU1YzAtMS4zODIuNTI2LTIuMDQgMS41MTMtMi4wNHEuNTkzIDAgMS4xODQuMTk4Yy4zOTUuMTMxLjk4Ny4zOTQgMS42NDUuNjU4YTM1LjggMzUuOCAwIDAgMCA3LjIzNyAyLjMwMmEzOS41IDM5LjUgMCAwIDAgNy44MjkuNzljNC4xNDUgMCA3LjM2OC0uNzI0IDkuNjA1LTIuMTcxYzIuMjM3LTEuNDQ4IDMuNDIxLTMuNTUzIDMuNDIxLTYuMjVjMC0xLjg0Mi0uNTkyLTMuMzU2LTEuNzc2LTQuNjA2cy0zLjQyMS0yLjM2OC02LjY0NS0zLjQyMWwtOS41MzktMi45NmMtNC44MDMtMS41MTMtOC4zNTYtMy43NS0xMC41MjctNi43MWMtMi4xNzEtMi44OTUtMy4yODktNi4xMi0zLjI4OS05LjU0cTAtNC4xNDQgMS43NzYtNy4zMDNjMS4xODQtMi4xMDUgMi43NjMtMy45NDcgNC43MzctNS4zOTRjMS45NzQtMS41MTQgNC4yMTEtMi42MzIgNi44NDItMy40MjJjMi42MzItLjc5IDUuMzk1LTEuMTE4IDguMjktMS4xMThjMS40NDcgMCAyLjk2LjA2NiA0LjQwOC4yNjNjMS41MTMuMTk3IDIuODk0LjQ2IDQuMjc2LjcyNGMxLjMxNi4zMjkgMi41NjYuNjU4IDMuNzUgMS4wNTNxMS43NzYuNTkxIDIuNzYzIDEuMTg0Yy45MjEuNTI2IDEuNTc5IDEuMDUyIDEuOTc0IDEuNjQ0cS41OTIuNzkuNTkyIDIuMTcydjMuMDkyYzAgMS4zODEtLjUyNiAyLjEwNS0xLjUxMyAyLjEwNWMtLjUyNyAwLTEuMzgyLS4yNjMtMi41LS43OXEtNS42MjUtMi41NjUtMTIuNjMyLTIuNTY1Yy0zLjc1IDAtNi43MS41OTItOC43NSAxLjg0MnMtMy4wOTIgMy4xNTgtMy4wOTIgNS44NTVjMCAxLjg0Mi42NTggMy40MjEgMS45NzQgNC42NzFzMy43NSAyLjUgNy4yMzcgMy42MThsOS4zNDIgMi45NmM0LjczNiAxLjUxNCA4LjE1OCAzLjYxOSAxMC4xOTcgNi4zMTdzMy4wMjYgNS43ODkgMy4wMjYgOS4yMWMwIDIuODI5LS41OTIgNS4zOTUtMS43MSA3LjYzMmMtMS4xODQgMi4yMzctMi43NjMgNC4yMS00LjgwMyA1Ljc4OWMtMi4wMzkgMS42NDUtNC40NzQgMi44MjktNy4zMDIgMy42ODVjLTIuOTYxLjkyMS02LjA1MyAxLjM4MS05LjQwOCAxLjM4MSIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIwNy44MzcgMTYyLjgxNmMtMjEuNjQ1IDE1Ljk4Ny01My4wOTIgMjQuNDc0LTgwLjEzMiAyNC40NzRjLTM3Ljg5NCAwLTcyLjA0LTE0LjAxNC05Ny44MjktMzcuMzAzYy0yLjA0LTEuODQyLS4xOTctNC4zNDIgMi4yMzctMi44OTVjMjcuODk1IDE2LjE4NCA2Mi4zMDMgMjUuOTg3IDk3Ljg5NSAyNS45ODdjMjQuMDEzIDAgNTAuMzk1LTUgNzQuNjcxLTE1LjI2M2MzLjYxOC0xLjY0NSA2LjcxIDIuMzY4IDMuMTU4IDUiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNmOTAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTIxNi44NSAxNTIuNTUzYy0yLjc2My0zLjU1My0xOC4yODktMS43MTEtMjUuMzI5LS44NTZjLTIuMTA1LjI2NC0yLjQzNC0xLjU3OS0uNTI2LTIuOTZjMTIuMzY4LTguNjg0IDMyLjY5Ny02LjE4NCAzNS4wNjYtMy4yOWMyLjM2OCAyLjk2MS0uNjU4IDIzLjI5LTEyLjIzNyAzMy4wMjdjLTEuNzc3IDEuNTEzLTMuNDg3LjcyMy0yLjY5OC0xLjI1YzIuNjMyLTYuNTEzIDguNDg3LTIxLjE4NSA1LjcyNC0yNC42NzEiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=", - resources: 132, - added: "Apr 1, 2024", - }, -]; diff --git a/components/providers/AccountInfo.tsx b/components/providers/ProviderInfo.tsx similarity index 76% rename from components/providers/AccountInfo.tsx rename to components/providers/ProviderInfo.tsx index 7cab849d54..bc1e90124a 100644 --- a/components/providers/AccountInfo.tsx +++ b/components/providers/ProviderInfo.tsx @@ -8,18 +8,18 @@ import { WifiOffIcon, } from "../icons"; -interface AccountInfoProps { +interface ProviderInfoProps { connected: boolean; provider: "aws" | "azure" | "gcp"; - accountName: string; - accountId: string; + providerAlias: string; + providerId: string; } -export const AccountInfo: React.FC = ({ +export const ProviderInfo: React.FC = ({ connected, provider, - accountName, - accountId, + providerAlias, + providerId, }) => { const getIcon = () => { return connected ? : ; @@ -45,8 +45,8 @@ export const AccountInfo: React.FC = ({
{getIcon()}
{getProviderLogo()}
- {accountName} - {accountId} + {providerAlias} + {providerId}
diff --git a/components/ui/table/CustomTable.tsx b/components/ui/table/CustomTable.tsx deleted file mode 100644 index cc6616344f..0000000000 --- a/components/ui/table/CustomTable.tsx +++ /dev/null @@ -1,406 +0,0 @@ -"use client"; - -import { - Button, - Chip, - Dropdown, - DropdownItem, - DropdownMenu, - DropdownTrigger, - // Input, - Pagination, - Table, - TableBody, - TableCell, - TableColumn, - TableHeader, - TableRow, - User, -} from "@nextui-org/react"; -import React from "react"; - -import { - columns, - Provider, - providers, - statusColorMap, - statusOptions, -} from "../../../app/(prowler)/providers/data"; -import { - // ChevronDownIcon, - PlusIcon, - // SearchIcon, - VerticalDotsIcon, -} from "../../icons/Icons"; - -interface CustomTableProps { - initialVisibleColumns: string[]; - initialRowsPerPage?: number; - selectionMode: "single" | "multiple" | "none"; -} - -type SortDirection = "ascending" | "descending"; - -interface SortDescriptor { - column: string; - direction: SortDirection; -} - -export const CustomTable: React.FC = ({ - initialVisibleColumns, - initialRowsPerPage = 5, - selectionMode = "none", -}) => { - const [filterValue, setFilterValue] = React.useState(""); - // const [selectedKeys, setSelectedKeys] = React.useState(new Set([])); - const selectedKeys = new Set([]); - - // const [visibleColumns, setVisibleColumns] = React.useState< - // string | Set - // >(new Set(initialVisibleColumns)); - - const visibleColumns = new Set(initialVisibleColumns); - - // const [statusFilter, setStatusFilter] = React.useState("all"); - const statusFilter: string = "all"; - - const [rowsPerPage, setRowsPerPage] = React.useState(initialRowsPerPage); - - // const [sortDescriptor, setSortDescriptor] = React.useState({ - // column: "age", - // direction: "ascending", - // }); - - const sortDescriptor: SortDescriptor = { - column: "age", - direction: "ascending", - }; - - const [page, setPage] = React.useState(1); - - const pages = Math.ceil(providers.length / rowsPerPage); - - const hasSearchFilter = Boolean(filterValue); - - const headerColumns = React.useMemo(() => { - // if (visibleColumns === "all") return columns; - - return columns.filter((column) => - Array.from(visibleColumns).includes(column.uid), - ); - }, [visibleColumns]); - - const filteredItems = React.useMemo(() => { - let filteredUsers = [...providers]; - - if (hasSearchFilter) { - filteredUsers = filteredUsers.filter((provider) => - provider.account.toLowerCase().includes(filterValue.toLowerCase()), - ); - } - if ( - statusFilter !== "all" && - Array.from(statusFilter).length !== statusOptions.length - ) { - filteredUsers = filteredUsers.filter((provider) => - Array.from(statusFilter).includes(provider.group), - ); - } - - return filteredUsers; - }, [providers, filterValue, statusFilter]); - - const items = React.useMemo(() => { - const start = (page - 1) * rowsPerPage; - const end = start + rowsPerPage; - - return filteredItems.slice(start, end); - }, [page, filteredItems, rowsPerPage]); - - const sortedItems = React.useMemo(() => { - // The type "any" for a and b will removed in the next iteration. - return [...items].sort((a: any, b: any) => { - const first = a[sortDescriptor.column]; - const second = b[sortDescriptor.column]; - const cmp: number = first < second ? -1 : first > second ? 1 : 0; - - return sortDescriptor.direction === "descending" ? -cmp : cmp; - }); - }, [sortDescriptor, items]); - - const renderCell = React.useCallback( - (provider: Provider, columnKey: keyof Provider) => { - // eslint-disable-next-line security/detect-object-injection - const cellValue = provider[columnKey]; - - switch (columnKey) { - case "account": - return ( - - ); - case "group": - return ( -
-

{cellValue}

-

- {provider.group} -

-
- ); - case "scan_status": - return ( - - {cellValue} - - ); - case "actions": - return ( -
- - - - - - Manage - Delete - - -
- ); - default: - return cellValue; - } - }, - [], - ); - - const onRowsPerPageChange = React.useCallback( - (e: React.ChangeEvent) => { - setRowsPerPage(Number(e.target.value)); - setPage(1); - }, - [], - ); - - const onSearchChange = React.useCallback((value: string) => { - if (value) { - setFilterValue(value); - setPage(1); - } else { - setFilterValue(""); - } - }, []); - - const topContent = React.useMemo(() => { - return ( -
-
- {/* } - value={filterValue} - variant="bordered" - onClear={() => setFilterValue("")} - onValueChange={onSearchChange} - /> */} -
- {/* - - - - - {statusOptions.map((status) => ( - - {capitalize(status.name)} - - ))} - - - - - - - - {columns.map((column) => ( - - {capitalize(column.name)} - - ))} - - */} - -
-
-
- - Total {providers.length} entries - - {items.length < initialRowsPerPage &&
hi hi que pasa
} - -
-
- ); - }, [ - filterValue, - statusFilter, - visibleColumns, - onSearchChange, - onRowsPerPageChange, - providers.length, - hasSearchFilter, - ]); - - const bottomContent = React.useMemo(() => { - return ( -
- - {/* {selectionMode !== "none" && ( - - {selectedKeys === "all" - ? "All items selected" - : `${selectedKeys.size} of ${items.length} selected`} - - )} */} -
- ); - }, [selectedKeys, items.length, page, pages, hasSearchFilter]); - - const classNames = React.useMemo( - () => ({ - wrapper: ["max-h-[382px]", "max-w-3xl"], - th: ["bg-transparent", "text-default-500", "border-b", "border-divider"], - td: [ - // changing the rows border radius - // first - "group-data-[first=true]:first:before:rounded-none", - "group-data-[first=true]:last:before:rounded-none", - // middle - "group-data-[middle=true]:before:rounded-none", - // last - "group-data-[last=true]:first:before:rounded-none", - "group-data-[last=true]:last:before:rounded-none", - ], - }), - [], - ); - - return ( - - - {(column) => ( - - {column.name} - - )} - - - {(item) => { - return ( - - {(columnKey) => ( - // @ts-expect-error: Disable type checking for this line - {renderCell(item, columnKey)} - )} - - ); - }} - -
- ); -}; From 0035c8c08e23c9669f805a3084e866716089746f Mon Sep 17 00:00:00 2001 From: Pablo Lara Date: Mon, 29 Jul 2024 12:26:25 +0200 Subject: [PATCH 09/17] refactor: improve sidebar display behavior adding a custom hook --- components/index.ts | 7 ++-- components/ui/sidebar/SidebarWrap.tsx | 29 ++++++----------- hooks/index.ts | 1 + hooks/useLocalStorage.ts | 46 +++++++++++++++++++++++++++ 4 files changed, 61 insertions(+), 22 deletions(-) create mode 100644 hooks/index.ts create mode 100644 hooks/useLocalStorage.ts diff --git a/components/index.ts b/components/index.ts index 0d1a39d806..f4acf6e356 100644 --- a/components/index.ts +++ b/components/index.ts @@ -1,7 +1,10 @@ -export * from "./providers/AccountInfo"; export * from "./providers/DateWithTime"; +export * from "./providers/ProviderInfo"; export * from "./providers/ScanStatus"; +export * from "./providers/table/columns"; +export * from "./providers/table/DataTable"; export * from "./ui/header/Header"; export * from "./ui/modal"; export * from "./ui/sidebar"; -export * from "./ui/table/CustomTable"; +export * from "./ui/table/StatusBadge"; +export * from "./ui/table/Table"; diff --git a/components/ui/sidebar/SidebarWrap.tsx b/components/ui/sidebar/SidebarWrap.tsx index e68958a446..bca4d50a36 100644 --- a/components/ui/sidebar/SidebarWrap.tsx +++ b/components/ui/sidebar/SidebarWrap.tsx @@ -4,9 +4,11 @@ import { Icon } from "@iconify/react"; import { Button, ScrollShadow, Spacer, Tooltip } from "@nextui-org/react"; import clsx from "clsx"; import { usePathname } from "next/navigation"; -import React, { useCallback, useEffect, useState } from "react"; +import React, { useCallback } from "react"; import { useMediaQuery } from "usehooks-ts"; +import { useLocalStorage } from "@/hooks/useLocalStorage"; + import { ProwlerExtended, ProwlerShort, @@ -17,31 +19,18 @@ import { sectionItemsWithTeams } from "./SidebarItems"; import { UserAvatar } from "./UserAvatar"; export const SidebarWrap = () => { - const [isCollapsed, setIsCollapsed] = useState( - !!localStorage.getItem("isCollapsed") ?? true, - ); - const pathname = usePathname(); - const currentPath = pathname === "/" ? "overview" : pathname.split("/")?.[1]; + const [isCollapsed, setIsCollapsed] = useLocalStorage("isCollapsed", true); const isMobile = useMediaQuery("(max-width: 768px)"); - const isCompact = isCollapsed || isMobile; - - useEffect(() => { - const savedState = localStorage.getItem("isCollapsed"); - if (savedState !== null) { - setIsCollapsed(JSON.parse(savedState)); - } - }, []); + const isCompact = Boolean(isCollapsed) || isMobile; const onToggle = useCallback(() => { - setIsCollapsed((prev) => { - const newState = !prev; - localStorage.setItem("isCollapsed", JSON.stringify(newState)); - return newState; - }); - }, []); + setIsCollapsed(!isCollapsed); + }, [isCollapsed]); + + const currentPath = pathname === "/" ? "overview" : pathname.split("/")?.[1]; return (
string | boolean), + ) => void, +] => { + const [state, setState] = useState(initialValue); + + useEffect(() => { + try { + const value = window.localStorage.getItem(key); + + if (value) { + setState(JSON.parse(value)); + } + } catch (error) { + console.log(error); + } + }, [key]); + + const setValue = ( + value: string | boolean | ((val: string | boolean) => string | boolean), + ) => { + try { + // If the passed value is a callback function, + // then call it with the existing state. + const valueToStore = + typeof value === "function" + ? (value as (val: string | boolean) => string | boolean)(state) + : value; + window.localStorage.setItem(key, JSON.stringify(valueToStore)); + setState(valueToStore); + } catch (error) { + console.log(error); + } + }; + + return [state, setValue]; +}; From 9fd642fe0e42cdd724ad42f7f007acdfcd10a605 Mon Sep 17 00:00:00 2001 From: Pablo Lara Date: Mon, 29 Jul 2024 12:41:02 +0200 Subject: [PATCH 10/17] feat: the Providers table is rendering real data --- app/(prowler)/providers/page.tsx | 49 +++----- components/index.ts | 2 +- components/providers/DateWithTime.tsx | 2 +- .../providers/table/ColumnsProviders.tsx | 111 +++++++++++++++++ components/providers/table/DataTable.tsx | 109 ++++++++++++++++ components/ui/table/StatusBadge.tsx | 25 ++++ components/ui/table/Table.tsx | 117 ++++++++++++++++++ lib/actions/provider.actions.ts | 3 +- 8 files changed, 385 insertions(+), 33 deletions(-) create mode 100644 components/providers/table/ColumnsProviders.tsx create mode 100644 components/providers/table/DataTable.tsx create mode 100644 components/ui/table/StatusBadge.tsx create mode 100644 components/ui/table/Table.tsx diff --git a/app/(prowler)/providers/page.tsx b/app/(prowler)/providers/page.tsx index d3cd8c1611..2301d26738 100644 --- a/app/(prowler)/providers/page.tsx +++ b/app/(prowler)/providers/page.tsx @@ -1,20 +1,11 @@ import { Spacer } from "@nextui-org/react"; import React from "react"; -import { CustomTable, Header, ModalWrap } from "@/components"; +import { ColumnsProviders, DataTable, Header, ModalWrap } from "@/components"; +import { getProvider } from "@/lib/actions"; -const visibleColumns: string[] = [ - "account", - "group", - "scan_status", - "last_scan", - "next_scan", - "resources", - "added", - "actions", -]; - -export default function Providers() { +export default async function Providers() { + const providers = await getProvider(); const onSave = async () => { "use server"; // event we want to pass down, ex. console.log("### hello"); @@ -24,23 +15,21 @@ export default function Providers() { <>
- - - -

Modal body content

- - } - actionButtonLabel="Save" - onAction={onSave} - openButtonLabel="Open Modal" - /> +
+ +

Modal body content

+ + } + actionButtonLabel="Save" + onAction={onSave} + openButtonLabel="Add Cloud Accounts" + /> + + +
); } diff --git a/components/index.ts b/components/index.ts index f4acf6e356..faa5b19c57 100644 --- a/components/index.ts +++ b/components/index.ts @@ -1,7 +1,7 @@ export * from "./providers/DateWithTime"; export * from "./providers/ProviderInfo"; export * from "./providers/ScanStatus"; -export * from "./providers/table/columns"; +export * from "./providers/table/ColumnsProviders"; export * from "./providers/table/DataTable"; export * from "./ui/header/Header"; export * from "./ui/modal"; diff --git a/components/providers/DateWithTime.tsx b/components/providers/DateWithTime.tsx index 9895483e31..1e968fae3f 100644 --- a/components/providers/DateWithTime.tsx +++ b/components/providers/DateWithTime.tsx @@ -16,7 +16,7 @@ export const DateWithTime: React.FC = ({ return (
-
+
{formattedDate} {showTime && ( {formattedTime} diff --git a/components/providers/table/ColumnsProviders.tsx b/components/providers/table/ColumnsProviders.tsx new file mode 100644 index 0000000000..c362d95f27 --- /dev/null +++ b/components/providers/table/ColumnsProviders.tsx @@ -0,0 +1,111 @@ +"use client"; + +import { + Button, + Dropdown, + DropdownItem, + DropdownMenu, + DropdownTrigger, +} from "@nextui-org/react"; +import { ColumnDef } from "@tanstack/react-table"; +import { add } from "date-fns"; + +import { VerticalDotsIcon } from "@/components/icons"; +import { StatusBadge } from "@/components/ui/table/StatusBadge"; +import { ProviderProps } from "@/types"; + +import { DateWithTime } from "../DateWithTime"; +import { ProviderInfo } from "../ProviderInfo"; + +export const ColumnsProviders: ColumnDef[] = [ + { + header: "ID", + cell: ({ row }) =>

{row.index + 1}

, + }, + { + accessorKey: "account", + header: "Account", + cell: ({ row }) => { + const provider = row.original; + return ( + + ); + }, + }, + { + accessorKey: "status", + header: "Scan Status", + cell: ({ row }) => { + const provider = row.original; + return ; + }, + }, + { + accessorKey: "lastScan", + header: "Last Scan", + cell: ({ row }) => { + const provider = row.original; + return ; + }, + }, + { + accessorKey: "nextScan", + header: "Next Scan", + cell: ({ row }) => { + const provider = row.original; + const nextDay = add(new Date(provider.attributes.updated_at), { + hours: 24, + }); + return ; + }, + }, + { + accessorKey: "resources", + header: "Resources", + cell: ({ row }) => { + const provider = row.original; + return

{provider.attributes.resources}

; + }, + }, + { + accessorKey: "added", + header: "Added", + cell: ({ row }) => { + const provider = row.original; + return ( + + ); + }, + }, + { + accessorKey: "actions", + header: () =>
Actions
, + id: "actions", + cell: () => { + // const provider = row.original; + return ( +
+ + + + + + Manage + Delete + + +
+ ); + }, + }, +]; diff --git a/components/providers/table/DataTable.tsx b/components/providers/table/DataTable.tsx new file mode 100644 index 0000000000..cfcf74ff2a --- /dev/null +++ b/components/providers/table/DataTable.tsx @@ -0,0 +1,109 @@ +"use client"; + +import { Button } from "@nextui-org/react"; +import { + ColumnDef, + flexRender, + getCoreRowModel, + getPaginationRowModel, + useReactTable, +} from "@tanstack/react-table"; + +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@/components/ui/table/Table"; + +interface DataTableProps { + columns: ColumnDef[]; + data: TData[]; +} + +export function DataTable({ + columns, + data, +}: DataTableProps) { + const table = useReactTable({ + data, + columns, + getCoreRowModel: getCoreRowModel(), + getPaginationRowModel: getPaginationRowModel(), + }); + + return ( + <> +
+ + + {table.getHeaderGroups().map((headerGroup) => ( + + {headerGroup.headers.map((header) => { + return ( + + {header.isPlaceholder + ? null + : flexRender( + header.column.columnDef.header, + header.getContext(), + )} + + ); + })} + + ))} + + + {table.getRowModel().rows?.length ? ( + table.getRowModel().rows.map((row) => ( + + {row.getVisibleCells().map((cell) => ( + + {flexRender( + cell.column.columnDef.cell, + cell.getContext(), + )} + + ))} + + )) + ) : ( + + + No results. + + + )} + +
+
+
+ + +
+ + ); +} diff --git a/components/ui/table/StatusBadge.tsx b/components/ui/table/StatusBadge.tsx new file mode 100644 index 0000000000..a1dea200aa --- /dev/null +++ b/components/ui/table/StatusBadge.tsx @@ -0,0 +1,25 @@ +import { Chip } from "@nextui-org/react"; +import React from "react"; + +type Status = "completed" | "pending" | "cancelled"; + +export const statusColorMap: Record = + { + completed: "success", + pending: "warning", + cancelled: "danger", + }; + +export const StatusBadge = ({ status }: { status: Status }) => { + return ( + + {status} + + ); +}; diff --git a/components/ui/table/Table.tsx b/components/ui/table/Table.tsx new file mode 100644 index 0000000000..cdc1f5cfe6 --- /dev/null +++ b/components/ui/table/Table.tsx @@ -0,0 +1,117 @@ +import * as React from "react"; + +import { cn } from "@/lib/utils"; + +const Table = React.forwardRef< + HTMLTableElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+ + +)); +Table.displayName = "Table"; + +const TableHeader = React.forwardRef< + HTMLTableSectionElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( + +)); +TableHeader.displayName = "TableHeader"; + +const TableBody = React.forwardRef< + HTMLTableSectionElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( + +)); +TableBody.displayName = "TableBody"; + +const TableFooter = React.forwardRef< + HTMLTableSectionElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( + tr]:last:border-b-0 dark:bg-slate-800/50", + className, + )} + {...props} + /> +)); +TableFooter.displayName = "TableFooter"; + +const TableRow = React.forwardRef< + HTMLTableRowElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( + +)); +TableRow.displayName = "TableRow"; + +const TableHead = React.forwardRef< + HTMLTableCellElement, + React.ThHTMLAttributes +>(({ className, ...props }, ref) => ( +
+)); +TableHead.displayName = "TableHead"; + +const TableCell = React.forwardRef< + HTMLTableCellElement, + React.TdHTMLAttributes +>(({ className, ...props }, ref) => ( + +)); +TableCell.displayName = "TableCell"; + +const TableCaption = React.forwardRef< + HTMLTableCaptionElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)); +TableCaption.displayName = "TableCaption"; + +export { + Table, + TableBody, + TableCaption, + TableCell, + TableFooter, + TableHead, + TableHeader, + TableRow, +}; diff --git a/lib/actions/provider.actions.ts b/lib/actions/provider.actions.ts index 02cb2578e9..12ee153dc1 100644 --- a/lib/actions/provider.actions.ts +++ b/lib/actions/provider.actions.ts @@ -3,8 +3,9 @@ import "server-only"; import { parseStringify } from "../utils"; export const getProvider = async () => { + const key = process.env.LOCAL_SITE_URL; try { - const providers = await fetch("http://localhost:3000/api/providers"); + const providers = await fetch(`${key}/api/providers`); const data = await providers.json(); return parseStringify(data); } catch (error) { From 86a4938b5f145d30993a2bcdb265287fe1b7f8d1 Mon Sep 17 00:00:00 2001 From: Pablo Lara Date: Tue, 30 Jul 2024 05:48:18 +0200 Subject: [PATCH 11/17] chore: set the default valuef or isCollapse to false --- components/ui/sidebar/SidebarWrap.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/ui/sidebar/SidebarWrap.tsx b/components/ui/sidebar/SidebarWrap.tsx index bca4d50a36..325e284f15 100644 --- a/components/ui/sidebar/SidebarWrap.tsx +++ b/components/ui/sidebar/SidebarWrap.tsx @@ -20,7 +20,7 @@ import { UserAvatar } from "./UserAvatar"; export const SidebarWrap = () => { const pathname = usePathname(); - const [isCollapsed, setIsCollapsed] = useLocalStorage("isCollapsed", true); + const [isCollapsed, setIsCollapsed] = useLocalStorage("isCollapsed", false); const isMobile = useMediaQuery("(max-width: 768px)"); From fd9cff939298c44a5b5084399a239f88f8214d29 Mon Sep 17 00:00:00 2001 From: Pablo Lara Date: Tue, 30 Jul 2024 06:21:25 +0200 Subject: [PATCH 12/17] chore: Added a helper function getProviderAttributes for cleaner access to provider attributes --- .../providers/table/ColumnsProviders.tsx | 41 +++++++++---------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/components/providers/table/ColumnsProviders.tsx b/components/providers/table/ColumnsProviders.tsx index c362d95f27..3701b68e2a 100644 --- a/components/providers/table/ColumnsProviders.tsx +++ b/components/providers/table/ColumnsProviders.tsx @@ -17,6 +17,10 @@ import { ProviderProps } from "@/types"; import { DateWithTime } from "../DateWithTime"; import { ProviderInfo } from "../ProviderInfo"; +const getProviderAttributes = (row: { original: ProviderProps }) => { + return row.original.attributes; +}; + export const ColumnsProviders: ColumnDef[] = [ { header: "ID", @@ -26,13 +30,14 @@ export const ColumnsProviders: ColumnDef[] = [ accessorKey: "account", header: "Account", cell: ({ row }) => { - const provider = row.original; + const { connection, provider, alias, provider_id } = + getProviderAttributes(row); return ( ); }, @@ -41,24 +46,24 @@ export const ColumnsProviders: ColumnDef[] = [ accessorKey: "status", header: "Scan Status", cell: ({ row }) => { - const provider = row.original; - return ; + const { status } = getProviderAttributes(row); + return ; }, }, { accessorKey: "lastScan", header: "Last Scan", cell: ({ row }) => { - const provider = row.original; - return ; + const { updated_at } = getProviderAttributes(row); + return ; }, }, { accessorKey: "nextScan", header: "Next Scan", cell: ({ row }) => { - const provider = row.original; - const nextDay = add(new Date(provider.attributes.updated_at), { + const { updated_at } = getProviderAttributes(row); + const nextDay = add(new Date(updated_at), { hours: 24, }); return ; @@ -68,21 +73,16 @@ export const ColumnsProviders: ColumnDef[] = [ accessorKey: "resources", header: "Resources", cell: ({ row }) => { - const provider = row.original; - return

{provider.attributes.resources}

; + const { resources } = getProviderAttributes(row); + return

{resources}

; }, }, { accessorKey: "added", header: "Added", cell: ({ row }) => { - const provider = row.original; - return ( - - ); + const { inserted_at } = getProviderAttributes(row); + return ; }, }, { @@ -90,7 +90,6 @@ export const ColumnsProviders: ColumnDef[] = [ header: () =>
Actions
, id: "actions", cell: () => { - // const provider = row.original; return (
From 9d66a7ec4a11dc5447975b373b6a0a78194055e6 Mon Sep 17 00:00:00 2001 From: Pablo Lara Date: Tue, 30 Jul 2024 12:54:52 +0200 Subject: [PATCH 13/17] feat: handle error when the endpoint is not working --- app/(prowler)/providers/page.tsx | 5 ++++- lib/actions/provider.actions.ts | 7 ++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/app/(prowler)/providers/page.tsx b/app/(prowler)/providers/page.tsx index 2301d26738..d51901ef7b 100644 --- a/app/(prowler)/providers/page.tsx +++ b/app/(prowler)/providers/page.tsx @@ -28,7 +28,10 @@ export default async function Providers() { openButtonLabel="Add Cloud Accounts" /> - +
); diff --git a/lib/actions/provider.actions.ts b/lib/actions/provider.actions.ts index 12ee153dc1..c1973f0917 100644 --- a/lib/actions/provider.actions.ts +++ b/lib/actions/provider.actions.ts @@ -4,11 +4,16 @@ import { parseStringify } from "../utils"; export const getProvider = async () => { const key = process.env.LOCAL_SITE_URL; + + if (!key) return undefined; + try { const providers = await fetch(`${key}/api/providers`); + const data = await providers.json(); + return parseStringify(data); } catch (error) { - console.log(error); + return undefined; } }; From 3fa614341ff93ca51ac33c4c4cbf47ea73ab6ad7 Mon Sep 17 00:00:00 2001 From: Pablo Lara Date: Tue, 30 Jul 2024 17:25:58 +0200 Subject: [PATCH 14/17] fix: fix typo error --- lib/actions/provider.actions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/actions/provider.actions.ts b/lib/actions/provider.actions.ts index 2b2a0dab82..c1973f0917 100644 --- a/lib/actions/provider.actions.ts +++ b/lib/actions/provider.actions.ts @@ -8,7 +8,7 @@ export const getProvider = async () => { if (!key) return undefined; try { - const providers = await fetch(`${key}/api/proiders`); + const providers = await fetch(`${key}/api/providers`); const data = await providers.json(); From 0a0a08b97d64bf237ad8975784eb59d651d1c7ef Mon Sep 17 00:00:00 2001 From: Pablo Lara Date: Wed, 31 Jul 2024 08:50:31 +0200 Subject: [PATCH 15/17] chore: remove SWR library from the project and add alert from shadcn --- package.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index c0dd46c781..65480a62fd 100644 --- a/package.json +++ b/package.json @@ -3,9 +3,12 @@ "@nextui-org/react": "^2.4.2", "@nextui-org/system": "2.2.1", "@nextui-org/theme": "2.2.5", + "@radix-ui/react-icons": "^1.3.0", "@react-aria/ssr": "3.9.4", "@react-aria/visually-hidden": "3.8.12", "@tanstack/react-table": "^8.19.3", + "add": "^2.0.6", + "alert": "^6.0.2", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", "date-fns": "^3.6.0", @@ -17,7 +20,7 @@ "react": "18.3.1", "react-dom": "18.3.1", "server-only": "^0.0.1", - "swr": "^2.2.5", + "shadcn-ui": "^0.8.0", "tailwind-merge": "^2.4.0", "tailwindcss-animate": "^1.0.7" }, From ddf9a3ef2d89386d255b7f16bfe5ecd60c5297b6 Mon Sep 17 00:00:00 2001 From: Pablo Lara Date: Wed, 31 Jul 2024 08:55:02 +0200 Subject: [PATCH 16/17] feat: implement error boundary functionality --- app/(prowler)/error.tsx | 36 +++++++++++++++++++ app/(prowler)/layout.tsx | 2 +- app/(prowler)/providers/page.tsx | 2 +- app/error.tsx | 31 ----------------- components/icons/Icons.tsx | 22 ++++++++++++ components/index.ts | 1 + components/ui/alert/Alert.tsx | 59 ++++++++++++++++++++++++++++++++ lib/utils.ts | 15 ++++---- tailwind.config.js | 31 +++++++++++++---- 9 files changed, 154 insertions(+), 45 deletions(-) create mode 100644 app/(prowler)/error.tsx delete mode 100644 app/error.tsx create mode 100644 components/ui/alert/Alert.tsx diff --git a/app/(prowler)/error.tsx b/app/(prowler)/error.tsx new file mode 100644 index 0000000000..fd8468f123 --- /dev/null +++ b/app/(prowler)/error.tsx @@ -0,0 +1,36 @@ +"use client"; + +import Link from "next/link"; +import { useEffect } from "react"; + +import { Alert, AlertDescription, AlertTitle } from "@/components"; +import { RocketIcon } from "@/components/icons"; + +export default function Error({ + error, + // reset, +}: { + error: Error; + reset: () => void; +}) { + useEffect(() => { + // Log the error to an error reporting service + /* eslint-disable no-console */ + console.error(error); + }, [error]); + + return ( + + + An unexpected error occurred + + We're sorry for the inconvenience. Please try again or contact support + if the problem persists. + + + {" "} + Go to the homepage + + + ); +} diff --git a/app/(prowler)/layout.tsx b/app/(prowler)/layout.tsx index 13319c3540..6ef0e1aaa4 100644 --- a/app/(prowler)/layout.tsx +++ b/app/(prowler)/layout.tsx @@ -3,7 +3,7 @@ import "@/styles/globals.css"; import { Metadata, Viewport } from "next"; import React from "react"; -import { SidebarWrap } from "@/components"; +import { SidebarWrap } from "@/components/ui/sidebar"; import { fontSans } from "@/config/fonts"; import { siteConfig } from "@/config/site"; import { cn } from "@/lib/utils"; diff --git a/app/(prowler)/providers/page.tsx b/app/(prowler)/providers/page.tsx index d51901ef7b..4301b83e37 100644 --- a/app/(prowler)/providers/page.tsx +++ b/app/(prowler)/providers/page.tsx @@ -30,7 +30,7 @@ export default async function Providers() { diff --git a/app/error.tsx b/app/error.tsx deleted file mode 100644 index 9ed5104e8a..0000000000 --- a/app/error.tsx +++ /dev/null @@ -1,31 +0,0 @@ -"use client"; - -import { useEffect } from "react"; - -export default function Error({ - error, - reset, -}: { - error: Error; - reset: () => void; -}) { - useEffect(() => { - // Log the error to an error reporting service - /* eslint-disable no-console */ - console.error(error); - }, [error]); - - return ( -
-

Something went wrong!

- -
- ); -} diff --git a/components/icons/Icons.tsx b/components/icons/Icons.tsx index 9b79a7c35d..aca8d6fc4d 100644 --- a/components/icons/Icons.tsx +++ b/components/icons/Icons.tsx @@ -270,3 +270,25 @@ export const WifiOffIcon: React.FC = ({ /> ); + +export const RocketIcon: React.FC = ({ + size = 24, + width, + height, + ...props +}) => { + return ( + + + + ); +}; diff --git a/components/index.ts b/components/index.ts index faa5b19c57..cc6a14b022 100644 --- a/components/index.ts +++ b/components/index.ts @@ -3,6 +3,7 @@ export * from "./providers/ProviderInfo"; export * from "./providers/ScanStatus"; export * from "./providers/table/ColumnsProviders"; export * from "./providers/table/DataTable"; +export * from "./ui/alert/Alert"; export * from "./ui/header/Header"; export * from "./ui/modal"; export * from "./ui/sidebar"; diff --git a/components/ui/alert/Alert.tsx b/components/ui/alert/Alert.tsx new file mode 100644 index 0000000000..7f6fb50705 --- /dev/null +++ b/components/ui/alert/Alert.tsx @@ -0,0 +1,59 @@ +import { cva, type VariantProps } from "class-variance-authority"; +import * as React from "react"; + +import { cn } from "@/lib/utils"; + +const alertVariants = cva( + "relative w-full rounded-lg border border-slate-200 px-4 py-3 text-sm [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-slate-950 [&>svg~*]:pl-7 dark:border-slate-800 dark:[&>svg]:text-slate-50", + { + variants: { + variant: { + default: "bg-white text-slate-950 dark:bg-slate-950 dark:text-slate-50", + destructive: + "border-red-500/50 text-red-500 dark:border-red-500 [&>svg]:text-red-500 dark:border-red-900/50 dark:text-red-900 dark:dark:border-red-900 dark:[&>svg]:text-red-900", + }, + }, + defaultVariants: { + variant: "default", + }, + }, +); + +const Alert = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes & VariantProps +>(({ className, variant, ...props }, ref) => ( +
+)); +Alert.displayName = "Alert"; + +const AlertTitle = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)); +AlertTitle.displayName = "AlertTitle"; + +const AlertDescription = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)); +AlertDescription.displayName = "AlertDescription"; + +export { Alert, AlertDescription, AlertTitle }; diff --git a/lib/utils.ts b/lib/utils.ts index 261f2865a8..c3e96dd8df 100644 --- a/lib/utils.ts +++ b/lib/utils.ts @@ -5,16 +5,15 @@ export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)); } -export function capitalize(str: string): string { - return str.charAt(0).toUpperCase() + str.slice(1); -} - export const parseStringify = (value: any) => JSON.parse(JSON.stringify(value)); export const convertFileToUrl = (file: File) => URL.createObjectURL(file); // FORMAT DATE TIME -export const formatDateTime = (dateString: Date | string) => { +export const formatDateTime = ( + dateString: Date | string, + timeZone: string = Intl.DateTimeFormat().resolvedOptions().timeZone, +) => { const dateTimeOptions: Intl.DateTimeFormatOptions = { // weekday: "short", // abbreviated weekday name (e.g., 'Mon') month: "short", // abbreviated month name (e.g., 'Oct') @@ -22,7 +21,8 @@ export const formatDateTime = (dateString: Date | string) => { year: "numeric", // numeric year (e.g., '2023') hour: "numeric", // numeric hour (e.g., '8') minute: "numeric", // numeric minute (e.g., '30') - hour12: true, // use 12-hour clock (true) or 24-hour clock (false) + hour12: true, // use 12-hour clock (true) or 24-hour clock (false), + timeZone: timeZone, // use the provided timezone }; const dateDayOptions: Intl.DateTimeFormatOptions = { @@ -30,18 +30,21 @@ export const formatDateTime = (dateString: Date | string) => { year: "numeric", // numeric year (e.g., '2023') month: "2-digit", // abbreviated month name (e.g., 'Oct') day: "2-digit", // numeric day of the month (e.g., '25') + timeZone: timeZone, // use the provided timezone }; const dateOptions: Intl.DateTimeFormatOptions = { month: "short", // abbreviated month name (e.g., 'Oct') year: "numeric", // numeric year (e.g., '2023') day: "numeric", // numeric day of the month (e.g., '25') + timeZone: timeZone, // use the provided timezone }; const timeOptions: Intl.DateTimeFormatOptions = { hour: "numeric", // numeric hour (e.g., '8') minute: "numeric", // numeric minute (e.g., '30') hour12: true, // use 12-hour clock (true) or 24-hour clock (false) + timeZone: timeZone, // use the provided timezone }; const formattedDateTime: string = new Date(dateString).toLocaleString( diff --git a/tailwind.config.js b/tailwind.config.js index 5a6f937328..ac42eb57ec 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -2,22 +2,41 @@ import { nextui } from "@nextui-org/theme"; /** @type {import('tailwindcss').Config} */ module.exports = { + darkMode: ["class"], content: [ - "./components/**/*.{js,ts,jsx,tsx,mdx}", - "./app/**/*.{js,ts,jsx,tsx,mdx}", + "./components/**/*.{ts,jsx,tsx,mdx}", + "./app/**/*.{ts,jsx,tsx,mdx}", "./node_modules/@nextui-org/theme/dist/**/*.{js,ts,jsx,tsx}", ], + prefix: "", theme: { + container: { + center: true, + padding: "2rem", + screens: { + "2xl": "1400px", + }, + }, extend: { fontFamily: { sans: ["var(--font-sans)"], mono: ["var(--font-geist-mono)"], }, - height: { - "dvh-minus-16": "calc(100dvh - 116px)", + keyframes: { + "accordion-down": { + from: { height: "0" }, + to: { height: "var(--radix-accordion-content-height)" }, + }, + "accordion-up": { + from: { height: "var(--radix-accordion-content-height)" }, + to: { height: "0" }, + }, + }, + animation: { + "accordion-down": "accordion-down 0.2s ease-out", + "accordion-up": "accordion-up 0.2s ease-out", }, }, }, - darkMode: "class", - plugins: [nextui()], + plugins: [require("tailwindcss-animate"), nextui()], }; From 92e88674f6869f8f7b1d696f6c4789f92fe52c1e Mon Sep 17 00:00:00 2001 From: Pablo Lara Date: Wed, 31 Jul 2024 21:56:05 +0200 Subject: [PATCH 17/17] feat: update TypeScript to the latest version and remove library not used for icons --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index 65480a62fd..caad2dcdb8 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,6 @@ "@nextui-org/react": "^2.4.2", "@nextui-org/system": "2.2.1", "@nextui-org/theme": "2.2.5", - "@radix-ui/react-icons": "^1.3.0", "@react-aria/ssr": "3.9.4", "@react-aria/visually-hidden": "3.8.12", "@tanstack/react-table": "^8.19.3", @@ -49,7 +48,7 @@ "postcss": "8.4.38", "tailwind-variants": "0.1.20", "tailwindcss": "3.4.3", - "typescript": "5.0.4", + "typescript": "^5.5.4", "usehooks-ts": "^3.1.0" }, "name": "prowler-next-app",