mongodb.mjs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import { ObjectId, ReadPreference, MongoClient } from 'mongodb'
  2. import Settings from '@overleaf/settings'
  3. export { ObjectId } from 'mongodb'
  4. export const READ_PREFERENCE_PRIMARY = ReadPreference.primary.mode
  5. export const READ_PREFERENCE_SECONDARY = Settings.mongo.hasSecondaries
  6. ? ReadPreference.secondary.mode
  7. : ReadPreference.secondaryPreferred.mode
  8. const mongoClient = new MongoClient(Settings.mongo.url, Settings.mongo.options)
  9. const internalDb = mongoClient.db()
  10. export const db = {
  11. contacts: internalDb.collection('contacts'),
  12. deletedProjects: internalDb.collection('deletedProjects'),
  13. deletedSubscriptions: internalDb.collection('deletedSubscriptions'),
  14. deletedUsers: internalDb.collection('deletedUsers'),
  15. dropboxEntities: internalDb.collection('dropboxEntities'),
  16. dropboxProjects: internalDb.collection('dropboxProjects'),
  17. docSnapshots: internalDb.collection('docSnapshots'),
  18. docs: internalDb.collection('docs'),
  19. domainVerifications: internalDb.collection('domainVerifications'),
  20. feedbacks: internalDb.collection('feedbacks'),
  21. githubSyncEntityVersions: internalDb.collection('githubSyncEntityVersions'),
  22. githubSyncProjectStates: internalDb.collection('githubSyncProjectStates'),
  23. githubSyncUserCredentials: internalDb.collection('githubSyncUserCredentials'),
  24. globalMetrics: internalDb.collection('globalMetrics'),
  25. grouppolicies: internalDb.collection('grouppolicies'),
  26. groupAuditLogEntries: internalDb.collection('groupAuditLogEntries'),
  27. institutions: internalDb.collection('institutions'),
  28. libraryReferences: internalDb.collection('libraryReferences'),
  29. messages: internalDb.collection('messages'),
  30. migrations: internalDb.collection('migrations'),
  31. notifications: internalDb.collection('notifications'),
  32. oauthAccessTokens: internalDb.collection('oauthAccessTokens'),
  33. oauthApplications: internalDb.collection('oauthApplications'),
  34. oauthAuthorizationCodes: internalDb.collection('oauthAuthorizationCodes'),
  35. projectAuditLogEntries: internalDb.collection('projectAuditLogEntries'),
  36. projectHistoryChunks: internalDb.collection('projectHistoryChunks'),
  37. projectHistoryFailures: internalDb.collection('projectHistoryFailures'),
  38. projectHistoryGlobalBlobs: internalDb.collection('projectHistoryGlobalBlobs'),
  39. projectHistoryLabels: internalDb.collection('projectHistoryLabels'),
  40. projectHistorySizes: internalDb.collection('projectHistorySizes'),
  41. projectHistorySyncState: internalDb.collection('projectHistorySyncState'),
  42. projectInvites: internalDb.collection('projectInvites'),
  43. projects: internalDb.collection('projects'),
  44. publishers: internalDb.collection('publishers'),
  45. rooms: internalDb.collection('rooms'),
  46. samlCache: internalDb.collection('samlCache'),
  47. samlLogs: internalDb.collection('samlLogs'),
  48. spellingPreferences: internalDb.collection('spellingPreferences'),
  49. splittests: internalDb.collection('splittests'),
  50. ssoConfigs: internalDb.collection('ssoConfigs'),
  51. subscriptions: internalDb.collection('subscriptions'),
  52. surveys: internalDb.collection('surveys'),
  53. systemmessages: internalDb.collection('systemmessages'),
  54. tags: internalDb.collection('tags'),
  55. teamInvites: internalDb.collection('teamInvites'),
  56. tokens: internalDb.collection('tokens'),
  57. userAuditLogEntries: internalDb.collection('userAuditLogEntries'),
  58. users: internalDb.collection('users'),
  59. onboardingDataCollection: internalDb.collection('onboardingDataCollection'),
  60. scriptLogs: internalDb.collection('scriptLogs'),
  61. }
  62. export const connectionPromise = mongoClient.connect()
  63. export async function getCollectionNames() {
  64. const internalDb = mongoClient.db()
  65. const collections = await internalDb.collections()
  66. return collections.map(collection => collection.collectionName)
  67. }
  68. /**
  69. * WARNING: Consider using a pre-populated collection from `db` to avoid typos!
  70. */
  71. export async function getCollectionInternal(name) {
  72. const internalDb = mongoClient.db()
  73. return internalDb.collection(name)
  74. }
  75. export async function waitForDb() {
  76. await connectionPromise
  77. }
  78. const mongodb = {
  79. db,
  80. ObjectId,
  81. connectionPromise,
  82. waitForDb,
  83. getCollectionNames,
  84. getCollectionInternal,
  85. READ_PREFERENCE_PRIMARY,
  86. READ_PREFERENCE_SECONDARY,
  87. }
  88. export default mongodb