{"version":3,"file":"deriveState.mjs","names":[],"sources":["../src/deriveState.ts"],"sourcesContent":["import type {\n  InitialState,\n  JwtPayload,\n  OrganizationCustomPermissionKey,\n  OrganizationCustomRoleKey,\n  OrganizationResource,\n  Resources,\n  SignedInSessionResource,\n  UserResource,\n} from './types';\n\n// We use the ReturnType of deriveFromSsrInitialState, which in turn uses the ReturnType of deriveFromClientSideState,\n// to ensure these stay in sync without having to manually type them out.\nexport type DeriveStateReturnType = ReturnType<typeof deriveFromSsrInitialState>;\n\n/**\n * Derives authentication state based on the current rendering context (SSR or client-side).\n */\nexport const deriveState = (\n  clerkOperational: boolean,\n  state: Resources,\n  initialState: InitialState | undefined,\n): DeriveStateReturnType => {\n  if (!clerkOperational && initialState) {\n    return deriveFromSsrInitialState(initialState);\n  }\n  return deriveFromClientSideState(state);\n};\n\n// We use the ReturnType of deriveFromClientSideState to ensure these stay in sync\nexport const deriveFromSsrInitialState = (initialState: InitialState): ReturnType<typeof deriveFromClientSideState> => {\n  const userId = initialState.userId;\n  const user = initialState.user as UserResource;\n  const sessionId = initialState.sessionId;\n  const sessionStatus = initialState.sessionStatus;\n  const sessionClaims = initialState.sessionClaims;\n  const session = initialState.session as SignedInSessionResource;\n  const organization = initialState.organization as OrganizationResource;\n  const orgId = initialState.orgId;\n  const orgRole = initialState.orgRole as OrganizationCustomRoleKey;\n  const orgPermissions = initialState.orgPermissions as OrganizationCustomPermissionKey[];\n  const orgSlug = initialState.orgSlug;\n  const actor = initialState.actor;\n  const factorVerificationAge = initialState.factorVerificationAge;\n\n  return {\n    userId,\n    user,\n    sessionId,\n    session,\n    sessionStatus,\n    sessionClaims,\n    organization,\n    orgId,\n    orgRole,\n    orgPermissions,\n    orgSlug,\n    actor,\n    factorVerificationAge,\n  };\n};\n\nexport const deriveFromClientSideState = (state: Resources) => {\n  const userId: string | null | undefined = state.user ? state.user.id : state.user;\n  const user = state.user;\n  const sessionId: string | null | undefined = state.session ? state.session.id : state.session;\n  const session = state.session;\n  const sessionStatus = state.session?.status;\n  const sessionClaims: JwtPayload | null | undefined = state.session\n    ? state.session.lastActiveToken?.jwt?.claims\n    : null;\n  const factorVerificationAge: [number, number] | null = state.session ? state.session.factorVerificationAge : null;\n  const actor = session?.actor;\n  const organization = state.organization;\n  const orgId: string | null | undefined = state.organization ? state.organization.id : state.organization;\n  const orgSlug = organization?.slug;\n  const membership = organization\n    ? user?.organizationMemberships?.find(om => om.organization.id === orgId)\n    : organization;\n  const orgPermissions = membership ? membership.permissions : membership;\n  const orgRole = membership ? membership.role : membership;\n\n  return {\n    userId,\n    user,\n    sessionId,\n    session,\n    sessionStatus,\n    sessionClaims,\n    organization,\n    orgId,\n    orgRole,\n    orgSlug,\n    orgPermissions,\n    actor,\n    factorVerificationAge,\n  };\n};\n"],"mappings":";;;;AAkBA,MAAa,eACX,kBACA,OACA,iBAC0B;CAC1B,IAAI,CAAC,oBAAoB,cACvB,OAAO,0BAA0B,YAAY;CAE/C,OAAO,0BAA0B,KAAK;AACxC;AAGA,MAAa,6BAA6B,iBAA6E;CACrH,MAAM,SAAS,aAAa;CAC5B,MAAM,OAAO,aAAa;CAC1B,MAAM,YAAY,aAAa;CAC/B,MAAM,gBAAgB,aAAa;CACnC,MAAM,gBAAgB,aAAa;CAUnC,OAAO;EACL;EACA;EACA;EACA,SAbc,aAAa;EAc3B;EACA;EACA,cAfmB,aAAa;EAgBhC,OAfY,aAAa;EAgBzB,SAfc,aAAa;EAgB3B,gBAfqB,aAAa;EAgBlC,SAfc,aAAa;EAgB3B,OAfY,aAAa;EAgBzB,uBAf4B,aAAa;CAgB3C;AACF;AAEA,MAAa,6BAA6B,UAAqB;CAC7D,MAAM,SAAoC,MAAM,OAAO,MAAM,KAAK,KAAK,MAAM;CAC7E,MAAM,OAAO,MAAM;CACnB,MAAM,YAAuC,MAAM,UAAU,MAAM,QAAQ,KAAK,MAAM;CACtF,MAAM,UAAU,MAAM;CACtB,MAAM,gBAAgB,MAAM,SAAS;CACrC,MAAM,gBAA+C,MAAM,UACvD,MAAM,QAAQ,iBAAiB,KAAK,SACpC;CACJ,MAAM,wBAAiD,MAAM,UAAU,MAAM,QAAQ,wBAAwB;CAC7G,MAAM,QAAQ,SAAS;CACvB,MAAM,eAAe,MAAM;CAC3B,MAAM,QAAmC,MAAM,eAAe,MAAM,aAAa,KAAK,MAAM;CAC5F,MAAM,UAAU,cAAc;CAC9B,MAAM,aAAa,eACf,MAAM,yBAAyB,MAAK,OAAM,GAAG,aAAa,OAAO,KAAK,IACtE;CACJ,MAAM,iBAAiB,aAAa,WAAW,cAAc;CAG7D,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAXc,aAAa,WAAW,OAAO;EAY7C;EACA;EACA;EACA;CACF;AACF"}