user.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import { Brand } from './helpers/brand'
  2. export type RefProviders = {
  3. mendeley?: boolean
  4. zotero?: boolean
  5. }
  6. export type UserId = Brand<string, 'UserId'>
  7. export type Features = {
  8. aiErrorAssistant?: boolean
  9. collaborators?: number
  10. compileGroup?: 'standard' | 'priority'
  11. compileTimeout?: number
  12. dropbox?: boolean
  13. gitBridge?: boolean
  14. github?: boolean
  15. mendeley?: boolean
  16. references?: boolean
  17. referencesSearch?: boolean
  18. symbolPalette?: boolean
  19. templates?: boolean
  20. trackChanges?: boolean
  21. versioning?: boolean
  22. zotero?: boolean
  23. }
  24. export type FeatureUsage = {
  25. [feature: string]: {
  26. remainingUsage: number
  27. resetDate: string // date string
  28. }
  29. }
  30. export type User = {
  31. id: UserId
  32. isAdmin?: boolean
  33. email: string
  34. allowedFreeTrial?: boolean
  35. hasRecurlySubscription?: boolean
  36. first_name?: string
  37. last_name?: string
  38. alphaProgram?: boolean
  39. betaProgram?: boolean
  40. labsProgram?: boolean
  41. isLatexBeginner?: boolean
  42. signUpDate?: string // date string
  43. features?: Features
  44. refProviders?: RefProviders
  45. writefull?: {
  46. enabled: boolean
  47. autoCreatedAccount: boolean
  48. firstAutoLoad: boolean
  49. }
  50. featureUsage?: FeatureUsage
  51. }
  52. export type LoggedOutUser = {
  53. id: null
  54. email?: undefined
  55. first_name?: undefined
  56. last_name?: undefined
  57. signUpDate?: undefined
  58. labsProgram?: undefined
  59. alphaProgram?: undefined
  60. betaProgram?: undefined
  61. allowedFreeTrial?: undefined
  62. features?: undefined
  63. refProviders?: undefined
  64. writefull?: undefined
  65. isAdmin?: undefined
  66. featureUsage?: undefined
  67. }
  68. export type MongoUser = Pick<User, Exclude<keyof User, 'id'>> & { _id: string }