user.ts 1.8 KB

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