mongodb.mjs 4.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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. messages: internalDb.collection('messages'),
  29. migrations: internalDb.collection('migrations'),
  30. notifications: internalDb.collection('notifications'),
  31. oauthAccessTokens: internalDb.collection('oauthAccessTokens'),
  32. oauthApplications: internalDb.collection('oauthApplications'),
  33. oauthAuthorizationCodes: internalDb.collection('oauthAuthorizationCodes'),
  34. projectAuditLogEntries: internalDb.collection('projectAuditLogEntries'),
  35. projectHistoryChunks: internalDb.collection('projectHistoryChunks'),
  36. projectHistoryFailures: internalDb.collection('projectHistoryFailures'),
  37. projectHistoryGlobalBlobs: internalDb.collection('projectHistoryGlobalBlobs'),
  38. projectHistoryLabels: internalDb.collection('projectHistoryLabels'),
  39. projectHistorySizes: internalDb.collection('projectHistorySizes'),
  40. projectHistorySyncState: internalDb.collection('projectHistorySyncState'),
  41. projectInvites: internalDb.collection('projectInvites'),
  42. projects: internalDb.collection('projects'),
  43. publishers: internalDb.collection('publishers'),
  44. rooms: internalDb.collection('rooms'),
  45. samlCache: internalDb.collection('samlCache'),
  46. samlLogs: internalDb.collection('samlLogs'),
  47. spellingPreferences: internalDb.collection('spellingPreferences'),
  48. splittests: internalDb.collection('splittests'),
  49. ssoConfigs: internalDb.collection('ssoConfigs'),
  50. subscriptions: internalDb.collection('subscriptions'),
  51. surveys: internalDb.collection('surveys'),
  52. systemmessages: internalDb.collection('systemmessages'),
  53. tags: internalDb.collection('tags'),
  54. teamInvites: internalDb.collection('teamInvites'),
  55. tokens: internalDb.collection('tokens'),
  56. userAuditLogEntries: internalDb.collection('userAuditLogEntries'),
  57. users: internalDb.collection('users'),
  58. onboardingDataCollection: internalDb.collection('onboardingDataCollection'),
  59. scriptLogs: internalDb.collection('scriptLogs'),
  60. }
  61. export const connectionPromise = mongoClient.connect()
  62. export async function getCollectionNames() {
  63. const internalDb = mongoClient.db()
  64. const collections = await internalDb.collections()
  65. return collections.map(collection => collection.collectionName)
  66. }
  67. /**
  68. * WARNING: Consider using a pre-populated collection from `db` to avoid typos!
  69. */
  70. export async function getCollectionInternal(name) {
  71. const internalDb = mongoClient.db()
  72. return internalDb.collection(name)
  73. }
  74. export async function waitForDb() {
  75. await connectionPromise
  76. }
  77. const mongodb = {
  78. db,
  79. ObjectId,
  80. connectionPromise,
  81. waitForDb,
  82. getCollectionNames,
  83. getCollectionInternal,
  84. READ_PREFERENCE_PRIMARY,
  85. READ_PREFERENCE_SECONDARY,
  86. }
  87. export default mongodb