{"version":3,"file":"SCIMConnectionTokenRotationSection.mjs","sources":["../../../../../../../../web/src/adminPortal/scim/SCIMConnectionTokenRotationSection.tsx"],"sourcesContent":["import Add from '@mui/icons-material/Add';\nimport { SCIMConnection, SCIMConnectionWithNextBearerToken } from '@stytch/core/public';\nimport React, { useState } from 'react';\nimport { useSWRConfig } from 'swr';\n\nimport { Button } from '../components/Button';\nimport { Checkbox } from '../components/Checkbox';\nimport { FlexBox } from '../components/FlexBox';\nimport { Modal, useModalState } from '../components/Modal';\nimport { SCIMFields } from '../components/ScimFields';\nimport { Table } from '../components/Table';\nimport { Typography } from '../components/Typography';\nimport { NO_VALUE } from '../utils/noValue';\nimport { prependAsterisks } from '../utils/prependAsterisks';\nimport { useMutateWithToast } from '../utils/useMutateWithToast';\nimport { useRbac } from '../utils/useRbac';\nimport { scimGetConnectionKey } from '../utils/useScimConnection';\nimport { useStytchClient } from '../utils/useStytchClient';\nimport { ConnectionWithNextBearerTokenKey, DEFAULT_HEADER_BEARER_TOKEN_LABEL, Field, getFieldBy } from './scimInfo';\n\nconst tokenRotationItemRenderers = ({\n  isCurrent,\n  tokenTitle,\n  tokenLastFour,\n  tokenExpiresAt,\n}: {\n  isCurrent: boolean;\n  tokenTitle: string;\n  tokenLastFour: string | undefined;\n  tokenExpiresAt: string | undefined;\n}) => [\n  {\n    title: `${isCurrent ? 'Current' : 'Next'} ${tokenTitle}`,\n    getValue: () => {\n      return <Typography variant=\"body2\">{tokenLastFour ? prependAsterisks(tokenLastFour) : NO_VALUE}</Typography>;\n    },\n    width: 300,\n  },\n  {\n    title: 'Expires',\n    getValue: () => {\n      return (\n        <Typography variant=\"body2\">{tokenExpiresAt ? new Date(tokenExpiresAt).toLocaleString() : NO_VALUE}</Typography>\n      );\n    },\n  },\n];\n\nconst tokenRotationKeyExtractor = (item: SCIMConnection): string => item.connection_id;\n\nconst useMutateCancelTokenRotation = () => {\n  const client = useStytchClient();\n  const { mutate: mutateSWR } = useSWRConfig();\n\n  return useMutateWithToast(async (connectionId: string) => {\n    return await mutateSWR(\n      scimGetConnectionKey(connectionId),\n      async () => {\n        const result = await client.scim.rotateCancel(connectionId);\n        return result.connection;\n      },\n      {\n        populateCache: true,\n        revalidate: false,\n      },\n    );\n  });\n};\n\nconst ManageTokenRotation = ({ connection }: { connection: SCIMConnection }) => {\n  const client = useStytchClient();\n  const { mutate: mutateSWR } = useSWRConfig();\n  const [isCancelAction, setIsCancelAction] = useState<boolean>();\n\n  const bearerTokenField = getFieldBy({ idp: connection.identity_provider, key: 'bearer_token' });\n  const bearerTokenFieldLabel = bearerTokenField?.label ?? DEFAULT_HEADER_BEARER_TOKEN_LABEL;\n\n  const { mutate: cancelTokenRotation } = useMutateCancelTokenRotation();\n\n  const { mutate: completeTokenRotation } = useMutateWithToast(async (connectionId: string) => {\n    return await mutateSWR(\n      scimGetConnectionKey(connectionId),\n      async () => {\n        const result = await client.scim.rotateComplete(connectionId);\n        return result.connection;\n      },\n      {\n        populateCache: true,\n        revalidate: false,\n      },\n    );\n  });\n\n  const tokenRotationModalProps = useModalState(async () => {\n    const connectionId = connection.connection_id;\n    if (isCancelAction) {\n      await cancelTokenRotation(connectionId);\n    } else {\n      await completeTokenRotation(connectionId);\n    }\n\n    return tokenRotationModalProps.close();\n  });\n\n  const {\n    bearer_token_last_four: currentTokenLastFour,\n    next_bearer_token_last_four: nextTokenLastFour,\n    next_bearer_token_expires_at: nextTokenExpiresAt,\n  } = connection;\n\n  const nextTokenItemRenderers = tokenRotationItemRenderers({\n    isCurrent: false,\n    tokenTitle: bearerTokenFieldLabel,\n    tokenLastFour: nextTokenLastFour,\n    tokenExpiresAt: nextTokenExpiresAt,\n  });\n\n  const handleActionRotation = ({ isCancel }: { isCancel: boolean }) => {\n    setIsCancelAction(isCancel);\n    tokenRotationModalProps.open();\n  };\n\n  const warningText = isCancelAction\n    ? `The token ${prependAsterisks(nextTokenLastFour!)} will be deactivated and no longer usable.`\n    : `The token ${prependAsterisks(\n        currentTokenLastFour,\n      )} will be deactivated and no longer usable. It will be replaced with the token ${prependAsterisks(\n        nextTokenLastFour!,\n      )}.`;\n  const confirmationText = isCancelAction\n    ? 'Confirm that you are not using this token before continuing.'\n    : `Make sure you are only using the token ${prependAsterisks(nextTokenLastFour!)} before completing rotation.`;\n\n  return (\n    <>\n      <Table\n        titleVariant=\"caption\"\n        itemRenderer={nextTokenItemRenderers}\n        items={[connection]}\n        rowKeyExtractor={tokenRotationKeyExtractor}\n        disableBottomBorder={true}\n      />\n      <Modal\n        {...tokenRotationModalProps}\n        title={`${isCancelAction ? 'Cancel' : 'Complete'} token rotation?`}\n        confirmButtonText={`${isCancelAction ? 'Cancel' : 'Complete'} rotation`}\n        warning\n      >\n        <FlexBox flexDirection=\"column\" gap={2}>\n          <Typography>{warningText}</Typography>\n          <Typography>{confirmationText}</Typography>\n        </FlexBox>\n      </Modal>\n      <FlexBox flexDirection=\"row\" gap={2}>\n        <Button compact variant=\"ghost\" onClick={() => handleActionRotation({ isCancel: true })} warning>\n          Cancel rotation\n        </Button>\n        <Button compact variant=\"ghost\" onClick={() => handleActionRotation({ isCancel: false })}>\n          Complete rotation\n        </Button>\n      </FlexBox>\n    </>\n  );\n};\n\nconst StartTokenRotation = ({\n  connection,\n  handleRotation,\n}: {\n  connection: SCIMConnection;\n  handleRotation: (connection: SCIMConnectionWithNextBearerToken | undefined) => void;\n}) => {\n  const client = useStytchClient();\n  const { mutate: mutateSWR } = useSWRConfig();\n\n  const { mutate: startTokenRotation } = useMutateWithToast(async (connectionId: string) => {\n    return await mutateSWR(\n      scimGetConnectionKey(connectionId),\n      async () => {\n        const result = await client.scim.rotateStart(connectionId);\n\n        return {\n          ...result.connection,\n          next_bearer_token_last_four: result.connection.next_bearer_token.slice(-4),\n        };\n      },\n      {\n        populateCache: true,\n        revalidate: false,\n      },\n    );\n  });\n\n  const handleActionClick = () => {\n    startTokenRotation(connection.connection_id).then((result) => {\n      handleRotation(result);\n    });\n  };\n\n  return (\n    <>\n      <Button compact variant=\"ghost\" startIcon={<Add />} onClick={handleActionClick}>\n        Start token rotation\n      </Button>\n    </>\n  );\n};\n\nexport const TokenRotationSection = ({ connection }: { connection: SCIMConnection }) => {\n  const { data: canUpdateScim } = useRbac('stytch.scim', 'update');\n  const canRotateToken = canUpdateScim ?? false;\n  const { mutate: cancelTokenRotation } = useMutateCancelTokenRotation();\n\n  const canStartTokenRotation = !connection.next_bearer_token_last_four;\n\n  const bearerTokenField = getFieldBy({ idp: connection.identity_provider, key: 'bearer_token' });\n  const bearerTokenFieldLabel = bearerTokenField?.label ?? DEFAULT_HEADER_BEARER_TOKEN_LABEL;\n  const currentTokenItemRenderers = tokenRotationItemRenderers({\n    isCurrent: true,\n    tokenTitle: bearerTokenFieldLabel,\n    tokenLastFour: connection.bearer_token_last_four,\n    tokenExpiresAt: connection.bearer_token_expires_at,\n  });\n\n  const [hasUserConfirmedCopy, setHasUserConfirmedCopy] = useState(false);\n  const [connectionWithNextToken, setConnectionWithNextToken] = useState<\n    SCIMConnectionWithNextBearerToken | undefined\n  >();\n\n  const nextTokenField: Field<ConnectionWithNextBearerTokenKey> = {\n    label: `Click to copy your new ${bearerTokenFieldLabel}`,\n    scimConnectionKey: 'next_bearer_token',\n    isCopyable: true,\n  };\n\n  const handleRotation = (connection: SCIMConnectionWithNextBearerToken | undefined) => {\n    setConnectionWithNextToken(connection);\n    open();\n  };\n\n  const handleClose = () => {\n    cancelTokenRotation(connection.connection_id);\n    close();\n  };\n\n  const { open, close, ...props } = useModalState(async () => {\n    setHasUserConfirmedCopy(false);\n\n    return close();\n  });\n\n  return (\n    <FlexBox flexDirection=\"column\" gap={2}>\n      <Typography variant=\"body2\">\n        For security reasons, you may only view the last 4 digits of the token. If you have lost your token, create a\n        replacement by starting a token rotation.\n      </Typography>\n      <Table\n        titleVariant=\"caption\"\n        itemRenderer={currentTokenItemRenderers}\n        items={[connection]}\n        rowKeyExtractor={tokenRotationKeyExtractor}\n        disableBottomBorder={true}\n      />\n      <Modal\n        {...props}\n        title=\"Start HTTP Header Bearer Token Rotation\"\n        confirmButtonText=\"Done\"\n        disableConfirm={!hasUserConfirmedCopy}\n        close={handleClose}\n        keepOpenOnConfirm\n      >\n        <FlexBox flexDirection=\"column\" gap={2}>\n          <Typography>\n            You will not be able to see the full token again. Make sure to copy your token to your IdP.\n          </Typography>\n          {connectionWithNextToken && <SCIMFields fields={[nextTokenField]} connection={connectionWithNextToken} />}\n          <Checkbox\n            label=\"I have copied the token to my IdP.\"\n            checked={hasUserConfirmedCopy}\n            onClick={(value) => setHasUserConfirmedCopy(value)}\n          />\n        </FlexBox>\n      </Modal>\n      {canRotateToken &&\n        (canStartTokenRotation ? (\n          <StartTokenRotation connection={connection} handleRotation={handleRotation} />\n        ) : (\n          <ManageTokenRotation connection={connection} />\n        ))}\n    </FlexBox>\n  );\n};\n"],"names":["tokenRotationItemRenderers","isCurrent","tokenTitle","tokenLastFour","tokenExpiresAt","title","getValue","React","Typography","variant","prependAsterisks","NO_VALUE","width","Date","toLocaleString","tokenRotationKeyExtractor","item","connection_id","useMutateCancelTokenRotation","client","useStytchClient","mutate","mutateSWR","useSWRConfig","useMutateWithToast","connectionId","scimGetConnectionKey","result","scim","rotateCancel","connection","populateCache","revalidate","ManageTokenRotation","isCancelAction","setIsCancelAction","useState","bearerTokenField","getFieldBy","idp","identity_provider","key","bearerTokenFieldLabel","label","DEFAULT_HEADER_BEARER_TOKEN_LABEL","cancelTokenRotation","completeTokenRotation","rotateComplete","tokenRotationModalProps","useModalState","close","bearer_token_last_four","currentTokenLastFour","next_bearer_token_last_four","nextTokenLastFour","next_bearer_token_expires_at","nextTokenExpiresAt","nextTokenItemRenderers","handleActionRotation","isCancel","open","warningText","confirmationText","Table","titleVariant","itemRenderer","items","rowKeyExtractor","disableBottomBorder","Modal","confirmButtonText","warning","FlexBox","flexDirection","gap","Button","compact","onClick","StartTokenRotation","handleRotation","startTokenRotation","rotateStart","next_bearer_token","slice","handleActionClick","then","startIcon","Add","TokenRotationSection","data","canUpdateScim","useRbac","canRotateToken","canStartTokenRotation","currentTokenItemRenderers","bearer_token_expires_at","hasUserConfirmedCopy","setHasUserConfirmedCopy","connectionWithNextToken","setConnectionWithNextToken","nextTokenField","scimConnectionKey","isCopyable","handleClose","props","disableConfirm","keepOpenOnConfirm","SCIMFields","fields","Checkbox","checked","value"],"mappings":"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"}