user.ts 2.1 KB

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