{"version":3,"file":"useRbac.mjs","sources":["../../../../../../../../web/src/adminPortal/utils/useRbac.ts"],"sourcesContent":["import useSWR from 'swr';\n\nimport { useSelf } from './useSelf';\nimport { useStytchClient } from './useStytchClient';\n\ntype RbacMap = {\n  'stytch.organization': [\n    'update.info.name',\n    'update.info.slug',\n    'update.info.logo-url',\n    'update.settings.allowed-auth-methods',\n    'update.settings.allowed-mfa-methods',\n    'update.settings.email-jit-provisioning',\n    'update.settings.email-invites',\n    'update.settings.allowed-domains',\n    'update.settings.default-sso-connection',\n    'update.settings.sso-jit-provisioning',\n    'update.settings.mfa-policy',\n    'update.settings.implicit-roles',\n    'update.settings.oauth-tenant-jit-provisioning',\n    'update.settings.allowed-oauth-tenants',\n    'delete',\n  ];\n  'stytch.member': [\n    'create',\n    'update.info.name',\n    'update.info.email',\n    'update.info.untrusted-metadata',\n    'update.info.mfa-phone',\n    'update.info.delete.mfa-phone',\n    'update.info.delete.mfa-totp',\n    'update.info.delete.password',\n    'update.settings.is-breakglass',\n    'update.settings.mfa-enrolled',\n    'update.settings.default-mfa-method',\n    'update.settings.roles',\n    'search',\n    'delete',\n    'revoke-sessions',\n  ];\n  'stytch.sso': ['create', 'get', 'update', 'delete'];\n  'stytch.self': [\n    'update.info.name',\n    'update.info.untrusted-metadata',\n    'update.info.mfa-phone',\n    'update.info.delete.mfa-phone',\n    'update.info.delete.password',\n    'update.info.delete.mfa-totp',\n    'update.settings.mfa-enrolled',\n    'update.settings.default-mfa-method',\n    'delete',\n    'revoke-sessions',\n  ];\n  'stytch.scim': ['create', 'get', 'update', 'delete'];\n  'stytch.custom-org-roles': ['create', 'get', 'update', 'delete'];\n};\n\ntype RbacResourceId = keyof RbacMap;\n\ntype RbacAction<TResourceId extends RbacResourceId> = RbacMap[TResourceId][number];\n\nexport const useRbac = <TResourceId extends RbacResourceId>(\n  resourceId: TResourceId,\n  action: RbacAction<TResourceId>,\n) => {\n  const client = useStytchClient();\n  const { self } = useSelf();\n  const memberId = self?.member_id;\n\n  return useSWR(\n    () => memberId && ['rbac', memberId, resourceId, action],\n    () => client.rbac.isAuthorized(resourceId, action),\n    {\n      keepPreviousData: true,\n    },\n  );\n};\n"],"names":["useRbac","resourceId","action","client","useStytchClient","self","useSelf","memberId","member_id","useSWR","rbac","isAuthorized","keepPreviousData"],"mappings":";;;;AA6DO,MAAMA,OAAAA,GAAU,CACrBC,UAAAA,EACAC,MAAAA,GAAAA;AAEA,IAAA,MAAMC,MAAAA,GAASC,eAAAA,EAAAA;IACf,MAAM,EAAEC,IAAI,EAAE,GAAGC,OAAAA,EAAAA;AACjB,IAAA,MAAMC,WAAWF,IAAAA,EAAMG,SAAAA;IAEvB,OAAOC,MAAAA,CACL,IAAMF,QAAAA,IAAY;AAAC,YAAA,MAAA;AAAQA,YAAAA,QAAAA;AAAUN,YAAAA,UAAAA;AAAYC,YAAAA;AAAO,SAAA,EACxD,IAAMC,MAAAA,CAAOO,IAAI,CAACC,YAAY,CAACV,YAAYC,MAAAA,CAAAA,EAC3C;QACEU,gBAAAA,EAAkB;AACpB,KAAA,CAAA;AAEJ;;;;"}