const Helpers = require('./lib/helpers') exports.tags = ['server-ce', 'server-pro', 'saas'] const OLD_INDEX = { key: { refreshToken: 1 }, name: 'refreshToken_1', unique: true, } const NEW_INDEX = { key: { refreshToken: 1 }, name: 'refreshToken_1', unique: true, partialFilterExpression: { refreshToken: { $exists: true } }, } const TMP_INDEX = { key: { refreshToken: 1, dummyField: 1 }, name: 'refreshToken_tmp', } exports.migrate = async client => { const { db } = client // Create a temporary index so that the refresh tokens are not left unindexed // while we drop the index and recreate it. await Helpers.addIndexesToCollection(db.oauthAccessTokens, [TMP_INDEX]) // Drop and recreate the index with different options await Helpers.dropIndexesFromCollection(db.oauthAccessTokens, [OLD_INDEX]) await Helpers.addIndexesToCollection(db.oauthAccessTokens, [NEW_INDEX]) // Drop the temporary index await Helpers.dropIndexesFromCollection(db.oauthAccessTokens, [TMP_INDEX]) } exports.rollback = async client => { const { db } = client // Create a temporary index so that the refresh tokens are not left unindexed // while we drop the index and recreate it. await Helpers.addIndexesToCollection(db.oauthAccessTokens, [TMP_INDEX]) // Drop and recreate the index with different options await Helpers.dropIndexesFromCollection(db.oauthAccessTokens, [NEW_INDEX]) await Helpers.addIndexesToCollection(db.oauthAccessTokens, [OLD_INDEX]) // Drop the temporary index await Helpers.dropIndexesFromCollection(db.oauthAccessTokens, [TMP_INDEX]) }