From 14736620ec1e0040c55c83cfc163049b36f7af23 Mon Sep 17 00:00:00 2001 From: MeiMei <30769358+mei23@users.noreply.github.com> Date: Sun, 28 Jul 2019 09:49:02 +0900 Subject: [PATCH] =?UTF-8?q?HTTP=E3=83=AA=E3=82=AF=E3=82=A8=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=81=AEKeep-Alive=E3=81=A8Prxoy=E5=AF=BE=E5=BF=9C?= =?UTF-8?q?=E3=81=AA=E3=81=A9=20(#5226)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * DriveのKeep-Alive, Proxy と APのProxy対応 * request系でKeep-Aliveするように * fix lookup-dns-cache.d.ts * remove debug output --- package.json | 6 +- src/@types/lookup-dns-cache.d.ts | 20 ++-- src/@types/promise-any.d.ts | 7 -- src/misc/donwload-url.ts | 1 + src/remote/activitypub/request.ts | 49 +++------ src/remote/activitypub/resolver.ts | 1 + src/server/web/url-preview.ts | 1 + src/services/drive/add-file.ts | 29 +++-- src/services/drive/delete-file.ts | 16 ++- src/services/drive/s3.ts | 31 ++++++ yarn.lock | 166 +++++++++++++---------------- 11 files changed, 151 insertions(+), 176 deletions(-) delete mode 100644 src/@types/promise-any.d.ts create mode 100644 src/services/drive/s3.ts diff --git a/package.json b/package.json index a92c7f690..93dff81e7 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,6 @@ "@types/koa-views": "2.0.3", "@types/koa__cors": "2.2.3", "@types/lolex": "3.1.1", - "@types/minio": "7.0.2", "@types/mocha": "5.2.7", "@types/node": "12.0.10", "@types/nodemailer": "6.2.0", @@ -99,11 +98,13 @@ "@types/websocket": "0.0.40", "@types/ws": "6.0.1", "@typescript-eslint/parser": "1.11.0", + "agentkeepalive": "4.0.2", "animejs": "3.0.1", "apexcharts": "3.8.3", "autobind-decorator": "2.4.0", "autosize": "4.0.2", "autwh": "0.1.0", + "aws-sdk": "2.500.0", "bcryptjs": "2.4.3", "bootstrap": "4.3.1", "bootstrap-vue": "2.0.0-rc.13", @@ -145,6 +146,7 @@ "hard-source-webpack-plugin": "0.13.1", "html-minifier": "4.0.0", "http-signature": "1.2.0", + "https-proxy-agent": "2.2.2", "insert-text-at-cursor": "0.3.0", "is-root": "2.1.0", "is-svg": "4.2.0", @@ -170,7 +172,6 @@ "loader-utils": "1.2.3", "lolex": "4.1.0", "lookup-dns-cache": "2.1.0", - "minio": "7.0.10", "mocha": "6.2.0", "moji": "0.5.1", "ms": "2.1.2", @@ -187,7 +188,6 @@ "postcss-loader": "3.0.0", "prismjs": "1.16.0", "progress-bar-webpack-plugin": "1.12.1", - "promise-any": "0.2.0", "promise-limit": "2.7.0", "promise-sequential": "1.1.1", "pug": "2.0.4", diff --git a/src/@types/lookup-dns-cache.d.ts b/src/@types/lookup-dns-cache.d.ts index ae93cc539..8dea52ea2 100644 --- a/src/@types/lookup-dns-cache.d.ts +++ b/src/@types/lookup-dns-cache.d.ts @@ -1,17 +1,9 @@ declare module 'lookup-dns-cache' { - type IPv4 = 4; + import { LookupOneOptions, LookupAllOptions, LookupOptions, LookupAddress } from 'dns' - type IPv6 = 6; - - type Family = IPv4 | IPv6 | undefined; - - interface IRunOptions { - family?: Family; - all?: boolean; - } - - type RunCallback = (error: Error | null, address?: string | string[], family?: Family) => void; - - export function lookup(hostname: string, options: IRunOptions | Family, callback: RunCallback): {} | undefined; - export function lookup(hostname: string, callback: RunCallback): {} | undefined; + function lookup(hostname: string, family: number, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void): void; + function lookup(hostname: string, options: LookupOneOptions, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void): void; + function lookup(hostname: string, options: LookupAllOptions, callback: (err: NodeJS.ErrnoException | null, addresses: LookupAddress[]) => void): void; + function lookup(hostname: string, options: LookupOptions, callback: (err: NodeJS.ErrnoException | null, address: string | LookupAddress[], family: number) => void): void; + function lookup(hostname: string, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void): void; } diff --git a/src/@types/promise-any.d.ts b/src/@types/promise-any.d.ts deleted file mode 100644 index 97060b84b..000000000 --- a/src/@types/promise-any.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -declare module 'promise-any' { - function promiseAny(iterable: Iterable>): Promise; - - namespace promiseAny {} // Hack - - export = promiseAny; -} diff --git a/src/misc/donwload-url.ts b/src/misc/donwload-url.ts index 0ba25d812..564edbd3b 100644 --- a/src/misc/donwload-url.ts +++ b/src/misc/donwload-url.ts @@ -29,6 +29,7 @@ export async function downloadUrl(url: string, path: string) { url: new URL(url).href, // https://github.com/syuilo/misskey/issues/2637 proxy: config.proxy, timeout: 10 * 1000, + forever: true, headers: { 'User-Agent': config.userAgent } diff --git a/src/remote/activitypub/request.ts b/src/remote/activitypub/request.ts index 6d18e5328..a48bc1e3f 100644 --- a/src/remote/activitypub/request.ts +++ b/src/remote/activitypub/request.ts @@ -1,8 +1,7 @@ -import { request } from 'https'; +import * as https from 'https'; import { sign } from 'http-signature'; import * as crypto from 'crypto'; -import { lookup, IRunOptions } from 'lookup-dns-cache'; -import * as promiseAny from 'promise-any'; +import * as cache from 'lookup-dns-cache'; import config from '../../config'; import { ILocalUser } from '../../models/entities/user'; @@ -12,9 +11,16 @@ import { UserKeypairs, Instances } from '../../models'; import { fetchMeta } from '../../misc/fetch-meta'; import { toPuny } from '../../misc/convert-host'; import { ensure } from '../../prelude/ensure'; +import * as httpsProxyAgent from 'https-proxy-agent'; export const logger = apLogger.createSubLogger('deliver'); +const agent = config.proxy + ? new httpsProxyAgent(config.proxy) + : new https.Agent({ + lookup: cache.lookup, + }); + export default async (user: ILocalUser, url: string, object: any) => { const timeout = 10 * 1000; @@ -47,24 +53,20 @@ export default async (user: ILocalUser, url: string, object: any) => { sha256.update(data); const hash = sha256.digest('base64'); - const addr = await resolveAddr(hostname); - if (!addr) return; - const keypair = await UserKeypairs.findOne({ userId: user.id }).then(ensure); await new Promise((resolve, reject) => { - const req = request({ + const req = https.request({ + agent, protocol, - hostname: addr, - setHost: false, + hostname, port, method: 'POST', path: pathname + search, timeout, headers: { - 'Host': host, 'User-Agent': config.userAgent, 'Content-Type': 'application/activity+json', 'Digest': `SHA-256=${hash}` @@ -110,30 +112,3 @@ export default async (user: ILocalUser, url: string, object: any) => { }); //#endregion }; - -/** - * Resolve host (with cached, asynchrony) - */ -async function resolveAddr(domain: string) { - const af = config.outgoingAddressFamily || 'ipv4'; - const useV4 = af == 'ipv4' || af == 'dual'; - const useV6 = af == 'ipv6' || af == 'dual'; - - const promises = []; - - if (!useV4 && !useV6) throw 'No usable address family available'; - if (useV4) promises.push(resolveAddrInner(domain, { family: 4 })); - if (useV6) promises.push(resolveAddrInner(domain, { family: 6 })); - - // v4/v6で先に取得できた方を採用する - return await promiseAny(promises); -} - -function resolveAddrInner(domain: string, options: IRunOptions = {}): Promise { - return new Promise((res, rej) => { - lookup(domain, options, (error, address) => { - if (error) return rej(error); - return res(Array.isArray(address) ? address[0] : address); - }); - }); -} diff --git a/src/remote/activitypub/resolver.ts b/src/remote/activitypub/resolver.ts index e8d0be638..d656c1c5e 100644 --- a/src/remote/activitypub/resolver.ts +++ b/src/remote/activitypub/resolver.ts @@ -57,6 +57,7 @@ export default class Resolver { url: value, proxy: config.proxy, timeout: this.timeout, + forever: true, headers: { 'User-Agent': config.userAgent, Accept: 'application/activity+json, application/ld+json' diff --git a/src/server/web/url-preview.ts b/src/server/web/url-preview.ts index 310cf88c0..5b2f8759a 100644 --- a/src/server/web/url-preview.ts +++ b/src/server/web/url-preview.ts @@ -22,6 +22,7 @@ module.exports = async (ctx: Koa.BaseContext) => { url: ctx.query.url, lang: ctx.query.lang || 'ja-JP' }, + forever: true, json: true }) : await summaly(ctx.query.url, { followRedirects: false, diff --git a/src/services/drive/add-file.ts b/src/services/drive/add-file.ts index 52339a2f2..6acad3efa 100644 --- a/src/services/drive/add-file.ts +++ b/src/services/drive/add-file.ts @@ -2,7 +2,6 @@ import { Buffer } from 'buffer'; import * as fs from 'fs'; import * as crypto from 'crypto'; -import * as Minio from 'minio'; import * as uuid from 'uuid'; import * as sharp from 'sharp'; @@ -21,6 +20,8 @@ import { IRemoteUser, User } from '../../models/entities/user'; import { driveChart, perUserDriveChart, instanceChart } from '../chart'; import { genId } from '../../misc/gen-id'; import { isDuplicateKeyValueError } from '../../misc/is-duplicate-key-value-error'; +import * as S3 from 'aws-sdk/clients/s3'; +import { getS3 } from './s3'; const logger = driveLogger.createSubLogger('register', 'yellow'); @@ -211,23 +212,21 @@ async function upload(key: string, stream: fs.ReadStream | Buffer, type: string, const meta = await fetchMeta(); - const minio = new Minio.Client({ - endPoint: meta.objectStorageEndpoint!, - region: meta.objectStorageRegion ? meta.objectStorageRegion : undefined, - port: meta.objectStoragePort ? meta.objectStoragePort : undefined, - useSSL: meta.objectStorageUseSSL, - accessKey: meta.objectStorageAccessKey!, - secretKey: meta.objectStorageSecretKey!, - }); + const params = { + Bucket: meta.objectStorageBucket, + Key: key, + Body: stream, + ContentType: type, + CacheControl: 'max-age=31536000, immutable', + } as S3.PutObjectRequest; - const metadata = { - 'Content-Type': type, - 'Cache-Control': 'max-age=31536000, immutable' - } as Minio.ItemBucketMetadata; + if (filename) params.ContentDisposition = contentDisposition('inline', filename); - if (filename) metadata['Content-Disposition'] = contentDisposition('inline', filename); + const s3 = getS3(meta); - await minio.putObject(meta.objectStorageBucket!, key, stream, undefined, metadata); + const upload = s3.upload(params); + + await upload.promise(); } async function deleteOldFile(user: IRemoteUser) { diff --git a/src/services/drive/delete-file.ts b/src/services/drive/delete-file.ts index 5b44a0817..b288d12f9 100644 --- a/src/services/drive/delete-file.ts +++ b/src/services/drive/delete-file.ts @@ -1,10 +1,10 @@ -import * as Minio from 'minio'; import { DriveFile } from '../../models/entities/drive-file'; import { InternalStorage } from './internal-storage'; import { DriveFiles, Instances, Notes } from '../../models'; import { driveChart, perUserDriveChart, instanceChart } from '../chart'; import { createDeleteObjectStorageFileJob } from '../../queue'; import { fetchMeta } from '../../misc/fetch-meta'; +import { getS3 } from './s3'; export async function deleteFile(file: DriveFile, isExpired = false) { if (file.storedInternal) { @@ -93,14 +93,10 @@ function postProcess(file: DriveFile, isExpired = false) { export async function deleteObjectStorageFile(key: string) { const meta = await fetchMeta(); - const minio = new Minio.Client({ - endPoint: meta.objectStorageEndpoint!, - region: meta.objectStorageRegion ? meta.objectStorageRegion : undefined, - port: meta.objectStoragePort ? meta.objectStoragePort : undefined, - useSSL: meta.objectStorageUseSSL, - accessKey: meta.objectStorageAccessKey!, - secretKey: meta.objectStorageSecretKey!, - }); + const s3 = getS3(meta); - await minio.removeObject(meta.objectStorageBucket!, key); + await s3.deleteObject({ + Bucket: meta.objectStorageBucket!, + Key: key + }).promise(); } diff --git a/src/services/drive/s3.ts b/src/services/drive/s3.ts new file mode 100644 index 000000000..709a32222 --- /dev/null +++ b/src/services/drive/s3.ts @@ -0,0 +1,31 @@ +import * as S3 from 'aws-sdk/clients/s3'; +import config from '../../config'; +import { Meta } from '../../models/entities/meta'; +import * as httpsProxyAgent from 'https-proxy-agent'; +import * as agentkeepalive from 'agentkeepalive'; + +const httpsAgent = config.proxy + ? new httpsProxyAgent(config.proxy) + : new agentkeepalive.HttpsAgent({ + freeSocketTimeout: 30 * 1000 + }); + +export function getS3(meta: Meta) { + const conf = { + endpoint: meta.objectStorageEndpoint, + accessKeyId: meta.objectStorageAccessKey, + secretAccessKey: meta.objectStorageSecretKey, + region: meta.objectStorageRegion, + sslEnabled: meta.objectStorageUseSSL, + httpOptions: { + } + } as S3.ClientConfiguration; + + if (meta.objectStorageUseSSL) { + conf.httpOptions!.agent = httpsAgent; + } + + const s3 = new S3(conf); + + return s3; +} diff --git a/yarn.lock b/yarn.lock index d2f81d528..1ac9e145f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -489,13 +489,6 @@ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== -"@types/minio@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@types/minio/-/minio-7.0.2.tgz#799571e4afe673072d2e89aef344da8f42e16f7e" - integrity sha512-ZyMa+x5Alann0girw9m2Wc01YnG7eakCwfofbKHOP/YTV7w7G0cUEz16VgxP7HxZhX632akZ4xGmc1wpnmLrjg== - dependencies: - "@types/node" "*" - "@types/mocha@*", "@types/mocha@5.2.7": version "5.2.7" resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-5.2.7.tgz#315d570ccb56c53452ff8638738df60726d5b6ea" @@ -1071,6 +1064,15 @@ agent-base@^4.3.0: dependencies: es6-promisify "^5.0.0" +agentkeepalive@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.0.2.tgz#38a490b779a97bd542d153e5a7da0d1fdef35dd3" + integrity sha512-A5gSniD4xMCYtSD4ilUHpQRB9ZbNjtIPittKUv7bA0j0UCwbT3EJBUYLKPJ/dtmaXRYWI2mG4/O90xbi7oahNw== + dependencies: + debug "^4.1.0" + depd "^1.1.2" + humanize-ms "^1.2.1" + ajv-errors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" @@ -1500,11 +1502,6 @@ async@>=0.2.9: resolved "https://registry.yarnpkg.com/async/-/async-3.1.0.tgz#42b3b12ae1b74927b5217d8c0016baaf62463772" integrity sha512-4vx/aaY6j/j3Lw3fbCHNWP0pPaTCew3F6F3hYyl/tHs/ndmV1q7NW9T5yuJ2XAGwdQrP+6Wu20x06U4APo/iQQ== -async@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= - async@^2.6.0: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" @@ -1551,6 +1548,21 @@ autwh@0.1.0: dependencies: oauth "0.9.15" +aws-sdk@2.500.0: + version "2.500.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.500.0.tgz#2e4c5b7027c2d583fd0018f0aeed712cea135f7f" + integrity sha512-zVSO6STyBbbn5foqiH8Z0agpudtOibSRLhTXNkVnJTwJwYK5f9mv5WKOKcLivx/fvXwVE8QehZWyE3vBzl8I+w== + dependencies: + buffer "4.9.1" + events "1.1.1" + ieee754 "1.1.8" + jmespath "0.15.0" + querystring "0.2.0" + sax "1.2.1" + url "0.10.3" + uuid "3.3.2" + xml2js "0.4.19" + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -1725,16 +1737,12 @@ bl@^1.0.0: readable-stream "^2.3.5" safe-buffer "^5.1.1" -block-stream2@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/block-stream2/-/block-stream2-1.1.0.tgz#c738e3a91ba977ebb5e1fef431e13ca11d8639e2" - integrity sha1-xzjjqRupd+u14f70MeE8oR2GOeI= - dependencies: - defined "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.4" +bluebird@^3.1.1, bluebird@^3.4.1, bluebird@^3.5.1: + version "3.5.4" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.4.tgz#d6cc661595de30d5b3af5fcedd3c0b3ef6ec5714" + integrity sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw== -bluebird@^3.1.1, bluebird@^3.4.1, bluebird@^3.5.1, bluebird@^3.5.5: +bluebird@^3.5.5: version "3.5.5" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w== @@ -1927,7 +1935,7 @@ buffer-xor@^1.0.3: resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= -buffer@^4.3.0: +buffer@4.9.1, buffer@^4.3.0: version "4.9.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg= @@ -2653,7 +2661,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.4.7, concat-stream@^1.4.8, concat-stream@^1.5.0, concat-stream@^1.6.0: +concat-stream@^1.4.7, concat-stream@^1.5.0, concat-stream@^1.6.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -3769,11 +3777,6 @@ es5-ext@^0.10.35, es5-ext@^0.10.45, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@ es6-symbol "~3.1.1" next-tick "^1.0.0" -es6-error@^2.0.2: - version "2.1.1" - resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-2.1.1.tgz#91384301ec5ed1c9a7247d1128247216f03547cd" - integrity sha1-kThDAexe0cmnJH0RKCRyFvA1R80= - es6-iterator@^2.0.1, es6-iterator@^2.0.3, es6-iterator@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" @@ -3983,6 +3986,11 @@ eventemitter3@4.0.0: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg== +events@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= + events@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" @@ -5375,7 +5383,7 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -https-proxy-agent@^2.2.1: +https-proxy-agent@2.2.2, https-proxy-agent@^2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.2.tgz#271ea8e90f836ac9f119daccd39c19ff7dfb0793" integrity sha512-c8Ndjc9Bkpfx/vCJueCPy0jlP4ccCCSNDp8xwCZzPjKJUm+B+u9WX2x98Qx4n1PiMNTWo3D7KK5ifNV/yJyRzg== @@ -5383,6 +5391,13 @@ https-proxy-agent@^2.2.1: agent-base "^4.3.0" debug "^3.1.0" +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= + dependencies: + ms "^2.0.0" + humanize-number@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/humanize-number/-/humanize-number-0.0.2.tgz#11c0af6a471643633588588048f1799541489c18" @@ -5402,6 +5417,11 @@ icss-utils@^4.0.0, icss-utils@^4.1.1: dependencies: postcss "^7.0.14" +ieee754@1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" + integrity sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q= + ieee754@^1.1.4: version "1.1.13" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" @@ -6068,6 +6088,11 @@ isurl@^1.0.0-alpha5: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" +jmespath@0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" + integrity sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc= + jpeg-js@^0.3.3: version "0.3.5" resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.3.5.tgz#6fbd6cd0e49627c5a0341796c9e50c70a2aa3673" @@ -6188,11 +6213,6 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= -json-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-stream/-/json-stream-1.0.0.tgz#1a3854e28d2bbeeab31cc7ddf683d2ddc5652708" - integrity sha1-GjhU4o0rvuqzHMfd9oPS3cVlJwg= - json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -6861,7 +6881,7 @@ lodash.uniq@^4.3.0, lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^4.13.1, lodash@^4.14.0, lodash@^4.14.2, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.4: +lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.4: version "4.17.14" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== @@ -7170,7 +7190,7 @@ mime-db@1.40.0, "mime-db@>= 1.40.0 < 2", mime-db@^1.28.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== -mime-types@^2.1.12, mime-types@^2.1.14, mime-types@^2.1.18, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: +mime-types@^2.1.12, mime-types@^2.1.18, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: version "2.1.24" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== @@ -7229,25 +7249,6 @@ minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= -minio@7.0.10: - version "7.0.10" - resolved "https://registry.yarnpkg.com/minio/-/minio-7.0.10.tgz#f8645eaf437e7de19f4dcfba8f55236a86e91959" - integrity sha512-Qs7MHHCfanu/xzZo9gCU0Rf3WZVgTKadaOy8jm6epdU5c6tAp0Tbcekzy13ECfE/w2pn0ku611B8hgy2O+7tNA== - dependencies: - async "^1.5.2" - block-stream2 "^1.0.0" - concat-stream "^1.4.8" - es6-error "^2.0.2" - json-stream "^1.0.0" - lodash "^4.14.2" - mime-types "^2.1.14" - mkdirp "^0.5.1" - querystring "0.2.0" - through2 "^0.6.5" - uuid "^3.1.0" - xml "^1.0.0" - xml2js "^0.4.15" - minipass@^2.2.1, minipass@^2.3.5: version "2.3.5" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" @@ -7381,7 +7382,7 @@ ms@2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== -ms@2.1.2, ms@^2.1.1: +ms@2.1.2, ms@^2.0.0, ms@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== @@ -9142,11 +9143,6 @@ progress@^2.0.0: resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -promise-any@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/promise-any/-/promise-any-0.2.0.tgz#7aeaafd6297698d8874cb7d3bc7c0faf89fffe8a" - integrity sha1-euqv1il2mNiHTLfTvHwPr4n//oo= - promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" @@ -9508,7 +9504,7 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== @@ -9540,16 +9536,6 @@ readable-stream@1.1.x, readable-stream@~1.1.9: string_decoder "^1.1.1" util-deprecate "^1.0.1" -"readable-stream@>=1.0.33-1 <1.1.0-0": - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" @@ -10046,6 +10032,11 @@ sax@0.5.x: resolved "https://registry.yarnpkg.com/sax/-/sax-0.5.8.tgz#d472db228eb331c2506b0e8c15524adb939d12c1" integrity sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE= +sax@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" + integrity sha1-e45lYZCyKOgaZq6nSEgNgozS03o= + sax@>=0.6.0, sax@^1.2.4, sax@~1.2.1, sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -11026,14 +11017,6 @@ through2@2.X, through2@^2.0.0, through2@^2.0.3, through2@~2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" -through2@^0.6.5: - version "0.6.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" - integrity sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg= - dependencies: - readable-stream ">=1.0.33-1 <1.1.0-0" - xtend ">=4.0.0 <4.1.0-0" - through2@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.1.tgz#39276e713c3302edf9e388dd9c812dd3b825bd5a" @@ -11567,6 +11550,14 @@ url-to-options@^1.0.1: resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= +url@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" + integrity sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" @@ -12194,7 +12185,7 @@ xml-name-validator@^3.0.0: resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== -xml2js@^0.4.15, xml2js@^0.4.17: +xml2js@0.4.19, xml2js@^0.4.17: version "0.4.19" resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== @@ -12202,11 +12193,6 @@ xml2js@^0.4.15, xml2js@^0.4.17: sax ">=0.6.0" xmlbuilder "~9.0.1" -xml@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5" - integrity sha1-eLpyAgApxbyHuKgaPPzXS0ovweU= - xmlbuilder@~9.0.1: version "9.0.7" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" @@ -12217,10 +12203,10 @@ xmlchars@^2.1.1: resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.1.1.tgz#ef1a81c05bff629c2280007f12daca21bd6f6c93" integrity sha512-7hew1RPJ1iIuje/Y01bGD/mXokXxegAgVS+e+E0wSi2ILHQkYAH1+JXARwTjZSM4Z4Z+c73aKspEcqj+zPPL/w== -"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== +xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= y18n@^3.2.1: version "3.2.1"