From a80ef78be04693574cab1f6d4e9809017b912a16 Mon Sep 17 00:00:00 2001 From: Natalie <78037386+CuriousMagpie@users.noreply.github.com> Date: Tue, 7 Nov 2023 09:55:50 -0500 Subject: [PATCH] 2023 November Content Prebuild (#14954) * feat(content): October sub items * feat(content): October bgs and armoire * feat(content): add Dune Buddy achievement * feat(releases): timed Backgrounds and Armoire * feat(content): timed release achievement * feat(content): November subscriber items * feat(content): November pet quest bundle * feat(content): November magic hatching potions * feat(content): November backgrounds and armoire * feat(content): new achievement code -- needs work * update package.lock on local/origin repos * fix(content): added October headgear info and November set name * fix(typo): spelling is important * feat(content): added logic to allow for pets & mounts to be in one achievement and fixed issues with image * fix(armoire): correct month * fix(armoire): deprecate armoireEmpty flag --------- Co-authored-by: SabreCat Co-authored-by: Sabe Jones --- .../2023/20231114_pet_group_achievements.js | 124 ++++++++++++++++++ package-lock.json | 92 ++++++------- website/client/package-lock.json | 104 +++++++-------- .../client/src/components/notifications.vue | 5 - .../src/components/snackbars/notification.vue | 5 + website/client/src/store/actions/shops.js | 3 + website/common/locales/en/achievements.json | 5 +- website/common/locales/en/backgrounds.json | 8 ++ website/common/locales/en/subscriber.json | 1 + website/common/script/content/achievements.js | 7 + .../script/content/appearance/backgrounds.js | 19 ++- website/common/script/content/bundles.js | 3 +- .../constants/animalSetAchievements.js | 10 ++ .../common/script/content/constants/events.js | 10 +- .../script/content/gear/sets/armoire.js | 15 +++ .../common/script/content/hatching-potions.js | 20 +-- website/common/script/content/index.js | 4 +- .../script/content/shop-featuredItems.js | 8 +- website/common/script/count.js | 5 +- website/common/script/libs/achievements.js | 23 ++-- website/common/script/libs/getItemInfo.js | 2 +- website/common/script/ops/buy/buyArmoire.js | 9 +- website/common/script/ops/hatch.js | 14 +- website/server/models/user/schema.js | 1 + 24 files changed, 354 insertions(+), 143 deletions(-) create mode 100644 migrations/archive/2023/20231114_pet_group_achievements.js diff --git a/migrations/archive/2023/20231114_pet_group_achievements.js b/migrations/archive/2023/20231114_pet_group_achievements.js new file mode 100644 index 0000000000..9a3e97d9de --- /dev/null +++ b/migrations/archive/2023/20231114_pet_group_achievements.js @@ -0,0 +1,124 @@ +/* eslint-disable no-console */ +const MIGRATION_NAME = '20231114_pet_group_achievements'; +import { model as User } from '../../../website/server/models/user'; + +const progressCount = 1000; +let count = 0; + +async function updateUser (user) { + count++; + + let set = { + migration: MIGRATION_NAME, + }; + + if (user && user.items && user.items.pets) { + const pets = user.items.pets; + if (pets['Cactus-Zombie'] > 0 + && pets['Cactus-Skeleton'] > 0 + && pets['Cactus-Base'] > 0 + && pets['Cactus-Desert'] > 0 + && pets['Cactus-Red'] > 0 + && pets['Cactus-Shade'] > 0 + && pets['Cactus-White']> 0 + && pets['Cactus-Golden'] > 0 + && pets['Cactus-CottonCandyBlue'] > 0 + && pets['Cactus-CottonCandyPink'] > 0 + && pets['Hedgehog-Zombie'] > 0 + && pets['Hedgehog-Skeleton'] > 0 + && pets['Hedgehog-Base'] > 0 + && pets['Hedgehog-Desert'] > 0 + && pets['Hedgehog-Red'] > 0 + && pets['Hedgehog-Shade'] > 0 + && pets['Hedgehog-White'] > 0 + && pets['Hedgehog-Golder'] > 0 + && pets['Hedgehog-CottonCandyBlue'] > 0 + && pets['Hedgehog-CottonCandyPink'] > 0 + && pets['Rock-Zombie'] > 0 + && pets['Rock-Skeleton'] > 0 + && pets['Rock-Base'] > 0 + && pets['Rock-Desert'] > 0 + && pets['Rock-Red'] > 0 + && pets['Rock-Shade'] > 0 + && pets['Rock-White'] > 0 + && pets['Rock-Golden'] > 0 + && pets['Rock-CottonCandyBlue'] > 0 + && pets['Rock-CottonCandyPink'] > 0 ) { + set['achievements.roughRider'] = true; + } + } + + if (user && user.items && user.items.mounts) { + const mounts = user.items.mounts; + if (mounts['Cactus-Zombie'] + && mounts['Cactus-Skeleton'] + && mounts['Cactus-Base'] + && mounts['Cactus-Desert'] + && mounts['Cactus-Red'] + && mounts['Cactus-Shade'] + && mounts['Cactus-White'] + && mounts['Cactus-Golden'] + && mounts['Cactus-CottonCandyPink'] + && mounts['Cactus-CottonCandyBlue'] + && mounts['Hedgehog-Zombie'] + && mounts['Hedgehog-Skeleton'] + && mounts['Hedgehog-Base'] + && mounts['Hedgehog-Desert'] + && mounts['Hedgehog-Red'] + && mounts['Hedgehog-Shade'] + && mounts['Hedgehog-White'] + && mounts['Hedgehog-Golden'] + && mounts['Hedgehog-CottonCandyPink'] + && mounts['Hedgehog-CottonCandyBlue'] + && mounts['Rock-Zombie'] + && mounts['Rock-Skeleton'] + && mounts['Rock-Base'] + && mounts['Rock-Desert'] + && mounts['Rock-Red'] + && mounts['Rock-Shade'] + && mounts['Rock-White'] + && mounts['Rock-Golden'] + && mounts['Rock-CottonCandyPink'] + && mounts['Rock-CottonCandyBlue'] ) { + set['achievements.roughRider'] = true; + } + } + + if (count % progressCount === 0) console.warn(`${count} ${user._id}`); + + return await User.update({ _id: user._id }, { $set: set }).exec(); +} + +module.exports = async function processUsers () { + let query = { + migration: { $ne: MIGRATION_NAME }, + 'auth.timestamps.loggedin': { $gt: new Date('2023-02-01') }, + }; + + const fields = { + _id: 1, + items: 1, + }; + + while (true) { // eslint-disable-line no-constant-condition + const users = await User // eslint-disable-line no-await-in-loop + .find(query) + .limit(250) + .sort({_id: 1}) + .select(fields) + .lean() + .exec(); + + if (users.length === 0) { + console.warn('All appropriate users found and modified.'); + console.warn(`\n${count} users processed\n`); + break; + } else { + query._id = { + $gt: users[users.length - 1]._id, + }; + } + + await Promise.all(users.map(updateUser)); // eslint-disable-line no-await-in-loop + } +}; diff --git a/package-lock.json b/package-lock.json index 533f570b90..33f174a7dd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3323,7 +3323,7 @@ "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, "array-includes": { "version": "3.1.1", @@ -4005,7 +4005,7 @@ "bin-pack": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bin-pack/-/bin-pack-1.0.2.tgz", - "integrity": "sha512-aOk0SxEon5LF9cMxQFViSKb4qccG6rs7XKyMXIb1J8f8LA2acTIWnHdT0IOTe4gYBbqgjdbuTZ5f+UP+vlh4Mw==" + "integrity": "sha1-wqAU7b8L7XCjKSBi7UZXe5YSBnk=" }, "bin-version": { "version": "3.1.0", @@ -4789,7 +4789,7 @@ "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true }, "coa": { @@ -5053,7 +5053,7 @@ "contentstream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/contentstream/-/contentstream-1.0.0.tgz", - "integrity": "sha512-jqWbfFZFG9tZbdej7+TzXI4kanABh3BLtTWY6NxqTK5zo6iTIeo5aq4iRVfYsLQ0y8ccQqmJR/J4NeMmEdnR2w==", + "integrity": "sha1-C9z6RtowRkqGzo+n7OVlQQ3G+aU=", "requires": { "readable-stream": "~1.0.33-1" }, @@ -5061,7 +5061,7 @@ "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" }, "readable-stream": { "version": "1.0.34", @@ -5132,7 +5132,7 @@ "cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, "cookiejar": { "version": "2.1.4", @@ -5368,7 +5368,7 @@ "cwise-compiler": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/cwise-compiler/-/cwise-compiler-1.1.3.tgz", - "integrity": "sha512-WXlK/m+Di8DMMcCjcWr4i+XzcQra9eCdXIJrgh4TUgh0pIS/yJduLxS9JgefsHJ/YVLdgPtXm9r62W92MvanEQ==", + "integrity": "sha1-9NZnQQ6FDToxOn0tt7HlBbsDTMU=", "requires": { "uniq": "^1.0.0" } @@ -5393,7 +5393,7 @@ "data-uri-to-buffer": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-0.0.3.tgz", - "integrity": "sha512-Cp+jOa8QJef5nXS5hU7M1DWzXPEIoVR3kbV0dQuVGwROZg8bGf1DcCnkmajBTnvghTtSNMUdRrPjgaT6ZQucbw==" + "integrity": "sha1-GK6XmmoMqZSwYlhTkW0mYruuCxo=" }, "debug": { "version": "4.1.1", @@ -5989,7 +5989,7 @@ "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, "end-of-stream": { "version": "1.4.4", @@ -6011,7 +6011,7 @@ "ent": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==" + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=" }, "entities": { "version": "2.0.3", @@ -6161,7 +6161,7 @@ "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" }, "escape-string-regexp": { "version": "1.0.5", @@ -6536,7 +6536,7 @@ "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, "event-stream": { "version": "3.3.4", @@ -7253,7 +7253,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "on-finished": { "version": "2.4.1", @@ -7318,7 +7318,7 @@ "first-chunk-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", - "integrity": "sha512-ArRi5axuv66gEsyl3UuK80CzW7t56hem73YGNYxNWTGNKFJUadSb9Gu9SHijYEUi8ulQMf1bJomYNwSCPHhtTQ==" + "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=" }, "flagged-respawn": { "version": "1.0.1", @@ -7473,7 +7473,7 @@ "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, "from": { "version": "0.1.7", @@ -7769,7 +7769,7 @@ "gif-encoder": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/gif-encoder/-/gif-encoder-0.4.3.tgz", - "integrity": "sha512-HMfSa+EIng62NbDhM63QGYoc49/m8DcZ9hhBtw+CXX9mKboSpeFVxjZ2WEWaMFZ14MUjfACK7jsrxrJffIVrCg==", + "integrity": "sha1-iitP6MqJWkjjoLbLs0CgpqNXGJk=", "requires": { "readable-stream": "~1.1.9" }, @@ -7777,7 +7777,7 @@ "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" }, "readable-stream": { "version": "1.1.14", @@ -7855,7 +7855,7 @@ "github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=", "dev": true }, "glob": { @@ -8635,7 +8635,7 @@ "handlebars-layouts": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/handlebars-layouts/-/handlebars-layouts-3.1.4.tgz", - "integrity": "sha512-2llBmvnj8ueOfxNHdRzJOcgalzZjYVd9+WAl93kPYmlX4WGx7FTHTzNxhK+i9YKY2OSjzfehgpLiIwP/OJr6tw==" + "integrity": "sha1-JrO+uTG0uHffv35v6vQFjuYiiwI=" }, "har-schema": { "version": "2.0.0", @@ -8872,7 +8872,7 @@ "ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==" }, "image-size": { "version": "1.0.2", @@ -9224,7 +9224,7 @@ "iota-array": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/iota-array/-/iota-array-1.0.0.tgz", - "integrity": "sha512-pZ2xT+LOHckCatGQ3DcG/a+QuEqvoxqkiL7tvE8nn3uuu+f6i1TtpB5/FtWFbxUuVr5PZCx8KskuGatbJDXOWA==" + "integrity": "sha1-ge9X/l0FgUzVjCSDYyqZwwoOgIc=" }, "ipaddr.js": { "version": "1.9.1", @@ -9564,7 +9564,7 @@ "async": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true }, "nopt": { @@ -10047,7 +10047,7 @@ "layout": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/layout/-/layout-2.2.0.tgz", - "integrity": "sha512-+kdgg25XW11BA4cl9vF+SH01HaBipld2Nf/PlU2kSYncAbdUbDoahzrlh6yhR93N/wR2TGgcFoxebzR1LKmZUg==", + "integrity": "sha1-MeRL/BjdEBmz/7II5AKku/4uavQ=", "requires": { "bin-pack": "~1.0.1" } @@ -10197,7 +10197,7 @@ "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", "dev": true }, "lodash.includes": { @@ -10347,7 +10347,7 @@ "lru-cache": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz", - "integrity": "sha512-uQw9OqphAGiZhkuPlpFGmdTU2tEuhxTourM/19qGJrxBPHAr/f8BT1a0i/lOclESnGatdJG/UCkP9kZB/Lh1iw==", + "integrity": "sha1-HRdnnAac2l0ECZGgnbwsDbN35V4=", "requires": { "pseudomap": "^1.0.1", "yallist": "^2.0.0" @@ -10356,7 +10356,7 @@ "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" } } }, @@ -10606,7 +10606,7 @@ "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, "merge-stream": { "version": "2.0.0", @@ -10932,7 +10932,7 @@ "module-details-from-path": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz", - "integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==" + "integrity": "sha1-EUyUlnPiqKNenTV4hSeqN7Z52is=" }, "moment": { "version": "2.29.4", @@ -11449,7 +11449,7 @@ "ndarray-ops": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/ndarray-ops/-/ndarray-ops-1.2.2.tgz", - "integrity": "sha512-BppWAFRjMYF7N/r6Ie51q6D4fs0iiGmeXIACKY66fLpnwIui3Wc3CXiD/30mgLbDjPpSLrsqcp3Z62+IcHZsDw==", + "integrity": "sha1-WeiNLDKn7ryxvGkPrhQVeVV6YU4=", "requires": { "cwise-compiler": "^1.0.0" } @@ -11457,7 +11457,7 @@ "ndarray-pack": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ndarray-pack/-/ndarray-pack-1.2.1.tgz", - "integrity": "sha512-51cECUJMT0rUZNQa09EoKsnFeDL4x2dHRT0VR5U2H5ZgEcm95ZDWcMA5JShroXjHOejmAD/fg8+H+OvUnVXz2g==", + "integrity": "sha1-jK6+qqJNXs9w/4YCBjeXfajuWFo=", "requires": { "cwise-compiler": "^1.1.2", "ndarray": "^1.0.13" @@ -11539,7 +11539,7 @@ "node-bitmap": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/node-bitmap/-/node-bitmap-0.0.1.tgz", - "integrity": "sha512-Jx5lPaaLdIaOsj2mVLWMWulXF6GQVdyLvNSxmiYCvZ8Ma2hfKX0POoR2kgKOqz+oFsRreq0yYZjQ2wjE9VNzCA==" + "integrity": "sha1-GA6scAPgxwdhjvMTaPYvhLKmkJE=" }, "node-fetch": { "version": "2.6.7", @@ -11644,13 +11644,13 @@ "noop-logger": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ==", + "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=", "dev": true }, "nopt": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", "requires": { "abbrev": "1" } @@ -11745,7 +11745,7 @@ "obj-extend": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/obj-extend/-/obj-extend-0.1.0.tgz", - "integrity": "sha512-or9c7Ue2wWCun41DuLP3+LKEUjSZcDSxfCM4HZQSX9tcjLL/yuzTW7MmtVNs+MmN16uDRpDrFmFK/WVSm4vklg==" + "integrity": "sha1-u0SKR3X7les0p4H5CLusLfI9u1s=" }, "object-assign": { "version": "4.1.1", @@ -12089,7 +12089,7 @@ "parse-data-uri": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/parse-data-uri/-/parse-data-uri-0.2.0.tgz", - "integrity": "sha512-uOtts8NqDcaCt1rIsO3VFDRsAfgE4c6osG4d9z3l4dCBlxYFzni6Di/oNU270SDrjkfZuUvLZx1rxMyqh46Y9w==", + "integrity": "sha1-vwTYUd1ch7CrI45dAazklLYEtMk=", "requires": { "data-uri-to-buffer": "0.0.3" } @@ -12223,7 +12223,7 @@ "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, "path-type": { "version": "2.0.0", @@ -12397,7 +12397,7 @@ "pngjs-nozlib": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/pngjs-nozlib/-/pngjs-nozlib-1.0.0.tgz", - "integrity": "sha512-N1PggqLp9xDqwAoKvGohmZ3m4/N9xpY0nDZivFqQLcpLHmliHnCp9BuNCsOeqHWMuEEgFjpEaq9dZq6RZyy0fA==" + "integrity": "sha1-nmTWAs/pzOTZ1Zl9BodCmnPwt9c=" }, "posix-character-classes": { "version": "0.1.1", @@ -13110,7 +13110,7 @@ "resolve-from": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha512-qpFcKaXsq8+oRoLilkwyc7zHGF5i9Q2/25NIgLQQ/+VVv9rU4qvr6nXVAw1DsnXJyQkZsR4Ytfbtg5ehfcUssQ==", + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=", "dev": true } } @@ -13440,7 +13440,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -13982,7 +13982,7 @@ "concat-stream": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", - "integrity": "sha512-H6xsIBfQ94aESBG8jGHXQ7i5AEpy5ZeVaLDOisDICiTCKpqEfr34/KmTrspKQNoLKNu9gTkovlpQcUi630AKiQ==", + "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", "requires": { "inherits": "~2.0.1", "readable-stream": "~2.0.0", @@ -13992,7 +13992,7 @@ "process-nextick-args": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw==" + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" }, "readable-stream": { "version": "2.0.6", @@ -14328,7 +14328,7 @@ "stubs": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", - "integrity": "sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==" + "integrity": "sha1-6NK6H6nJBXAwPAMLaQD31fiavls=" }, "style-loader": { "version": "3.3.1", @@ -14853,7 +14853,7 @@ "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" }, "to-object-path": { "version": "0.3.0", @@ -15319,7 +15319,7 @@ "punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" } } }, @@ -15519,12 +15519,12 @@ "clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" }, "clone-stats": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==" + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=" }, "replace-ext": { "version": "0.0.1", diff --git a/website/client/package-lock.json b/website/client/package-lock.json index 72b82072de..25a9715caa 100644 --- a/website/client/package-lock.json +++ b/website/client/package-lock.json @@ -4928,17 +4928,17 @@ "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" }, "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" }, "whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -14016,7 +14016,7 @@ "app-root-dir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/app-root-dir/-/app-root-dir-1.0.2.tgz", - "integrity": "sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==" + "integrity": "sha1-OBh+wt6nV3//Az/8sSFyaS/24Rg=" }, "aproba": { "version": "1.2.0", @@ -15726,7 +15726,7 @@ "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" }, "browser-process-hrtime": { "version": "1.0.0", @@ -15879,12 +15879,12 @@ "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" }, "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==" + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" }, "cacache": { "version": "12.0.3", @@ -16167,7 +16167,7 @@ "character-parser": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", + "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=", "requires": { "is-regex": "^1.0.3" } @@ -16185,7 +16185,7 @@ "check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==" + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" }, "check-types": { "version": "8.0.3", @@ -16743,7 +16743,7 @@ "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, "consolidate": { "version": "0.15.1", @@ -16765,7 +16765,7 @@ "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==" + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" }, "contains-path": { "version": "0.1.0", @@ -17348,7 +17348,7 @@ "de-indent": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==" + "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=" }, "debug": { "version": "4.1.1", @@ -17634,7 +17634,7 @@ "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, "depd": { "version": "1.1.2", @@ -17838,7 +17838,7 @@ "doctypes": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==" + "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=" }, "dom-converter": { "version": "0.2.0", @@ -19721,7 +19721,7 @@ "get-func-name": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==" + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" }, "get-intrinsic": { "version": "1.0.2", @@ -20011,7 +20011,7 @@ "has-glob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz", - "integrity": "sha512-D+8A457fBShSEI3tFCj65PAbT++5sKiFtdCdOam0gnfBgw9D277OERk+HM9qYJXmdVLZ/znez10SqHN0BBQ50g==", + "integrity": "sha1-mqqe7b/7G6OZCnsAEPtnjuAIEgc=", "requires": { "is-glob": "^3.0.0" }, @@ -20019,7 +20019,7 @@ "is-glob": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "requires": { "is-extglob": "^2.1.0" } @@ -20074,7 +20074,7 @@ "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, "has-value": { "version": "1.0.0", @@ -20262,7 +20262,7 @@ "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "requires": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -20568,7 +20568,7 @@ "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==" + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" }, "https-proxy-agent": { "version": "5.0.1", @@ -21423,7 +21423,7 @@ "is-window": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-window/-/is-window-1.0.2.tgz", - "integrity": "sha512-uj00kdXyZb9t9RcAUAwMZAnkBUwdYGhYlt7djMXhfyhUCzwNba50tIiBKR7q0l7tdoBtFVw/3JmLY6fI3rmZmg==" + "integrity": "sha1-LIlspT25feRdPDMTOmXYyfVjSA0=" }, "is-windows": { "version": "1.0.2", @@ -21581,12 +21581,12 @@ "js-string-escape": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", - "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==" + "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=" }, "js-stringify": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==" + "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=" }, "js-tokens": { "version": "4.0.0", @@ -22050,7 +22050,7 @@ "jsdom-global": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/jsdom-global/-/jsdom-global-3.0.2.tgz", - "integrity": "sha512-t1KMcBkz/pT5JrvcJbpUR2u/w1kO9jXctaaGJ0vZDzwFnIvGWw9IDSRciT83kIs8Bnw4qpOl8bQK08V01YgMPg==" + "integrity": "sha1-a9KZwTsMRiay2iwDk81DhdYGrLk=" }, "jsesc": { "version": "2.5.2", @@ -22122,7 +22122,7 @@ "jstransformer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", + "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=", "requires": { "is-promise": "^2.0.0", "promise": "^7.0.1" @@ -22242,7 +22242,7 @@ "find-cache-dir": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", - "integrity": "sha512-Z9XSBoNE7xQiV6MSgPuCfyMokH2K7JdpRkOYE1+mu3d4BFJtx3GW+f6Bo4q8IX6rlf5MYbLBKW0pjl2cWdkm2A==", + "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", "requires": { "commondir": "^1.0.1", "mkdirp": "^0.5.1", @@ -22252,7 +22252,7 @@ "find-up": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "requires": { "path-exists": "^2.0.0", "pinkie-promise": "^2.0.0" @@ -22261,7 +22261,7 @@ "path-exists": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "requires": { "pinkie-promise": "^2.0.0" } @@ -22269,7 +22269,7 @@ "pkg-dir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha512-c6pv3OE78mcZ92ckebVDqg0aWSoKhOTbwCV6qbCWMk546mAL9pZln0+QsN/yQ7fkucd4+yJPLrCBXNt8Ruk+Eg==", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", "requires": { "find-up": "^1.0.0" } @@ -22328,7 +22328,7 @@ "lodash.kebabcase": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", - "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==" + "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=" }, "lodash.mapvalues": { "version": "4.6.0", @@ -22860,7 +22860,7 @@ "minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" }, "minimatch": { "version": "3.0.4", @@ -23820,7 +23820,7 @@ "node-dir": { "version": "0.1.17", "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", - "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", + "integrity": "sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU=", "requires": { "minimatch": "^3.0.2" } @@ -23902,7 +23902,7 @@ "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" } } }, @@ -24301,7 +24301,7 @@ "os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==" + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" }, "os-homedir": { "version": "1.0.2", @@ -25323,7 +25323,7 @@ "pretty-hrtime": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==" + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=" }, "prismjs": { "version": "1.17.1", @@ -25864,7 +25864,7 @@ "querystring-es3": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==" + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" }, "querystringify": { "version": "2.2.0", @@ -27084,7 +27084,7 @@ "serve-favicon": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz", - "integrity": "sha512-FMW2RvqNr03x+C0WxTyu6sOv21oOjkq5j8tjquWccwa6ScNyGFOGJVpuS1NmTVGBAHS07xnSKotgf2ehQmf9iA==", + "integrity": "sha1-k10kDN/g9YBTB/3+ln2IlCosvPA=", "requires": { "etag": "~1.8.1", "fresh": "0.5.2", @@ -28410,7 +28410,7 @@ "strip-indent": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==" + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=" }, "strip-json-comments": { "version": "3.1.1", @@ -28530,7 +28530,7 @@ "svg-tags": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==" + "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=" }, "svg-url-loader": { "version": "7.1.1", @@ -29011,7 +29011,7 @@ "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==" + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" }, "to-fast-properties": { "version": "2.0.0", @@ -29064,12 +29064,12 @@ "token-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", - "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==" + "integrity": "sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ=" }, "toposort": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", - "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==" + "integrity": "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=" }, "tough-cookie": { "version": "4.1.2", @@ -29100,7 +29100,7 @@ "trim": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==" + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" }, "trim-newlines": { "version": "1.0.0", @@ -29287,7 +29287,7 @@ "tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==" + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" }, "tunnel-agent": { "version": "0.6.0", @@ -29757,7 +29757,7 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" } } }, @@ -29793,7 +29793,7 @@ "uuid-browser": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/uuid-browser/-/uuid-browser-3.1.0.tgz", - "integrity": "sha512-dsNgbLaTrd6l3MMxTtouOCFw4CBFc/3a+GgYA2YyrJvyQ1u6q4pcu3ktLoUZ/VN/Aw9WsauazbgsgdfVWgAKQg==" + "integrity": "sha1-DwWkCu90+eWVHiDvv0SxGHHlZBA=" }, "v8-compile-cache": { "version": "2.1.0", @@ -29874,7 +29874,7 @@ "void-elements": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==" + "integrity": "sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=" }, "vue": { "version": "2.7.10", @@ -31535,7 +31535,7 @@ "cross-spawn": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "requires": { "lru-cache": "^4.0.1", "shebang-command": "^1.2.0", @@ -31545,7 +31545,7 @@ "execa": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", - "integrity": "sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==", + "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", "requires": { "cross-spawn": "^5.0.1", "get-stream": "^3.0.0", @@ -31559,7 +31559,7 @@ "get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==" + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" }, "lru-cache": { "version": "4.1.5", @@ -31573,12 +31573,12 @@ "normalize-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz", - "integrity": "sha512-7WyT0w8jhpDStXRq5836AMmihQwq2nrUVQrgjvUo/p/NZf9uy/MeJ246lBJVmWuYXMlJuG9BNZHF0hWjfTbQUA==" + "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=" }, "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" } } }, diff --git a/website/client/src/components/notifications.vue b/website/client/src/components/notifications.vue index de0984456a..0570c46842 100644 --- a/website/client/src/components/notifications.vue +++ b/website/client/src/components/notifications.vue @@ -339,7 +339,6 @@ export default { userMp: 'user.data.stats.mp', userNotifications: 'user.data.notifications', userAchievements: 'user.data.achievements', // @TODO: does this watch deeply? - armoireEmpty: 'user.data.flags.armoireEmpty', questCompleted: 'user.data.party.quest.completed', }), userClassSelect () { @@ -410,10 +409,6 @@ export default { if (this.user.needsCron) return; this.handleUserNotifications(after); }, - armoireEmpty (after, before) { - if (after === before || after === false) return; - this.$root.$emit('bv::show::modal', 'armoire-empty'); - }, questCompleted () { if (!this.questCompleted) return; this.$root.$emit('bv::show::modal', 'quest-completed'); diff --git a/website/client/src/components/snackbars/notification.vue b/website/client/src/components/snackbars/notification.vue index 0334995c1a..4f9ab6dce8 100644 --- a/website/client/src/components/snackbars/notification.vue +++ b/website/client/src/components/snackbars/notification.vue @@ -246,6 +246,11 @@ export default { }), }; }, + mounted () { + if (this.notification.type === 'drop' && this.notification.emptied) { + this.$root.$emit('bv::show::modal', 'armoire-empty'); + } + }, computed: { message () { if (this.notification.flavorMessage) { diff --git a/website/client/src/store/actions/shops.js b/website/client/src/store/actions/shops.js index 52c2aea350..10bd73648a 100644 --- a/website/client/src/store/actions/shops.js +++ b/website/client/src/store/actions/shops.js @@ -87,6 +87,9 @@ async function buyArmoire (store, params) { icon: getDropClass({ type: item.type, key: item.dropKey }), }; + if (resData.armoire.emptied) { + notificationOptions.emptied = resData.armoire.emptied; + } store.dispatch('snackbars:add', { title: '', timeout: true, diff --git a/website/common/locales/en/achievements.json b/website/common/locales/en/achievements.json index 179d41e933..37cacdba52 100644 --- a/website/common/locales/en/achievements.json +++ b/website/common/locales/en/achievements.json @@ -156,5 +156,8 @@ "achievementBonelessBossModalText": "You collected all the invertebrate pets!", "achievementDuneBuddy": "Dune Buddy", "achievementDuneBuddyText": "Has hatched all standard colors of desert dwelling pets: Armadillo, Cactus, Fox, Frog, Snake, and Spider!", - "achievementDuneBuddyNotes": "You collected all the desert dwelling pets!" + "achievementDuneBuddyNotes": "You collected all the desert dwelling pets!", + "achievementRoughRider": "Rough Rider", + "achievementRoughRiderText": "Has hatched all basic colors of the uncomfortable pets and mounts: Cactus, Hedgehog, and Rock!", + "achievementRoughRiderNotes": "You collected all the basic colors of the uncomfortable pets and mounts!" } diff --git a/website/common/locales/en/backgrounds.json b/website/common/locales/en/backgrounds.json index cb0893ae63..f5c7cd801c 100644 --- a/website/common/locales/en/backgrounds.json +++ b/website/common/locales/en/backgrounds.json @@ -923,6 +923,14 @@ "backgroundJackOLanternStacksText": "Jack O'Lantern Stacks", "backgroundJackOLanternStacksNotes": "Admire a field of Jack O’Lantern Stacks.", + "backgrounds112023": "SET 114: Released November 2023", + "backgroundGiantCatText": "Giant Cat", + "backgroundGiantCatNotes": "Take a nap with a Giant Cat.", + "backgroundBarrelCellarText": "Barrel Cellar", + "backgroundBarrelCellarNotes": "Look for culinary delights in a Barrel Cellar.", + "backgroundAutumnTreeTunnelText": "Autumn Tree Tunnel", + "backgroundAutumnTreeTunnelNotes": "Take in the beauty of an Autumn Tree Tunnel.", + "timeTravelBackgrounds": "Steampunk Backgrounds", "backgroundAirshipText": "Airship", "backgroundAirshipNotes": "Become a sky sailor on board your very own Airship.", diff --git a/website/common/locales/en/subscriber.json b/website/common/locales/en/subscriber.json index c7941fef0b..0f7922e6bb 100644 --- a/website/common/locales/en/subscriber.json +++ b/website/common/locales/en/subscriber.json @@ -154,6 +154,7 @@ "mysterySet202307": "Perilous Kraken Set", "mysterySet202308": "Purple Protagonist Set", "mysterySet202309": "Colossal Comet Moth Set", + "mysterySet202309": "All-Seeing Spellbinder Set", "mysterySet202310": "Ghostlight Wraith Set", "mysterySet202311": "All-Seeing Spellbinder Set", "mysterySet301404": "Steampunk Standard Set", diff --git a/website/common/script/content/achievements.js b/website/common/script/content/achievements.js index 7510299357..4280489746 100644 --- a/website/common/script/content/achievements.js +++ b/website/common/script/content/achievements.js @@ -197,6 +197,7 @@ const animalSetAchievs = { icon: 'achievement-duneBuddy', titleKey: 'achievementDuneBuddy', textKey: 'achievementDuneBuddyText', + release: '2023-10-17T08:00-04:00', }, plantParent: { icon: 'achievement-plantParent', @@ -213,6 +214,12 @@ const animalSetAchievs = { titleKey: 'achievementReptacularRumble', textKey: 'achievementReptacularRumbleText', }, + roughRider: { + icon: 'achievement-roughRider', + titleKey: 'achievementRoughRider', + textKey: 'achievementRoughRiderText', + release: '2023-11-14T08:00-05:00', + }, woodlandWizard: { icon: 'achievement-woodlandWizard', titleKey: 'achievementWoodlandWizard', diff --git a/website/common/script/content/appearance/backgrounds.js b/website/common/script/content/appearance/backgrounds.js index dab98500df..12a5e0080f 100644 --- a/website/common/script/content/appearance/backgrounds.js +++ b/website/common/script/content/appearance/backgrounds.js @@ -1,10 +1,12 @@ -import forOwn from 'lodash/forOwn'; import camelCase from 'lodash/camelCase'; +import forOwn from 'lodash/forOwn'; +import moment from 'moment'; +import omitBy from 'lodash/omitBy'; import upperFirst from 'lodash/upperFirst'; import t from '../translation'; /* eslint-disable camelcase */ -const backgrounds = { +const plannedBackgrounds = { backgrounds062014: { beach: { }, fairy_ring: { }, @@ -585,6 +587,11 @@ const backgrounds = { monstrous_cave: { }, jack_o_lantern_stacks: { }, }, + backgrounds112023: { + giant_cat: { }, + barrel_cellar: { }, + autumn_tree_tunnel: { }, + }, eventBackgrounds: { birthday_bash: { price: 0, @@ -627,8 +634,16 @@ const backgrounds = { }; /* eslint-enable quote-props */ +const releaseDates = { + backgrounds102023: '2023-10-10T08:00-04:00', + backgrounds112023: '2023-11-07T08:00-05:00', +}; + const flat = {}; +const backgrounds = omitBy(plannedBackgrounds, (bgSet, key) => releaseDates[key] + && moment().isBefore(releaseDates[key])); + forOwn(backgrounds, (backgroundsInSet, set) => { forOwn(backgroundsInSet, (background, bgKey) => { background.key = bgKey; diff --git a/website/common/script/content/bundles.js b/website/common/script/content/bundles.js index efb229a453..1b9b727c48 100644 --- a/website/common/script/content/bundles.js +++ b/website/common/script/content/bundles.js @@ -163,8 +163,9 @@ const bundles = { 'rock', 'yarn', ], + event: EVENTS.bundle202311, canBuy () { - return moment().isBetween('2021-03-16T08:00-05:00', '2021-03-31T20:00-05:00'); + return moment().isBetween(EVENTS.bundle202311.start, EVENTS.bundle202311.end); }, type: 'quests', value: 7, diff --git a/website/common/script/content/constants/animalSetAchievements.js b/website/common/script/content/constants/animalSetAchievements.js index 89a35cdc12..4a0746af6e 100644 --- a/website/common/script/content/constants/animalSetAchievements.js +++ b/website/common/script/content/constants/animalSetAchievements.js @@ -120,6 +120,16 @@ const ANIMAL_SET_ACHIEVEMENTS = { achievementKey: 'reptacularRumble', notificationType: 'ACHIEVEMENT_ANIMAL_SET', }, + roughRider: { + type: 'petMount', + species: [ + 'Cactus', + 'Hedgehog', + 'Rock', + ], + achievementKey: 'roughRider', + notificationType: 'ACHIEVEMENT_ANIMAL_SET', + }, woodlandWizard: { type: 'pet', species: [ diff --git a/website/common/script/content/constants/events.js b/website/common/script/content/constants/events.js index 3fa4310285..93bcadddf2 100644 --- a/website/common/script/content/constants/events.js +++ b/website/common/script/content/constants/events.js @@ -10,11 +10,19 @@ const gemsPromo = { export const EVENTS = { noEvent: { - start: '2023-11-01T00:00-05:00', + start: '2023-12-01T00:00-05:00', end: '2023-12-21T08:00-05:00', season: 'normal', npcImageSuffix: '', }, + potions202311: { + start: '2023-11-14T08:00-04:00', + end: '2023-11-30T23:59-04:00', + }, + bundle202311: { + start: '2023-11-09T08:00-04:00', + end: '2023-11-30T23:59-04:00', + }, spooky_extra_gems: { start: '2023-10-24T08:00-04:00', end: '2023-10-31T23:59-04:00', diff --git a/website/common/script/content/gear/sets/armoire.js b/website/common/script/content/gear/sets/armoire.js index 71e7b97e02..c3e4eafb5e 100644 --- a/website/common/script/content/gear/sets/armoire.js +++ b/website/common/script/content/gear/sets/armoire.js @@ -1,6 +1,7 @@ import defaults from 'lodash/defaults'; import find from 'lodash/find'; import forEach from 'lodash/forEach'; +import moment from 'moment'; import upperFirst from 'lodash/upperFirst'; import { ownsItem } from '../gear-helper'; import { ATTRIBUTES } from '../../../constants'; @@ -1248,6 +1249,10 @@ const shield = { int: 4, set: 'cleaningSuppliesTwo', }, + saucepan: { + per: 10, + set: 'cookingImplementsTwo', + }, }; const headAccessory = { @@ -1709,6 +1714,15 @@ const weapon = { int: 3, set: 'somethingSpooky', }, + rollingPin: { + str: 10, + set: 'cookingImplementsTwo', + }, +}; + +const releaseDates = { + somethingSpooky: '2023-10-10T08:00-04:00', + cookingImplementsTwo: '2023-11-07T08:00-05:00', }; forEach({ @@ -1744,6 +1758,7 @@ forEach({ notes = t(`${setKey}Armoire${upperFirst(gearKey)}Notes`); } defaults(gearItem, { + released: releaseDates[gearItem.set] ? moment().isAfter(releaseDates[gearItem.set]) : true, canOwn: ownsItem(`${setKey}_armoire_${gearKey}`), notes, text: t(`${setKey}Armoire${upperFirst(gearKey)}Text`), diff --git a/website/common/script/content/hatching-potions.js b/website/common/script/content/hatching-potions.js index 8b15c330e8..9ab4e6b34c 100644 --- a/website/common/script/content/hatching-potions.js +++ b/website/common/script/content/hatching-potions.js @@ -127,13 +127,13 @@ const premium = { value: 2, text: t('hatchingPotionEmber'), limited: true, - event: EVENTS.bundle202211, + event: EVENTS.potions202311, _addlNotes: t('eventAvailabilityReturning', { availableDate: t('dateEndNovember'), - previousDate: t('novemberYYYY', { year: 2021 }), + previousDate: t('januaryYYYY', { year: 2023 }), }), canBuy () { - return moment().isBetween(EVENTS.bundle202211.start, EVENTS.bundle202211.end); + return moment().isBetween(EVENTS.potions202311.start, EVENTS.potions202311.end); }, }, Thunderstorm: { @@ -257,13 +257,13 @@ const premium = { value: 2, text: t('hatchingPotionFrost'), limited: true, - event: EVENTS.bundle202211, + event: EVENTS.potions202311, _addlNotes: t('eventAvailabilityReturning', { availableDate: t('dateEndNovember'), - previousDate: t('novemberYYYY', { year: 2020 }), + previousDate: t('novemberYYYY', { year: 2022 }), }), canBuy () { - return moment().isBetween(EVENTS.bundle202211.start, EVENTS.bundle202211.end); + return moment().isBetween(EVENTS.potions202311.start, EVENTS.potions202311.end); }, }, IcySnow: { @@ -449,13 +449,13 @@ const premium = { value: 2, text: t('hatchingPotionAutumnLeaf'), limited: true, - event: EVENTS.birthday10, + event: EVENTS.potions202311, _addlNotes: t('eventAvailabilityReturning', { - availableDate: t('dateStartFebruary'), - previousDate: t('novemberYYYY', { year: 2021 }), + availableDate: t('dateEndNovember'), + previousDate: t('januaryYYYY', { year: 2023 }), }), canBuy () { - return moment().isBetween(EVENTS.birthday10.start, EVENTS.birthday10.end); + return moment().isBetween(EVENTS.potions202311.start, EVENTS.potions202311.end); }, }, BlackPearl: { diff --git a/website/common/script/content/index.js b/website/common/script/content/index.js index 707f7ea72c..f249bd66a3 100644 --- a/website/common/script/content/index.js +++ b/website/common/script/content/index.js @@ -99,8 +99,8 @@ api.potion = { api.armoire = { type: 'armoire', text: t('armoireText'), - notes (user, count) { - if (user.flags.armoireEmpty) { + notes (count) { + if (count === 0) { return t('armoireNotesEmpty')(); } return `${t('armoireNotesFull')()} ${count}`; diff --git a/website/common/script/content/shop-featuredItems.js b/website/common/script/content/shop-featuredItems.js index 92e16d7813..87ef3e27cc 100644 --- a/website/common/script/content/shop-featuredItems.js +++ b/website/common/script/content/shop-featuredItems.js @@ -45,19 +45,19 @@ const featuredItems = { ]; }, quests () { - if (moment().isBetween(EVENTS.bundle202310.start, EVENTS.bundle202310.end)) { + if (moment().isBetween(EVENTS.bundle202311.start, EVENTS.bundle202311.end)) { return [ { type: 'bundles', - path: 'bundles.sandySidekicks', + path: 'bundles.oddballs', }, { type: 'quests', - path: 'quests.beetle', + path: 'quests.gryphon', }, { type: 'quests', - path: 'quests.frog', + path: 'quests.armadillo', }, ]; } diff --git a/website/common/script/count.js b/website/common/script/count.js index 803fd76498..ba26a1d6c8 100644 --- a/website/common/script/count.js +++ b/website/common/script/count.js @@ -1,5 +1,6 @@ import each from 'lodash/each'; import filter from 'lodash/filter'; +import has from 'lodash/has'; import keys from 'lodash/keys'; import size from 'lodash/size'; import content from './content/index'; @@ -50,7 +51,9 @@ export function remainingGearInSet (userGear = {}, set) { const gear = filter(content.gear.flat, item => { const setMatches = item.klass === set; const hasItem = userGear[item.key]; - + if (has(item, 'released')) { + return item.released && setMatches && !hasItem; + } return setMatches && !hasItem; }); diff --git a/website/common/script/libs/achievements.js b/website/common/script/libs/achievements.js index 9bed55d795..60982250b2 100644 --- a/website/common/script/libs/achievements.js +++ b/website/common/script/libs/achievements.js @@ -1,4 +1,5 @@ import get from 'lodash/get'; +import moment from 'moment'; import content from '../content/index'; import i18n from '../i18n'; @@ -35,15 +36,18 @@ function contribText (contrib, backer, language) { } function _add (result, data) { - result[data.key] = { - title: data.title, - text: data.text, - icon: data.icon, - earned: data.earned, - value: data.value, - index: index += 1, - optionalCount: data.optionalCount, - }; + const thisContent = achievsContent[data.key]; + if (!thisContent || !thisContent.release || moment().isAfter(thisContent.release)) { + result[data.key] = { + title: data.title, + text: data.text, + icon: data.icon, + earned: data.earned, + value: data.value, + index: index += 1, + optionalCount: data.optionalCount, + }; + } } function _addSimpleWithCustomPath (result, user, data) { @@ -224,6 +228,7 @@ function _getBasicAchievements (user, language) { _addSimple(result, user, { path: 'dinosaurDynasty', language }); _addSimple(result, user, { path: 'bonelessBoss', language }); _addSimple(result, user, { path: 'duneBuddy', language }); + _addSimple(result, user, { path: 'roughRider', language }); _addSimpleWithMasterCount(result, user, { path: 'beastMaster', language }); _addSimpleWithMasterCount(result, user, { path: 'mountMaster', language }); diff --git a/website/common/script/libs/getItemInfo.js b/website/common/script/libs/getItemInfo.js index 39ad956163..59df678a01 100644 --- a/website/common/script/libs/getItemInfo.js +++ b/website/common/script/libs/getItemInfo.js @@ -292,7 +292,7 @@ export default function getItemInfo (user, type, item, officialPinnedItems, lang itemInfo = { key: item.key, text: item.text(language), - notes: item.notes(user, count.remainingGearInSet(user.items.gear.owned, 'armoire')), // TODO count + notes: item.notes(count.remainingGearInSet(user.items.gear.owned, 'armoire')), value: item.value, currency: 'gold', purchaseType: 'armoire', diff --git a/website/common/script/ops/buy/buyArmoire.js b/website/common/script/ops/buy/buyArmoire.js index 1c4a612a96..804253d22d 100644 --- a/website/common/script/ops/buy/buyArmoire.js +++ b/website/common/script/ops/buy/buyArmoire.js @@ -2,7 +2,6 @@ import filter from 'lodash/filter'; import isEmpty from 'lodash/isEmpty'; import pick from 'lodash/pick'; import content from '../../content/index'; -import * as count from '../../count'; import splitWhitespace from '../../libs/splitWhitespace'; import { NotAuthorized, @@ -33,7 +32,7 @@ export class BuyArmoireOperation extends AbstractGoldItemOperation { // eslint-d let result = {}; const armoireResult = randomValFns.trueRandom(); - const eligibleEquipment = filter(content.gear.flat, eligible => eligible.klass === 'armoire' && !user.items.gear.owned[eligible.key]); + const eligibleEquipment = filter(content.gear.flat, eligible => eligible.klass === 'armoire' && eligible.released && !user.items.gear.owned[eligible.key]); const armoireHasEquipment = !isEmpty(eligibleEquipment); if ( @@ -83,6 +82,7 @@ export class BuyArmoireOperation extends AbstractGoldItemOperation { // eslint-d } _gearResult (user, eligibleEquipment) { + const emptied = eligibleEquipment.length === 1; eligibleEquipment.sort(); const drop = randomVal(eligibleEquipment); @@ -102,10 +102,6 @@ export class BuyArmoireOperation extends AbstractGoldItemOperation { // eslint-d dropText: drop.text(this.req.language), }); - if (count.remainingGearInSet(user.items.gear.owned, 'armoire') === 0) { - user.flags.armoireEmpty = true; - } - removeItemByPath(user, `gear.flat.${drop.key}`); if (this.analytics) { @@ -116,6 +112,7 @@ export class BuyArmoireOperation extends AbstractGoldItemOperation { // eslint-d type: 'gear', dropKey: drop.key, dropText: drop.text(this.req.language), + emptied, }; return { diff --git a/website/common/script/ops/hatch.js b/website/common/script/ops/hatch.js index ae425ab8cc..af1b357fc2 100644 --- a/website/common/script/ops/hatch.js +++ b/website/common/script/ops/hatch.js @@ -86,16 +86,26 @@ export default function hatch (user, req = {}, analytics) { if (content.dropHatchingPotions[hatchingPotion]) { forEach(content.animalSetAchievements, achievement => { if (!user.achievements[achievement.achievementKey]) { - if (achievement.type === 'pet') { + if (achievement.type === 'pet' || achievement.type === 'petMount') { let achieved = true; forEach(achievement.species, species => { if (!achieved) return; const petIndex = findIndex( keys(content.dropHatchingPotions), - color => !user.items.pets[`${species}-${color}`], + color => !user.items.pets[`${species}-${color}`] || user.items.pets[`${species}-${color}`] === -1, ); if (petIndex !== -1) achieved = false; }); + if (achievement.type === 'petMount') { + forEach(achievement.species, species => { + if (!achieved) return; + const mountIndex = findIndex( + keys(content.dropHatchingPotions), + color => !user.items.mounts[`${species}-${color}`], + ); + if (mountIndex !== -1) achieved = false; + }); + } if (achieved) { user.achievements[achievement.achievementKey] = true; if (user.addNotification) { diff --git a/website/server/models/user/schema.js b/website/server/models/user/schema.js index f347606ab6..0e34c210d0 100644 --- a/website/server/models/user/schema.js +++ b/website/server/models/user/schema.js @@ -157,6 +157,7 @@ export const UserSchema = new Schema({ dinosaurDynasty: Boolean, bonelessBoss: Boolean, duneBuddy: Boolean, + roughRider: Boolean, // Onboarding Guide createdTask: Boolean, completedTask: Boolean,