feat: removed last bit of workspace in frontend. Fatality!

This commit is contained in:
=
2025-09-16 00:08:41 +05:30
parent 37a80fa1ac
commit ac80242749
356 changed files with 1788 additions and 1890 deletions
@@ -4,7 +4,7 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { Link, useParams } from "@tanstack/react-router"; import { Link, useParams } from "@tanstack/react-router";
import { twMerge } from "tailwind-merge"; import { twMerge } from "tailwind-merge";
import { useOrganization, useWorkspace } from "@app/context"; import { useOrganization, useProject } from "@app/context";
import { useToggle } from "@app/hooks"; import { useToggle } from "@app/hooks";
import { createNotification } from "../notifications"; import { createNotification } from "../notifications";
@@ -51,7 +51,7 @@ export default function NavHeader({
isProtectedBranch = false, isProtectedBranch = false,
protectionPolicyName protectionPolicyName
}: Props): JSX.Element { }: Props): JSX.Element {
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const { currentOrg } = useOrganization(); const { currentOrg } = useOrganization();
const [isCopied, { timedToggle: toggleIsCopied }] = useToggle(false); const [isCopied, { timedToggle: toggleIsCopied }] = useToggle(false);
@@ -79,7 +79,7 @@ export default function NavHeader({
<> <>
<FontAwesomeIcon icon={faAngleRight} className="ml-3 mr-3 text-xs text-gray-400" /> <FontAwesomeIcon icon={faAngleRight} className="ml-3 mr-3 text-xs text-gray-400" />
<div className="truncate text-sm font-semibold text-bunker-300"> <div className="truncate text-sm font-semibold text-bunker-300">
{currentWorkspace?.name} {currentProject?.name}
</div> </div>
</> </>
)} )}
@@ -93,7 +93,7 @@ export default function NavHeader({
{pageName === "Secrets" ? ( {pageName === "Secrets" ? (
<Link <Link
to="/projects/secret-management/$projectId/overview" to="/projects/secret-management/$projectId/overview"
params={{ projectId: currentWorkspace.id }} params={{ projectId: currentProject.id }}
className="text-sm font-semibold text-primary/80 hover:text-primary" className="text-sm font-semibold text-primary/80 hover:text-primary"
> >
{pageName} {pageName}
@@ -129,7 +129,7 @@ export default function NavHeader({
<FontAwesomeIcon icon={faAngleRight} className="ml-3 mr-1.5 text-xs text-gray-400" /> <FontAwesomeIcon icon={faAngleRight} className="ml-3 mr-1.5 text-xs text-gray-400" />
<Link <Link
to="/projects/secret-management/$projectId/secrets/$envSlug" to="/projects/secret-management/$projectId/secrets/$envSlug"
params={{ projectId: currentWorkspace.id, envSlug: routerEnvSlug }} params={{ projectId: currentProject.id, envSlug: routerEnvSlug }}
className="text-sm font-semibold text-primary/80 hover:text-primary" className="text-sm font-semibold text-primary/80 hover:text-primary"
> >
{userAvailableEnvs?.find(({ slug }) => slug === currentEnv)?.name} {userAvailableEnvs?.find(({ slug }) => slug === currentEnv)?.name}
@@ -192,7 +192,7 @@ export default function NavHeader({
<Link <Link
to="/projects/secret-management/$projectId/secrets/$envSlug" to="/projects/secret-management/$projectId/secrets/$envSlug"
params={{ params={{
projectId: currentWorkspace.id, projectId: currentProject.id,
envSlug: routerEnvSlug || "" envSlug: routerEnvSlug || ""
}} }}
search={(query) => ({ ...query, secretPath: newSecretPath })} search={(query) => ({ ...query, secretPath: newSecretPath })}
@@ -3,7 +3,7 @@ import { useFormContext, useWatch } from "react-hook-form";
import { MongoAbility, MongoQuery } from "@casl/ability"; import { MongoAbility, MongoQuery } from "@casl/ability";
import { Edge, Node, useEdgesState, useNodesState } from "@xyflow/react"; import { Edge, Node, useEdgesState, useNodesState } from "@xyflow/react";
import { ProjectPermissionSub, useWorkspace } from "@app/context"; import { ProjectPermissionSub, useProject } from "@app/context";
import { ProjectPermissionSet } from "@app/context/ProjectPermissionContext"; import { ProjectPermissionSet } from "@app/context/ProjectPermissionContext";
import { useListProjectEnvironmentsFolders } from "@app/hooks/api/secretFolders/queries"; import { useListProjectEnvironmentsFolders } from "@app/hooks/api/secretFolders/queries";
import { TSecretFolderWithPath } from "@app/hooks/api/secretFolders/types"; import { TSecretFolderWithPath } from "@app/hooks/api/secretFolders/types";
@@ -36,15 +36,15 @@ export const useAccessTree = (
searchPath: string, searchPath: string,
subject: ProjectPermissionSub subject: ProjectPermissionSub
) => { ) => {
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const { secretName, setSecretName, setViewMode, viewMode } = useAccessTreeContext(); const { secretName, setSecretName, setViewMode, viewMode } = useAccessTreeContext();
const { control } = useFormContext<AccessTreeForm>(); const { control } = useFormContext<AccessTreeForm>();
const metadata = useWatch({ control, name: "metadata" }); const metadata = useWatch({ control, name: "metadata" });
const [nodes, setNodes] = useNodesState<Node>([]); const [nodes, setNodes] = useNodesState<Node>([]);
const [edges, setEdges] = useEdgesState<Edge>([]); const [edges, setEdges] = useEdgesState<Edge>([]);
const [environment, setEnvironment] = useState(currentWorkspace.environments[0]?.slug ?? ""); const [environment, setEnvironment] = useState(currentProject.environments[0]?.slug ?? "");
const { data: environmentsFolders, isPending } = useListProjectEnvironmentsFolders( const { data: environmentsFolders, isPending } = useListProjectEnvironmentsFolders(
currentWorkspace.id currentProject.id
); );
const [levelFolderMap, setLevelFolderMap] = useState<LevelFolderMap>({}); const [levelFolderMap, setLevelFolderMap] = useState<LevelFolderMap>({});
@@ -279,7 +279,7 @@ export const useAccessTree = (
environment, environment,
setEnvironment, setEnvironment,
isLoading: isPending, isLoading: isPending,
environments: currentWorkspace.environments, environments: currentProject.environments,
secretName, secretName,
setSecretName, setSecretName,
viewMode, viewMode,
@@ -6,7 +6,7 @@ import { z } from "zod";
import { createNotification } from "@app/components/notifications"; import { createNotification } from "@app/components/notifications";
import { ProjectPermissionCan } from "@app/components/permissions"; import { ProjectPermissionCan } from "@app/components/permissions";
import { Button, FormControl, Input, TextArea } from "@app/components/v2"; import { Button, FormControl, Input, TextArea } from "@app/components/v2";
import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context"; import { ProjectPermissionActions, ProjectPermissionSub, useProject } from "@app/context";
import { useUpdateProject } from "@app/hooks/api"; import { useUpdateProject } from "@app/hooks/api";
const baseFormSchema = z.object({ const baseFormSchema = z.object({
@@ -37,35 +37,35 @@ type Props = {
}; };
export const ProjectOverviewChangeSection = ({ showSlugField = false }: Props) => { export const ProjectOverviewChangeSection = ({ showSlugField = false }: Props) => {
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const { mutateAsync, isPending } = useUpdateProject(); const { mutateAsync, isPending } = useUpdateProject();
const { handleSubmit, control, reset, watch } = useForm<BaseFormData | FormDataWithSlug>({ const { handleSubmit, control, reset, watch } = useForm<BaseFormData | FormDataWithSlug>({
resolver: zodResolver(showSlugField ? formSchemaWithSlug : baseFormSchema) resolver: zodResolver(showSlugField ? formSchemaWithSlug : baseFormSchema)
}); });
const currentSlug = showSlugField ? watch("slug") : currentWorkspace?.slug; const currentSlug = showSlugField ? watch("slug") : currentProject?.slug;
useEffect(() => { useEffect(() => {
if (currentWorkspace) { if (currentProject) {
reset({ reset({
name: currentWorkspace.name, name: currentProject.name,
description: currentWorkspace.description ?? "", description: currentProject.description ?? "",
...(showSlugField && { slug: currentWorkspace.slug }) ...(showSlugField && { slug: currentProject.slug })
}); });
} }
}, [currentWorkspace, showSlugField]); }, [currentProject, showSlugField]);
const onFormSubmit = async (data: BaseFormData | FormDataWithSlug) => { const onFormSubmit = async (data: BaseFormData | FormDataWithSlug) => {
try { try {
if (!currentWorkspace?.id) return; if (!currentProject?.id) return;
await mutateAsync({ await mutateAsync({
projectID: currentWorkspace.id, projectId: currentProject.id,
newProjectName: data.name, newProjectName: data.name,
newProjectDescription: data.description, newProjectDescription: data.description,
...(showSlugField && ...(showSlugField &&
"slug" in data && { "slug" in data && {
newSlug: data.slug !== currentWorkspace.slug ? data.slug : undefined newSlug: data.slug !== currentProject.slug ? data.slug : undefined
}) })
}); });
@@ -105,7 +105,7 @@ export const ProjectOverviewChangeSection = ({ showSlugField = false }: Props) =
variant="outline_bg" variant="outline_bg"
size="sm" size="sm"
onClick={() => { onClick={() => {
navigator.clipboard.writeText(currentWorkspace?.id || ""); navigator.clipboard.writeText(currentProject?.id || "");
createNotification({ createNotification({
text: "Copied project ID to clipboard", text: "Copied project ID to clipboard",
type: "success" type: "success"
@@ -34,10 +34,10 @@ import {
useUser useUser
} from "@app/context"; } from "@app/context";
import { getProjectHomePage, getProjectLottieIcon } from "@app/helpers/project"; import { getProjectHomePage, getProjectLottieIcon } from "@app/helpers/project";
import { useCreateWorkspace, useGetExternalKmsList, useGetUserWorkspaces } from "@app/hooks/api"; import { useCreateWorkspace, useGetExternalKmsList, useGetUserProjects } from "@app/hooks/api";
import { INTERNAL_KMS_KEY_ID } from "@app/hooks/api/kms/types"; import { INTERNAL_KMS_KEY_ID } from "@app/hooks/api/kms/types";
import { InfisicalProjectTemplate, useListProjectTemplates } from "@app/hooks/api/projectTemplates"; import { InfisicalProjectTemplate, useListProjectTemplates } from "@app/hooks/api/projectTemplates";
import { ProjectType } from "@app/hooks/api/workspace/types"; import { ProjectType } from "@app/hooks/api/projects/types";
const formSchema = z.object({ const formSchema = z.object({
name: z.string().trim().min(1, "Required").max(64, "Too long, maximum length is 64 characters"), name: z.string().trim().min(1, "Required").max(64, "Too long, maximum length is 64 characters"),
@@ -89,7 +89,7 @@ const NewProjectForm = ({ onOpenChange }: NewProjectFormProps) => {
const { permission } = useOrgPermission(); const { permission } = useOrgPermission();
const { user } = useUser(); const { user } = useUser();
const createWs = useCreateWorkspace(); const createWs = useCreateWorkspace();
const { refetch: refetchWorkspaces } = useGetUserWorkspaces(); const { refetch: refetchWorkspaces } = useGetUserProjects();
const { subscription } = useSubscription(); const { subscription } = useSubscription();
const canReadProjectTemplates = permission.can( const canReadProjectTemplates = permission.can(
@@ -7,12 +7,12 @@ import { SecretRotationV2ModalHeader } from "@app/components/secret-rotations-v2
import { SecretRotationV2Select } from "@app/components/secret-rotations-v2/SecretRotationV2Select"; import { SecretRotationV2Select } from "@app/components/secret-rotations-v2/SecretRotationV2Select";
import { Modal, ModalContent } from "@app/components/v2"; import { Modal, ModalContent } from "@app/components/v2";
import { SecretRotation, TSecretRotationV2 } from "@app/hooks/api/secretRotationsV2"; import { SecretRotation, TSecretRotationV2 } from "@app/hooks/api/secretRotationsV2";
import { WorkspaceEnv } from "@app/hooks/api/workspace/types"; import { ProjectEnv } from "@app/hooks/api/projects/types";
type SharedProps = { type SharedProps = {
secretPath: string; secretPath: string;
environment?: string; environment?: string;
environments?: WorkspaceEnv[]; environments?: ProjectEnv[];
}; };
type Props = { type Props = {
@@ -9,14 +9,14 @@ import {
IS_ROTATION_DUAL_CREDENTIALS, IS_ROTATION_DUAL_CREDENTIALS,
SECRET_ROTATION_MAP SECRET_ROTATION_MAP
} from "@app/helpers/secretRotationsV2"; } from "@app/helpers/secretRotationsV2";
import { WorkspaceEnv } from "@app/hooks/api/workspace/types"; import { ProjectEnv } from "@app/hooks/api/projects/types";
import { TSecretRotationV2Form } from "./schemas"; import { TSecretRotationV2Form } from "./schemas";
import { SecretRotationV2ConnectionField } from "./SecretRotationV2ConnectionField"; import { SecretRotationV2ConnectionField } from "./SecretRotationV2ConnectionField";
type Props = { type Props = {
isUpdate: boolean; isUpdate: boolean;
environments?: WorkspaceEnv[]; environments?: ProjectEnv[];
}; };
export const SecretRotationV2ConfigurationFields = ({ isUpdate, environments }: Props) => { export const SecretRotationV2ConfigurationFields = ({ isUpdate, environments }: Props) => {
@@ -11,7 +11,7 @@ import { SecretRotationV2ParametersFields } from "@app/components/secret-rotatio
import { SecretRotationV2ReviewFields } from "@app/components/secret-rotations-v2/forms/SecretRotationV2ReviewFields"; import { SecretRotationV2ReviewFields } from "@app/components/secret-rotations-v2/forms/SecretRotationV2ReviewFields";
import { SecretRotationV2SecretsMappingFields } from "@app/components/secret-rotations-v2/forms/SecretRotationV2SecretsMappingFields"; import { SecretRotationV2SecretsMappingFields } from "@app/components/secret-rotations-v2/forms/SecretRotationV2SecretsMappingFields";
import { Button } from "@app/components/v2"; import { Button } from "@app/components/v2";
import { useWorkspace } from "@app/context"; import { useProject } from "@app/context";
import { IS_ROTATION_DUAL_CREDENTIALS, SECRET_ROTATION_MAP } from "@app/helpers/secretRotationsV2"; import { IS_ROTATION_DUAL_CREDENTIALS, SECRET_ROTATION_MAP } from "@app/helpers/secretRotationsV2";
import { import {
SecretRotation, SecretRotation,
@@ -22,7 +22,7 @@ import {
useCreateSecretRotationV2, useCreateSecretRotationV2,
useUpdateSecretRotationV2 useUpdateSecretRotationV2
} from "@app/hooks/api/secretRotationsV2/mutations"; } from "@app/hooks/api/secretRotationsV2/mutations";
import { WorkspaceEnv } from "@app/hooks/api/workspace/types"; import { ProjectEnv } from "@app/hooks/api/projects/types";
import { SecretRotationV2FormSchema, TSecretRotationV2Form } from "./schemas"; import { SecretRotationV2FormSchema, TSecretRotationV2Form } from "./schemas";
@@ -32,7 +32,7 @@ type Props = {
onCancel: () => void; onCancel: () => void;
secretPath: string; secretPath: string;
environment?: string; environment?: string;
environments?: WorkspaceEnv[]; environments?: ProjectEnv[];
secretRotation?: TSecretRotationV2; secretRotation?: TSecretRotationV2;
}; };
@@ -68,7 +68,7 @@ export const SecretRotationV2Form = ({
}: Props) => { }: Props) => {
const createSecretRotation = useCreateSecretRotationV2(); const createSecretRotation = useCreateSecretRotationV2();
const updateSecretRotation = useUpdateSecretRotationV2(); const updateSecretRotation = useUpdateSecretRotationV2();
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const { name: rotationType } = SECRET_ROTATION_MAP[type]; const { name: rotationType } = SECRET_ROTATION_MAP[type];
const [selectedTabIndex, setSelectedTabIndex] = useState(0); const [selectedTabIndex, setSelectedTabIndex] = useState(0);
@@ -80,7 +80,7 @@ export const SecretRotationV2Form = ({
defaultValues: secretRotation defaultValues: secretRotation
? { ? {
...secretRotation, ...secretRotation,
environment: currentWorkspace?.environments.find((env) => env.slug === envSlug), environment: currentProject?.environments.find((env) => env.slug === envSlug),
secretPath secretPath
} }
: { : {
@@ -91,7 +91,7 @@ export const SecretRotationV2Form = ({
hours: 0, hours: 0,
minutes: 0 minutes: 0
}, },
environment: currentWorkspace?.environments.find((env) => env.slug === envSlug), environment: currentProject?.environments.find((env) => env.slug === envSlug),
secretPath, secretPath,
...(rotationOption!.template as object) // can't infer type since we don't know which specific type it is ...(rotationOption!.template as object) // can't infer type since we don't know which specific type it is
}, },
@@ -115,7 +115,7 @@ export const SecretRotationV2Form = ({
connectionId: connection.id, connectionId: connection.id,
environment: environment.slug, environment: environment.slug,
projectId: currentWorkspace.id projectId: currentProject.id
}); });
try { try {
const rotation = await mutation; const rotation = await mutation;
@@ -6,7 +6,7 @@ import { twMerge } from "tailwind-merge";
import { createNotification } from "@app/components/notifications"; import { createNotification } from "@app/components/notifications";
import { Button } from "@app/components/v2"; import { Button } from "@app/components/v2";
import { useWorkspace } from "@app/context"; import { useProject } from "@app/context";
import { SECRET_SCANNING_DATA_SOURCE_MAP } from "@app/helpers/secretScanningV2"; import { SECRET_SCANNING_DATA_SOURCE_MAP } from "@app/helpers/secretScanningV2";
import { import {
SecretScanningDataSource, SecretScanningDataSource,
@@ -39,7 +39,7 @@ const FORM_TABS: { name: string; key: string; fields: (keyof TSecretScanningData
export const SecretScanningDataSourceForm = ({ type, onComplete, onCancel, dataSource }: Props) => { export const SecretScanningDataSourceForm = ({ type, onComplete, onCancel, dataSource }: Props) => {
const createDataSource = useCreateSecretScanningDataSource(); const createDataSource = useCreateSecretScanningDataSource();
const updateDataSource = useUpdateSecretScanningDataSource(); const updateDataSource = useUpdateSecretScanningDataSource();
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const { name: sourceType } = SECRET_SCANNING_DATA_SOURCE_MAP[type]; const { name: sourceType } = SECRET_SCANNING_DATA_SOURCE_MAP[type];
const [selectedTabIndex, setSelectedTabIndex] = useState(0); const [selectedTabIndex, setSelectedTabIndex] = useState(0);
@@ -63,7 +63,7 @@ export const SecretScanningDataSourceForm = ({ type, onComplete, onCancel, dataS
: createDataSource.mutateAsync({ : createDataSource.mutateAsync({
...formData, ...formData,
connectionId: connection?.id, connectionId: connection?.id,
projectId: currentWorkspace.id projectId: currentProject.id
}); });
try { try {
const source = await mutation; const source = await mutation;
@@ -8,7 +8,7 @@ import { twMerge } from "tailwind-merge";
import { createNotification } from "@app/components/notifications"; import { createNotification } from "@app/components/notifications";
import { Button, FormControl, Switch } from "@app/components/v2"; import { Button, FormControl, Switch } from "@app/components/v2";
import { useWorkspace } from "@app/context"; import { useProject } from "@app/context";
import { SECRET_SYNC_MAP } from "@app/helpers/secretSyncs"; import { SECRET_SYNC_MAP } from "@app/helpers/secretSyncs";
import { import {
SecretSync, SecretSync,
@@ -41,7 +41,7 @@ const FORM_TABS: { name: string; key: string; fields: (keyof TSecretSyncForm)[]
export const CreateSecretSyncForm = ({ destination, onComplete, onCancel }: Props) => { export const CreateSecretSyncForm = ({ destination, onComplete, onCancel }: Props) => {
const createSecretSync = useCreateSecretSync(); const createSecretSync = useCreateSecretSync();
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const { name: destinationName } = SECRET_SYNC_MAP[destination]; const { name: destinationName } = SECRET_SYNC_MAP[destination];
const [showConfirmation, setShowConfirmation] = useState(false); const [showConfirmation, setShowConfirmation] = useState(false);
@@ -70,7 +70,7 @@ export const CreateSecretSyncForm = ({ destination, onComplete, onCancel }: Prop
...formData, ...formData,
connectionId: connection.id, connectionId: connection.id,
environment: environment.slug, environment: environment.slug,
projectId: currentWorkspace.id projectId: currentProject.id
}); });
createNotification({ createNotification({
@@ -4,7 +4,7 @@ import { subject } from "@casl/ability";
import { FilterableSelect, FormControl } from "@app/components/v2"; import { FilterableSelect, FormControl } from "@app/components/v2";
import { SecretPathInput } from "@app/components/v2/SecretPathInput"; import { SecretPathInput } from "@app/components/v2/SecretPathInput";
import { useProjectPermission, useWorkspace } from "@app/context"; import { useProjectPermission, useProject } from "@app/context";
import { import {
ProjectPermissionSecretSyncActions, ProjectPermissionSecretSyncActions,
ProjectPermissionSub ProjectPermissionSub
@@ -16,7 +16,7 @@ export const SecretSyncSourceFields = () => {
const { control, watch, setError, clearErrors } = useFormContext<TSecretSyncForm>(); const { control, watch, setError, clearErrors } = useFormContext<TSecretSyncForm>();
const { permission } = useProjectPermission(); const { permission } = useProjectPermission();
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const selectedEnvironment = watch("environment"); const selectedEnvironment = watch("environment");
const selectedSecretPath = watch("secretPath"); const selectedSecretPath = watch("secretPath");
@@ -48,7 +48,7 @@ export const SecretSyncSourceFields = () => {
</p> </p>
<Controller <Controller
defaultValue={currentWorkspace.environments[0]} defaultValue={currentProject.environments[0]}
control={control} control={control}
name="environment" name="environment"
render={({ field: { value, onChange }, fieldState: { error } }) => ( render={({ field: { value, onChange }, fieldState: { error } }) => (
@@ -56,7 +56,7 @@ export const SecretSyncSourceFields = () => {
<FilterableSelect <FilterableSelect
value={value} value={value}
onChange={onChange} onChange={onChange}
options={currentWorkspace.environments} options={currentProject.environments}
placeholder="Select environment..." placeholder="Select environment..."
getOptionLabel={(option) => option?.name} getOptionLabel={(option) => option?.name}
getOptionValue={(option) => option?.id} getOptionValue={(option) => option?.id}
@@ -13,7 +13,7 @@ import { twMerge } from "tailwind-merge";
import { createNotification } from "@app/components/notifications"; import { createNotification } from "@app/components/notifications";
import { FormControl, FormLabel, SecretInput, Spinner, Tooltip } from "@app/components/v2"; import { FormControl, FormLabel, SecretInput, Spinner, Tooltip } from "@app/components/v2";
import { useWorkspace } from "@app/context"; import { useProject } from "@app/context";
import { useGetSecretReferenceTree } from "@app/hooks/api"; import { useGetSecretReferenceTree } from "@app/hooks/api";
import { ApiErrorTypes, TApiErrors, TSecretReferenceTraceNode } from "@app/hooks/api/types"; import { ApiErrorTypes, TApiErrors, TSecretReferenceTraceNode } from "@app/hooks/api/types";
@@ -89,8 +89,8 @@ export const SecretReferenceNode = ({
}; };
export const SecretReferenceTree = ({ secretPath, environment, secretKey }: Props) => { export const SecretReferenceTree = ({ secretPath, environment, secretKey }: Props) => {
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const projectId = currentWorkspace?.id || ""; const projectId = currentProject?.id || "";
const { data, isPending, isError, error } = useGetSecretReferenceTree({ const { data, isPending, isError, error } = useGetSecretReferenceTree({
secretPath, secretPath,
@@ -15,7 +15,7 @@ import {
ModalContent, ModalContent,
Tooltip Tooltip
} from "@app/components/v2"; } from "@app/components/v2";
import { useWorkspace } from "@app/context"; import { useProject } from "@app/context";
import { useCreateWsTag } from "@app/hooks/api"; import { useCreateWsTag } from "@app/hooks/api";
import { slugSchema } from "@app/lib/schemas"; import { slugSchema } from "@app/lib/schemas";
@@ -115,11 +115,10 @@ export const CreateTagModal = ({ isOpen, onToggle }: Props): JSX.Element => {
} }
}); });
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const workspaceId = currentWorkspace?.id || ""; const projectId = currentProject?.id || "";
const { mutateAsync: createWsTag } = useCreateWsTag(); const { mutateAsync: createWsTag } = useCreateWsTag();
const [showHexInput, setShowHexInput] = useState<boolean>(false); const [showHexInput, setShowHexInput] = useState<boolean>(false);
const selectedTagColor = watch("color", secretTagsColors[0].hex); const selectedTagColor = watch("color", secretTagsColors[0].hex);
@@ -130,7 +129,7 @@ export const CreateTagModal = ({ isOpen, onToggle }: Props): JSX.Element => {
const onFormSubmit = async ({ slug, color }: FormData) => { const onFormSubmit = async ({ slug, color }: FormData) => {
try { try {
await createWsTag({ await createWsTag({
workspaceID: workspaceId, projectId,
tagColor: color, tagColor: color,
tagSlug: slug tagSlug: slug
}); });
@@ -3,7 +3,7 @@ import { faFolder, faKey, faLayerGroup } from "@fortawesome/free-solid-svg-icons
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import * as Popover from "@radix-ui/react-popover"; import * as Popover from "@radix-ui/react-popover";
import { useWorkspace } from "@app/context"; import { useProject } from "@app/context";
import { useDebounce, useToggle } from "@app/hooks"; import { useDebounce, useToggle } from "@app/hooks";
import { useGetProjectFolders, useGetProjectSecrets } from "@app/hooks/api"; import { useGetProjectFolders, useGetProjectSecrets } from "@app/hooks/api";
@@ -76,8 +76,8 @@ export const InfisicalSecretInput = forwardRef<HTMLTextAreaElement, Props>(
}, },
ref ref
) => { ) => {
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const workspaceId = currentWorkspace?.id || ""; const projectId = currentProject?.id || "";
const [debouncedValue] = useDebounce(value, 100); const [debouncedValue] = useDebounce(value, 100);
@@ -101,7 +101,7 @@ export const InfisicalSecretInput = forwardRef<HTMLTextAreaElement, Props>(
let predicate = suggestionSourceValue; let predicate = suggestionSourceValue;
if (isDeep) { if (isDeep) {
const [envSlug, ...folderPaths] = suggestionSourceValue.split("."); const [envSlug, ...folderPaths] = suggestionSourceValue.split(".");
const isValidEnvSlug = currentWorkspace?.environments.find((e) => e.slug === envSlug); const isValidEnvSlug = currentProject?.environments.find((e) => e.slug === envSlug);
suggestionSourceEnv = isValidEnvSlug ? envSlug : undefined; suggestionSourceEnv = isValidEnvSlug ? envSlug : undefined;
suggestionSourceSecretPath = `/${folderPaths.slice(0, -1)?.join("/")}`; suggestionSourceSecretPath = `/${folderPaths.slice(0, -1)?.join("/")}`;
predicate = folderPaths[folderPaths.length - 1]; predicate = folderPaths[folderPaths.length - 1];
@@ -125,7 +125,7 @@ export const InfisicalSecretInput = forwardRef<HTMLTextAreaElement, Props>(
viewSecretValue: false, viewSecretValue: false,
environment: suggestionSource.environment || "", environment: suggestionSource.environment || "",
secretPath: suggestionSource.secretPath || "", secretPath: suggestionSource.secretPath || "",
workspaceId, projectId,
options: { options: {
enabled: isPopupOpen enabled: isPopupOpen
} }
@@ -133,7 +133,7 @@ export const InfisicalSecretInput = forwardRef<HTMLTextAreaElement, Props>(
const { data: folders } = useGetProjectFolders({ const { data: folders } = useGetProjectFolders({
environment: suggestionSource.environment || "", environment: suggestionSource.environment || "",
path: suggestionSource.secretPath || "", path: suggestionSource.secretPath || "",
projectId: workspaceId, projectId: projectId,
options: { options: {
enabled: isPopupOpen enabled: isPopupOpen
} }
@@ -148,7 +148,7 @@ export const InfisicalSecretInput = forwardRef<HTMLTextAreaElement, Props>(
if (!suggestionSource.isDeep) { if (!suggestionSource.isDeep) {
// At first level only environments and secrets // At first level only environments and secrets
(currentWorkspace?.environments || []).forEach(({ name, slug }) => { (currentProject?.environments || []).forEach(({ name, slug }) => {
if (name.toLowerCase().startsWith(predicate)) if (name.toLowerCase().startsWith(predicate))
suggestionsArr.push({ suggestionsArr.push({
label: name, label: name,
@@ -176,7 +176,7 @@ export const InfisicalSecretInput = forwardRef<HTMLTextAreaElement, Props>(
}); });
}); });
return suggestionsArr; return suggestionsArr;
}, [secrets, folders, currentWorkspace?.environments, isPopupOpen, suggestionSource.value]); }, [secrets, folders, currentProject?.environments, isPopupOpen, suggestionSource.value]);
const handleSuggestionSelect = (selectIndex?: number) => { const handleSuggestionSelect = (selectIndex?: number) => {
const selectedSuggestion = const selectedSuggestion =
@@ -4,7 +4,7 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import * as Popover from "@radix-ui/react-popover"; import * as Popover from "@radix-ui/react-popover";
import { twMerge } from "tailwind-merge"; import { twMerge } from "tailwind-merge";
import { useWorkspace } from "@app/context"; import { useProject } from "@app/context";
import { useDebounce } from "@app/hooks"; import { useDebounce } from "@app/hooks";
import { useGetFoldersByEnv } from "@app/hooks/api"; import { useGetFoldersByEnv } from "@app/hooks/api";
@@ -35,11 +35,11 @@ export const SecretPathInput = ({
const [highlightedIndex, setHighlightedIndex] = useState(-1); const [highlightedIndex, setHighlightedIndex] = useState(-1);
const [debouncedInputValue] = useDebounce(inputValue, 200); const [debouncedInputValue] = useDebounce(inputValue, 200);
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const workspaceId = currentWorkspace?.id || ""; const workspaceId = currentProject?.id || "";
const { folderNames: folders } = useGetFoldersByEnv({ const { folderNames: folders } = useGetFoldersByEnv({
path: secretPath, path: secretPath,
environments: [environment || currentWorkspace?.environments?.[0].slug || ""], environments: [environment || currentProject?.environments?.[0].slug || ""],
projectId: workspaceId projectId: workspaceId
}); });
@@ -22,8 +22,8 @@ export const useProjectPermission = () => {
const { const {
data: { permission, membership, assumedPrivilegeDetails } data: { permission, membership, assumedPrivilegeDetails }
} = useSuspenseQuery({ } = useSuspenseQuery({
queryKey: roleQueryKeys.getUserProjectPermissions({ workspaceId: projectId }), queryKey: roleQueryKeys.getUserProjectPermissions({ projectId }),
queryFn: () => fetchUserProjectPermissions({ workspaceId: projectId }), queryFn: () => fetchUserProjectPermissions({ projectId }),
staleTime: Infinity, staleTime: Infinity,
select: (data) => { select: (data) => {
const rule = unpackRules<RawRuleOf<MongoAbility<ProjectPermissionSet>>>(data.permissions); const rule = unpackRules<RawRuleOf<MongoAbility<ProjectPermissionSet>>>(data.permissions);
@@ -2,9 +2,9 @@ import { useSuspenseQuery } from "@tanstack/react-query";
import { useParams } from "@tanstack/react-router"; import { useParams } from "@tanstack/react-router";
import { projectKeys } from "@app/hooks/api"; import { projectKeys } from "@app/hooks/api";
import { fetchWorkspaceById } from "@app/hooks/api/workspace/queries"; import { fetchProjectById } from "@app/hooks/api/projects/queries";
export const useWorkspace = () => { export const useProject = () => {
const params = useParams({ const params = useParams({
strict: false strict: false
}); });
@@ -12,11 +12,11 @@ export const useWorkspace = () => {
throw new Error("Missing project id"); throw new Error("Missing project id");
} }
const { data: currentWorkspace } = useSuspenseQuery({ const { data: currentProject } = useSuspenseQuery({
queryKey: projectKeys.getWorkspaceById(params.projectId), queryKey: projectKeys.getProjectById(params.projectId),
queryFn: () => fetchWorkspaceById(params.projectId as string), queryFn: () => fetchProjectById(params.projectId as string),
staleTime: Infinity staleTime: Infinity
}); });
return { currentWorkspace }; return { currentProject, projectId: currentProject.id };
}; };
@@ -1 +1 @@
export { useWorkspace } from "./WorkspaceContext"; export { useProject } from "./WorkspaceContext";
+1 -1
View File
@@ -29,4 +29,4 @@ export {
export { useServerConfig } from "./ServerConfigContext"; export { useServerConfig } from "./ServerConfigContext";
export { useSubscription } from "./SubscriptionContext"; export { useSubscription } from "./SubscriptionContext";
export { useUser } from "./UserContext"; export { useUser } from "./UserContext";
export { useWorkspace } from "./WorkspaceContext"; export { useProject } from "./WorkspaceContext";
+3 -3
View File
@@ -1,6 +1,6 @@
import { apiRequest } from "@app/config/request"; import { apiRequest } from "@app/config/request";
import { createWorkspace } from "@app/hooks/api/workspace/queries"; import { createWorkspace } from "@app/hooks/api/projects/queries";
import { ProjectType, WorkspaceEnv } from "@app/hooks/api/workspace/types"; import { ProjectType, ProjectEnv } from "@app/hooks/api/projects/types";
const secretsToBeAdded = [ const secretsToBeAdded = [
{ {
@@ -74,7 +74,7 @@ export const getProjectBaseURL = (type: ProjectType) => {
// @ts-expect-error akhilmhdh: will remove this later // @ts-expect-error akhilmhdh: will remove this later
// eslint-disable-next-line @typescript-eslint/no-unused-vars // eslint-disable-next-line @typescript-eslint/no-unused-vars
export const getProjectHomePage = (type: ProjectType, environments: WorkspaceEnv[]) => { export const getProjectHomePage = (type: ProjectType, environments: ProjectEnv[]) => {
switch (type) { switch (type) {
case ProjectType.SecretManager: case ProjectType.SecretManager:
return "/projects/secret-management/$projectId/overview" as const; return "/projects/secret-management/$projectId/overview" as const;
@@ -1,7 +1,7 @@
import { EnforcementLevel, PolicyType } from "../policies/enums"; import { EnforcementLevel, PolicyType } from "../policies/enums";
import { TProjectPermission } from "../roles/types"; import { TProjectPermission } from "../roles/types";
import { ApprovalStatus } from "../secretApprovalRequest/types"; import { ApprovalStatus } from "../secretApprovalRequest/types";
import { WorkspaceEnv } from "../workspace/types"; import { ProjectEnv } from "../projects/types";
export type TAccessApprovalPolicy = { export type TAccessApprovalPolicy = {
id: string; id: string;
@@ -9,7 +9,7 @@ export type TAccessApprovalPolicy = {
approvals: number; approvals: number;
secretPath: string; secretPath: string;
workspace: string; workspace: string;
environments: WorkspaceEnv[]; environments: ProjectEnv[];
projectId: string; projectId: string;
policyType: PolicyType; policyType: PolicyType;
approversRequired: boolean; approversRequired: boolean;
@@ -20,7 +20,7 @@ export const eventToNameMap: { [K in EventType]: string } = {
[EventType.CREATE_SECRET]: "Create secret", [EventType.CREATE_SECRET]: "Create secret",
[EventType.UPDATE_SECRET]: "Update secret", [EventType.UPDATE_SECRET]: "Update secret",
[EventType.DELETE_SECRET]: "Delete secret", [EventType.DELETE_SECRET]: "Delete secret",
[EventType.GET_WORKSPACE_KEY]: "Read project key", [EventType.GET_PROJECT_KEY]: "Read project key",
[EventType.AUTHORIZE_INTEGRATION]: "Authorize integration", [EventType.AUTHORIZE_INTEGRATION]: "Authorize integration",
[EventType.UPDATE_INTEGRATION_AUTH]: "Update integration auth", [EventType.UPDATE_INTEGRATION_AUTH]: "Update integration auth",
[EventType.UNAUTHORIZE_INTEGRATION]: "Unauthorize integration", [EventType.UNAUTHORIZE_INTEGRATION]: "Unauthorize integration",
@@ -45,8 +45,8 @@ export const eventToNameMap: { [K in EventType]: string } = {
[EventType.CREATE_ENVIRONMENT]: "Create environment", [EventType.CREATE_ENVIRONMENT]: "Create environment",
[EventType.UPDATE_ENVIRONMENT]: "Update environment", [EventType.UPDATE_ENVIRONMENT]: "Update environment",
[EventType.DELETE_ENVIRONMENT]: "Delete environment", [EventType.DELETE_ENVIRONMENT]: "Delete environment",
[EventType.ADD_WORKSPACE_MEMBER]: "Add member", [EventType.ADD_PROJECT_MEMBER]: "Add member",
[EventType.REMOVE_WORKSPACE_MEMBER]: "Remove member", [EventType.REMOVE_PROJECT_MEMBER]: "Remove member",
[EventType.CREATE_FOLDER]: "Create folder", [EventType.CREATE_FOLDER]: "Create folder",
[EventType.UPDATE_FOLDER]: "Update folder", [EventType.UPDATE_FOLDER]: "Update folder",
[EventType.DELETE_FOLDER]: "Delete folder", [EventType.DELETE_FOLDER]: "Delete folder",
@@ -58,8 +58,8 @@ export const eventToNameMap: { [K in EventType]: string } = {
[EventType.CREATE_SECRET_IMPORT]: "Create secret import", [EventType.CREATE_SECRET_IMPORT]: "Create secret import",
[EventType.UPDATE_SECRET_IMPORT]: "Update secret import", [EventType.UPDATE_SECRET_IMPORT]: "Update secret import",
[EventType.DELETE_SECRET_IMPORT]: "Delete secret import", [EventType.DELETE_SECRET_IMPORT]: "Delete secret import",
[EventType.UPDATE_USER_WORKSPACE_DENIED_PERMISSIONS]: "Update denied permissions", [EventType.UPDATE_USER_PROJECT_DENIED_PERMISSIONS]: "Update denied permissions",
[EventType.UPDATE_USER_WORKSPACE_ROLE]: "Update user role", [EventType.UPDATE_USER_PROJECT_ROLE]: "Update user role",
[EventType.CREATE_CA]: "Create CA", [EventType.CREATE_CA]: "Create CA",
[EventType.GET_CA]: "Get CA", [EventType.GET_CA]: "Get CA",
[EventType.UPDATE_CA]: "Update CA", [EventType.UPDATE_CA]: "Update CA",
+5 -5
View File
@@ -26,7 +26,7 @@ export enum EventType {
CREATE_SECRET = "create-secret", CREATE_SECRET = "create-secret",
UPDATE_SECRET = "update-secret", UPDATE_SECRET = "update-secret",
DELETE_SECRET = "delete-secret", DELETE_SECRET = "delete-secret",
GET_WORKSPACE_KEY = "get-workspace-key", GET_PROJECT_KEY = "get-project-key",
AUTHORIZE_INTEGRATION = "authorize-integration", AUTHORIZE_INTEGRATION = "authorize-integration",
UPDATE_INTEGRATION_AUTH = "update-integration-auth", UPDATE_INTEGRATION_AUTH = "update-integration-auth",
UNAUTHORIZE_INTEGRATION = "unauthorize-integration", UNAUTHORIZE_INTEGRATION = "unauthorize-integration",
@@ -58,8 +58,8 @@ export enum EventType {
CREATE_ENVIRONMENT = "create-environment", CREATE_ENVIRONMENT = "create-environment",
UPDATE_ENVIRONMENT = "update-environment", UPDATE_ENVIRONMENT = "update-environment",
DELETE_ENVIRONMENT = "delete-environment", DELETE_ENVIRONMENT = "delete-environment",
ADD_WORKSPACE_MEMBER = "add-workspace-member", ADD_PROJECT_MEMBER = "add-project-member",
REMOVE_WORKSPACE_MEMBER = "remove-workspace-member", REMOVE_PROJECT_MEMBER = "remove-project-member",
CREATE_FOLDER = "create-folder", CREATE_FOLDER = "create-folder",
UPDATE_FOLDER = "update-folder", UPDATE_FOLDER = "update-folder",
DELETE_FOLDER = "delete-folder", DELETE_FOLDER = "delete-folder",
@@ -71,8 +71,8 @@ export enum EventType {
CREATE_SECRET_IMPORT = "create-secret-import", CREATE_SECRET_IMPORT = "create-secret-import",
UPDATE_SECRET_IMPORT = "update-secret-import", UPDATE_SECRET_IMPORT = "update-secret-import",
DELETE_SECRET_IMPORT = "delete-secret-import", DELETE_SECRET_IMPORT = "delete-secret-import",
UPDATE_USER_WORKSPACE_ROLE = "update-user-workspace-role", UPDATE_USER_PROJECT_ROLE = "update-user-project-role",
UPDATE_USER_WORKSPACE_DENIED_PERMISSIONS = "update-user-workspace-denied-permissions", UPDATE_USER_PROJECT_DENIED_PERMISSIONS = "update-user-project-denied-permissions",
CREATE_CA = "create-certificate-authority", CREATE_CA = "create-certificate-authority",
GET_CA = "get-certificate-authority", GET_CA = "get-certificate-authority",
UPDATE_CA = "update-certificate-authority", UPDATE_CA = "update-certificate-authority",
+5 -5
View File
@@ -129,7 +129,7 @@ interface DeleteSecretEvent {
} }
interface GetWorkspaceKeyEvent { interface GetWorkspaceKeyEvent {
type: EventType.GET_WORKSPACE_KEY; type: EventType.GET_PROJECT_KEY;
metadata: { metadata: {
keyId: string; keyId: string;
}; };
@@ -361,7 +361,7 @@ interface DeleteEnvironmentEvent {
} }
interface AddWorkspaceMemberEvent { interface AddWorkspaceMemberEvent {
type: EventType.ADD_WORKSPACE_MEMBER; type: EventType.ADD_PROJECT_MEMBER;
metadata: { metadata: {
userId: string; userId: string;
email: string; email: string;
@@ -369,7 +369,7 @@ interface AddWorkspaceMemberEvent {
} }
interface RemoveWorkspaceMemberEvent { interface RemoveWorkspaceMemberEvent {
type: EventType.REMOVE_WORKSPACE_MEMBER; type: EventType.REMOVE_PROJECT_MEMBER;
metadata: { metadata: {
userId: string; userId: string;
email: string; email: string;
@@ -500,7 +500,7 @@ interface DeleteSecretImportEvent {
} }
interface UpdateUserRole { interface UpdateUserRole {
type: EventType.UPDATE_USER_WORKSPACE_ROLE; type: EventType.UPDATE_USER_PROJECT_ROLE;
metadata: { metadata: {
userId: string; userId: string;
email: string; email: string;
@@ -510,7 +510,7 @@ interface UpdateUserRole {
} }
interface UpdateUserDeniedPermissions { interface UpdateUserDeniedPermissions {
type: EventType.UPDATE_USER_WORKSPACE_DENIED_PERMISSIONS; type: EventType.UPDATE_USER_PROJECT_DENIED_PERMISSIONS;
metadata: { metadata: {
userId: string; userId: string;
email: string; email: string;
+2 -2
View File
@@ -6,7 +6,7 @@ import { SessionStorageKeys } from "@app/const";
import { organizationKeys } from "../organization/queries"; import { organizationKeys } from "../organization/queries";
import { setAuthToken } from "../reactQuery"; import { setAuthToken } from "../reactQuery";
import { workspaceKeys } from "../workspace"; import { projectKeys } from "../projects";
import { import {
CompleteAccountDTO, CompleteAccountDTO,
CompleteAccountSignupDTO, CompleteAccountSignupDTO,
@@ -101,7 +101,7 @@ export const useSelectOrganization = () => {
}, },
onSuccess: () => { onSuccess: () => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: [organizationKeys.getUserOrganizations, workspaceKeys.getAllUserWorkspace] queryKey: [organizationKeys.getUserOrganizations, projectKeys.getAllUserProjects]
}); });
} }
}); });
+6 -6
View File
@@ -2,7 +2,7 @@ import { useMutation, useQueryClient } from "@tanstack/react-query";
import { apiRequest } from "@app/config/request"; import { apiRequest } from "@app/config/request";
import { workspaceKeys } from "../workspace"; import { projectKeys } from "../projects";
import { CaType } from "./enums"; import { CaType } from "./enums";
import { caKeys } from "./queries"; import { caKeys } from "./queries";
import { import {
@@ -118,8 +118,8 @@ export const useImportCaCertificate = (projectId: string) => {
); );
return data; return data;
}, },
onSuccess: (_, { caId, projectSlug }) => { onSuccess: (_, { caId }) => {
queryClient.invalidateQueries({ queryKey: workspaceKeys.getWorkspaceCas({ projectSlug }) }); queryClient.invalidateQueries({ queryKey: projectKeys.getProjectCas({ projectId }) });
queryClient.invalidateQueries({ queryKey: caKeys.getCaCerts(caId) }); queryClient.invalidateQueries({ queryKey: caKeys.getCaCerts(caId) });
queryClient.invalidateQueries({ queryKey: caKeys.getCaCert(caId) }); queryClient.invalidateQueries({ queryKey: caKeys.getCaCert(caId) });
queryClient.invalidateQueries({ queryClient.invalidateQueries({
@@ -142,7 +142,7 @@ export const useCreateCertificate = () => {
}, },
onSuccess: (_, { projectSlug }) => { onSuccess: (_, { projectSlug }) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: workspaceKeys.forWorkspaceCertificates(projectSlug) queryKey: projectKeys.forProjectCertificates(projectSlug)
}); });
} }
}); });
@@ -158,8 +158,8 @@ export const useRenewCa = () => {
); );
return data; return data;
}, },
onSuccess: (_, { caId, projectSlug }) => { onSuccess: ({ projectId }, { caId }) => {
queryClient.invalidateQueries({ queryKey: workspaceKeys.getWorkspaceCas({ projectSlug }) }); queryClient.invalidateQueries({ queryKey: projectKeys.getProjectCas({ projectId }) });
queryClient.invalidateQueries({ queryKey: caKeys.getCaById(caId) }); queryClient.invalidateQueries({ queryKey: caKeys.getCaById(caId) });
queryClient.invalidateQueries({ queryKey: caKeys.getCaCert(caId) }); queryClient.invalidateQueries({ queryKey: caKeys.getCaCert(caId) });
queryClient.invalidateQueries({ queryKey: caKeys.getCaCerts(caId) }); queryClient.invalidateQueries({ queryKey: caKeys.getCaCerts(caId) });
+1
View File
@@ -182,4 +182,5 @@ export type TRenewCaResponse = {
certificate: string; certificate: string;
certificateChain: string; certificateChain: string;
serialNumber: string; serialNumber: string;
projectId: string;
}; };
@@ -3,7 +3,7 @@ import { useMutation, useQueryClient } from "@tanstack/react-query";
import { apiRequest } from "@app/config/request"; import { apiRequest } from "@app/config/request";
import { caKeys } from "../ca/queries"; import { caKeys } from "../ca/queries";
import { workspaceKeys } from "../workspace"; import { projectKeys } from "../projects";
import { certTemplateKeys } from "./queries"; import { certTemplateKeys } from "./queries";
import { import {
TCertificateTemplate, TCertificateTemplate,
@@ -29,7 +29,7 @@ export const useCreateCertTemplate = () => {
}, },
onSuccess: ({ caId }, { projectId }) => { onSuccess: ({ caId }, { projectId }) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: workspaceKeys.getWorkspaceCertificateTemplates(projectId) queryKey: projectKeys.getProjectCertificateTemplates(projectId)
}); });
queryClient.invalidateQueries({ queryKey: caKeys.getCaCertTemplates(caId) }); queryClient.invalidateQueries({ queryKey: caKeys.getCaCertTemplates(caId) });
} }
@@ -49,7 +49,7 @@ export const useUpdateCertTemplate = () => {
}, },
onSuccess: ({ caId }, { projectId, id }) => { onSuccess: ({ caId }, { projectId, id }) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: workspaceKeys.getWorkspaceCertificateTemplates(projectId) queryKey: projectKeys.getProjectCertificateTemplates(projectId)
}); });
queryClient.invalidateQueries({ queryKey: certTemplateKeys.getCertTemplateById(id) }); queryClient.invalidateQueries({ queryKey: certTemplateKeys.getCertTemplateById(id) });
queryClient.invalidateQueries({ queryKey: caKeys.getCaCertTemplates(caId) }); queryClient.invalidateQueries({ queryKey: caKeys.getCaCertTemplates(caId) });
@@ -68,7 +68,7 @@ export const useDeleteCertTemplate = () => {
}, },
onSuccess: ({ caId }, { projectId, id }) => { onSuccess: ({ caId }, { projectId, id }) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: workspaceKeys.getWorkspaceCertificateTemplates(projectId) queryKey: projectKeys.getProjectCertificateTemplates(projectId)
}); });
queryClient.invalidateQueries({ queryKey: certTemplateKeys.getCertTemplateById(id) }); queryClient.invalidateQueries({ queryKey: certTemplateKeys.getCertTemplateById(id) });
queryClient.invalidateQueries({ queryKey: caKeys.getCaCertTemplates(caId) }); queryClient.invalidateQueries({ queryKey: caKeys.getCaCertTemplates(caId) });
@@ -3,7 +3,7 @@ import { useMutation, useQueryClient } from "@tanstack/react-query";
import { apiRequest } from "@app/config/request"; import { apiRequest } from "@app/config/request";
import { pkiSubscriberKeys } from "../pkiSubscriber/queries"; import { pkiSubscriberKeys } from "../pkiSubscriber/queries";
import { workspaceKeys } from "../workspace"; import { projectKeys } from "../projects";
import { import {
TCertificate, TCertificate,
TDeleteCertDTO, TDeleteCertDTO,
@@ -25,7 +25,7 @@ export const useDeleteCert = () => {
}, },
onSuccess: (_, { projectSlug }) => { onSuccess: (_, { projectSlug }) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: workspaceKeys.forWorkspaceCertificates(projectSlug) queryKey: projectKeys.forProjectCertificates(projectSlug)
}); });
} }
}); });
@@ -47,7 +47,7 @@ export const useRevokeCert = () => {
}, },
onSuccess: (_, { projectSlug }) => { onSuccess: (_, { projectSlug }) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: workspaceKeys.forWorkspaceCertificates(projectSlug) queryKey: projectKeys.forProjectCertificates(projectSlug)
}); });
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: pkiSubscriberKeys.allPkiSubscriberCertificates() queryKey: pkiSubscriberKeys.allPkiSubscriberCertificates()
@@ -68,7 +68,7 @@ export const useImportCertificate = () => {
}, },
onSuccess: (_, { projectSlug }) => { onSuccess: (_, { projectSlug }) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: workspaceKeys.forWorkspaceCertificates(projectSlug) queryKey: projectKeys.forProjectCertificates(projectSlug)
}); });
} }
}); });
+1 -1
View File
@@ -1,7 +1,7 @@
import { OrderByDirection } from "../generic/types"; import { OrderByDirection } from "../generic/types";
import { OrgIdentityOrderBy } from "../organization/types"; import { OrgIdentityOrderBy } from "../organization/types";
import { TOrgRole } from "../roles/types"; import { TOrgRole } from "../roles/types";
import { ProjectUserMembershipTemporaryMode, Project } from "../workspace/types"; import { ProjectUserMembershipTemporaryMode, Project } from "../projects/types";
import { IdentityAuthMethod, IdentityJwtConfigurationType } from "./enums"; import { IdentityAuthMethod, IdentityJwtConfigurationType } from "./enums";
export type IdentityTrustedIp = { export type IdentityTrustedIp = {
+2 -3
View File
@@ -1,5 +1,5 @@
export * from "./accessApproval";
export * from "./admin"; export * from "./admin";
export * from "./accessApproval";
export * from "./apiKeys"; export * from "./apiKeys";
export * from "./assumePrivileges"; export * from "./assumePrivileges";
export * from "./auditLogs"; export * from "./auditLogs";
@@ -20,7 +20,6 @@ export * from "./identityProjectAdditionalPrivilege";
export * from "./incidentContacts"; export * from "./incidentContacts";
export * from "./integrationAuth"; export * from "./integrationAuth";
export * from "./integrations"; export * from "./integrations";
export * from "./keys";
export * from "./kms"; export * from "./kms";
export * from "./ldapConfig"; export * from "./ldapConfig";
export * from "./oidcConfig"; export * from "./oidcConfig";
@@ -54,4 +53,4 @@ export * from "./trustedIps";
export * from "./users"; export * from "./users";
export * from "./webhooks"; export * from "./webhooks";
export * from "./workflowIntegrations"; export * from "./workflowIntegrations";
export * from "./workspace"; export * from "./projects";
@@ -3,7 +3,7 @@ import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import { apiRequest } from "@app/config/request"; import { apiRequest } from "@app/config/request";
import { TReactQueryOptions } from "@app/types/reactQuery"; import { TReactQueryOptions } from "@app/types/reactQuery";
import { workspaceKeys } from "../workspace"; import { projectKeys } from "../projects";
import { import {
App, App,
BitbucketEnvironment, BitbucketEnvironment,
@@ -970,7 +970,7 @@ export const useAuthorizeIntegration = () => {
}, },
onSuccess: (res) => { onSuccess: (res) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: { queryKey: workspaceKeys.getWorkspaceAuthorization(res.workspace) } queryKey: { queryKey: projectKeys.getProjectAuthorization(res.workspace) }
}); });
} }
}); });
@@ -1016,7 +1016,7 @@ export const useSaveIntegrationAccessToken = () => {
}, },
onSuccess: (res) => { onSuccess: (res) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: workspaceKeys.getWorkspaceAuthorization(res.workspace) queryKey: projectKeys.getProjectAuthorization(res.workspace)
}); });
} }
}); });
@@ -1035,10 +1035,10 @@ export const useDeleteIntegrationAuths = () => {
), ),
onSuccess: (_, { workspaceId }) => { onSuccess: (_, { workspaceId }) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: workspaceKeys.getWorkspaceAuthorization(workspaceId) queryKey: projectKeys.getProjectAuthorization(workspaceId)
}); });
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: workspaceKeys.getWorkspaceIntegrations(workspaceId) queryKey: projectKeys.getProjectIntegrations(workspaceId)
}); });
} }
}); });
@@ -1052,10 +1052,10 @@ export const useDeleteIntegrationAuth = () => {
mutationFn: ({ id }) => apiRequest.delete(`/api/v1/integration-auth/${id}`), mutationFn: ({ id }) => apiRequest.delete(`/api/v1/integration-auth/${id}`),
onSuccess: (_, { workspaceId }) => { onSuccess: (_, { workspaceId }) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: workspaceKeys.getWorkspaceAuthorization(workspaceId) queryKey: projectKeys.getProjectAuthorization(workspaceId)
}); });
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: workspaceKeys.getWorkspaceIntegrations(workspaceId) queryKey: projectKeys.getProjectIntegrations(workspaceId)
}); });
} }
}); });
@@ -3,7 +3,7 @@ import { useMutation, useQuery, useQueryClient, UseQueryOptions } from "@tanstac
import { createNotification } from "@app/components/notifications"; import { createNotification } from "@app/components/notifications";
import { apiRequest } from "@app/config/request"; import { apiRequest } from "@app/config/request";
import { workspaceKeys } from "../workspace"; import { projectKeys } from "../projects";
import { import {
IntegrationMetadataSyncMode, IntegrationMetadataSyncMode,
TCloudIntegration, TCloudIntegration,
@@ -121,7 +121,7 @@ export const useCreateIntegration = () => {
}, },
onSuccess: (res) => { onSuccess: (res) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: workspaceKeys.getWorkspaceIntegrations(res.workspace) queryKey: projectKeys.getProjectIntegrations(res.workspace)
}); });
} }
}); });
@@ -141,10 +141,10 @@ export const useDeleteIntegration = () => {
), ),
onSuccess: (_, { workspaceId }) => { onSuccess: (_, { workspaceId }) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: workspaceKeys.getWorkspaceIntegrations(workspaceId) queryKey: projectKeys.getProjectIntegrations(workspaceId)
}); });
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: workspaceKeys.getWorkspaceAuthorization(workspaceId) queryKey: projectKeys.getProjectAuthorization(workspaceId)
}); });
} }
}); });
@@ -2,7 +2,7 @@ import { useMutation, useQueryClient } from "@tanstack/react-query";
import { apiRequest } from "@app/config/request"; import { apiRequest } from "@app/config/request";
import { workspaceKeys } from "../workspace"; import { projectKeys } from "../projects";
export const useImportEnvKey = () => { export const useImportEnvKey = () => {
const queryClient = useQueryClient(); const queryClient = useQueryClient();
@@ -34,7 +34,7 @@ export const useImportEnvKey = () => {
}, },
onSuccess: () => { onSuccess: () => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: workspaceKeys.getAllUserWorkspace() queryKey: projectKeys.getAllUserProjects()
}); });
} }
}); });
@@ -2,7 +2,7 @@ import { useMutation, useQueryClient } from "@tanstack/react-query";
import { apiRequest } from "@app/config/request"; import { apiRequest } from "@app/config/request";
import { workspaceKeys } from "../workspace"; import { projectKeys } from "../projects";
import { pkiAlertKeys } from "./queries"; import { pkiAlertKeys } from "./queries";
import { TCreatePkiAlertDTO, TDeletePkiAlertDTO, TPkiAlert, TUpdatePkiAlertDTO } from "./types"; import { TCreatePkiAlertDTO, TDeletePkiAlertDTO, TPkiAlert, TUpdatePkiAlertDTO } from "./types";
@@ -14,7 +14,7 @@ export const useCreatePkiAlert = () => {
return alert; return alert;
}, },
onSuccess: (_, { projectId }) => { onSuccess: (_, { projectId }) => {
queryClient.invalidateQueries({ queryKey: workspaceKeys.getWorkspacePkiAlerts(projectId) }); queryClient.invalidateQueries({ queryKey: projectKeys.getProjectPkiAlerts(projectId) });
} }
}); });
}; };
@@ -30,7 +30,7 @@ export const useUpdatePkiAlert = () => {
return alert; return alert;
}, },
onSuccess: (_, { projectId, alertId }) => { onSuccess: (_, { projectId, alertId }) => {
queryClient.invalidateQueries({ queryKey: workspaceKeys.getWorkspacePkiAlerts(projectId) }); queryClient.invalidateQueries({ queryKey: projectKeys.getProjectPkiAlerts(projectId) });
queryClient.invalidateQueries({ queryKey: pkiAlertKeys.getPkiAlertById(alertId) }); queryClient.invalidateQueries({ queryKey: pkiAlertKeys.getPkiAlertById(alertId) });
} }
}); });
@@ -44,7 +44,7 @@ export const useDeletePkiAlert = () => {
return alert; return alert;
}, },
onSuccess: (_, { projectId, alertId }) => { onSuccess: (_, { projectId, alertId }) => {
queryClient.invalidateQueries({ queryKey: workspaceKeys.getWorkspacePkiAlerts(projectId) }); queryClient.invalidateQueries({ queryKey: projectKeys.getProjectPkiAlerts(projectId) });
queryClient.invalidateQueries({ queryKey: pkiAlertKeys.getPkiAlertById(alertId) }); queryClient.invalidateQueries({ queryKey: pkiAlertKeys.getPkiAlertById(alertId) });
} }
}); });
@@ -2,7 +2,7 @@ import { useMutation, useQueryClient } from "@tanstack/react-query";
import { apiRequest } from "@app/config/request"; import { apiRequest } from "@app/config/request";
import { workspaceKeys } from "../workspace"; import { projectKeys } from "../projects";
import { pkiCollectionKeys } from "./queries"; import { pkiCollectionKeys } from "./queries";
import { import {
TAddItemToPkiCollectionDTO, TAddItemToPkiCollectionDTO,
@@ -26,7 +26,7 @@ export const useCreatePkiCollection = () => {
}, },
onSuccess: (_, { projectId }) => { onSuccess: (_, { projectId }) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: workspaceKeys.getWorkspacePkiCollections(projectId) queryKey: projectKeys.getProjectPkiCollections(projectId)
}); });
} }
}); });
@@ -44,7 +44,7 @@ export const useUpdatePkiCollection = () => {
}, },
onSuccess: (_, { projectId, collectionId }) => { onSuccess: (_, { projectId, collectionId }) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: workspaceKeys.getWorkspacePkiCollections(projectId) queryKey: projectKeys.getProjectPkiCollections(projectId)
}); });
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: pkiCollectionKeys.getPkiCollectionById(collectionId) queryKey: pkiCollectionKeys.getPkiCollectionById(collectionId)
@@ -64,7 +64,7 @@ export const useDeletePkiCollection = () => {
}, },
onSuccess: (_, { projectId, collectionId }) => { onSuccess: (_, { projectId, collectionId }) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: workspaceKeys.getWorkspacePkiCollections(projectId) queryKey: projectKeys.getProjectPkiCollections(projectId)
}); });
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: pkiCollectionKeys.getPkiCollectionById(collectionId) queryKey: pkiCollectionKeys.getPkiCollectionById(collectionId)
@@ -3,7 +3,7 @@ import { useMutation, useQueryClient } from "@tanstack/react-query";
import { apiRequest } from "@app/config/request"; import { apiRequest } from "@app/config/request";
import { TCreateCertificateResponse } from "../ca/types"; import { TCreateCertificateResponse } from "../ca/types";
import { projectKeys } from "../workspace/query-keys"; import { projectKeys } from "../projects/query-keys";
import { pkiSubscriberKeys } from "./queries"; import { pkiSubscriberKeys } from "./queries";
import { import {
TCreatePkiSubscriberDTO, TCreatePkiSubscriberDTO,
@@ -22,7 +22,7 @@ export const useCreatePkiSubscriber = () => {
}, },
onSuccess: ({ projectId, name }) => { onSuccess: ({ projectId, name }) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: projectKeys.getWorkspacePkiSubscribers(projectId) queryKey: projectKeys.getProjectPkiSubscribers(projectId)
}); });
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: pkiSubscriberKeys.getPkiSubscriber({ queryKey: pkiSubscriberKeys.getPkiSubscriber({
@@ -46,7 +46,7 @@ export const useUpdatePkiSubscriber = () => {
}, },
onSuccess: ({ projectId, name }) => { onSuccess: ({ projectId, name }) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: projectKeys.getWorkspacePkiSubscribers(projectId) queryKey: projectKeys.getProjectPkiSubscribers(projectId)
}); });
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: pkiSubscriberKeys.getPkiSubscriber({ queryKey: pkiSubscriberKeys.getPkiSubscriber({
@@ -74,7 +74,7 @@ export const useDeletePkiSubscriber = () => {
}, },
onSuccess: ({ name, projectId }) => { onSuccess: ({ name, projectId }) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: projectKeys.getWorkspacePkiSubscribers(projectId) queryKey: projectKeys.getProjectPkiSubscribers(projectId)
}); });
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: pkiSubscriberKeys.getPkiSubscriber({ queryKey: pkiSubscriberKeys.getPkiSubscriber({
@@ -1,6 +1,6 @@
import { TProjectRole } from "@app/hooks/api/roles/types"; import { TProjectRole } from "@app/hooks/api/roles/types";
import { ProjectType } from "../workspace/types"; import { ProjectType } from "../projects/types";
export type TProjectTemplate = { export type TProjectTemplate = {
id: string; id: string;
@@ -18,7 +18,7 @@ export {
useGetProjectSshConfig, useGetProjectSshConfig,
useGetUpgradeProjectStatus, useGetUpgradeProjectStatus,
useGetUserWorkspaceMemberships, useGetUserWorkspaceMemberships,
useGetUserWorkspaces, useGetUserProjects,
useGetWorkspaceAuthorizations, useGetWorkspaceAuthorizations,
useGetWorkspaceById, useGetWorkspaceById,
useGetWorkspaceIdentityMembershipDetails, useGetWorkspaceIdentityMembershipDetails,
@@ -41,7 +41,6 @@ export {
useListWorkspaceSshHostGroups, useListWorkspaceSshHostGroups,
useListWorkspaceSshHosts, useListWorkspaceSshHosts,
useSearchProjects, useSearchProjects,
useToggleAutoCapitalization,
useUpdateIdentityWorkspaceRole, useUpdateIdentityWorkspaceRole,
useUpdateProject, useUpdateProject,
useUpdateUserWorkspaceRole, useUpdateUserWorkspaceRole,
@@ -32,7 +32,7 @@ export const useAddGroupToWorkspace = () => {
}, },
onSuccess: (_, { projectId }) => { onSuccess: (_, { projectId }) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: projectKeys.getWorkspaceGroupMemberships(projectId) queryKey: projectKeys.getProjectGroupMemberships(projectId)
}); });
} }
}); });
@@ -52,10 +52,10 @@ export const useUpdateGroupWorkspaceRole = () => {
}, },
onSuccess: (_, { projectId, groupId }) => { onSuccess: (_, { projectId, groupId }) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: projectKeys.getWorkspaceGroupMemberships(projectId) queryKey: projectKeys.getProjectGroupMemberships(projectId)
}); });
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: projectKeys.getWorkspaceGroupMembershipDetails(projectId, groupId) queryKey: projectKeys.getProjectGroupMembershipDetails(projectId, groupId)
}); });
} }
}); });
@@ -79,7 +79,7 @@ export const useDeleteGroupFromWorkspace = () => {
}, },
onSuccess: (_, { projectId, username }) => { onSuccess: (_, { projectId, username }) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: projectKeys.getWorkspaceGroupMemberships(projectId) queryKey: projectKeys.getProjectGroupMemberships(projectId)
}); });
if (username) { if (username) {
@@ -96,7 +96,7 @@ export const useLeaveProject = () => {
return apiRequest.delete(`/api/v1/projects/${projectId}/leave`); return apiRequest.delete(`/api/v1/projects/${projectId}/leave`);
}, },
onSuccess: () => { onSuccess: () => {
queryClient.invalidateQueries({ queryKey: projectKeys.getAllUserWorkspace() }); queryClient.invalidateQueries({ queryKey: projectKeys.getAllUserProjects() });
} }
}); });
}; };
@@ -109,7 +109,7 @@ export const useMigrateProjectToV3 = () => {
}, },
onSuccess: () => { onSuccess: () => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: projectKeys.getAllUserWorkspace() queryKey: projectKeys.getAllUserProjects()
}); });
} }
}); });
@@ -35,21 +35,18 @@ import {
ProjectType, ProjectType,
TGetUpgradeProjectStatusDTO, TGetUpgradeProjectStatusDTO,
TListProjectIdentitiesDTO, TListProjectIdentitiesDTO,
ToggleAutoCapitalizationDTO,
ToggleDeleteProjectProtectionDTO,
TProjectSshConfig, TProjectSshConfig,
TSearchProjectsDTO, TSearchProjectsDTO,
TUpdateWorkspaceIdentityRoleDTO, TUpdateWorkspaceIdentityRoleDTO,
TUpdateWorkspaceUserRoleDTO, TUpdateWorkspaceUserRoleDTO,
UpdateAuditLogsRetentionDTO, UpdateAuditLogsRetentionDTO,
UpdateEnvironmentDTO, UpdateEnvironmentDTO,
UpdatePitVersionLimitDTO,
UpdateProjectDTO, UpdateProjectDTO,
Project, Project,
WorkspaceEnv ProjectEnv
} from "./types"; } from "./types";
export const fetchWorkspaceById = async (projectId: string) => { export const fetchProjectById = async (projectId: string) => {
const { data } = await apiRequest.get<{ project: Project }>(`/api/v1/projects/${projectId}`); const { data } = await apiRequest.get<{ project: Project }>(`/api/v1/projects/${projectId}`);
return data.project; return data.project;
@@ -82,7 +79,7 @@ export const useUpgradeProject = () => {
}, },
onSuccess: () => { onSuccess: () => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: projectKeys.getAllUserWorkspace() queryKey: projectKeys.getAllUserProjects()
}); });
} }
}); });
@@ -113,7 +110,7 @@ const fetchUserWorkspaces = async (includeRoles?: boolean, type?: ProjectType |
export const useGetWorkspaceIndexStatus = (projectId: string) => { export const useGetWorkspaceIndexStatus = (projectId: string) => {
return useQuery({ return useQuery({
queryKey: projectKeys.getWorkspaceIndexStatus(projectId), queryKey: projectKeys.getProjectIndexStatus(projectId),
queryFn: () => fetchWorkspaceIndexStatus(projectId), queryFn: () => fetchWorkspaceIndexStatus(projectId),
enabled: true enabled: true
}); });
@@ -124,14 +121,14 @@ export const useGetWorkspaceById = (
dto?: { refetchInterval?: number | false } dto?: { refetchInterval?: number | false }
) => { ) => {
return useQuery({ return useQuery({
queryKey: projectKeys.getWorkspaceById(projectId), queryKey: projectKeys.getProjectById(projectId),
queryFn: () => fetchWorkspaceById(projectId), queryFn: () => fetchProjectById(projectId),
enabled: Boolean(projectId), enabled: Boolean(projectId),
refetchInterval: dto?.refetchInterval refetchInterval: dto?.refetchInterval
}); });
}; };
export const useGetUserWorkspaces = ({ export const useGetUserProjects = ({
includeRoles, includeRoles,
options = {} options = {}
}: { }: {
@@ -139,14 +136,14 @@ export const useGetUserWorkspaces = ({
options?: { enabled?: boolean }; options?: { enabled?: boolean };
} = {}) => } = {}) =>
useQuery({ useQuery({
queryKey: projectKeys.getAllUserWorkspace(), queryKey: projectKeys.getAllUserProjects(),
queryFn: () => fetchUserWorkspaces(includeRoles), queryFn: () => fetchUserWorkspaces(includeRoles),
...options ...options
}); });
export const useSearchProjects = ({ options, ...dto }: TSearchProjectsDTO) => export const useSearchProjects = ({ options, ...dto }: TSearchProjectsDTO) =>
useQuery({ useQuery({
queryKey: projectKeys.searchWorkspace(dto), queryKey: projectKeys.searchProject(dto),
queryFn: async () => { queryFn: async () => {
const { data } = await apiRequest.post<{ const { data } = await apiRequest.post<{
projects: (Project & { isMember: boolean })[]; projects: (Project & { isMember: boolean })[];
@@ -169,7 +166,7 @@ const fetchUserWorkspaceMemberships = async (orgId: string) => {
// to get all userids in an org with the project they are part of // to get all userids in an org with the project they are part of
export const useGetUserWorkspaceMemberships = (orgId: string) => export const useGetUserWorkspaceMemberships = (orgId: string) =>
useQuery({ useQuery({
queryKey: projectKeys.getWorkspaceMemberships(orgId), queryKey: projectKeys.getProjectMemberships(orgId),
queryFn: () => fetchUserWorkspaceMemberships(orgId), queryFn: () => fetchUserWorkspaceMemberships(orgId),
enabled: Boolean(orgId) enabled: Boolean(orgId)
}); });
@@ -187,7 +184,7 @@ export const useGetWorkspaceAuthorizations = <TData = IntegrationAuth[],>(
select?: (data: IntegrationAuth[]) => TData select?: (data: IntegrationAuth[]) => TData
) => ) =>
useQuery({ useQuery({
queryKey: projectKeys.getWorkspaceAuthorization(projectId), queryKey: projectKeys.getProjectAuthorization(projectId),
queryFn: () => fetchWorkspaceAuthorization(projectId), queryFn: () => fetchWorkspaceAuthorization(projectId),
enabled: Boolean(projectId), enabled: Boolean(projectId),
select select
@@ -202,7 +199,7 @@ export const fetchWorkspaceIntegrations = async (projectId: string) => {
export const useGetWorkspaceIntegrations = (projectId: string) => export const useGetWorkspaceIntegrations = (projectId: string) =>
useQuery({ useQuery({
queryKey: projectKeys.getWorkspaceIntegrations(projectId), queryKey: projectKeys.getProjectIntegrations(projectId),
queryFn: () => fetchWorkspaceIntegrations(projectId), queryFn: () => fetchWorkspaceIntegrations(projectId),
enabled: Boolean(projectId), enabled: Boolean(projectId),
refetchInterval: 4000 refetchInterval: 4000
@@ -228,7 +225,7 @@ export const useCreateWorkspace = () => {
}), }),
onSuccess: () => { onSuccess: () => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: projectKeys.getAllUserWorkspace() queryKey: projectKeys.getAllUserProjects()
}); });
} }
}); });
@@ -239,8 +236,9 @@ export const useUpdateProject = () => {
return useMutation<Project, object, UpdateProjectDTO>({ return useMutation<Project, object, UpdateProjectDTO>({
mutationFn: async ({ mutationFn: async ({
projectID, projectId: projectID,
newProjectName, newProjectName,
hasDeleteProtection,
newProjectDescription, newProjectDescription,
newSlug, newSlug,
secretSharing, secretSharing,
@@ -259,67 +257,14 @@ export const useUpdateProject = () => {
showSnapshotsLegacy, showSnapshotsLegacy,
secretDetectionIgnoreValues, secretDetectionIgnoreValues,
autoCapitalization, autoCapitalization,
pitVersionLimit pitVersionLimit,
hasDeleteProtection
} }
); );
return data.project; return data.project;
}, },
onSuccess: () => { onSuccess: () => {
queryClient.invalidateQueries({ queryKey: projectKeys.getAllUserWorkspace() }); queryClient.invalidateQueries({ queryKey: projectKeys.getAllUserProjects() });
}
});
};
export const useToggleAutoCapitalization = () => {
const queryClient = useQueryClient();
return useMutation<Project, object, ToggleAutoCapitalizationDTO>({
mutationFn: async ({ projectID, state }) => {
const { data } = await apiRequest.post<{ project: Project }>(
`/api/v1/projects/${projectID}/auto-capitalization`,
{
autoCapitalization: state
}
);
return data.project;
},
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: projectKeys.getAllUserWorkspace() });
}
});
};
export const useToggleDeleteProjectProtection = () => {
const queryClient = useQueryClient();
return useMutation<Project, object, ToggleDeleteProjectProtectionDTO>({
mutationFn: async ({ projectID, state }) => {
const { data } = await apiRequest.post<{ project: Project }>(
`/api/v1/projects/${projectID}/delete-protection`,
{
hasDeleteProtection: state
}
);
return data.project;
},
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: projectKeys.getAllUserWorkspace() });
}
});
};
export const useUpdateWorkspaceVersionLimit = () => {
const queryClient = useQueryClient();
return useMutation<Project, object, UpdatePitVersionLimitDTO>({
mutationFn: async ({ projectSlug, pitVersionLimit }) => {
const { data } = await apiRequest.put(`/api/v1/projects/${projectSlug}/version-limit`, {
pitVersionLimit
});
return data.project;
},
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: projectKeys.getAllUserWorkspace() });
} }
}); });
}; };
@@ -338,7 +283,7 @@ export const useUpdateWorkspaceAuditLogsRetention = () => {
return data.project; return data.project;
}, },
onSuccess: () => { onSuccess: () => {
queryClient.invalidateQueries({ queryKey: projectKeys.getAllUserWorkspace() }); queryClient.invalidateQueries({ queryKey: projectKeys.getAllUserProjects() });
} }
}); });
}; };
@@ -352,7 +297,7 @@ export const useDeleteWorkspace = () => {
return data.project; return data.project;
}, },
onSuccess: () => { onSuccess: () => {
queryClient.invalidateQueries({ queryKey: projectKeys.getAllUserWorkspace() }); queryClient.invalidateQueries({ queryKey: projectKeys.getAllUserProjects() });
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: ["org-admin-projects"] queryKey: ["org-admin-projects"]
}); });
@@ -363,9 +308,9 @@ export const useDeleteWorkspace = () => {
export const useCreateWsEnvironment = () => { export const useCreateWsEnvironment = () => {
const queryClient = useQueryClient(); const queryClient = useQueryClient();
return useMutation<WorkspaceEnv, WorkspaceEnv, CreateEnvironmentDTO>({ return useMutation<ProjectEnv, ProjectEnv, CreateEnvironmentDTO>({
mutationFn: async ({ projectId, name, slug }) => { mutationFn: async ({ projectId, name, slug }) => {
const { data } = await apiRequest.post<{ environment: WorkspaceEnv }>( const { data } = await apiRequest.post<{ environment: ProjectEnv }>(
`/api/v1/projects/${projectId}/environments`, `/api/v1/projects/${projectId}/environments`,
{ {
name, name,
@@ -376,7 +321,7 @@ export const useCreateWsEnvironment = () => {
}, },
onSuccess: () => { onSuccess: () => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: projectKeys.getAllUserWorkspace() queryKey: projectKeys.getAllUserProjects()
}); });
} }
}); });
@@ -395,7 +340,7 @@ export const useUpdateWsEnvironment = () => {
}, },
onSuccess: () => { onSuccess: () => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: projectKeys.getAllUserWorkspace() queryKey: projectKeys.getAllUserProjects()
}); });
} }
}); });
@@ -410,7 +355,7 @@ export const useDeleteWsEnvironment = () => {
}, },
onSuccess: () => { onSuccess: () => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: projectKeys.getAllUserWorkspace() queryKey: projectKeys.getAllUserProjects()
}); });
} }
}); });
@@ -422,7 +367,7 @@ export const useGetWorkspaceUsers = (
roles?: string[] roles?: string[]
) => { ) => {
return useQuery({ return useQuery({
queryKey: projectKeys.getWorkspaceUsers(projectId, includeGroupMembers, roles), queryKey: projectKeys.getProjectUsers(projectId, includeGroupMembers, roles),
queryFn: async () => { queryFn: async () => {
const { const {
data: { users } data: { users }
@@ -443,7 +388,7 @@ export const useGetWorkspaceUsers = (
export const useGetWorkspaceUserDetails = (projectId: string, membershipId: string) => { export const useGetWorkspaceUserDetails = (projectId: string, membershipId: string) => {
return useQuery({ return useQuery({
queryKey: projectKeys.getWorkspaceUserDetails(projectId, membershipId), queryKey: projectKeys.getProjectUserDetails(projectId, membershipId),
queryFn: async () => { queryFn: async () => {
const { const {
data: { membership } data: { membership }
@@ -476,7 +421,7 @@ export const useDeleteUserFromWorkspace = () => {
return deletedMembership; return deletedMembership;
}, },
onSuccess: (_, { orgId, projectId }) => { onSuccess: (_, { orgId, projectId }) => {
queryClient.invalidateQueries({ queryKey: projectKeys.getWorkspaceUsers(projectId) }); queryClient.invalidateQueries({ queryKey: projectKeys.getProjectUsers(projectId) });
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: userKeys.allOrgMembershipProjectMemberships(orgId) queryKey: userKeys.allOrgMembershipProjectMemberships(orgId)
}); });
@@ -499,9 +444,9 @@ export const useUpdateUserWorkspaceRole = () => {
return membership; return membership;
}, },
onSuccess: (_, { projectId, membershipId }) => { onSuccess: (_, { projectId, membershipId }) => {
queryClient.invalidateQueries({ queryKey: projectKeys.getWorkspaceUsers(projectId) }); queryClient.invalidateQueries({ queryKey: projectKeys.getProjectUsers(projectId) });
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: projectKeys.getWorkspaceUserDetails(projectId, membershipId) queryKey: projectKeys.getProjectUserDetails(projectId, membershipId)
}); });
} }
}); });
@@ -532,7 +477,7 @@ export const useAddIdentityToWorkspace = () => {
}, },
onSuccess: (_, { identityId, projectId }) => { onSuccess: (_, { identityId, projectId }) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: projectKeys.getWorkspaceIdentityMemberships(projectId) queryKey: projectKeys.getProjectIdentityMemberships(projectId)
}); });
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: identitiesKeys.getIdentityProjectMemberships(identityId) queryKey: identitiesKeys.getIdentityProjectMemberships(identityId)
@@ -558,13 +503,13 @@ export const useUpdateIdentityWorkspaceRole = () => {
}, },
onSuccess: (_, { identityId, projectId }) => { onSuccess: (_, { identityId, projectId }) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: projectKeys.getWorkspaceIdentityMemberships(projectId) queryKey: projectKeys.getProjectIdentityMemberships(projectId)
}); });
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: identitiesKeys.getIdentityProjectMemberships(identityId) queryKey: identitiesKeys.getIdentityProjectMemberships(identityId)
}); });
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: projectKeys.getWorkspaceIdentityMembershipDetails(projectId, identityId) queryKey: projectKeys.getProjectIdentityMembershipDetails(projectId, identityId)
}); });
} }
}); });
@@ -583,7 +528,7 @@ export const useDeleteIdentityFromWorkspace = () => {
}, },
onSuccess: (_, { identityId, projectId }) => { onSuccess: (_, { identityId, projectId }) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: projectKeys.getWorkspaceIdentityMemberships(projectId) queryKey: projectKeys.getProjectIdentityMemberships(projectId)
}); });
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: identitiesKeys.getIdentityProjectMemberships(identityId) queryKey: identitiesKeys.getIdentityProjectMemberships(identityId)
@@ -606,13 +551,13 @@ export const useGetWorkspaceIdentityMemberships = (
TProjectIdentitiesList, TProjectIdentitiesList,
unknown, unknown,
TProjectIdentitiesList, TProjectIdentitiesList,
ReturnType<typeof projectKeys.getWorkspaceIdentityMembershipsWithParams> ReturnType<typeof projectKeys.getProjectIdentityMembershipsWithParams>
>, >,
"queryKey" | "queryFn" "queryKey" | "queryFn"
> >
) => { ) => {
return useQuery({ return useQuery({
queryKey: projectKeys.getWorkspaceIdentityMembershipsWithParams({ queryKey: projectKeys.getProjectIdentityMembershipsWithParams({
projectId, projectId,
offset, offset,
limit, limit,
@@ -643,7 +588,7 @@ export const useGetWorkspaceIdentityMemberships = (
export const useGetWorkspaceIdentityMembershipDetails = (projectId: string, identityId: string) => { export const useGetWorkspaceIdentityMembershipDetails = (projectId: string, identityId: string) => {
return useQuery({ return useQuery({
enabled: Boolean(projectId && identityId), enabled: Boolean(projectId && identityId),
queryKey: projectKeys.getWorkspaceIdentityMembershipDetails(projectId, identityId), queryKey: projectKeys.getProjectIdentityMembershipDetails(projectId, identityId),
queryFn: async () => { queryFn: async () => {
const { const {
data: { identityMembership } data: { identityMembership }
@@ -658,7 +603,7 @@ export const useGetWorkspaceIdentityMembershipDetails = (projectId: string, iden
export const useGetWorkspaceGroupMembershipDetails = (projectId: string, groupId: string) => { export const useGetWorkspaceGroupMembershipDetails = (projectId: string, groupId: string) => {
return useQuery({ return useQuery({
enabled: Boolean(projectId && groupId), enabled: Boolean(projectId && groupId),
queryKey: projectKeys.getWorkspaceGroupMembershipDetails(projectId, groupId), queryKey: projectKeys.getProjectGroupMembershipDetails(projectId, groupId),
queryFn: async () => { queryFn: async () => {
const { const {
data: { groupMembership } data: { groupMembership }
@@ -672,7 +617,7 @@ export const useGetWorkspaceGroupMembershipDetails = (projectId: string, groupId
export const useListWorkspaceGroups = (projectId: string) => { export const useListWorkspaceGroups = (projectId: string) => {
return useQuery({ return useQuery({
queryKey: projectKeys.getWorkspaceGroupMemberships(projectId), queryKey: projectKeys.getProjectGroupMemberships(projectId),
queryFn: async () => { queryFn: async () => {
const { const {
data: { groupMemberships } data: { groupMemberships }
@@ -693,7 +638,7 @@ export const useListWorkspaceCas = ({
status?: CaStatus; status?: CaStatus;
}) => { }) => {
return useQuery({ return useQuery({
queryKey: projectKeys.specificWorkspaceCas({ queryKey: projectKeys.specificProjectCas({
projectId, projectId,
status status
}), }),
@@ -726,7 +671,7 @@ export const useListWorkspaceCertificates = ({
limit: number; limit: number;
}) => { }) => {
return useQuery({ return useQuery({
queryKey: projectKeys.specificWorkspaceCertificates({ queryKey: projectKeys.specificProjectCertificates({
projectId, projectId,
offset, offset,
limit limit
@@ -754,7 +699,7 @@ export const useListWorkspaceCertificates = ({
export const useListWorkspacePkiAlerts = ({ projectId }: { projectId: string }) => { export const useListWorkspacePkiAlerts = ({ projectId }: { projectId: string }) => {
return useQuery({ return useQuery({
queryKey: projectKeys.getWorkspacePkiAlerts(projectId), queryKey: projectKeys.getProjectPkiAlerts(projectId),
queryFn: async () => { queryFn: async () => {
const { const {
data: { alerts } data: { alerts }
@@ -768,7 +713,7 @@ export const useListWorkspacePkiAlerts = ({ projectId }: { projectId: string })
export const useListWorkspacePkiCollections = ({ projectId }: { projectId: string }) => { export const useListWorkspacePkiCollections = ({ projectId }: { projectId: string }) => {
return useQuery({ return useQuery({
queryKey: projectKeys.getWorkspacePkiCollections(projectId), queryKey: projectKeys.getProjectPkiCollections(projectId),
queryFn: async () => { queryFn: async () => {
const { const {
data: { collections } data: { collections }
@@ -784,7 +729,7 @@ export const useListWorkspacePkiCollections = ({ projectId }: { projectId: strin
export const useListWorkspaceCertificateTemplates = ({ projectId }: { projectId: string }) => { export const useListWorkspaceCertificateTemplates = ({ projectId }: { projectId: string }) => {
return useQuery({ return useQuery({
queryKey: projectKeys.getWorkspaceCertificateTemplates(projectId), queryKey: projectKeys.getProjectCertificateTemplates(projectId),
queryFn: async () => { queryFn: async () => {
const { const {
data: { certificateTemplates } data: { certificateTemplates }
@@ -808,7 +753,7 @@ export const useListWorkspaceSshCertificates = ({
projectId: string; projectId: string;
}) => { }) => {
return useQuery({ return useQuery({
queryKey: projectKeys.specificWorkspaceSshCertificates({ queryKey: projectKeys.specificProjectSshCertificates({
offset, offset,
limit, limit,
projectId projectId
@@ -833,7 +778,7 @@ export const useListWorkspaceSshCertificates = ({
export const useListWorkspaceSshCas = (projectId: string) => { export const useListWorkspaceSshCas = (projectId: string) => {
return useQuery({ return useQuery({
queryKey: projectKeys.getWorkspaceSshCas(projectId), queryKey: projectKeys.getProjectSshCas(projectId),
queryFn: async () => { queryFn: async () => {
const { const {
data: { cas } data: { cas }
@@ -848,7 +793,7 @@ export const useListWorkspaceSshCas = (projectId: string) => {
export const useListWorkspaceSshHosts = (projectId: string) => { export const useListWorkspaceSshHosts = (projectId: string) => {
return useQuery({ return useQuery({
queryKey: projectKeys.getWorkspaceSshHosts(projectId), queryKey: projectKeys.getProjectSshHosts(projectId),
queryFn: async () => { queryFn: async () => {
const { const {
data: { hosts } data: { hosts }
@@ -861,7 +806,7 @@ export const useListWorkspaceSshHosts = (projectId: string) => {
export const useListWorkspacePkiSubscribers = (projectId: string) => { export const useListWorkspacePkiSubscribers = (projectId: string) => {
return useQuery({ return useQuery({
queryKey: projectKeys.getWorkspacePkiSubscribers(projectId), queryKey: projectKeys.getProjectPkiSubscribers(projectId),
queryFn: async () => { queryFn: async () => {
const { const {
data: { subscribers } data: { subscribers }
@@ -876,7 +821,7 @@ export const useListWorkspacePkiSubscribers = (projectId: string) => {
export const useListWorkspaceSshHostGroups = (projectId: string) => { export const useListWorkspaceSshHostGroups = (projectId: string) => {
return useQuery({ return useQuery({
queryKey: projectKeys.getWorkspaceSshHostGroups(projectId), queryKey: projectKeys.getProjectSshHostGroups(projectId),
queryFn: async () => { queryFn: async () => {
const { const {
data: { groups } data: { groups }
@@ -891,7 +836,7 @@ export const useListWorkspaceSshHostGroups = (projectId: string) => {
export const useListWorkspaceSshCertificateTemplates = (projectId: string) => { export const useListWorkspaceSshCertificateTemplates = (projectId: string) => {
return useQuery({ return useQuery({
queryKey: projectKeys.getWorkspaceSshCertificateTemplates(projectId), queryKey: projectKeys.getProjectSshCertificateTemplates(projectId),
queryFn: async () => { queryFn: async () => {
const { data } = await apiRequest.get<{ certificateTemplates: TSshCertificateTemplate[] }>( const { data } = await apiRequest.get<{ certificateTemplates: TSshCertificateTemplate[] }>(
`/api/v1/projects/${projectId}/ssh-certificate-templates` `/api/v1/projects/${projectId}/ssh-certificate-templates`
@@ -910,7 +855,7 @@ export const useGetWorkspaceWorkflowIntegrationConfig = ({
integration: WorkflowIntegrationPlatform; integration: WorkflowIntegrationPlatform;
}) => { }) => {
return useQuery({ return useQuery({
queryKey: projectKeys.getWorkspaceWorkflowIntegrationConfig(projectId, integration), queryKey: projectKeys.getProjectWorkflowIntegrationConfig(projectId, integration),
queryFn: async () => { queryFn: async () => {
const { data } = await apiRequest const { data } = await apiRequest
.get<ProjectWorkflowIntegrationConfig>( .get<ProjectWorkflowIntegrationConfig>(
@@ -0,0 +1,78 @@
import { TListProjectIdentitiesDTO, TSearchProjectsDTO } from "./types";
import type { CaStatus } from "../ca";
import { WorkflowIntegrationPlatform } from "../workflowIntegrations/types";
export const projectKeys = {
getProjectById: (projectId: string) => ["projects", { projectId }] as const,
getProjectSecrets: (projectId: string) => [{ projectId }, "project-secrets"] as const,
getProjectIndexStatus: (projectId: string) => [{ projectId }, "project-index-status"] as const,
getProjectUpgradeStatus: (projectId: string) => [{ projectId }, "project-upgrade-status"],
getProjectMemberships: (orgId: string) => [{ orgId }, "project-memberships"],
getProjectAuthorization: (projectId: string) => [{ projectId }, "project-authorizations"],
getProjectIntegrations: (projectId: string) => [{ projectId }, "project-integrations"],
getAllUserProjects: () => ["projects"] as const,
getProjectAuditLogs: (projectId: string) => [{ projectId }, "project-audit-logs"] as const,
getProjectUsers: (
projectId: string,
includeGroupMembers: boolean = false,
roles: string[] = []
) => [{ projectId, includeGroupMembers, roles }, "project-users"] as const,
getProjectUserDetails: (projectId: string, membershipId: string) =>
[{ projectId, membershipId }, "project-user-details"] as const,
getProjectIdentityMemberships: (projectId: string) =>
[{ projectId }, "project-identity-memberships"] as const,
getProjectIdentityMembershipDetails: (projectId: string, identityId: string) =>
[{ projectId, identityId }, "project-identity-membership-details"] as const,
// allows invalidation using above key without knowing params
getProjectIdentityMembershipsWithParams: ({ projectId, ...params }: TListProjectIdentitiesDTO) =>
[...projectKeys.getProjectIdentityMemberships(projectId), params] as const,
searchProject: (dto: TSearchProjectsDTO) => ["search-projects", dto] as const,
getProjectGroupMemberships: (projectId: string) => [{ projectId }, "project-groups"] as const,
getProjectGroupMembershipDetails: (projectId: string, groupId: string) =>
[{ projectId, groupId }, "project-group-membership-details"] as const,
getProjectCas: ({ projectId }: { projectId: string }) => [{ projectId }, "project-cas"] as const,
specificProjectCas: ({ projectId, status }: { projectId: string; status?: CaStatus }) =>
[...projectKeys.getProjectCas({ projectId }), { status }] as const,
allProjectCertificates: () => ["project-certificates"] as const,
forProjectCertificates: (projectId: string) =>
[...projectKeys.allProjectCertificates(), projectId] as const,
specificProjectCertificates: ({
projectId,
offset,
limit
}: {
projectId: string;
offset: number;
limit: number;
}) => [...projectKeys.forProjectCertificates(projectId), { offset, limit }] as const,
getProjectPkiAlerts: (projectId: string) => [{ projectId }, "project-pki-alerts"] as const,
getProjectPkiSubscribers: (projectId: string) =>
[{ projectId }, "project-pki-subscribers"] as const,
getProjectPkiCollections: (projectId: string) =>
[{ projectId }, "project-pki-collections"] as const,
getProjectCertificateTemplates: (projectId: string) =>
[{ projectId }, "project-certificate-templates"] as const,
getProjectWorkflowIntegrationConfig: (
projectId: string,
integration: WorkflowIntegrationPlatform
) => [{ projectId, integration }, "project-workflow-integration-config"] as const,
getProjectSshCas: (projectId: string) => [{ projectId }, "project-ssh-cas"] as const,
allProjectSshCertificates: (projectId: string) =>
[{ projectId }, "project-ssh-certificates"] as const,
getProjectSshHosts: (projectId: string) => [{ projectId }, "project-ssh-hosts"] as const,
getProjectSshHostGroups: (projectId: string) =>
[{ projectId }, "project-ssh-host-groups"] as const,
specificProjectSshCertificates: ({
offset,
limit,
projectId
}: {
offset: number;
limit: number;
projectId: string;
}) => [...projectKeys.allProjectSshCertificates(projectId), { offset, limit }] as const,
getProjectSshCertificateTemplates: (projectId: string) =>
[{ projectId }, "project-ssh-certificate-templates"] as const,
getProjectSshConfig: (projectId: string) => [{ projectId }, "project-ssh-config"] as const
};
@@ -31,7 +31,7 @@ export type Project = {
upgradeStatus: string | null; upgradeStatus: string | null;
updatedAt: string; updatedAt: string;
autoCapitalization: boolean; autoCapitalization: boolean;
environments: WorkspaceEnv[]; environments: ProjectEnv[];
pitVersionLimit: number; pitVersionLimit: number;
auditLogsRetentionDays: number; auditLogsRetentionDays: number;
slug: string; slug: string;
@@ -43,13 +43,13 @@ export type Project = {
secretDetectionIgnoreValues: string[]; secretDetectionIgnoreValues: string[];
}; };
export type WorkspaceEnv = { export type ProjectEnv = {
id: string; id: string;
name: string; name: string;
slug: string; slug: string;
}; };
export type WorkspaceTag = { id: string; name: string; slug: string }; export type ProjectTag = { id: string; name: string; slug: string };
export type NameWorkspaceSecretsDTO = { export type NameWorkspaceSecretsDTO = {
projectId: string; projectId: string;
@@ -76,7 +76,7 @@ export type CreateWorkspaceDTO = {
}; };
export type UpdateProjectDTO = { export type UpdateProjectDTO = {
projectID: string; projectId: string;
newProjectName?: string; newProjectName?: string;
newProjectDescription?: string; newProjectDescription?: string;
newSlug?: string; newSlug?: string;
@@ -85,6 +85,7 @@ export type UpdateProjectDTO = {
secretDetectionIgnoreValues?: string[]; secretDetectionIgnoreValues?: string[];
pitVersionLimit?: number; pitVersionLimit?: number;
autoCapitalization?: boolean; autoCapitalization?: boolean;
hasDeleteProtection?: boolean;
}; };
export type UpdatePitVersionLimitDTO = { projectSlug: string; pitVersionLimit: number }; export type UpdatePitVersionLimitDTO = { projectSlug: string; pitVersionLimit: number };
@@ -1,11 +1,11 @@
import { EnforcementLevel } from "../policies/enums"; import { EnforcementLevel } from "../policies/enums";
import { WorkspaceEnv } from "../workspace/types"; import { ProjectEnv } from "../projects/types";
export type TSecretApprovalPolicy = { export type TSecretApprovalPolicy = {
id: string; id: string;
project: string; project: string;
name: string; name: string;
environments: WorkspaceEnv[]; environments: ProjectEnv[];
secretPath?: string; secretPath?: string;
approvals: number; approvals: number;
approvers: Approver[]; approvers: Approver[];
@@ -1,4 +1,4 @@
import { WorkspaceEnv } from "@app/hooks/api/workspace/types"; import { ProjectEnv } from "@app/hooks/api/projects/types";
export enum ReservedFolders { export enum ReservedFolders {
SecretReplication = "__reserve_replication_" SecretReplication = "__reserve_replication_"
@@ -22,7 +22,7 @@ export type TSecretFolder = {
export type TSecretFolderWithPath = TSecretFolder & { path: string }; export type TSecretFolderWithPath = TSecretFolder & { path: string };
export type TProjectEnvironmentsFolders = { export type TProjectEnvironmentsFolders = {
[key: string]: WorkspaceEnv & { folders: TSecretFolderWithPath[] }; [key: string]: ProjectEnv & { folders: TSecretFolderWithPath[] };
}; };
export type TGetProjectFoldersDTO = { export type TGetProjectFoldersDTO = {
@@ -1,11 +1,11 @@
import { SecretV3Raw } from "../secrets/types"; import { SecretV3Raw } from "../secrets/types";
import { WorkspaceEnv } from "../workspace/types"; import { ProjectEnv } from "../projects/types";
export type TSecretImport = { export type TSecretImport = {
id: string; id: string;
folderId: string; folderId: string;
importPath: string; importPath: string;
importEnv: WorkspaceEnv; importEnv: ProjectEnv;
position: string; position: string;
createdAt: string; createdAt: string;
updatedAt: string; updatedAt: string;
@@ -25,7 +25,7 @@ export type TGetImportedFoldersByEnvDTO = {
export type TImportedSecrets = { export type TImportedSecrets = {
environment: string; environment: string;
environmentInfo: WorkspaceEnv; environmentInfo: ProjectEnv;
secretPath: string; secretPath: string;
folderId: string; folderId: string;
secrets: SecretV3Raw[]; secrets: SecretV3Raw[];
@@ -1,4 +1,4 @@
import { WorkspaceEnv } from "../workspace/types"; import { ProjectEnv } from "../projects/types";
export enum TProviderFunctionTypes { export enum TProviderFunctionTypes {
HTTP = "http", HTTP = "http",
@@ -80,7 +80,7 @@ export type TSecretRotation = {
customProvider: string; customProvider: string;
workspace: string; workspace: string;
envId: string; envId: string;
environment: WorkspaceEnv; environment: ProjectEnv;
secretPath: string; secretPath: string;
outputs: Array<{ outputs: Array<{
key: string; key: string;
@@ -1,5 +1,5 @@
import { SecretVersions } from "../secrets/types"; import { SecretVersions } from "../secrets/types";
import { WorkspaceEnv } from "../types"; import { ProjectEnv } from "../types";
export type TSecretSnapshot = { export type TSecretSnapshot = {
id: string; id: string;
@@ -13,7 +13,7 @@ export type TSnapshotData = Omit<TSecretSnapshot, "secretVersions"> & {
id: string; id: string;
secretVersions: (SecretVersions & { isRotatedSecret?: boolean })[]; secretVersions: (SecretVersions & { isRotatedSecret?: boolean })[];
folderVersion: Array<{ name: string; id: string }>; folderVersion: Array<{ name: string; id: string }>;
environment: WorkspaceEnv; environment: ProjectEnv;
}; };
export type TSnapshotDataProps = { export type TSnapshotDataProps = {
+4 -4
View File
@@ -333,11 +333,11 @@ export const useMoveSecrets = ({
mutationFn: async ({ mutationFn: async ({
sourceEnvironment, sourceEnvironment,
sourceSecretPath, sourceSecretPath,
projectSlug,
destinationEnvironment, destinationEnvironment,
destinationSecretPath, destinationSecretPath,
secretIds, secretIds,
shouldOverwrite shouldOverwrite,
projectId
}) => { }) => {
const { data } = await apiRequest.post<{ const { data } = await apiRequest.post<{
isSourceUpdated: boolean; isSourceUpdated: boolean;
@@ -345,11 +345,11 @@ export const useMoveSecrets = ({
}>("/api/v4/secrets/move", { }>("/api/v4/secrets/move", {
sourceEnvironment, sourceEnvironment,
sourceSecretPath, sourceSecretPath,
projectSlug,
destinationEnvironment, destinationEnvironment,
destinationSecretPath, destinationSecretPath,
secretIds, secretIds,
shouldOverwrite shouldOverwrite,
projectId
}); });
return data; return data;
-1
View File
@@ -227,7 +227,6 @@ export type TDeleteSecretBatchDTO = {
}; };
export type TMoveSecretsDTO = { export type TMoveSecretsDTO = {
projectSlug: string;
projectId: string; projectId: string;
sourceEnvironment: string; sourceEnvironment: string;
sourceSecretPath: string; sourceSecretPath: string;
+6 -6
View File
@@ -2,7 +2,7 @@ import { useMutation, useQueryClient } from "@tanstack/react-query";
import { apiRequest } from "@app/config/request"; import { apiRequest } from "@app/config/request";
import { projectKeys } from "../workspace/query-keys"; import { projectKeys } from "../projects/query-keys";
import { import {
TCreateSshCaDTO, TCreateSshCaDTO,
TDeleteSshCaDTO, TDeleteSshCaDTO,
@@ -28,7 +28,7 @@ export const useCreateSshCa = () => {
return ca; return ca;
}, },
onSuccess: ({ projectId }) => { onSuccess: ({ projectId }) => {
queryClient.invalidateQueries({ queryKey: projectKeys.getWorkspaceSshCas(projectId) }); queryClient.invalidateQueries({ queryKey: projectKeys.getProjectSshCas(projectId) });
} }
}); });
}; };
@@ -43,7 +43,7 @@ export const useUpdateSshCa = () => {
return ca; return ca;
}, },
onSuccess: ({ projectId }, { caId }) => { onSuccess: ({ projectId }, { caId }) => {
queryClient.invalidateQueries({ queryKey: projectKeys.getWorkspaceSshCas(projectId) }); queryClient.invalidateQueries({ queryKey: projectKeys.getProjectSshCas(projectId) });
queryClient.invalidateQueries({ queryKey: sshCaKeys.getSshCaById(caId) }); queryClient.invalidateQueries({ queryKey: sshCaKeys.getSshCaById(caId) });
} }
}); });
@@ -59,7 +59,7 @@ export const useDeleteSshCa = () => {
return ca; return ca;
}, },
onSuccess: ({ projectId }) => { onSuccess: ({ projectId }) => {
queryClient.invalidateQueries({ queryKey: projectKeys.getWorkspaceSshCas(projectId) }); queryClient.invalidateQueries({ queryKey: projectKeys.getProjectSshCas(projectId) });
} }
}); });
}; };
@@ -76,7 +76,7 @@ export const useSignSshKey = () => {
}, },
onSuccess: (_, { projectId }) => { onSuccess: (_, { projectId }) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: projectKeys.allWorkspaceSshCertificates(projectId) queryKey: projectKeys.allProjectSshCertificates(projectId)
}); });
} }
}); });
@@ -94,7 +94,7 @@ export const useIssueSshCreds = () => {
}, },
onSuccess: (_, { projectId }) => { onSuccess: (_, { projectId }) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: projectKeys.allWorkspaceSshCertificates(projectId) queryKey: projectKeys.allProjectSshCertificates(projectId)
}); });
} }
}); });
+4 -4
View File
@@ -2,7 +2,7 @@ import { useMutation, useQueryClient } from "@tanstack/react-query";
import { apiRequest } from "@app/config/request"; import { apiRequest } from "@app/config/request";
import { projectKeys } from "../workspace/query-keys"; import { projectKeys } from "../projects/query-keys";
import { TCreateSshHostDTO, TDeleteSshHostDTO, TSshHost, TUpdateSshHostDTO } from "./types"; import { TCreateSshHostDTO, TDeleteSshHostDTO, TSshHost, TUpdateSshHostDTO } from "./types";
export const useCreateSshHost = () => { export const useCreateSshHost = () => {
@@ -13,7 +13,7 @@ export const useCreateSshHost = () => {
return host; return host;
}, },
onSuccess: ({ projectId }) => { onSuccess: ({ projectId }) => {
queryClient.invalidateQueries({ queryKey: projectKeys.getWorkspaceSshHosts(projectId) }); queryClient.invalidateQueries({ queryKey: projectKeys.getProjectSshHosts(projectId) });
} }
}); });
}; };
@@ -26,7 +26,7 @@ export const useUpdateSshHost = () => {
return host; return host;
}, },
onSuccess: ({ projectId }) => { onSuccess: ({ projectId }) => {
queryClient.invalidateQueries({ queryKey: projectKeys.getWorkspaceSshHosts(projectId) }); queryClient.invalidateQueries({ queryKey: projectKeys.getProjectSshHosts(projectId) });
} }
}); });
}; };
@@ -39,7 +39,7 @@ export const useDeleteSshHost = () => {
return host; return host;
}, },
onSuccess: ({ projectId }) => { onSuccess: ({ projectId }) => {
queryClient.invalidateQueries({ queryKey: projectKeys.getWorkspaceSshHosts(projectId) }); queryClient.invalidateQueries({ queryKey: projectKeys.getProjectSshHosts(projectId) });
} }
}); });
}; };
@@ -2,7 +2,7 @@ import { useMutation, useQueryClient } from "@tanstack/react-query";
import { apiRequest } from "@app/config/request"; import { apiRequest } from "@app/config/request";
import { projectKeys } from "../workspace/query-keys"; import { projectKeys } from "../projects/query-keys";
import { sshHostGroupKeys } from "./queries"; import { sshHostGroupKeys } from "./queries";
import { import {
TCreateSshHostGroupDTO, TCreateSshHostGroupDTO,
@@ -20,7 +20,7 @@ export const useCreateSshHostGroup = () => {
}, },
onSuccess: ({ projectId, id }) => { onSuccess: ({ projectId, id }) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: projectKeys.getWorkspaceSshHostGroups(projectId) queryKey: projectKeys.getProjectSshHostGroups(projectId)
}); });
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: sshHostGroupKeys.getSshHostGroupById(id) queryKey: sshHostGroupKeys.getSshHostGroupById(id)
@@ -41,10 +41,10 @@ export const useUpdateSshHostGroup = () => {
}, },
onSuccess: ({ projectId }, { sshHostGroupId }) => { onSuccess: ({ projectId }, { sshHostGroupId }) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: projectKeys.getWorkspaceSshHostGroups(projectId) queryKey: projectKeys.getProjectSshHostGroups(projectId)
}); });
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: projectKeys.getWorkspaceSshHosts(projectId) queryKey: projectKeys.getProjectSshHosts(projectId)
}); });
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: sshHostGroupKeys.getSshHostGroupById(sshHostGroupId) queryKey: sshHostGroupKeys.getSshHostGroupById(sshHostGroupId)
@@ -64,10 +64,10 @@ export const useDeleteSshHostGroup = () => {
}, },
onSuccess: ({ projectId }, { sshHostGroupId }) => { onSuccess: ({ projectId }, { sshHostGroupId }) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: projectKeys.getWorkspaceSshHostGroups(projectId) queryKey: projectKeys.getProjectSshHostGroups(projectId)
}); });
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: projectKeys.getWorkspaceSshHosts(projectId) queryKey: projectKeys.getProjectSshHosts(projectId)
}); });
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: sshHostGroupKeys.getSshHostGroupById(sshHostGroupId) queryKey: sshHostGroupKeys.getSshHostGroupById(sshHostGroupId)
+1 -1
View File
@@ -28,7 +28,7 @@ export const useCreateWsTag = () => {
const queryClient = useQueryClient(); const queryClient = useQueryClient();
return useMutation<WsTag, object, CreateTagDTO>({ return useMutation<WsTag, object, CreateTagDTO>({
mutationFn: async ({ projectID, tagColor, tagSlug }) => { mutationFn: async ({ projectId: projectID, tagColor, tagSlug }) => {
const { data } = await apiRequest.post<{ projectTag: WsTag }>( const { data } = await apiRequest.post<{ projectTag: WsTag }>(
`/api/v1/projects/${projectID}/tags`, `/api/v1/projects/${projectID}/tags`,
{ {
+1 -1
View File
@@ -13,7 +13,7 @@ export type WsTag = {
export type WorkspaceTag = { id: string; name: string; slug: string }; export type WorkspaceTag = { id: string; name: string; slug: string };
export type CreateTagDTO = { export type CreateTagDTO = {
projectID: string; projectId: string;
tagSlug: string; tagSlug: string;
tagColor: string; tagColor: string;
}; };
+4 -4
View File
@@ -36,10 +36,10 @@ export type {
ToggleAutoCapitalizationDTO, ToggleAutoCapitalizationDTO,
UpdateEnvironmentDTO, UpdateEnvironmentDTO,
UpdateProjectDTO, UpdateProjectDTO,
Project as Workspace, Project,
WorkspaceEnv, ProjectEnv,
WorkspaceTag ProjectTag
} from "./workspace/types"; } from "./projects/types";
export enum ApiErrorTypes { export enum ApiErrorTypes {
ValidationError = "ValidationFailure", ValidationError = "ValidationFailure",
+2 -2
View File
@@ -2,7 +2,7 @@ import { useMutation, useQueryClient } from "@tanstack/react-query";
import { apiRequest } from "@app/config/request"; import { apiRequest } from "@app/config/request";
import { projectKeys } from "../workspace"; import { projectKeys } from "../projects";
import { userKeys } from "./query-keys"; import { userKeys } from "./query-keys";
import { AddUserToWsDTONonE2EE } from "./types"; import { AddUserToWsDTONonE2EE } from "./types";
@@ -18,7 +18,7 @@ export const useAddUserToWsNonE2EE = () => {
return data; return data;
}, },
onSuccess: (_, { orgId, projectId }) => { onSuccess: (_, { orgId, projectId }) => {
queryClient.invalidateQueries({ queryKey: projectKeys.getWorkspaceUsers(projectId) }); queryClient.invalidateQueries({ queryKey: projectKeys.getProjectUsers(projectId) });
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: userKeys.allOrgMembershipProjectMemberships(orgId) queryKey: userKeys.allOrgMembershipProjectMemberships(orgId)
}); });
+3 -3
View File
@@ -10,7 +10,7 @@ import { MfaMethod } from "../auth/types";
import { TGroupWithProjectMemberships } from "../groups/types"; import { TGroupWithProjectMemberships } from "../groups/types";
import { setAuthToken } from "../reactQuery"; import { setAuthToken } from "../reactQuery";
import { subscriptionQueryKeys } from "../subscriptions/queries"; import { subscriptionQueryKeys } from "../subscriptions/queries";
import { workspaceKeys } from "../workspace"; import { projectKeys } from "../projects";
import { userKeys } from "./query-keys"; import { userKeys } from "./query-keys";
import { import {
AddUserToOrgDTO, AddUserToOrgDTO,
@@ -197,10 +197,10 @@ export const useAddUsersToOrg = () => {
projects?.forEach((project) => { projects?.forEach((project) => {
if (project.slug) { if (project.slug) {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: workspaceKeys.getWorkspaceGroupMemberships(project.slug) queryKey: projectKeys.getProjectGroupMemberships(project.slug)
}); });
} }
queryClient.invalidateQueries({ queryKey: workspaceKeys.getWorkspaceUsers(project.id) }); queryClient.invalidateQueries({ queryKey: projectKeys.getProjectUsers(project.id) });
}); });
} }
}); });
+1 -1
View File
@@ -1,5 +1,5 @@
import { MfaMethod } from "../auth/types"; import { MfaMethod } from "../auth/types";
import { ProjectType, ProjectUserMembershipTemporaryMode } from "../workspace/types"; import { ProjectType, ProjectUserMembershipTemporaryMode } from "../projects/types";
export enum AuthMethod { export enum AuthMethod {
EMAIL = "email", EMAIL = "email",
@@ -2,7 +2,7 @@ import { useMutation, useQueryClient } from "@tanstack/react-query";
import { apiRequest } from "@app/config/request"; import { apiRequest } from "@app/config/request";
import { projectKeys } from "../workspace/query-keys"; import { projectKeys } from "../projects/query-keys";
import { workflowIntegrationKeys } from "./queries"; import { workflowIntegrationKeys } from "./queries";
import { import {
TCheckMicrosoftTeamsIntegrationInstallationStatusDTO, TCheckMicrosoftTeamsIntegrationInstallationStatusDTO,
@@ -126,7 +126,7 @@ export const useUpdateProjectWorkflowIntegrationConfig = () => {
}, },
onSuccess: (_, { projectId: workspaceId, integration }) => { onSuccess: (_, { projectId: workspaceId, integration }) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: projectKeys.getWorkspaceWorkflowIntegrationConfig(workspaceId, integration) queryKey: projectKeys.getProjectWorkflowIntegrationConfig(workspaceId, integration)
}); });
} }
}); });
@@ -145,7 +145,7 @@ export const useDeleteProjectWorkflowIntegration = () => {
}, },
onSuccess: (_, { projectId, integration }) => { onSuccess: (_, { projectId, integration }) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: projectKeys.getWorkspaceWorkflowIntegrationConfig(projectId, integration) queryKey: projectKeys.getProjectWorkflowIntegrationConfig(projectId, integration)
}); });
} }
}); });
@@ -1,82 +0,0 @@
import { TListProjectIdentitiesDTO, TSearchProjectsDTO } from "@app/hooks/api/workspace/types";
import type { CaStatus } from "../ca";
import { WorkflowIntegrationPlatform } from "../workflowIntegrations/types";
export const projectKeys = {
getWorkspaceById: (projectId: string) => ["projects", { projectId }] as const,
getWorkspaceSecrets: (projectId: string) => [{ projectId }, "project-secrets"] as const,
getWorkspaceIndexStatus: (projectId: string) => [{ projectId }, "project-index-status"] as const,
getProjectUpgradeStatus: (projectId: string) => [{ projectId }, "project-upgrade-status"],
getWorkspaceMemberships: (orgId: string) => [{ orgId }, "project-memberships"],
getWorkspaceAuthorization: (projectId: string) => [{ projectId }, "project-authorizations"],
getWorkspaceIntegrations: (projectId: string) => [{ projectId }, "project-integrations"],
getAllUserWorkspace: () => ["projects"] as const,
getWorkspaceAuditLogs: (projectId: string) => [{ projectId }, "project-audit-logs"] as const,
getWorkspaceUsers: (
projectId: string,
includeGroupMembers: boolean = false,
roles: string[] = []
) => [{ projectId, includeGroupMembers, roles }, "project-users"] as const,
getWorkspaceUserDetails: (projectId: string, membershipId: string) =>
[{ projectId, membershipId }, "project-user-details"] as const,
getWorkspaceIdentityMemberships: (projectId: string) =>
[{ projectId }, "project-identity-memberships"] as const,
getWorkspaceIdentityMembershipDetails: (projectId: string, identityId: string) =>
[{ projectId, identityId }, "project-identity-membership-details"] as const,
// allows invalidation using above key without knowing params
getWorkspaceIdentityMembershipsWithParams: ({
projectId,
...params
}: TListProjectIdentitiesDTO) =>
[...projectKeys.getWorkspaceIdentityMemberships(projectId), params] as const,
searchWorkspace: (dto: TSearchProjectsDTO) => ["search-projects", dto] as const,
getWorkspaceGroupMemberships: (projectId: string) => [{ projectId }, "project-groups"] as const,
getWorkspaceGroupMembershipDetails: (projectId: string, groupId: string) =>
[{ projectId, groupId }, "project-group-membership-details"] as const,
getWorkspaceCas: ({ projectId }: { projectId: string }) =>
[{ projectId }, "project-cas"] as const,
specificWorkspaceCas: ({ projectId, status }: { projectId: string; status?: CaStatus }) =>
[...projectKeys.getWorkspaceCas({ projectId }), { status }] as const,
allWorkspaceCertificates: () => ["project-certificates"] as const,
forWorkspaceCertificates: (projectId: string) =>
[...projectKeys.allWorkspaceCertificates(), projectId] as const,
specificWorkspaceCertificates: ({
projectId,
offset,
limit
}: {
projectId: string;
offset: number;
limit: number;
}) => [...projectKeys.forWorkspaceCertificates(projectId), { offset, limit }] as const,
getWorkspacePkiAlerts: (projectId: string) => [{ projectId }, "project-pki-alerts"] as const,
getWorkspacePkiSubscribers: (projectId: string) =>
[{ projectId }, "project-pki-subscribers"] as const,
getWorkspacePkiCollections: (projectId: string) =>
[{ projectId }, "project-pki-collections"] as const,
getWorkspaceCertificateTemplates: (projectId: string) =>
[{ projectId }, "project-certificate-templates"] as const,
getWorkspaceWorkflowIntegrationConfig: (
projectId: string,
integration: WorkflowIntegrationPlatform
) => [{ projectId, integration }, "project-workflow-integration-config"] as const,
getWorkspaceSshCas: (projectId: string) => [{ projectId }, "project-ssh-cas"] as const,
allWorkspaceSshCertificates: (projectId: string) =>
[{ projectId }, "project-ssh-certificates"] as const,
getWorkspaceSshHosts: (projectId: string) => [{ projectId }, "project-ssh-hosts"] as const,
getWorkspaceSshHostGroups: (projectId: string) =>
[{ projectId }, "project-ssh-host-groups"] as const,
specificWorkspaceSshCertificates: ({
offset,
limit,
projectId
}: {
offset: number;
limit: number;
projectId: string;
}) => [...projectKeys.allWorkspaceSshCertificates(projectId), { offset, limit }] as const,
getWorkspaceSshCertificateTemplates: (projectId: string) =>
[{ projectId }, "project-ssh-certificate-templates"] as const,
getProjectSshConfig: (projectId: string) => [{ projectId }, "project-ssh-config"] as const
};
@@ -1,7 +1,7 @@
import { useMemo } from "react"; import { useMemo } from "react";
import { useRouterState } from "@tanstack/react-router"; import { useRouterState } from "@tanstack/react-router";
import { ProjectType } from "@app/hooks/api/workspace/types"; import { ProjectType } from "@app/hooks/api/projects/types";
export const useGetProjectTypeFromRoute = () => { export const useGetProjectTypeFromRoute = () => {
const { location } = useRouterState(); const { location } = useRouterState();
+3 -3
View File
@@ -1,6 +1,6 @@
import { useMemo } from "react"; import { useMemo } from "react";
import { useSubscription, useWorkspace } from "@app/context"; import { useSubscription, useProject } from "@app/context";
import { useGetAccessApprovalPolicies } from "@app/hooks/api"; import { useGetAccessApprovalPolicies } from "@app/hooks/api";
const matchesPath = (folderPath: string, pattern: string) => { const matchesPath = (folderPath: string, pattern: string) => {
@@ -37,10 +37,10 @@ type Params = {
}; };
export const usePathAccessPolicies = ({ secretPath, environment }: Params) => { export const usePathAccessPolicies = ({ secretPath, environment }: Params) => {
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const { subscription } = useSubscription(); const { subscription } = useSubscription();
const { data: policies } = useGetAccessApprovalPolicies({ const { data: policies } = useGetAccessApprovalPolicies({
projectSlug: currentWorkspace.slug, projectSlug: currentProject.slug,
options: { options: {
enabled: subscription.secretApproval enabled: subscription.secretApproval
} }
+7 -7
View File
@@ -4,12 +4,12 @@ import { Link, Outlet } from "@tanstack/react-router";
import { motion } from "framer-motion"; import { motion } from "framer-motion";
import { Lottie, Menu, MenuGroup, MenuItem } from "@app/components/v2"; import { Lottie, Menu, MenuGroup, MenuItem } from "@app/components/v2";
import { useProjectPermission, useWorkspace } from "@app/context"; import { useProjectPermission, useProject } from "@app/context";
import { AssumePrivilegeModeBanner } from "../ProjectLayout/components/AssumePrivilegeModeBanner"; import { AssumePrivilegeModeBanner } from "../ProjectLayout/components/AssumePrivilegeModeBanner";
export const KmsLayout = () => { export const KmsLayout = () => {
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const { assumedPrivilegeDetails } = useProjectPermission(); const { assumedPrivilegeDetails } = useProjectPermission();
return ( return (
@@ -34,7 +34,7 @@ export const KmsLayout = () => {
<Link <Link
to="/projects/kms/$projectId/overview" to="/projects/kms/$projectId/overview"
params={{ params={{
projectId: currentWorkspace.id projectId: currentProject.id
}} }}
> >
{({ isActive }) => ( {({ isActive }) => (
@@ -51,7 +51,7 @@ export const KmsLayout = () => {
<Link <Link
to="/projects/kms/$projectId/kmip" to="/projects/kms/$projectId/kmip"
params={{ params={{
projectId: currentWorkspace.id projectId: currentProject.id
}} }}
> >
{({ isActive }) => ( {({ isActive }) => (
@@ -70,7 +70,7 @@ export const KmsLayout = () => {
<Link <Link
to="/projects/kms/$projectId/access-management" to="/projects/kms/$projectId/access-management"
params={{ params={{
projectId: currentWorkspace.id projectId: currentProject.id
}} }}
> >
{({ isActive }) => ( {({ isActive }) => (
@@ -87,7 +87,7 @@ export const KmsLayout = () => {
<Link <Link
to="/projects/kms/$projectId/audit-logs" to="/projects/kms/$projectId/audit-logs"
params={{ params={{
projectId: currentWorkspace.id projectId: currentProject.id
}} }}
> >
{({ isActive }) => ( {({ isActive }) => (
@@ -104,7 +104,7 @@ export const KmsLayout = () => {
<Link <Link
to="/projects/kms/$projectId/settings" to="/projects/kms/$projectId/settings"
params={{ params={{
projectId: currentWorkspace.id projectId: currentProject.id
}} }}
> >
{({ isActive }) => ( {({ isActive }) => (
@@ -40,7 +40,7 @@ import { envConfig } from "@app/config/env";
import { useOrganization, useSubscription, useUser } from "@app/context"; import { useOrganization, useSubscription, useUser } from "@app/context";
import { isInfisicalCloud } from "@app/helpers/platform"; import { isInfisicalCloud } from "@app/helpers/platform";
import { useToggle } from "@app/hooks"; import { useToggle } from "@app/hooks";
import { useGetOrganizations, useLogoutUser, workspaceKeys } from "@app/hooks/api"; import { useGetOrganizations, useLogoutUser, projectKeys } from "@app/hooks/api";
import { authKeys, selectOrganization } from "@app/hooks/api/auth/queries"; import { authKeys, selectOrganization } from "@app/hooks/api/auth/queries";
import { MfaMethod } from "@app/hooks/api/auth/types"; import { MfaMethod } from "@app/hooks/api/auth/types";
import { getAuthToken } from "@app/hooks/api/reactQuery"; import { getAuthToken } from "@app/hooks/api/reactQuery";
@@ -135,7 +135,7 @@ export const Navbar = () => {
const handleOrgChange = async (orgId: string) => { const handleOrgChange = async (orgId: string) => {
queryClient.removeQueries({ queryKey: authKeys.getAuthToken }); queryClient.removeQueries({ queryKey: authKeys.getAuthToken });
queryClient.removeQueries({ queryKey: workspaceKeys.getAllUserWorkspace() }); queryClient.removeQueries({ queryKey: projectKeys.getAllUserProjects() });
const { token, isMfaEnabled, mfaMethod } = await selectOrganization({ const { token, isMfaEnabled, mfaMethod } = await selectOrganization({
organizationId: orgId organizationId: orgId
@@ -16,12 +16,12 @@ import { Link, Outlet } from "@tanstack/react-router";
import { motion } from "framer-motion"; import { motion } from "framer-motion";
import { Lottie, Menu, MenuGroup, MenuItem } from "@app/components/v2"; import { Lottie, Menu, MenuGroup, MenuItem } from "@app/components/v2";
import { useProjectPermission, useWorkspace } from "@app/context"; import { useProjectPermission, useProject } from "@app/context";
import { AssumePrivilegeModeBanner } from "../ProjectLayout/components/AssumePrivilegeModeBanner"; import { AssumePrivilegeModeBanner } from "../ProjectLayout/components/AssumePrivilegeModeBanner";
export const PkiManagerLayout = () => { export const PkiManagerLayout = () => {
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const { assumedPrivilegeDetails } = useProjectPermission(); const { assumedPrivilegeDetails } = useProjectPermission();
const { t } = useTranslation(); const { t } = useTranslation();
@@ -48,7 +48,7 @@ export const PkiManagerLayout = () => {
<Link <Link
to="/projects/cert-management/$projectId/subscribers" to="/projects/cert-management/$projectId/subscribers"
params={{ params={{
projectId: currentWorkspace.id projectId: currentProject.id
}} }}
> >
{({ isActive }) => ( {({ isActive }) => (
@@ -65,7 +65,7 @@ export const PkiManagerLayout = () => {
<Link <Link
to="/projects/cert-management/$projectId/certificate-templates" to="/projects/cert-management/$projectId/certificate-templates"
params={{ params={{
projectId: currentWorkspace.id projectId: currentProject.id
}} }}
> >
{({ isActive }) => ( {({ isActive }) => (
@@ -82,7 +82,7 @@ export const PkiManagerLayout = () => {
<Link <Link
to="/projects/cert-management/$projectId/certificates" to="/projects/cert-management/$projectId/certificates"
params={{ params={{
projectId: currentWorkspace.id projectId: currentProject.id
}} }}
> >
{({ isActive }) => ( {({ isActive }) => (
@@ -99,7 +99,7 @@ export const PkiManagerLayout = () => {
<Link <Link
to="/projects/cert-management/$projectId/certificate-authorities" to="/projects/cert-management/$projectId/certificate-authorities"
params={{ params={{
projectId: currentWorkspace.id projectId: currentProject.id
}} }}
> >
{({ isActive }) => ( {({ isActive }) => (
@@ -116,7 +116,7 @@ export const PkiManagerLayout = () => {
<Link <Link
to="/projects/cert-management/$projectId/alerting" to="/projects/cert-management/$projectId/alerting"
params={{ params={{
projectId: currentWorkspace.id projectId: currentProject.id
}} }}
> >
{({ isActive }) => ( {({ isActive }) => (
@@ -135,7 +135,7 @@ export const PkiManagerLayout = () => {
<Link <Link
to="/projects/cert-management/$projectId/access-management" to="/projects/cert-management/$projectId/access-management"
params={{ params={{
projectId: currentWorkspace.id projectId: currentProject.id
}} }}
> >
{({ isActive }) => ( {({ isActive }) => (
@@ -152,7 +152,7 @@ export const PkiManagerLayout = () => {
<Link <Link
to="/projects/cert-management/$projectId/audit-logs" to="/projects/cert-management/$projectId/audit-logs"
params={{ params={{
projectId: currentWorkspace.id projectId: currentProject.id
}} }}
> >
{({ isActive }) => ( {({ isActive }) => (
@@ -169,7 +169,7 @@ export const PkiManagerLayout = () => {
<Link <Link
to="/projects/cert-management/$projectId/settings" to="/projects/cert-management/$projectId/settings"
params={{ params={{
projectId: currentWorkspace.id projectId: currentProject.id
}} }}
> >
{({ isActive }) => ( {({ isActive }) => (
@@ -2,13 +2,13 @@ import { faInfoCircle } from "@fortawesome/free-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { Button } from "@app/components/v2"; import { Button } from "@app/components/v2";
import { useProjectPermission, useWorkspace } from "@app/context"; import { useProjectPermission, useProject } from "@app/context";
import { getProjectHomePage } from "@app/helpers/project"; import { getProjectHomePage } from "@app/helpers/project";
import { useRemoveAssumeProjectPrivilege } from "@app/hooks/api"; import { useRemoveAssumeProjectPrivilege } from "@app/hooks/api";
import { ActorType } from "@app/hooks/api/auditLogs/enums"; import { ActorType } from "@app/hooks/api/auditLogs/enums";
export const AssumePrivilegeModeBanner = () => { export const AssumePrivilegeModeBanner = () => {
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const exitAssumePrivilegeMode = useRemoveAssumeProjectPrivilege(); const exitAssumePrivilegeMode = useRemoveAssumeProjectPrivilege();
const { assumedPrivilegeDetails } = useProjectPermission(); const { assumedPrivilegeDetails } = useProjectPermission();
@@ -32,15 +32,12 @@ export const AssumePrivilegeModeBanner = () => {
onClick={() => { onClick={() => {
exitAssumePrivilegeMode.mutate( exitAssumePrivilegeMode.mutate(
{ {
projectId: currentWorkspace.id projectId: currentProject.id
}, },
{ {
onSuccess: () => { onSuccess: () => {
const url = getProjectHomePage( const url = getProjectHomePage(currentProject.type, currentProject.environments);
currentWorkspace.type, window.location.href = url.replace("$projectId", currentProject.id);
currentWorkspace.environments
);
window.location.href = url.replace("$projectId", currentWorkspace.id);
} }
} }
); );
@@ -29,20 +29,20 @@ import {
OrgPermissionSubjects, OrgPermissionSubjects,
useOrganization, useOrganization,
useSubscription, useSubscription,
useWorkspace useProject
} from "@app/context"; } from "@app/context";
import { getProjectHomePage } from "@app/helpers/project"; import { getProjectHomePage } from "@app/helpers/project";
import { usePopUp } from "@app/hooks"; import { usePopUp } from "@app/hooks";
import { useGetUserWorkspaces } from "@app/hooks/api"; import { useGetUserProjects } from "@app/hooks/api";
import { useUpdateUserProjectFavorites } from "@app/hooks/api/users/mutation"; import { useUpdateUserProjectFavorites } from "@app/hooks/api/users/mutation";
import { useGetUserProjectFavorites } from "@app/hooks/api/users/queries"; import { useGetUserProjectFavorites } from "@app/hooks/api/users/queries";
import { Project } from "@app/hooks/api/workspace/types"; import { Project } from "@app/hooks/api/projects/types";
export const ProjectSelect = () => { export const ProjectSelect = () => {
const [searchProject, setSearchProject] = useState(""); const [searchProject, setSearchProject] = useState("");
const { currentWorkspace } = useWorkspace(); const { currentProject: currentWorkspace } = useProject();
const { currentOrg } = useOrganization(); const { currentOrg } = useOrganization();
const { data: workspaces = [] } = useGetUserWorkspaces(); const { data: projects = [] } = useGetUserProjects();
const { data: projectFavorites } = useGetUserProjectFavorites(currentOrg.id); const { data: projectFavorites } = useGetUserProjectFavorites(currentOrg.id);
const { subscription } = useSubscription(); const { subscription } = useSubscription();
@@ -86,8 +86,8 @@ export const ProjectSelect = () => {
"upgradePlan" "upgradePlan"
] as const); ] as const);
const projects = useMemo(() => { const projectsSortedByFav = useMemo(() => {
const projectOptions = workspaces const projectOptions = projects
.map((w): Project & { isFavorite: boolean } => ({ .map((w): Project & { isFavorite: boolean } => ({
...w, ...w,
isFavorite: Boolean(projectFavorites?.includes(w.id)) isFavorite: Boolean(projectFavorites?.includes(w.id))
@@ -95,7 +95,7 @@ export const ProjectSelect = () => {
.sort((a, b) => Number(b.isFavorite) - Number(a.isFavorite)); .sort((a, b) => Number(b.isFavorite) - Number(a.isFavorite));
return projectOptions; return projectOptions;
}, [workspaces, projectFavorites, currentWorkspace]); }, [projects, projectFavorites, currentWorkspace]);
return ( return (
<div className="-mr-2 flex w-full items-center gap-1"> <div className="-mr-2 flex w-full items-center gap-1">
@@ -147,7 +147,7 @@ export const ProjectSelect = () => {
/> />
</div> </div>
<div className="thin-scrollbar max-h-80 overflow-auto"> <div className="thin-scrollbar max-h-80 overflow-auto">
{projects {projectsSortedByFav
?.filter((el) => el.name?.toLowerCase().includes(searchProject.toLowerCase())) ?.filter((el) => el.name?.toLowerCase().includes(searchProject.toLowerCase()))
?.map((workspace) => { ?.map((workspace) => {
return ( return (
@@ -15,7 +15,7 @@ import { Link, Outlet, useLocation } from "@tanstack/react-router";
import { motion } from "framer-motion"; import { motion } from "framer-motion";
import { Badge, Lottie, Menu, MenuGroup, MenuItem } from "@app/components/v2"; import { Badge, Lottie, Menu, MenuGroup, MenuItem } from "@app/components/v2";
import { useProjectPermission, useWorkspace } from "@app/context"; import { useProjectPermission, useProject } from "@app/context";
import { import {
useGetAccessRequestsCount, useGetAccessRequestsCount,
useGetSecretApprovalRequestCount, useGetSecretApprovalRequestCount,
@@ -25,16 +25,15 @@ import {
import { AssumePrivilegeModeBanner } from "../ProjectLayout/components/AssumePrivilegeModeBanner"; import { AssumePrivilegeModeBanner } from "../ProjectLayout/components/AssumePrivilegeModeBanner";
export const SecretManagerLayout = () => { export const SecretManagerLayout = () => {
const { currentWorkspace } = useWorkspace(); const { currentProject, projectId } = useProject();
const { assumedPrivilegeDetails } = useProjectPermission(); const { assumedPrivilegeDetails } = useProjectPermission();
const { t } = useTranslation(); const { t } = useTranslation();
const workspaceId = currentWorkspace?.id || ""; const projectSlug = currentProject?.slug || "";
const projectSlug = currentWorkspace?.slug || "";
const location = useLocation(); const location = useLocation();
const { data: secretApprovalReqCount } = useGetSecretApprovalRequestCount({ const { data: secretApprovalReqCount } = useGetSecretApprovalRequestCount({
workspaceId projectId
}); });
const { data: accessApprovalRequestCount } = useGetAccessRequestsCount({ const { data: accessApprovalRequestCount } = useGetAccessRequestsCount({
projectSlug projectSlug
@@ -42,7 +41,7 @@ export const SecretManagerLayout = () => {
// we only show the secret rotations v1 tab if they have existing rotations // we only show the secret rotations v1 tab if they have existing rotations
const { data: secretRotations } = useGetSecretRotations({ const { data: secretRotations } = useGetSecretRotations({
workspaceId, workspaceId: projectId,
options: { options: {
refetchOnMount: false refetchOnMount: false
} }
@@ -74,9 +73,9 @@ export const SecretManagerLayout = () => {
<Link <Link
to="/projects/secret-management/$projectId/overview" to="/projects/secret-management/$projectId/overview"
params={{ params={{
projectId: currentWorkspace.id, projectId: currentProject.id,
...(currentWorkspace.environments.length ...(currentProject.environments.length
? { envSlug: currentWorkspace.environments[0]?.slug } ? { envSlug: currentProject.environments[0]?.slug }
: {}) : {})
}} }}
> >
@@ -85,7 +84,7 @@ export const SecretManagerLayout = () => {
isSelected={ isSelected={
isActive || isActive ||
location.pathname.startsWith( location.pathname.startsWith(
`/projects/secret-management/${currentWorkspace.id}/overview` `/projects/secret-management/${currentProject.id}/overview`
) )
} }
> >
@@ -101,7 +100,7 @@ export const SecretManagerLayout = () => {
<Link <Link
to="/projects/secret-management/$projectId/integrations" to="/projects/secret-management/$projectId/integrations"
params={{ params={{
projectId: currentWorkspace.id projectId: currentProject.id
}} }}
> >
{({ isActive }) => ( {({ isActive }) => (
@@ -119,7 +118,7 @@ export const SecretManagerLayout = () => {
<Link <Link
to="/projects/secret-management/$projectId/secret-rotation" to="/projects/secret-management/$projectId/secret-rotation"
params={{ params={{
projectId: currentWorkspace.id projectId: currentProject.id
}} }}
> >
{({ isActive }) => ( {({ isActive }) => (
@@ -137,7 +136,7 @@ export const SecretManagerLayout = () => {
<Link <Link
to="/projects/secret-management/$projectId/approval" to="/projects/secret-management/$projectId/approval"
params={{ params={{
projectId: currentWorkspace.id projectId: currentProject.id
}} }}
> >
{({ isActive }) => ( {({ isActive }) => (
@@ -164,7 +163,7 @@ export const SecretManagerLayout = () => {
<Link <Link
to="/projects/secret-management/$projectId/access-management" to="/projects/secret-management/$projectId/access-management"
params={{ params={{
projectId: currentWorkspace.id projectId: currentProject.id
}} }}
> >
{({ isActive }) => ( {({ isActive }) => (
@@ -181,7 +180,7 @@ export const SecretManagerLayout = () => {
<Link <Link
to="/projects/secret-management/$projectId/audit-logs" to="/projects/secret-management/$projectId/audit-logs"
params={{ params={{
projectId: currentWorkspace.id projectId: currentProject.id
}} }}
> >
{({ isActive }) => ( {({ isActive }) => (
@@ -198,7 +197,7 @@ export const SecretManagerLayout = () => {
<Link <Link
to="/projects/secret-management/$projectId/settings" to="/projects/secret-management/$projectId/settings"
params={{ params={{
projectId: currentWorkspace.id projectId: currentProject.id
}} }}
> >
{({ isActive }) => ( {({ isActive }) => (
@@ -15,7 +15,7 @@ import {
ProjectPermissionSub, ProjectPermissionSub,
useProjectPermission, useProjectPermission,
useSubscription, useSubscription,
useWorkspace useProject
} from "@app/context"; } from "@app/context";
import { ProjectPermissionSecretScanningFindingActions } from "@app/context/ProjectPermissionContext/types"; import { ProjectPermissionSecretScanningFindingActions } from "@app/context/ProjectPermissionContext/types";
import { useGetSecretScanningUnresolvedFindingCount } from "@app/hooks/api/secretScanningV2"; import { useGetSecretScanningUnresolvedFindingCount } from "@app/hooks/api/secretScanningV2";
@@ -23,14 +23,14 @@ import { useGetSecretScanningUnresolvedFindingCount } from "@app/hooks/api/secre
import { AssumePrivilegeModeBanner } from "../ProjectLayout/components/AssumePrivilegeModeBanner"; import { AssumePrivilegeModeBanner } from "../ProjectLayout/components/AssumePrivilegeModeBanner";
export const SecretScanningLayout = () => { export const SecretScanningLayout = () => {
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const { assumedPrivilegeDetails } = useProjectPermission(); const { assumedPrivilegeDetails } = useProjectPermission();
const { permission } = useProjectPermission(); const { permission } = useProjectPermission();
const { subscription } = useSubscription(); const { subscription } = useSubscription();
const { data: unresolvedFindings } = useGetSecretScanningUnresolvedFindingCount( const { data: unresolvedFindings } = useGetSecretScanningUnresolvedFindingCount(
currentWorkspace.id, currentProject.id,
{ {
enabled: enabled:
subscription.secretScanning && subscription.secretScanning &&
@@ -64,7 +64,7 @@ export const SecretScanningLayout = () => {
<Link <Link
to="/projects/secret-scanning/$projectId/data-sources" to="/projects/secret-scanning/$projectId/data-sources"
params={{ params={{
projectId: currentWorkspace.id projectId: currentProject.id
}} }}
> >
{({ isActive }) => ( {({ isActive }) => (
@@ -81,7 +81,7 @@ export const SecretScanningLayout = () => {
<Link <Link
to="/projects/secret-scanning/$projectId/findings" to="/projects/secret-scanning/$projectId/findings"
params={{ params={{
projectId: currentWorkspace.id projectId: currentProject.id
}} }}
> >
{({ isActive }) => ( {({ isActive }) => (
@@ -105,7 +105,7 @@ export const SecretScanningLayout = () => {
<Link <Link
to="/projects/secret-scanning/$projectId/access-management" to="/projects/secret-scanning/$projectId/access-management"
params={{ params={{
projectId: currentWorkspace.id projectId: currentProject.id
}} }}
> >
{({ isActive }) => ( {({ isActive }) => (
@@ -122,7 +122,7 @@ export const SecretScanningLayout = () => {
<Link <Link
to="/projects/secret-scanning/$projectId/audit-logs" to="/projects/secret-scanning/$projectId/audit-logs"
params={{ params={{
projectId: currentWorkspace.id projectId: currentProject.id
}} }}
> >
{({ isActive }) => ( {({ isActive }) => (
@@ -139,7 +139,7 @@ export const SecretScanningLayout = () => {
<Link <Link
to="/projects/secret-scanning/$projectId/settings" to="/projects/secret-scanning/$projectId/settings"
params={{ params={{
projectId: currentWorkspace.id projectId: currentProject.id
}} }}
> >
{({ isActive }) => ( {({ isActive }) => (
+7 -7
View File
@@ -16,13 +16,13 @@ import {
ProjectPermissionActions, ProjectPermissionActions,
ProjectPermissionSub, ProjectPermissionSub,
useProjectPermission, useProjectPermission,
useWorkspace useProject
} from "@app/context"; } from "@app/context";
import { AssumePrivilegeModeBanner } from "../ProjectLayout/components/AssumePrivilegeModeBanner"; import { AssumePrivilegeModeBanner } from "../ProjectLayout/components/AssumePrivilegeModeBanner";
export const SshLayout = () => { export const SshLayout = () => {
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const { assumedPrivilegeDetails } = useProjectPermission(); const { assumedPrivilegeDetails } = useProjectPermission();
return ( return (
@@ -47,7 +47,7 @@ export const SshLayout = () => {
<Link <Link
to="/projects/ssh/$projectId/overview" to="/projects/ssh/$projectId/overview"
params={{ params={{
projectId: currentWorkspace.id projectId: currentProject.id
}} }}
> >
{({ isActive }) => ( {({ isActive }) => (
@@ -70,7 +70,7 @@ export const SshLayout = () => {
<Link <Link
to="/projects/ssh/$projectId/cas" to="/projects/ssh/$projectId/cas"
params={{ params={{
projectId: currentWorkspace.id projectId: currentProject.id
}} }}
> >
{({ isActive }) => ( {({ isActive }) => (
@@ -93,7 +93,7 @@ export const SshLayout = () => {
<Link <Link
to="/projects/ssh/$projectId/access-management" to="/projects/ssh/$projectId/access-management"
params={{ params={{
projectId: currentWorkspace.id projectId: currentProject.id
}} }}
> >
{({ isActive }) => ( {({ isActive }) => (
@@ -110,7 +110,7 @@ export const SshLayout = () => {
<Link <Link
to="/projects/ssh/$projectId/audit-logs" to="/projects/ssh/$projectId/audit-logs"
params={{ params={{
projectId: currentWorkspace.id projectId: currentProject.id
}} }}
> >
{({ isActive }) => ( {({ isActive }) => (
@@ -127,7 +127,7 @@ export const SshLayout = () => {
<Link <Link
to="/projects/ssh/$projectId/settings" to="/projects/ssh/$projectId/settings"
params={{ params={{
projectId: currentWorkspace.id projectId: currentProject.id
}} }}
> >
{({ isActive }) => ( {({ isActive }) => (
@@ -13,7 +13,7 @@ import {
Select, Select,
SelectItem SelectItem
} from "@app/components/v2"; } from "@app/components/v2";
import { useWorkspace } from "@app/context"; import { useProject } from "@app/context";
import { import {
useCreatePkiAlert, useCreatePkiAlert,
useGetPkiAlertById, useGetPkiAlertById,
@@ -60,15 +60,15 @@ type Props = {
}; };
export const PkiAlertModal = ({ popUp, handlePopUpToggle }: Props) => { export const PkiAlertModal = ({ popUp, handlePopUpToggle }: Props) => {
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const projectId = currentWorkspace?.id || ""; const projectId = currentProject?.id || "";
const { data: alert } = useGetPkiAlertById( const { data: alert } = useGetPkiAlertById(
(popUp?.pkiAlert?.data as { alertId: string })?.alertId || "" (popUp?.pkiAlert?.data as { alertId: string })?.alertId || ""
); );
const { data: pkiCollections } = useListWorkspacePkiCollections({ const { data: pkiCollections } = useListWorkspacePkiCollections({
workspaceId: projectId projectId
}); });
const { mutateAsync: createPkiAlert } = useCreatePkiAlert(); const { mutateAsync: createPkiAlert } = useCreatePkiAlert();
@@ -4,7 +4,7 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { createNotification } from "@app/components/notifications"; import { createNotification } from "@app/components/notifications";
import { ProjectPermissionCan } from "@app/components/permissions"; import { ProjectPermissionCan } from "@app/components/permissions";
import { Button, DeleteActionModal } from "@app/components/v2"; import { Button, DeleteActionModal } from "@app/components/v2";
import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context"; import { ProjectPermissionActions, ProjectPermissionSub, useProject } from "@app/context";
import { useDeletePkiAlert } from "@app/hooks/api"; import { useDeletePkiAlert } from "@app/hooks/api";
import { usePopUp } from "@app/hooks/usePopUp"; import { usePopUp } from "@app/hooks/usePopUp";
@@ -12,8 +12,8 @@ import { PkiAlertModal } from "./PkiAlertModal";
import { PkiAlertsTable } from "./PkiAlertsTable"; import { PkiAlertsTable } from "./PkiAlertsTable";
export const PkiAlertsSection = () => { export const PkiAlertsSection = () => {
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const projectId = currentWorkspace?.id || ""; const projectId = currentProject?.id || "";
const { mutateAsync: deletePkiAlert } = useDeletePkiAlert(); const { mutateAsync: deletePkiAlert } = useDeletePkiAlert();
const { popUp, handlePopUpOpen, handlePopUpClose, handlePopUpToggle } = usePopUp([ const { popUp, handlePopUpOpen, handlePopUpClose, handlePopUpToggle } = usePopUp([
@@ -10,7 +10,7 @@ import {
THead, THead,
Tr Tr
} from "@app/components/v2"; } from "@app/components/v2";
import { useWorkspace } from "@app/context"; import { useProject } from "@app/context";
import { useListWorkspacePkiAlerts } from "@app/hooks/api"; import { useListWorkspacePkiAlerts } from "@app/hooks/api";
import { UsePopUpState } from "@app/hooks/usePopUp"; import { UsePopUpState } from "@app/hooks/usePopUp";
@@ -24,11 +24,11 @@ type Props = {
}; };
export const PkiAlertsTable = ({ handlePopUpOpen }: Props) => { export const PkiAlertsTable = ({ handlePopUpOpen }: Props) => {
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const projectId = currentWorkspace?.id || ""; const projectId = currentProject?.id || "";
const { data, isPending } = useListWorkspacePkiAlerts({ const { data, isPending } = useListWorkspacePkiAlerts({
workspaceId: projectId projectId
}); });
return ( return (
@@ -6,7 +6,7 @@ import { z } from "zod";
import { createNotification } from "@app/components/notifications"; import { createNotification } from "@app/components/notifications";
import { Button, FormControl, Input, Modal, ModalContent } from "@app/components/v2"; import { Button, FormControl, Input, Modal, ModalContent } from "@app/components/v2";
import { useWorkspace } from "@app/context"; import { useProject } from "@app/context";
import { import {
useCreatePkiCollection, useCreatePkiCollection,
useGetPkiCollectionById, useGetPkiCollectionById,
@@ -28,8 +28,8 @@ type Props = {
export const PkiCollectionModal = ({ popUp, handlePopUpToggle }: Props) => { export const PkiCollectionModal = ({ popUp, handlePopUpToggle }: Props) => {
const navigate = useNavigate(); const navigate = useNavigate();
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const projectId = currentWorkspace?.id || ""; const projectId = currentProject?.id || "";
const { data: pkiCollection } = useGetPkiCollectionById( const { data: pkiCollection } = useGetPkiCollectionById(
(popUp?.pkiCollection?.data as { collectionId: string })?.collectionId || "" (popUp?.pkiCollection?.data as { collectionId: string })?.collectionId || ""
@@ -4,7 +4,7 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { createNotification } from "@app/components/notifications"; import { createNotification } from "@app/components/notifications";
import { ProjectPermissionCan } from "@app/components/permissions"; import { ProjectPermissionCan } from "@app/components/permissions";
import { Button, DeleteActionModal } from "@app/components/v2"; import { Button, DeleteActionModal } from "@app/components/v2";
import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context"; import { ProjectPermissionActions, ProjectPermissionSub, useProject } from "@app/context";
import { useDeletePkiCollection } from "@app/hooks/api"; import { useDeletePkiCollection } from "@app/hooks/api";
import { usePopUp } from "@app/hooks/usePopUp"; import { usePopUp } from "@app/hooks/usePopUp";
@@ -12,8 +12,8 @@ import { PkiCollectionModal } from "./PkiCollectionModal";
import { PkiCollectionTable } from "./PkiCollectionTable"; import { PkiCollectionTable } from "./PkiCollectionTable";
export const PkiCollectionSection = () => { export const PkiCollectionSection = () => {
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const projectId = currentWorkspace?.id || ""; const projectId = currentProject?.id || "";
const { mutateAsync: deletePkiCollection } = useDeletePkiCollection(); const { mutateAsync: deletePkiCollection } = useDeletePkiCollection();
const { popUp, handlePopUpOpen, handlePopUpClose, handlePopUpToggle } = usePopUp([ const { popUp, handlePopUpOpen, handlePopUpClose, handlePopUpToggle } = usePopUp([
@@ -19,7 +19,7 @@ import {
THead, THead,
Tr Tr
} from "@app/components/v2"; } from "@app/components/v2";
import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context"; import { ProjectPermissionActions, ProjectPermissionSub, useProject } from "@app/context";
import { useListWorkspacePkiCollections } from "@app/hooks/api"; import { useListWorkspacePkiCollections } from "@app/hooks/api";
import { UsePopUpState } from "@app/hooks/usePopUp"; import { UsePopUpState } from "@app/hooks/usePopUp";
@@ -32,11 +32,11 @@ type Props = {
export const PkiCollectionTable = ({ handlePopUpOpen }: Props) => { export const PkiCollectionTable = ({ handlePopUpOpen }: Props) => {
const navigate = useNavigate(); const navigate = useNavigate();
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const projectId = currentWorkspace?.id || ""; const projectId = currentProject?.id || "";
const { data, isPending } = useListWorkspacePkiCollections({ const { data, isPending } = useListWorkspacePkiCollections({
workspaceId: projectId projectId
}); });
return ( return (
@@ -15,7 +15,7 @@ import {
Tooltip Tooltip
} from "@app/components/v2"; } from "@app/components/v2";
import { ROUTE_PATHS } from "@app/const/routes"; import { ROUTE_PATHS } from "@app/const/routes";
import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context"; import { ProjectPermissionActions, ProjectPermissionSub, useProject } from "@app/context";
import { CaType, useDeleteCa, useGetCa } from "@app/hooks/api"; import { CaType, useDeleteCa, useGetCa } from "@app/hooks/api";
import { TInternalCertificateAuthority } from "@app/hooks/api/ca/types"; import { TInternalCertificateAuthority } from "@app/hooks/api/ca/types";
import { usePopUp } from "@app/hooks/usePopUp"; import { usePopUp } from "@app/hooks/usePopUp";
@@ -30,7 +30,7 @@ import {
} from "./components"; } from "./components";
const Page = () => { const Page = () => {
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const navigate = useNavigate(); const navigate = useNavigate();
const params = useParams({ const params = useParams({
from: ROUTE_PATHS.CertManager.CertAuthDetailsByIDPage.id from: ROUTE_PATHS.CertManager.CertAuthDetailsByIDPage.id
@@ -38,11 +38,11 @@ const Page = () => {
const { caName } = params as { caName: string }; const { caName } = params as { caName: string };
const { data } = useGetCa({ const { data } = useGetCa({
caName, caName,
projectId: currentWorkspace?.id || "", projectId: currentProject?.id || "",
type: CaType.INTERNAL type: CaType.INTERNAL
}) as { data: TInternalCertificateAuthority }; }) as { data: TInternalCertificateAuthority };
const projectId = currentWorkspace?.id || ""; const projectId = currentProject?.id || "";
const { mutateAsync: deleteCa } = useDeleteCa(); const { mutateAsync: deleteCa } = useDeleteCa();
@@ -55,11 +55,11 @@ const Page = () => {
const onRemoveCaSubmit = async () => { const onRemoveCaSubmit = async () => {
try { try {
if (!currentWorkspace?.slug) return; if (!currentProject?.slug) return;
await deleteCa({ await deleteCa({
caName, caName,
projectId: currentWorkspace.id, projectId: currentProject.id,
type: CaType.INTERNAL type: CaType.INTERNAL
}); });
@@ -4,7 +4,7 @@ import { format } from "date-fns";
import { ProjectPermissionCan } from "@app/components/permissions"; import { ProjectPermissionCan } from "@app/components/permissions";
import { Button, IconButton, Tooltip } from "@app/components/v2"; import { Button, IconButton, Tooltip } from "@app/components/v2";
import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context"; import { ProjectPermissionActions, ProjectPermissionSub, useProject } from "@app/context";
import { useTimedReset } from "@app/hooks"; import { useTimedReset } from "@app/hooks";
import { CaStatus, CaType, InternalCaType, useGetCa } from "@app/hooks/api"; import { CaStatus, CaType, InternalCaType, useGetCa } from "@app/hooks/api";
import { caStatusToNameMap, caTypeToNameMap } from "@app/hooks/api/ca/constants"; import { caStatusToNameMap, caTypeToNameMap } from "@app/hooks/api/ca/constants";
@@ -21,7 +21,7 @@ type Props = {
}; };
export const CaDetailsSection = ({ caName, handlePopUpOpen }: Props) => { export const CaDetailsSection = ({ caName, handlePopUpOpen }: Props) => {
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const [copyTextId, isCopyingId, setCopyTextId] = useTimedReset<string>({ const [copyTextId, isCopyingId, setCopyTextId] = useTimedReset<string>({
initialState: "Copy ID to clipboard" initialState: "Copy ID to clipboard"
}); });
@@ -31,7 +31,7 @@ export const CaDetailsSection = ({ caName, handlePopUpOpen }: Props) => {
const { data } = useGetCa({ const { data } = useGetCa({
caName, caName,
projectId: currentWorkspace.id, projectId: currentProject.id,
type: CaType.INTERNAL type: CaType.INTERNAL
}); });
@@ -13,7 +13,7 @@ import {
Select, Select,
SelectItem SelectItem
} from "@app/components/v2"; } from "@app/components/v2";
import { useWorkspace } from "@app/context"; import { useProject } from "@app/context";
import { import {
CaRenewalType, CaRenewalType,
useRenewCa useRenewCa
@@ -45,8 +45,8 @@ type Props = {
}; };
export const CaRenewalModal = ({ popUp, handlePopUpToggle }: Props) => { export const CaRenewalModal = ({ popUp, handlePopUpToggle }: Props) => {
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const projectSlug = currentWorkspace?.slug || ""; const projectSlug = currentProject?.slug || "";
const popUpData = popUp?.renewCa?.data as { const popUpData = popUp?.renewCa?.data as {
caId: string; caId: string;
@@ -8,7 +8,7 @@ import { z } from "zod";
import { createNotification } from "@app/components/notifications"; import { createNotification } from "@app/components/notifications";
import { Button, FormControl, IconButton, TextArea, Tooltip } from "@app/components/v2"; import { Button, FormControl, IconButton, TextArea, Tooltip } from "@app/components/v2";
import { useWorkspace } from "@app/context"; import { useProject } from "@app/context";
import { useTimedReset } from "@app/hooks"; import { useTimedReset } from "@app/hooks";
import { useGetCaCsr, useImportCaCertificate } from "@app/hooks/api"; import { useGetCaCsr, useImportCaCertificate } from "@app/hooks/api";
import { UsePopUpState } from "@app/hooks/usePopUp"; import { UsePopUpState } from "@app/hooks/usePopUp";
@@ -26,7 +26,7 @@ type Props = {
}; };
export const ExternalCaInstallForm = ({ caId, handlePopUpToggle }: Props) => { export const ExternalCaInstallForm = ({ caId, handlePopUpToggle }: Props) => {
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const [copyTextCaCsr, isCopyingCaCsr, setCopyTextCaCsr] = useTimedReset<string>({ const [copyTextCaCsr, isCopyingCaCsr, setCopyTextCaCsr] = useTimedReset<string>({
initialState: "Copy to clipboard" initialState: "Copy to clipboard"
}); });
@@ -41,7 +41,7 @@ export const ExternalCaInstallForm = ({ caId, handlePopUpToggle }: Props) => {
}); });
const { data: csr } = useGetCaCsr(caId); const { data: csr } = useGetCaCsr(caId);
const { mutateAsync: importCaCertificate } = useImportCaCertificate(currentWorkspace.id); const { mutateAsync: importCaCertificate } = useImportCaCertificate(currentProject.id);
useEffect(() => { useEffect(() => {
reset(); reset();
@@ -49,11 +49,11 @@ export const ExternalCaInstallForm = ({ caId, handlePopUpToggle }: Props) => {
const onFormSubmit = async ({ certificate, certificateChain }: FormData) => { const onFormSubmit = async ({ certificate, certificateChain }: FormData) => {
try { try {
if (!csr || !caId || !currentWorkspace?.slug) return; if (!csr || !caId || !currentProject?.slug) return;
await importCaCertificate({ await importCaCertificate({
caId, caId,
projectSlug: currentWorkspace?.slug, projectSlug: currentProject?.slug,
certificate, certificate,
certificateChain certificateChain
}); });
@@ -6,7 +6,7 @@ import { z } from "zod";
import { createNotification } from "@app/components/notifications"; import { createNotification } from "@app/components/notifications";
import { Button, FormControl, Input, Select, SelectItem } from "@app/components/v2"; import { Button, FormControl, Input, Select, SelectItem } from "@app/components/v2";
import { useWorkspace } from "@app/context"; import { useProject } from "@app/context";
import { import {
CaStatus, CaStatus,
useGetCaById, useGetCaById,
@@ -46,16 +46,16 @@ type Props = {
}; };
export const InternalCaInstallForm = ({ caId, handlePopUpToggle }: Props) => { export const InternalCaInstallForm = ({ caId, handlePopUpToggle }: Props) => {
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const { data: cas } = useListWorkspaceCas({ const { data: cas } = useListWorkspaceCas({
projectSlug: currentWorkspace?.slug ?? "", projectId: currentProject.id,
status: CaStatus.ACTIVE status: CaStatus.ACTIVE
}); });
const { data: ca } = useGetCaById(caId); const { data: ca } = useGetCaById(caId);
const { data: csr } = useGetCaCsr(caId); const { data: csr } = useGetCaCsr(caId);
const { mutateAsync: signIntermediate } = useSignIntermediate(); const { mutateAsync: signIntermediate } = useSignIntermediate();
const { mutateAsync: importCaCertificate } = useImportCaCertificate(currentWorkspace.id); const { mutateAsync: importCaCertificate } = useImportCaCertificate(currentProject.id);
const { const {
control, control,
@@ -102,7 +102,7 @@ export const InternalCaInstallForm = ({ caId, handlePopUpToggle }: Props) => {
const onFormSubmit = async ({ notAfter, maxPathLength }: FormData) => { const onFormSubmit = async ({ notAfter, maxPathLength }: FormData) => {
try { try {
if (!csr || !caId || !currentWorkspace?.slug) return; if (!csr || !caId || !currentProject?.slug) return;
const { certificate, certificateChain } = await signIntermediate({ const { certificate, certificateChain } = await signIntermediate({
caId: parentCaId, caId: parentCaId,
@@ -114,7 +114,7 @@ export const InternalCaInstallForm = ({ caId, handlePopUpToggle }: Props) => {
await importCaCertificate({ await importCaCertificate({
caId, caId,
projectSlug: currentWorkspace?.slug, projectSlug: currentProject?.slug,
certificate, certificate,
certificateChain certificateChain
}); });
@@ -16,7 +16,7 @@ import {
Switch Switch
// DatePicker // DatePicker
} from "@app/components/v2"; } from "@app/components/v2";
import { useWorkspace } from "@app/context"; import { useProject } from "@app/context";
import { import {
CaStatus, CaStatus,
CaType, CaType,
@@ -84,10 +84,10 @@ const caTypes = [
]; ];
export const CaModal = ({ popUp, handlePopUpToggle }: Props) => { export const CaModal = ({ popUp, handlePopUpToggle }: Props) => {
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const { data: ca } = useGetCa({ const { data: ca } = useGetCa({
caName: (popUp?.ca?.data as { name: string })?.name || "", caName: (popUp?.ca?.data as { name: string })?.name || "",
projectId: currentWorkspace?.id || "", projectId: currentProject?.id || "",
type: CaType.INTERNAL type: CaType.INTERNAL
}); });
@@ -178,13 +178,13 @@ export const CaModal = ({ popUp, handlePopUpToggle }: Props) => {
configuration configuration
}: FormData) => { }: FormData) => {
try { try {
if (!currentWorkspace?.slug) return; if (!currentProject?.slug) return;
if (ca) { if (ca) {
// update // update
await updateMutateAsync({ await updateMutateAsync({
caName: ca.name, caName: ca.name,
projectId: currentWorkspace.id, projectId: currentProject.id,
name, name,
type: CaType.INTERNAL, type: CaType.INTERNAL,
status, status,
@@ -193,7 +193,7 @@ export const CaModal = ({ popUp, handlePopUpToggle }: Props) => {
} else { } else {
// create // create
await createMutateAsync({ await createMutateAsync({
projectId: currentWorkspace.id, projectId: currentProject.id,
name, name,
type, type,
status, status,
@@ -5,7 +5,7 @@ import { UpgradePlanModal } from "@app/components/license/UpgradePlanModal";
import { createNotification } from "@app/components/notifications"; import { createNotification } from "@app/components/notifications";
import { ProjectPermissionCan } from "@app/components/permissions"; import { ProjectPermissionCan } from "@app/components/permissions";
import { Button, DeleteActionModal } from "@app/components/v2"; import { Button, DeleteActionModal } from "@app/components/v2";
import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context"; import { ProjectPermissionActions, ProjectPermissionSub, useProject } from "@app/context";
import { CaStatus, CaType, useDeleteCa, useUpdateCa } from "@app/hooks/api"; import { CaStatus, CaType, useDeleteCa, useUpdateCa } from "@app/hooks/api";
import { usePopUp } from "@app/hooks/usePopUp"; import { usePopUp } from "@app/hooks/usePopUp";
@@ -15,7 +15,7 @@ import { CaModal } from "./CaModal";
import { CaTable } from "./CaTable"; import { CaTable } from "./CaTable";
export const CaSection = () => { export const CaSection = () => {
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const { mutateAsync: deleteCa } = useDeleteCa(); const { mutateAsync: deleteCa } = useDeleteCa();
const { mutateAsync: updateCa } = useUpdateCa(); const { mutateAsync: updateCa } = useUpdateCa();
@@ -30,9 +30,9 @@ export const CaSection = () => {
const onRemoveCaSubmit = async (caName: string) => { const onRemoveCaSubmit = async (caName: string) => {
try { try {
if (!currentWorkspace?.slug) return; if (!currentProject?.slug) return;
await deleteCa({ caName, projectId: currentWorkspace.id, type: CaType.INTERNAL }); await deleteCa({ caName, projectId: currentProject.id, type: CaType.INTERNAL });
createNotification({ createNotification({
text: "Successfully deleted CA", text: "Successfully deleted CA",
@@ -50,9 +50,9 @@ export const CaSection = () => {
const onUpdateCaStatus = async ({ caName, status }: { caName: string; status: CaStatus }) => { const onUpdateCaStatus = async ({ caName, status }: { caName: string; status: CaStatus }) => {
try { try {
if (!currentWorkspace?.slug) return; if (!currentProject?.slug) return;
await updateCa({ caName, projectId: currentWorkspace.id, type: CaType.INTERNAL, status }); await updateCa({ caName, projectId: currentProject.id, type: CaType.INTERNAL, status });
createNotification({ createNotification({
text: `Successfully ${status === CaStatus.ACTIVE ? "enabled" : "disabled"} CA`, text: `Successfully ${status === CaStatus.ACTIVE ? "enabled" : "disabled"} CA`,
@@ -22,7 +22,7 @@ import {
Tooltip, Tooltip,
Tr Tr
} from "@app/components/v2"; } from "@app/components/v2";
import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context"; import { ProjectPermissionActions, ProjectPermissionSub, useProject } from "@app/context";
import { CaStatus, CaType, useListCasByTypeAndProjectId } from "@app/hooks/api"; import { CaStatus, CaType, useListCasByTypeAndProjectId } from "@app/hooks/api";
import { import {
caStatusToNameMap, caStatusToNameMap,
@@ -49,8 +49,8 @@ type Props = {
export const CaTable = ({ handlePopUpOpen }: Props) => { export const CaTable = ({ handlePopUpOpen }: Props) => {
const navigate = useNavigate(); const navigate = useNavigate();
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const { data, isPending } = useListCasByTypeAndProjectId(CaType.INTERNAL, currentWorkspace.id); const { data, isPending } = useListCasByTypeAndProjectId(CaType.INTERNAL, currentProject.id);
const cas = data as TInternalCertificateAuthority[]; const cas = data as TInternalCertificateAuthority[];
return ( return (
@@ -80,7 +80,7 @@ export const CaTable = ({ handlePopUpOpen }: Props) => {
navigate({ navigate({
to: "/projects/cert-management/$projectId/ca/$caName", to: "/projects/cert-management/$projectId/ca/$caName",
params: { params: {
projectId: currentWorkspace.id, projectId: currentProject.id,
caName: ca.name caName: ca.name
} }
}) })
@@ -16,7 +16,7 @@ import {
SelectItem, SelectItem,
Switch Switch
} from "@app/components/v2"; } from "@app/components/v2";
import { useWorkspace } from "@app/context"; import { useProject } from "@app/context";
import { APP_CONNECTION_MAP } from "@app/helpers/appConnections"; import { APP_CONNECTION_MAP } from "@app/helpers/appConnections";
import { import {
TAvailableAppConnection, TAvailableAppConnection,
@@ -127,11 +127,11 @@ const caTypes = [
]; ];
export const ExternalCaModal = ({ popUp, handlePopUpToggle }: Props) => { export const ExternalCaModal = ({ popUp, handlePopUpToggle }: Props) => {
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const { data: ca, isLoading: isCaLoading } = useGetCa({ const { data: ca, isLoading: isCaLoading } = useGetCa({
caName: (popUp?.ca?.data as { name: string })?.name || "", caName: (popUp?.ca?.data as { name: string })?.name || "",
projectId: currentWorkspace?.id || "", projectId: currentProject?.id || "",
type: (popUp?.ca?.data as { type: CaType })?.type || "" type: (popUp?.ca?.data as { type: CaType })?.type || ""
}); });
@@ -297,7 +297,7 @@ export const ExternalCaModal = ({ popUp, handlePopUpToggle }: Props) => {
configuration: formConfiguration configuration: formConfiguration
}: FormData) => { }: FormData) => {
try { try {
if (!currentWorkspace?.slug) return; if (!currentProject?.slug) return;
let configPayload: any; let configPayload: any;
@@ -321,7 +321,7 @@ export const ExternalCaModal = ({ popUp, handlePopUpToggle }: Props) => {
if (ca) { if (ca) {
await updateMutateAsync({ await updateMutateAsync({
caName: ca.name, caName: ca.name,
projectId: currentWorkspace.id, projectId: currentProject.id,
name, name,
type, type,
status, status,
@@ -330,7 +330,7 @@ export const ExternalCaModal = ({ popUp, handlePopUpToggle }: Props) => {
}); });
} else { } else {
await createMutateAsync({ await createMutateAsync({
projectId: currentWorkspace.id, projectId: currentProject.id,
name, name,
type, type,
status, status,
@@ -5,7 +5,7 @@ import { UpgradePlanModal } from "@app/components/license/UpgradePlanModal";
import { createNotification } from "@app/components/notifications"; import { createNotification } from "@app/components/notifications";
import { ProjectPermissionCan } from "@app/components/permissions"; import { ProjectPermissionCan } from "@app/components/permissions";
import { Button, DeleteActionModal } from "@app/components/v2"; import { Button, DeleteActionModal } from "@app/components/v2";
import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context"; import { ProjectPermissionActions, ProjectPermissionSub, useProject } from "@app/context";
import { CaStatus, CaType, useDeleteCa, useUpdateCa } from "@app/hooks/api"; import { CaStatus, CaType, useDeleteCa, useUpdateCa } from "@app/hooks/api";
import { usePopUp } from "@app/hooks/usePopUp"; import { usePopUp } from "@app/hooks/usePopUp";
@@ -13,7 +13,7 @@ import { ExternalCaModal } from "./ExternalCaModal";
import { ExternalCaTable } from "./ExternalCaTable"; import { ExternalCaTable } from "./ExternalCaTable";
export const ExternalCaSection = () => { export const ExternalCaSection = () => {
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const { mutateAsync: deleteCa } = useDeleteCa(); const { mutateAsync: deleteCa } = useDeleteCa();
const { mutateAsync: updateCa } = useUpdateCa(); const { mutateAsync: updateCa } = useUpdateCa();
@@ -26,9 +26,9 @@ export const ExternalCaSection = () => {
const onRemoveCaSubmit = async (caName: string, type: CaType) => { const onRemoveCaSubmit = async (caName: string, type: CaType) => {
try { try {
if (!currentWorkspace?.id) return; if (!currentProject?.id) return;
await deleteCa({ caName, type, projectId: currentWorkspace.id }); await deleteCa({ caName, type, projectId: currentProject.id });
createNotification({ createNotification({
text: "Successfully deleted CA", text: "Successfully deleted CA",
@@ -54,9 +54,9 @@ export const ExternalCaSection = () => {
status: CaStatus; status: CaStatus;
}) => { }) => {
try { try {
if (!currentWorkspace?.slug) return; if (!currentProject?.slug) return;
await updateCa({ caName: name, type, status, projectId: currentWorkspace.id }); await updateCa({ caName: name, type, status, projectId: currentProject.id });
createNotification({ createNotification({
text: `Successfully ${status === CaStatus.ACTIVE ? "enabled" : "disabled"} CA`, text: `Successfully ${status === CaStatus.ACTIVE ? "enabled" : "disabled"} CA`,
@@ -26,7 +26,7 @@ import {
Tooltip, Tooltip,
Tr Tr
} from "@app/components/v2"; } from "@app/components/v2";
import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context"; import { ProjectPermissionActions, ProjectPermissionSub, useProject } from "@app/context";
import { CaStatus, CaType, useListExternalCasByProjectId } from "@app/hooks/api"; import { CaStatus, CaType, useListExternalCasByProjectId } from "@app/hooks/api";
import { caStatusToNameMap, getCaStatusBadgeVariant } from "@app/hooks/api/ca/constants"; import { caStatusToNameMap, getCaStatusBadgeVariant } from "@app/hooks/api/ca/constants";
import { UsePopUpState } from "@app/hooks/usePopUp"; import { UsePopUpState } from "@app/hooks/usePopUp";
@@ -44,8 +44,8 @@ type Props = {
}; };
export const ExternalCaTable = ({ handlePopUpOpen }: Props) => { export const ExternalCaTable = ({ handlePopUpOpen }: Props) => {
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const { data, isPending } = useListExternalCasByProjectId(currentWorkspace.id); const { data, isPending } = useListExternalCasByProjectId(currentProject.id);
return ( return (
<div> <div>
@@ -14,7 +14,7 @@ import {
SelectItem, SelectItem,
TextArea TextArea
} from "@app/components/v2"; } from "@app/components/v2";
import { useWorkspace } from "@app/context"; import { useProject } from "@app/context";
import { useGetCert, useImportCertificate, useListWorkspacePkiCollections } from "@app/hooks/api"; import { useGetCert, useImportCertificate, useListWorkspacePkiCollections } from "@app/hooks/api";
import { UsePopUpState } from "@app/hooks/usePopUp"; import { UsePopUpState } from "@app/hooks/usePopUp";
@@ -48,13 +48,13 @@ type TCertificateDetails = {
export const CertificateImportModal = ({ popUp, handlePopUpToggle }: Props) => { export const CertificateImportModal = ({ popUp, handlePopUpToggle }: Props) => {
const [certificateDetails, setCertificateDetails] = useState<TCertificateDetails | null>(null); const [certificateDetails, setCertificateDetails] = useState<TCertificateDetails | null>(null);
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const { data: cert } = useGetCert( const { data: cert } = useGetCert(
(popUp?.certificateImport?.data as { serialNumber: string })?.serialNumber || "" (popUp?.certificateImport?.data as { serialNumber: string })?.serialNumber || ""
); );
const { data } = useListWorkspacePkiCollections({ const { data } = useListWorkspacePkiCollections({
workspaceId: currentWorkspace?.id || "" projectId: currentProject?.id || ""
}); });
const { mutateAsync: importCertificate } = useImportCertificate(); const { mutateAsync: importCertificate } = useImportCertificate();
@@ -76,10 +76,10 @@ export const CertificateImportModal = ({ popUp, handlePopUpToggle }: Props) => {
collectionId collectionId
}: FormData) => { }: FormData) => {
try { try {
if (!currentWorkspace?.slug) return; if (!currentProject?.slug) return;
const { serialNumber, certificate, certificateChain, privateKey } = await importCertificate({ const { serialNumber, certificate, certificateChain, privateKey } = await importCertificate({
projectSlug: currentWorkspace.slug, projectSlug: currentProject.slug,
certificatePem, certificatePem,
privateKeyPem, privateKeyPem,
@@ -22,7 +22,7 @@ import {
SelectItem, SelectItem,
Tooltip Tooltip
} from "@app/components/v2"; } from "@app/components/v2";
import { useWorkspace } from "@app/context"; import { useProject } from "@app/context";
import { import {
CaStatus, CaStatus,
useCreateCertificate, useCreateCertificate,
@@ -89,22 +89,22 @@ const CERT_TEMPLATE_NONE_VALUE = "none";
export const CertificateModal = ({ popUp, handlePopUpToggle }: Props) => { export const CertificateModal = ({ popUp, handlePopUpToggle }: Props) => {
const [certificateDetails, setCertificateDetails] = useState<TCertificateDetails | null>(null); const [certificateDetails, setCertificateDetails] = useState<TCertificateDetails | null>(null);
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const { data: cert } = useGetCert( const { data: cert } = useGetCert(
(popUp?.certificate?.data as { serialNumber: string })?.serialNumber || "" (popUp?.certificate?.data as { serialNumber: string })?.serialNumber || ""
); );
const { data: cas } = useListWorkspaceCas({ const { data: cas } = useListWorkspaceCas({
projectSlug: currentWorkspace?.slug ?? "", projectId: currentProject.id,
status: CaStatus.ACTIVE status: CaStatus.ACTIVE
}); });
const { data } = useListWorkspacePkiCollections({ const { data } = useListWorkspacePkiCollections({
workspaceId: currentWorkspace?.id || "" projectId: currentProject?.id || ""
}); });
const { data: templatesData } = useListWorkspaceCertificateTemplates({ const { data: templatesData } = useListWorkspaceCertificateTemplates({
workspaceId: currentWorkspace?.id || "" projectId: currentProject?.id || ""
}); });
const { mutateAsync: createCertificate } = useCreateCertificate(); const { mutateAsync: createCertificate } = useCreateCertificate();
@@ -191,12 +191,12 @@ export const CertificateModal = ({ popUp, handlePopUpToggle }: Props) => {
extendedKeyUsages extendedKeyUsages
}: FormData) => { }: FormData) => {
try { try {
if (!currentWorkspace?.slug) return; if (!currentProject?.slug) return;
const { serialNumber, certificate, certificateChain, privateKey } = await createCertificate({ const { serialNumber, certificate, certificateChain, privateKey } = await createCertificate({
caId: !selectedCertTemplate ? caId : undefined, caId: !selectedCertTemplate ? caId : undefined,
certificateTemplateId: selectedCertTemplate ? selectedCertTemplateId : undefined, certificateTemplateId: selectedCertTemplate ? selectedCertTemplateId : undefined,
projectSlug: currentWorkspace.slug, projectSlug: currentProject.slug,
pkiCollectionId: collectionId, pkiCollectionId: collectionId,
friendlyName, friendlyName,
commonName, commonName,
@@ -4,7 +4,7 @@ import { z } from "zod";
import { createNotification } from "@app/components/notifications"; import { createNotification } from "@app/components/notifications";
import { Button, FormControl, Modal, ModalContent, Select, SelectItem } from "@app/components/v2"; import { Button, FormControl, Modal, ModalContent, Select, SelectItem } from "@app/components/v2";
import { useWorkspace } from "@app/context"; import { useProject } from "@app/context";
import { useRevokeCert } from "@app/hooks/api"; import { useRevokeCert } from "@app/hooks/api";
import { crlReasons } from "@app/hooks/api/certificates/constants"; import { crlReasons } from "@app/hooks/api/certificates/constants";
import { CrlReason } from "@app/hooks/api/certificates/enums"; import { CrlReason } from "@app/hooks/api/certificates/enums";
@@ -35,7 +35,7 @@ type Props = {
}; };
export const CertificateRevocationModal = ({ popUp, handlePopUpToggle }: Props) => { export const CertificateRevocationModal = ({ popUp, handlePopUpToggle }: Props) => {
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const { mutateAsync: revokeCertificate } = useRevokeCert(); const { mutateAsync: revokeCertificate } = useRevokeCert();
const { const {
@@ -49,12 +49,12 @@ export const CertificateRevocationModal = ({ popUp, handlePopUpToggle }: Props)
const onFormSubmit = async ({ revocationReason }: FormData) => { const onFormSubmit = async ({ revocationReason }: FormData) => {
try { try {
if (!currentWorkspace?.slug) return; if (!currentProject?.slug) return;
const { serialNumber } = popUp.revokeCertificate.data as { serialNumber: string }; const { serialNumber } = popUp.revokeCertificate.data as { serialNumber: string };
await revokeCertificate({ await revokeCertificate({
projectSlug: currentWorkspace.slug, projectSlug: currentProject.slug,
serialNumber, serialNumber,
revocationReason revocationReason
}); });
@@ -22,7 +22,7 @@ import {
SelectItem, SelectItem,
Tooltip Tooltip
} from "@app/components/v2"; } from "@app/components/v2";
import { useWorkspace } from "@app/context"; import { useProject } from "@app/context";
import { import {
CaStatus, CaStatus,
useCreateCertTemplate, useCreateCertTemplate,
@@ -82,7 +82,7 @@ type Props = {
}; };
export const CertificateTemplateModal = ({ popUp, handlePopUpToggle, caId }: Props) => { export const CertificateTemplateModal = ({ popUp, handlePopUpToggle, caId }: Props) => {
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const { data: ca } = useGetCaById(caId); const { data: ca } = useGetCaById(caId);
@@ -91,12 +91,12 @@ export const CertificateTemplateModal = ({ popUp, handlePopUpToggle, caId }: Pro
); );
const { data: cas } = useListWorkspaceCas({ const { data: cas } = useListWorkspaceCas({
projectSlug: currentWorkspace?.slug ?? "", projectId: currentProject?.id,
status: CaStatus.ACTIVE status: CaStatus.ACTIVE
}); });
const { data: collectionsData } = useListWorkspacePkiCollections({ const { data: collectionsData } = useListWorkspacePkiCollections({
workspaceId: currentWorkspace?.id || "" projectId: currentProject?.id || ""
}); });
const { mutateAsync: createCertTemplate } = useCreateCertTemplate(); const { mutateAsync: createCertTemplate } = useCreateCertTemplate();
@@ -155,7 +155,7 @@ export const CertificateTemplateModal = ({ popUp, handlePopUpToggle, caId }: Pro
keyUsages, keyUsages,
extendedKeyUsages extendedKeyUsages
}: FormData) => { }: FormData) => {
if (!currentWorkspace?.id) { if (!currentProject?.id) {
return; return;
} }
@@ -163,7 +163,7 @@ export const CertificateTemplateModal = ({ popUp, handlePopUpToggle, caId }: Pro
if (certTemplate) { if (certTemplate) {
await updateCertTemplate({ await updateCertTemplate({
id: certTemplate.id, id: certTemplate.id,
projectId: currentWorkspace.id, projectId: currentProject.id,
pkiCollectionId: collectionId, pkiCollectionId: collectionId,
caId, caId,
name, name,
@@ -184,7 +184,7 @@ export const CertificateTemplateModal = ({ popUp, handlePopUpToggle, caId }: Pro
}); });
} else { } else {
await createCertTemplate({ await createCertTemplate({
projectId: currentWorkspace.id, projectId: currentProject.id,
pkiCollectionId: collectionId, pkiCollectionId: collectionId,
caId, caId,
name, name,
@@ -12,7 +12,7 @@ import { DeleteActionModal, IconButton } from "@app/components/v2";
import { import {
ProjectPermissionPkiTemplateActions, ProjectPermissionPkiTemplateActions,
ProjectPermissionSub, ProjectPermissionSub,
useWorkspace useProject
} from "@app/context"; } from "@app/context";
import { usePopUp } from "@app/hooks"; import { usePopUp } from "@app/hooks";
import { useDeleteCertTemplate } from "@app/hooks/api"; import { useDeleteCertTemplate } from "@app/hooks/api";
@@ -33,18 +33,18 @@ export const CertificateTemplatesSection = ({ caId }: Props) => {
"upgradePlan" "upgradePlan"
] as const); ] as const);
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const { mutateAsync: deleteCertTemplate } = useDeleteCertTemplate(); const { mutateAsync: deleteCertTemplate } = useDeleteCertTemplate();
const onRemoveCertificateTemplateSubmit = async (id: string) => { const onRemoveCertificateTemplateSubmit = async (id: string) => {
if (!currentWorkspace?.id) { if (!currentProject?.id) {
return; return;
} }
try { try {
await deleteCertTemplate({ await deleteCertTemplate({
id, id,
projectId: currentWorkspace.id projectId: currentProject.id
}); });
createNotification({ createNotification({
@@ -7,7 +7,7 @@ import { Button, DeleteActionModal } from "@app/components/v2";
import { import {
ProjectPermissionCertificateActions, ProjectPermissionCertificateActions,
ProjectPermissionSub, ProjectPermissionSub,
useWorkspace useProject
} from "@app/context"; } from "@app/context";
import { useDeleteCert } from "@app/hooks/api"; import { useDeleteCert } from "@app/hooks/api";
import { usePopUp } from "@app/hooks/usePopUp"; import { usePopUp } from "@app/hooks/usePopUp";
@@ -19,7 +19,7 @@ import { CertificateRevocationModal } from "./CertificateRevocationModal";
import { CertificatesTable } from "./CertificatesTable"; import { CertificatesTable } from "./CertificatesTable";
export const CertificatesSection = () => { export const CertificatesSection = () => {
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const { mutateAsync: deleteCert } = useDeleteCert(); const { mutateAsync: deleteCert } = useDeleteCert();
const { popUp, handlePopUpOpen, handlePopUpClose, handlePopUpToggle } = usePopUp([ const { popUp, handlePopUpOpen, handlePopUpClose, handlePopUpToggle } = usePopUp([
@@ -32,9 +32,9 @@ export const CertificatesSection = () => {
const onRemoveCertificateSubmit = async (serialNumber: string) => { const onRemoveCertificateSubmit = async (serialNumber: string) => {
try { try {
if (!currentWorkspace?.slug) return; if (!currentProject?.slug) return;
await deleteCert({ serialNumber, projectSlug: currentWorkspace.slug }); await deleteCert({ serialNumber, projectSlug: currentProject.slug });
createNotification({ createNotification({
text: "Successfully deleted certificate", text: "Successfully deleted certificate",
@@ -33,7 +33,7 @@ import {
import { import {
ProjectPermissionCertificateActions, ProjectPermissionCertificateActions,
ProjectPermissionSub, ProjectPermissionSub,
useWorkspace useProject
} from "@app/context"; } from "@app/context";
import { useListWorkspaceCertificates } from "@app/hooks/api"; import { useListWorkspaceCertificates } from "@app/hooks/api";
import { caSupportsCapability } from "@app/hooks/api/ca/constants"; import { caSupportsCapability } from "@app/hooks/api/ca/constants";
@@ -62,15 +62,15 @@ export const CertificatesTable = ({ handlePopUpOpen }: Props) => {
const [page, setPage] = useState(1); const [page, setPage] = useState(1);
const [perPage, setPerPage] = useState(PER_PAGE_INIT); const [perPage, setPerPage] = useState(PER_PAGE_INIT);
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const { data, isPending } = useListWorkspaceCertificates({ const { data, isPending } = useListWorkspaceCertificates({
projectId: currentWorkspace?.slug ?? "", projectId: currentProject?.slug ?? "",
offset: (page - 1) * perPage, offset: (page - 1) * perPage,
limit: perPage limit: perPage
}); });
// Fetch CA data to determine capabilities // Fetch CA data to determine capabilities
const { data: caData } = useListCasByProjectId(currentWorkspace?.id ?? ""); const { data: caData } = useListCasByProjectId(currentProject?.id ?? "");
// Create mapping from caId to CA type for capability checking // Create mapping from caId to CA type for capability checking
const caCapabilityMap = useMemo(() => { const caCapabilityMap = useMemo(() => {
@@ -16,7 +16,7 @@ import {
Tooltip Tooltip
} from "@app/components/v2"; } from "@app/components/v2";
import { ROUTE_PATHS } from "@app/const/routes"; import { ROUTE_PATHS } from "@app/const/routes";
import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context"; import { ProjectPermissionActions, ProjectPermissionSub, useProject } from "@app/context";
import { useDeletePkiCollection, useGetPkiCollectionById } from "@app/hooks/api"; import { useDeletePkiCollection, useGetPkiCollectionById } from "@app/hooks/api";
import { PkiItemType } from "@app/hooks/api/pkiCollections/constants"; import { PkiItemType } from "@app/hooks/api/pkiCollections/constants";
import { usePopUp } from "@app/hooks/usePopUp"; import { usePopUp } from "@app/hooks/usePopUp";
@@ -30,8 +30,8 @@ export const PkiCollectionPage = () => {
from: ROUTE_PATHS.CertManager.PkiCollectionDetailsByIDPage.id from: ROUTE_PATHS.CertManager.PkiCollectionDetailsByIDPage.id
}); });
const collectionId = params.collectionId as string; const collectionId = params.collectionId as string;
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const projectId = currentWorkspace?.id || ""; const projectId = currentProject?.id || "";
const { data } = useGetPkiCollectionById(collectionId); const { data } = useGetPkiCollectionById(collectionId);
const { mutateAsync: deletePkiCollection } = useDeletePkiCollection(); const { mutateAsync: deletePkiCollection } = useDeletePkiCollection();
@@ -4,7 +4,7 @@ import { z } from "zod";
import { createNotification } from "@app/components/notifications"; import { createNotification } from "@app/components/notifications";
import { Button, FormControl, Modal, ModalContent, Select, SelectItem } from "@app/components/v2"; import { Button, FormControl, Modal, ModalContent, Select, SelectItem } from "@app/components/v2";
import { useWorkspace } from "@app/context"; import { useProject } from "@app/context";
import { import {
CaStatus, CaStatus,
useAddItemToPkiCollection, useAddItemToPkiCollection,
@@ -41,15 +41,15 @@ export const AddPkiCollectionItemModal = ({
popUp, popUp,
handlePopUpToggle handlePopUpToggle
}: Props) => { }: Props) => {
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const { data: cas } = useListWorkspaceCas({ const { data: cas } = useListWorkspaceCas({
projectSlug: currentWorkspace?.slug || "", projectId: currentProject?.id || "",
status: CaStatus.ACTIVE status: CaStatus.ACTIVE
}); });
const { data } = useListWorkspaceCertificates({ const { data } = useListWorkspaceCertificates({
projectId: currentWorkspace?.slug || "", projectId: currentProject?.slug || "",
offset: 0, offset: 0,
limit: 25 limit: 25
}); });
@@ -19,7 +19,7 @@ import { ROUTE_PATHS } from "@app/const/routes";
import { import {
ProjectPermissionPkiSubscriberActions, ProjectPermissionPkiSubscriberActions,
ProjectPermissionSub, ProjectPermissionSub,
useWorkspace useProject
} from "@app/context"; } from "@app/context";
import { useDeletePkiSubscriber, useGetPkiSubscriber } from "@app/hooks/api"; import { useDeletePkiSubscriber, useGetPkiSubscriber } from "@app/hooks/api";
import { usePopUp } from "@app/hooks/usePopUp"; import { usePopUp } from "@app/hooks/usePopUp";
@@ -29,8 +29,8 @@ import { PkiSubscriberCertificatesSection, PkiSubscriberDetailsSection } from ".
const Page = () => { const Page = () => {
const navigate = useNavigate(); const navigate = useNavigate();
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const projectId = currentWorkspace.id; const projectId = currentProject.id;
const subscriberName = useParams({ const subscriberName = useParams({
from: ROUTE_PATHS.CertManager.PkiSubscriberDetailsByIDPage.id, from: ROUTE_PATHS.CertManager.PkiSubscriberDetailsByIDPage.id,
select: (el) => el.subscriberName select: (el) => el.subscriberName
@@ -28,7 +28,7 @@ import {
ProjectPermissionPkiSubscriberActions, ProjectPermissionPkiSubscriberActions,
ProjectPermissionSub, ProjectPermissionSub,
useProjectPermission, useProjectPermission,
useWorkspace useProject
} from "@app/context"; } from "@app/context";
import { useGetPkiSubscriberCertificates } from "@app/hooks/api"; import { useGetPkiSubscriberCertificates } from "@app/hooks/api";
import { caSupportsCapability } from "@app/hooks/api/ca/constants"; import { caSupportsCapability } from "@app/hooks/api/ca/constants";
@@ -45,8 +45,8 @@ type Props = {
const PER_PAGE_INIT = 25; const PER_PAGE_INIT = 25;
export const PkiSubscriberCertificatesTable = ({ subscriberName, handlePopUpOpen }: Props) => { export const PkiSubscriberCertificatesTable = ({ subscriberName, handlePopUpOpen }: Props) => {
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const projectId = currentWorkspace.id; const projectId = currentProject.id;
const { permission } = useProjectPermission(); const { permission } = useProjectPermission();
const [page, setPage] = useState(1); const [page, setPage] = useState(1);
const [perPage, setPerPage] = useState(PER_PAGE_INIT); const [perPage, setPerPage] = useState(PER_PAGE_INIT);
@@ -64,7 +64,7 @@ export const PkiSubscriberCertificatesTable = ({ subscriberName, handlePopUpOpen
); );
// Fetch CA data to determine capabilities // Fetch CA data to determine capabilities
const { data: caData } = useListCasByProjectId(currentWorkspace.id); const { data: caData } = useListCasByProjectId(currentProject.id);
// Create mapping from caId to CA type for capability checking // Create mapping from caId to CA type for capability checking
const caCapabilityMap = useMemo(() => { const caCapabilityMap = useMemo(() => {
@@ -17,7 +17,7 @@ import {
ProjectPermissionPkiSubscriberActions, ProjectPermissionPkiSubscriberActions,
ProjectPermissionSub, ProjectPermissionSub,
useProjectPermission, useProjectPermission,
useWorkspace useProject
} from "@app/context"; } from "@app/context";
import { useTimedReset } from "@app/hooks"; import { useTimedReset } from "@app/hooks";
import { import {
@@ -44,8 +44,8 @@ type TCertificateDetails = {
}; };
export const PkiSubscriberDetailsSection = ({ subscriberName, handlePopUpOpen }: Props) => { export const PkiSubscriberDetailsSection = ({ subscriberName, handlePopUpOpen }: Props) => {
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const projectId = currentWorkspace.id; const projectId = currentProject.id;
const { permission } = useProjectPermission(); const { permission } = useProjectPermission();
const [certificateDetails, setCertificateDetails] = useState<TCertificateDetails | null>(null); const [certificateDetails, setCertificateDetails] = useState<TCertificateDetails | null>(null);
const [isModalOpen, setIsModalOpen] = useState(false); const [isModalOpen, setIsModalOpen] = useState(false);
@@ -22,7 +22,7 @@ import {
TabPanel, TabPanel,
Tabs Tabs
} from "@app/components/v2"; } from "@app/components/v2";
import { useWorkspace } from "@app/context"; import { useProject } from "@app/context";
import { import {
CaType, CaType,
useCreatePkiSubscriber, useCreatePkiSubscriber,
@@ -158,8 +158,8 @@ const schema = z
export type FormData = z.infer<typeof schema>; export type FormData = z.infer<typeof schema>;
export const PkiSubscriberModal = ({ popUp, handlePopUpToggle }: Props) => { export const PkiSubscriberModal = ({ popUp, handlePopUpToggle }: Props) => {
const { currentWorkspace } = useWorkspace(); const { currentProject } = useProject();
const projectId = currentWorkspace.id; const projectId = currentProject.id;
const { data: subscribers } = useListWorkspacePkiSubscribers(projectId); const { data: subscribers } = useListWorkspacePkiSubscribers(projectId);
const { data: cas } = useListCasByProjectId(projectId); const { data: cas } = useListCasByProjectId(projectId);
const [tabValue, setTabValue] = useState<FormTab>(FormTab.Configuration); const [tabValue, setTabValue] = useState<FormTab>(FormTab.Configuration);

Some files were not shown because too many files have changed in this diff Show More