Tweak asset metadata on upload (#4317)

* Update sharp

* Only read image metadata after upload

Preserves animated gifs and other files

Fixes #4297

* Rotate thumbnails based on exif data

Ref #4206
This commit is contained in:
Rijk van Zanten
2021-02-26 17:18:17 -05:00
committed by GitHub
parent fe0d81c86a
commit 1d9ffc2d7f
5 changed files with 264 additions and 276 deletions

View File

@@ -123,7 +123,7 @@
"qs": "^6.9.4",
"rate-limiter-flexible": "^2.1.13",
"resolve-cwd": "^3.0.0",
"sharp": "^0.26.2",
"sharp": "^0.27.1",
"uuid": "^8.3.1",
"uuid-validate": "0.0.3"
},

View File

@@ -42,8 +42,9 @@ export class AssetsService {
const type = file.type;
// We can only transform JPEG, PNG, and WebP
if (['image/jpeg', 'image/png', 'image/webp'].includes(type)) {
if (Object.keys(transformation).length > 0 && ['image/jpeg', 'image/png', 'image/webp'].includes(type)) {
const resizeOptions = this.parseTransformation(transformation);
const assetFilename =
path.basename(file.filename_disk, path.extname(file.filename_disk)) +
this.getAssetSuffix(resizeOptions) +
@@ -60,7 +61,7 @@ export class AssetsService {
}
const readStream = storage.disk(file.storage).getStream(file.filename_disk, range);
const transformer = sharp().resize(resizeOptions);
const transformer = sharp().rotate().resize(resizeOptions);
await storage.disk(file.storage).put(assetFilename, readStream.pipe(transformer));

View File

@@ -27,6 +27,8 @@ export class FilesService extends ItemsService {
const payload = clone(data);
if (primaryKey !== undefined) {
await this.update(payload, primaryKey);
// If the file you're uploading already exists, we'll consider this upload a replace. In that case, we'll
// delete the previously saved file and thumbnails to ensure they're generated fresh
const disk = storage.disk(payload.storage);
@@ -34,8 +36,6 @@ export class FilesService extends ItemsService {
for await (const file of disk.flatList(String(primaryKey))) {
await disk.delete(file.path);
}
await this.update(payload, primaryKey);
} else {
primaryKey = await this.create(payload);
}
@@ -48,67 +48,53 @@ export class FilesService extends ItemsService {
payload.type = 'application/octet-stream';
}
try {
await storage.disk(data.storage).put(payload.filename_disk, stream);
} catch (err) {
logger.warn(`Couldn't save file ${payload.filename_disk}`);
logger.warn(err);
}
const { size } = await storage.disk(data.storage).getStat(payload.filename_disk);
payload.filesize = size;
if (['image/jpeg', 'image/png', 'image/webp', 'image/gif', 'image/tiff'].includes(payload.type)) {
const pipeline = sharp();
const buffer = await storage.disk(data.storage).getBuffer(payload.filename_disk);
const meta = await sharp(buffer.content, {}).metadata();
pipeline
.rotate()
.metadata()
.then((meta) => {
payload.width = meta.width;
payload.height = meta.height;
payload.filesize = meta.size;
payload.metadata = {};
payload.width = meta.width;
payload.height = meta.height;
payload.filesize = meta.size;
payload.metadata = {};
if (meta.icc) {
try {
payload.metadata.icc = parseICC(meta.icc);
} catch (err) {
logger.warn(`Couldn't extract ICC information from file`);
logger.warn(err);
}
}
if (meta.exif) {
try {
payload.metadata.exif = parseEXIF(meta.exif);
} catch (err) {
logger.warn(`Couldn't extract EXIF information from file`);
logger.warn(err);
}
}
if (meta.iptc) {
try {
payload.metadata.iptc = parseIPTC(meta.iptc);
payload.title = payload.title || payload.metadata.iptc.headline;
payload.description = payload.description || payload.metadata.iptc.caption;
} catch (err) {
logger.warn(`Couldn't extract IPTC information from file`);
logger.warn(err);
}
}
})
.catch((err) => {
logger.warn(`Couldn't extract file metadata from ${payload.filename_disk}`);
if (meta.icc) {
try {
payload.metadata.icc = parseICC(meta.icc);
} catch (err) {
logger.warn(`Couldn't extract ICC information from file`);
logger.warn(err);
});
try {
await storage.disk(data.storage).put(payload.filename_disk, stream.pipe(pipeline));
} catch (err) {
logger.warn(`Couldn't save file ${payload.filename_disk}`);
logger.warn(err);
}
} else {
try {
await storage.disk(data.storage).put(payload.filename_disk, stream);
} catch (err) {
logger.warn(`Couldn't save file ${payload.filename_disk}`);
logger.warn(err);
}
}
const { size } = await storage.disk(data.storage).getStat(payload.filename_disk);
payload.filesize = size;
if (meta.exif) {
try {
payload.metadata.exif = parseEXIF(meta.exif);
} catch (err) {
logger.warn(`Couldn't extract EXIF information from file`);
logger.warn(err);
}
}
if (meta.iptc) {
try {
payload.metadata.iptc = parseIPTC(meta.iptc);
payload.title = payload.title || payload.metadata.iptc.headline;
payload.description = payload.description || payload.metadata.iptc.caption;
} catch (err) {
logger.warn(`Couldn't extract IPTC information from file`);
logger.warn(err);
}
}
}
// We do this in a service without accountability. Even if you don't have update permissions to the file,
@@ -117,6 +103,7 @@ export class FilesService extends ItemsService {
knex: this.knex,
schema: this.schema,
});
await sudoService.update(payload, primaryKey);
if (cache && env.CACHE_AUTO_PURGE) {

430
package-lock.json generated
View File

@@ -78,7 +78,7 @@
"@types/pino": "^6.3.0",
"@types/qrcode": "^1.3.5",
"@types/semver": "^7.3.1",
"@types/sharp": "^0.25.1",
"@types/sharp": "^0.27.1",
"@types/sinon": "^9.0.8",
"@types/sinon-chai": "^3.2.5",
"@types/uuid": "^8.0.0",
@@ -257,7 +257,7 @@
"qs": "^6.9.4",
"rate-limiter-flexible": "^2.1.13",
"resolve-cwd": "^3.0.0",
"sharp": "^0.26.2",
"sharp": "^0.27.1",
"uuid": "^8.3.1",
"uuid-validate": "0.0.3"
},
@@ -1049,9 +1049,9 @@
}
},
"api/node_modules/string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
"integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -1965,9 +1965,9 @@
}
},
"node_modules/@babel/helper-define-polyfill-provider": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.2.tgz",
"integrity": "sha512-hWeolZJivTNGHXHzJjQz/NwDaG4mGXf22ZroOP8bQYgvHNzaQ5tylsVbAcAS2oDjXBwpu8qH2I/654QFS2rDpw==",
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.4.tgz",
"integrity": "sha512-K5V2GaQZ1gpB+FTXM4AFVG2p1zzhm67n9wrQCJYNzvuLzQybhJyftW7qeDd2uUxPDNdl5Rkon1rOAeUeNDZ28Q==",
"dependencies": {
"@babel/helper-compilation-targets": "^7.13.0",
"@babel/helper-module-imports": "^7.12.13",
@@ -6959,9 +6959,9 @@
"peer": true
},
"node_modules/@octokit/openapi-types": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-5.1.1.tgz",
"integrity": "sha512-yMyaX9EDWCiyv7m85/K8L7bLFj1wrLdfDkKcZEZ6gNmepSW5mfSMFJnYwRINN7lF58wvevKPWvw0MYy6sxcFlQ==",
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-5.2.0.tgz",
"integrity": "sha512-MInMij2VK5o96Ei6qaHjxBglSZWOXQs9dTZfnGX2Xnr2mhA+yk9L/QCH4RcJGISJJCBclLHuY3ytq+iRgDfX7w==",
"dev": true
},
"node_modules/@octokit/plugin-enterprise-rest": {
@@ -7103,12 +7103,12 @@
}
},
"node_modules/@octokit/types": {
"version": "6.10.1",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.10.1.tgz",
"integrity": "sha512-hgNC5jxKG8/RlqxU/6GThkGrvFpz25+cPzjQjyiXTNBvhyltn2Z4GhFY25+kbtXwZ4Co4zM0goW5jak1KLp1ug==",
"version": "6.11.0",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.11.0.tgz",
"integrity": "sha512-RMLAmpPZf/a33EsclBazKg02NCCj4rC69V9sUgf0SuWTjmnBD2QC1nIVtJo7RJrGnwG1+aoFBb2yTrWm/8AS7w==",
"dev": true,
"dependencies": {
"@octokit/openapi-types": "^5.1.0"
"@octokit/openapi-types": "^5.2.0"
}
},
"node_modules/@opencensus/web-types": {
@@ -7296,9 +7296,9 @@
}
},
"node_modules/@popperjs/core": {
"version": "2.8.4",
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.8.4.tgz",
"integrity": "sha512-h0lY7g36rhjNV8KVHKS3/BEOgfsxu0AiRI8+ry5IFBGEsQFkpjxtcpVc9ndN8zrKUeMZXAWMc7eQMepfgykpxQ==",
"version": "2.8.6",
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.8.6.tgz",
"integrity": "sha512-1oXH2bAFXz9SttE1v/0Jp+2ZVePsPEAPGIuPKrmljWZcS3FPBEn2Q4WcANozZC0YiCjTWOF55k0g6rbSZS39ew==",
"dev": true,
"funding": {
"type": "opencollective",
@@ -9542,9 +9542,9 @@
}
},
"node_modules/@types/sharp": {
"version": "0.25.1",
"resolved": "https://registry.npmjs.org/@types/sharp/-/sharp-0.25.1.tgz",
"integrity": "sha512-qv9kr1RIad4nZIiIEizjoQyY9VwjwKsl7nJ8LLWHko5SZm/0+/A8ila05YQpKp8BERHxpC+i8Vr8oYyhJtlQBQ==",
"version": "0.27.1",
"resolved": "https://registry.npmjs.org/@types/sharp/-/sharp-0.27.1.tgz",
"integrity": "sha512-RbYmyPjDUzi3lI9Qm68I+82I+DNOe/jW5w+EC1FvpT/f2TYXDG6mmPZQQohy98ufq+u6OB6pQkqpcNMDxzVclg==",
"dev": true,
"dependencies": {
"@types/node": "*"
@@ -10467,9 +10467,9 @@
}
},
"node_modules/@vue/cli-plugin-eslint/node_modules/string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
"integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
"dev": true,
"dependencies": {
"emoji-regex": "^8.0.0",
@@ -13276,9 +13276,9 @@
}
},
"node_modules/aws-sdk": {
"version": "2.851.0",
"resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.851.0.tgz",
"integrity": "sha512-KmxWZfnAMtZo2yIoIOKpV1npG1CzCyF3bglGkZoReDCd+5FPp3W1eUglI2gUoHNGA4BkrzV0fW/rvguJu9ej/Q==",
"version": "2.853.0",
"resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.853.0.tgz",
"integrity": "sha512-3cifeifeMHKtpvQ6OcrA9j34BEdvWmLlSGzZU/mZf9nYcV+22PPXjwpVhPh9BvfC2S77upKNbMgnkv4u50aQKw==",
"dependencies": {
"buffer": "4.9.2",
"events": "1.1.1",
@@ -13820,12 +13820,12 @@
}
},
"node_modules/babel-plugin-polyfill-corejs2": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.6.tgz",
"integrity": "sha512-1PfghLDuzX5lFY6XXO0hrfxwYf0LD9YajMWeQBGNaPNLQ35paV7YB4hlFW+HfwFS5kcp4rtPI/237xLfQ1ah8A==",
"version": "0.1.8",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.8.tgz",
"integrity": "sha512-kB5/xNR9GYDuRmVlL9EGfdKBSUVI/9xAU7PCahA/1hbC2Jbmks9dlBBYjHF9IHMNY2jV/G2lIG7z0tJIW27Rog==",
"dependencies": {
"@babel/compat-data": "^7.13.0",
"@babel/helper-define-polyfill-provider": "^0.1.2",
"@babel/helper-define-polyfill-provider": "^0.1.4",
"semver": "^6.1.1"
},
"peerDependencies": {
@@ -13841,11 +13841,11 @@
}
},
"node_modules/babel-plugin-polyfill-corejs3": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.4.tgz",
"integrity": "sha512-ysSzFn/qM8bvcDAn4mC7pKk85Y5dVaoa9h4u0mHxOEpDzabsseONhUpR7kHxpUinfj1bjU7mUZqD23rMZBoeSg==",
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.6.tgz",
"integrity": "sha512-IkYhCxPrjrUWigEmkMDXYzM5iblzKCdCD8cZrSAkQOyhhJm26DcG+Mxbx13QT//Olkpkg/AlRdT2L+Ww4Ciphw==",
"dependencies": {
"@babel/helper-define-polyfill-provider": "^0.1.2",
"@babel/helper-define-polyfill-provider": "^0.1.4",
"core-js-compat": "^3.8.1"
},
"peerDependencies": {
@@ -13853,11 +13853,11 @@
}
},
"node_modules/babel-plugin-polyfill-regenerator": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.3.tgz",
"integrity": "sha512-hRjTJQiOYt/wBKEc+8V8p9OJ9799blAJcuKzn1JXh3pApHoWl1Emxh2BHc6MC7Qt6bbr3uDpNxaYQnATLIudEg==",
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.5.tgz",
"integrity": "sha512-EyhBA6uN94W97lR7ecQVTvH9F5tIIdEw3ZqHuU4zekMlW82k5cXNXniiB7PRxQm06BqAjVr4sDT1mOy4RcphIA==",
"dependencies": {
"@babel/helper-define-polyfill-provider": "^0.1.2"
"@babel/helper-define-polyfill-provider": "^0.1.4"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
@@ -15525,9 +15525,9 @@
"dev": true
},
"node_modules/cli-highlight/node_modules/string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
"integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
"dev": true,
"dependencies": {
"emoji-regex": "^8.0.0",
@@ -15653,9 +15653,9 @@
"dev": true
},
"node_modules/cli-truncate/node_modules/string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
"integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
"dev": true,
"dependencies": {
"emoji-regex": "^8.0.0",
@@ -15732,9 +15732,9 @@
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
},
"node_modules/cliui/node_modules/string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
"integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -17266,9 +17266,9 @@
}
},
"node_modules/copyfiles/node_modules/string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
"integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -19332,9 +19332,9 @@
}
},
"node_modules/electron-to-chromium": {
"version": "1.3.673",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.673.tgz",
"integrity": "sha512-ms+QR2ckfrrpEAjXweLx6kNCbpAl66DcW//3BZD4BV5KhUgr0RZRce1ON/9J3QyA3JO28nzgb5Xv8DnPr05ILg=="
"version": "1.3.675",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.675.tgz",
"integrity": "sha512-GEQw+6dNWjueXGkGfjgm7dAMtXfEqrfDG3uWcZdeaD4cZ3dKYdPRQVruVXQRXtPLtOr5GNVVlNLRMChOZ611pQ=="
},
"node_modules/elliptic": {
"version": "6.5.4",
@@ -20835,9 +20835,9 @@
}
},
"node_modules/eslint/node_modules/string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
"integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -23215,9 +23215,9 @@
}
},
"node_modules/gatsby-cli/node_modules/string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
"integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
"peer": true,
"dependencies": {
"emoji-regex": "^8.0.0",
@@ -24319,9 +24319,9 @@
}
},
"node_modules/gatsby-telemetry/node_modules/string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
"integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
"peer": true,
"dependencies": {
"emoji-regex": "^8.0.0",
@@ -24744,9 +24744,9 @@
}
},
"node_modules/gatsby/node_modules/engine.io-client": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-4.1.1.tgz",
"integrity": "sha512-iYasV/EttP/2pLrdowe9G3zwlNIFhwny8VSIh+vPlMnYZqSzLsTzSLa9hFy015OrH1s4fzoYxeHjVkO8hSFKwg==",
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-4.1.2.tgz",
"integrity": "sha512-1mwvwKYMa0AaCy+sPgvJ/SnKyO5MJZ1HEeXfA3Rm/KHkHGiYD5bQVq8QzvIrkI01FuVtOdZC5lWdRw1BGXB2NQ==",
"peer": true,
"dependencies": {
"base64-arraybuffer": "0.1.4",
@@ -25552,9 +25552,9 @@
}
},
"node_modules/gatsby/node_modules/query-string": {
"version": "6.14.0",
"resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.0.tgz",
"integrity": "sha512-In3o+lUxlgejoVJgwEdYtdxrmlL0cQWJXj0+kkI7RWVo7hg5AhFtybeKlC9Dpgbr8eOC4ydpEh8017WwyfzqVQ==",
"version": "6.14.1",
"resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz",
"integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==",
"peer": true,
"dependencies": {
"decode-uri-component": "^0.2.0",
@@ -31408,9 +31408,9 @@
}
},
"node_modules/listr2/node_modules/string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
"integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
"dev": true,
"dependencies": {
"emoji-regex": "^8.0.0",
@@ -33402,9 +33402,9 @@
}
},
"node_modules/mocha/node_modules/string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
"integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
"dev": true,
"dependencies": {
"emoji-regex": "^8.0.0",
@@ -33971,9 +33971,9 @@
}
},
"node_modules/node-ipc": {
"version": "9.1.3",
"resolved": "https://registry.npmjs.org/node-ipc/-/node-ipc-9.1.3.tgz",
"integrity": "sha512-8RS4RZyS/KMKKYG8mrje+cLxwATe9dBCuOiqKFSWND4oOuKytfuKCiR9yinvhoXF/nGdX/WnbywaUee+9U87zA==",
"version": "9.1.4",
"resolved": "https://registry.npmjs.org/node-ipc/-/node-ipc-9.1.4.tgz",
"integrity": "sha512-A+f0mn2KxUt1uRTSd5ktxQUsn2OEhj5evo7NUi/powBzMSZ0vocdzDjlq9QN2v3LH6CJi3e5xAenpZ1QwU5A8g==",
"dev": true,
"dependencies": {
"event-pubsub": "4.3.0",
@@ -34158,9 +34158,9 @@
}
},
"node_modules/nodemailer": {
"version": "6.4.18",
"resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.4.18.tgz",
"integrity": "sha512-ht9cXxQ+lTC+t00vkSIpKHIyM4aXIsQ1tcbQCn5IOnxYHi81W2XOaU66EQBFFpbtzLEBTC94gmkbD4mGZQzVpA==",
"version": "6.5.0",
"resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.5.0.tgz",
"integrity": "sha512-Tm4RPrrIZbnqDKAvX+/4M+zovEReiKlEXWDzG4iwtpL9X34MJY+D5LnQPH/+eghe8DLlAVshHAJZAZWBGhkguw==",
"engines": {
"node": ">=6.0.0"
}
@@ -35687,9 +35687,9 @@
}
},
"node_modules/parse-path/node_modules/query-string": {
"version": "6.14.0",
"resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.0.tgz",
"integrity": "sha512-In3o+lUxlgejoVJgwEdYtdxrmlL0cQWJXj0+kkI7RWVo7hg5AhFtybeKlC9Dpgbr8eOC4ydpEh8017WwyfzqVQ==",
"version": "6.14.1",
"resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz",
"integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==",
"dependencies": {
"decode-uri-component": "^0.2.0",
"filter-obj": "^1.1.0",
@@ -40553,9 +40553,9 @@
}
},
"node_modules/rollup": {
"version": "2.39.1",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-2.39.1.tgz",
"integrity": "sha512-9rfr0Z6j+vE+eayfNVFr1KZ+k+jiUl2+0e4quZafy1x6SFCjzFspfRSO2ZZQeWeX9noeDTUDgg6eCENiEPFvQg==",
"version": "2.40.0",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-2.40.0.tgz",
"integrity": "sha512-WiOGAPbXoHu+TOz6hyYUxIksOwsY/21TRWoO593jgYt8mvYafYqQl+axaA8y1z2HFazNUUrsMSjahV2A6/2R9A==",
"dev": true,
"bin": {
"rollup": "dist/bin/rollup"
@@ -41282,18 +41282,18 @@
"integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ=="
},
"node_modules/sharp": {
"version": "0.26.3",
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.26.3.tgz",
"integrity": "sha512-NdEJ9S6AMr8Px0zgtFo1TJjMK/ROMU92MkDtYn2BBrDjIx3YfH9TUyGdzPC+I/L619GeYQc690Vbaxc5FPCCWg==",
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.27.2.tgz",
"integrity": "sha512-w3FVoONPG/x5MXCc3wsjOS+b9h3CI60qkus6EPQU4dkT0BDm0PyGhDCK6KhtfT3/vbeOMOXAKFNSw+I3QGWkMA==",
"hasInstallScript": true,
"dependencies": {
"array-flatten": "^3.0.0",
"color": "^3.1.3",
"detect-libc": "^1.0.3",
"node-addon-api": "^3.0.2",
"node-addon-api": "^3.1.0",
"npmlog": "^4.1.2",
"prebuild-install": "^6.0.0",
"semver": "^7.3.2",
"prebuild-install": "^6.0.1",
"semver": "^7.3.4",
"simple-get": "^4.0.0",
"tar-fs": "^2.1.1",
"tunnel-agent": "^0.6.0"
@@ -44196,9 +44196,9 @@
}
},
"node_modules/stylelint/node_modules/string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
"integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
"dev": true,
"dependencies": {
"emoji-regex": "^8.0.0",
@@ -46972,9 +46972,9 @@
}
},
"node_modules/update-notifier/node_modules/string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
"integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
"dev": true,
"dependencies": {
"emoji-regex": "^8.0.0",
@@ -50322,9 +50322,9 @@
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
},
"node_modules/wrap-ansi/node_modules/string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
"integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -50718,9 +50718,9 @@
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
},
"node_modules/yargs/node_modules/string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
"integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -51186,9 +51186,9 @@
}
},
"node_modules/yurnalist/node_modules/string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
"integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
"peer": true,
"dependencies": {
"emoji-regex": "^8.0.0",
@@ -52035,9 +52035,9 @@
}
},
"@babel/helper-define-polyfill-provider": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.2.tgz",
"integrity": "sha512-hWeolZJivTNGHXHzJjQz/NwDaG4mGXf22ZroOP8bQYgvHNzaQ5tylsVbAcAS2oDjXBwpu8qH2I/654QFS2rDpw==",
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.4.tgz",
"integrity": "sha512-K5V2GaQZ1gpB+FTXM4AFVG2p1zzhm67n9wrQCJYNzvuLzQybhJyftW7qeDd2uUxPDNdl5Rkon1rOAeUeNDZ28Q==",
"requires": {
"@babel/helper-compilation-targets": "^7.13.0",
"@babel/helper-module-imports": "^7.12.13",
@@ -56410,9 +56410,9 @@
}
},
"@octokit/openapi-types": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-5.1.1.tgz",
"integrity": "sha512-yMyaX9EDWCiyv7m85/K8L7bLFj1wrLdfDkKcZEZ6gNmepSW5mfSMFJnYwRINN7lF58wvevKPWvw0MYy6sxcFlQ==",
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-5.2.0.tgz",
"integrity": "sha512-MInMij2VK5o96Ei6qaHjxBglSZWOXQs9dTZfnGX2Xnr2mhA+yk9L/QCH4RcJGISJJCBclLHuY3ytq+iRgDfX7w==",
"dev": true
},
"@octokit/plugin-enterprise-rest": {
@@ -56557,12 +56557,12 @@
}
},
"@octokit/types": {
"version": "6.10.1",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.10.1.tgz",
"integrity": "sha512-hgNC5jxKG8/RlqxU/6GThkGrvFpz25+cPzjQjyiXTNBvhyltn2Z4GhFY25+kbtXwZ4Co4zM0goW5jak1KLp1ug==",
"version": "6.11.0",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.11.0.tgz",
"integrity": "sha512-RMLAmpPZf/a33EsclBazKg02NCCj4rC69V9sUgf0SuWTjmnBD2QC1nIVtJo7RJrGnwG1+aoFBb2yTrWm/8AS7w==",
"dev": true,
"requires": {
"@octokit/openapi-types": "^5.1.0"
"@octokit/openapi-types": "^5.2.0"
}
},
"@opencensus/web-types": {
@@ -56716,9 +56716,9 @@
}
},
"@popperjs/core": {
"version": "2.8.4",
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.8.4.tgz",
"integrity": "sha512-h0lY7g36rhjNV8KVHKS3/BEOgfsxu0AiRI8+ry5IFBGEsQFkpjxtcpVc9ndN8zrKUeMZXAWMc7eQMepfgykpxQ==",
"version": "2.8.6",
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.8.6.tgz",
"integrity": "sha512-1oXH2bAFXz9SttE1v/0Jp+2ZVePsPEAPGIuPKrmljWZcS3FPBEn2Q4WcANozZC0YiCjTWOF55k0g6rbSZS39ew==",
"dev": true
},
"@reach/router": {
@@ -58737,9 +58737,9 @@
}
},
"@types/sharp": {
"version": "0.25.1",
"resolved": "https://registry.npmjs.org/@types/sharp/-/sharp-0.25.1.tgz",
"integrity": "sha512-qv9kr1RIad4nZIiIEizjoQyY9VwjwKsl7nJ8LLWHko5SZm/0+/A8ila05YQpKp8BERHxpC+i8Vr8oYyhJtlQBQ==",
"version": "0.27.1",
"resolved": "https://registry.npmjs.org/@types/sharp/-/sharp-0.27.1.tgz",
"integrity": "sha512-RbYmyPjDUzi3lI9Qm68I+82I+DNOe/jW5w+EC1FvpT/f2TYXDG6mmPZQQohy98ufq+u6OB6pQkqpcNMDxzVclg==",
"dev": true,
"requires": {
"@types/node": "*"
@@ -59459,9 +59459,9 @@
}
},
"string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
"integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
"dev": true,
"requires": {
"emoji-regex": "^8.0.0",
@@ -61754,9 +61754,9 @@
}
},
"aws-sdk": {
"version": "2.851.0",
"resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.851.0.tgz",
"integrity": "sha512-KmxWZfnAMtZo2yIoIOKpV1npG1CzCyF3bglGkZoReDCd+5FPp3W1eUglI2gUoHNGA4BkrzV0fW/rvguJu9ej/Q==",
"version": "2.853.0",
"resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.853.0.tgz",
"integrity": "sha512-3cifeifeMHKtpvQ6OcrA9j34BEdvWmLlSGzZU/mZf9nYcV+22PPXjwpVhPh9BvfC2S77upKNbMgnkv4u50aQKw==",
"requires": {
"buffer": "4.9.2",
"events": "1.1.1",
@@ -62244,12 +62244,12 @@
}
},
"babel-plugin-polyfill-corejs2": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.6.tgz",
"integrity": "sha512-1PfghLDuzX5lFY6XXO0hrfxwYf0LD9YajMWeQBGNaPNLQ35paV7YB4hlFW+HfwFS5kcp4rtPI/237xLfQ1ah8A==",
"version": "0.1.8",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.8.tgz",
"integrity": "sha512-kB5/xNR9GYDuRmVlL9EGfdKBSUVI/9xAU7PCahA/1hbC2Jbmks9dlBBYjHF9IHMNY2jV/G2lIG7z0tJIW27Rog==",
"requires": {
"@babel/compat-data": "^7.13.0",
"@babel/helper-define-polyfill-provider": "^0.1.2",
"@babel/helper-define-polyfill-provider": "^0.1.4",
"semver": "^6.1.1"
},
"dependencies": {
@@ -62261,20 +62261,20 @@
}
},
"babel-plugin-polyfill-corejs3": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.4.tgz",
"integrity": "sha512-ysSzFn/qM8bvcDAn4mC7pKk85Y5dVaoa9h4u0mHxOEpDzabsseONhUpR7kHxpUinfj1bjU7mUZqD23rMZBoeSg==",
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.6.tgz",
"integrity": "sha512-IkYhCxPrjrUWigEmkMDXYzM5iblzKCdCD8cZrSAkQOyhhJm26DcG+Mxbx13QT//Olkpkg/AlRdT2L+Ww4Ciphw==",
"requires": {
"@babel/helper-define-polyfill-provider": "^0.1.2",
"@babel/helper-define-polyfill-provider": "^0.1.4",
"core-js-compat": "^3.8.1"
}
},
"babel-plugin-polyfill-regenerator": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.3.tgz",
"integrity": "sha512-hRjTJQiOYt/wBKEc+8V8p9OJ9799blAJcuKzn1JXh3pApHoWl1Emxh2BHc6MC7Qt6bbr3uDpNxaYQnATLIudEg==",
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.5.tgz",
"integrity": "sha512-EyhBA6uN94W97lR7ecQVTvH9F5tIIdEw3ZqHuU4zekMlW82k5cXNXniiB7PRxQm06BqAjVr4sDT1mOy4RcphIA==",
"requires": {
"@babel/helper-define-polyfill-provider": "^0.1.2"
"@babel/helper-define-polyfill-provider": "^0.1.4"
}
},
"babel-plugin-remove-graphql-queries": {
@@ -63642,9 +63642,9 @@
"dev": true
},
"string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
"integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
"dev": true,
"requires": {
"emoji-regex": "^8.0.0",
@@ -63734,9 +63734,9 @@
"dev": true
},
"string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
"integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
"dev": true,
"requires": {
"emoji-regex": "^8.0.0",
@@ -63803,9 +63803,9 @@
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
},
"string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
"integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
"requires": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -65063,9 +65063,9 @@
}
},
"string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
"integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
"requires": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -66645,7 +66645,7 @@
"qs": "^6.9.4",
"rate-limiter-flexible": "^2.1.13",
"resolve-cwd": "^3.0.0",
"sharp": "^0.26.2",
"sharp": "^0.27.1",
"sqlite3": "^5.0.2",
"ts-node-dev": "^1.0.0",
"typescript": "^4.0.5",
@@ -67186,9 +67186,9 @@
}
},
"string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
"integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
"requires": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -67594,9 +67594,9 @@
"dev": true
},
"electron-to-chromium": {
"version": "1.3.673",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.673.tgz",
"integrity": "sha512-ms+QR2ckfrrpEAjXweLx6kNCbpAl66DcW//3BZD4BV5KhUgr0RZRce1ON/9J3QyA3JO28nzgb5Xv8DnPr05ILg=="
"version": "1.3.675",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.675.tgz",
"integrity": "sha512-GEQw+6dNWjueXGkGfjgm7dAMtXfEqrfDG3uWcZdeaD4cZ3dKYdPRQVruVXQRXtPLtOr5GNVVlNLRMChOZ611pQ=="
},
"elliptic": {
"version": "6.5.4",
@@ -68321,9 +68321,9 @@
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
},
"string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
"integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
"requires": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -70725,9 +70725,9 @@
}
},
"engine.io-client": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-4.1.1.tgz",
"integrity": "sha512-iYasV/EttP/2pLrdowe9G3zwlNIFhwny8VSIh+vPlMnYZqSzLsTzSLa9hFy015OrH1s4fzoYxeHjVkO8hSFKwg==",
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-4.1.2.tgz",
"integrity": "sha512-1mwvwKYMa0AaCy+sPgvJ/SnKyO5MJZ1HEeXfA3Rm/KHkHGiYD5bQVq8QzvIrkI01FuVtOdZC5lWdRw1BGXB2NQ==",
"peer": true,
"requires": {
"base64-arraybuffer": "0.1.4",
@@ -71341,9 +71341,9 @@
"peer": true
},
"query-string": {
"version": "6.14.0",
"resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.0.tgz",
"integrity": "sha512-In3o+lUxlgejoVJgwEdYtdxrmlL0cQWJXj0+kkI7RWVo7hg5AhFtybeKlC9Dpgbr8eOC4ydpEh8017WwyfzqVQ==",
"version": "6.14.1",
"resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz",
"integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==",
"peer": true,
"requires": {
"decode-uri-component": "^0.2.0",
@@ -72115,9 +72115,9 @@
"peer": true
},
"string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
"integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
"peer": true,
"requires": {
"emoji-regex": "^8.0.0",
@@ -72975,9 +72975,9 @@
}
},
"string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
"integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
"peer": true,
"requires": {
"emoji-regex": "^8.0.0",
@@ -77065,9 +77065,9 @@
}
},
"string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
"integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
"dev": true,
"requires": {
"emoji-regex": "^8.0.0",
@@ -78699,9 +78699,9 @@
}
},
"string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
"integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
"dev": true,
"requires": {
"emoji-regex": "^8.0.0",
@@ -79179,9 +79179,9 @@
}
},
"node-ipc": {
"version": "9.1.3",
"resolved": "https://registry.npmjs.org/node-ipc/-/node-ipc-9.1.3.tgz",
"integrity": "sha512-8RS4RZyS/KMKKYG8mrje+cLxwATe9dBCuOiqKFSWND4oOuKytfuKCiR9yinvhoXF/nGdX/WnbywaUee+9U87zA==",
"version": "9.1.4",
"resolved": "https://registry.npmjs.org/node-ipc/-/node-ipc-9.1.4.tgz",
"integrity": "sha512-A+f0mn2KxUt1uRTSd5ktxQUsn2OEhj5evo7NUi/powBzMSZ0vocdzDjlq9QN2v3LH6CJi3e5xAenpZ1QwU5A8g==",
"dev": true,
"requires": {
"event-pubsub": "4.3.0",
@@ -79345,9 +79345,9 @@
"dev": true
},
"nodemailer": {
"version": "6.4.18",
"resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.4.18.tgz",
"integrity": "sha512-ht9cXxQ+lTC+t00vkSIpKHIyM4aXIsQ1tcbQCn5IOnxYHi81W2XOaU66EQBFFpbtzLEBTC94gmkbD4mGZQzVpA=="
"version": "6.5.0",
"resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.5.0.tgz",
"integrity": "sha512-Tm4RPrrIZbnqDKAvX+/4M+zovEReiKlEXWDzG4iwtpL9X34MJY+D5LnQPH/+eghe8DLlAVshHAJZAZWBGhkguw=="
},
"nodemon": {
"version": "2.0.7",
@@ -80578,9 +80578,9 @@
},
"dependencies": {
"query-string": {
"version": "6.14.0",
"resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.0.tgz",
"integrity": "sha512-In3o+lUxlgejoVJgwEdYtdxrmlL0cQWJXj0+kkI7RWVo7hg5AhFtybeKlC9Dpgbr8eOC4ydpEh8017WwyfzqVQ==",
"version": "6.14.1",
"resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz",
"integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==",
"requires": {
"decode-uri-component": "^0.2.0",
"filter-obj": "^1.1.0",
@@ -84542,9 +84542,9 @@
}
},
"rollup": {
"version": "2.39.1",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-2.39.1.tgz",
"integrity": "sha512-9rfr0Z6j+vE+eayfNVFr1KZ+k+jiUl2+0e4quZafy1x6SFCjzFspfRSO2ZZQeWeX9noeDTUDgg6eCENiEPFvQg==",
"version": "2.40.0",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-2.40.0.tgz",
"integrity": "sha512-WiOGAPbXoHu+TOz6hyYUxIksOwsY/21TRWoO593jgYt8mvYafYqQl+axaA8y1z2HFazNUUrsMSjahV2A6/2R9A==",
"dev": true,
"requires": {
"fsevents": "~2.3.1"
@@ -85122,17 +85122,17 @@
"integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ=="
},
"sharp": {
"version": "0.26.3",
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.26.3.tgz",
"integrity": "sha512-NdEJ9S6AMr8Px0zgtFo1TJjMK/ROMU92MkDtYn2BBrDjIx3YfH9TUyGdzPC+I/L619GeYQc690Vbaxc5FPCCWg==",
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.27.2.tgz",
"integrity": "sha512-w3FVoONPG/x5MXCc3wsjOS+b9h3CI60qkus6EPQU4dkT0BDm0PyGhDCK6KhtfT3/vbeOMOXAKFNSw+I3QGWkMA==",
"requires": {
"array-flatten": "^3.0.0",
"color": "^3.1.3",
"detect-libc": "^1.0.3",
"node-addon-api": "^3.0.2",
"node-addon-api": "^3.1.0",
"npmlog": "^4.1.2",
"prebuild-install": "^6.0.0",
"semver": "^7.3.2",
"prebuild-install": "^6.0.1",
"semver": "^7.3.4",
"simple-get": "^4.0.0",
"tar-fs": "^2.1.1",
"tunnel-agent": "^0.6.0"
@@ -86948,9 +86948,9 @@
}
},
"string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
"integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
"dev": true,
"requires": {
"emoji-regex": "^8.0.0",
@@ -89654,9 +89654,9 @@
"dev": true
},
"string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
"integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
"dev": true,
"requires": {
"emoji-regex": "^8.0.0",
@@ -92417,9 +92417,9 @@
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
},
"string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
"integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
"requires": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -92679,9 +92679,9 @@
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
},
"string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
"integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
"requires": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -93069,9 +93069,9 @@
}
},
"string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz",
"integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==",
"peer": true,
"requires": {
"emoji-regex": "^8.0.0",

View File

@@ -76,7 +76,7 @@
"@types/pino": "^6.3.0",
"@types/qrcode": "^1.3.5",
"@types/semver": "^7.3.1",
"@types/sharp": "^0.25.1",
"@types/sharp": "^0.27.1",
"@types/sinon": "^9.0.8",
"@types/sinon-chai": "^3.2.5",
"@types/uuid": "^8.0.0",