diff --git a/common/script/ops/addWebhook.js b/common/script/ops/addWebhook.js index ea6b32ed68..16d63593d2 100644 --- a/common/script/ops/addWebhook.js +++ b/common/script/ops/addWebhook.js @@ -15,8 +15,12 @@ module.exports = function addWebhook (user, req = {}) { user.markModified('preferences.webhooks'); - return refPush(wh, { - url: req.body.url, - enabled: req.body.enabled, - }); + if (req.v2 === true) { + return user.preferences.webhooks; + } else { + return refPush(wh, { + url: req.body.url, + enabled: req.body.enabled, + }); + } }; diff --git a/common/script/ops/allocateNow.js b/common/script/ops/allocateNow.js index fefd130fed..0db7a3a819 100644 --- a/common/script/ops/allocateNow.js +++ b/common/script/ops/allocateNow.js @@ -1,10 +1,15 @@ import _ from 'lodash'; import autoAllocate from '../fns/autoAllocate'; -module.exports = function allocateNow (user) { +module.exports = function allocateNow (user, req = {}) { _.times(user.stats.points, () => autoAllocate(user)); user.stats.points = 0; - return { - data: _.pick(user, 'stats'), - }; + + if (req.v2 === true) { + return _.pick(user, 'stats'); + } else { + return { + data: _.pick(user, 'stats'), + }; + } }; diff --git a/common/script/ops/buy.js b/common/script/ops/buy.js index 4a5b5b3b7f..268be94b39 100644 --- a/common/script/ops/buy.js +++ b/common/script/ops/buy.js @@ -134,5 +134,9 @@ module.exports = function buy (user, req = {}, analytics) { if (armoireResp) res.armoire = armoireResp; - return res; + if (req.v2 === true) { + return res.data; + } else { + return res; + } }; diff --git a/common/script/ops/buyMysterySet.js b/common/script/ops/buyMysterySet.js index 3bbb35e100..cc2eb8f3b1 100644 --- a/common/script/ops/buyMysterySet.js +++ b/common/script/ops/buyMysterySet.js @@ -43,8 +43,13 @@ module.exports = function buyMysterySet (user, req = {}, analytics) { user.purchased.plan.consecutive.trinkets--; - return { - data: pickDeep(user, splitWhitespace('items purchased.plan.consecutive')), - message: i18n.t('hourglassPurchaseSet', req.language), - }; + + if (req.v2 === true) { + return pickDeep(user, splitWhitespace('items purchased.plan.consecutive')); + } else { + return { + data: pickDeep(user, splitWhitespace('items purchased.plan.consecutive')), + message: i18n.t('hourglassPurchaseSet', req.language), + }; + } }; diff --git a/common/script/ops/buyQuest.js b/common/script/ops/buyQuest.js index b8efd8eee7..6cab422063 100644 --- a/common/script/ops/buyQuest.js +++ b/common/script/ops/buyQuest.js @@ -37,10 +37,14 @@ module.exports = function buyQuest (user, req = {}, analytics) { }); } - return { - data: user.items.quests, - message: i18n.t('messageBought', { - itemText: item.text(req.language), - }, req.language), - }; + if (req.v2 === true) { + return user.items.quests; + } else { + return { + data: user.items.quests, + message: i18n.t('messageBought', { + itemText: item.text(req.language), + }, req.language), + }; + } }; diff --git a/common/script/ops/buySpecialSpell.js b/common/script/ops/buySpecialSpell.js index 36ab94e143..921ffc817b 100644 --- a/common/script/ops/buySpecialSpell.js +++ b/common/script/ops/buySpecialSpell.js @@ -22,10 +22,14 @@ module.exports = function buySpecialSpell (user, req = {}) { user.items.special[key]++; - return { - data: _.pick(user, splitWhitespace('items stats')), - message: i18n.t('messageBought', { - itemText: item.text(req.language), - }, req.language), - }; + if (req.v2 === true) { + return _.pick(user, splitWhitespace('items stats')); + } else { + return { + data: _.pick(user, splitWhitespace('items stats')), + message: i18n.t('messageBought', { + itemText: item.text(req.language), + }, req.language), + }; + } }; diff --git a/common/script/ops/changeClass.js b/common/script/ops/changeClass.js index 83452709c3..17a5d5c4d1 100644 --- a/common/script/ops/changeClass.js +++ b/common/script/ops/changeClass.js @@ -65,7 +65,11 @@ module.exports = function changeClass (user, req = {}, analytics) { user.flags.classSelected = false; } - return { - data: _.pick(user, splitWhitespace('stats flags items preferences')), - }; + if (req.v2 === true) { + return _.pick(user, splitWhitespace('stats flags items preferences')); + } else { + return { + data: _.pick(user, splitWhitespace('stats flags items preferences')), + }; + } }; diff --git a/common/script/ops/deleteWebhook.js b/common/script/ops/deleteWebhook.js index 03eb622892..51e94982d4 100644 --- a/common/script/ops/deleteWebhook.js +++ b/common/script/ops/deleteWebhook.js @@ -3,4 +3,6 @@ import _ from 'lodash'; module.exports = function deleteWebhook (user, req) { delete user.preferences.webhooks[_.get(req, 'params.id')]; user.markModified('preferences.webhooks'); + + return user.preferences.webhooks; }; diff --git a/common/script/ops/disableClasses.js b/common/script/ops/disableClasses.js index 0aae65edd5..58f493a13c 100644 --- a/common/script/ops/disableClasses.js +++ b/common/script/ops/disableClasses.js @@ -2,7 +2,7 @@ import splitWhitespace from '../libs/splitWhitespace'; import { capByLevel } from '../statHelpers'; import _ from 'lodash'; -module.exports = function disableClasses (user) { +module.exports = function disableClasses (user, req = {}) { user.stats.class = 'warrior'; user.flags.classSelected = true; user.preferences.disableClasses = true; @@ -10,7 +10,11 @@ module.exports = function disableClasses (user) { user.stats.str = capByLevel(user.stats.lvl); user.stats.points = 0; - return { - data: _.pick(user, splitWhitespace('stats flags preferences')), - }; + if (req.v2 === true) { + return _.pick(user, splitWhitespace('stats flags preferences')); + } else { + return { + data: _.pick(user, splitWhitespace('stats flags preferences')), + }; + } }; diff --git a/common/script/ops/equip.js b/common/script/ops/equip.js index e402b614ff..94a40331d2 100644 --- a/common/script/ops/equip.js +++ b/common/script/ops/equip.js @@ -62,5 +62,9 @@ module.exports = function equip (user, req = {}) { }; if (message) res.message = message; - return res; + if (req.v2 === true) { + return user.items; + } else { + return res; + } }; diff --git a/common/script/ops/feed.js b/common/script/ops/feed.js index e4f2fa849f..f555a24dfc 100644 --- a/common/script/ops/feed.js +++ b/common/script/ops/feed.js @@ -89,8 +89,14 @@ module.exports = function feed (user, req = {}) { user.items.food[food.key]--; - return { - data: userPets[pet], - message, - }; + if (req.v2 === true) { + return { + value: userPets[pet], + }; + } else { + return { + data: userPets[pet], + message, + }; + } }; diff --git a/common/script/ops/hatch.js b/common/script/ops/hatch.js index fee84fd4a8..01b0b68520 100644 --- a/common/script/ops/hatch.js +++ b/common/script/ops/hatch.js @@ -33,8 +33,12 @@ module.exports = function hatch (user, req = {}) { user.items.eggs[egg]--; user.items.hatchingPotions[hatchingPotion]--; - return { - message: i18n.t('messageHatched', req.language), - data: user.items, - }; + if (req.v2 === true) { + return user.items; + } else { + return { + message: i18n.t('messageHatched', req.language), + data: user.items, + }; + } }; diff --git a/common/script/ops/hourglassPurchase.js b/common/script/ops/hourglassPurchase.js index b627704d7b..286590517a 100644 --- a/common/script/ops/hourglassPurchase.js +++ b/common/script/ops/hourglassPurchase.js @@ -56,5 +56,9 @@ module.exports = function purchaseHourglass (user, req = {}, analytics) { message: i18n.t('hourglassPurchase', req.language), }; - return res; + if (req.v2 === true) { + return res.data; + } else { + return res; + } }; diff --git a/common/script/ops/openMysteryItem.js b/common/script/ops/openMysteryItem.js index 5767ee5f75..dc270cace9 100644 --- a/common/script/ops/openMysteryItem.js +++ b/common/script/ops/openMysteryItem.js @@ -33,8 +33,12 @@ module.exports = function openMysteryItem (user, req = {}, analytics) { user._tmp.drop = item; } - return { - message: i18n.t('mysteryItemOpened', req.language), - data: user.items.gear.owned, - }; + if (req.v2 === true) { + return user.items.gear.owned; + } else { + return { + message: i18n.t('mysteryItemOpened', req.language), + data: user.items.gear.owned, + }; + } }; diff --git a/common/script/ops/purchase.js b/common/script/ops/purchase.js index abb7992994..b4a7136646 100644 --- a/common/script/ops/purchase.js +++ b/common/script/ops/purchase.js @@ -124,5 +124,9 @@ module.exports = function purchase (user, req = {}, analytics) { message: i18n.t('purchased', {type, key}), }; - return response; + if (req.v2 === true) { + return response.data; + } else { + return response; + } }; diff --git a/common/script/ops/readCard.js b/common/script/ops/readCard.js index b6d34dcd7d..d943e40a35 100644 --- a/common/script/ops/readCard.js +++ b/common/script/ops/readCard.js @@ -21,8 +21,12 @@ module.exports = function readCard (user, req = {}) { user.items.special[`${cardType}Received`].shift(); user.flags.cardReceived = false; - return { - message: i18n.t('readCard', {cardType}, req.language), - data: _.pick(user, splitWhitespace('items.special flags.cardReceived')), - }; + if (req.v2 === true) { + return _.pick(user, splitWhitespace('items.special flags.cardReceived')); + } else { + return { + message: i18n.t('readCard', {cardType}, req.language), + data: _.pick(user, splitWhitespace('items.special flags.cardReceived')), + }; + } }; diff --git a/common/script/ops/rebirth.js b/common/script/ops/rebirth.js index 3739f2c80b..e287323d48 100644 --- a/common/script/ops/rebirth.js +++ b/common/script/ops/rebirth.js @@ -103,5 +103,9 @@ module.exports = function rebirth (user, tasks = [], req = {}, analytics) { message: i18n.t('rebirthComplete'), }; - return response; + if (req.v2 === true) { + return user; + } else { + return response; + } }; diff --git a/common/script/ops/releaseBoth.js b/common/script/ops/releaseBoth.js index 0ae25f6fe7..cc17b99e44 100644 --- a/common/script/ops/releaseBoth.js +++ b/common/script/ops/releaseBoth.js @@ -62,5 +62,9 @@ module.exports = function releaseBoth (user, req = {}, analytics) { message: i18n.t('mountsAndPetsReleased'), }; - return response; + if (req.v2 === true) { + return user; + } else { + return response; + } }; diff --git a/common/script/ops/releaseMounts.js b/common/script/ops/releaseMounts.js index 0ec6fb6e7f..a0564dc804 100644 --- a/common/script/ops/releaseMounts.js +++ b/common/script/ops/releaseMounts.js @@ -39,5 +39,9 @@ module.exports = function releaseMounts (user, req = {}, analytics) { message: i18n.t('mountsReleased'), }; - return response; + if (req.v2 === true) { + return user; + } else { + return response; + } }; diff --git a/common/script/ops/releasePets.js b/common/script/ops/releasePets.js index 597054299a..09303b34e9 100644 --- a/common/script/ops/releasePets.js +++ b/common/script/ops/releasePets.js @@ -37,5 +37,9 @@ module.exports = function releasePets (user, req = {}, analytics) { message: i18n.t('petsReleased'), }; - return response; + if (req.v2 === true) { + return user; + } else { + return response; + } }; diff --git a/common/script/ops/reroll.js b/common/script/ops/reroll.js index 79c5eb1bbe..52939551b3 100644 --- a/common/script/ops/reroll.js +++ b/common/script/ops/reroll.js @@ -32,5 +32,9 @@ module.exports = function reroll (user, tasks = [], req = {}, analytics) { message: i18n.t('rerollComplete'), }; - return response; + if (req.v2 === true) { + return user; + } else { + return response; + } }; diff --git a/common/script/ops/revive.js b/common/script/ops/revive.js index fa33946943..5b48e6fb71 100644 --- a/common/script/ops/revive.js +++ b/common/script/ops/revive.js @@ -102,5 +102,9 @@ module.exports = function revive (user, req = {}, analytics) { message, }; - return response; + if (req.v2 === true) { + return user; + } else { + return response; + } }; diff --git a/common/script/ops/sell.js b/common/script/ops/sell.js index d5dfa9fbbb..7e4eee902f 100644 --- a/common/script/ops/sell.js +++ b/common/script/ops/sell.js @@ -38,5 +38,9 @@ module.exports = function sell (user, req = {}) { message: i18n.t('sold', {type, key}), }; - return response; + if (req.v2 === true) { + return response.data; + } else { + return response; + } }; diff --git a/common/script/ops/sleep.js b/common/script/ops/sleep.js index eb80ec9dd0..8ef48eeac4 100644 --- a/common/script/ops/sleep.js +++ b/common/script/ops/sleep.js @@ -1,8 +1,13 @@ -module.exports = function sleep (user) { +module.exports = function sleep (user, req = {}) { user.preferences.sleep = !user.preferences.sleep; - return { - preferences: { - sleep: user.preferences.sleep, - }, - }; + + if (req.v2 === true) { + return {}; + } else { + return { + preferences: { + sleep: user.preferences.sleep, + }, + }; + } }; diff --git a/common/script/ops/unlock.js b/common/script/ops/unlock.js index bbd3cb0e39..4bd24aeecc 100644 --- a/common/script/ops/unlock.js +++ b/common/script/ops/unlock.js @@ -81,5 +81,9 @@ module.exports = function unlock (user, req = {}, analytics) { message: i18n.t('unlocked'), }; - return response; + if (req.v2 === true) { + return response.data; + } else { + return response; + } }; diff --git a/common/script/ops/updateWebhook.js b/common/script/ops/updateWebhook.js index 0de2f5fa47..d8ec977308 100644 --- a/common/script/ops/updateWebhook.js +++ b/common/script/ops/updateWebhook.js @@ -12,5 +12,9 @@ module.exports = function updateWebhook (user, req) { user.preferences.webhooks[req.params.id].url = req.body.url; user.preferences.webhooks[req.params.id].enabled = req.body.enabled; - return user.preferences.webhooks[req.params.id]; + if (req.v2 === true) { + return user.preferences.webhooks; + } else { + return user.preferences.webhooks[req.params.id]; + } }; diff --git a/test/common/ops/deleteWebhook.test.js b/test/common/ops/deleteWebhook.test.js index 0a3178007a..e72bf22269 100644 --- a/test/common/ops/deleteWebhook.test.js +++ b/test/common/ops/deleteWebhook.test.js @@ -13,8 +13,9 @@ describe('shared.ops.deleteWebhook', () => { }); it('succeeds', () => { - user.preferences.webhooks = { 'some-id': {} }; - deleteWebhook(user, req); - expect(user.preferences.webhooks).to.eql({}); + user.preferences.webhooks = { 'some-id': {}, 'another-id': {} }; + let res = deleteWebhook(user, req); + expect(user.preferences.webhooks).to.eql({'another-id': {}}); + expect(res).to.equal(user.preferences.webhooks); }); }); diff --git a/website/src/controllers/api-v2/user.js b/website/src/controllers/api-v2/user.js index 10d242a97b..a3467cfa26 100644 --- a/website/src/controllers/api-v2/user.js +++ b/website/src/controllers/api-v2/user.js @@ -24,6 +24,7 @@ var moment = require('moment'); var logging = require('./../../libs/api-v2/logging'); var acceptablePUTPaths; let restrictedPUTSubPaths; +import v3UserController from '../api-v3/user'; let i18n = shared.i18n; @@ -865,10 +866,24 @@ api.addTask = function(req, res, next) { * All other user.ops which can easily be mapped to common/script/index.js, not requiring custom API-wrapping */ _.each(shared.ops, function(op,k){ - if (!api[k]) { + if (['rebirth', 'reroll', 'reset'].indexOf(k) !== -1) { // proxy ops that change tasks directly to v3 + if (k === 'rebirth') k = 'userRebirth'; // the name is different in v3 + if (k === 'reroll') k = 'userReroll'; + // if (k === 'reset') k = 'resetUser'; + + api[k] = async function (req, res, next) { + try { + req.v2 = true; + await v3UserController[k](req, res, next); + } catch (err) { + next(err); + } + } + } else if (!api[k]) { api[k] = function(req, res, next) { var opResponse; try { + req.v2 = true; // Used to indicate to the shared code that the old response data should be returned opResponse = shared.ops[k](res.locals.user, req, analytics); } catch (err) { if (!err.code) return next(err); @@ -878,8 +893,15 @@ _.each(shared.ops, function(op,k){ // If we want to send something other than 500, pass err as {code: 200, message: "Not enough GP"} res.locals.user.save(function(err){ if (err) return next(err); - res.status(200).json(response); - }) + if (response === user) { // add tasks + user.getTransformedData(function (err, transformedUser) { + if (err) return next(err); + res.status(200).json(transformedUser); + }); + } else { + res.status(200).json(response); + } + }); } } })