diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/credits-setup.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/credits-setup.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/credits-setup.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/credits-setup.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/expiration-setup.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/expiration-setup.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/expiration-setup.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/expiration-setup.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/external-id-field/index.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/external-id-field/index.tsx similarity index 95% rename from apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/external-id-field/index.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/external-id-field/index.tsx index b8ac28a5d7..8387d0cc33 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/external-id-field/index.tsx +++ b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/external-id-field/index.tsx @@ -1,6 +1,6 @@ -import { useCreateIdentity } from "@/app/(app)/apis/[apiId]/_components/create-key/hooks/use-create-identity"; -import { useFetchIdentities } from "@/app/(app)/apis/[apiId]/_components/create-key/hooks/use-fetch-identities"; -import { createIdentityOptions } from "@/app/(app)/apis/[apiId]/_components/create-key/hooks/use-fetch-identities/create-identity-options"; +import { useCreateIdentity } from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/hooks/use-create-identity"; +import { useFetchIdentities } from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/hooks/use-fetch-identities"; +import { createIdentityOptions } from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/hooks/use-fetch-identities/create-identity-options"; import { FormCombobox } from "@/components/ui/form-combobox"; import type { Identity } from "@unkey/db"; import { TriangleWarning2 } from "@unkey/icons"; diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/external-id-field/use-search-identities.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/external-id-field/use-search-identities.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/external-id-field/use-search-identities.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/external-id-field/use-search-identities.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/general-setup.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/general-setup.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/general-setup.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/general-setup.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/key-created-success-dialog.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/key-created-success-dialog.tsx similarity index 97% rename from apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/key-created-success-dialog.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/key-created-success-dialog.tsx index acbc49b68e..c16827df6b 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/key-created-success-dialog.tsx +++ b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/key-created-success-dialog.tsx @@ -2,6 +2,7 @@ import { ConfirmPopover } from "@/components/confirmation-popover"; import { Dialog, DialogContent } from "@/components/ui/dialog"; +import { useWorkspace } from "@/providers/workspace-provider"; import { ArrowRight, Check, Key2, Plus } from "@unkey/icons"; import { Button, InfoTooltip, toast } from "@unkey/ui"; import { useRouter } from "next/navigation"; @@ -24,13 +25,13 @@ export const KeyCreatedSuccessDialog = ({ keyspaceId?: string | null; onCreateAnother?: () => void; }) => { + const { workspace } = useWorkspace(); const [isConfirmOpen, setIsConfirmOpen] = useState(false); const [pendingAction, setPendingAction] = useState< "close" | "create-another" | "go-to-details" | null >(null); const dividerRef = useRef(null); const router = useRouter(); - // Prevent accidental tab/window close when dialog is open useEffect(() => { if (!isOpen) { @@ -90,7 +91,7 @@ export const KeyCreatedSuccessDialog = ({ }); return; } - router.push(`/apis/${apiId}/keys/${keyspaceId}/${keyData.id}`); + router.push(`/${workspace?.slug}/apis/${apiId}/keys/${keyspaceId}/${keyData.id}`); break; default: diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/key-secret-section.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/key-secret-section.tsx similarity index 96% rename from apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/key-secret-section.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/key-secret-section.tsx index 6e7c952b1c..473be1875f 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/key-secret-section.tsx +++ b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/key-secret-section.tsx @@ -1,6 +1,6 @@ "use client"; -import { SecretKey } from "@/app/(app)/apis/[apiId]/_components/create-key/components/secret-key"; +import { SecretKey } from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/secret-key"; import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert"; import { CircleInfo } from "@unkey/icons"; import { Code, CopyButton, VisibleButton } from "@unkey/ui"; diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/metadata-setup.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/metadata-setup.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/metadata-setup.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/metadata-setup.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/protection-switch.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/protection-switch.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/protection-switch.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/protection-switch.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/ratelimit-setup.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/ratelimit-setup.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/ratelimit-setup.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/ratelimit-setup.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/secret-key.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/secret-key.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/secret-key.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/secret-key.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/section-label.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/section-label.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/section-label.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/section-label.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/create-key.constants.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/create-key.constants.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/create-key.constants.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/create-key.constants.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/create-key.schema.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/create-key.schema.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/create-key.schema.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/create-key.schema.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/create-key.utils.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/create-key.utils.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/create-key.utils.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/create-key.utils.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/hooks/use-create-identity.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/hooks/use-create-identity.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/hooks/use-create-identity.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/hooks/use-create-identity.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/hooks/use-create-key.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/hooks/use-create-key.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/hooks/use-create-key.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/hooks/use-create-key.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/hooks/use-fetch-identities/create-identity-options.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/hooks/use-fetch-identities/create-identity-options.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/hooks/use-fetch-identities/create-identity-options.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/hooks/use-fetch-identities/create-identity-options.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/hooks/use-fetch-identities/index.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/hooks/use-fetch-identities/index.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/hooks/use-fetch-identities/index.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/hooks/use-fetch-identities/index.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/hooks/use-validate-steps.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/hooks/use-validate-steps.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/hooks/use-validate-steps.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/hooks/use-validate-steps.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/index.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/index.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/index.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/index.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/types.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/types.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/types.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_components/create-key/types.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_overview/components/charts/bar-chart/hooks/use-fetch-timeseries.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/charts/bar-chart/hooks/use-fetch-timeseries.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_overview/components/charts/bar-chart/hooks/use-fetch-timeseries.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/charts/bar-chart/hooks/use-fetch-timeseries.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_overview/components/charts/bar-chart/query-timeseries.schema.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/charts/bar-chart/query-timeseries.schema.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_overview/components/charts/bar-chart/query-timeseries.schema.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/charts/bar-chart/query-timeseries.schema.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_overview/components/charts/bar-chart/utils.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/charts/bar-chart/utils.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_overview/components/charts/bar-chart/utils.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/charts/bar-chart/utils.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_overview/components/charts/index.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/charts/index.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_overview/components/charts/index.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/charts/index.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_overview/components/charts/line-chart/hooks/use-fetch-timeseries.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/charts/line-chart/hooks/use-fetch-timeseries.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_overview/components/charts/line-chart/hooks/use-fetch-timeseries.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/charts/line-chart/hooks/use-fetch-timeseries.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_overview/components/control-cloud/index.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/control-cloud/index.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_overview/components/control-cloud/index.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/control-cloud/index.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_overview/components/controls/components/logs-datetime/index.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/controls/components/logs-datetime/index.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_overview/components/controls/components/logs-datetime/index.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/controls/components/logs-datetime/index.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_overview/components/controls/components/logs-filters/index.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/controls/components/logs-filters/index.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_overview/components/controls/components/logs-filters/index.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/controls/components/logs-filters/index.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_overview/components/controls/components/logs-filters/outcome-filter.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/controls/components/logs-filters/outcome-filter.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_overview/components/controls/components/logs-filters/outcome-filter.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/controls/components/logs-filters/outcome-filter.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_overview/components/controls/components/logs-refresh.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/controls/components/logs-refresh.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_overview/components/controls/components/logs-refresh.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/controls/components/logs-refresh.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_overview/components/controls/components/logs-search/index.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/controls/components/logs-search/index.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_overview/components/controls/components/logs-search/index.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/controls/components/logs-search/index.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_overview/components/controls/index.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/controls/index.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_overview/components/controls/index.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/controls/index.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_overview/components/table/components/log-details/components/log-header.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/table/components/log-details/components/log-header.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_overview/components/table/components/log-details/components/log-header.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/table/components/log-details/components/log-header.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_overview/components/table/components/log-details/components/log-outcome-distribution-section.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/table/components/log-details/components/log-outcome-distribution-section.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_overview/components/table/components/log-details/components/log-outcome-distribution-section.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/table/components/log-details/components/log-outcome-distribution-section.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_overview/components/table/components/log-details/components/log-section.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/table/components/log-details/components/log-section.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_overview/components/table/components/log-details/components/log-section.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/table/components/log-details/components/log-section.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_overview/components/table/components/log-details/components/roles-permissions.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/table/components/log-details/components/roles-permissions.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_overview/components/table/components/log-details/components/roles-permissions.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/table/components/log-details/components/roles-permissions.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_overview/components/table/components/log-details/index.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/table/components/log-details/index.tsx similarity index 95% rename from apps/dashboard/app/(app)/apis/[apiId]/_overview/components/table/components/log-details/index.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/table/components/log-details/index.tsx index 08d663cc6c..5f7a10689e 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/_overview/components/table/components/log-details/index.tsx +++ b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/table/components/log-details/index.tsx @@ -1,6 +1,7 @@ "use client"; import { DEFAULT_DRAGGABLE_WIDTH } from "@/app/(app)/logs/constants"; import { ResizablePanel } from "@/components/logs/details/resizable-panel"; +import { useWorkspace } from "@/providers/workspace-provider"; import type { KeysOverviewLog } from "@unkey/clickhouse/src/keys/keys"; import { TimestampInfo } from "@unkey/ui"; import Link from "next/link"; @@ -37,8 +38,8 @@ export const KeysOverviewLogDetails = ({ setSelectedLog, apiId, }: KeysOverviewLogDetailsProps) => { + const { workspace } = useWorkspace(); const panelStyle = useMemo(() => createPanelStyle(distanceToTop), [distanceToTop]); - if (!log) { return null; } @@ -68,7 +69,7 @@ export const KeysOverviewLogDetails = ({
{log.key_id}
diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_overview/components/table/components/outcome-popover.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/table/components/outcome-popover.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_overview/components/table/components/outcome-popover.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/table/components/outcome-popover.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_overview/components/table/components/override-indicator.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/table/components/override-indicator.tsx similarity index 89% rename from apps/dashboard/app/(app)/apis/[apiId]/_overview/components/table/components/override-indicator.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/table/components/override-indicator.tsx index 4afcf97a09..9417eb2977 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/_overview/components/table/components/override-indicator.tsx +++ b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/table/components/override-indicator.tsx @@ -1,6 +1,7 @@ "use client"; import { shortenId } from "@/lib/shorten-id"; import { cn } from "@/lib/utils"; +import { useWorkspace } from "@/providers/workspace-provider"; import type { KeysOverviewLog } from "@unkey/clickhouse/src/keys/keys"; import { TriangleWarning2 } from "@unkey/icons"; import { InfoTooltip, Loading } from "@unkey/ui"; @@ -44,11 +45,11 @@ const getWarningMessage = (severity: string, errorRate: number) => { }; export const KeyIdentifierColumn = ({ log, apiId, onNavigate }: KeyIdentifierColumnProps) => { + const { workspace } = useWorkspace(); const router = useRouter(); const errorPercentage = getErrorPercentage(log); const severity = getErrorSeverity(log); const hasErrors = severity !== "none"; - const [isNavigating, setIsNavigating] = useState(false); const handleLinkClick = useCallback( @@ -58,9 +59,11 @@ export const KeyIdentifierColumn = ({ log, apiId, onNavigate }: KeyIdentifierCol onNavigate?.(); - router.push(`/apis/${apiId}/keys/${log.key_details?.key_auth_id}/${log.key_id}`); + router.push( + `/${workspace?.slug}/apis/${apiId}/keys/${log.key_details?.key_auth_id}/${log.key_id}`, + ); }, - [apiId, log.key_id, log.key_details?.key_auth_id, onNavigate, router.push], + [apiId, log.key_id, log.key_details?.key_auth_id, onNavigate, router.push, workspace?.slug], ); return ( @@ -83,7 +86,7 @@ export const KeyIdentifierColumn = ({ log, apiId, onNavigate }: KeyIdentifierCol
diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_overview/components/table/hooks/use-logs-query.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/table/hooks/use-logs-query.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_overview/components/table/hooks/use-logs-query.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/table/hooks/use-logs-query.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_overview/components/table/logs-table.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/table/logs-table.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_overview/components/table/logs-table.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/table/logs-table.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_overview/components/table/query-logs.schema.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/table/query-logs.schema.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_overview/components/table/query-logs.schema.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/table/query-logs.schema.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_overview/components/table/utils/calculate-blocked-percentage.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/table/utils/calculate-blocked-percentage.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_overview/components/table/utils/calculate-blocked-percentage.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/table/utils/calculate-blocked-percentage.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_overview/components/table/utils/get-row-class.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/table/utils/get-row-class.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_overview/components/table/utils/get-row-class.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/components/table/utils/get-row-class.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_overview/constants.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/constants.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_overview/constants.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/constants.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_overview/filters.schema.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/filters.schema.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_overview/filters.schema.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/filters.schema.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_overview/hooks/use-filters.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/hooks/use-filters.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_overview/hooks/use-filters.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/hooks/use-filters.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_overview/logs-client.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/logs-client.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_overview/logs-client.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/logs-client.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_overview/utils.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/utils.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/_overview/utils.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/_overview/utils.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/actions.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/actions.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/actions.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/actions.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/api-id-navbar.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/api-id-navbar.tsx similarity index 87% rename from apps/dashboard/app/(app)/apis/[apiId]/api-id-navbar.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/api-id-navbar.tsx index 397a3330c2..8172f02759 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/api-id-navbar.tsx +++ b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/api-id-navbar.tsx @@ -7,8 +7,10 @@ import { Navbar } from "@/components/navigation/navbar"; import { useIsMobile } from "@/hooks/use-mobile"; import { shortenId } from "@/lib/shorten-id"; import { trpc } from "@/lib/trpc/client"; +import { useWorkspace } from "@/providers/workspace-provider"; import { ChevronExpandY, Gear, Nodes, Plus, TaskUnchecked } from "@unkey/icons"; import dynamic from "next/dynamic"; +import { navigation } from "./constants"; import { getKeysTableActionItems } from "./keys/[keyAuthId]/_components/components/table/components/actions/keys-table-action.popover.constants"; const CreateKeyDialog = dynamic( @@ -45,12 +47,13 @@ export const ApisNavbar = ({ text: string; }; }) => { + const { workspace } = useWorkspace(); + const isMobile = useIsMobile(); const trpcUtils = trpc.useUtils(); const { data: layoutData, isLoading } = trpc.api.queryApiKeyDetails.useQuery({ apiId, }); - // Only fetch key data when we have keyspaceId and keyId const shouldFetchKey = Boolean(keyspaceId && keyId); const { @@ -80,12 +83,11 @@ export const ApisNavbar = ({ // Extract the specific key from the response const specificKey = keyData?.keys.find((key) => key.id === keyId); - if (!layoutData || isLoading || (shouldFetchKey && isKeyLoading)) { return ( }> - APIs + APIs
@@ -126,6 +128,10 @@ export const ApisNavbar = ({ const { currentApi, workspaceApis } = layoutData; + // Define base path for API navigation + const base = `/${workspace?.slug}/apis/${currentApi.id}`; + const navItems = navigation(currentApi.id, currentApi.keyAuthId ?? ""); + return ( <>
@@ -133,11 +139,14 @@ export const ApisNavbar = ({ }> {!isMobile && ( <> - + APIs ({ id: api.id, label: api.name, - href: `/apis/${api.id}`, + href: `/${workspace?.slug}/apis/${api.id}`, }))} shortcutKey="N" > @@ -159,23 +168,11 @@ export const ApisNavbar = ({ )} ({ + id: item.segment, + label: item.label, + href: item.href, + }))} >
{activePage?.text ?? ""} @@ -185,7 +182,7 @@ export const ApisNavbar = ({ {specificKey && ( { + const { workspace } = useWorkspace(); + + const base = `/${workspace?.slug}/apis/${apiId}`; + return [ + { + label: "Requests", + href: base, + segment: "requests", + }, + { + label: "Keys", + href: `${base}/keys/${keyAuthId}`, + segment: "keys", + }, + { + label: "Settings", + href: `${base}/settings`, + segment: "settings", + }, + ]; +}; diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/charts/bar-chart/hooks/use-fetch-timeseries.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/charts/bar-chart/hooks/use-fetch-timeseries.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/charts/bar-chart/hooks/use-fetch-timeseries.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/charts/bar-chart/hooks/use-fetch-timeseries.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/charts/bar-chart/query-timeseries.schema.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/charts/bar-chart/query-timeseries.schema.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/charts/bar-chart/query-timeseries.schema.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/charts/bar-chart/query-timeseries.schema.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/charts/bar-chart/utils.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/charts/bar-chart/utils.ts similarity index 90% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/charts/bar-chart/utils.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/charts/bar-chart/utils.ts index 1192437951..7a073e290b 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/charts/bar-chart/utils.ts +++ b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/charts/bar-chart/utils.ts @@ -1,5 +1,5 @@ -import { OUTCOME_BACKGROUND_COLORS } from "@/app/(app)/apis/[apiId]/_overview/constants"; -import { formatOutcomeName } from "@/app/(app)/apis/[apiId]/_overview/utils"; +import { OUTCOME_BACKGROUND_COLORS } from "@/app/(app)/[workspace]/apis/[apiId]/_overview/constants"; +import { formatOutcomeName } from "@/app/(app)/[workspace]/apis/[apiId]/_overview/utils"; import { KEY_VERIFICATION_OUTCOMES } from "@unkey/clickhouse/src/keys/keys"; /** diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/charts/index.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/charts/index.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/charts/index.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/charts/index.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/control-cloud/index.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/control-cloud/index.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/control-cloud/index.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/control-cloud/index.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/controls/components/logs-datetime/index.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/controls/components/logs-datetime/index.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/controls/components/logs-datetime/index.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/controls/components/logs-datetime/index.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/controls/components/logs-filters/index.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/controls/components/logs-filters/index.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/controls/components/logs-filters/index.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/controls/components/logs-filters/index.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/controls/components/logs-filters/outcome-filter.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/controls/components/logs-filters/outcome-filter.tsx similarity index 90% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/controls/components/logs-filters/outcome-filter.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/controls/components/logs-filters/outcome-filter.tsx index 70bb1cd30e..5c60c29145 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/controls/components/logs-filters/outcome-filter.tsx +++ b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/controls/components/logs-filters/outcome-filter.tsx @@ -1,4 +1,7 @@ -import { getOutcomeColor, getOutcomeOptions } from "@/app/(app)/apis/[apiId]/_overview/utils"; +import { + getOutcomeColor, + getOutcomeOptions, +} from "@/app/(app)/[workspace]/apis/[apiId]/_overview/utils"; import { FilterCheckbox } from "@/components/logs/checkbox/filter-checkbox"; import { useFilters } from "../../../../hooks/use-filters"; diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/controls/components/logs-live-switch.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/controls/components/logs-live-switch.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/controls/components/logs-live-switch.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/controls/components/logs-live-switch.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/controls/components/logs-refresh.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/controls/components/logs-refresh.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/controls/components/logs-refresh.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/controls/components/logs-refresh.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/controls/components/logs-search/index.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/controls/components/logs-search/index.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/controls/components/logs-search/index.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/controls/components/logs-search/index.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/controls/index.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/controls/index.tsx similarity index 97% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/controls/index.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/controls/index.tsx index 92f6d9e16f..6e31b79841 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/controls/index.tsx +++ b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/controls/index.tsx @@ -1,4 +1,4 @@ -import { StatusBadge } from "@/app/(app)/apis/[apiId]/settings/components/status-badge"; +import { StatusBadge } from "@/app/(app)/[workspace]/apis/[apiId]/settings/components/status-badge"; import { ControlsContainer, ControlsLeft, diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/components/log-details/components/hooks/use-logs-query.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/components/log-details/components/hooks/use-logs-query.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/components/log-details/components/hooks/use-logs-query.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/components/log-details/components/hooks/use-logs-query.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/components/log-details/index.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/components/log-details/index.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/components/log-details/index.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/components/log-details/index.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/components/status-badge.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/components/status-badge.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/components/status-badge.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/components/status-badge.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/hooks/use-logs-query.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/hooks/use-logs-query.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/hooks/use-logs-query.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/hooks/use-logs-query.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/logs-table.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/logs-table.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/logs-table.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/logs-table.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/query-logs.schema.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/query-logs.schema.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/query-logs.schema.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/query-logs.schema.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/utils/calculate-blocked-percentage.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/utils/calculate-blocked-percentage.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/utils/calculate-blocked-percentage.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/utils/calculate-blocked-percentage.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/utils/get-row-class.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/utils/get-row-class.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/utils/get-row-class.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/utils/get-row-class.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/context/logs.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/context/logs.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/context/logs.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/context/logs.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/filters.schema.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/filters.schema.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/filters.schema.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/filters.schema.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/hooks/use-filters.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/hooks/use-filters.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/hooks/use-filters.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/hooks/use-filters.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/logs-client.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/logs-client.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/logs-client.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/logs-client.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/page.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/page.tsx similarity index 58% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/page.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/page.tsx index c8d29ce0ed..ba2b640b80 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/page.tsx +++ b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/page.tsx @@ -1,5 +1,7 @@ "use client"; +import { useWorkspace } from "@/providers/workspace-provider"; +import { redirect, useRouter } from "next/navigation"; import { ApisNavbar } from "../../../api-id-navbar"; import { KeyDetailsLogsClient } from "./logs-client"; @@ -7,7 +9,14 @@ export default function KeyDetailsPage(props: { params: { apiId: string; keyAuthId: string; keyId: string }; }) { const { apiId, keyAuthId: keyspaceId, keyId } = props.params; + const { workspace, error } = useWorkspace(); + const router = useRouter(); + if (!workspace || error) { + return redirect("/new"); + } + + router.replace(`/${workspace?.slug}/apis/${apiId}/keys/${keyspaceId}/${keyId}`); return (
diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/control-cloud/index.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/control-cloud/index.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/control-cloud/index.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/control-cloud/index.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/controls/components/logs-filters/index.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/controls/components/logs-filters/index.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/controls/components/logs-filters/index.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/controls/components/logs-filters/index.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/controls/components/logs-search/index.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/controls/components/logs-search/index.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/controls/components/logs-search/index.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/controls/components/logs-search/index.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/controls/index.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/controls/index.tsx similarity index 81% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/controls/index.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/controls/index.tsx index 97e8c07861..15b600f26f 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/controls/index.tsx +++ b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/controls/index.tsx @@ -1,4 +1,4 @@ -import { LogsDateTime } from "@/app/(app)/apis/_components/controls/components/logs-datetime"; +import { LogsDateTime } from "@/app/(app)/[workspace]/apis/_components/controls/components/logs-datetime"; import { ControlsContainer, ControlsLeft } from "@/components/logs/controls-container"; import { LogsFilters } from "./components/logs-filters"; import { LogsSearch } from "./components/logs-search"; diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/delete-key.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/delete-key.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/delete-key.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/delete-key.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/disable-key.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/disable-key.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/disable-key.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/disable-key.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-credits/index.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-credits/index.tsx similarity index 95% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-credits/index.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-credits/index.tsx index 4f5287ed61..8862bfd392 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-credits/index.tsx +++ b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-credits/index.tsx @@ -1,8 +1,8 @@ -import { UsageSetup } from "@/app/(app)/apis/[apiId]/_components/create-key/components/credits-setup"; +import { UsageSetup } from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/credits-setup"; import { type CreditsFormValues, creditsSchema, -} from "@/app/(app)/apis/[apiId]/_components/create-key/create-key.schema"; +} from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/create-key.schema"; import type { ActionComponentProps } from "@/components/logs/table-action.popover"; import { usePersistedForm } from "@/hooks/use-persisted-form"; import { trpc } from "@/lib/trpc/client"; diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-credits/utils.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-credits/utils.ts similarity index 82% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-credits/utils.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-credits/utils.ts index 7e39d40da2..fc7f090df5 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-credits/utils.ts +++ b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-credits/utils.ts @@ -1,5 +1,5 @@ -import type { refillSchema } from "@/app/(app)/apis/[apiId]/_components/create-key/create-key.schema"; -import { getDefaultValues } from "@/app/(app)/apis/[apiId]/_components/create-key/create-key.utils"; +import type { refillSchema } from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/create-key.schema"; +import { getDefaultValues } from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/create-key.utils"; import type { KeyDetails } from "@/lib/trpc/routers/api/keys/query-api-keys/schema"; import type { z } from "zod"; diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-expiration/index.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-expiration/index.tsx similarity index 94% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-expiration/index.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-expiration/index.tsx index de87becc7b..53d2d66ef0 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-expiration/index.tsx +++ b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-expiration/index.tsx @@ -1,8 +1,8 @@ -import { ExpirationSetup } from "@/app/(app)/apis/[apiId]/_components/create-key/components/expiration-setup"; +import { ExpirationSetup } from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/expiration-setup"; import { type ExpirationFormValues, expirationSchema, -} from "@/app/(app)/apis/[apiId]/_components/create-key/create-key.schema"; +} from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/create-key.schema"; import type { ActionComponentProps } from "@/components/logs/table-action.popover"; import { usePersistedForm } from "@/hooks/use-persisted-form"; import type { KeyDetails } from "@/lib/trpc/routers/api/keys/query-api-keys/schema"; diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-expiration/utils.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-expiration/utils.ts similarity index 78% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-expiration/utils.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-expiration/utils.ts index 267a265430..9cd90279d5 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-expiration/utils.ts +++ b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-expiration/utils.ts @@ -1,4 +1,4 @@ -import { getDefaultValues } from "@/app/(app)/apis/[apiId]/_components/create-key/create-key.utils"; +import { getDefaultValues } from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/create-key.utils"; import type { KeyDetails } from "@/lib/trpc/routers/api/keys/query-api-keys/schema"; export const getKeyExpirationDefaults = (keyDetails: KeyDetails) => { diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-external-id/index.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-external-id/index.tsx similarity index 97% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-external-id/index.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-external-id/index.tsx index 68974acf67..c661a9ae79 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-external-id/index.tsx +++ b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-external-id/index.tsx @@ -1,4 +1,4 @@ -import { ExternalIdField } from "@/app/(app)/apis/[apiId]/_components/create-key/components/external-id-field"; +import { ExternalIdField } from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/external-id-field"; import { ConfirmPopover } from "@/components/confirmation-popover"; import type { ActionComponentProps } from "@/components/logs/table-action.popover"; import type { KeyDetails } from "@/lib/trpc/routers/api/keys/query-api-keys/schema"; diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-key-name.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-key-name.tsx similarity index 97% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-key-name.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-key-name.tsx index 271910111f..7291c37e78 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-key-name.tsx +++ b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-key-name.tsx @@ -1,4 +1,4 @@ -import { nameSchema } from "@/app/(app)/apis/[apiId]/_components/create-key/create-key.schema"; +import { nameSchema } from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/create-key.schema"; import type { ActionComponentProps } from "@/components/logs/table-action.popover"; import { usePersistedForm } from "@/hooks/use-persisted-form"; import type { KeyDetails } from "@/lib/trpc/routers/api/keys/query-api-keys/schema"; diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-metadata/index.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-metadata/index.tsx similarity index 94% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-metadata/index.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-metadata/index.tsx index 2b3e712a62..2e74e366a8 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-metadata/index.tsx +++ b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-metadata/index.tsx @@ -1,8 +1,8 @@ -import { MetadataSetup } from "@/app/(app)/apis/[apiId]/_components/create-key/components/metadata-setup"; +import { MetadataSetup } from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/metadata-setup"; import { type MetadataFormValues, metadataSchema, -} from "@/app/(app)/apis/[apiId]/_components/create-key/create-key.schema"; +} from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/create-key.schema"; import type { ActionComponentProps } from "@/components/logs/table-action.popover"; import { usePersistedForm } from "@/hooks/use-persisted-form"; import type { KeyDetails } from "@/lib/trpc/routers/api/keys/query-api-keys/schema"; diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-metadata/utils.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-metadata/utils.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-metadata/utils.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-metadata/utils.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-ratelimits/index.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-ratelimits/index.tsx similarity index 94% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-ratelimits/index.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-ratelimits/index.tsx index 67aba0f57f..4f138b674c 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-ratelimits/index.tsx +++ b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-ratelimits/index.tsx @@ -1,8 +1,8 @@ -import { RatelimitSetup } from "@/app/(app)/apis/[apiId]/_components/create-key/components/ratelimit-setup"; +import { RatelimitSetup } from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/ratelimit-setup"; import { type RatelimitFormValues, ratelimitSchema, -} from "@/app/(app)/apis/[apiId]/_components/create-key/create-key.schema"; +} from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/create-key.schema"; import type { ActionComponentProps } from "@/components/logs/table-action.popover"; import { usePersistedForm } from "@/hooks/use-persisted-form"; import type { KeyDetails } from "@/lib/trpc/routers/api/keys/query-api-keys/schema"; diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-ratelimits/utils.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-ratelimits/utils.ts similarity index 83% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-ratelimits/utils.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-ratelimits/utils.ts index 769b833f26..0a35a1b875 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-ratelimits/utils.ts +++ b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-ratelimits/utils.ts @@ -1,4 +1,4 @@ -import { getDefaultValues } from "@/app/(app)/apis/[apiId]/_components/create-key/create-key.utils"; +import { getDefaultValues } from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/create-key.utils"; import type { KeyDetails } from "@/lib/trpc/routers/api/keys/query-api-keys/schema"; export const getKeyRatelimitsDefaults = (keyDetails: KeyDetails) => { diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-permission/create-permission-options.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-permission/create-permission-options.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-permission/create-permission-options.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-permission/create-permission-options.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-permission/hooks/use-fetch-keys-permissions.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-permission/hooks/use-fetch-keys-permissions.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-permission/hooks/use-fetch-keys-permissions.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-permission/hooks/use-fetch-keys-permissions.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-permission/hooks/use-search-keys-permissions.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-permission/hooks/use-search-keys-permissions.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-permission/hooks/use-search-keys-permissions.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-permission/hooks/use-search-keys-permissions.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-permission/permissions-field.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-permission/permissions-field.tsx similarity index 98% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-permission/permissions-field.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-permission/permissions-field.tsx index 7cf5c883d1..08ff1287c1 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-permission/permissions-field.tsx +++ b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-permission/permissions-field.tsx @@ -1,4 +1,4 @@ -import { StatusBadge } from "@/app/(app)/apis/[apiId]/settings/components/status-badge"; +import { StatusBadge } from "@/app/(app)/[workspace]/apis/[apiId]/settings/components/status-badge"; import { SelectedItemsList } from "@/components/selected-item-list"; import { FormCombobox } from "@/components/ui/form-combobox"; import type { KeyPermission, KeyRole } from "@/lib/trpc/routers/key/rbac/connected-roles-and-perms"; diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-role/create-key-options.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-role/create-key-options.tsx similarity index 98% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-role/create-key-options.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-role/create-key-options.tsx index 753cb7dc61..7ad027be23 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-role/create-key-options.tsx +++ b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-role/create-key-options.tsx @@ -1,4 +1,4 @@ -import { StatusBadge } from "@/app/(app)/apis/[apiId]/settings/components/status-badge"; +import { StatusBadge } from "@/app/(app)/[workspace]/apis/[apiId]/settings/components/status-badge"; import { Lock, Tag } from "@unkey/icons"; import { Badge, Button, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@unkey/ui"; diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-role/hooks/use-fetch-keys-roles.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-role/hooks/use-fetch-keys-roles.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-role/hooks/use-fetch-keys-roles.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-role/hooks/use-fetch-keys-roles.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-role/hooks/use-search-keys-roles.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-role/hooks/use-search-keys-roles.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-role/hooks/use-search-keys-roles.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-role/hooks/use-search-keys-roles.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-role/role-field.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-role/role-field.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-role/role-field.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-role/role-field.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/granted-access.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/granted-access.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/granted-access.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/granted-access.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/hooks/use-fetch-permission-slugs.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/hooks/use-fetch-permission-slugs.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/hooks/use-fetch-permission-slugs.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/hooks/use-fetch-permission-slugs.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/index.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/index.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/index.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/index.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/update-key-rbac.schema.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/update-key-rbac.schema.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/update-key-rbac.schema.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/update-key-rbac.schema.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-delete-key.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-delete-key.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-delete-key.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-delete-key.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-credits.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-credits.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-credits.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-credits.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-expiration.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-expiration.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-expiration.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-expiration.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-external-id.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-external-id.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-external-id.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-external-id.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-key.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-key.tsx similarity index 94% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-key.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-key.tsx index 672601bf49..c9ff98693c 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-key.tsx +++ b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-key.tsx @@ -1,4 +1,4 @@ -import { UNNAMED_KEY } from "@/app/(app)/apis/[apiId]/_components/create-key/create-key.constants"; +import { UNNAMED_KEY } from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/create-key.constants"; import { trpc } from "@/lib/trpc/client"; import { toast } from "@unkey/ui"; diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-metadata.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-metadata.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-metadata.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-metadata.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-ratelimits.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-ratelimits.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-ratelimits.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-ratelimits.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-rbac.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-rbac.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-rbac.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-rbac.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-update-key-status.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-update-key-status.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-update-key-status.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-update-key-status.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/key-info.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/key-info.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/key-info.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/key-info.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/keys-table-action.popover.constants.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/keys-table-action.popover.constants.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/keys-table-action.popover.constants.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/keys-table-action.popover.constants.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/bar-chart/components/outcome-explainer.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/bar-chart/components/outcome-explainer.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/bar-chart/components/outcome-explainer.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/bar-chart/components/outcome-explainer.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/bar-chart/index.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/bar-chart/index.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/bar-chart/index.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/bar-chart/index.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/bar-chart/query-timeseries.schema.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/bar-chart/query-timeseries.schema.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/bar-chart/query-timeseries.schema.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/bar-chart/query-timeseries.schema.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/bar-chart/use-fetch-timeseries.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/bar-chart/use-fetch-timeseries.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/bar-chart/use-fetch-timeseries.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/bar-chart/use-fetch-timeseries.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/hidden-value.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/hidden-value.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/hidden-value.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/hidden-value.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/last-used.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/last-used.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/last-used.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/last-used.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/selection-controls/components/batch-edit-external-id.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/selection-controls/components/batch-edit-external-id.tsx similarity index 98% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/selection-controls/components/batch-edit-external-id.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/selection-controls/components/batch-edit-external-id.tsx index 59d648b81a..3fe6db898f 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/selection-controls/components/batch-edit-external-id.tsx +++ b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/selection-controls/components/batch-edit-external-id.tsx @@ -1,4 +1,4 @@ -import { ExternalIdField } from "@/app/(app)/apis/[apiId]/_components/create-key/components/external-id-field"; +import { ExternalIdField } from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/external-id-field"; import { ConfirmPopover } from "@/components/confirmation-popover"; import { TriangleWarning2 } from "@unkey/icons"; import { Button, DialogContainer } from "@unkey/ui"; diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/selection-controls/index.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/selection-controls/index.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/selection-controls/index.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/selection-controls/index.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/skeletons.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/skeletons.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/skeletons.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/skeletons.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/status-cell/components/status-badge.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/status-cell/components/status-badge.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/status-cell/components/status-badge.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/status-cell/components/status-badge.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/status-cell/constants.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/status-cell/constants.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/status-cell/constants.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/status-cell/constants.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/status-cell/index.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/status-cell/index.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/status-cell/index.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/status-cell/index.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/status-cell/query-timeseries.schema.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/status-cell/query-timeseries.schema.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/status-cell/query-timeseries.schema.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/status-cell/query-timeseries.schema.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/status-cell/use-key-status.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/status-cell/use-key-status.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/status-cell/use-key-status.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/status-cell/use-key-status.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/hooks/use-keys-list-query.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/hooks/use-keys-list-query.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/hooks/use-keys-list-query.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/hooks/use-keys-list-query.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/keys-list.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/keys-list.tsx similarity index 98% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/keys-list.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/keys-list.tsx index 5bdfa1f9ed..81f4f5208e 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/keys-list.tsx +++ b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/keys-list.tsx @@ -3,6 +3,7 @@ import { VirtualTable } from "@/components/virtual-table/index"; import type { Column } from "@/components/virtual-table/types"; import { shortenId } from "@/lib/shorten-id"; import type { KeyDetails } from "@/lib/trpc/routers/api/keys/query-api-keys/schema"; +import { useWorkspace } from "@/providers/workspace-provider"; import { BookBookmark, Dots, Focus, Key } from "@unkey/icons"; import { Button, Checkbox, Empty, InfoTooltip, Loading } from "@unkey/ui"; import { cn } from "@unkey/ui/src/lib/utils"; @@ -53,6 +54,7 @@ export const KeysList = ({ keyspaceId: string; apiId: string; }) => { + const { workspace } = useWorkspace(); const { keys, isLoading, isLoadingMore, loadMore, totalCount, hasMore } = useKeysListQuery({ keyAuthId: keyspaceId, }); @@ -62,7 +64,6 @@ export const KeysList = ({ const [selectedKeys, setSelectedKeys] = useState>(new Set()); // Track which row is being hovered const [hoveredKeyId, setHoveredKeyId] = useState(null); - const handleLinkClick = useCallback((keyId: string) => { setNavigatingKeyId(keyId); setSelectedKey(null); @@ -176,7 +177,7 @@ export const KeysList = ({ { handleLinkClick(key.id); @@ -266,6 +267,7 @@ export const KeysList = ({ selectedKeys, toggleSelection, hoveredKeyId, + workspace?.slug, ], ); diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/query-logs.schema.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/query-logs.schema.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/query-logs.schema.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/query-logs.schema.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/utils/get-row-class.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/utils/get-row-class.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/utils/get-row-class.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/utils/get-row-class.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/filters.schema.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/filters.schema.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/filters.schema.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/filters.schema.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/hooks/use-filters.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/hooks/use-filters.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/hooks/use-filters.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/hooks/use-filters.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/keys-client.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/keys-client.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/keys-client.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/keys-client.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/page.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/page.tsx similarity index 56% rename from apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/page.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/page.tsx index 419919b90a..2431000860 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/page.tsx +++ b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/page.tsx @@ -1,4 +1,6 @@ "use client"; +import { useWorkspace } from "@/providers/workspace-provider"; +import { redirect, useRouter } from "next/navigation"; import { ApisNavbar } from "../../api-id-navbar"; import { KeysClient } from "./_components/keys-client"; @@ -9,13 +11,20 @@ export default function APIKeysPage(props: { }; }) { const apiId = props.params.apiId; + const { workspace, error } = useWorkspace(); const keyspaceId = props.params.keyAuthId; + const router = useRouter(); + if (!workspace || error) { + return redirect("/new"); + } + + router.replace(`/${workspace?.slug}/apis/${apiId}/keys/${keyspaceId}`); return (
+ + +
+ ); +} diff --git a/apps/dashboard/app/(app)/apis/[apiId]/settings/actions.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/settings/actions.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/settings/actions.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/settings/actions.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/settings/components/copy-api-id.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/settings/components/copy-api-id.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/settings/components/copy-api-id.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/settings/components/copy-api-id.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/settings/components/default-bytes.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/settings/components/default-bytes.tsx similarity index 92% rename from apps/dashboard/app/(app)/apis/[apiId]/settings/components/default-bytes.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/settings/components/default-bytes.tsx index 8a3ffa6204..6d682eb2d4 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/settings/components/default-bytes.tsx +++ b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/settings/components/default-bytes.tsx @@ -1,6 +1,7 @@ "use client"; import { revalidate } from "@/app/actions"; import { trpc } from "@/lib/trpc/client"; +import { useWorkspace } from "@/providers/workspace-provider"; import { Button, Input, SettingCard } from "@unkey/ui"; import { Controller, useForm } from "react-hook-form"; import { z } from "zod"; @@ -27,7 +28,10 @@ type Props = { export const DefaultBytes: React.FC = ({ keyAuth, apiId }) => { const { onUpdateSuccess, onError } = createMutationHandlers(); - + const { workspace } = useWorkspace(); + if (!workspace) { + return null; + } const { control, handleSubmit, @@ -57,7 +61,7 @@ export const DefaultBytes: React.FC = ({ keyAuth, apiId }) => { } await setDefaultBytes.mutateAsync(values); - revalidate(`/apis/${apiId}/settings`); + revalidate(`/${workspace?.slug}/apis/${apiId}/settings`); } return ( diff --git a/apps/dashboard/app/(app)/apis/[apiId]/settings/components/default-prefix.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/settings/components/default-prefix.tsx similarity index 93% rename from apps/dashboard/app/(app)/apis/[apiId]/settings/components/default-prefix.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/settings/components/default-prefix.tsx index 5ac52e3e8a..80c54dfe5d 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/settings/components/default-prefix.tsx +++ b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/settings/components/default-prefix.tsx @@ -1,6 +1,7 @@ "use client"; import { revalidate } from "@/app/actions"; import { trpc } from "@/lib/trpc/client"; +import { useWorkspace } from "@/providers/workspace-provider"; import { Button, Input, SettingCard } from "@unkey/ui"; import { Controller, useForm } from "react-hook-form"; import { z } from "zod"; @@ -27,7 +28,10 @@ type Props = { export const DefaultPrefix: React.FC = ({ keyAuth, apiId }) => { const { onUpdateSuccess, onError } = createMutationHandlers(); - + const { workspace } = useWorkspace(); + if (!workspace) { + return null; + } const { control, handleSubmit, @@ -57,7 +61,7 @@ export const DefaultPrefix: React.FC = ({ keyAuth, apiId }) => { } await setDefaultPrefix.mutateAsync(values); - revalidate(`/apis/${apiId}/settings`); + revalidate(`/${workspace?.slug}/apis/${apiId}/settings`); } return ( diff --git a/apps/dashboard/app/(app)/apis/[apiId]/settings/components/delete-api.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/settings/components/delete-api.tsx similarity index 99% rename from apps/dashboard/app/(app)/apis/[apiId]/settings/components/delete-api.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/settings/components/delete-api.tsx index e957e67ec7..cf9a621369 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/settings/components/delete-api.tsx +++ b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/settings/components/delete-api.tsx @@ -24,7 +24,6 @@ export const DeleteApi: React.FC = ({ api, keys }) => { const { onDeleteSuccess, onError } = createMutationHandlers(); const [open, setOpen] = useState(false); const router = useRouter(); - const intent = keys > 0 ? `delete this api and ${keys} key${keys > 1 ? "s" : ""}` : "delete this api"; @@ -54,7 +53,7 @@ export const DeleteApi: React.FC = ({ api, keys }) => { const deleteApi = trpc.api.delete.useMutation({ async onSuccess() { onDeleteSuccess(keys)(); - router.push("/apis"); + router.push(`/${api.workspaceId}/apis`); }, onError, }); diff --git a/apps/dashboard/app/(app)/apis/[apiId]/settings/components/delete-protection.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/settings/components/delete-protection.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/settings/components/delete-protection.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/settings/components/delete-protection.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/settings/components/key-settings-form-helper.ts b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/settings/components/key-settings-form-helper.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/settings/components/key-settings-form-helper.ts rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/settings/components/key-settings-form-helper.ts diff --git a/apps/dashboard/app/(app)/apis/[apiId]/settings/components/settings-client.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/settings/components/settings-client.tsx similarity index 99% rename from apps/dashboard/app/(app)/apis/[apiId]/settings/components/settings-client.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/settings/components/settings-client.tsx index 609bae59bd..0508942aab 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/settings/components/settings-client.tsx +++ b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/settings/components/settings-client.tsx @@ -18,7 +18,6 @@ export const SettingsClient = ({ apiId }: { apiId: string }) => { } = trpc.api.queryApiKeyDetails.useQuery({ apiId, }); - if (isLoading) { return ; } diff --git a/apps/dashboard/app/(app)/apis/[apiId]/settings/components/skeleton.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/settings/components/skeleton.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/settings/components/skeleton.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/settings/components/skeleton.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/settings/components/status-badge.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/settings/components/status-badge.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/settings/components/status-badge.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/settings/components/status-badge.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/settings/components/update-api-name.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/settings/components/update-api-name.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/settings/components/update-api-name.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/settings/components/update-api-name.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/settings/components/update-ip-whitelist.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/settings/components/update-ip-whitelist.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/[apiId]/settings/components/update-ip-whitelist.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/settings/components/update-ip-whitelist.tsx diff --git a/apps/dashboard/app/(app)/apis/[apiId]/settings/page.tsx b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/settings/page.tsx similarity index 54% rename from apps/dashboard/app/(app)/apis/[apiId]/settings/page.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/[apiId]/settings/page.tsx index aedeb58734..b5d6ddc21e 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/settings/page.tsx +++ b/apps/dashboard/app/(app)/[workspace]/apis/[apiId]/settings/page.tsx @@ -1,8 +1,9 @@ "use client"; +import { useWorkspace } from "@/providers/workspace-provider"; +import { redirect, useRouter } from "next/navigation"; import { ApisNavbar } from "../api-id-navbar"; import { SettingsClient } from "./components/settings-client"; - type Props = { params: { apiId: string; @@ -11,12 +12,21 @@ type Props = { export default function SettingsPage(props: Props) { const { apiId } = props.params; + const { workspace, error } = useWorkspace(); + const router = useRouter(); + + if (!workspace || error) { + return redirect("/new"); + } + + router.replace(`/${workspace?.slug}/apis/${apiId}/settings`); + return (
diff --git a/apps/dashboard/app/(app)/apis/_components/api-list-card.tsx b/apps/dashboard/app/(app)/[workspace]/apis/_components/api-list-card.tsx similarity index 93% rename from apps/dashboard/app/(app)/apis/_components/api-list-card.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/_components/api-list-card.tsx index fd590f1136..c205d92a00 100644 --- a/apps/dashboard/app/(app)/apis/_components/api-list-card.tsx +++ b/apps/dashboard/app/(app)/[workspace]/apis/_components/api-list-card.tsx @@ -4,16 +4,16 @@ import { StatsTimeseriesBarChart } from "@/components/stats-card/components/char import { MetricStats } from "@/components/stats-card/components/metric-stats"; import { formatNumber } from "@/lib/fmt"; import type { ApiOverview } from "@/lib/trpc/routers/api/overview/query-overview/schemas"; +import { useWorkspace } from "@/providers/workspace-provider"; import { Key, ProgressBar } from "@unkey/icons"; import { useFetchVerificationTimeseries } from "./hooks/use-query-timeseries"; - type Props = { api: ApiOverview; }; export const ApiListCard = ({ api }: Props) => { const { timeseries, isError } = useFetchVerificationTimeseries(api.keyspaceId); - + const { workspace } = useWorkspace(); const passed = timeseries?.reduce((acc, crr) => acc + crr.success, 0) ?? 0; const blocked = timeseries?.reduce((acc, crr) => acc + crr.error, 0) ?? 0; @@ -22,7 +22,7 @@ export const ApiListCard = ({ api }: Props) => { { +export const ApiListClient = ({ workspaceSlug }: { workspaceSlug: string }) => { const router = useRouter(); const searchParams = useSearchParams(); const isNewApi = searchParams?.get("new") === "true"; @@ -112,7 +112,7 @@ export const ApiListClient = () => { {!isSearching && ( - + & Props) => { const [isOpen, setIsOpen] = useState(defaultOpen ?? false); const router = useRouter(); const { api } = trpc.useUtils(); - const { register, handleSubmit, @@ -49,9 +50,9 @@ export const CreateApiButton = ({ const create = trpc.api.create.useMutation({ async onSuccess(res) { toast.success("Your API has been created"); - await revalidate("/apis"); + await revalidate(`/${workspaceSlug}/apis`); api.overview.query.invalidate(); - router.push(`/apis/${res.id}`); + router.push(`/${workspaceSlug}/apis/${res.id}`); setIsOpen(false); }, onError(err) { diff --git a/apps/dashboard/app/(app)/apis/_components/filters.schema.ts b/apps/dashboard/app/(app)/[workspace]/apis/_components/filters.schema.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/_components/filters.schema.ts rename to apps/dashboard/app/(app)/[workspace]/apis/_components/filters.schema.ts diff --git a/apps/dashboard/app/(app)/apis/_components/hooks/query-timeseries.schema.ts b/apps/dashboard/app/(app)/[workspace]/apis/_components/hooks/query-timeseries.schema.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/_components/hooks/query-timeseries.schema.ts rename to apps/dashboard/app/(app)/[workspace]/apis/_components/hooks/query-timeseries.schema.ts diff --git a/apps/dashboard/app/(app)/apis/_components/hooks/use-fetch-api-overview.ts b/apps/dashboard/app/(app)/[workspace]/apis/_components/hooks/use-fetch-api-overview.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/_components/hooks/use-fetch-api-overview.ts rename to apps/dashboard/app/(app)/[workspace]/apis/_components/hooks/use-fetch-api-overview.ts diff --git a/apps/dashboard/app/(app)/apis/_components/hooks/use-filters.ts b/apps/dashboard/app/(app)/[workspace]/apis/_components/hooks/use-filters.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/_components/hooks/use-filters.ts rename to apps/dashboard/app/(app)/[workspace]/apis/_components/hooks/use-filters.ts diff --git a/apps/dashboard/app/(app)/apis/_components/hooks/use-query-timeseries.ts b/apps/dashboard/app/(app)/[workspace]/apis/_components/hooks/use-query-timeseries.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/_components/hooks/use-query-timeseries.ts rename to apps/dashboard/app/(app)/[workspace]/apis/_components/hooks/use-query-timeseries.ts diff --git a/apps/dashboard/app/(app)/apis/_components/skeleton.tsx b/apps/dashboard/app/(app)/[workspace]/apis/_components/skeleton.tsx similarity index 100% rename from apps/dashboard/app/(app)/apis/_components/skeleton.tsx rename to apps/dashboard/app/(app)/[workspace]/apis/_components/skeleton.tsx diff --git a/apps/dashboard/app/(app)/apis/actions.ts b/apps/dashboard/app/(app)/[workspace]/apis/actions.ts similarity index 100% rename from apps/dashboard/app/(app)/apis/actions.ts rename to apps/dashboard/app/(app)/[workspace]/apis/actions.ts diff --git a/apps/dashboard/app/(app)/[workspace]/apis/page.tsx b/apps/dashboard/app/(app)/[workspace]/apis/page.tsx new file mode 100644 index 0000000000..71493c58c4 --- /dev/null +++ b/apps/dashboard/app/(app)/[workspace]/apis/page.tsx @@ -0,0 +1,42 @@ +"use client"; + +import { Navbar } from "@/components/navigation/navbar"; +import { useWorkspace } from "@/providers/workspace-provider"; +import { Nodes } from "@unkey/icons"; +import { useRouter, useSearchParams } from "next/navigation"; +import { ApiListClient } from "./_components/api-list-client"; +import { CreateApiButton } from "./_components/create-api-button"; + +export default function ApisOverviewPage() { + const { workspace, isLoading } = useWorkspace(); + const router = useRouter(); + + const searchParams = useSearchParams(); + const isNewApi = searchParams?.get("new") === "true"; + + if (!workspace && !isLoading) { + router.push("/new"); + } + + return ( + workspace && ( +
+ + }> + + APIs + + + + + + + +
+ ) + ); +} diff --git a/apps/dashboard/app/(app)/[workspace]/page.tsx b/apps/dashboard/app/(app)/[workspace]/page.tsx new file mode 100644 index 0000000000..abdc720d7b --- /dev/null +++ b/apps/dashboard/app/(app)/[workspace]/page.tsx @@ -0,0 +1,23 @@ +"use client"; + +import { useWorkspace } from "@/providers/workspace-provider"; +import { Loading } from "@unkey/ui"; +import { useRouter } from "next/navigation"; + +export default function WorkspacePage() { + const router = useRouter(); + const { workspace, isLoading } = useWorkspace(); + + if (workspace && !isLoading) { + router.replace(`/${workspace.slug}/apis`); + } + + // Show loading state while redirecting + return ( +
+
+ +
+
+ ); +} diff --git a/apps/dashboard/app/(app)/apis/[apiId]/constants.ts b/apps/dashboard/app/(app)/apis/[apiId]/constants.ts deleted file mode 100644 index 9268499db4..0000000000 --- a/apps/dashboard/app/(app)/apis/[apiId]/constants.ts +++ /dev/null @@ -1,17 +0,0 @@ -export const navigation = (apiId: string, keyAuthId: string) => [ - { - label: "Overview", - href: `/apis/${apiId}`, - segment: "overview", - }, - { - label: "Keys", - href: `/apis/${apiId}/keys/${keyAuthId}`, - segment: "keys", - }, - { - label: "API Settings", - href: `/apis/${apiId}/settings`, - segment: "settings", - }, -]; diff --git a/apps/dashboard/app/(app)/apis/[apiId]/page.tsx b/apps/dashboard/app/(app)/apis/[apiId]/page.tsx deleted file mode 100644 index 3fbb896df6..0000000000 --- a/apps/dashboard/app/(app)/apis/[apiId]/page.tsx +++ /dev/null @@ -1,20 +0,0 @@ -"use client"; -import { LogsClient } from "@/app/(app)/apis/[apiId]/_overview/logs-client"; -import { ApisNavbar } from "./api-id-navbar"; - -export default function ApiPage(props: { params: { apiId: string } }) { - const apiId = props.params.apiId; - - return ( -
- - -
- ); -} diff --git a/apps/dashboard/app/(app)/apis/page.tsx b/apps/dashboard/app/(app)/apis/page.tsx deleted file mode 100644 index 8ed99d72cf..0000000000 --- a/apps/dashboard/app/(app)/apis/page.tsx +++ /dev/null @@ -1,28 +0,0 @@ -"use client"; - -import { Navbar } from "@/components/navigation/navbar"; -import { Nodes } from "@unkey/icons"; -import { useSearchParams } from "next/navigation"; -import { ApiListClient } from "./_components/api-list-client"; -import { CreateApiButton } from "./_components/create-api-button"; - -export default function ApisOverviewPage() { - const searchParams = useSearchParams(); - const isNewApi = searchParams?.get("new") === "true"; - - return ( -
- - }> - - APIs - - - - - - - -
- ); -} diff --git a/apps/dashboard/app/(app)/authorization/permissions/components/table/components/selection-controls/index.tsx b/apps/dashboard/app/(app)/authorization/permissions/components/table/components/selection-controls/index.tsx index d8fc0a969f..d6caadecb6 100644 --- a/apps/dashboard/app/(app)/authorization/permissions/components/table/components/selection-controls/index.tsx +++ b/apps/dashboard/app/(app)/authorization/permissions/components/table/components/selection-controls/index.tsx @@ -1,4 +1,4 @@ -import { AnimatedCounter } from "@/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/selection-controls"; +import { AnimatedCounter } from "@/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/selection-controls"; import { ConfirmPopover } from "@/components/confirmation-popover"; import { Trash, XMark } from "@unkey/icons"; import { Button } from "@unkey/ui"; diff --git a/apps/dashboard/app/(app)/authorization/roles/components/table/components/selection-controls/index.tsx b/apps/dashboard/app/(app)/authorization/roles/components/table/components/selection-controls/index.tsx index 068625af5d..8d80b94db9 100644 --- a/apps/dashboard/app/(app)/authorization/roles/components/table/components/selection-controls/index.tsx +++ b/apps/dashboard/app/(app)/authorization/roles/components/table/components/selection-controls/index.tsx @@ -1,4 +1,4 @@ -import { AnimatedCounter } from "@/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/selection-controls"; +import { AnimatedCounter } from "@/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/selection-controls"; import { ConfirmPopover } from "@/components/confirmation-popover"; import { Trash, XMark } from "@unkey/icons"; import { Button } from "@unkey/ui"; diff --git a/apps/dashboard/app/(app)/authorization/roles/components/upsert-role/components/assign-key/create-key-options.tsx b/apps/dashboard/app/(app)/authorization/roles/components/upsert-role/components/assign-key/create-key-options.tsx index 4b6d18a168..a602e35f1b 100644 --- a/apps/dashboard/app/(app)/authorization/roles/components/upsert-role/components/assign-key/create-key-options.tsx +++ b/apps/dashboard/app/(app)/authorization/roles/components/upsert-role/components/assign-key/create-key-options.tsx @@ -1,4 +1,4 @@ -import { StatusBadge } from "@/app/(app)/apis/[apiId]/settings/components/status-badge"; +import { StatusBadge } from "@/app/(app)/[workspace]/apis/[apiId]/settings/components/status-badge"; import { Key2, Lock } from "@unkey/icons"; import { Badge, Button, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@unkey/ui"; diff --git a/apps/dashboard/app/(app)/authorization/roles/components/upsert-role/components/assign-permission/create-permission-options.tsx b/apps/dashboard/app/(app)/authorization/roles/components/upsert-role/components/assign-permission/create-permission-options.tsx index 79dd61fa7b..96c8045497 100644 --- a/apps/dashboard/app/(app)/authorization/roles/components/upsert-role/components/assign-permission/create-permission-options.tsx +++ b/apps/dashboard/app/(app)/authorization/roles/components/upsert-role/components/assign-permission/create-permission-options.tsx @@ -1,4 +1,4 @@ -import { StatusBadge } from "@/app/(app)/apis/[apiId]/settings/components/status-badge"; +import { StatusBadge } from "@/app/(app)/[workspace]/apis/[apiId]/settings/components/status-badge"; import { Lock, Page2 } from "@unkey/icons"; import { Badge, Button, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@unkey/ui"; diff --git a/apps/dashboard/app/(app)/identities/[identityId]/page.tsx b/apps/dashboard/app/(app)/identities/[identityId]/page.tsx index 9baca8075d..99772d14ca 100644 --- a/apps/dashboard/app/(app)/identities/[identityId]/page.tsx +++ b/apps/dashboard/app/(app)/identities/[identityId]/page.tsx @@ -150,7 +150,9 @@ export default async function Page(props: Props) { keyId={key.id} /> - + diff --git a/apps/dashboard/app/(app)/layout.tsx b/apps/dashboard/app/(app)/layout.tsx index 4e5dcf75f3..2b00a67cdb 100644 --- a/apps/dashboard/app/(app)/layout.tsx +++ b/apps/dashboard/app/(app)/layout.tsx @@ -7,7 +7,6 @@ import { Empty } from "@unkey/ui"; import Link from "next/link"; import { redirect } from "next/navigation"; import { QueryTimeProvider } from "../../providers/query-time-provider"; - interface LayoutProps { children: React.ReactNode; } @@ -19,9 +18,6 @@ export default async function Layout({ children }: LayoutProps) { const workspace = await db.query.workspaces.findFirst({ where: (table, { and, eq, isNull }) => and(eq(table.orgId, orgId), isNull(table.deletedAtM)), with: { - apis: { - where: (table, { isNull }) => isNull(table.deletedAtM), - }, quotas: true, }, }); @@ -35,10 +31,7 @@ export default async function Layout({ children }: LayoutProps) {
{/* Desktop Sidebar */} - + {/* Main content area */}
@@ -47,7 +40,7 @@ export default async function Layout({ children }: LayoutProps) { id="layout-wrapper" > {/* Mobile sidebar at the top of content */} - +
{workspace.enabled ? ( diff --git a/apps/dashboard/app/(app)/page.tsx b/apps/dashboard/app/(app)/page.tsx index c9e7886c71..dc12224a43 100644 --- a/apps/dashboard/app/(app)/page.tsx +++ b/apps/dashboard/app/(app)/page.tsx @@ -6,11 +6,18 @@ export const dynamic = "force-dynamic"; export default async function TenantOverviewPage() { const { orgId } = await getAuth(); + + if (!orgId) { + return redirect("/sign-in"); + } + const workspace = await db.query.workspaces.findFirst({ where: (table, { and, eq, isNull }) => and(eq(table.orgId, orgId), isNull(table.deletedAtM)), }); + if (!workspace) { return redirect("/new"); } - return redirect("/apis"); + + return redirect(`/${workspace.slug}/apis`); } diff --git a/apps/dashboard/app/(app)/settings/root-keys/components/root-key/root-key-success.tsx b/apps/dashboard/app/(app)/settings/root-keys/components/root-key/root-key-success.tsx index baf7b69f88..80f65f19ad 100644 --- a/apps/dashboard/app/(app)/settings/root-keys/components/root-key/root-key-success.tsx +++ b/apps/dashboard/app/(app)/settings/root-keys/components/root-key/root-key-success.tsx @@ -1,6 +1,6 @@ "use client"; -import { SecretKey } from "@/app/(app)/apis/[apiId]/_components/create-key/components/secret-key"; +import { SecretKey } from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/secret-key"; import { ConfirmPopover } from "@/components/confirmation-popover"; import { Check, CircleInfo, Key2 } from "@unkey/icons"; import { Dialog, DialogContent } from "@unkey/ui"; diff --git a/apps/dashboard/app/(app)/settings/root-keys/components/table/root-keys-list.tsx b/apps/dashboard/app/(app)/settings/root-keys/components/table/root-keys-list.tsx index e2c51eed01..bef9fc6cd5 100644 --- a/apps/dashboard/app/(app)/settings/root-keys/components/table/root-keys-list.tsx +++ b/apps/dashboard/app/(app)/settings/root-keys/components/table/root-keys-list.tsx @@ -1,5 +1,5 @@ "use client"; -import { HiddenValueCell } from "@/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/hidden-value"; +import { HiddenValueCell } from "@/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/hidden-value"; import { VirtualTable } from "@/components/virtual-table/index"; import type { Column } from "@/components/virtual-table/types"; import type { RootKey } from "@/lib/trpc/routers/settings/root-keys/query"; diff --git a/apps/dashboard/app/layout.tsx b/apps/dashboard/app/layout.tsx index 15e2a42af8..74ec1f3625 100644 --- a/apps/dashboard/app/layout.tsx +++ b/apps/dashboard/app/layout.tsx @@ -1,5 +1,6 @@ import { CommandMenu } from "@/components/dashboard/command-menu"; import { PHProvider, PostHogPageview } from "@/providers/PostHogProvider"; +import { WorkspaceProvider } from "@/providers/workspace-provider"; import { Toaster } from "@unkey/ui"; import "@/styles/tailwind/tailwind.css"; import "@unkey/ui/css"; @@ -58,12 +59,14 @@ export default function RootLayout({ - - {children} - - - - + + + {children} + + + + + diff --git a/apps/dashboard/app/new/components/onboarding-success-step.tsx b/apps/dashboard/app/new/components/onboarding-success-step.tsx index a3c4da5838..8ff697e44b 100644 --- a/apps/dashboard/app/new/components/onboarding-success-step.tsx +++ b/apps/dashboard/app/new/components/onboarding-success-step.tsx @@ -1,6 +1,8 @@ "use client"; -import { KeySecretSection } from "@/app/(app)/apis/[apiId]/_components/create-key/components/key-secret-section"; +import { KeySecretSection } from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/key-secret-section"; import { ConfirmPopover } from "@/components/confirmation-popover"; +import { trpc } from "@/lib/trpc/client"; +import { useWorkspace } from "@/providers/workspace-provider"; import { TriangleWarning } from "@unkey/icons"; import { useRouter, useSearchParams } from "next/navigation"; import { useRef } from "react"; @@ -18,9 +20,10 @@ export const OnboardingSuccessStep = ({ const router = useRouter(); const anchorRef = useRef(null); const searchParams = useSearchParams(); - + const { workspace } = useWorkspace(); const apiId = searchParams?.get(API_ID_PARAM); const key = searchParams?.get(KEY_PARAM); + const utils = trpc.useUtils(); if (!apiId || !key) { return ( @@ -54,8 +57,8 @@ export const OnboardingSuccessStep = ({ onOpenChange={setIsConfirmOpen} onConfirm={() => { setIsConfirmOpen(false); - - router.push("/apis"); + utils.workspace.getCurrent.invalidate(); + router.push(`/${workspace?.slug}/apis`); }} triggerRef={anchorRef} title="You won't see this secret key again!" diff --git a/apps/dashboard/app/new/hooks/use-key-creation-step.tsx b/apps/dashboard/app/new/hooks/use-key-creation-step.tsx index 0ffde675c1..958c1d28d4 100644 --- a/apps/dashboard/app/new/hooks/use-key-creation-step.tsx +++ b/apps/dashboard/app/new/hooks/use-key-creation-step.tsx @@ -1,19 +1,19 @@ -import { UsageSetup } from "@/app/(app)/apis/[apiId]/_components/create-key/components/credits-setup"; -import { ExpirationSetup } from "@/app/(app)/apis/[apiId]/_components/create-key/components/expiration-setup"; -import { GeneralSetup } from "@/app/(app)/apis/[apiId]/_components/create-key/components/general-setup"; +import { UsageSetup } from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/credits-setup"; +import { ExpirationSetup } from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/expiration-setup"; +import { GeneralSetup } from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/general-setup"; import { EXAMPLE_JSON, MetadataSetup, -} from "@/app/(app)/apis/[apiId]/_components/create-key/components/metadata-setup"; -import { RatelimitSetup } from "@/app/(app)/apis/[apiId]/_components/create-key/components/ratelimit-setup"; +} from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/metadata-setup"; +import { RatelimitSetup } from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/components/ratelimit-setup"; import { type FormValues, formSchema, -} from "@/app/(app)/apis/[apiId]/_components/create-key/create-key.schema"; +} from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/create-key.schema"; import { formValuesToApiInput, getDefaultValues, -} from "@/app/(app)/apis/[apiId]/_components/create-key/create-key.utils"; +} from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/create-key.utils"; import { trpc } from "@/lib/trpc/client"; import { zodResolver } from "@hookform/resolvers/zod"; import { CalendarClock, ChartPie, Code, Gauge, Key2, StackPerspective2 } from "@unkey/icons"; diff --git a/apps/dashboard/components/navigation/sidebar/app-sidebar/hooks/use-api-navigation.tsx b/apps/dashboard/components/navigation/sidebar/app-sidebar/hooks/use-api-navigation.tsx index acbaaad112..6db8cb850b 100644 --- a/apps/dashboard/components/navigation/sidebar/app-sidebar/hooks/use-api-navigation.tsx +++ b/apps/dashboard/components/navigation/sidebar/app-sidebar/hooks/use-api-navigation.tsx @@ -1,6 +1,7 @@ "use client"; import type { NavItem } from "@/components/navigation/sidebar/workspace-navigations"; import { trpc } from "@/lib/trpc/client"; +import { useWorkspace } from "@/providers/workspace-provider"; import { ArrowOppositeDirectionY, Gear } from "@unkey/icons"; import { Key } from "lucide-react"; import { useSelectedLayoutSegments } from "next/navigation"; @@ -9,6 +10,7 @@ import { useMemo } from "react"; const DEFAULT_LIMIT = 10; export const useApiNavigation = (baseNavItems: NavItem[]) => { + const { workspace } = useWorkspace(); const segments = useSelectedLayoutSegments() ?? []; const { data, fetchNextPage, hasNextPage, isFetchingNextPage, isLoading } = @@ -34,14 +36,14 @@ export const useApiNavigation = (baseNavItems: NavItem[]) => { const settingsItem: NavItem = { icon: Gear, - href: `/apis/${api.id}/settings`, + href: `/${workspace?.slug}/apis/${api.id}/settings`, label: "Settings", active: currentApiActive && segments.at(2) === "settings", }; const overviewItem: NavItem = { icon: ArrowOppositeDirectionY, - href: `/apis/${api.id}`, + href: `/${workspace?.slug}/apis/${api.id}`, label: "Requests", active: isExactlyApiRoot || (currentApiActive && !segments.at(2)), }; @@ -51,7 +53,7 @@ export const useApiNavigation = (baseNavItems: NavItem[]) => { if (api.keyspaceId) { const keysItem: NavItem = { icon: Key, - href: `/apis/${api.id}/keys/${api.keyspaceId}`, + href: `/${workspace?.slug}/apis/${api.id}/keys/${api.keyspaceId}`, label: "Keys", active: currentApiActive && segments.at(2) === "keys", }; @@ -65,7 +67,7 @@ export const useApiNavigation = (baseNavItems: NavItem[]) => { const apiNavItem: NavItem = { // This is critical - must provide some icon to ensure chevron renders icon: null, - href: `/apis/${api.id}`, + href: `/${workspace?.slug}/apis/${api.id}`, label: api.name, active: currentApiActive, // Always set showSubItems to true to ensure chevron appears @@ -77,11 +79,11 @@ export const useApiNavigation = (baseNavItems: NavItem[]) => { return apiNavItem; }), ); - }, [data?.pages, segments]); + }, [data?.pages, segments, workspace?.slug]); const enhancedNavItems = useMemo(() => { const items = [...baseNavItems]; - const apisItemIndex = items.findIndex((item) => item.href === "/apis"); + const apisItemIndex = items.findIndex((item) => item.href === `/${workspace?.slug}/apis`); if (apisItemIndex !== -1) { const apisItem = { ...items[apisItemIndex] }; @@ -103,7 +105,7 @@ export const useApiNavigation = (baseNavItems: NavItem[]) => { } return items; - }, [baseNavItems, apiNavItems, hasNextPage]); + }, [baseNavItems, apiNavItems, hasNextPage, workspace?.slug]); const loadMore = () => { if (!isFetchingNextPage && hasNextPage) { diff --git a/apps/dashboard/components/navigation/sidebar/app-sidebar/index.tsx b/apps/dashboard/components/navigation/sidebar/app-sidebar/index.tsx index 4a5a49356c..58a04f7b8c 100644 --- a/apps/dashboard/components/navigation/sidebar/app-sidebar/index.tsx +++ b/apps/dashboard/components/navigation/sidebar/app-sidebar/index.tsx @@ -76,10 +76,7 @@ export function AppSidebar({ }, [currentSoloModeType]); // Create base navigation items - const baseNavItems = useMemo( - () => createWorkspaceNavigation(props.workspace, segments), - [props.workspace, segments], - ); + const baseNavItems = useMemo(() => createWorkspaceNavigation(segments), [segments]); const { enhancedNavItems: apiAddedNavItems, loadMore: loadMoreApis } = useApiNavigation(baseNavItems); @@ -139,7 +136,7 @@ export function AppSidebar({ isCollapsed ? "justify-center" : "items-center justify-between gap-4", )} > - + {state !== "collapsed" && !isMobile && (
), - [isCollapsed, props.workspace, state, isMobile, toggleSidebar], + [isCollapsed, state, isMobile, toggleSidebar], ); const currentSoloConfig = currentSoloModeType ? SOLO_MODE_CONFIG[currentSoloModeType] : null; diff --git a/apps/dashboard/components/navigation/sidebar/sidebar-mobile.tsx b/apps/dashboard/components/navigation/sidebar/sidebar-mobile.tsx index 4d45bc6937..a2da203e69 100644 --- a/apps/dashboard/components/navigation/sidebar/sidebar-mobile.tsx +++ b/apps/dashboard/components/navigation/sidebar/sidebar-mobile.tsx @@ -2,12 +2,11 @@ import { WorkspaceSwitcher } from "@/components/navigation/sidebar/team-switcher"; import { UserButton } from "@/components/navigation/sidebar/user-button"; import { useSidebar } from "@/components/ui/sidebar"; -import type { Workspace } from "@unkey/db"; import { SidebarLeftShow } from "@unkey/icons"; import { Button } from "@unkey/ui"; import { HelpButton } from "./help-button"; -export const SidebarMobile = ({ workspace }: { workspace: Workspace }) => { +export const SidebarMobile = () => { const { isMobile, setOpenMobile, state, openMobile } = useSidebar(); if (!isMobile) { @@ -19,7 +18,7 @@ export const SidebarMobile = ({ workspace }: { workspace: Workspace }) => { - +
= (props): JSX.Element => { +export const WorkspaceSwitcher: React.FC = (): JSX.Element => { const router = useRouter(); const utils = trpc.useUtils(); const { isMobile, state } = useSidebar(); - + const { workspace } = useWorkspace(); // Only collapsed in desktop mode, not in mobile mode const isCollapsed = state === "collapsed" && !isMobile; @@ -113,7 +108,7 @@ export const WorkspaceSwitcher: React.FC = (props): JSX.Element => { > - {props.workspace.name.slice(0, 1).toUpperCase()} + {workspace?.name.slice(0, 1).toUpperCase()} {isUserMembershipsLoading ? ( @@ -122,11 +117,11 @@ export const WorkspaceSwitcher: React.FC = (props): JSX.Element => { {props.workspace.name}} + content={{workspace?.name}} className="text-xs font-medium py-2" triggerClassName="overflow-hidden text-sm font-medium text-ellipsis" > - {props.workspace.name} + {workspace?.name} )}
diff --git a/apps/dashboard/components/navigation/sidebar/workspace-navigations.tsx b/apps/dashboard/components/navigation/sidebar/workspace-navigations.tsx index e622001878..aaeddd16d2 100644 --- a/apps/dashboard/components/navigation/sidebar/workspace-navigations.tsx +++ b/apps/dashboard/components/navigation/sidebar/workspace-navigations.tsx @@ -1,4 +1,4 @@ -import type { Workspace } from "@/lib/db"; +import { useWorkspace } from "@/providers/workspace-provider"; import { Cube, Fingerprint, @@ -39,14 +39,13 @@ const Tag: React.FC<{ label: string; className?: string }> = ({ label, className
); -export const createWorkspaceNavigation = ( - workspace: Pick, - segments: string[], -) => { +export const createWorkspaceNavigation = (segments: string[]) => { + const { workspace } = useWorkspace(); + const basePath = `/${workspace?.slug}`; return [ { icon: Nodes, - href: "/apis", + href: `${basePath}/apis`, label: "APIs", active: segments.at(0) === "apis", showSubItems: false, @@ -56,7 +55,7 @@ export const createWorkspaceNavigation = ( href: "/projects", label: "Projects", active: segments.at(0) === "projects", - hidden: !workspace.betaFeatures.deployments, + hidden: !workspace?.betaFeatures.deployments, tag: , }, { @@ -97,7 +96,7 @@ export const createWorkspaceNavigation = ( href: "/monitors/verifications", label: "Monitors", active: segments.at(0) === "verifications", - hidden: !workspace.features.webhooks, + hidden: !workspace?.features.webhooks, }, { icon: Layers3, @@ -111,14 +110,14 @@ export const createWorkspaceNavigation = ( label: "Success", active: segments.at(0) === "success", tag: , - hidden: !workspace.features.successPage, + hidden: !workspace?.features.successPage, }, { icon: Fingerprint, href: "/identities", label: "Identities", active: segments.at(0) === "identities", - hidden: !workspace.betaFeatures.identities, + hidden: !workspace?.betaFeatures.identities, }, { icon: Gear, diff --git a/apps/dashboard/lib/trpc/routers/api/keys/api-query.ts b/apps/dashboard/lib/trpc/routers/api/keys/api-query.ts index 10768233ba..4792db8e7a 100644 --- a/apps/dashboard/lib/trpc/routers/api/keys/api-query.ts +++ b/apps/dashboard/lib/trpc/routers/api/keys/api-query.ts @@ -1,4 +1,4 @@ -import type { KeysOverviewFilterUrlValue } from "@/app/(app)/apis/[apiId]/_overview/filters.schema"; +import type { KeysOverviewFilterUrlValue } from "@/app/(app)/[workspace]/apis/[apiId]/_overview/filters.schema"; import { type InferSelectModel, type SQL, db } from "@/lib/db"; import { TRPCError } from "@trpc/server"; import { identities } from "@unkey/db/src/schema"; diff --git a/apps/dashboard/lib/trpc/routers/api/keys/llm-search-api-keys/utils.ts b/apps/dashboard/lib/trpc/routers/api/keys/llm-search-api-keys/utils.ts index 347cca4893..bf7d1c210c 100644 --- a/apps/dashboard/lib/trpc/routers/api/keys/llm-search-api-keys/utils.ts +++ b/apps/dashboard/lib/trpc/routers/api/keys/llm-search-api-keys/utils.ts @@ -1,7 +1,7 @@ import { filterOutputSchema, keysListFilterFieldConfig, -} from "@/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/filters.schema"; +} from "@/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/filters.schema"; import { TRPCError } from "@trpc/server"; import type OpenAI from "openai"; import { zodResponseFormat } from "openai/helpers/zod.mjs"; diff --git a/apps/dashboard/lib/trpc/routers/api/keys/llm-search/utils.ts b/apps/dashboard/lib/trpc/routers/api/keys/llm-search/utils.ts index 053cdcbf87..65553019bc 100644 --- a/apps/dashboard/lib/trpc/routers/api/keys/llm-search/utils.ts +++ b/apps/dashboard/lib/trpc/routers/api/keys/llm-search/utils.ts @@ -1,7 +1,7 @@ import { filterOutputSchema, keysOverviewFilterFieldConfig, -} from "@/app/(app)/apis/[apiId]/_overview/filters.schema"; +} from "@/app/(app)/[workspace]/apis/[apiId]/_overview/filters.schema"; import { TRPCError } from "@trpc/server"; import { KEY_VERIFICATION_OUTCOMES } from "@unkey/clickhouse/src/keys/keys"; import type OpenAI from "openai"; diff --git a/apps/dashboard/lib/trpc/routers/api/keys/query-active-keys-timeseries/index.ts b/apps/dashboard/lib/trpc/routers/api/keys/query-active-keys-timeseries/index.ts index 07f44b2635..6d5c862d1c 100644 --- a/apps/dashboard/lib/trpc/routers/api/keys/query-active-keys-timeseries/index.ts +++ b/apps/dashboard/lib/trpc/routers/api/keys/query-active-keys-timeseries/index.ts @@ -1,4 +1,4 @@ -import { keysOverviewQueryTimeseriesPayload } from "@/app/(app)/apis/[apiId]/_overview/components/charts/bar-chart/query-timeseries.schema"; +import { keysOverviewQueryTimeseriesPayload } from "@/app/(app)/[workspace]/apis/[apiId]/_overview/components/charts/bar-chart/query-timeseries.schema"; import { clickhouse } from "@/lib/clickhouse"; import { ratelimit, requireUser, requireWorkspace, t, withRatelimit } from "@/lib/trpc/trpc"; import { TRPCError } from "@trpc/server"; diff --git a/apps/dashboard/lib/trpc/routers/api/keys/query-api-keys/get-all-keys.ts b/apps/dashboard/lib/trpc/routers/api/keys/query-api-keys/get-all-keys.ts index a21ed5d3a3..626a9a1f3a 100644 --- a/apps/dashboard/lib/trpc/routers/api/keys/query-api-keys/get-all-keys.ts +++ b/apps/dashboard/lib/trpc/routers/api/keys/query-api-keys/get-all-keys.ts @@ -1,4 +1,4 @@ -import type { AllOperatorsUrlValue } from "@/app/(app)/apis/[apiId]/_overview/filters.schema"; +import type { AllOperatorsUrlValue } from "@/app/(app)/[workspace]/apis/[apiId]/_overview/filters.schema"; import { clickhouse } from "@/lib/clickhouse"; import { type SQL, db, like, or } from "@/lib/db"; import { TRPCError } from "@trpc/server"; diff --git a/apps/dashboard/lib/trpc/routers/api/keys/query-api-keys/index.ts b/apps/dashboard/lib/trpc/routers/api/keys/query-api-keys/index.ts index 799d39b10e..d34acdcef4 100644 --- a/apps/dashboard/lib/trpc/routers/api/keys/query-api-keys/index.ts +++ b/apps/dashboard/lib/trpc/routers/api/keys/query-api-keys/index.ts @@ -1,4 +1,4 @@ -import { keysQueryListPayload } from "@/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/query-logs.schema"; +import { keysQueryListPayload } from "@/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/query-logs.schema"; import { ratelimit, requireUser, requireWorkspace, t, withRatelimit } from "@/lib/trpc/trpc"; import { z } from "zod"; import { getAllKeys } from "./get-all-keys"; diff --git a/apps/dashboard/lib/trpc/routers/api/keys/query-key-usage-timeseries/index.ts b/apps/dashboard/lib/trpc/routers/api/keys/query-key-usage-timeseries/index.ts index c2a47aac9b..1847ee9106 100644 --- a/apps/dashboard/lib/trpc/routers/api/keys/query-key-usage-timeseries/index.ts +++ b/apps/dashboard/lib/trpc/routers/api/keys/query-key-usage-timeseries/index.ts @@ -1,4 +1,4 @@ -import { keysListQueryTimeseriesPayload } from "@/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/bar-chart/query-timeseries.schema"; +import { keysListQueryTimeseriesPayload } from "@/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/bar-chart/query-timeseries.schema"; import { clickhouse } from "@/lib/clickhouse"; import { ratelimit, requireUser, requireWorkspace, t, withRatelimit } from "@/lib/trpc/trpc"; import { TRPCError } from "@trpc/server"; diff --git a/apps/dashboard/lib/trpc/routers/api/keys/query-overview-logs/index.ts b/apps/dashboard/lib/trpc/routers/api/keys/query-overview-logs/index.ts index 282f7a7928..d365c94033 100644 --- a/apps/dashboard/lib/trpc/routers/api/keys/query-overview-logs/index.ts +++ b/apps/dashboard/lib/trpc/routers/api/keys/query-overview-logs/index.ts @@ -1,4 +1,4 @@ -import { keysQueryOverviewLogsPayload } from "@/app/(app)/apis/[apiId]/_overview/components/table/query-logs.schema"; +import { keysQueryOverviewLogsPayload } from "@/app/(app)/[workspace]/apis/[apiId]/_overview/components/table/query-logs.schema"; import { clickhouse } from "@/lib/clickhouse"; import { ratelimit, requireUser, requireWorkspace, t, withRatelimit } from "@/lib/trpc/trpc"; import { TRPCError } from "@trpc/server"; diff --git a/apps/dashboard/lib/trpc/routers/api/keys/query-overview-logs/utils.ts b/apps/dashboard/lib/trpc/routers/api/keys/query-overview-logs/utils.ts index 0e30e0b5a1..c32cca6a5b 100644 --- a/apps/dashboard/lib/trpc/routers/api/keys/query-overview-logs/utils.ts +++ b/apps/dashboard/lib/trpc/routers/api/keys/query-overview-logs/utils.ts @@ -1,4 +1,4 @@ -import type { KeysQueryOverviewLogsPayload } from "@/app/(app)/apis/[apiId]/_overview/components/table/query-logs.schema"; +import type { KeysQueryOverviewLogsPayload } from "@/app/(app)/[workspace]/apis/[apiId]/_overview/components/table/query-logs.schema"; import { getTimestampFromRelative } from "@/lib/utils"; import type { KeysOverviewLogsParams } from "@unkey/clickhouse/src/keys/keys"; diff --git a/apps/dashboard/lib/trpc/routers/api/keys/query-overview-timeseries/index.ts b/apps/dashboard/lib/trpc/routers/api/keys/query-overview-timeseries/index.ts index 78a71fe234..d68096c7e9 100644 --- a/apps/dashboard/lib/trpc/routers/api/keys/query-overview-timeseries/index.ts +++ b/apps/dashboard/lib/trpc/routers/api/keys/query-overview-timeseries/index.ts @@ -1,5 +1,5 @@ -import { keysOverviewQueryTimeseriesPayload } from "@/app/(app)/apis/[apiId]/_overview/components/charts/bar-chart/query-timeseries.schema"; -import type { KeysOverviewFilterUrlValue } from "@/app/(app)/apis/[apiId]/_overview/filters.schema"; +import { keysOverviewQueryTimeseriesPayload } from "@/app/(app)/[workspace]/apis/[apiId]/_overview/components/charts/bar-chart/query-timeseries.schema"; +import type { KeysOverviewFilterUrlValue } from "@/app/(app)/[workspace]/apis/[apiId]/_overview/filters.schema"; import { clickhouse } from "@/lib/clickhouse"; import { ratelimit, requireUser, requireWorkspace, t, withRatelimit } from "@/lib/trpc/trpc"; import { TRPCError } from "@trpc/server"; diff --git a/apps/dashboard/lib/trpc/routers/api/keys/timeseries.utils.ts b/apps/dashboard/lib/trpc/routers/api/keys/timeseries.utils.ts index a7447ac4a0..d068c00f8f 100644 --- a/apps/dashboard/lib/trpc/routers/api/keys/timeseries.utils.ts +++ b/apps/dashboard/lib/trpc/routers/api/keys/timeseries.utils.ts @@ -1,4 +1,4 @@ -import type { KeysOverviewQueryTimeseriesPayload } from "@/app/(app)/apis/[apiId]/_overview/components/charts/bar-chart/query-timeseries.schema"; +import type { KeysOverviewQueryTimeseriesPayload } from "@/app/(app)/[workspace]/apis/[apiId]/_overview/components/charts/bar-chart/query-timeseries.schema"; import { getTimestampFromRelative } from "@/lib/utils"; import type { VerificationTimeseriesParams } from "@unkey/clickhouse/src/verifications"; import { diff --git a/apps/dashboard/lib/trpc/routers/api/overview-api-search.ts b/apps/dashboard/lib/trpc/routers/api/overview-api-search.ts index 068071ccdc..a10645252f 100644 --- a/apps/dashboard/lib/trpc/routers/api/overview-api-search.ts +++ b/apps/dashboard/lib/trpc/routers/api/overview-api-search.ts @@ -1,4 +1,4 @@ -import { apiItemsWithApproxKeyCounts } from "@/app/(app)/apis/actions"; +import { apiItemsWithApproxKeyCounts } from "@/app/(app)/[workspace]/apis/actions"; import { db, sql } from "@/lib/db"; import { z } from "zod"; import { ratelimit, requireUser, requireWorkspace, t, withRatelimit } from "../../trpc"; diff --git a/apps/dashboard/lib/trpc/routers/api/overview/query-overview/index.ts b/apps/dashboard/lib/trpc/routers/api/overview/query-overview/index.ts index d3d298c174..05adb8645e 100644 --- a/apps/dashboard/lib/trpc/routers/api/overview/query-overview/index.ts +++ b/apps/dashboard/lib/trpc/routers/api/overview/query-overview/index.ts @@ -1,4 +1,4 @@ -import { fetchApiOverview } from "@/app/(app)/apis/actions"; +import { fetchApiOverview } from "@/app/(app)/[workspace]/apis/actions"; import { ratelimit, requireUser, requireWorkspace, t, withRatelimit } from "@/lib/trpc/trpc"; import { TRPCError } from "@trpc/server"; diff --git a/apps/dashboard/lib/trpc/routers/api/overview/query-timeseries/index.ts b/apps/dashboard/lib/trpc/routers/api/overview/query-timeseries/index.ts index 52f859a36d..cd0878bad4 100644 --- a/apps/dashboard/lib/trpc/routers/api/overview/query-timeseries/index.ts +++ b/apps/dashboard/lib/trpc/routers/api/overview/query-timeseries/index.ts @@ -1,4 +1,4 @@ -import { verificationQueryTimeseriesPayload } from "@/app/(app)/apis/_components/hooks/query-timeseries.schema"; +import { verificationQueryTimeseriesPayload } from "@/app/(app)/[workspace]/apis/_components/hooks/query-timeseries.schema"; import { clickhouse } from "@/lib/clickhouse"; import { ratelimit, requireUser, requireWorkspace, t, withRatelimit } from "@/lib/trpc/trpc"; diff --git a/apps/dashboard/lib/trpc/routers/api/overview/query-timeseries/utils.ts b/apps/dashboard/lib/trpc/routers/api/overview/query-timeseries/utils.ts index 4c294e6752..8d8d5ce628 100644 --- a/apps/dashboard/lib/trpc/routers/api/overview/query-timeseries/utils.ts +++ b/apps/dashboard/lib/trpc/routers/api/overview/query-timeseries/utils.ts @@ -1,4 +1,4 @@ -import type { VerificationQueryTimeseriesPayload } from "@/app/(app)/apis/_components/hooks/query-timeseries.schema"; +import type { VerificationQueryTimeseriesPayload } from "@/app/(app)/[workspace]/apis/_components/hooks/query-timeseries.schema"; import { getTimestampFromRelative } from "@/lib/utils"; import type { VerificationTimeseriesParams } from "@unkey/clickhouse/src/verifications"; import { diff --git a/apps/dashboard/lib/trpc/routers/api/setDefaultBytes.ts b/apps/dashboard/lib/trpc/routers/api/setDefaultBytes.ts index 037b9314a3..6f03835204 100644 --- a/apps/dashboard/lib/trpc/routers/api/setDefaultBytes.ts +++ b/apps/dashboard/lib/trpc/routers/api/setDefaultBytes.ts @@ -1,4 +1,4 @@ -import { keyBytesSchema } from "@/app/(app)/apis/[apiId]/_components/create-key/create-key.schema"; +import { keyBytesSchema } from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/create-key.schema"; import { insertAuditLogs } from "@/lib/audit"; import { db, eq, schema } from "@/lib/db"; import { TRPCError } from "@trpc/server"; diff --git a/apps/dashboard/lib/trpc/routers/api/setDefaultPrefix.ts b/apps/dashboard/lib/trpc/routers/api/setDefaultPrefix.ts index 61d5d1791b..23abdf05cc 100644 --- a/apps/dashboard/lib/trpc/routers/api/setDefaultPrefix.ts +++ b/apps/dashboard/lib/trpc/routers/api/setDefaultPrefix.ts @@ -1,7 +1,7 @@ import { TRPCError } from "@trpc/server"; import { z } from "zod"; -import { keyPrefixSchema } from "@/app/(app)/apis/[apiId]/_components/create-key/create-key.schema"; +import { keyPrefixSchema } from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/create-key.schema"; import { insertAuditLogs } from "@/lib/audit"; import { db, eq, schema } from "@/lib/db"; import { requireUser, requireWorkspace, t } from "../../trpc"; diff --git a/apps/dashboard/lib/trpc/routers/index.ts b/apps/dashboard/lib/trpc/routers/index.ts index 7d4eea8633..be7005cd88 100644 --- a/apps/dashboard/lib/trpc/routers/index.ts +++ b/apps/dashboard/lib/trpc/routers/index.ts @@ -117,6 +117,7 @@ import { getCurrentUser, listMemberships, switchOrg } from "./user"; import { vercelRouter } from "./vercel"; import { changeWorkspaceName } from "./workspace/changeName"; import { createWorkspace } from "./workspace/create"; +import { getCurrentWorkspace } from "./workspace/getCurrent"; import { onboardingKeyCreation } from "./workspace/onboarding"; import { optWorkspaceIntoBeta } from "./workspace/optIntoBeta"; @@ -196,6 +197,7 @@ export const router = t.router({ }), workspace: t.router({ create: createWorkspace, + getCurrent: getCurrentWorkspace, updateName: changeWorkspaceName, optIntoBeta: optWorkspaceIntoBeta, onboarding: onboardingKeyCreation, diff --git a/apps/dashboard/lib/trpc/routers/key/create.ts b/apps/dashboard/lib/trpc/routers/key/create.ts index e851d07a3c..211af122f8 100644 --- a/apps/dashboard/lib/trpc/routers/key/create.ts +++ b/apps/dashboard/lib/trpc/routers/key/create.ts @@ -1,7 +1,7 @@ import { type CreateKeyInput, createKeyInputSchema, -} from "@/app/(app)/apis/[apiId]/_components/create-key/create-key.schema"; +} from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/create-key.schema"; import { insertAuditLogs } from "@/lib/audit"; import { db, schema } from "@/lib/db"; import { env } from "@/lib/env"; diff --git a/apps/dashboard/lib/trpc/routers/key/query-logs/index.ts b/apps/dashboard/lib/trpc/routers/key/query-logs/index.ts index fa4c5a4ea2..e2a2f7cf5b 100644 --- a/apps/dashboard/lib/trpc/routers/key/query-logs/index.ts +++ b/apps/dashboard/lib/trpc/routers/key/query-logs/index.ts @@ -1,4 +1,4 @@ -import { keyDetailsLogsPayload } from "@/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/query-logs.schema"; +import { keyDetailsLogsPayload } from "@/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/query-logs.schema"; import { clickhouse } from "@/lib/clickhouse"; import { db, isNull } from "@/lib/db"; import { ratelimit, requireUser, requireWorkspace, t, withRatelimit } from "@/lib/trpc/trpc"; diff --git a/apps/dashboard/lib/trpc/routers/key/query-logs/utils.ts b/apps/dashboard/lib/trpc/routers/key/query-logs/utils.ts index e805e72432..f3ab07810e 100644 --- a/apps/dashboard/lib/trpc/routers/key/query-logs/utils.ts +++ b/apps/dashboard/lib/trpc/routers/key/query-logs/utils.ts @@ -1,4 +1,4 @@ -import type { KeyDetailsLogsPayload } from "@/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/query-logs.schema"; +import type { KeyDetailsLogsPayload } from "@/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/table/query-logs.schema"; import { getTimestampFromRelative } from "@/lib/utils"; import type { KeyDetailsLogsParams } from "@unkey/clickhouse/src/verifications"; diff --git a/apps/dashboard/lib/trpc/routers/key/query-timeseries/index.ts b/apps/dashboard/lib/trpc/routers/key/query-timeseries/index.ts index 8211a2f1aa..d49ecb0fec 100644 --- a/apps/dashboard/lib/trpc/routers/key/query-timeseries/index.ts +++ b/apps/dashboard/lib/trpc/routers/key/query-timeseries/index.ts @@ -1,4 +1,4 @@ -import { keyDetailsQueryTimeseriesPayload } from "@/app/(app)/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/charts/bar-chart/query-timeseries.schema"; +import { keyDetailsQueryTimeseriesPayload } from "@/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/[keyId]/components/charts/bar-chart/query-timeseries.schema"; import { clickhouse } from "@/lib/clickhouse"; import { db, isNull } from "@/lib/db"; import { ratelimit, requireUser, requireWorkspace, t, withRatelimit } from "@/lib/trpc/trpc"; diff --git a/apps/dashboard/lib/trpc/routers/key/rbac/update-rbac.ts b/apps/dashboard/lib/trpc/routers/key/rbac/update-rbac.ts index cb6b100f57..e6336ba01d 100644 --- a/apps/dashboard/lib/trpc/routers/key/rbac/update-rbac.ts +++ b/apps/dashboard/lib/trpc/routers/key/rbac/update-rbac.ts @@ -1,4 +1,4 @@ -import { updateKeyRbacSchema } from "@/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/update-key-rbac.schema"; +import { updateKeyRbacSchema } from "@/app/(app)/[workspace]/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/update-key-rbac.schema"; import { insertAuditLogs } from "@/lib/audit"; import { and, db, eq, schema } from "@/lib/db"; import { TRPCError } from "@trpc/server"; diff --git a/apps/dashboard/lib/trpc/routers/key/updateExpiration.ts b/apps/dashboard/lib/trpc/routers/key/updateExpiration.ts index 9096772070..6194a705fa 100644 --- a/apps/dashboard/lib/trpc/routers/key/updateExpiration.ts +++ b/apps/dashboard/lib/trpc/routers/key/updateExpiration.ts @@ -1,4 +1,4 @@ -import { expirationSchema } from "@/app/(app)/apis/[apiId]/_components/create-key/create-key.schema"; +import { expirationSchema } from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/create-key.schema"; import { insertAuditLogs } from "@/lib/audit"; import { db, eq, schema } from "@/lib/db"; import { TRPCError } from "@trpc/server"; diff --git a/apps/dashboard/lib/trpc/routers/key/updateMetadata.ts b/apps/dashboard/lib/trpc/routers/key/updateMetadata.ts index c5432d9116..baa7857f9a 100644 --- a/apps/dashboard/lib/trpc/routers/key/updateMetadata.ts +++ b/apps/dashboard/lib/trpc/routers/key/updateMetadata.ts @@ -1,4 +1,4 @@ -import { metadataSchema } from "@/app/(app)/apis/[apiId]/_components/create-key/create-key.schema"; +import { metadataSchema } from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/create-key.schema"; import { insertAuditLogs } from "@/lib/audit"; import { db, eq, schema } from "@/lib/db"; import { TRPCError } from "@trpc/server"; diff --git a/apps/dashboard/lib/trpc/routers/key/updateName.ts b/apps/dashboard/lib/trpc/routers/key/updateName.ts index 641b9ed8f3..b409be5413 100644 --- a/apps/dashboard/lib/trpc/routers/key/updateName.ts +++ b/apps/dashboard/lib/trpc/routers/key/updateName.ts @@ -1,4 +1,4 @@ -import { nameSchema } from "@/app/(app)/apis/[apiId]/_components/create-key/create-key.schema"; +import { nameSchema } from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/create-key.schema"; import { insertAuditLogs } from "@/lib/audit"; import { db, eq, schema } from "@/lib/db"; import { TRPCError } from "@trpc/server"; diff --git a/apps/dashboard/lib/trpc/routers/key/updateRatelimit.ts b/apps/dashboard/lib/trpc/routers/key/updateRatelimit.ts index 0419185dec..8038dfc344 100644 --- a/apps/dashboard/lib/trpc/routers/key/updateRatelimit.ts +++ b/apps/dashboard/lib/trpc/routers/key/updateRatelimit.ts @@ -1,4 +1,4 @@ -import { ratelimitSchema } from "@/app/(app)/apis/[apiId]/_components/create-key/create-key.schema"; +import { ratelimitSchema } from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/create-key.schema"; import { type UnkeyAuditLog, insertAuditLogs } from "@/lib/audit"; import { type Key, db, eq, schema } from "@/lib/db"; import { TRPCError } from "@trpc/server"; diff --git a/apps/dashboard/lib/trpc/routers/key/updateRemaining.ts b/apps/dashboard/lib/trpc/routers/key/updateRemaining.ts index 904fca3785..f8e526f4f1 100644 --- a/apps/dashboard/lib/trpc/routers/key/updateRemaining.ts +++ b/apps/dashboard/lib/trpc/routers/key/updateRemaining.ts @@ -1,6 +1,6 @@ -import { creditsSchema } from "@/app/(app)/apis/[apiId]/_components/create-key/create-key.schema"; +import { creditsSchema } from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/create-key.schema"; import { insertAuditLogs } from "@/lib/audit"; -import { db, eq, schema } from "@/lib/db"; +import { and, db, eq, schema } from "@/lib/db"; import { TRPCError } from "@trpc/server"; import { z } from "zod"; import { requireUser, requireWorkspace, t } from "../../trpc"; @@ -47,7 +47,7 @@ export const updateKeyRemaining = t.procedure refillAmount, lastRefillAt: refillAmount ? new Date() : null, }) - .where(eq(schema.keys.id, key.id)) + .where(and(eq(schema.keys.id, key.id), eq(schema.keys.workspaceId, ctx.workspace.id))) .catch((_err) => { throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", @@ -64,7 +64,7 @@ export const updateKeyRemaining = t.procedure refillAmount: null, lastRefillAt: null, }) - .where(eq(schema.keys.id, key.id)) + .where(and(eq(schema.keys.id, key.id), eq(schema.keys.workspaceId, ctx.workspace.id))) .catch((_err) => { throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", diff --git a/apps/dashboard/lib/trpc/routers/workspace/getCurrent.ts b/apps/dashboard/lib/trpc/routers/workspace/getCurrent.ts new file mode 100644 index 0000000000..83672196e5 --- /dev/null +++ b/apps/dashboard/lib/trpc/routers/workspace/getCurrent.ts @@ -0,0 +1,36 @@ +import { db } from "@/lib/db"; +import { TRPCError } from "@trpc/server"; +import { requireUser, requireWorkspace, t } from "../../trpc"; + +export const getCurrentWorkspace = t.procedure + .use(requireUser) + .use(requireWorkspace) + .query(async ({ ctx }) => { + try { + // The workspace is already available in context from requireWorkspace middleware + // but we need to fetch it with quotas and related data + const workspace = await db.query.workspaces.findFirst({ + where: (table, { eq, and, isNull }) => + and(eq(table.orgId, ctx.tenant.id), isNull(table.deletedAtM)), + with: { + quotas: true, + }, + }); + + if (!workspace) { + throw new TRPCError({ + code: "NOT_FOUND", + message: "Workspace not found", + }); + } + + return { ...workspace, quotas: workspace.quotas }; + } catch (error) { + console.error("Error fetching current workspace:", error); + throw new TRPCError({ + code: "INTERNAL_SERVER_ERROR", + message: "Failed to fetch workspace data", + cause: error, + }); + } + }); diff --git a/apps/dashboard/lib/trpc/routers/workspace/onboarding.ts b/apps/dashboard/lib/trpc/routers/workspace/onboarding.ts index f22c0e7f7a..156bfccbb9 100644 --- a/apps/dashboard/lib/trpc/routers/workspace/onboarding.ts +++ b/apps/dashboard/lib/trpc/routers/workspace/onboarding.ts @@ -1,4 +1,4 @@ -import { createKeyInputSchema } from "@/app/(app)/apis/[apiId]/_components/create-key/create-key.schema"; +import { createKeyInputSchema } from "@/app/(app)/[workspace]/apis/[apiId]/_components/create-key/create-key.schema"; import { db } from "@/lib/db"; import { TRPCError } from "@trpc/server"; import { z } from "zod"; diff --git a/apps/dashboard/providers/workspace-provider.tsx b/apps/dashboard/providers/workspace-provider.tsx new file mode 100644 index 0000000000..64a84e8a97 --- /dev/null +++ b/apps/dashboard/providers/workspace-provider.tsx @@ -0,0 +1,49 @@ +"use client"; + +import { trpc } from "@/lib/trpc/client"; +import type { Quotas, Workspace } from "@unkey/db"; +import type React from "react"; +import { type PropsWithChildren, createContext, useContext } from "react"; + +interface WorkspaceContextType { + workspace: Workspace | null; + quotas: Quotas | null; + isLoading: boolean; + error: Error | null; + refetch: () => void; +} + +const WorkspaceContext = createContext(undefined); + +export const useWorkspace = () => { + const context = useContext(WorkspaceContext); + if (context === undefined) { + throw new Error("useWorkspace must be used within a WorkspaceProvider"); + } + return context; +}; + +export const WorkspaceProvider: React.FC = ({ children }) => { + const { + data: workspace, + isLoading, + error, + refetch, + } = trpc.workspace.getCurrent.useQuery(undefined, { + staleTime: 1000 * 60 * 5, // 5 minutes + cacheTime: 1000 * 60 * 10, // 10 minutes + retry: 1, + refetchOnWindowFocus: true, + refetchOnReconnect: true, + }); + + const value: WorkspaceContextType = { + workspace: workspace ?? null, + quotas: workspace?.quotas ?? null, + isLoading, + error: error as Error | null, + refetch, + }; + + return {children}; +}; diff --git a/internal/db/drizzle/0001_workable_wildside.sql b/internal/db/drizzle/0001_workable_wildside.sql new file mode 100644 index 0000000000..0e621c4767 --- /dev/null +++ b/internal/db/drizzle/0001_workable_wildside.sql @@ -0,0 +1,3 @@ +ALTER TABLE `permissions` DROP INDEX `unique_name_per_workspace_idx`;--> statement-breakpoint +ALTER TABLE `workspaces` ADD `slug` varchar(64); +ALTER TABLE `workspaces` ADD CONSTRAINT `workspaces_slug_unique` UNIQUE(`slug`);--> statement-breakpoint diff --git a/internal/db/drizzle/meta/0001_snapshot.json b/internal/db/drizzle/meta/0001_snapshot.json new file mode 100644 index 0000000000..0416f983a0 --- /dev/null +++ b/internal/db/drizzle/meta/0001_snapshot.json @@ -0,0 +1,2696 @@ +{ + "version": "5", + "dialect": "mysql", + "id": "2e68f43f-10c8-4438-be11-42ff42733885", + "prevId": "66125fd8-4e0f-4388-a524-e9afb1d90917", + "tables": { + "apis": { + "name": "apis", + "columns": { + "id": { + "name": "id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "ip_whitelist": { + "name": "ip_whitelist", + "type": "varchar(512)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "auth_type": { + "name": "auth_type", + "type": "enum('key','jwt')", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "key_auth_id": { + "name": "key_auth_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at_m": { + "name": "created_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "updated_at_m": { + "name": "updated_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "deleted_at_m": { + "name": "deleted_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "delete_protection": { + "name": "delete_protection", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": false + } + }, + "indexes": { + "workspace_id_idx": { + "name": "workspace_id_idx", + "columns": ["workspace_id"], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": { + "apis_id": { + "name": "apis_id", + "columns": ["id"] + } + }, + "uniqueConstraints": { + "apis_key_auth_id_unique": { + "name": "apis_key_auth_id_unique", + "columns": ["key_auth_id"] + } + } + }, + "keys_permissions": { + "name": "keys_permissions", + "columns": { + "temp_id": { + "name": "temp_id", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": true + }, + "key_id": { + "name": "key_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "permission_id": { + "name": "permission_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at_m": { + "name": "created_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "updated_at_m": { + "name": "updated_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": { + "keys_permissions_key_id_permission_id_workspace_id": { + "name": "keys_permissions_key_id_permission_id_workspace_id", + "columns": ["key_id", "permission_id", "workspace_id"] + } + }, + "uniqueConstraints": { + "keys_permissions_temp_id_unique": { + "name": "keys_permissions_temp_id_unique", + "columns": ["temp_id"] + }, + "key_id_permission_id_idx": { + "name": "key_id_permission_id_idx", + "columns": ["key_id", "permission_id"] + } + } + }, + "keys_roles": { + "name": "keys_roles", + "columns": { + "key_id": { + "name": "key_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "role_id": { + "name": "role_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at_m": { + "name": "created_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "updated_at_m": { + "name": "updated_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "unique_key_id_role_id": { + "name": "unique_key_id_role_id", + "columns": ["key_id", "role_id"], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": { + "keys_roles_role_id_key_id_workspace_id": { + "name": "keys_roles_role_id_key_id_workspace_id", + "columns": ["role_id", "key_id", "workspace_id"] + } + }, + "uniqueConstraints": {} + }, + "permissions": { + "name": "permissions", + "columns": { + "id": { + "name": "id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "varchar(512)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "slug": { + "name": "slug", + "type": "varchar(128)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "description": { + "name": "description", + "type": "varchar(512)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at_m": { + "name": "created_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "updated_at_m": { + "name": "updated_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": { + "permissions_id": { + "name": "permissions_id", + "columns": ["id"] + } + }, + "uniqueConstraints": { + "unique_slug_per_workspace_idx": { + "name": "unique_slug_per_workspace_idx", + "columns": ["workspace_id", "slug"] + } + } + }, + "roles": { + "name": "roles", + "columns": { + "id": { + "name": "id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "varchar(512)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "description": { + "name": "description", + "type": "varchar(512)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at_m": { + "name": "created_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "updated_at_m": { + "name": "updated_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "workspace_id_idx": { + "name": "workspace_id_idx", + "columns": ["workspace_id"], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": { + "roles_id": { + "name": "roles_id", + "columns": ["id"] + } + }, + "uniqueConstraints": { + "unique_name_per_workspace_idx": { + "name": "unique_name_per_workspace_idx", + "columns": ["name", "workspace_id"] + } + } + }, + "roles_permissions": { + "name": "roles_permissions", + "columns": { + "role_id": { + "name": "role_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "permission_id": { + "name": "permission_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at_m": { + "name": "created_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "updated_at_m": { + "name": "updated_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": { + "roles_permissions_role_id_permission_id_workspace_id": { + "name": "roles_permissions_role_id_permission_id_workspace_id", + "columns": ["role_id", "permission_id", "workspace_id"] + } + }, + "uniqueConstraints": { + "unique_tuple_permission_id_role_id": { + "name": "unique_tuple_permission_id_role_id", + "columns": ["permission_id", "role_id"] + } + } + }, + "key_auth": { + "name": "key_auth", + "columns": { + "id": { + "name": "id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at_m": { + "name": "created_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "updated_at_m": { + "name": "updated_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "deleted_at_m": { + "name": "deleted_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "store_encrypted_keys": { + "name": "store_encrypted_keys", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, + "default_prefix": { + "name": "default_prefix", + "type": "varchar(8)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "default_bytes": { + "name": "default_bytes", + "type": "int", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": 16 + }, + "size_approx": { + "name": "size_approx", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "size_last_updated_at": { + "name": "size_last_updated_at", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": { + "key_auth_id": { + "name": "key_auth_id", + "columns": ["id"] + } + }, + "uniqueConstraints": {} + }, + "encrypted_keys": { + "name": "encrypted_keys", + "columns": { + "workspace_id": { + "name": "workspace_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "key_id": { + "name": "key_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "updated_at": { + "name": "updated_at", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "encrypted": { + "name": "encrypted", + "type": "varchar(1024)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "encryption_key_id": { + "name": "encryption_key_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "key_id_idx": { + "name": "key_id_idx", + "columns": ["key_id"], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "keys": { + "name": "keys", + "columns": { + "id": { + "name": "id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "key_auth_id": { + "name": "key_auth_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "hash": { + "name": "hash", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "start": { + "name": "start", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "for_workspace_id": { + "name": "for_workspace_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "owner_id": { + "name": "owner_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "identity_id": { + "name": "identity_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "meta": { + "name": "meta", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "expires": { + "name": "expires", + "type": "datetime(3)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at_m": { + "name": "created_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "updated_at_m": { + "name": "updated_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "deleted_at_m": { + "name": "deleted_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "refill_day": { + "name": "refill_day", + "type": "tinyint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "refill_amount": { + "name": "refill_amount", + "type": "int", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "last_refill_at": { + "name": "last_refill_at", + "type": "datetime(3)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": true + }, + "remaining_requests": { + "name": "remaining_requests", + "type": "int", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "ratelimit_async": { + "name": "ratelimit_async", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "ratelimit_limit": { + "name": "ratelimit_limit", + "type": "int", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "ratelimit_duration": { + "name": "ratelimit_duration", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "environment": { + "name": "environment", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "hash_idx": { + "name": "hash_idx", + "columns": ["hash"], + "isUnique": true + }, + "key_auth_id_deleted_at_idx": { + "name": "key_auth_id_deleted_at_idx", + "columns": ["key_auth_id", "deleted_at_m"], + "isUnique": false + }, + "idx_keys_on_for_workspace_id": { + "name": "idx_keys_on_for_workspace_id", + "columns": ["for_workspace_id"], + "isUnique": false + }, + "idx_keys_on_workspace_id": { + "name": "idx_keys_on_workspace_id", + "columns": ["workspace_id"], + "isUnique": false + }, + "owner_id_idx": { + "name": "owner_id_idx", + "columns": ["owner_id"], + "isUnique": false + }, + "identity_id_idx": { + "name": "identity_id_idx", + "columns": ["identity_id"], + "isUnique": false + }, + "deleted_at_idx": { + "name": "deleted_at_idx", + "columns": ["deleted_at_m"], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": { + "keys_id": { + "name": "keys_id", + "columns": ["id"] + } + }, + "uniqueConstraints": {} + }, + "vercel_bindings": { + "name": "vercel_bindings", + "columns": { + "id": { + "name": "id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "integration_id": { + "name": "integration_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "project_id": { + "name": "project_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "environment": { + "name": "environment", + "type": "enum('development','preview','production')", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "resource_id": { + "name": "resource_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "resource_type": { + "name": "resource_type", + "type": "enum('rootKey','apiId')", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "vercel_env_id": { + "name": "vercel_env_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "last_edited_by": { + "name": "last_edited_by", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at_m": { + "name": "created_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "updated_at_m": { + "name": "updated_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "deleted_at_m": { + "name": "deleted_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "project_environment_resource_type_idx": { + "name": "project_environment_resource_type_idx", + "columns": ["project_id", "environment", "resource_type"], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": { + "vercel_bindings_id": { + "name": "vercel_bindings_id", + "columns": ["id"] + } + }, + "uniqueConstraints": {} + }, + "vercel_integrations": { + "name": "vercel_integrations", + "columns": { + "id": { + "name": "id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "team_id": { + "name": "team_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "access_token": { + "name": "access_token", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at_m": { + "name": "created_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "updated_at_m": { + "name": "updated_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "deleted_at_m": { + "name": "deleted_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": { + "vercel_integrations_id": { + "name": "vercel_integrations_id", + "columns": ["id"] + } + }, + "uniqueConstraints": {} + }, + "ratelimit_namespaces": { + "name": "ratelimit_namespaces", + "columns": { + "id": { + "name": "id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "varchar(512)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at_m": { + "name": "created_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "updated_at_m": { + "name": "updated_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "deleted_at_m": { + "name": "deleted_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": { + "ratelimit_namespaces_id": { + "name": "ratelimit_namespaces_id", + "columns": ["id"] + } + }, + "uniqueConstraints": { + "unique_name_per_workspace_idx": { + "name": "unique_name_per_workspace_idx", + "columns": ["workspace_id", "name"] + } + } + }, + "ratelimit_overrides": { + "name": "ratelimit_overrides", + "columns": { + "id": { + "name": "id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "namespace_id": { + "name": "namespace_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "identifier": { + "name": "identifier", + "type": "varchar(512)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "limit": { + "name": "limit", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "duration": { + "name": "duration", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "async": { + "name": "async", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "sharding": { + "name": "sharding", + "type": "enum('edge')", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at_m": { + "name": "created_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "updated_at_m": { + "name": "updated_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "deleted_at_m": { + "name": "deleted_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": { + "ratelimit_overrides_id": { + "name": "ratelimit_overrides_id", + "columns": ["id"] + } + }, + "uniqueConstraints": { + "unique_identifier_per_namespace_idx": { + "name": "unique_identifier_per_namespace_idx", + "columns": ["namespace_id", "identifier"] + } + } + }, + "workspaces": { + "name": "workspaces", + "columns": { + "id": { + "name": "id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "org_id": { + "name": "org_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "partition_id": { + "name": "partition_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "plan": { + "name": "plan", + "type": "enum('free','pro','enterprise')", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "'free'" + }, + "tier": { + "name": "tier", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "'Free'" + }, + "stripe_customer_id": { + "name": "stripe_customer_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "stripe_subscription_id": { + "name": "stripe_subscription_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "beta_features": { + "name": "beta_features", + "type": "json", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "features": { + "name": "features", + "type": "json", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "subscriptions": { + "name": "subscriptions", + "type": "json", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": true + }, + "slug": { + "name": "slug", + "type": "varchar(64)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "delete_protection": { + "name": "delete_protection", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": false + }, + "created_at_m": { + "name": "created_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "updated_at_m": { + "name": "updated_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "deleted_at_m": { + "name": "deleted_at_m", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": { + "workspaces_id": { + "name": "workspaces_id", + "columns": ["id"] + } + }, + "uniqueConstraints": { + "workspaces_org_id_unique": { + "name": "workspaces_org_id_unique", + "columns": ["org_id"] + }, + "workspaces_slug_unique": { + "name": "workspaces_slug_unique", + "columns": ["slug"] + } + } + }, + "key_migration_errors": { + "name": "key_migration_errors", + "columns": { + "id": { + "name": "id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "migration_id": { + "name": "migration_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "message": { + "name": "message", + "type": "json", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": { + "key_migration_errors_id": { + "name": "key_migration_errors_id", + "columns": ["id"] + } + }, + "uniqueConstraints": {} + }, + "identities": { + "name": "identities", + "columns": { + "id": { + "name": "id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "external_id": { + "name": "external_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "environment": { + "name": "environment", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'default'" + }, + "meta": { + "name": "meta", + "type": "json", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "deleted": { + "name": "deleted", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "workspace_id_external_id_deleted_idx": { + "name": "workspace_id_external_id_deleted_idx", + "columns": ["workspace_id", "external_id", "deleted"], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": { + "identities_id": { + "name": "identities_id", + "columns": ["id"] + } + }, + "uniqueConstraints": {} + }, + "ratelimits": { + "name": "ratelimits", + "columns": { + "id": { + "name": "id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "key_id": { + "name": "key_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "identity_id": { + "name": "identity_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "limit": { + "name": "limit", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "duration": { + "name": "duration", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "auto_apply": { + "name": "auto_apply", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + } + }, + "indexes": { + "name_idx": { + "name": "name_idx", + "columns": ["name"], + "isUnique": false + }, + "unique_name_per_key_idx": { + "name": "unique_name_per_key_idx", + "columns": ["key_id", "name"], + "isUnique": true + }, + "unique_name_per_identity_idx": { + "name": "unique_name_per_identity_idx", + "columns": ["identity_id", "name"], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": { + "ratelimits_id": { + "name": "ratelimits_id", + "columns": ["id"] + } + }, + "uniqueConstraints": {} + }, + "quota": { + "name": "quota", + "columns": { + "workspace_id": { + "name": "workspace_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "requests_per_month": { + "name": "requests_per_month", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "logs_retention_days": { + "name": "logs_retention_days", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "audit_logs_retention_days": { + "name": "audit_logs_retention_days", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "team": { + "name": "team", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": { + "quota_workspace_id": { + "name": "quota_workspace_id", + "columns": ["workspace_id"] + } + }, + "uniqueConstraints": {} + }, + "audit_log": { + "name": "audit_log", + "columns": { + "id": { + "name": "id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "bucket": { + "name": "bucket", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'unkey_mutations'" + }, + "bucket_id": { + "name": "bucket_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "event": { + "name": "event", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "time": { + "name": "time", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "display": { + "name": "display", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "remote_ip": { + "name": "remote_ip", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "user_agent": { + "name": "user_agent", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "actor_type": { + "name": "actor_type", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "actor_id": { + "name": "actor_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "actor_name": { + "name": "actor_name", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "actor_meta": { + "name": "actor_meta", + "type": "json", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "workspace_id_idx": { + "name": "workspace_id_idx", + "columns": ["workspace_id"], + "isUnique": false + }, + "bucket_id_idx": { + "name": "bucket_id_idx", + "columns": ["bucket_id"], + "isUnique": false + }, + "bucket_idx": { + "name": "bucket_idx", + "columns": ["bucket"], + "isUnique": false + }, + "event_idx": { + "name": "event_idx", + "columns": ["event"], + "isUnique": false + }, + "actor_id_idx": { + "name": "actor_id_idx", + "columns": ["actor_id"], + "isUnique": false + }, + "time_idx": { + "name": "time_idx", + "columns": ["time"], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": { + "audit_log_id": { + "name": "audit_log_id", + "columns": ["id"] + } + }, + "uniqueConstraints": {} + }, + "audit_log_bucket": { + "name": "audit_log_bucket", + "columns": { + "id": { + "name": "id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "retention_days": { + "name": "retention_days", + "type": "int", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "delete_protection": { + "name": "delete_protection", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": false + } + }, + "indexes": { + "unique_name_per_workspace_idx": { + "name": "unique_name_per_workspace_idx", + "columns": ["workspace_id", "name"], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": { + "audit_log_bucket_id": { + "name": "audit_log_bucket_id", + "columns": ["id"] + } + }, + "uniqueConstraints": {} + }, + "audit_log_target": { + "name": "audit_log_target", + "columns": { + "workspace_id": { + "name": "workspace_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "bucket_id": { + "name": "bucket_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "bucket": { + "name": "bucket", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'unkey_mutations'" + }, + "audit_log_id": { + "name": "audit_log_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "display_name": { + "name": "display_name", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "type": { + "name": "type", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "id": { + "name": "id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "meta": { + "name": "meta", + "type": "json", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "bucket": { + "name": "bucket", + "columns": ["bucket"], + "isUnique": false + }, + "audit_log_id": { + "name": "audit_log_id", + "columns": ["audit_log_id"], + "isUnique": false + }, + "id_idx": { + "name": "id_idx", + "columns": ["id"], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": { + "audit_log_target_audit_log_id_id_pk": { + "name": "audit_log_target_audit_log_id_id_pk", + "columns": ["audit_log_id", "id"] + } + }, + "uniqueConstraints": {} + }, + "partitions": { + "name": "partitions", + "columns": { + "id": { + "name": "id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "aws_account_id": { + "name": "aws_account_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "region": { + "name": "region", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "ip_v4_address": { + "name": "ip_v4_address", + "type": "varchar(15)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "ip_v6_address": { + "name": "ip_v6_address", + "type": "varchar(39)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "status": { + "name": "status", + "type": "enum('active','draining','inactive')", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'active'" + }, + "delete_protection": { + "name": "delete_protection", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "status_idx": { + "name": "status_idx", + "columns": ["status"], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": { + "partitions_id": { + "name": "partitions_id", + "columns": ["id"] + } + }, + "uniqueConstraints": {} + }, + "projects": { + "name": "projects", + "columns": { + "id": { + "name": "id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "partition_id": { + "name": "partition_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "slug": { + "name": "slug", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "git_repository_url": { + "name": "git_repository_url", + "type": "varchar(500)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "default_branch": { + "name": "default_branch", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "'main'" + }, + "delete_protection": { + "name": "delete_protection", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "workspace_idx": { + "name": "workspace_idx", + "columns": ["workspace_id"], + "isUnique": false + }, + "partition_idx": { + "name": "partition_idx", + "columns": ["partition_id"], + "isUnique": false + }, + "workspace_slug_idx": { + "name": "workspace_slug_idx", + "columns": ["workspace_id", "slug"], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": { + "projects_id": { + "name": "projects_id", + "columns": ["id"] + } + }, + "uniqueConstraints": {} + }, + "rootfs_images": { + "name": "rootfs_images", + "columns": { + "id": { + "name": "id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "project_id": { + "name": "project_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "s3_bucket": { + "name": "s3_bucket", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "s3_key": { + "name": "s3_key", + "type": "varchar(500)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "size_bytes": { + "name": "size_bytes", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "workspace_idx": { + "name": "workspace_idx", + "columns": ["workspace_id"], + "isUnique": false + }, + "project_idx": { + "name": "project_idx", + "columns": ["project_id"], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": { + "rootfs_images_id": { + "name": "rootfs_images_id", + "columns": ["id"] + } + }, + "uniqueConstraints": {} + }, + "builds": { + "name": "builds", + "columns": { + "id": { + "name": "id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "project_id": { + "name": "project_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "deployment_id": { + "name": "deployment_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "rootfs_image_id": { + "name": "rootfs_image_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "git_commit_sha": { + "name": "git_commit_sha", + "type": "varchar(40)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "git_branch": { + "name": "git_branch", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "status": { + "name": "status", + "type": "enum('pending','running','succeeded','failed','cancelled')", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'pending'" + }, + "build_tool": { + "name": "build_tool", + "type": "enum('docker','depot','custom')", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'docker'" + }, + "error_message": { + "name": "error_message", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "started_at": { + "name": "started_at", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "completed_at": { + "name": "completed_at", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "workspace_idx": { + "name": "workspace_idx", + "columns": ["workspace_id"], + "isUnique": false + }, + "project_idx": { + "name": "project_idx", + "columns": ["project_id"], + "isUnique": false + }, + "status_idx": { + "name": "status_idx", + "columns": ["status"], + "isUnique": false + }, + "rootfs_image_idx": { + "name": "rootfs_image_idx", + "columns": ["rootfs_image_id"], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": { + "builds_id": { + "name": "builds_id", + "columns": ["id"] + } + }, + "uniqueConstraints": {} + }, + "deployment_steps": { + "name": "deployment_steps", + "columns": { + "deployment_id": { + "name": "deployment_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "status": { + "name": "status", + "type": "enum('pending','downloading_docker_image','building_rootfs','uploading_rootfs','creating_vm','booting_vm','assigning_domains','completed','failed')", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "message": { + "name": "message", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "error_message": { + "name": "error_message", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "idx_deployment_id_created_at": { + "name": "idx_deployment_id_created_at", + "columns": ["deployment_id", "created_at"], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": { + "deployment_steps_deployment_id_status_pk": { + "name": "deployment_steps_deployment_id_status_pk", + "columns": ["deployment_id", "status"] + } + }, + "uniqueConstraints": {} + }, + "deployments": { + "name": "deployments", + "columns": { + "id": { + "name": "id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "project_id": { + "name": "project_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "environment": { + "name": "environment", + "type": "enum('production','preview')", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'preview'" + }, + "build_id": { + "name": "build_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "rootfs_image_id": { + "name": "rootfs_image_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "git_commit_sha": { + "name": "git_commit_sha", + "type": "varchar(40)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "git_branch": { + "name": "git_branch", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "config_snapshot": { + "name": "config_snapshot", + "type": "json", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "openapi_spec": { + "name": "openapi_spec", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "status": { + "name": "status", + "type": "enum('pending','building','deploying','active','failed','archived')", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'pending'" + }, + "created_at": { + "name": "created_at", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "workspace_idx": { + "name": "workspace_idx", + "columns": ["workspace_id"], + "isUnique": false + }, + "project_idx": { + "name": "project_idx", + "columns": ["project_id"], + "isUnique": false + }, + "environment_idx": { + "name": "environment_idx", + "columns": ["environment"], + "isUnique": false + }, + "status_idx": { + "name": "status_idx", + "columns": ["status"], + "isUnique": false + }, + "rootfs_image_idx": { + "name": "rootfs_image_idx", + "columns": ["rootfs_image_id"], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": { + "deployments_id": { + "name": "deployments_id", + "columns": ["id"] + } + }, + "uniqueConstraints": {} + }, + "hostname_routes": { + "name": "hostname_routes", + "columns": { + "id": { + "name": "id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "project_id": { + "name": "project_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "hostname": { + "name": "hostname", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "deployment_id": { + "name": "deployment_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "is_enabled": { + "name": "is_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": true + }, + "created_at": { + "name": "created_at", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "workspace_idx": { + "name": "workspace_idx", + "columns": ["workspace_id"], + "isUnique": false + }, + "project_idx": { + "name": "project_idx", + "columns": ["project_id"], + "isUnique": false + }, + "hostname_idx": { + "name": "hostname_idx", + "columns": ["hostname"], + "isUnique": true + }, + "deployment_idx": { + "name": "deployment_idx", + "columns": ["deployment_id"], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": { + "hostname_routes_id": { + "name": "hostname_routes_id", + "columns": ["id"] + } + }, + "uniqueConstraints": {} + }, + "domains": { + "name": "domains", + "columns": { + "id": { + "name": "id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "project_id": { + "name": "project_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "hostname": { + "name": "hostname", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "is_custom_domain": { + "name": "is_custom_domain", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, + "certificate_id": { + "name": "certificate_id", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "verification_status": { + "name": "verification_status", + "type": "enum('pending','verified','failed','expired')", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "'pending'" + }, + "verification_token": { + "name": "verification_token", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "verification_method": { + "name": "verification_method", + "type": "enum('dns_txt','dns_cname','file_upload','automatic')", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "subdomain_config": { + "name": "subdomain_config", + "type": "json", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "bigint", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "workspace_idx": { + "name": "workspace_idx", + "columns": ["workspace_id"], + "isUnique": false + }, + "project_idx": { + "name": "project_idx", + "columns": ["project_id"], + "isUnique": false + }, + "hostname_idx": { + "name": "hostname_idx", + "columns": ["hostname"], + "isUnique": true + }, + "verification_status_idx": { + "name": "verification_status_idx", + "columns": ["verification_status"], + "isUnique": false + }, + "certificate_idx": { + "name": "certificate_idx", + "columns": ["certificate_id"], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": { + "domains_id": { + "name": "domains_id", + "columns": ["id"] + } + }, + "uniqueConstraints": {} + } + }, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "tables": {}, + "indexes": {} + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 984c5dc33a..f672b1df70 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -590,13 +590,13 @@ importers: devDependencies: '@cloudflare/workers-types': specifier: ^4.20241022.0 - version: 4.20250909.0 + version: 4.20241022.0 typescript: specifier: ^5.0.4 version: 5.7.3 wrangler: specifier: ^4.10.0 - version: 4.10.0(@cloudflare/workers-types@4.20250909.0) + version: 4.10.0(@cloudflare/workers-types@4.20241022.0) internal/billing: dependencies: @@ -608,7 +608,7 @@ importers: version: link:../../packages/error ai: specifier: ^3.0.23 - version: 3.0.23(react@18.3.1)(solid-js@1.9.9)(svelte@4.2.20)(vue@3.5.21)(zod@3.23.8) + version: 3.0.23(react@18.3.1)(solid-js@1.9.9)(svelte@4.2.20)(vue@3.5.20)(zod@3.23.8) zod: specifier: 3.23.8 version: 3.23.8 @@ -630,7 +630,7 @@ importers: devDependencies: checkly: specifier: latest - version: 6.5.0(@types/node@20.14.9)(typescript@5.5.3) + version: 4.9.0(@types/node@20.14.9)(typescript@5.5.3) ts-node: specifier: 10.9.1 version: 10.9.1(@types/node@20.14.9)(typescript@5.5.3) @@ -876,7 +876,7 @@ importers: version: 18.3.1 react-email: specifier: 2.1.1 - version: 2.1.1(eslint@9.35.0) + version: 2.1.1(eslint@9.34.0) resend: specifier: ^4.4.0 version: 4.4.0(react-dom@18.3.1)(react@18.3.1) @@ -925,7 +925,7 @@ importers: version: 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-select': specifier: ^2.0.0 - version: 2.0.0(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) + version: 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-separator': specifier: ^1.0.3 version: 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) @@ -934,7 +934,7 @@ importers: version: 1.1.0(@types/react@18.3.11)(react@18.3.1) '@radix-ui/react-tooltip': specifier: ^1.0.7 - version: 1.0.7(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) + version: 1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) '@unkey/icons': specifier: workspace:^ version: link:../icons @@ -1276,7 +1276,7 @@ packages: resolution: {integrity: sha512-3yWxPTq3UQ/FY9p1ErPxIyfT64elWaMvM9lIHnaqpyft63tkxodF5aUElYHrdisWve5cETkh1+KBw1yJuW0aRw==} engines: {node: '>=14.13.1'} dependencies: - ansi-styles: 6.2.3 + ansi-styles: 6.2.1 is-fullwidth-code-point: 4.0.0 dev: true @@ -1585,22 +1585,18 @@ packages: '@babel/types': 7.28.2 dev: false - /@babel/parser@7.28.4: - resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} + /@babel/parser@7.28.3: + resolution: {integrity: sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.28.4 + '@babel/types': 7.28.2 dev: false /@babel/runtime@7.28.3: resolution: {integrity: sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==} engines: {node: '>=6.9.0'} - /@babel/runtime@7.28.4: - resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} - engines: {node: '>=6.9.0'} - /@babel/types@7.28.2: resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} engines: {node: '>=6.9.0'} @@ -1609,14 +1605,6 @@ packages: '@babel/helper-validator-identifier': 7.27.1 dev: false - /@babel/types@7.28.4: - resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - dev: false - /@balena/dockerignore@1.0.2: resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==} dev: true @@ -2068,8 +2056,8 @@ packages: resolution: {integrity: sha512-KmsjZcd/dPWM51FoT08cvUGCq9l3nFEriloQ12mcdJPoW911Gi5S/9Cq4xeFvTrtk9TJ2krvxP23IeobecRmOQ==} dev: true - /@cloudflare/workers-types@4.20250909.0: - resolution: {integrity: sha512-3WvDDOvFGOAlBUZpWe2N+9BxB1kRt9eHo3AhIKg1fihNdqrGxyh9cJe1MpYs5BI8gXSRxjkDvzPVebRED8iwOQ==} + /@cloudflare/workers-types@4.20241022.0: + resolution: {integrity: sha512-1zOAw5QIDKItzGatzCrEpfLOB1AuMTwVqKmbw9B9eBfCUGRFNfJYMrJxIwcse9EmKahsQt2GruqU00pY/GyXgg==} dev: true /@commitlint/config-validator@19.8.1: @@ -2126,7 +2114,7 @@ packages: engines: {node: '>=v18'} dependencies: '@types/conventional-commits-parser': 5.0.1 - chalk: 5.6.2 + chalk: 5.6.0 dev: true optional: true @@ -2201,7 +2189,7 @@ packages: node-fetch: 3.3.2 reflect-metadata: 0.2.2 tar: 7.4.3 - typescript: 5.9.2 + typescript: 5.7.3 transitivePeerDependencies: - supports-color dev: true @@ -2210,8 +2198,8 @@ packages: resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} dev: true - /@emnapi/runtime@1.5.0: - resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} + /@emnapi/runtime@1.4.5: + resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==} requiresBuild: true dependencies: tslib: 2.8.1 @@ -3693,13 +3681,13 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.9.0(eslint@9.35.0): - resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} + /@eslint-community/eslint-utils@4.7.0(eslint@9.34.0): + resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 9.35.0 + eslint: 9.34.0 eslint-visitor-keys: 3.4.3 dev: false @@ -3748,8 +3736,8 @@ packages: - supports-color dev: false - /@eslint/js@9.35.0: - resolution: {integrity: sha512-30iXE9whjlILfWobBkNerJo+TXYsgVM5ERQwMcMKCHckHflCmf7wXDAHlARoWnh0s1U72WqlbeyE7iAcCzuCPw==} + /@eslint/js@9.34.0: + resolution: {integrity: sha512-EoyvqQnBNsV1CWaEJ559rxXL4c8V92gxirbawSmVUOWXlsRxxQXl6LmCpdUblgxgSkDIqKnhzba2SjRTI/A5Rw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dev: false @@ -3875,12 +3863,12 @@ packages: engines: {node: '>=18.18.0'} dev: false - /@humanfs/node@0.16.7: - resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} + /@humanfs/node@0.16.6: + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} engines: {node: '>=18.18.0'} dependencies: '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.4.3 + '@humanwhocodes/retry': 0.3.1 dev: false /@humanwhocodes/module-importer@1.0.1: @@ -3888,6 +3876,11 @@ packages: engines: {node: '>=12.22'} dev: false + /@humanwhocodes/retry@0.3.1: + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + dev: false + /@humanwhocodes/retry@0.4.3: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} @@ -4222,7 +4215,7 @@ packages: cpu: [wasm32] requiresBuild: true dependencies: - '@emnapi/runtime': 1.5.0 + '@emnapi/runtime': 1.4.5 dev: true optional: true @@ -4232,7 +4225,7 @@ packages: cpu: [wasm32] requiresBuild: true dependencies: - '@emnapi/runtime': 1.5.0 + '@emnapi/runtime': 1.4.5 dev: false optional: true @@ -4281,23 +4274,6 @@ packages: dev: false optional: true - /@inquirer/checkbox@4.2.2(@types/node@20.14.9): - resolution: {integrity: sha512-E+KExNurKcUJJdxmjglTl141EwxWyAHplvsYJQgSwXf8qiNWkTxTuCCqmhFEmbIXd4zLaGMfQFJ6WrZ7fSeV3g==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - dependencies: - '@inquirer/core': 10.2.0(@types/node@20.14.9) - '@inquirer/figures': 1.0.13 - '@inquirer/type': 3.0.8(@types/node@20.14.9) - '@types/node': 20.14.9 - ansi-escapes: 4.3.2 - yoctocolors-cjs: 2.1.3 - dev: true - /@inquirer/checkbox@4.2.2(@types/node@22.14.0): resolution: {integrity: sha512-E+KExNurKcUJJdxmjglTl141EwxWyAHplvsYJQgSwXf8qiNWkTxTuCCqmhFEmbIXd4zLaGMfQFJ6WrZ7fSeV3g==} engines: {node: '>=18'} @@ -4315,20 +4291,6 @@ packages: yoctocolors-cjs: 2.1.3 dev: true - /@inquirer/confirm@5.1.16(@types/node@20.14.9): - resolution: {integrity: sha512-j1a5VstaK5KQy8Mu8cHmuQvN1Zc62TbLhjJxwHvKPPKEoowSF6h/0UdOpA9DNdWZ+9Inq73+puRq1df6OJ8Sag==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - dependencies: - '@inquirer/core': 10.2.0(@types/node@20.14.9) - '@inquirer/type': 3.0.8(@types/node@20.14.9) - '@types/node': 20.14.9 - dev: true - /@inquirer/confirm@5.1.16(@types/node@22.14.0): resolution: {integrity: sha512-j1a5VstaK5KQy8Mu8cHmuQvN1Zc62TbLhjJxwHvKPPKEoowSF6h/0UdOpA9DNdWZ+9Inq73+puRq1df6OJ8Sag==} engines: {node: '>=18'} @@ -4343,26 +4305,6 @@ packages: '@types/node': 22.14.0 dev: true - /@inquirer/core@10.2.0(@types/node@20.14.9): - resolution: {integrity: sha512-NyDSjPqhSvpZEMZrLCYUquWNl+XC/moEcVFqS55IEYIYsY0a1cUCevSqk7ctOlnm/RaSBU5psFryNlxcmGrjaA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - dependencies: - '@inquirer/figures': 1.0.13 - '@inquirer/type': 3.0.8(@types/node@20.14.9) - '@types/node': 20.14.9 - ansi-escapes: 4.3.2 - cli-width: 4.1.0 - mute-stream: 2.0.0 - signal-exit: 4.1.0 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.3 - dev: true - /@inquirer/core@10.2.0(@types/node@22.14.0): resolution: {integrity: sha512-NyDSjPqhSvpZEMZrLCYUquWNl+XC/moEcVFqS55IEYIYsY0a1cUCevSqk7ctOlnm/RaSBU5psFryNlxcmGrjaA==} engines: {node: '>=18'} @@ -4383,21 +4325,6 @@ packages: yoctocolors-cjs: 2.1.3 dev: true - /@inquirer/editor@4.2.18(@types/node@20.14.9): - resolution: {integrity: sha512-yeQN3AXjCm7+Hmq5L6Dm2wEDeBRdAZuyZ4I7tWSSanbxDzqM0KqzoDbKM7p4ebllAYdoQuPJS6N71/3L281i6w==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - dependencies: - '@inquirer/core': 10.2.0(@types/node@20.14.9) - '@inquirer/external-editor': 1.0.1(@types/node@20.14.9) - '@inquirer/type': 3.0.8(@types/node@20.14.9) - '@types/node': 20.14.9 - dev: true - /@inquirer/editor@4.2.18(@types/node@22.14.0): resolution: {integrity: sha512-yeQN3AXjCm7+Hmq5L6Dm2wEDeBRdAZuyZ4I7tWSSanbxDzqM0KqzoDbKM7p4ebllAYdoQuPJS6N71/3L281i6w==} engines: {node: '>=18'} @@ -4413,21 +4340,6 @@ packages: '@types/node': 22.14.0 dev: true - /@inquirer/expand@4.0.18(@types/node@20.14.9): - resolution: {integrity: sha512-xUjteYtavH7HwDMzq4Cn2X4Qsh5NozoDHCJTdoXg9HfZ4w3R6mxV1B9tL7DGJX2eq/zqtsFjhm0/RJIMGlh3ag==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - dependencies: - '@inquirer/core': 10.2.0(@types/node@20.14.9) - '@inquirer/type': 3.0.8(@types/node@20.14.9) - '@types/node': 20.14.9 - yoctocolors-cjs: 2.1.3 - dev: true - /@inquirer/expand@4.0.18(@types/node@22.14.0): resolution: {integrity: sha512-xUjteYtavH7HwDMzq4Cn2X4Qsh5NozoDHCJTdoXg9HfZ4w3R6mxV1B9tL7DGJX2eq/zqtsFjhm0/RJIMGlh3ag==} engines: {node: '>=18'} @@ -4443,20 +4355,6 @@ packages: yoctocolors-cjs: 2.1.3 dev: true - /@inquirer/external-editor@1.0.1(@types/node@20.14.9): - resolution: {integrity: sha512-Oau4yL24d2B5IL4ma4UpbQigkVhzPDXLoqy1ggK4gnHg/stmkffJE4oOXHXF3uz0UEpywG68KcyXsyYpA1Re/Q==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - dependencies: - '@types/node': 20.14.9 - chardet: 2.1.0 - iconv-lite: 0.6.3 - dev: true - /@inquirer/external-editor@1.0.1(@types/node@22.14.0): resolution: {integrity: sha512-Oau4yL24d2B5IL4ma4UpbQigkVhzPDXLoqy1ggK4gnHg/stmkffJE4oOXHXF3uz0UEpywG68KcyXsyYpA1Re/Q==} engines: {node: '>=18'} @@ -4476,20 +4374,6 @@ packages: engines: {node: '>=18'} dev: true - /@inquirer/input@4.2.2(@types/node@20.14.9): - resolution: {integrity: sha512-hqOvBZj/MhQCpHUuD3MVq18SSoDNHy7wEnQ8mtvs71K8OPZVXJinOzcvQna33dNYLYE4LkA9BlhAhK6MJcsVbw==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - dependencies: - '@inquirer/core': 10.2.0(@types/node@20.14.9) - '@inquirer/type': 3.0.8(@types/node@20.14.9) - '@types/node': 20.14.9 - dev: true - /@inquirer/input@4.2.2(@types/node@22.14.0): resolution: {integrity: sha512-hqOvBZj/MhQCpHUuD3MVq18SSoDNHy7wEnQ8mtvs71K8OPZVXJinOzcvQna33dNYLYE4LkA9BlhAhK6MJcsVbw==} engines: {node: '>=18'} @@ -4504,20 +4388,6 @@ packages: '@types/node': 22.14.0 dev: true - /@inquirer/number@3.0.18(@types/node@20.14.9): - resolution: {integrity: sha512-7exgBm52WXZRczsydCVftozFTrrwbG5ySE0GqUd2zLNSBXyIucs2Wnm7ZKLe/aUu6NUg9dg7Q80QIHCdZJiY4A==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - dependencies: - '@inquirer/core': 10.2.0(@types/node@20.14.9) - '@inquirer/type': 3.0.8(@types/node@20.14.9) - '@types/node': 20.14.9 - dev: true - /@inquirer/number@3.0.18(@types/node@22.14.0): resolution: {integrity: sha512-7exgBm52WXZRczsydCVftozFTrrwbG5ySE0GqUd2zLNSBXyIucs2Wnm7ZKLe/aUu6NUg9dg7Q80QIHCdZJiY4A==} engines: {node: '>=18'} @@ -4532,21 +4402,6 @@ packages: '@types/node': 22.14.0 dev: true - /@inquirer/password@4.0.18(@types/node@20.14.9): - resolution: {integrity: sha512-zXvzAGxPQTNk/SbT3carAD4Iqi6A2JS2qtcqQjsL22uvD+JfQzUrDEtPjLL7PLn8zlSNyPdY02IiQjzoL9TStA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - dependencies: - '@inquirer/core': 10.2.0(@types/node@20.14.9) - '@inquirer/type': 3.0.8(@types/node@20.14.9) - '@types/node': 20.14.9 - ansi-escapes: 4.3.2 - dev: true - /@inquirer/password@4.0.18(@types/node@22.14.0): resolution: {integrity: sha512-zXvzAGxPQTNk/SbT3carAD4Iqi6A2JS2qtcqQjsL22uvD+JfQzUrDEtPjLL7PLn8zlSNyPdY02IiQjzoL9TStA==} engines: {node: '>=18'} @@ -4562,28 +4417,6 @@ packages: ansi-escapes: 4.3.2 dev: true - /@inquirer/prompts@7.8.4(@types/node@20.14.9): - resolution: {integrity: sha512-MuxVZ1en1g5oGamXV3DWP89GEkdD54alcfhHd7InUW5BifAdKQEK9SLFa/5hlWbvuhMPlobF0WAx7Okq988Jxg==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - dependencies: - '@inquirer/checkbox': 4.2.2(@types/node@20.14.9) - '@inquirer/confirm': 5.1.16(@types/node@20.14.9) - '@inquirer/editor': 4.2.18(@types/node@20.14.9) - '@inquirer/expand': 4.0.18(@types/node@20.14.9) - '@inquirer/input': 4.2.2(@types/node@20.14.9) - '@inquirer/number': 3.0.18(@types/node@20.14.9) - '@inquirer/password': 4.0.18(@types/node@20.14.9) - '@inquirer/rawlist': 4.1.6(@types/node@20.14.9) - '@inquirer/search': 3.1.1(@types/node@20.14.9) - '@inquirer/select': 4.3.2(@types/node@20.14.9) - '@types/node': 20.14.9 - dev: true - /@inquirer/prompts@7.8.4(@types/node@22.14.0): resolution: {integrity: sha512-MuxVZ1en1g5oGamXV3DWP89GEkdD54alcfhHd7InUW5BifAdKQEK9SLFa/5hlWbvuhMPlobF0WAx7Okq988Jxg==} engines: {node: '>=18'} @@ -4606,21 +4439,6 @@ packages: '@types/node': 22.14.0 dev: true - /@inquirer/rawlist@4.1.6(@types/node@20.14.9): - resolution: {integrity: sha512-KOZqa3QNr3f0pMnufzL7K+nweFFCCBs6LCXZzXDrVGTyssjLeudn5ySktZYv1XiSqobyHRYYK0c6QsOxJEhXKA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - dependencies: - '@inquirer/core': 10.2.0(@types/node@20.14.9) - '@inquirer/type': 3.0.8(@types/node@20.14.9) - '@types/node': 20.14.9 - yoctocolors-cjs: 2.1.3 - dev: true - /@inquirer/rawlist@4.1.6(@types/node@22.14.0): resolution: {integrity: sha512-KOZqa3QNr3f0pMnufzL7K+nweFFCCBs6LCXZzXDrVGTyssjLeudn5ySktZYv1XiSqobyHRYYK0c6QsOxJEhXKA==} engines: {node: '>=18'} @@ -4636,22 +4454,6 @@ packages: yoctocolors-cjs: 2.1.3 dev: true - /@inquirer/search@3.1.1(@types/node@20.14.9): - resolution: {integrity: sha512-TkMUY+A2p2EYVY3GCTItYGvqT6LiLzHBnqsU1rJbrpXUijFfM6zvUx0R4civofVwFCmJZcKqOVwwWAjplKkhxA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - dependencies: - '@inquirer/core': 10.2.0(@types/node@20.14.9) - '@inquirer/figures': 1.0.13 - '@inquirer/type': 3.0.8(@types/node@20.14.9) - '@types/node': 20.14.9 - yoctocolors-cjs: 2.1.3 - dev: true - /@inquirer/search@3.1.1(@types/node@22.14.0): resolution: {integrity: sha512-TkMUY+A2p2EYVY3GCTItYGvqT6LiLzHBnqsU1rJbrpXUijFfM6zvUx0R4civofVwFCmJZcKqOVwwWAjplKkhxA==} engines: {node: '>=18'} @@ -4668,23 +4470,6 @@ packages: yoctocolors-cjs: 2.1.3 dev: true - /@inquirer/select@4.3.2(@types/node@20.14.9): - resolution: {integrity: sha512-nwous24r31M+WyDEHV+qckXkepvihxhnyIaod2MG7eCE6G0Zm/HUF6jgN8GXgf4U7AU6SLseKdanY195cwvU6w==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - dependencies: - '@inquirer/core': 10.2.0(@types/node@20.14.9) - '@inquirer/figures': 1.0.13 - '@inquirer/type': 3.0.8(@types/node@20.14.9) - '@types/node': 20.14.9 - ansi-escapes: 4.3.2 - yoctocolors-cjs: 2.1.3 - dev: true - /@inquirer/select@4.3.2(@types/node@22.14.0): resolution: {integrity: sha512-nwous24r31M+WyDEHV+qckXkepvihxhnyIaod2MG7eCE6G0Zm/HUF6jgN8GXgf4U7AU6SLseKdanY195cwvU6w==} engines: {node: '>=18'} @@ -4702,18 +4487,6 @@ packages: yoctocolors-cjs: 2.1.3 dev: true - /@inquirer/type@3.0.8(@types/node@20.14.9): - resolution: {integrity: sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - dependencies: - '@types/node': 20.14.9 - dev: true - /@inquirer/type@3.0.8(@types/node@22.14.0): resolution: {integrity: sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw==} engines: {node: '>=18'} @@ -4744,7 +4517,7 @@ packages: dependencies: string-width: 5.1.2 string-width-cjs: /string-width@4.2.3 - strip-ansi: 7.1.2 + strip-ansi: 7.1.0 strip-ansi-cjs: /strip-ansi@6.0.1 wrap-ansi: 8.1.0 wrap-ansi-cjs: /wrap-ansi@7.0.0 @@ -4961,7 +4734,7 @@ packages: /@manypkg/find-root@1.1.0: resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.28.3 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 @@ -5048,7 +4821,7 @@ packages: detect-port: 1.6.1 fs-extra: 11.3.1 ink: 5.2.1(@types/react@18.3.11)(react@18.3.1) - inquirer: 12.9.1(@types/node@22.14.0) + inquirer: 12.9.4(@types/node@22.14.0) js-yaml: 4.1.0 react: 18.3.1 semver: 7.7.2 @@ -5193,7 +4966,7 @@ packages: '@mintlify/openapi-parser': 0.0.7 '@mintlify/scraping': 4.0.314(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1)(typescript@5.7.3) '@mintlify/validation': 0.1.421 - chalk: 5.6.2 + chalk: 5.6.0 favicons: 7.2.0 fs-extra: 11.3.1 gray-matter: 4.0.3 @@ -5222,7 +4995,7 @@ packages: '@mintlify/prebuild': 1.0.576(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1)(typescript@5.7.3) '@mintlify/validation': 0.1.421 better-opn: 3.0.2 - chalk: 5.6.2 + chalk: 5.6.0 chokidar: 3.6.0 express: 4.21.2 fs-extra: 11.3.1 @@ -5683,8 +5456,93 @@ packages: fastq: 1.19.1 dev: true - /@oclif/core@4.5.3: - resolution: {integrity: sha512-ISoFlfmsuxJvNKXhabCO4/KqNXDQdLHchZdTPfZbtqAsQbqTw5IKitLVZq9Sz1LWizN37HILp4u0350B8scBjg==} + /@oclif/color@1.0.13: + resolution: {integrity: sha512-/2WZxKCNjeHlQogCs1VBtJWlPXjwWke/9gMrwsVsrUt00g2V6LUBvwgwrxhrXepjOmq4IZ5QeNbpDMEOUlx/JA==} + engines: {node: '>=12.0.0'} + dependencies: + ansi-styles: 4.3.0 + chalk: 4.1.2 + strip-ansi: 6.0.1 + supports-color: 8.1.1 + tslib: 2.8.1 + dev: true + + /@oclif/core@1.26.2: + resolution: {integrity: sha512-6jYuZgXvHfOIc9GIaS4T3CIKGTjPmfAxuMcbCbMRKJJl4aq/4xeRlEz0E8/hz8HxvxZBGvN2GwAUHlrGWQVrVw==} + engines: {node: '>=14.0.0'} + dependencies: + '@oclif/linewrap': 1.0.0 + '@oclif/screen': 3.0.8 + ansi-escapes: 4.3.2 + ansi-styles: 4.3.0 + cardinal: 2.1.1 + chalk: 4.1.2 + clean-stack: 3.0.1 + cli-progress: 3.12.0 + debug: 4.4.1(supports-color@8.1.1) + ejs: 3.1.10 + fs-extra: 9.1.0 + get-package-type: 0.1.0 + globby: 11.1.0 + hyperlinker: 1.0.0 + indent-string: 4.0.0 + is-wsl: 2.2.0 + js-yaml: 3.14.1 + natural-orderby: 2.0.3 + object-treeify: 1.1.33 + password-prompt: 1.1.3 + semver: 7.7.2 + string-width: 4.2.3 + strip-ansi: 6.0.1 + supports-color: 8.1.1 + supports-hyperlinks: 2.3.0 + tslib: 2.8.1 + widest-line: 3.1.0 + wrap-ansi: 7.0.0 + dev: true + + /@oclif/core@2.8.11(@types/node@20.14.9)(typescript@5.5.3): + resolution: {integrity: sha512-9wYW6KRSWfB/D+tqeyl/jxmEz/xPXkFJGVWfKaptqHz6FPWNJREjAM945MuJL2Y8NRhMe+ScRlZ3WpdToX5aVQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@types/cli-progress': 3.11.6 + ansi-escapes: 4.3.2 + ansi-styles: 4.3.0 + cardinal: 2.1.1 + chalk: 4.1.2 + clean-stack: 3.0.1 + cli-progress: 3.12.0 + debug: 4.4.1(supports-color@8.1.1) + ejs: 3.1.10 + fs-extra: 9.1.0 + get-package-type: 0.1.0 + globby: 11.1.0 + hyperlinker: 1.0.0 + indent-string: 4.0.0 + is-wsl: 2.2.0 + js-yaml: 3.14.1 + natural-orderby: 2.0.3 + object-treeify: 1.1.33 + password-prompt: 1.1.3 + semver: 7.7.2 + string-width: 4.2.3 + strip-ansi: 6.0.1 + supports-color: 8.1.1 + supports-hyperlinks: 2.3.0 + ts-node: 10.9.1(@types/node@20.14.9)(typescript@5.5.3) + tslib: 2.8.1 + widest-line: 3.1.0 + wordwrap: 1.0.0 + wrap-ansi: 7.0.0 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - typescript + dev: true + + /@oclif/core@4.5.2: + resolution: {integrity: sha512-eQcKyrEcDYeZJKu4vUWiu0ii/1Gfev6GF4FsLSgNez5/+aQyAUCjg3ZWlurf491WiYZTXCWyKAxyPWk8DKv2MA==} engines: {node: '>=18.0.0'} dependencies: ansi-escapes: 4.3.2 @@ -5701,36 +5559,43 @@ packages: semver: 7.7.2 string-width: 4.2.3 supports-color: 8.1.1 - tinyglobby: 0.2.15 + tinyglobby: 0.2.14 widest-line: 3.1.0 wordwrap: 1.0.0 wrap-ansi: 7.0.0 dev: true - /@oclif/plugin-help@6.2.32: - resolution: {integrity: sha512-LrmMdo9EMJciOvF8UurdoTcTMymv5npKtxMAyonZvhSvGR8YwCKnuHIh00+SO2mNtGOYam7f4xHnUmj2qmanyA==} - engines: {node: '>=18.0.0'} + /@oclif/linewrap@1.0.0: + resolution: {integrity: sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw==} + dev: true + + /@oclif/plugin-help@5.1.20: + resolution: {integrity: sha512-N8xRxE/isFcdBDI8cobixEZA5toxIK5jbxpwALNTr4s8KNAtBA3ORQrSiY0fWGkcv0sCGMwZw7rJ0Izh18JPsw==} + engines: {node: '>=12.0.0'} dependencies: - '@oclif/core': 4.5.3 + '@oclif/core': 1.26.2 dev: true - /@oclif/plugin-not-found@3.2.67(@types/node@20.14.9): - resolution: {integrity: sha512-Q2VluSwTrh7Sk0ey88Lk5WSATn9AZ6TjYQIyt2QrQolOBErAgpDoDSMVRYuVNtjxPBTDBzz4MM54QRFa/nN4IQ==} - engines: {node: '>=18.0.0'} + /@oclif/plugin-not-found@2.3.23(@types/node@20.14.9)(typescript@5.5.3): + resolution: {integrity: sha512-UZM8aolxXvqwH8WcmJxRNASDWgMoSQm/pgCdkc1AGCRevYc8+LBSO+U6nLWq+Dx8H/dn9RyIv5oiUIOGkKDlZA==} + engines: {node: '>=12.0.0'} dependencies: - '@inquirer/prompts': 7.8.4(@types/node@20.14.9) - '@oclif/core': 4.5.3 - ansis: 3.17.0 + '@oclif/color': 1.0.13 + '@oclif/core': 2.8.11(@types/node@20.14.9)(typescript@5.5.3) fast-levenshtein: 3.0.0 + lodash: 4.17.21 transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' - '@types/node' + - typescript dev: true - /@oclif/plugin-plugins@5.4.46: - resolution: {integrity: sha512-VSk+SwKDkGShuRGC5f5WNF/U6Y8JvLfzIaWjLxMe4GlBmln0mKhHqvcfJc2gZOiyJp1QYK638H1w/peSkoZHag==} + /@oclif/plugin-plugins@5.4.4: + resolution: {integrity: sha512-p30fo3JPtbOqTJOX9A/8qKV/14XWt8xFgG/goVfIkuKBAO+cdY78ag8pYatlpzsYzJhO27X1MFn0WkkPWo36Ww==} engines: {node: '>=18.0.0'} dependencies: - '@oclif/core': 4.5.3 + '@oclif/core': 4.5.2 ansis: 3.17.0 debug: 4.4.1(supports-color@8.1.1) npm: 10.9.3 @@ -5745,18 +5610,29 @@ packages: - supports-color dev: true - /@oclif/plugin-warn-if-update-available@3.1.46: - resolution: {integrity: sha512-YDlr//SHmC80eZrt+0wNFWSo1cOSU60RoWdhSkAoPB3pUGPSNHZDquXDpo7KniinzYPsj1rfetCYk7UVXwYu7A==} - engines: {node: '>=18.0.0'} + /@oclif/plugin-warn-if-update-available@2.0.24(@types/node@20.14.9)(typescript@5.5.3): + resolution: {integrity: sha512-Rq8/EZ8wQawvPWS6W59Zhf/zSz/umLc3q75I1ybi7pul6YMNwf/E1eDVHytSUEQ6yQV+p3cCs034IItz4CVdjw==} + engines: {node: '>=12.0.0'} dependencies: - '@oclif/core': 4.5.3 - ansis: 3.17.0 + '@oclif/core': 2.8.11(@types/node@20.14.9)(typescript@5.5.3) + chalk: 4.1.2 debug: 4.4.1(supports-color@8.1.1) + fs-extra: 9.1.0 http-call: 5.3.0 lodash: 4.17.21 - registry-auth-token: 5.1.0 + semver: 7.7.2 transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' - supports-color + - typescript + dev: true + + /@oclif/screen@3.0.8: + resolution: {integrity: sha512-yx6KAqlt3TAHBduS2fMQtJDL2ufIHnDRArrJEOoTTuizxqmjLT+psGYOHpmMl3gvQpFJ11Hs76guUUktzAF9Bg==} + engines: {node: '>=12.0.0'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. dev: true /@octokit/auth-token@2.5.0: @@ -6346,8 +6222,8 @@ packages: engines: {node: '>= 20.0.0'} dev: false - /@peculiar/asn1-schema@2.5.0: - resolution: {integrity: sha512-YM/nFfskFJSlHqv59ed6dZlLZqtZQwjRVJ4bBAiWV08Oc+1rSd5lDZcBEx0lGDHfSoH3UziI2pXt2UM33KerPQ==} + /@peculiar/asn1-schema@2.4.0: + resolution: {integrity: sha512-umbembjIWOrPSOzEGG5vxFLkeM8kzIhLkgigtsOrfLKnuzxWxejAcUX+q/SoZCdemlODOcr5WiYa7+dIEzBXZQ==} dependencies: asn1js: 3.0.6 pvtsutils: 1.3.6 @@ -6365,7 +6241,7 @@ packages: resolution: {integrity: sha512-BRs5XUAwiyCDQMsVA9IDvDa7UBR9gAvPHgugOeGng3YN6vJ9JYonyDc0lNczErgtCWtucjR5N7VtaonboD/ezg==} engines: {node: '>=10.12.0'} dependencies: - '@peculiar/asn1-schema': 2.5.0 + '@peculiar/asn1-schema': 2.4.0 '@peculiar/json-schema': 1.1.12 pvtsutils: 1.3.6 tslib: 2.8.1 @@ -6383,27 +6259,6 @@ packages: engines: {node: '>=16'} dev: false - /@pnpm/config.env-replace@1.1.0: - resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} - engines: {node: '>=12.22.0'} - dev: true - - /@pnpm/network.ca-file@1.0.2: - resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} - engines: {node: '>=12.22.0'} - dependencies: - graceful-fs: 4.2.10 - dev: true - - /@pnpm/npm-conf@2.3.1: - resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==} - engines: {node: '>=12'} - dependencies: - '@pnpm/config.env-replace': 1.1.0 - '@pnpm/network.ca-file': 1.0.2 - config-chain: 1.1.13 - dev: true - /@polka/url@1.0.0-next.29: resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} dev: true @@ -6501,10 +6356,6 @@ packages: resolution: {integrity: sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==} dev: false - /@radix-ui/primitive@1.1.2: - resolution: {integrity: sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==} - dev: false - /@radix-ui/primitive@1.1.3: resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} dev: false @@ -6603,7 +6454,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.28.3 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) '@types/react': 18.3.11 '@types/react-dom': 18.3.0 @@ -7114,7 +6965,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.28.3 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.11)(react@18.3.1) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) @@ -7175,30 +7026,6 @@ packages: react-dom: 18.3.1(react@18.3.1) dev: false - /@radix-ui/react-dismissable-layer@1.1.10(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@18.3.11)(react@18.3.1) - '@types/react': 18.3.11 - '@types/react-dom': 18.3.0 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - dev: false - /@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} peerDependencies: @@ -7313,19 +7140,6 @@ packages: react: 18.3.1 dev: false - /@radix-ui/react-focus-guards@1.1.2(@types/react@18.3.11)(react@18.3.1): - resolution: {integrity: sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@types/react': 18.3.11 - react: 18.3.1 - dev: false - /@radix-ui/react-focus-guards@1.1.3(@types/react@18.3.11)(react@18.3.1): resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} peerDependencies: @@ -7644,7 +7458,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.28.3 '@floating-ui/react-dom': 2.1.6(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.11)(react@18.3.1) @@ -7691,35 +7505,6 @@ packages: react-dom: 18.3.1(react@18.3.1) dev: false - /@radix-ui/react-popper@1.1.3(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.28.4 - '@floating-ui/react-dom': 2.1.6(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-use-rect': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/rect': 1.0.1 - '@types/react': 18.3.11 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - dev: false - /@radix-ui/react-popper@1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==} peerDependencies: @@ -7749,35 +7534,6 @@ packages: react-dom: 18.3.1(react@18.3.1) dev: false - /@radix-ui/react-popper@1.2.7(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-IUFAccz1JyKcf/RjB552PlWwxjeCJB8/4KxT7EhBHOJM+mN7LdW+B3kacJXILm32xawcMMjb2i0cIZpo+f9kiQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@floating-ui/react-dom': 2.1.6(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-context': 1.1.2(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-use-rect': 1.1.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/rect': 1.1.1 - '@types/react': 18.3.11 - '@types/react-dom': 18.3.0 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - dev: false - /@radix-ui/react-popper@1.2.8(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} peerDependencies: @@ -7820,7 +7576,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.28.3 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) '@types/react': 18.3.11 '@types/react-dom': 18.3.0 @@ -8133,7 +7889,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.28.3 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.11)(react@18.3.1) @@ -8303,48 +8059,8 @@ packages: react-remove-scroll: 2.5.5(@types/react@18.3.11)(react@18.3.1) dev: false - /@radix-ui/react-select@2.0.0(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-RH5b7af4oHtkcHS7pG6Sgv5rk5Wxa7XI8W5gvB1N/yiuDGZxko1ynvOiVhFM7Cis2A8zxF9bTOUVbRDzPepe6w==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.28.3 - '@radix-ui/number': 1.0.1 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-direction': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-popper': 1.1.3(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.11 - aria-hidden: 1.2.6 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.5.5(@types/react@18.3.11)(react@18.3.1) - dev: false - - /@radix-ui/react-select@2.2.5(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-HnMTdXEVuuyzx63ME0ut4+sEMYW6oouHWNGUZc7ddvUWIcfCva/AMoqEW/3wnEllriMWBa0RHspCYnfCWJQYmA==} + /@radix-ui/react-select@2.2.6(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -8357,16 +8073,16 @@ packages: optional: true dependencies: '@radix-ui/number': 1.1.1 - '@radix-ui/primitive': 1.1.2 + '@radix-ui/primitive': 1.1.3 '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.11)(react@18.3.1) '@radix-ui/react-context': 1.1.2(@types/react@18.3.11)(react@18.3.1) '@radix-ui/react-direction': 1.1.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.3.11)(react@18.3.1) '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-id': 1.1.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-popper': 1.2.7(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-slot': 1.2.3(@types/react@18.3.11)(react@18.3.1) @@ -8569,7 +8285,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.28.3 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-context': 1.0.1(@types/react@18.3.11)(react@18.3.1) '@radix-ui/react-direction': 1.0.1(@types/react@18.3.11)(react@18.3.1) @@ -8596,7 +8312,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.28.3 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.11)(react@18.3.1) @@ -8619,7 +8335,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.28.3 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.11)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.11)(react@18.3.1) @@ -8670,37 +8386,6 @@ packages: react-dom: 18.3.1(react@18.3.1) dev: false - /@radix-ui/react-tooltip@1.0.7(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-lPh5iKNFVQ/jav/j6ZrWq3blfDJ0OH9R6FlNUHPMqdLuQ9vwDgFsRxvl8b7Asuy5c8xmoojHUxKHQSOAvMHxyw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - dependencies: - '@babel/runtime': 7.28.3 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-popper': 1.1.3(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.11)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) - '@types/react': 18.3.11 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - dev: false - /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.3.11)(react@18.3.1): resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} peerDependencies: @@ -8808,7 +8493,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.28.3 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.11)(react@18.3.1) '@types/react': 18.3.11 react: 18.3.1 @@ -8918,7 +8603,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.28.3 '@radix-ui/rect': 1.0.1 '@types/react': 18.3.11 react: 18.3.1 @@ -9039,7 +8724,7 @@ packages: /@radix-ui/rect@1.0.1: resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.28.3 dev: false /@radix-ui/rect@1.1.0: @@ -10137,7 +9822,7 @@ packages: engines: {node: '>=18'} dependencies: '@babel/code-frame': 7.27.1 - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.28.3 '@types/aria-query': 5.0.4 aria-query: 5.3.0 dom-accessibility-api: 0.5.16 @@ -10254,12 +9939,6 @@ packages: '@types/node': 20.14.9 dev: false - /@types/archiver@6.0.3: - resolution: {integrity: sha512-a6wUll6k3zX6qs5KlxIggs1P1JcYJaTCx2gnlr+f0S1yd2DoaEwoIK10HmBaLnZwWneBz+JBm0dwcZu0zECBcQ==} - dependencies: - '@types/readdir-glob': 1.1.5 - dev: true - /@types/aria-query@5.0.4: resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} dev: true @@ -10277,6 +9956,12 @@ packages: '@types/deep-eql': 4.0.2 dev: true + /@types/cli-progress@3.11.6: + resolution: {integrity: sha512-cE3+jb9WRlu+uOSAugewNpITJDt1VF8dHOopPO4IABFc3SXYL5WE/+PTz/FCdZRRfIujiWW3n3aMbv1eIGVRWA==} + dependencies: + '@types/node': 20.14.9 + dev: true + /@types/connect@3.4.38: resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: @@ -10522,13 +10207,6 @@ packages: resolution: {integrity: sha512-K7DIaHnh0mzVxreCR9qwgNxp3MH9dltPNIEddW9MYUlcKAzm+3grKNSTe2vCJHI1FaLpvpL5JGJrz1UZDKYvDg==} dependencies: undici-types: 5.26.5 - dev: false - - /@types/node@18.19.124: - resolution: {integrity: sha512-hY4YWZFLs3ku6D2Gqo3RchTd9VRCcrjqp/I0mmohYeUVA5Y8eCXKJEasHxLAJVZRJuQogfd1GiJ9lgogBgKeuQ==} - dependencies: - undici-types: 5.26.5 - dev: true /@types/node@20.14.9: resolution: {integrity: sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==} @@ -10572,18 +10250,6 @@ packages: '@types/prop-types': 15.7.15 csstype: 3.1.3 - /@types/readable-stream@4.0.21: - resolution: {integrity: sha512-19eKVv9tugr03IgfXlA9UVUVRbW6IuqRO5B92Dl4a6pT7K8uaGrNS0GkxiZD0BOk6PLuXl5FhWl//eX/pzYdTQ==} - dependencies: - '@types/node': 20.14.9 - dev: true - - /@types/readdir-glob@1.1.5: - resolution: {integrity: sha512-raiuEPUYqXu+nvtY2Pe8s8FEmZ3x5yAH4VkLdihcPdalvsHltomrRC9BzuStrJ9yk06470hS0Crw0f1pXqD+Hg==} - dependencies: - '@types/node': 20.14.9 - dev: true - /@types/send@0.17.5: resolution: {integrity: sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==} dependencies: @@ -10619,7 +10285,7 @@ packages: /@types/ssh2@1.15.5: resolution: {integrity: sha512-N1ASjp/nXH3ovBHddRJpli4ozpk6UdDYIX4RJWFa9L1YKnzdhTlVmiGHm4DZnj/jLbqZpes4aeR30EFGQtvhQQ==} dependencies: - '@types/node': 18.19.124 + '@types/node': 18.19.123 dev: true /@types/unist@2.0.11: @@ -10659,61 +10325,39 @@ packages: dev: true optional: true - /@typescript-eslint/project-service@8.43.0(typescript@5.5.3): - resolution: {integrity: sha512-htB/+D/BIGoNTQYffZw4uM4NzzuolCoaA/BusuSIcC8YjmBYQioew5VUZAYdAETPjeed0hqCaW7EHg+Robq8uw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - dependencies: - '@typescript-eslint/tsconfig-utils': 8.43.0(typescript@5.5.3) - '@typescript-eslint/types': 8.43.0 - debug: 4.4.1(supports-color@8.1.1) - typescript: 5.5.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/tsconfig-utils@8.43.0(typescript@5.5.3): - resolution: {integrity: sha512-ALC2prjZcj2YqqL5X/bwWQmHA2em6/94GcbB/KKu5SX3EBDOsqztmmX1kMkvAJHzxk7TazKzJfFiEIagNV3qEA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - dependencies: - typescript: 5.5.3 - dev: true - - /@typescript-eslint/types@8.43.0: - resolution: {integrity: sha512-vQ2FZaxJpydjSZJKiSW/LJsabFFvV7KgLC5DiLhkBcykhQj8iK9BOaDmQt74nnKdLvceM5xmhaTF+pLekrxEkw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + /@typescript-eslint/types@6.19.0: + resolution: {integrity: sha512-lFviGV/vYhOy3m8BJ/nAKoAyNhInTdXpftonhWle66XHAtT1ouBlkjL496b5H5hb8dWXHwtypTqgtb/DEa+j5A==} + engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@8.43.0(typescript@5.5.3): - resolution: {integrity: sha512-7Vv6zlAhPb+cvEpP06WXXy/ZByph9iL6BQRBDj4kmBsW98AqEeQHlj/13X+sZOrKSo9/rNKH4Ul4f6EICREFdw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + /@typescript-eslint/typescript-estree@6.19.0(typescript@5.5.3): + resolution: {integrity: sha512-o/zefXIbbLBZ8YJ51NlkSAt2BamrK6XOmuxSR3hynMIzzyMY33KuJ9vuMdFSXW+H0tVvdF9qBPTHA91HDb4BIQ==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true dependencies: - '@typescript-eslint/project-service': 8.43.0(typescript@5.5.3) - '@typescript-eslint/tsconfig-utils': 8.43.0(typescript@5.5.3) - '@typescript-eslint/types': 8.43.0 - '@typescript-eslint/visitor-keys': 8.43.0 + '@typescript-eslint/types': 6.19.0 + '@typescript-eslint/visitor-keys': 6.19.0 debug: 4.4.1(supports-color@8.1.1) - fast-glob: 3.3.3 + globby: 11.1.0 is-glob: 4.0.3 - minimatch: 9.0.5 + minimatch: 9.0.3 semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.5.3) + ts-api-utils: 1.4.3(typescript@5.5.3) typescript: 5.5.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/visitor-keys@8.43.0: - resolution: {integrity: sha512-T+S1KqRD4sg/bHfLwrpF/K3gQLBM1n7Rp7OjjikjTEssI2YJzQpi5WXoynOaQ93ERIuq3O8RBTOUYDKszUCEHw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + /@typescript-eslint/visitor-keys@6.19.0: + resolution: {integrity: sha512-hZaUCORLgubBvtGpp1JEFEazcuEdfxta9j4iUwdSAr7mEsYYAp3EAUyCZk3VEEqGj6W+AV4uWyrDGtrlawAsgQ==} + engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 8.43.0 - eslint-visitor-keys: 4.2.1 + '@typescript-eslint/types': 6.19.0 + eslint-visitor-keys: 3.4.3 dev: true /@typescript/vfs@1.6.1(typescript@5.7.3): @@ -10846,7 +10490,7 @@ packages: resolution: {integrity: sha512-AiLUiuZ0FuA+/8i19mTYd+re5jqjEc2jZbgJ2up0VY0Ddyyxg/uUtBDpIFAy4uzKaQxOW8gMgBdAJJ2ydhu39A==} dependencies: '@vitest/pretty-format': 3.0.9 - magic-string: 0.30.19 + magic-string: 0.30.18 pathe: 2.0.3 dev: true @@ -10934,78 +10578,78 @@ packages: tinyrainbow: 2.0.0 dev: true - /@vue/compiler-core@3.5.21: - resolution: {integrity: sha512-8i+LZ0vf6ZgII5Z9XmUvrCyEzocvWT+TeR2VBUVlzIH6Tyv57E20mPZ1bCS+tbejgUgmjrEh7q/0F0bibskAmw==} + /@vue/compiler-core@3.5.20: + resolution: {integrity: sha512-8TWXUyiqFd3GmP4JTX9hbiTFRwYHgVL/vr3cqhr4YQ258+9FADwvj7golk2sWNGHR67QgmCZ8gz80nQcMokhwg==} dependencies: - '@babel/parser': 7.28.4 - '@vue/shared': 3.5.21 + '@babel/parser': 7.28.3 + '@vue/shared': 3.5.20 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.1 dev: false - /@vue/compiler-dom@3.5.21: - resolution: {integrity: sha512-jNtbu/u97wiyEBJlJ9kmdw7tAr5Vy0Aj5CgQmo+6pxWNQhXZDPsRr1UWPN4v3Zf82s2H3kF51IbzZ4jMWAgPlQ==} + /@vue/compiler-dom@3.5.20: + resolution: {integrity: sha512-whB44M59XKjqUEYOMPYU0ijUV0G+4fdrHVKDe32abNdX/kJe1NUEMqsi4cwzXa9kyM9w5S8WqFsrfo1ogtBZGQ==} dependencies: - '@vue/compiler-core': 3.5.21 - '@vue/shared': 3.5.21 + '@vue/compiler-core': 3.5.20 + '@vue/shared': 3.5.20 dev: false - /@vue/compiler-sfc@3.5.21: - resolution: {integrity: sha512-SXlyk6I5eUGBd2v8Ie7tF6ADHE9kCR6mBEuPyH1nUZ0h6Xx6nZI29i12sJKQmzbDyr2tUHMhhTt51Z6blbkTTQ==} + /@vue/compiler-sfc@3.5.20: + resolution: {integrity: sha512-SFcxapQc0/feWiSBfkGsa1v4DOrnMAQSYuvDMpEaxbpH5dKbnEM5KobSNSgU+1MbHCl+9ftm7oQWxvwDB6iBfw==} dependencies: - '@babel/parser': 7.28.4 - '@vue/compiler-core': 3.5.21 - '@vue/compiler-dom': 3.5.21 - '@vue/compiler-ssr': 3.5.21 - '@vue/shared': 3.5.21 + '@babel/parser': 7.28.3 + '@vue/compiler-core': 3.5.20 + '@vue/compiler-dom': 3.5.20 + '@vue/compiler-ssr': 3.5.20 + '@vue/shared': 3.5.20 estree-walker: 2.0.2 - magic-string: 0.30.19 + magic-string: 0.30.18 postcss: 8.5.6 source-map-js: 1.2.1 dev: false - /@vue/compiler-ssr@3.5.21: - resolution: {integrity: sha512-vKQ5olH5edFZdf5ZrlEgSO1j1DMA4u23TVK5XR1uMhvwnYvVdDF0nHXJUblL/GvzlShQbjhZZ2uvYmDlAbgo9w==} + /@vue/compiler-ssr@3.5.20: + resolution: {integrity: sha512-RSl5XAMc5YFUXpDQi+UQDdVjH9FnEpLDHIALg5J0ITHxkEzJ8uQLlo7CIbjPYqmZtt6w0TsIPbo1izYXwDG7JA==} dependencies: - '@vue/compiler-dom': 3.5.21 - '@vue/shared': 3.5.21 + '@vue/compiler-dom': 3.5.20 + '@vue/shared': 3.5.20 dev: false - /@vue/reactivity@3.5.21: - resolution: {integrity: sha512-3ah7sa+Cwr9iiYEERt9JfZKPw4A2UlbY8RbbnH2mGCE8NwHkhmlZt2VsH0oDA3P08X3jJd29ohBDtX+TbD9AsA==} + /@vue/reactivity@3.5.20: + resolution: {integrity: sha512-hS8l8x4cl1fmZpSQX/NXlqWKARqEsNmfkwOIYqtR2F616NGfsLUm0G6FQBK6uDKUCVyi1YOL8Xmt/RkZcd/jYQ==} dependencies: - '@vue/shared': 3.5.21 + '@vue/shared': 3.5.20 dev: false - /@vue/runtime-core@3.5.21: - resolution: {integrity: sha512-+DplQlRS4MXfIf9gfD1BOJpk5RSyGgGXD/R+cumhe8jdjUcq/qlxDawQlSI8hCKupBlvM+3eS1se5xW+SuNAwA==} + /@vue/runtime-core@3.5.20: + resolution: {integrity: sha512-vyQRiH5uSZlOa+4I/t4Qw/SsD/gbth0SW2J7oMeVlMFMAmsG1rwDD6ok0VMmjXY3eI0iHNSSOBilEDW98PLRKw==} dependencies: - '@vue/reactivity': 3.5.21 - '@vue/shared': 3.5.21 + '@vue/reactivity': 3.5.20 + '@vue/shared': 3.5.20 dev: false - /@vue/runtime-dom@3.5.21: - resolution: {integrity: sha512-3M2DZsOFwM5qI15wrMmNF5RJe1+ARijt2HM3TbzBbPSuBHOQpoidE+Pa+XEaVN+czbHf81ETRoG1ltztP2em8w==} + /@vue/runtime-dom@3.5.20: + resolution: {integrity: sha512-KBHzPld/Djw3im0CQ7tGCpgRedryIn4CcAl047EhFTCCPT2xFf4e8j6WeKLgEEoqPSl9TYqShc3Q6tpWpz/Xgw==} dependencies: - '@vue/reactivity': 3.5.21 - '@vue/runtime-core': 3.5.21 - '@vue/shared': 3.5.21 + '@vue/reactivity': 3.5.20 + '@vue/runtime-core': 3.5.20 + '@vue/shared': 3.5.20 csstype: 3.1.3 dev: false - /@vue/server-renderer@3.5.21(vue@3.5.21): - resolution: {integrity: sha512-qr8AqgD3DJPJcGvLcJKQo2tAc8OnXRcfxhOJCPF+fcfn5bBGz7VCcO7t+qETOPxpWK1mgysXvVT/j+xWaHeMWA==} + /@vue/server-renderer@3.5.20(vue@3.5.20): + resolution: {integrity: sha512-HthAS0lZJDH21HFJBVNTtx+ULcIbJQRpjSVomVjfyPkFSpCwvsPTA+jIzOaUm3Hrqx36ozBHePztQFg6pj5aKg==} peerDependencies: - vue: 3.5.21 + vue: 3.5.20 dependencies: - '@vue/compiler-ssr': 3.5.21 - '@vue/shared': 3.5.21 - vue: 3.5.21(typescript@5.7.3) + '@vue/compiler-ssr': 3.5.20 + '@vue/shared': 3.5.20 + vue: 3.5.20(typescript@5.7.3) dev: false - /@vue/shared@3.5.21: - resolution: {integrity: sha512-+2k1EQpnYuVuu3N7atWyG3/xoFWIVJZq4Mz8XNOdScFI0etES75fbny/oU4lKWk/577P1zmg0ioYvpGEDZ3DLw==} + /@vue/shared@3.5.20: + resolution: {integrity: sha512-SoRGP596KU/ig6TfgkCMbXkr4YJ91n/QSdMuqeP5r3hVIYA3CPHUBCc7Skak0EAKV+5lL4KyIh61VA/pK1CIAA==} dev: false /@webassemblyjs/ast@1.14.1: @@ -11178,6 +10822,11 @@ packages: dependencies: acorn: 8.15.0 + /acorn-walk@8.2.0: + resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + engines: {node: '>=0.4.0'} + dev: true + /acorn-walk@8.3.2: resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} engines: {node: '>=0.4.0'} @@ -11201,6 +10850,12 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + /acorn@8.8.1: + resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + /address@1.2.2: resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} engines: {node: '>= 10.0.0'} @@ -11239,7 +10894,7 @@ packages: indent-string: 5.0.0 dev: true - /ai@3.0.23(react@18.3.1)(solid-js@1.9.9)(svelte@4.2.20)(vue@3.5.21)(zod@3.23.8): + /ai@3.0.23(react@18.3.1)(solid-js@1.9.9)(svelte@4.2.20)(vue@3.5.20)(zod@3.23.8): resolution: {integrity: sha512-VL8Fx9euEtffzIu0BpLDZkACB+oU6zj4vHXSsSoT5VfwAzE009FJedOMPK1M4u60RpYw/DgwlD7OLN7XQfvSHw==} engines: {node: '>=18'} peerDependencies: @@ -11274,8 +10929,8 @@ packages: svelte: 4.2.20 swr: 2.2.0(react@18.3.1) swr-store: 0.10.6 - swrv: 1.0.4(vue@3.5.21) - vue: 3.5.21(typescript@5.7.3) + swrv: 1.0.4(vue@3.5.20) + vue: 3.5.20(typescript@5.7.3) zod: 3.23.8 zod-to-json-schema: 3.22.5(zod@3.23.8) dev: false @@ -11388,8 +11043,8 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - /ansi-regex@6.2.2: - resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + /ansi-regex@6.2.0: + resolution: {integrity: sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==} engines: {node: '>=12'} /ansi-sequence-parser@1.1.3: @@ -11419,10 +11074,14 @@ packages: engines: {node: '>=10'} dev: true - /ansi-styles@6.2.3: - resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + /ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} + /ansicolors@0.3.2: + resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} + dev: true + /ansis@3.17.0: resolution: {integrity: sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==} engines: {node: '>=14'} @@ -11550,6 +11209,16 @@ packages: tslib: 2.8.1 dev: false + /assert@2.1.0: + resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} + dependencies: + call-bind: 1.0.8 + is-nan: 1.3.2 + object-is: 1.1.6 + object.assign: 4.1.7 + util: 0.12.5 + dev: true + /assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} dev: true @@ -11585,6 +11254,16 @@ packages: resolution: {integrity: sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==} dev: true + /async-mqtt@2.6.3: + resolution: {integrity: sha512-mFGTtlEpOugOoLOf9H5AJyJaZUNtOVXLGGOnPaPZDPQex6W6iIOgtV+fAgam0GQbgnLfgX+Wn/QzS6d+PYfFAQ==} + dependencies: + mqtt: 4.3.8 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + /async@3.2.6: resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} dev: true @@ -11679,6 +11358,16 @@ packages: transitivePeerDependencies: - debug + /axios@1.7.4: + resolution: {integrity: sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==} + dependencies: + follow-redirects: 1.15.11 + form-data: 4.0.4 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + dev: true + /axobject-query@4.1.0: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} @@ -11706,8 +11395,8 @@ packages: dev: true optional: true - /bare-fs@4.2.3: - resolution: {integrity: sha512-1aGs5pRVLToMQ79elP+7cc0u0s/wXAzfBv/7hDloT7WFggLqECCas5qqPky7WHCFdsBH5WDq6sD4fAoz5sJbtA==} + /bare-fs@4.2.1: + resolution: {integrity: sha512-mELROzV0IhqilFgsl1gyp48pnZsaV9xhQapHLDsvn4d4ZTfbFhcghQezl7FTEDNBcGqLUnNI3lUlm6ecrLWdFA==} engines: {bare: '>=1.16.0'} requiresBuild: true peerDependencies: @@ -11811,15 +11500,6 @@ packages: inherits: 2.0.4 readable-stream: 3.6.2 - /bl@6.1.3: - resolution: {integrity: sha512-nHB8B5roHlGX5TFsWeiQJijdddZIOHuv1eL2cM2kHnG3qR91CYLsysGe+CvxQfEd23EKD0eJf4lto0frTbddKA==} - dependencies: - '@types/readable-stream': 4.0.21 - buffer: 6.0.3 - inherits: 2.0.4 - readable-stream: 4.7.0 - dev: true - /blake3-wasm@2.1.5: resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} dev: true @@ -11861,15 +11541,6 @@ packages: dependencies: fill-range: 7.1.1 - /broker-factory@3.1.9: - resolution: {integrity: sha512-MzvndyD6EcbkBtX4NXm/HfdO1+cOR5ONNdMCXEKfHpxGdMtuDz7+o+nJf7HMtyPH1sUVf/lEIP+DMluC5PgaBQ==} - dependencies: - '@babel/runtime': 7.28.4 - fast-unique-numbers: 9.0.23 - tslib: 2.8.1 - worker-factory: 7.0.45 - dev: true - /browserslist@4.25.3: resolution: {integrity: sha512-cDGv1kkDI4/0e5yON9yM5G/0A5u8sf5TnmdX5C9qHzI9PPu++sQ9zjm1k9NiOrf3riY4OkK0zSGqfvJyJsgCBQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -12018,9 +11689,13 @@ packages: /caniuse-lite@1.0.30001737: resolution: {integrity: sha512-BiloLiXtQNrY5UyF0+1nSJLXUENuhka2pzy2Fx5pGxqavdrxSCW4U6Pn/PoG3Efspi2frRbHpBV2XsrPE6EDlw==} - /caniuse-lite@1.0.30001741: - resolution: {integrity: sha512-QGUGitqsc8ARjLdgAfxETDhRbJ0REsP6O3I96TAth/mVjh2cYzN2u+3AzPP3aVSm2FehEItaJw1xd+IGBXWeSw==} - dev: false + /cardinal@2.1.1: + resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==} + hasBin: true + dependencies: + ansicolors: 0.3.2 + redeyed: 2.1.1 + dev: true /ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -12088,10 +11763,6 @@ packages: resolution: {integrity: sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - /chalk@5.6.2: - resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - /character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} @@ -12123,51 +11794,42 @@ packages: engines: {node: '>= 16'} dev: true - /checkly@6.5.0(@types/node@20.14.9)(typescript@5.5.3): - resolution: {integrity: sha512-i90/P+sWL6CmTBRGOHXFAogisrDdomE928XKSaw2g4t9e2dVGcaDfQ72ZdXFCm27gVQd7siXPGrO6LNFwyEsWg==} - engines: {node: ^18.19.0 || >=20.5.0} + /checkly@4.9.0(@types/node@20.14.9)(typescript@5.5.3): + resolution: {integrity: sha512-LqohEntErF7dJaJPsEpjvr/O9wUfzBRac6DOXgFDMEw+dNi19oBAcspdOqVGjPjMoCZ9/s5b5tSJI1pusY4mJQ==} + engines: {node: '>=16.0.0'} hasBin: true - peerDependencies: - jiti: '>=2' - peerDependenciesMeta: - jiti: - optional: true dependencies: - '@oclif/core': 4.5.3 - '@oclif/plugin-help': 6.2.32 - '@oclif/plugin-not-found': 3.2.67(@types/node@20.14.9) - '@oclif/plugin-plugins': 5.4.46 - '@oclif/plugin-warn-if-update-available': 3.1.46 - '@types/archiver': 6.0.3 - '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.5.3) - acorn: 8.15.0 - acorn-walk: 8.3.4 - archiver: 7.0.1 - axios: 1.11.0 + '@oclif/core': 2.8.11(@types/node@20.14.9)(typescript@5.5.3) + '@oclif/plugin-help': 5.1.20 + '@oclif/plugin-not-found': 2.3.23(@types/node@20.14.9)(typescript@5.5.3) + '@oclif/plugin-plugins': 5.4.4 + '@oclif/plugin-warn-if-update-available': 2.0.24(@types/node@20.14.9)(typescript@5.5.3) + '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.5.3) + acorn: 8.8.1 + acorn-walk: 8.2.0 + async-mqtt: 2.6.3 + axios: 1.7.4 chalk: 4.1.2 - ci-info: 4.3.0 + ci-info: 3.8.0 conf: 10.2.0 - dotenv: 16.6.1 - execa: 9.6.0 + dotenv: 16.3.1 git-repo-info: 2.1.1 - glob: 10.4.5 + glob: 10.3.1 indent-string: 4.0.0 - json-stream-stringify: 3.1.6 json5: 2.2.3 jwt-decode: 3.1.2 log-symbols: 4.1.0 - luxon: 3.7.2 - minimatch: 9.0.5 - mqtt: 5.14.1 - open: 8.4.2 + luxon: 3.3.0 + open: 8.4.0 p-queue: 6.6.2 prompts: 2.4.2 proxy-from-env: 1.1.0 - recast: 0.23.11 - semver: 7.7.2 + recast: 0.23.4 tunnel: 0.0.6 - uuid: 11.1.0 + uuid: 9.0.0 transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' - '@types/node' - bufferutil - debug @@ -12242,13 +11904,13 @@ packages: zod: 3.23.8 dev: true - /ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + /ci-info@3.8.0: + resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} engines: {node: '>=8'} dev: true - /ci-info@4.3.0: - resolution: {integrity: sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==} + /ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} dev: true @@ -12305,6 +11967,13 @@ packages: restore-cursor: 4.0.0 dev: true + /cli-progress@3.12.0: + resolution: {integrity: sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==} + engines: {node: '>=4'} + dependencies: + string-width: 4.2.3 + dev: true + /cli-spinners@2.9.2: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} @@ -12491,8 +12160,11 @@ packages: engines: {node: '>= 12'} dev: true - /commist@3.2.0: - resolution: {integrity: sha512-4PIMoPniho+LqXmpS5d3NuGYncG6XWlkBSVGiWycL22dd42OYdUGil2CWuzklaJoNxyxUSpO4MKIBU94viWNAw==} + /commist@1.1.0: + resolution: {integrity: sha512-rraC8NXWOEjhADbZe9QBNzLAN5Q3fsTPQtBV+fEVj6xKIgDgNiEVE6ZNfHpZOqfQ21YUzfVNUXLOEZquYvQPPg==} + dependencies: + leven: 2.1.0 + minimist: 1.2.8 dev: true /commitizen@4.3.1(@types/node@22.14.0)(typescript@5.7.3): @@ -12572,6 +12244,7 @@ packages: dependencies: ini: 1.3.8 proto-list: 1.2.4 + dev: false /consola@3.4.2: resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} @@ -13239,7 +12912,7 @@ packages: /dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.28.3 csstype: 3.1.3 dev: false @@ -13297,6 +12970,11 @@ packages: engines: {node: '>=12'} dev: false + /dotenv@16.3.1: + resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} + engines: {node: '>=12'} + dev: true + /dotenv@16.6.1: resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} engines: {node: '>=12'} @@ -13425,6 +13103,15 @@ packages: es-errors: 1.3.0 gopd: 1.2.0 + /duplexify@4.1.3: + resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==} + dependencies: + end-of-stream: 1.4.5 + inherits: 2.0.4 + readable-stream: 3.6.2 + stream-shift: 1.0.3 + dev: true + /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -13468,11 +13155,6 @@ packages: /emoji-regex@10.4.0: resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} - dev: false - - /emoji-regex@10.5.0: - resolution: {integrity: sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==} - dev: true /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -13997,31 +13679,31 @@ packages: source-map: 0.6.1 dev: true - /eslint-config-prettier@9.0.0(eslint@9.35.0): + /eslint-config-prettier@9.0.0(eslint@9.34.0): resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 9.35.0 + eslint: 9.34.0 dev: false - /eslint-config-turbo@1.10.12(eslint@9.35.0): + /eslint-config-turbo@1.10.12(eslint@9.34.0): resolution: {integrity: sha512-z3jfh+D7UGYlzMWGh+Kqz++hf8LOE96q3o5R8X4HTjmxaBWlLAWG+0Ounr38h+JLR2TJno0hU9zfzoPNkR9BdA==} peerDependencies: eslint: '>6.6.0' dependencies: - eslint: 9.35.0 - eslint-plugin-turbo: 1.10.12(eslint@9.35.0) + eslint: 9.34.0 + eslint-plugin-turbo: 1.10.12(eslint@9.34.0) dev: false - /eslint-plugin-turbo@1.10.12(eslint@9.35.0): + /eslint-plugin-turbo@1.10.12(eslint@9.34.0): resolution: {integrity: sha512-uNbdj+ohZaYo4tFJ6dStRXu2FZigwulR1b3URPXe0Q8YaE7thuekKNP+54CHtZPH9Zey9dmDx5btAQl9mfzGOw==} peerDependencies: eslint: '>6.6.0' dependencies: dotenv: 16.0.3 - eslint: 9.35.0 + eslint: 9.34.0 dev: false /eslint-scope@5.1.1: @@ -14043,14 +13725,14 @@ packages: /eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: false /eslint-visitor-keys@4.2.1: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dev: false - /eslint@9.35.0: - resolution: {integrity: sha512-QePbBFMJFjgmlE+cXAlbHZbHpdFVS2E/6vzCy7aKlebddvl1vadiC4JFV5u/wqTkNUwEV8WrQi257jf5f06hrg==} + /eslint@9.34.0: + resolution: {integrity: sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -14059,15 +13741,15 @@ packages: jiti: optional: true dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.0 '@eslint/config-helpers': 0.3.1 '@eslint/core': 0.15.2 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.35.0 + '@eslint/js': 9.34.0 '@eslint/plugin-kit': 0.3.5 - '@humanfs/node': 0.16.7 + '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 '@types/estree': 1.0.8 @@ -14419,14 +14101,6 @@ packages: resolution: {integrity: sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ==} dev: false - /fast-unique-numbers@9.0.23: - resolution: {integrity: sha512-jcRIaHo46nfvyvKRMaFSKXmez4jALQ3Qw49gxM5F4siz8HqkyKPPEexpCOYwBSJI1HovrDr4fEedM8QAJ7oX3w==} - engines: {node: '>=18.2.0'} - dependencies: - '@babel/runtime': 7.28.4 - tslib: 2.8.1 - dev: true - /fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} @@ -14920,7 +14594,7 @@ packages: dependencies: '@apidevtools/json-schema-ref-parser': 11.9.3 '@fumari/json-schema-to-typescript': 1.1.3 - '@radix-ui/react-select': 2.2.5(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-select': 2.2.6(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-slot': 1.1.0(@types/react@18.3.11)(react@18.3.1) class-variance-authority: 0.7.1 fast-glob: 3.3.3 @@ -15125,11 +14799,6 @@ packages: engines: {node: '>=18'} dev: true - /get-east-asian-width@1.3.1: - resolution: {integrity: sha512-R1QfovbPsKmosqTnPoRFiJ7CF9MLRgb53ChvMZm+r4p76/+8yKDy17qLL2PKInORy2RkZZekuK0efYgmzTkXyQ==} - engines: {node: '>=18'} - dev: true - /get-func-name@2.0.2: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} dev: true @@ -15255,6 +14924,18 @@ packages: /glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + /glob@10.3.1: + resolution: {integrity: sha512-9BKYcEeIs7QwlCYs+Y3GBvqAMISufUS0i2ELd11zpZjxI5V9iyRj0HgzB5/cLf2NY4vcYBTYzJ7GIui7j/4DOw==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + dependencies: + foreground-child: 3.3.1 + jackspeak: 2.3.6 + minimatch: 9.0.5 + minipass: 6.0.2 + path-scurry: 1.11.1 + dev: true + /glob@10.3.4: resolution: {integrity: sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==} engines: {node: '>=16 || 14 >=14.17'} @@ -15379,10 +15060,6 @@ packages: responselike: 3.0.0 dev: true - /graceful-fs@4.2.10: - resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} - dev: true - /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -15668,8 +15345,11 @@ packages: space-separated-tokens: 2.0.2 dev: true - /help-me@5.0.0: - resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} + /help-me@3.0.0: + resolution: {integrity: sha512-hx73jClhyk910sidBB7ERlnhMlFsJJIBqSVMFDwPN8o2v9nmp5KgLq1Xz1Bf1fCMMZ6mPrX159iG0VLy/fPMtQ==} + dependencies: + glob: 7.2.3 + readable-stream: 3.6.2 dev: true /hex-rgb@4.3.0: @@ -15813,6 +15493,11 @@ packages: ms: 2.1.3 dev: false + /hyperlinker@1.0.0: + resolution: {integrity: sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==} + engines: {node: '>=4'} + dev: true + /iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -15928,9 +15613,9 @@ packages: '@alcalzone/ansi-tokenize': 0.1.3 '@types/react': 18.3.11 ansi-escapes: 7.0.0 - ansi-styles: 6.2.3 + ansi-styles: 6.2.1 auto-bind: 5.0.1 - chalk: 5.6.2 + chalk: 5.6.0 cli-boxes: 3.0.0 cli-cursor: 4.0.0 cli-truncate: 4.0.0 @@ -15948,7 +15633,7 @@ packages: string-width: 7.2.0 type-fest: 4.41.0 widest-line: 5.0.0 - wrap-ansi: 9.0.2 + wrap-ansi: 9.0.0 ws: 8.18.3 yoga-layout: 3.2.1 transitivePeerDependencies: @@ -15969,8 +15654,8 @@ packages: react-dom: 18.3.1(react@18.3.1) dev: false - /inquirer@12.9.1(@types/node@22.14.0): - resolution: {integrity: sha512-G7uXAb9OiLcd+9jmA/7KKrItvFF00kKk/jb6CtG+Tm2zSPWfzzhyJwDhVCy+mBmE32o2zJnB5JnknIIv2Ft+AA==} + /inquirer@12.9.4(@types/node@22.14.0): + resolution: {integrity: sha512-5bV3LOgLtMAiJq1QpaUddfRrvaX59wiMYppS7z2jNRSQ64acI0yqx7WMxWhgymenSXOyD657g9tlsTjqGYM8sg==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -16088,7 +15773,6 @@ packages: dependencies: call-bound: 1.0.4 has-tostringtag: 1.0.2 - dev: false /is-array-buffer@3.0.5: resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} @@ -16194,11 +15878,11 @@ packages: resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} engines: {node: '>=12'} - /is-fullwidth-code-point@5.1.0: - resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} + /is-fullwidth-code-point@5.0.0: + resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} engines: {node: '>=18'} dependencies: - get-east-asian-width: 1.3.1 + get-east-asian-width: 1.3.0 dev: true /is-generator-function@1.1.0: @@ -16240,6 +15924,14 @@ packages: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} + /is-nan@1.3.2: + resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + dev: true + /is-negative-zero@2.0.3: resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} @@ -16442,7 +16134,6 @@ packages: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - dev: false /jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} @@ -16609,11 +16300,6 @@ packages: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: false - /json-stream-stringify@3.1.6: - resolution: {integrity: sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==} - engines: {node: '>=7.10.1'} - dev: true - /json2module@0.0.3: resolution: {integrity: sha512-qYGxqrRrt4GbB8IEOy1jJGypkNsjWoIMlZt4bAsmUScCA507Hbc2p1JOhBzqn45u3PWafUgH2OnzyNU7udO/GA==} hasBin: true @@ -16641,7 +16327,7 @@ packages: hasBin: true dependencies: '@types/diff-match-patch': 1.0.36 - chalk: 5.6.2 + chalk: 5.6.0 diff-match-patch: 1.0.5 dev: false @@ -16764,6 +16450,11 @@ packages: resolution: {integrity: sha512-Y3c3QZfvKWHX60BVOQPhLCvVGmDYWyJEiINE3drOog6KCyN2AOwvuQQzlS3uJg1J85kzpILXIUwRXULWavir+w==} dev: false + /leven@2.1.0: + resolution: {integrity: sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==} + engines: {node: '>=0.10.0'} + dev: true + /leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} @@ -16957,6 +16648,13 @@ packages: /lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + dev: true + /lru-cache@7.18.3: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} @@ -16989,8 +16687,8 @@ packages: react: 18.3.1 dev: false - /luxon@3.7.2: - resolution: {integrity: sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==} + /luxon@3.3.0: + resolution: {integrity: sha512-An0UCfG/rSiqtAIiBPO0Y9/zAnHUZxAMiCpTd5h2smgsj7GGmcenvrvww2cqNA8/4A5ZrD1gJpHN2mIHZQF+Mg==} engines: {node: '>=12'} dev: true @@ -17003,12 +16701,6 @@ packages: resolution: {integrity: sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==} dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - dev: true - - /magic-string@0.30.19: - resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} @@ -17720,6 +17412,13 @@ packages: brace-expansion: 2.0.2 dev: false + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.2 + dev: true + /minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -17745,6 +17444,11 @@ packages: engines: {node: '>=8'} dev: true + /minipass@6.0.2: + resolution: {integrity: sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==} + engines: {node: '>=16 || 14 >=14.17'} + dev: true + /minipass@7.1.2: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} @@ -17828,37 +17532,38 @@ packages: resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} dev: true - /mqtt-packet@9.0.2: - resolution: {integrity: sha512-MvIY0B8/qjq7bKxdN1eD+nrljoeaai+qjLJgfRn3TiMuz0pamsIWY2bFODPZMSNmabsLANXsLl4EMoWvlaTZWA==} + /mqtt-packet@6.10.0: + resolution: {integrity: sha512-ja8+mFKIHdB1Tpl6vac+sktqy3gA8t9Mduom1BA75cI+R9AHnZOiaBQwpGiWnaVJLDGRdNhQmFaAqd7tkKSMGA==} dependencies: - bl: 6.1.3 + bl: 4.1.0 debug: 4.4.1(supports-color@8.1.1) process-nextick-args: 2.0.1 transitivePeerDependencies: - supports-color dev: true - /mqtt@5.14.1: - resolution: {integrity: sha512-NxkPxE70Uq3Ph7goefQa7ggSsVzHrayCD0OyxlJgITN/EbzlZN+JEPmaAZdxP1LsIT5FamDyILoQTF72W7Nnbw==} - engines: {node: '>=16.0.0'} + /mqtt@4.3.8: + resolution: {integrity: sha512-2xT75uYa0kiPEF/PE0VPdavmEkoBzMT/UL9moid0rAvlCtV48qBwxD62m7Ld/4j8tSkIO1E/iqRl/S72SEOhOw==} + engines: {node: '>=10.0.0'} hasBin: true dependencies: - '@types/readable-stream': 4.0.21 - '@types/ws': 8.18.1 - commist: 3.2.0 + commist: 1.1.0 concat-stream: 2.0.0 debug: 4.4.1(supports-color@8.1.1) - help-me: 5.0.0 - lru-cache: 10.4.3 + duplexify: 4.1.3 + help-me: 3.0.0 + inherits: 2.0.4 + lru-cache: 6.0.0 minimist: 1.2.8 - mqtt-packet: 9.0.2 + mqtt-packet: 6.10.0 number-allocator: 1.0.14 - readable-stream: 4.7.0 + pump: 3.0.3 + readable-stream: 3.6.2 + reinterval: 1.1.0 rfdc: 1.4.1 - socks: 2.8.7 - split2: 4.2.0 - worker-timers: 8.0.24 - ws: 8.18.3 + split2: 3.2.2 + ws: 7.5.10 + xtend: 4.0.2 transitivePeerDependencies: - bufferutil - supports-color @@ -17947,6 +17652,10 @@ packages: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: false + /natural-orderby@2.0.3: + resolution: {integrity: sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==} + dev: true + /negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} @@ -18157,7 +17866,7 @@ packages: '@next/env': 14.2.32 '@swc/helpers': 0.5.5 busboy: 1.6.0 - caniuse-lite: 1.0.30001741 + caniuse-lite: 1.0.30001737 graceful-fs: 4.2.11 postcss: 8.4.31 react: 18.3.1 @@ -18421,12 +18130,16 @@ packages: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - dev: false /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} + /object-treeify@1.1.33: + resolution: {integrity: sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==} + engines: {node: '>= 10'} + dev: true + /object-treeify@4.0.1: resolution: {integrity: sha512-Y6tg5rHfsefSkfKujv2SwHulInROy/rCL5F4w0QOWxut8AnxYxf0YmNhTh95Zfyxpsudo66uqkux0ACFnyMSgQ==} engines: {node: '>= 16'} @@ -18490,6 +18203,15 @@ packages: regex: 6.0.1 regex-recursion: 6.0.2 + /open@8.4.0: + resolution: {integrity: sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==} + engines: {node: '>=12'} + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + dev: true + /open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} @@ -18810,6 +18532,13 @@ packages: engines: {node: '>= 0.8'} dev: true + /password-prompt@1.1.3: + resolution: {integrity: sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw==} + dependencies: + ansi-escapes: 4.3.2 + cross-spawn: 7.0.6 + dev: true + /patch-console@2.0.0: resolution: {integrity: sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -19225,6 +18954,7 @@ packages: /proto-list@1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + dev: false /protobufjs@7.5.4: resolution: {integrity: sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==} @@ -19446,7 +19176,7 @@ packages: react-is: 18.1.0 dev: false - /react-email@2.1.1(eslint@9.35.0): + /react-email@2.1.1(eslint@9.34.0): resolution: {integrity: sha512-09oMVl/jN0/Re0bT0sEqYjyyFSCN/Tg0YmzjC9wfYpnMx02Apk40XXitySDfUBMR9EgTdr6T4lYknACqiLK3mg==} engines: {node: '>=18.0.0'} hasBin: true @@ -19472,8 +19202,8 @@ packages: commander: 11.1.0 debounce: 2.0.0 esbuild: 0.19.11 - eslint-config-prettier: 9.0.0(eslint@9.35.0) - eslint-config-turbo: 1.10.12(eslint@9.35.0) + eslint-config-prettier: 9.0.0(eslint@9.34.0) + eslint-config-turbo: 1.10.12(eslint@9.34.0) framer-motion: 10.17.4(react-dom@18.3.1)(react@18.3.1) glob: 10.3.4 log-symbols: 4.1.0 @@ -19688,7 +19418,7 @@ packages: react: '>=16.6.0' react-dom: '>=16.6.0' dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.28.3 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -19772,14 +19502,14 @@ packages: engines: {node: '>= 14.18.0'} dev: false - /recast@0.23.11: - resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==} + /recast@0.23.4: + resolution: {integrity: sha512-qtEDqIZGVcSZCHniWwZWbRy79Dc6Wp3kT/UmDA2RJKBPg7+7k51aQBZirHmUGn5uvHf2rg8DkjizrN26k61ATw==} engines: {node: '>= 4'} dependencies: + assert: 2.1.0 ast-types: 0.16.1 esprima: 4.0.1 source-map: 0.6.1 - tiny-invariant: 1.3.3 tslib: 2.8.1 dev: true @@ -19850,6 +19580,12 @@ packages: unified: 11.0.5 vfile: 6.0.3 + /redeyed@2.1.1: + resolution: {integrity: sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==} + dependencies: + esprima: 4.0.1 + dev: true + /reflect-metadata@0.2.2: resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} dev: true @@ -19904,13 +19640,6 @@ packages: gopd: 1.2.0 set-function-name: 2.0.2 - /registry-auth-token@5.1.0: - resolution: {integrity: sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==} - engines: {node: '>=14'} - dependencies: - '@pnpm/npm-conf': 2.3.1 - dev: true - /rehype-katex@7.0.1: resolution: {integrity: sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==} dependencies: @@ -19947,6 +19676,10 @@ packages: transitivePeerDependencies: - supports-color + /reinterval@1.1.0: + resolution: {integrity: sha512-QIRet3SYrGp0HUHO88jVskiG6seqUGC5iAG7AwI/BV4ypGcuqk9Du6YQBUOUqm9c8pw1eyLoIaONifRua1lsEQ==} + dev: true + /remark-frontmatter@5.0.0: resolution: {integrity: sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==} dependencies: @@ -20414,8 +20147,8 @@ packages: randombytes: 2.1.0 dev: false - /seroval-plugins@1.3.3(seroval@1.3.2): - resolution: {integrity: sha512-16OL3NnUBw8JG1jBLUoZJsLnQq0n5Ua6aHalhJK4fMQkz1lqR7Osz1sA30trBtd9VUDc2NgkuRCn8+/pBwqZ+w==} + /seroval-plugins@1.3.2(seroval@1.3.2): + resolution: {integrity: sha512-0QvCV2lM3aj/U3YozDiVwx9zpH0q8A60CTWIv4Jszj/givcudPb48B+rkU5D51NJ0pTpweGMttHjboPa9/zoIQ==} engines: {node: '>=10'} peerDependencies: seroval: ^1.0 @@ -20699,15 +20432,15 @@ packages: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} dependencies: - ansi-styles: 6.2.3 + ansi-styles: 6.2.1 is-fullwidth-code-point: 4.0.0 /slice-ansi@7.1.0: resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} engines: {node: '>=18'} dependencies: - ansi-styles: 6.2.3 - is-fullwidth-code-point: 5.1.0 + ansi-styles: 6.2.1 + is-fullwidth-code-point: 5.0.0 dev: true /slugify@1.6.6: @@ -20816,7 +20549,7 @@ packages: dependencies: csstype: 3.1.3 seroval: 1.3.2 - seroval-plugins: 1.3.3(seroval@1.3.2) + seroval-plugins: 1.3.2(seroval@1.3.2) dev: false /solid-swr-store@0.10.7(solid-js@1.9.9)(swr-store@0.10.6): @@ -20917,9 +20650,10 @@ packages: resolution: {integrity: sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==} dev: true - /split2@4.2.0: - resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} - engines: {node: '>= 10.x'} + /split2@3.2.2: + resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} + dependencies: + readable-stream: 3.6.2 dev: true /sprintf-js@1.0.3: @@ -21003,6 +20737,10 @@ packages: engines: {node: '>=4', npm: '>=6'} dev: true + /stream-shift@1.0.3: + resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} + dev: true + /streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} @@ -21031,15 +20769,15 @@ packages: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 - strip-ansi: 7.1.2 + strip-ansi: 7.1.0 /string-width@7.2.0: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} dependencies: - emoji-regex: 10.5.0 + emoji-regex: 10.4.0 get-east-asian-width: 1.3.0 - strip-ansi: 7.1.2 + strip-ansi: 7.1.0 dev: true /string.prototype.codepointat@0.2.1: @@ -21109,14 +20847,7 @@ packages: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} dependencies: - ansi-regex: 6.2.2 - dev: false - - /strip-ansi@7.1.2: - resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} - engines: {node: '>=12'} - dependencies: - ansi-regex: 6.2.2 + ansi-regex: 6.2.0 /strip-bom-string@1.0.0: resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} @@ -21254,6 +20985,14 @@ packages: dependencies: has-flag: 4.0.0 + /supports-hyperlinks@2.3.0: + resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + dev: true + /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -21274,7 +21013,7 @@ packages: estree-walker: 3.0.3 is-reference: 3.0.3 locate-character: 3.0.0 - magic-string: 0.30.19 + magic-string: 0.30.18 periscopic: 3.1.0 dev: false @@ -21319,12 +21058,12 @@ packages: resolution: {integrity: sha512-LqVcOHSB4cPGgitD1riJ1Hh4vdmITOp+BkmfmXRh4hSF/t7EnS4iD+SOTmq7w5pPm/SiPeto4ADbKS6dHUDWFA==} dev: false - /swrv@1.0.4(vue@3.5.21): + /swrv@1.0.4(vue@3.5.20): resolution: {integrity: sha512-zjEkcP8Ywmj+xOJW3lIT65ciY/4AL4e/Or7Gj0MzU3zBJNMdJiT8geVZhINavnlHRMMCcJLHhraLTAiDOTmQ9g==} peerDependencies: vue: '>=3.2.26 < 4' dependencies: - vue: 3.5.21(typescript@5.7.3) + vue: 3.5.20(typescript@5.7.3) dev: false /symbol-tree@3.2.4: @@ -21334,7 +21073,7 @@ packages: /tailwind-merge@2.2.0: resolution: {integrity: sha512-SqqhhaL0T06SW59+JVNfAqKdqLs0497esifRrZ7jOaefP3o64fdFNDMrAQWZFMxTLJPiHVjRLUywT8uFz1xNWQ==} dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.28.3 dev: false /tailwind-merge@2.5.4: @@ -21450,7 +21189,7 @@ packages: pump: 3.0.3 tar-stream: 3.1.7 optionalDependencies: - bare-fs: 4.2.3 + bare-fs: 4.2.1 bare-path: 3.0.0 transitivePeerDependencies: - bare-buffer @@ -21591,6 +21330,7 @@ packages: /tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + dev: false /tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -21607,14 +21347,6 @@ packages: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 - /tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} - engines: {node: '>=12.0.0'} - dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - dev: true - /tinypool@0.8.4: resolution: {integrity: sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==} engines: {node: '>=14.0.0'} @@ -21749,11 +21481,11 @@ packages: - zod dev: false - /ts-api-utils@2.1.0(typescript@5.5.3): - resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} - engines: {node: '>=18.12'} + /ts-api-utils@1.4.3(typescript@5.5.3): + resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} + engines: {node: '>=16'} peerDependencies: - typescript: '>=4.8.4' + typescript: '>=4.2.0' dependencies: typescript: 5.5.3 dev: true @@ -22094,12 +21826,6 @@ packages: engines: {node: '>=14.17'} hasBin: true - /typescript@5.9.2: - resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} - engines: {node: '>=14.17'} - hasBin: true - dev: true - /ufo@1.6.1: resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} dev: true @@ -22389,6 +22115,16 @@ packages: /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + /util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + dependencies: + inherits: 2.0.4 + is-arguments: 1.2.0 + is-generator-function: 1.1.0 + is-typed-array: 1.1.15 + which-typed-array: 1.1.19 + dev: true + /utility-types@3.11.0: resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==} engines: {node: '>= 4'} @@ -22399,16 +22135,16 @@ packages: engines: {node: '>= 0.4.0'} dev: true - /uuid@11.1.0: - resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} - hasBin: true - dev: true - /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true dev: false + /uuid@9.0.0: + resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} + hasBin: true + dev: true + /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true @@ -23074,19 +22810,19 @@ packages: resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} dev: false - /vue@3.5.21(typescript@5.7.3): - resolution: {integrity: sha512-xxf9rum9KtOdwdRkiApWL+9hZEMWE90FHh8yS1+KJAiWYh+iGWV1FquPjoO9VUHQ+VIhsCXNNyZ5Sf4++RVZBA==} + /vue@3.5.20(typescript@5.7.3): + resolution: {integrity: sha512-2sBz0x/wis5TkF1XZ2vH25zWq3G1bFEPOfkBcx2ikowmphoQsPH6X0V3mmPCXA2K1N/XGTnifVyDQP4GfDDeQw==} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@vue/compiler-dom': 3.5.21 - '@vue/compiler-sfc': 3.5.21 - '@vue/runtime-dom': 3.5.21 - '@vue/server-renderer': 3.5.21(vue@3.5.21) - '@vue/shared': 3.5.21 + '@vue/compiler-dom': 3.5.20 + '@vue/compiler-sfc': 3.5.20 + '@vue/runtime-dom': 3.5.20 + '@vue/server-renderer': 3.5.20(vue@3.5.20) + '@vue/shared': 3.5.20 typescript: 5.7.3 dev: false @@ -23131,7 +22867,7 @@ packages: /webcrypto-core@1.8.1: resolution: {integrity: sha512-P+x1MvlNCXlKbLSOY4cYrdreqPG5hbzkmawbcXLKN/mf6DZW0SdNNkZ+sjwsqVkI4A4Ko2sPZmkZtCKY58w83A==} dependencies: - '@peculiar/asn1-schema': 2.5.0 + '@peculiar/asn1-schema': 2.4.0 '@peculiar/json-schema': 1.1.12 asn1js: 3.0.6 pvtsutils: 1.3.6 @@ -23346,41 +23082,6 @@ packages: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true - /worker-factory@7.0.45: - resolution: {integrity: sha512-FFPCiSv7MD6ZDEfiik/ErM8IrIAWajaXhezLyCo3v0FjhUWud6GXnG2BiTE91jLywXGAVCT8IF48Hhr+D/omMw==} - dependencies: - '@babel/runtime': 7.28.4 - fast-unique-numbers: 9.0.23 - tslib: 2.8.1 - dev: true - - /worker-timers-broker@8.0.10: - resolution: {integrity: sha512-xvo/9GiuduENbJNdWnvZtkriIkjBKKVbMyw7GXvrBu3n1JHemzZgxqaCcCBNlpfXnRXXF4ekqvXWLh1gb65b8w==} - dependencies: - '@babel/runtime': 7.28.4 - broker-factory: 3.1.9 - fast-unique-numbers: 9.0.23 - tslib: 2.8.1 - worker-timers-worker: 9.0.10 - dev: true - - /worker-timers-worker@9.0.10: - resolution: {integrity: sha512-cfCmAkuoN+nGGJShta/g7CQVP3h7rvQA642EQg72fOHCWP5S2P83rLxDiaGv811Hd+19Cgdqt/tpRBIZ5kj/dw==} - dependencies: - '@babel/runtime': 7.28.4 - tslib: 2.8.1 - worker-factory: 7.0.45 - dev: true - - /worker-timers@8.0.24: - resolution: {integrity: sha512-Ydu/7TRHlxIRjYSGDge1F92L7y9kzInpwR4CkocRVObPE0eRqC6d+0GFh52Hm+m520RHVKiytOERtCUu5sQDVQ==} - dependencies: - '@babel/runtime': 7.28.4 - tslib: 2.8.1 - worker-timers-broker: 8.0.10 - worker-timers-worker: 9.0.10 - dev: true - /workerd@1.20250405.0: resolution: {integrity: sha512-6+bOTz5ErQ8Ry91cAaRdipr/2o/EhNnRJAP69OKLii4nyU1A/EWsNhaZHGjBIPGKhla6qXS1BN41WEhFXUjI2w==} engines: {node: '>=16'} @@ -23434,7 +23135,7 @@ packages: - utf-8-validate dev: true - /wrangler@4.10.0(@cloudflare/workers-types@4.20250909.0): + /wrangler@4.10.0(@cloudflare/workers-types@4.20241022.0): resolution: {integrity: sha512-fTE4hZ79msEUt8+HEjl/8Q72haCyzPLu4PgrU3L81ysmjrMEdiYfUPqnvCkBUVtJvrDNdctTEimkufT1Y0ipNg==} engines: {node: '>=18.0.0'} hasBin: true @@ -23446,7 +23147,7 @@ packages: dependencies: '@cloudflare/kv-asset-handler': 0.4.0 '@cloudflare/unenv-preset': 2.3.1(unenv@2.0.0-rc.15)(workerd@1.20250409.0) - '@cloudflare/workers-types': 4.20250909.0 + '@cloudflare/workers-types': 4.20241022.0 blake3-wasm: 2.1.5 esbuild: 0.24.2 miniflare: 4.20250409.0 @@ -23509,22 +23210,35 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} dependencies: - ansi-styles: 6.2.3 + ansi-styles: 6.2.1 string-width: 5.1.2 - strip-ansi: 7.1.2 + strip-ansi: 7.1.0 - /wrap-ansi@9.0.2: - resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + /wrap-ansi@9.0.0: + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} engines: {node: '>=18'} dependencies: - ansi-styles: 6.2.3 + ansi-styles: 6.2.1 string-width: 7.2.0 - strip-ansi: 7.1.2 + strip-ansi: 7.1.0 dev: true /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + /ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + /ws@8.17.1: resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} engines: {node: '>=10.0.0'} @@ -23589,6 +23303,11 @@ packages: engines: {node: '>=0.4.0'} dev: false + /xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: true + /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} diff --git a/tools/local/src/db.ts b/tools/local/src/db.ts index ce4927a355..535df37b4b 100644 --- a/tools/local/src/db.ts +++ b/tools/local/src/db.ts @@ -1,3 +1,4 @@ +import { randomUUID } from "node:crypto"; import { mysqlDrizzle, schema } from "@unkey/db"; import mysql from "mysql2/promise"; import { task } from "./util"; @@ -25,7 +26,7 @@ export async function prepareDatabase(): Promise<{ id: ROW_IDS.rootWorkspace, orgId: "user_REPLACE_ME", name: "Unkey", - slug: "unkey-workspace", + slug: `unkey-workspace-${randomUUID()}`, createdAtM: Date.now(), betaFeatures: {}, features: {},