diff --git a/habitica-images b/habitica-images index 69724d88ef6..335b47650fa 160000 --- a/habitica-images +++ b/habitica-images @@ -1 +1 @@ -Subproject commit 69724d88ef6a4be85104fb08ae1e3d0a3f649765 +Subproject commit 335b47650fa5c4929c7c1680ed8960fe66cca266 diff --git a/package-lock.json b/package-lock.json index a7cb0f99df8..38b36339b92 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "habitica", - "version": "5.3.0", + "version": "5.6.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -27,33 +27,74 @@ "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==" }, "@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.10.tgz", + "integrity": "sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw==", "requires": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", + "@babel/helper-compilation-targets": "^7.22.10", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helpers": "^7.22.10", + "@babel/parser": "^7.22.10", "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", + "@babel/traverse": "^7.22.10", + "@babel/types": "^7.22.10", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.2", - "semver": "^6.3.0" + "semver": "^6.3.1" }, "dependencies": { "@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz", + "integrity": "sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==", "requires": { - "@babel/highlight": "^7.22.5" + "@babel/highlight": "^7.22.10", + "chalk": "^2.4.2" + } + }, + "@babel/compat-data": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==" + }, + "@babel/generator": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", + "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", + "requires": { + "@babel/types": "^7.22.10", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", + "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", + "requires": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + } + }, + "@babel/helper-module-transforms": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", + "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.5" } }, "@babel/helper-validator-identifier": { @@ -62,25 +103,72 @@ "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==" }, "@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz", + "integrity": "sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==", "requires": { "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" } }, - "@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "@babel/parser": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.10.tgz", + "integrity": "sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==" + }, + "@babel/traverse": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.10.tgz", + "integrity": "sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig==", "requires": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.10", + "@babel/types": "^7.22.10", + "debug": "^4.1.0", + "globals": "^11.1.0" } }, + "@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==" + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "browserslist": { + "version": "4.21.10", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", + "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "requires": { + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.11" + } + }, + "caniuse-lite": { + "version": "1.0.30001522", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001522.tgz", + "integrity": "sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg==" + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -91,10 +179,32 @@ "supports-color": "^5.3.0" } }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + }, + "update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" } } }, @@ -542,28 +652,99 @@ } }, "@babel/helpers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", - "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.10.tgz", + "integrity": "sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw==", "requires": { "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.22.10", + "@babel/types": "^7.22.10" }, "dependencies": { + "@babel/code-frame": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz", + "integrity": "sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==", + "requires": { + "@babel/highlight": "^7.22.10", + "chalk": "^2.4.2" + } + }, + "@babel/generator": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", + "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", + "requires": { + "@babel/types": "^7.22.10", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + } + }, "@babel/helper-validator-identifier": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==" }, - "@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "@babel/highlight": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz", + "integrity": "sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==", "requires": { - "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.10.tgz", + "integrity": "sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==" + }, + "@babel/traverse": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.10.tgz", + "integrity": "sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig==", + "requires": { + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.10", + "@babel/types": "^7.22.10", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==" + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } } } @@ -2105,13 +2286,13 @@ "integrity": "sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw==" }, "@parse/node-apn": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/@parse/node-apn/-/node-apn-5.1.3.tgz", - "integrity": "sha512-Bwhmbm895lEIF2772PJ8dSvBjrtOG9/q/TDMxmX40IgZxQFoXS73+JUIKTq3CA7SUB/Szu5roJINQ0L2U/1MJw==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@parse/node-apn/-/node-apn-5.2.3.tgz", + "integrity": "sha512-uBUTTbzk0YyMOcE5qTcNdit5v1BdaECCRSQYbMGU/qY1eHwBaqeWOYd8rwi2Caga3K7IZyQGhpvL4/56H+uvrQ==", "requires": { "debug": "4.3.3", - "jsonwebtoken": "8.5.1", - "node-forge": "1.3.0", + "jsonwebtoken": "9.0.0", + "node-forge": "1.3.1", "verror": "1.10.1" }, "dependencies": { @@ -2124,20 +2305,14 @@ } }, "jsonwebtoken": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", - "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", + "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", "requires": { "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", + "lodash": "^4.17.21", "ms": "^2.1.1", - "semver": "^5.6.0" + "semver": "^7.3.8" } }, "jwa": { @@ -2159,10 +2334,13 @@ "safe-buffer": "^5.0.1" } }, - "node-forge": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.0.tgz", - "integrity": "sha512-08ARB91bUi6zNKzVmaj3QO7cr397uiDT2nJ63cHjyNtCTWIgvS47j3eT0WfzUwS9+6Z5YshRaoasFkXCKrIYbA==" + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "requires": { + "lru-cache": "^6.0.0" + } }, "verror": { "version": "1.10.1", @@ -2177,9 +2355,9 @@ } }, "@sindresorhus/is": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz", - "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==" + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==" }, "@sinonjs/commons": { "version": "3.0.0", @@ -2283,14 +2461,14 @@ } }, "@types/cacheable-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", - "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", "requires": { "@types/http-cache-semantics": "*", - "@types/keyv": "*", + "@types/keyv": "^3.1.4", "@types/node": "*", - "@types/responselike": "*" + "@types/responselike": "^1.0.0" } }, "@types/color-name": { @@ -2383,9 +2561,9 @@ } }, "@types/keyv": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", - "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", "requires": { "@types/node": "*" } @@ -3355,9 +3533,9 @@ "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==" }, "axios": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.6.tgz", - "integrity": "sha512-PEcdkk7JcdPiMDkvM4K6ZBRYq9keuVJsToxm2zQIM70Qqo2WHTdJZMXcG9X+RmRp2VPNUQC8W1RAGbgt6b1yMg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", + "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", "dev": true, "requires": { "follow-redirects": "^1.15.0", @@ -4210,9 +4388,9 @@ "optional": true }, "bootstrap": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.0.tgz", - "integrity": "sha512-Io55IuQY3kydzHtbGvQya3H+KorS/M9rSNyfCGCg9WZ4pyT/lCxIlpJgG1GXW/PswzC84Tr2fBYi+7+jFVQQBw==" + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.2.tgz", + "integrity": "sha512-51Bbp/Uxr9aTuy6ca/8FbFloBUJZLHwnhTcnjIeRn2suQWsWzcuJhGjKDB5eppVte/8oCdOL3VuwxvZDUggwGQ==" }, "boxen": { "version": "4.2.0", @@ -8265,9 +8443,9 @@ } }, "got": { - "version": "11.8.3", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.3.tgz", - "integrity": "sha512-7gtQ5KiPh1RtGS9/Jbv1ofDpBFuq42gyfEib+ejaRBJuj/3tQFeR5+gw57e4ipaU8c/rCjvX6fkQz2lyDlGAOg==", + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", "requires": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", @@ -8291,9 +8469,9 @@ } }, "cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", "requires": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -8331,9 +8509,9 @@ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, "keyv": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.4.tgz", - "integrity": "sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==", + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", + "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", "requires": { "json-buffer": "3.0.1" } @@ -8359,9 +8537,9 @@ "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==" }, "responselike": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", - "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", "requires": { "lowercase-keys": "^2.0.0" } @@ -10256,41 +10434,6 @@ "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", "dev": true }, - "lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" - }, - "lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" - }, - "lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" - }, - "lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" - }, - "lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" - }, "log-driver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", @@ -11113,16 +11256,17 @@ } }, "mongoose": { - "version": "5.13.7", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.13.7.tgz", - "integrity": "sha512-ADIvftZ+KfoTALMZ0n8HvBlezFhcUd73hQaHQDwQ+3X+JZlqE47fUy9yhFZ2SjT+qzmuaCcIXCfhewIc38t2fQ==", + "version": "5.13.20", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.13.20.tgz", + "integrity": "sha512-TjGFa/XnJYt+wLmn8y9ssjyO2OhBMeEBtOHb9iJM16EWu2Du6L1Q6zSiEK2ziyYQM8agb4tumNIQFzqbxId7MA==", "requires": { + "@types/bson": "1.x || 4.0.x", "@types/mongodb": "^3.5.27", "bson": "^1.1.4", "kareem": "2.3.2", - "mongodb": "3.6.11", + "mongodb": "3.7.4", "mongoose-legacy-pluralize": "1.0.2", - "mpath": "0.8.3", + "mpath": "0.8.4", "mquery": "3.2.5", "ms": "2.1.2", "optional-require": "1.0.x", @@ -11142,22 +11286,32 @@ } }, "mongodb": { - "version": "3.6.11", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.11.tgz", - "integrity": "sha512-4Y4lTFHDHZZdgMaHmojtNAlqkvddX2QQBEN0K//GzxhGwlI9tZ9R0vhbjr1Decw+TF7qK0ZLjQT292XgHRRQgw==", + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.7.4.tgz", + "integrity": "sha512-K5q8aBqEXMwWdVNh94UQTwZ6BejVbFhh1uB6c5FKtPE9eUMZPUO3sRZdgIEcHSrAWmxzpG/FeODDKL388sqRmw==", "requires": { "bl": "^2.2.1", "bson": "^1.1.4", "denque": "^1.4.1", - "optional-require": "^1.0.3", + "optional-require": "^1.1.8", "safe-buffer": "^5.1.2", "saslprep": "^1.0.0" + }, + "dependencies": { + "optional-require": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.1.8.tgz", + "integrity": "sha512-jq83qaUb0wNg9Krv1c5OQ+58EK+vHde6aBPzLvPPqJm89UQWsvSuFy9X/OSNJnFeSOKo7btE0n8Nl2+nE+z5nA==", + "requires": { + "require-at": "^1.0.6" + } + } } }, "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -11300,9 +11454,9 @@ } }, "mpath": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.3.tgz", - "integrity": "sha512-eb9rRvhDltXVNL6Fxd2zM9D4vKBxjVVQNLNijlj7uoXUy19zNDsIif5zR+pWmPCWNKwAtqyo4JveQm4nfD5+eA==" + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.4.tgz", + "integrity": "sha512-DTxNZomBcTWlrMW76jy1wvV37X/cNNxPW1y2Jzd4DZkAaC5ZGsm8bfGfNOthcDuRJujXLqiuS6o3Tpy0JEoh7g==" }, "mquery": { "version": "3.2.5", @@ -11327,7 +11481,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, @@ -12203,9 +12357,9 @@ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" }, "passport": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/passport/-/passport-0.5.0.tgz", - "integrity": "sha512-ln+ue5YaNDS+fes6O5PCzXKSseY5u8MYhX9H5Co4s+HfYI5oqvnHKoOORLYDUPh+8tHvrxugF2GFcUA1Q1Gqfg==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.5.3.tgz", + "integrity": "sha512-gGc+70h4gGdBWNsR3FuV3byLDY6KBTJAIExGFXTpQaYfbbcHCBlRRKx7RBQSpqEqc5Hh2qVzRs7ssvSfOpkUEA==", "requires": { "passport-strategy": "1.x.x", "pause": "0.0.1" @@ -12319,7 +12473,7 @@ "pause": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", - "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" + "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==" }, "pause-stream": { "version": "0.0.11", @@ -13153,6 +13307,11 @@ "integrity": "sha1-7W2Lm9Y4wTMosV3YOL1mYRHdeBw=", "dev": true }, + "require-at": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/require-at/-/require-at-1.0.6.tgz", + "integrity": "sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g==" + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -13809,7 +13968,7 @@ "sliced": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", - "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" + "integrity": "sha512-VZBmZP8WU3sMOZm1bdgTadsQbcscK0UM8oKxKVBs4XAhUo2Xxzm/OFMGBkPusxw9xL3Uy8LrzEqGqJhclsr0yA==" }, "snapdragon": { "version": "0.8.2", @@ -14402,9 +14561,9 @@ } }, "stripe": { - "version": "12.9.0", - "resolved": "https://registry.npmjs.org/stripe/-/stripe-12.9.0.tgz", - "integrity": "sha512-stYtrWetRYUsEbsUVyJaPG9Sppt0ds2szBqXsuDG6KZPPuUmCccbpceLrhoOBwNl1RziEfNB7oG9wg1n2eW+EQ==", + "version": "12.18.0", + "resolved": "https://registry.npmjs.org/stripe/-/stripe-12.18.0.tgz", + "integrity": "sha512-cYjgBM2SY/dTm8Lr6eMyyONaHTZHA/QjHxFUIW5WH8FevSRIGAVtXEmBkUXF1fsqe7QvvRgQSGSJZmjDacegGg==", "requires": { "@types/node": ">=8.1.0", "qs": "^6.11.0" @@ -15636,9 +15795,9 @@ } }, "validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==" + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==" }, "value-or-function": { "version": "3.0.0", diff --git a/package.json b/package.json index f5142dd9395..527f674435a 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,14 @@ { "name": "habitica", "description": "A habit tracker app which treats your goals like a Role Playing Game.", - "version": "5.3.0", + "version": "5.6.0", "main": "./website/server/index.js", "dependencies": { - "@babel/core": "^7.22.5", + "@babel/core": "^7.22.10", "@babel/preset-env": "^7.22.10", "@babel/register": "^7.22.5", "@google-cloud/trace-agent": "^7.1.2", - "@parse/node-apn": "^5.1.3", + "@parse/node-apn": "^5.2.3", "@slack/webhook": "^6.1.0", "accepts": "^1.3.8", "amazon-payments": "^0.2.9", @@ -17,7 +17,7 @@ "apple-auth": "^1.0.9", "bcrypt": "^5.1.1", "body-parser": "^1.20.2", - "bootstrap": "^4.6.0", + "bootstrap": "^4.6.2", "compression": "^1.7.4", "cookie-session": "^2.0.0", "coupon-code": "^0.4.5", @@ -31,7 +31,7 @@ "express-basic-auth": "^1.2.1", "express-validator": "^5.2.0", "glob": "^8.1.0", - "got": "^11.8.3", + "got": "^11.8.6", "gulp": "^4.0.0", "gulp-babel": "^8.0.0", "gulp-imagemin": "^7.1.0", @@ -49,12 +49,12 @@ "method-override": "^3.0.0", "moment": "^2.29.4", "moment-recur": "^1.0.7", - "mongoose": "^5.13.7", + "mongoose": "^5.13.20", "morgan": "^1.10.0", "nconf": "^0.12.0", "node-gcm": "^1.0.5", "on-headers": "^1.0.2", - "passport": "^0.5.0", + "passport": "^0.5.3", "passport-facebook": "^3.0.0", "passport-google-oauth2": "^0.2.0", "passport-google-oauth20": "2.0.0", @@ -67,12 +67,12 @@ "remove-markdown": "^0.5.0", "rimraf": "^3.0.2", "short-uuid": "^4.2.2", - "stripe": "^12.9.0", + "stripe": "^12.18.0", "superagent": "^8.1.2", "universal-analytics": "^0.5.3", "useragent": "^2.1.9", "uuid": "^9.0.0", - "validator": "^13.9.0", + "validator": "^13.11.0", "vinyl-buffer": "^1.0.1", "winston": "^3.10.0", "winston-loggly-bulk": "^3.2.1", @@ -110,7 +110,7 @@ "apidoc": "gulp apidoc" }, "devDependencies": { - "axios": "^1.3.6", + "axios": "^1.4.0", "chai": "^4.3.7", "chai-as-promised": "^7.1.1", "chai-moment": "^0.1.0", diff --git a/test/api/v3/integration/members/POST-members_memberId_clear-flags.js b/test/api/v3/integration/members/POST-members_memberId_clear-flags.js new file mode 100644 index 00000000000..b6b486b6f7a --- /dev/null +++ b/test/api/v3/integration/members/POST-members_memberId_clear-flags.js @@ -0,0 +1,64 @@ +import { v4 as generateUUID } from 'uuid'; +import { + generateUser, + translate as t, +} from '../../../../helpers/api-integration/v3'; + +describe('POST /members/:memberId/clear-flags', () => { + let reporter; + let admin; + let moderator; + + beforeEach(async () => { + reporter = await generateUser(); + admin = await generateUser({ permissions: { userSupport: true } }); + moderator = await generateUser({ permissions: { moderator: true } }); + await reporter.post(`/members/${admin._id}/flag`); + }); + + context('error cases', () => { + it('returns error when memberId is not a UUID', async () => { + await expect(moderator.post('/members/gribbly/clear-flags')) + .to.eventually.be.rejected.and.eql({ + code: 400, + error: 'BadRequest', + message: t('invalidReqParams'), + }); + }); + + it('returns error when member with UUID is not found', async () => { + const randomId = generateUUID(); + + await expect(moderator.post(`/members/${randomId}/clear-flags`)) + .to.eventually.be.rejected.and.eql({ + code: 404, + error: 'NotFound', + message: t('userWithIDNotFound', { userId: randomId }), + }); + }); + + it('returns error when requesting user is not a moderator', async () => { + await expect(reporter.post(`/members/${admin._id}/clear-flags`)) + .to.eventually.be.rejected.and.eql({ + code: 400, + error: 'BadRequest', + message: 'Only a moderator may clear reports from a profile.', + }); + }); + }); + + context('valid request', () => { + it('removes a single flag from user', async () => { + await expect(moderator.post(`/members/${admin._id}/clear-flags`)).to.eventually.be.ok; + const updatedTarget = await admin.get(`/hall/heroes/${admin._id}`); + expect(updatedTarget.profile.flags).to.eql({}); + }); + + it('removes multiple flags from user', async () => { + await moderator.post(`/members/${admin._id}/flag`); + await expect(moderator.post(`/members/${admin._id}/clear-flags`)).to.eventually.be.ok; + const updatedTarget = await admin.get(`/hall/heroes/${admin._id}`); + expect(updatedTarget.profile.flags).to.eql({}); + }); + }); +}); \ No newline at end of file diff --git a/test/api/v3/integration/members/POST-members_memberId_flag.js b/test/api/v3/integration/members/POST-members_memberId_flag.js new file mode 100644 index 00000000000..3c8282df760 --- /dev/null +++ b/test/api/v3/integration/members/POST-members_memberId_flag.js @@ -0,0 +1,151 @@ +import { v4 as generateUUID } from 'uuid'; +import moment from 'moment'; +import nconf from 'nconf'; +import { + generateUser, + translate as t, +} from '../../../../helpers/api-integration/v3'; +import { IncomingWebhook } from '@slack/webhook'; + +describe('POST /members/:memberId/flag', () => { + let reporter; + let target; + + beforeEach(async () => { + reporter = await generateUser(); + target = await generateUser({ + 'profile.blurb': 'Naughty Text', + 'profile.imageUrl': 'https://evil.com/', + }); + }); + + context('error cases', () => { + it('returns error when memberId is not a UUID', async () => { + await expect(reporter.post('/members/gribbly/flag')) + .to.eventually.be.rejected.and.eql({ + code: 400, + error: 'BadRequest', + message: t('invalidReqParams'), + }); + }); + + it('returns error when member with UUID is not found', async () => { + const randomId = generateUUID(); + + await expect(reporter.post(`/members/${randomId}/flag`)) + .to.eventually.be.rejected.and.eql({ + code: 404, + error: 'NotFound', + message: t('userWithIDNotFound', { userId: randomId }), + }); + }); + + it('returns error when non-admin flags same profile twice', async () => { + await reporter.post(`/members/${target._id}/flag`); + await expect (reporter.post(`/members/${target._id}/flag`)) + .to.eventually.be.rejected.and.eql({ + code: 400, + error: 'BadRequest', + message: 'A profile can not be flagged more than once by the same user.', + }); + }); + }); + + context('valid request', () => { + let admin; + const comment = 'this profile is bad'; + const source = 'Third Party Script'; + + beforeEach(async () => { + admin = await generateUser({ 'permissions.userSupport': true }); + sandbox.stub(IncomingWebhook.prototype, 'send').returns(Promise.resolve()); + }); + + afterEach(() => { + sandbox.restore(); + }); + + it('adds flags object to target user', async () => { + await reporter.post(`/members/${target._id}/flag`); + const updatedTarget = await admin.get(`/hall/heroes/${target._id}`); + expect(updatedTarget.profile.flags[reporter._id]).to.have.all.keys([ + 'comment', + 'source', + 'timestamp', + ]); + expect(moment(updatedTarget.profile.flags[reporter._id].timestamp).toDate()).to.be.a('date'); + }); + + it('allows addition of a comment and source', async () => { + await reporter.post(`/members/${target._id}/flag`, { + comment, + source, + }); + const updatedTarget = await admin.get(`/hall/heroes/${target._id}`); + expect(updatedTarget.profile.flags[reporter._id].comment).to.eql(comment); + expect(updatedTarget.profile.flags[reporter._id].source).to.eql(source); + }); + + it('allows moderator to flag twice', async () => { + const moderator = await generateUser({ 'permissions.moderator': true }); + await moderator.post(`/members/${target._id}/flag`); + await expect(moderator.post(`/members/${target._id}/flag`)).to.eventually.be.ok; + }); + + it('allows multiple non-moderators to flag individually', async () => { + await admin.post(`/members/${target._id}/flag`); + await reporter.post(`/members/${target._id}/flag`); + const updatedTarget = await admin.get(`/hall/heroes/${target._id}`); + expect(updatedTarget.profile.flags[admin._id]).to.exist; + expect(updatedTarget.profile.flags[reporter._id]).to.exist; + }); + + it('sends a flag report to moderation Slack', async () => { + const BASE_URL = nconf.get('BASE_URL'); + await reporter.post(`/members/${target._id}/flag`, { + comment, + source, + }); + + /* eslint-disable camelcase */ + expect(IncomingWebhook.prototype.send).to.be.calledWith({ + text: `@${reporter.auth.local.username} (${reporter._id}; language: ${reporter.preferences.language}) flagged @${target.auth.local.username}'s profile from ${source} and commented: ${comment}`, + attachments: [{ + fallback: 'Flag Profile', + color: 'danger', + title: 'User Profile Report', + title_link: `${BASE_URL}/profile/${target._id}`, + text: `Display Name: ${target.profile.name}\n\nImage URL: ${target.profile.imageUrl}\n\nAbout: ${target.profile.blurb}`, + mrkdwn_in: [ + 'text', + ], + }], + }); + /* eslint-enable camelcase */ + }); + + it('excludes empty fields when sending Slack message', async () => { + const BASE_URL = nconf.get('BASE_URL'); + await reporter.post(`/members/${admin._id}/flag`, { + comment, + source, + }); + + /* eslint-disable camelcase */ + expect(IncomingWebhook.prototype.send).to.be.calledWith({ + text: `@${reporter.auth.local.username} (${reporter._id}; language: ${reporter.preferences.language}) flagged @${admin.auth.local.username}'s profile from ${source} and commented: ${comment}`, + attachments: [{ + fallback: 'Flag Profile', + color: 'danger', + title: 'User Profile Report', + title_link: `${BASE_URL}/profile/${admin._id}`, + text: `Display Name: ${admin.profile.name}`, + mrkdwn_in: [ + 'text', + ], + }], + }); + /* eslint-enable camelcase */ + }); + }); +}); \ No newline at end of file diff --git a/test/common/ops/buy/purchase.js b/test/common/ops/buy/purchase.js index fa5f7c5473b..798cf63c3a1 100644 --- a/test/common/ops/buy/purchase.js +++ b/test/common/ops/buy/purchase.js @@ -197,7 +197,7 @@ describe('shared.ops.purchase', () => { it('purchases quest bundles', async () => { const startingBalance = user.balance; - const clock = sandbox.useFakeTimers(moment('2019-05-20').valueOf()); + // const clock = sandbox.useFakeTimers(moment('2019-05-20').valueOf()); const type = 'bundles'; const key = 'featheredFriends'; const price = 1.75; @@ -216,7 +216,7 @@ describe('shared.ops.purchase', () => { expect(user.balance).to.equal(startingBalance - price); expect(pinnedGearUtils.removeItemByPath.notCalled).to.equal(true); - clock.restore(); + // clock.restore(); }); }); diff --git a/website/client/package-lock.json b/website/client/package-lock.json index 93f855e2a42..86f144836ac 100644 --- a/website/client/package-lock.json +++ b/website/client/package-lock.json @@ -13318,11 +13318,34 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "optional": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "optional": true + }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "optional": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -13354,6 +13377,38 @@ "ansi-regex": "^5.0.1" } }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "optional": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "vue-loader-v16": { + "version": "npm:vue-loader@16.8.3", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz", + "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==", + "optional": true, + "requires": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "loader-utils": "^2.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "optional": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, "wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -30581,76 +30636,6 @@ } } }, - "vue-loader-v16": { - "version": "npm:vue-loader@16.8.3", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz", - "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==", - "requires": { - "chalk": "^4.1.0", - "hash-sum": "^2.0.0", - "loader-utils": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "vue-mugen-scroll": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/vue-mugen-scroll/-/vue-mugen-scroll-0.2.6.tgz", diff --git a/website/client/src/assets/css/sprites/spritesmith-main.css b/website/client/src/assets/css/sprites/spritesmith-main.css index 2f5f207a244..41ce136f419 100644 --- a/website/client/src/assets/css/sprites/spritesmith-main.css +++ b/website/client/src/assets/css/sprites/spritesmith-main.css @@ -23760,6 +23760,26 @@ width: 114px; height: 90px; } +.broad_armor_special_fall2023Healer { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_fall2023Healer.png'); + width: 114px; + height: 90px; +} +.broad_armor_special_fall2023Mage { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_fall2023Mage.png'); + width: 114px; + height: 90px; +} +.broad_armor_special_fall2023Rogue { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_fall2023Rogue.png'); + width: 114px; + height: 90px; +} +.broad_armor_special_fall2023Warrior { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_fall2023Warrior.png'); + width: 114px; + height: 90px; +} .broad_armor_special_fallHealer { background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_fallHealer.png'); width: 90px; @@ -23950,6 +23970,26 @@ width: 114px; height: 90px; } +.head_special_fall2023Healer { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_fall2023Healer.png'); + width: 114px; + height: 90px; +} +.head_special_fall2023Mage { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_fall2023Mage.png'); + width: 114px; + height: 90px; +} +.head_special_fall2023Rogue { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_fall2023Rogue.png'); + width: 114px; + height: 90px; +} +.head_special_fall2023Warrior { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_fall2023Warrior.png'); + width: 114px; + height: 90px; +} .head_special_fallHealer { background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_fallHealer.png'); width: 90px; @@ -24090,6 +24130,21 @@ width: 114px; height: 90px; } +.shield_special_fall2023Healer { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_special_fall2023Healer.png'); + width: 114px; + height: 90px; +} +.shield_special_fall2023Rogue { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_special_fall2023Rogue.png'); + width: 114px; + height: 90px; +} +.shield_special_fall2023Warrior { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_special_fall2023Warrior.png'); + width: 114px; + height: 90px; +} .shield_special_fallHealer { background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_special_fallHealer.png'); width: 90px; @@ -24265,6 +24320,26 @@ width: 68px; height: 68px; } +.shop_armor_special_fall2023Healer { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_special_fall2023Healer.png'); + width: 68px; + height: 68px; +} +.shop_armor_special_fall2023Mage { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_special_fall2023Mage.png'); + width: 68px; + height: 68px; +} +.shop_armor_special_fall2023Rogue { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_special_fall2023Rogue.png'); + width: 68px; + height: 68px; +} +.shop_armor_special_fall2023Warrior { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_special_fall2023Warrior.png'); + width: 68px; + height: 68px; +} .shop_armor_special_fallHealer { background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_special_fallHealer.png'); width: 68px; @@ -24455,6 +24530,21 @@ width: 68px; height: 68px; } +.shop_head_special_fall2023Healer { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_fall2023Healer.png'); + width: 68px; + height: 68px; +} +.shop_head_special_fall2023Mage { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_fall2023Mage.png'); + width: 68px; + height: 68px; +} +.shop_head_special_fall2023Warrior { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_fall2023Warrior.png'); + width: 68px; + height: 68px; +} .shop_head_special_fallHealer { background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_fallHealer.png'); width: 68px; @@ -24595,6 +24685,21 @@ width: 68px; height: 68px; } +.shop_shield_special_fall2023Healer { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_special_fall2023Healer.png'); + width: 68px; + height: 68px; +} +.shop_shield_special_fall2023Rogue { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_special_fall2023Rogue.png'); + width: 68px; + height: 68px; +} +.shop_shield_special_fall2023Warrior { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_special_fall2023Warrior.png'); + width: 68px; + height: 68px; +} .shop_shield_special_fallHealer { background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_special_fallHealer.png'); width: 68px; @@ -24770,6 +24875,16 @@ width: 68px; height: 68px; } +.shop_weapon_special_fall2023Healer { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_special_fall2023Healer.png'); + width: 68px; + height: 68px; +} +.shop_weapon_special_fall2023Rogue { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_special_fall2023Rogue.png'); + width: 68px; + height: 68px; +} .shop_weapon_special_fallHealer { background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_special_fallHealer.png'); width: 68px; @@ -24790,6 +24905,21 @@ width: 68px; height: 68px; } +.shop_head_special_fall2023Rogue { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_fall2023Rogue.png'); + width: 68px; + height: 68px; +} +.shop_weapon_special_fall2023Mage { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_special_fall2023Mage.png'); + width: 68px; + height: 68px; +} +.shop_weapon_special_fall2023Warrior { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_special_fall2023Warrior.png'); + width: 68px; + height: 68px; +} .slim_armor_special_fall2015Healer { background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_special_fall2015Healer.png'); width: 93px; @@ -24950,6 +25080,26 @@ width: 114px; height: 90px; } +.slim_armor_special_fall2023Healer { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_special_fall2023Healer.png'); + width: 114px; + height: 90px; +} +.slim_armor_special_fall2023Mage { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_special_fall2023Mage.png'); + width: 114px; + height: 90px; +} +.slim_armor_special_fall2023Rogue { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_special_fall2023Rogue.png'); + width: 114px; + height: 90px; +} +.slim_armor_special_fall2023Warrior { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_special_fall2023Warrior.png'); + width: 114px; + height: 90px; +} .slim_armor_special_fallHealer { background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_special_fallHealer.png'); width: 90px; @@ -25130,6 +25280,26 @@ width: 114px; height: 90px; } +.weapon_special_fall2023Healer { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_special_fall2023Healer.png'); + width: 114px; + height: 90px; +} +.weapon_special_fall2023Mage { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_special_fall2023Mage.png'); + width: 114px; + height: 90px; +} +.weapon_special_fall2023Rogue { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_special_fall2023Rogue.png'); + width: 114px; + height: 90px; +} +.weapon_special_fall2023Warrior { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_special_fall2023Warrior.png'); + width: 114px; + height: 90px; +} .weapon_special_fallHealer { background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_special_fallHealer.png'); width: 90px; @@ -28460,6 +28630,46 @@ width: 68px; height: 68px; } +.broad_armor_mystery_202310 { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_mystery_202310.png'); + width: 117px; + height: 120px; +} +.headAccessory_mystery_202310 { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_mystery_202310.png'); + width: 117px; + height: 120px; +} +.head_mystery_202310 { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_mystery_202310.png'); + width: 117px; + height: 120px; +} +.shop_armor_mystery_202310 { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_mystery_202310.png'); + width: 68px; + height: 68px; +} +.shop_headAccessory_mystery_202310 { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_mystery_202310.png'); + width: 68px; + height: 68px; +} +.shop_head_mystery_202310 { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_mystery_202310.png'); + width: 68px; + height: 68px; +} +.shop_set_mystery_202310 { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_set_mystery_202310.png'); + width: 68px; + height: 68px; +} +.slim_armor_mystery_202310 { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_mystery_202310.png'); + width: 117px; + height: 120px; +} .broad_armor_mystery_301404 { background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_mystery_301404.png'); width: 90px; @@ -34474,317 +34684,109 @@ width: 68px; height: 68px; } -.headAccessory_special_bearEars { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_bearEars.png'); +.head_0 { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_0.png'); width: 90px; height: 90px; } -.customize-option.headAccessory_special_bearEars { +.customize-option.head_0 { background-position: -25px -15px; - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_bearEars.png'); + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_0.png'); width: 60px; height: 60px; } -.headAccessory_special_blackHeadband { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_blackHeadband.png'); - width: 114px; +.head_healer_1 { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_healer_1.png'); + width: 90px; height: 90px; } -.headAccessory_special_blueHeadband { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_blueHeadband.png'); - width: 114px; +.head_healer_2 { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_healer_2.png'); + width: 90px; height: 90px; } -.headAccessory_special_cactusEars { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_cactusEars.png'); +.head_healer_3 { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_healer_3.png'); width: 90px; height: 90px; } -.customize-option.headAccessory_special_cactusEars { - background-position: -25px -15px; - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_cactusEars.png'); - width: 60px; - height: 60px; -} -.headAccessory_special_foxEars { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_foxEars.png'); +.head_healer_4 { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_healer_4.png'); width: 90px; height: 90px; } -.customize-option.headAccessory_special_foxEars { - background-position: -25px -15px; - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_foxEars.png'); - width: 60px; - height: 60px; +.head_healer_5 { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_healer_5.png'); + width: 90px; + height: 90px; } -.headAccessory_special_greenHeadband { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_greenHeadband.png'); - width: 114px; +.head_rogue_1 { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_rogue_1.png'); + width: 90px; height: 90px; } -.headAccessory_special_heroicCirclet { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_heroicCirclet.png'); - width: 114px; +.head_rogue_2 { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_rogue_2.png'); + width: 90px; height: 90px; } -.headAccessory_special_lionEars { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_lionEars.png'); +.head_rogue_3 { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_rogue_3.png'); width: 90px; height: 90px; } -.customize-option.headAccessory_special_lionEars { - background-position: -25px -15px; - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_lionEars.png'); - width: 60px; - height: 60px; +.head_rogue_4 { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_rogue_4.png'); + width: 90px; + height: 90px; } -.headAccessory_special_pandaEars { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_pandaEars.png'); +.head_rogue_5 { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_rogue_5.png'); width: 90px; height: 90px; } -.customize-option.headAccessory_special_pandaEars { - background-position: -25px -15px; - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_pandaEars.png'); - width: 60px; - height: 60px; +.head_special_2 { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_2.png'); + width: 90px; + height: 90px; } -.headAccessory_special_pigEars { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_pigEars.png'); +.head_special_bardHat { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_bardHat.png'); width: 90px; height: 90px; } -.customize-option.headAccessory_special_pigEars { - background-position: -25px -15px; - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_pigEars.png'); - width: 60px; - height: 60px; +.head_special_clandestineCowl { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_clandestineCowl.png'); + width: 90px; + height: 90px; } -.headAccessory_special_pinkHeadband { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_pinkHeadband.png'); - width: 114px; +.head_special_dandyHat { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_dandyHat.png'); + width: 90px; height: 90px; } -.headAccessory_special_redHeadband { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_redHeadband.png'); - width: 114px; +.head_special_fireCoralCirclet { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_fireCoralCirclet.png'); + width: 90px; height: 90px; } -.headAccessory_special_tigerEars { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_tigerEars.png'); +.head_special_kabuto { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_kabuto.png'); width: 90px; height: 90px; } -.customize-option.headAccessory_special_tigerEars { - background-position: -25px -15px; - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_tigerEars.png'); - width: 60px; - height: 60px; +.head_special_lunarWarriorHelm { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_lunarWarriorHelm.png'); + width: 90px; + height: 90px; } -.headAccessory_special_whiteHeadband { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_whiteHeadband.png'); - width: 114px; +.head_special_mammothRiderHelm { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_mammothRiderHelm.png'); + width: 90px; height: 90px; } -.headAccessory_special_wolfEars { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_wolfEars.png'); - width: 90px; - height: 90px; -} -.customize-option.headAccessory_special_wolfEars { - background-position: -25px -15px; - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_wolfEars.png'); - width: 60px; - height: 60px; -} -.headAccessory_special_yellowHeadband { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_yellowHeadband.png'); - width: 114px; - height: 90px; -} -.shop_headAccessory_special_bearEars { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_special_bearEars.png'); - width: 68px; - height: 68px; -} -.shop_headAccessory_special_blackHeadband { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_special_blackHeadband.png'); - width: 68px; - height: 68px; -} -.shop_headAccessory_special_blueHeadband { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_special_blueHeadband.png'); - width: 68px; - height: 68px; -} -.shop_headAccessory_special_cactusEars { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_special_cactusEars.png'); - width: 68px; - height: 68px; -} -.shop_headAccessory_special_foxEars { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_special_foxEars.png'); - width: 68px; - height: 68px; -} -.shop_headAccessory_special_greenHeadband { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_special_greenHeadband.png'); - width: 68px; - height: 68px; -} -.shop_headAccessory_special_heroicCirclet { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_special_heroicCirclet.png'); - width: 68px; - height: 68px; -} -.shop_headAccessory_special_lionEars { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_special_lionEars.png'); - width: 68px; - height: 68px; -} -.shop_headAccessory_special_pandaEars { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_special_pandaEars.png'); - width: 68px; - height: 68px; -} -.shop_headAccessory_special_pigEars { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_special_pigEars.png'); - width: 68px; - height: 68px; -} -.shop_headAccessory_special_pinkHeadband { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_special_pinkHeadband.png'); - width: 68px; - height: 68px; -} -.shop_headAccessory_special_redHeadband { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_special_redHeadband.png'); - width: 68px; - height: 68px; -} -.shop_headAccessory_special_tigerEars { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_special_tigerEars.png'); - width: 68px; - height: 68px; -} -.shop_headAccessory_special_whiteHeadband { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_special_whiteHeadband.png'); - width: 68px; - height: 68px; -} -.shop_headAccessory_special_wolfEars { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_special_wolfEars.png'); - width: 68px; - height: 68px; -} -.shop_headAccessory_special_yellowHeadband { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_special_yellowHeadband.png'); - width: 68px; - height: 68px; -} -.head_0 { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_0.png'); - width: 90px; - height: 90px; -} -.customize-option.head_0 { - background-position: -25px -15px; - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_0.png'); - width: 60px; - height: 60px; -} -.head_healer_1 { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_healer_1.png'); - width: 90px; - height: 90px; -} -.head_healer_2 { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_healer_2.png'); - width: 90px; - height: 90px; -} -.head_healer_3 { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_healer_3.png'); - width: 90px; - height: 90px; -} -.head_healer_4 { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_healer_4.png'); - width: 90px; - height: 90px; -} -.head_healer_5 { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_healer_5.png'); - width: 90px; - height: 90px; -} -.head_rogue_1 { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_rogue_1.png'); - width: 90px; - height: 90px; -} -.head_rogue_2 { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_rogue_2.png'); - width: 90px; - height: 90px; -} -.head_rogue_3 { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_rogue_3.png'); - width: 90px; - height: 90px; -} -.head_rogue_4 { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_rogue_4.png'); - width: 90px; - height: 90px; -} -.head_rogue_5 { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_rogue_5.png'); - width: 90px; - height: 90px; -} -.head_special_2 { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_2.png'); - width: 90px; - height: 90px; -} -.head_special_bardHat { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_bardHat.png'); - width: 90px; - height: 90px; -} -.head_special_clandestineCowl { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_clandestineCowl.png'); - width: 90px; - height: 90px; -} -.head_special_dandyHat { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_dandyHat.png'); - width: 90px; - height: 90px; -} -.head_special_fireCoralCirclet { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_fireCoralCirclet.png'); - width: 90px; - height: 90px; -} -.head_special_kabuto { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_kabuto.png'); - width: 90px; - height: 90px; -} -.head_special_lunarWarriorHelm { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_lunarWarriorHelm.png'); - width: 90px; - height: 90px; -} -.head_special_mammothRiderHelm { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_mammothRiderHelm.png'); - width: 90px; - height: 90px; -} -.head_special_namingDay2017 { - background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_namingDay2017.png'); +.head_special_namingDay2017 { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_namingDay2017.png'); width: 90px; height: 90px; } @@ -35063,6 +35065,214 @@ width: 68px; height: 68px; } +.headAccessory_special_bearEars { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_bearEars.png'); + width: 90px; + height: 90px; +} +.customize-option.headAccessory_special_bearEars { + background-position: -25px -15px; + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_bearEars.png'); + width: 60px; + height: 60px; +} +.headAccessory_special_blackHeadband { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_blackHeadband.png'); + width: 114px; + height: 90px; +} +.headAccessory_special_blueHeadband { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_blueHeadband.png'); + width: 114px; + height: 90px; +} +.headAccessory_special_cactusEars { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_cactusEars.png'); + width: 90px; + height: 90px; +} +.customize-option.headAccessory_special_cactusEars { + background-position: -25px -15px; + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_cactusEars.png'); + width: 60px; + height: 60px; +} +.headAccessory_special_foxEars { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_foxEars.png'); + width: 90px; + height: 90px; +} +.customize-option.headAccessory_special_foxEars { + background-position: -25px -15px; + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_foxEars.png'); + width: 60px; + height: 60px; +} +.headAccessory_special_greenHeadband { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_greenHeadband.png'); + width: 114px; + height: 90px; +} +.headAccessory_special_heroicCirclet { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_heroicCirclet.png'); + width: 114px; + height: 90px; +} +.headAccessory_special_lionEars { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_lionEars.png'); + width: 90px; + height: 90px; +} +.customize-option.headAccessory_special_lionEars { + background-position: -25px -15px; + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_lionEars.png'); + width: 60px; + height: 60px; +} +.headAccessory_special_pandaEars { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_pandaEars.png'); + width: 90px; + height: 90px; +} +.customize-option.headAccessory_special_pandaEars { + background-position: -25px -15px; + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_pandaEars.png'); + width: 60px; + height: 60px; +} +.headAccessory_special_pigEars { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_pigEars.png'); + width: 90px; + height: 90px; +} +.customize-option.headAccessory_special_pigEars { + background-position: -25px -15px; + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_pigEars.png'); + width: 60px; + height: 60px; +} +.headAccessory_special_pinkHeadband { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_pinkHeadband.png'); + width: 114px; + height: 90px; +} +.headAccessory_special_redHeadband { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_redHeadband.png'); + width: 114px; + height: 90px; +} +.headAccessory_special_tigerEars { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_tigerEars.png'); + width: 90px; + height: 90px; +} +.customize-option.headAccessory_special_tigerEars { + background-position: -25px -15px; + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_tigerEars.png'); + width: 60px; + height: 60px; +} +.headAccessory_special_whiteHeadband { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_whiteHeadband.png'); + width: 114px; + height: 90px; +} +.headAccessory_special_wolfEars { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_wolfEars.png'); + width: 90px; + height: 90px; +} +.customize-option.headAccessory_special_wolfEars { + background-position: -25px -15px; + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_wolfEars.png'); + width: 60px; + height: 60px; +} +.headAccessory_special_yellowHeadband { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/headAccessory_special_yellowHeadband.png'); + width: 114px; + height: 90px; +} +.shop_headAccessory_special_bearEars { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_special_bearEars.png'); + width: 68px; + height: 68px; +} +.shop_headAccessory_special_blackHeadband { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_special_blackHeadband.png'); + width: 68px; + height: 68px; +} +.shop_headAccessory_special_blueHeadband { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_special_blueHeadband.png'); + width: 68px; + height: 68px; +} +.shop_headAccessory_special_cactusEars { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_special_cactusEars.png'); + width: 68px; + height: 68px; +} +.shop_headAccessory_special_foxEars { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_special_foxEars.png'); + width: 68px; + height: 68px; +} +.shop_headAccessory_special_greenHeadband { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_special_greenHeadband.png'); + width: 68px; + height: 68px; +} +.shop_headAccessory_special_heroicCirclet { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_special_heroicCirclet.png'); + width: 68px; + height: 68px; +} +.shop_headAccessory_special_lionEars { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_special_lionEars.png'); + width: 68px; + height: 68px; +} +.shop_headAccessory_special_pandaEars { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_special_pandaEars.png'); + width: 68px; + height: 68px; +} +.shop_headAccessory_special_pigEars { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_special_pigEars.png'); + width: 68px; + height: 68px; +} +.shop_headAccessory_special_pinkHeadband { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_special_pinkHeadband.png'); + width: 68px; + height: 68px; +} +.shop_headAccessory_special_redHeadband { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_special_redHeadband.png'); + width: 68px; + height: 68px; +} +.shop_headAccessory_special_tigerEars { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_special_tigerEars.png'); + width: 68px; + height: 68px; +} +.shop_headAccessory_special_whiteHeadband { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_special_whiteHeadband.png'); + width: 68px; + height: 68px; +} +.shop_headAccessory_special_wolfEars { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_special_wolfEars.png'); + width: 68px; + height: 68px; +} +.shop_headAccessory_special_yellowHeadband { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_headAccessory_special_yellowHeadband.png'); + width: 68px; + height: 68px; +} .shield_healer_1 { background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_healer_1.png'); width: 90px; diff --git a/website/client/src/assets/scss/button.scss b/website/client/src/assets/scss/button.scss index d9f94646604..a3ccbbde2ca 100644 --- a/website/client/src/assets/scss/button.scss +++ b/website/client/src/assets/scss/button.scss @@ -5,8 +5,8 @@ font-weight: bold; line-height: 1.71; border: 1px solid transparent; - padding: 0.219rem 0.75rem; - border-radius: 2px; + padding: 4px 12px; + border-radius: 4px; box-shadow: 0 1px 3px 0 rgba($black, 0.12), 0 1px 2px 0 rgba($black, 0.24); color: $white; diff --git a/website/client/src/assets/svg/crown.svg b/website/client/src/assets/svg/crown.svg new file mode 100644 index 00000000000..c8b2610256e --- /dev/null +++ b/website/client/src/assets/svg/crown.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/website/client/src/assets/svg/mute.svg b/website/client/src/assets/svg/mute.svg new file mode 100644 index 00000000000..8c20be79d2b --- /dev/null +++ b/website/client/src/assets/svg/mute.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/website/client/src/assets/svg/shadow-mute.svg b/website/client/src/assets/svg/shadow-mute.svg new file mode 100644 index 00000000000..77086a3ddba --- /dev/null +++ b/website/client/src/assets/svg/shadow-mute.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/website/client/src/components/groups/membersModal.vue b/website/client/src/components/groups/membersModal.vue index b987af65a5a..939925d0ec3 100644 --- a/website/client/src/components/groups/membersModal.vue +++ b/website/client/src/components/groups/membersModal.vue @@ -84,7 +84,7 @@ v-if="invites.length > 0" class="row" > -