Compare commits
3 Commits
developmen
...
exp/perfMe
Author | SHA1 | Date |
---|---|---|
Anurag Mittal | d186876291 | |
Anurag Mittal | d1e05eb580 | |
Anurag Mittal | 8ac0beb65b |
|
@ -70,6 +70,9 @@ function clientCheck(flightCheckOnStartUp, log, cb) {
|
|||
if (fail) {
|
||||
return cb(errors.InternalError, obj);
|
||||
}
|
||||
metadata.countItems(log, (err, res) => {
|
||||
obj.dataManaged = res;
|
||||
});
|
||||
return cb(null, obj);
|
||||
});
|
||||
}
|
||||
|
@ -123,7 +126,7 @@ function healthcheckHandler(clientIP, req, res, log, statsClient) {
|
|||
}
|
||||
const deep = (req.url === '/_/healthcheck/deep');
|
||||
return routeHandler(deep, req, res, log, statsClient,
|
||||
healthcheckEndHandler);
|
||||
healthcheckEndHandler);
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
},
|
||||
"homepage": "https://github.com/scality/S3#readme",
|
||||
"dependencies": {
|
||||
"arsenal": "github:scality/Arsenal#c1bb2ac",
|
||||
"arsenal": "github:scality/Arsenal#exp/perfMetadata",
|
||||
"async": "~2.5.0",
|
||||
"aws-sdk": "2.178.0",
|
||||
"azure-storage": "^2.1.0",
|
||||
|
|
|
@ -9,7 +9,7 @@ const HttpRequestAuthV4 = require('../utils/HttpRequestAuthV4');
|
|||
const config = require('../../config.json');
|
||||
|
||||
const DUMMY_SIGNATURE =
|
||||
'baadc0debaadc0debaadc0debaadc0debaadc0debaadc0debaadc0debaadc0de';
|
||||
'baadc0debaadc0debaadc0debaadc0debaadc0debaadc0debaadc0debaadc0de';
|
||||
|
||||
http.globalAgent.keepAlive = true;
|
||||
|
||||
|
@ -61,24 +61,24 @@ class HttpChunkedUploadWithBadSignature extends HttpRequestAuthV4 {
|
|||
function testChunkedPutWithBadSignature(n, alterSignatureChunkId, cb) {
|
||||
const req = new HttpChunkedUploadWithBadSignature(
|
||||
`http://${config.ipAddress}:${PORT}/${BUCKET}/obj-${n}`, {
|
||||
accessKey: config.accessKey,
|
||||
secretKey: config.secretKey,
|
||||
method: 'PUT',
|
||||
headers: {
|
||||
'content-length': N_DATA_CHUNKS * DATA_CHUNK_SIZE,
|
||||
'connection': 'keep-alive',
|
||||
},
|
||||
alterSignatureChunkId,
|
||||
}, res => {
|
||||
if (alterSignatureChunkId >= 0 &&
|
||||
alterSignatureChunkId <= N_DATA_CHUNKS) {
|
||||
assert.strictEqual(res.statusCode, 403);
|
||||
} else {
|
||||
assert.strictEqual(res.statusCode, 200);
|
||||
}
|
||||
res.on('data', () => {});
|
||||
res.on('end', cb);
|
||||
});
|
||||
accessKey: config.accessKey,
|
||||
secretKey: config.secretKey,
|
||||
method: 'PUT',
|
||||
headers: {
|
||||
'content-length': N_DATA_CHUNKS * DATA_CHUNK_SIZE,
|
||||
'connection': 'keep-alive',
|
||||
},
|
||||
alterSignatureChunkId,
|
||||
}, res => {
|
||||
if (alterSignatureChunkId >= 0 &&
|
||||
alterSignatureChunkId <= N_DATA_CHUNKS) {
|
||||
assert.strictEqual(res.statusCode, 403);
|
||||
} else {
|
||||
assert.strictEqual(res.statusCode, 200);
|
||||
}
|
||||
res.on('data', () => { });
|
||||
res.on('end', cb);
|
||||
});
|
||||
|
||||
req.on('error', err => {
|
||||
assert.ifError(err);
|
||||
|
@ -101,25 +101,25 @@ describe('streaming V4 signature with bad chunk signature', () => {
|
|||
before(done => createBucket(bucketUtil, done));
|
||||
after(done => cleanupBucket(bucketUtil, done));
|
||||
it('Cloudserver should be robust against bad signature in streaming ' +
|
||||
'payload', function badSignatureInStreamingPayload(cb) {
|
||||
this.timeout(120000);
|
||||
async.timesLimit(N_PUTS, 10, (n, done) => {
|
||||
// multiple test cases depend on the value of
|
||||
// alterSignatureChunkId:
|
||||
// alterSignatureChunkId >= 0 &&
|
||||
// alterSignatureChunkId < N_DATA_CHUNKS
|
||||
// <=> alter the signature of the target data chunk
|
||||
// alterSignatureChunkId == N_DATA_CHUNKS
|
||||
// <=> alter the signature of the last empty chunk that
|
||||
// carries the last payload signature
|
||||
// alterSignatureChunkId > N_DATA_CHUNKS
|
||||
// <=> no signature is altered (regular test case)
|
||||
// By making n go from 0 to nDatachunks+1, we cover all
|
||||
// above cases.
|
||||
'payload', function badSignatureInStreamingPayload(cb) {
|
||||
this.timeout(120000);
|
||||
async.timesLimit(N_PUTS, 10, (n, done) => {
|
||||
// multiple test cases depend on the value of
|
||||
// alterSignatureChunkId:
|
||||
// alterSignatureChunkId >= 0 &&
|
||||
// alterSignatureChunkId < N_DATA_CHUNKS
|
||||
// <=> alter the signature of the target data chunk
|
||||
// alterSignatureChunkId == N_DATA_CHUNKS
|
||||
// <=> alter the signature of the last empty chunk that
|
||||
// carries the last payload signature
|
||||
// alterSignatureChunkId > N_DATA_CHUNKS
|
||||
// <=> no signature is altered (regular test case)
|
||||
// By making n go from 0 to nDatachunks+1, we cover all
|
||||
// above cases.
|
||||
|
||||
const alterSignatureChunkId = ALTER_CHUNK_SIGNATURE ?
|
||||
(n % (N_DATA_CHUNKS + 2)) : null;
|
||||
testChunkedPutWithBadSignature(n, alterSignatureChunkId, done);
|
||||
}, err => cb(err));
|
||||
});
|
||||
const alterSignatureChunkId = ALTER_CHUNK_SIGNATURE ?
|
||||
(n % (N_DATA_CHUNKS + 2)) : null;
|
||||
testChunkedPutWithBadSignature(n, alterSignatureChunkId, done);
|
||||
}, err => cb(err));
|
||||
});
|
||||
});
|
||||
|
|
|
@ -64,7 +64,7 @@ class HttpRequestAuthV4 extends stream.Writable {
|
|||
getCredentialScope() {
|
||||
const signingDate = this._timestamp.slice(0, 8);
|
||||
const credentialScope =
|
||||
`${signingDate}/${REGION}/${SERVICE}/aws4_request`;
|
||||
`${signingDate}/${REGION}/${SERVICE}/aws4_request`;
|
||||
// console.log(`CREDENTIAL SCOPE: "${credentialScope}"`);
|
||||
return credentialScope;
|
||||
}
|
||||
|
@ -72,13 +72,13 @@ class HttpRequestAuthV4 extends stream.Writable {
|
|||
getSigningKey() {
|
||||
const signingDate = this._timestamp.slice(0, 8);
|
||||
const dateKey = crypto.createHmac('sha256', `AWS4${this._secretKey}`)
|
||||
.update(signingDate, 'binary').digest();
|
||||
.update(signingDate, 'binary').digest();
|
||||
const dateRegionKey = crypto.createHmac('sha256', dateKey)
|
||||
.update(REGION, 'binary').digest();
|
||||
.update(REGION, 'binary').digest();
|
||||
const dateRegionServiceKey = crypto.createHmac('sha256', dateRegionKey)
|
||||
.update(SERVICE, 'binary').digest();
|
||||
.update(SERVICE, 'binary').digest();
|
||||
this._signingKey = crypto.createHmac('sha256', dateRegionServiceKey)
|
||||
.update('aws4_request', 'binary').digest();
|
||||
.update('aws4_request', 'binary').digest();
|
||||
}
|
||||
|
||||
createSignature(stringToSign) {
|
||||
|
@ -97,18 +97,18 @@ class HttpRequestAuthV4 extends stream.Writable {
|
|||
qsParams.push({ key, value });
|
||||
});
|
||||
const canonicalQueryString =
|
||||
qsParams
|
||||
.sort((a, b) => {
|
||||
if (a.key !== b.key) {
|
||||
return a.key < b.key ? -1 : 1;
|
||||
}
|
||||
return a.value < b.value ? -1 : 1;
|
||||
})
|
||||
.map(param => `${encodeURI(param.key)}=${encodeURI(param.value)}`)
|
||||
.join('&');
|
||||
qsParams
|
||||
.sort((a, b) => {
|
||||
if (a.key !== b.key) {
|
||||
return a.key < b.key ? -1 : 1;
|
||||
}
|
||||
return a.value < b.value ? -1 : 1;
|
||||
})
|
||||
.map(param => `${encodeURI(param.key)}=${encodeURI(param.value)}`)
|
||||
.join('&');
|
||||
const canonicalSignedHeaders = signedHeadersList
|
||||
.map(header => `${header}:${signedHeaders[header]}\n`)
|
||||
.join('');
|
||||
.map(header => `${header}:${signedHeaders[header]}\n`)
|
||||
.join('');
|
||||
const canonicalRequest = [
|
||||
method,
|
||||
urlObj.pathname,
|
||||
|
@ -124,16 +124,16 @@ class HttpRequestAuthV4 extends stream.Writable {
|
|||
|
||||
constructRequestStringToSign(canonicalReq) {
|
||||
const canonicalReqHash =
|
||||
crypto.createHash('sha256').update(canonicalReq).digest('hex');
|
||||
crypto.createHash('sha256').update(canonicalReq).digest('hex');
|
||||
const stringToSign = `AWS4-HMAC-SHA256\n${this._timestamp}\n` +
|
||||
`${this.getCredentialScope()}\n${canonicalReqHash}`;
|
||||
`${this.getCredentialScope()}\n${canonicalReqHash}`;
|
||||
// console.log(`STRING TO SIGN: "${stringToSign}"`);
|
||||
return stringToSign;
|
||||
}
|
||||
|
||||
getAuthorizationSignature(urlObj, signedHeaders) {
|
||||
const canonicalRequest =
|
||||
this.getCanonicalRequest(urlObj, signedHeaders);
|
||||
this.getCanonicalRequest(urlObj, signedHeaders);
|
||||
this._lastSignature = this.createSignature(
|
||||
this.constructRequestStringToSign(canonicalRequest));
|
||||
return this._lastSignature;
|
||||
|
@ -141,23 +141,23 @@ class HttpRequestAuthV4 extends stream.Writable {
|
|||
|
||||
getAuthorizationHeader(urlObj, signedHeaders) {
|
||||
const authorizationSignature =
|
||||
this.getAuthorizationSignature(urlObj, signedHeaders);
|
||||
this.getAuthorizationSignature(urlObj, signedHeaders);
|
||||
const signedHeadersList = Object.keys(signedHeaders).sort();
|
||||
|
||||
return ['AWS4-HMAC-SHA256',
|
||||
`Credential=${this._accessKey}/${this.getCredentialScope()},`,
|
||||
`SignedHeaders=${signedHeadersList.join(';')},`,
|
||||
`Signature=${authorizationSignature}`,
|
||||
].join(' ');
|
||||
`Credential=${this._accessKey}/${this.getCredentialScope()},`,
|
||||
`SignedHeaders=${signedHeadersList.join(';')},`,
|
||||
`Signature=${authorizationSignature}`,
|
||||
].join(' ');
|
||||
}
|
||||
|
||||
constructChunkStringToSign(chunkData) {
|
||||
const currentChunkHash =
|
||||
crypto.createHash('sha256').update(chunkData.toString())
|
||||
.digest('hex');
|
||||
crypto.createHash('sha256').update(chunkData.toString())
|
||||
.digest('hex');
|
||||
const stringToSign = `AWS4-HMAC-SHA256-PAYLOAD\n${this._timestamp}\n` +
|
||||
`${this.getCredentialScope()}\n${this._lastSignature}\n` +
|
||||
`${EMPTY_STRING_HASH}\n${currentChunkHash}`;
|
||||
`${this.getCredentialScope()}\n${this._lastSignature}\n` +
|
||||
`${EMPTY_STRING_HASH}\n${currentChunkHash}`;
|
||||
// console.log(`CHUNK STRING TO SIGN: "${stringToSign}"`);
|
||||
return stringToSign;
|
||||
}
|
||||
|
@ -174,12 +174,12 @@ class HttpRequestAuthV4 extends stream.Writable {
|
|||
}
|
||||
const chunkSignature = this.getChunkSignature(chunkData);
|
||||
return [chunkData.length.toString(16),
|
||||
';chunk-signature=',
|
||||
chunkSignature,
|
||||
'\r\n',
|
||||
chunkData,
|
||||
'\r\n',
|
||||
].join('');
|
||||
';chunk-signature=',
|
||||
chunkSignature,
|
||||
'\r\n',
|
||||
chunkData,
|
||||
'\r\n',
|
||||
].join('');
|
||||
}
|
||||
|
||||
_constructRequest(hasDataToSend) {
|
||||
|
@ -207,7 +207,7 @@ class HttpRequestAuthV4 extends stream.Writable {
|
|||
contentLengthHeader = header;
|
||||
}
|
||||
if (!['connection',
|
||||
'transfer-encoding'].includes(lowerHeader)) {
|
||||
'transfer-encoding'].includes(lowerHeader)) {
|
||||
signedHeaders[lowerHeader] = httpHeaders[header];
|
||||
}
|
||||
});
|
||||
|
|
160
yarn.lock
160
yarn.lock
|
@ -3,16 +3,16 @@
|
|||
|
||||
|
||||
"@babel/code-frame@^7.0.0":
|
||||
version "7.5.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d"
|
||||
integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==
|
||||
version "7.8.3"
|
||||
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e"
|
||||
integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==
|
||||
dependencies:
|
||||
"@babel/highlight" "^7.0.0"
|
||||
"@babel/highlight" "^7.8.3"
|
||||
|
||||
"@babel/highlight@^7.0.0":
|
||||
version "7.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540"
|
||||
integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==
|
||||
"@babel/highlight@^7.8.3":
|
||||
version "7.8.3"
|
||||
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.8.3.tgz#28f173d04223eaaa59bc1d439a3836e6d1265797"
|
||||
integrity sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==
|
||||
dependencies:
|
||||
chalk "^2.0.0"
|
||||
esutils "^2.0.2"
|
||||
|
@ -146,11 +146,11 @@ ajv@4.10.0:
|
|||
json-stable-stringify "^1.0.1"
|
||||
|
||||
ajv@^6.10.2, ajv@^6.5.5, ajv@^6.9.1:
|
||||
version "6.10.2"
|
||||
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52"
|
||||
integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==
|
||||
version "6.11.0"
|
||||
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.11.0.tgz#c3607cbc8ae392d8a5a536f25b21f8e5f3f87fe9"
|
||||
integrity sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA==
|
||||
dependencies:
|
||||
fast-deep-equal "^2.0.1"
|
||||
fast-deep-equal "^3.1.1"
|
||||
fast-json-stable-stringify "^2.0.0"
|
||||
json-schema-traverse "^0.4.1"
|
||||
uri-js "^4.2.2"
|
||||
|
@ -241,9 +241,9 @@ arraybuffer.slice@~0.0.7:
|
|||
resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675"
|
||||
integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==
|
||||
|
||||
"arsenal@github:scality/Arsenal#c1bb2ac":
|
||||
version "8.1.4"
|
||||
resolved "https://codeload.github.com/scality/Arsenal/tar.gz/c1bb2ac0585294b022718eb988361011b5b8ad6c"
|
||||
"arsenal@github:scality/Arsenal#exp/perfMetadata":
|
||||
version "8.2.0"
|
||||
resolved "https://codeload.github.com/scality/Arsenal/tar.gz/fff956b02b53bc5bc17df100a69017a4ca8de687"
|
||||
dependencies:
|
||||
"@hapi/joi" "^15.1.0"
|
||||
JSONStream "^1.0.0"
|
||||
|
@ -485,9 +485,9 @@ aws-sdk@2.80.0:
|
|||
xmlbuilder "4.2.1"
|
||||
|
||||
aws-sdk@^2.2.23:
|
||||
version "2.597.0"
|
||||
resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.597.0.tgz#028c7778b4fdc742ac040e7071b85a070d18bf2a"
|
||||
integrity sha512-xdhm1bYnh46b7pEOmIsptQcPAJmq9MT31cUsn3WzOr6IPtiRLz5XIHIusFFsJYpyjiFB99b1n8SabRR7j6H1AA==
|
||||
version "2.607.0"
|
||||
resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.607.0.tgz#d3a8bdacdbcb5097629b2cf3f74ba953d80f7e46"
|
||||
integrity sha512-j4SGSuu5GaUxa1KwDkAta4iDGKeYgb6ECF68C8HqYEn4+PdJz/fQ8gnszUHzt1sHxvVK2dso6d4eUdt5DSiuGw==
|
||||
dependencies:
|
||||
buffer "4.9.1"
|
||||
events "1.1.1"
|
||||
|
@ -505,9 +505,9 @@ aws-sign2@~0.7.0:
|
|||
integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
|
||||
|
||||
aws4@^1.8.0:
|
||||
version "1.9.0"
|
||||
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.0.tgz#24390e6ad61386b0a747265754d2a17219de862c"
|
||||
integrity sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A==
|
||||
version "1.9.1"
|
||||
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e"
|
||||
integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==
|
||||
|
||||
axios@^0.18.0:
|
||||
version "0.18.1"
|
||||
|
@ -682,6 +682,14 @@ bl@^1.0.0:
|
|||
readable-stream "^2.3.5"
|
||||
safe-buffer "^5.1.1"
|
||||
|
||||
bl@^2.2.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/bl/-/bl-2.2.0.tgz#e1a574cdf528e4053019bb800b041c0ac88da493"
|
||||
integrity sha512-wbgvOpqopSr7uq6fJrLH8EsvYMJf9gzfo2jCsL2eTy75qXPukA4pCgHamOQkZtY5vmfVtjB+P3LNlMHW5CEZXA==
|
||||
dependencies:
|
||||
readable-stream "^2.3.5"
|
||||
safe-buffer "^5.1.1"
|
||||
|
||||
bl@~0.8.1:
|
||||
version "0.8.2"
|
||||
resolved "https://registry.yarnpkg.com/bl/-/bl-0.8.2.tgz#c9b6bca08d1bc2ea00fc8afb4f1a5fd1e1c66e4e"
|
||||
|
@ -1171,7 +1179,7 @@ delegates@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
|
||||
integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
|
||||
|
||||
denque@^1.1.0:
|
||||
denque@^1.1.0, denque@^1.4.1:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/denque/-/denque-1.4.1.tgz#6744ff7641c148c3f8a69c307e51235c1f4a37cf"
|
||||
integrity sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ==
|
||||
|
@ -1355,9 +1363,9 @@ error-ex@^1.2.0, error-ex@^1.3.1:
|
|||
is-arrayish "^0.2.1"
|
||||
|
||||
es-abstract@^1.17.0, es-abstract@^1.17.0-next.1:
|
||||
version "1.17.0"
|
||||
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.0.tgz#f42a517d0036a5591dbb2c463591dc8bb50309b1"
|
||||
integrity sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==
|
||||
version "1.17.3"
|
||||
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.3.tgz#d921ff5889a3664921094bb13aaf0dfd11818578"
|
||||
integrity sha512-AwiVPKf3sKGMoWtFw0J7Y4MTZ4Iek67k4COWOwHqS8B9TOZ71DCfcoBmdamy8Y6mj4MDz0+VNUpC2HKHFHA3pg==
|
||||
dependencies:
|
||||
es-to-primitive "^1.2.1"
|
||||
function-bind "^1.1.1"
|
||||
|
@ -1450,25 +1458,25 @@ eslint-config-scality@scality/Guidelines#28e73a2:
|
|||
markdownlint "0.11.0"
|
||||
|
||||
eslint-import-resolver-node@^0.3.2:
|
||||
version "0.3.2"
|
||||
resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a"
|
||||
integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==
|
||||
version "0.3.3"
|
||||
resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz#dbaa52b6b2816b50bc6711af75422de808e98404"
|
||||
integrity sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==
|
||||
dependencies:
|
||||
debug "^2.6.9"
|
||||
resolve "^1.5.0"
|
||||
resolve "^1.13.1"
|
||||
|
||||
eslint-module-utils@^2.4.1:
|
||||
version "2.5.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.5.0.tgz#cdf0b40d623032274ccd2abd7e64c4e524d6e19c"
|
||||
integrity sha512-kCo8pZaNz2dsAW7nCUjuVoI11EBXXpIzfNxmaoLhXoRDOnqXLC4iSGVRdZPhOitfbdEfMEfKOiENaK6wDPZEGw==
|
||||
version "2.5.2"
|
||||
resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz#7878f7504824e1b857dd2505b59a8e5eda26a708"
|
||||
integrity sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q==
|
||||
dependencies:
|
||||
debug "^2.6.9"
|
||||
pkg-dir "^2.0.0"
|
||||
|
||||
eslint-plugin-import@^2.14.0:
|
||||
version "2.19.1"
|
||||
resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.19.1.tgz#5654e10b7839d064dd0d46cd1b88ec2133a11448"
|
||||
integrity sha512-x68131aKoCZlCae7rDXKSAQmbT5DQuManyXo2sK6fJJ0aK5CWAkv6A6HJZGgqC8IhjQxYPgo6/IY4Oz8AFsbBw==
|
||||
version "2.20.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.0.tgz#d749a7263fb6c29980def8e960d380a6aa6aecaa"
|
||||
integrity sha512-NK42oA0mUc8Ngn4kONOPsPB1XhbUvNHqF+g307dPV28aknPoiNnKLFd9em4nkswwepdF5ouieqv5Th/63U7YJQ==
|
||||
dependencies:
|
||||
array-includes "^3.0.3"
|
||||
array.prototype.flat "^1.2.1"
|
||||
|
@ -1634,10 +1642,10 @@ extsprintf@^1.2.0:
|
|||
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
|
||||
integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
|
||||
|
||||
fast-deep-equal@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
|
||||
integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
|
||||
fast-deep-equal@^3.1.1:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4"
|
||||
integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==
|
||||
|
||||
fast-json-stable-stringify@^2.0.0:
|
||||
version "2.1.0"
|
||||
|
@ -1904,9 +1912,9 @@ gtoken@^2.3.0:
|
|||
pify "^4.0.0"
|
||||
|
||||
handlebars@^4.0.3:
|
||||
version "4.5.3"
|
||||
resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.3.tgz#5cf75bd8714f7605713511a56be7c349becb0482"
|
||||
integrity sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA==
|
||||
version "4.7.2"
|
||||
resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.2.tgz#01127b3840156a0927058779482031afe0e730d7"
|
||||
integrity sha512-4PwqDL2laXtTWZghzzCtunQUTLbo31pcCJrd/B/9JP8XbhVzpS5ZXuKqlOzsd1rtcaLo4KqAn8nl8mkknS4MHw==
|
||||
dependencies:
|
||||
neo-async "^2.6.0"
|
||||
optimist "^0.6.1"
|
||||
|
@ -2867,17 +2875,17 @@ memorystream@^0.3.1:
|
|||
resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2"
|
||||
integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI=
|
||||
|
||||
mime-db@1.42.0:
|
||||
version "1.42.0"
|
||||
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.42.0.tgz#3e252907b4c7adb906597b4b65636272cf9e7bac"
|
||||
integrity sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==
|
||||
mime-db@1.43.0:
|
||||
version "1.43.0"
|
||||
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58"
|
||||
integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==
|
||||
|
||||
mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.19, mime-types@~2.1.24:
|
||||
version "2.1.25"
|
||||
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.25.tgz#39772d46621f93e2a80a856c53b86a62156a6437"
|
||||
integrity sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==
|
||||
version "2.1.26"
|
||||
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06"
|
||||
integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==
|
||||
dependencies:
|
||||
mime-db "1.42.0"
|
||||
mime-db "1.43.0"
|
||||
|
||||
mime@^1.3.4:
|
||||
version "1.6.0"
|
||||
|
@ -2957,9 +2965,9 @@ mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.1, mkdirp@~0.5.1:
|
|||
minimist "0.0.8"
|
||||
|
||||
mocha-junit-reporter@^1.23.1:
|
||||
version "1.23.1"
|
||||
resolved "https://registry.yarnpkg.com/mocha-junit-reporter/-/mocha-junit-reporter-1.23.1.tgz#ba11519c0b967f404e4123dd69bc4ba022ab0f12"
|
||||
integrity sha512-qeDvKlZyAH2YJE1vhryvjUQ06t2hcnwwu4k5Ddwn0GQINhgEYFhlGM0DwYCVUHq5cuo32qAW6HDsTHt7zz99Ng==
|
||||
version "1.23.3"
|
||||
resolved "https://registry.yarnpkg.com/mocha-junit-reporter/-/mocha-junit-reporter-1.23.3.tgz#941e219dd759ed732f8641e165918aa8b167c981"
|
||||
integrity sha512-ed8LqbRj1RxZfjt/oC9t12sfrWsjZ3gNnbhV1nuj9R/Jb5/P3Xb4duv2eCfCDMYH+fEu0mqca7m4wsiVjsxsvA==
|
||||
dependencies:
|
||||
debug "^2.2.0"
|
||||
md5 "^2.1.0"
|
||||
|
@ -3021,11 +3029,13 @@ mongodb@^2.2.31:
|
|||
readable-stream "2.2.7"
|
||||
|
||||
mongodb@^3.0.1:
|
||||
version "3.4.1"
|
||||
resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.4.1.tgz#0d15e57e0ea0fc85b7a4fb9291b374c2e71652dc"
|
||||
integrity sha512-juqt5/Z42J4DcE7tG7UdVaTKmUC6zinF4yioPfpeOSNBieWSK6qCY+0tfGQcHLKrauWPDdMZVROHJOa8q2pWsA==
|
||||
version "3.5.2"
|
||||
resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.5.2.tgz#83b8bcb3d96b666a10eeca2f9c7ad1db056ae291"
|
||||
integrity sha512-Lxt4th2tK2MxmkDBR5cMik+xEnkvhwg0BC5kGcHm9RBwaNEsrIryvV5istGXOHbnif5KslMpY1FbX6YbGJ/Trg==
|
||||
dependencies:
|
||||
bl "^2.2.0"
|
||||
bson "^1.1.1"
|
||||
denque "^1.4.1"
|
||||
require_optional "^1.0.1"
|
||||
safe-buffer "^5.1.2"
|
||||
optionalDependencies:
|
||||
|
@ -3656,9 +3666,9 @@ readable-stream@2.2.7:
|
|||
util-deprecate "~1.0.1"
|
||||
|
||||
readable-stream@^2.0.6, readable-stream@^2.3.0, readable-stream@^2.3.5:
|
||||
version "2.3.6"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
|
||||
integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
|
||||
version "2.3.7"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
|
||||
integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
|
||||
dependencies:
|
||||
core-util-is "~1.0.0"
|
||||
inherits "~2.0.3"
|
||||
|
@ -3669,9 +3679,9 @@ readable-stream@^2.0.6, readable-stream@^2.3.0, readable-stream@^2.3.5:
|
|||
util-deprecate "~1.0.1"
|
||||
|
||||
readable-stream@^3.4.0:
|
||||
version "3.4.0"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc"
|
||||
integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==
|
||||
version "3.5.0"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.5.0.tgz#465d70e6d1087f6162d079cd0b5db7fbebfd1606"
|
||||
integrity sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA==
|
||||
dependencies:
|
||||
inherits "^2.0.3"
|
||||
string_decoder "^1.1.1"
|
||||
|
@ -3792,10 +3802,10 @@ resolve-from@^4.0.0:
|
|||
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
|
||||
integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
|
||||
|
||||
resolve@^1.10.0, resolve@^1.12.0, resolve@^1.5.0:
|
||||
version "1.14.1"
|
||||
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.14.1.tgz#9e018c540fcf0c427d678b9931cbf45e984bcaff"
|
||||
integrity sha512-fn5Wobh4cxbLzuHaE+nphztHy43/b++4M6SsGFC2gB8uYwf0C8LcarfCz1un7UTW8OFQg9iNjZ4xpcFVGebDPg==
|
||||
resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1:
|
||||
version "1.14.2"
|
||||
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.14.2.tgz#dbf31d0fa98b1f29aa5169783b9c290cb865fea2"
|
||||
integrity sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ==
|
||||
dependencies:
|
||||
path-parse "^1.0.6"
|
||||
|
||||
|
@ -4537,9 +4547,9 @@ uc.micro@^1.0.1, uc.micro@^1.0.5:
|
|||
integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==
|
||||
|
||||
uglify-js@^3.1.4:
|
||||
version "3.7.3"
|
||||
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.7.3.tgz#f918fce9182f466d5140f24bb0ff35c2d32dcc6a"
|
||||
integrity sha512-7tINm46/3puUA4hCkKYo4Xdts+JDaVC9ZPRcG8Xw9R4nhO/gZgUM3TENq8IF4Vatk8qCig4MzP/c8G4u2BkVQg==
|
||||
version "3.7.6"
|
||||
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.7.6.tgz#0783daa867d4bc962a37cc92f67f6e3238c47485"
|
||||
integrity sha512-yYqjArOYSxvqeeiYH2VGjZOqq6SVmhxzaPjJC1W2F9e+bqvFL9QXQ2osQuKUFjM2hGjKG2YclQnRKWQSt/nOTQ==
|
||||
dependencies:
|
||||
commander "~2.20.3"
|
||||
source-map "~0.6.1"
|
||||
|
@ -4550,9 +4560,9 @@ ultron@1.0.x:
|
|||
integrity sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=
|
||||
|
||||
underscore@^1.8.3:
|
||||
version "1.9.1"
|
||||
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961"
|
||||
integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==
|
||||
version "1.9.2"
|
||||
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.2.tgz#0c8d6f536d6f378a5af264a72f7bec50feb7cf2f"
|
||||
integrity sha512-D39qtimx0c1fI3ya1Lnhk3E9nONswSKhnffBI0gME9C99fYOkNi04xs8K6pePLhvl1frbDemkaBQ5ikWllR2HQ==
|
||||
|
||||
underscore@~1.8.3:
|
||||
version "1.8.3"
|
||||
|
@ -4626,9 +4636,9 @@ uuid@3.3.2:
|
|||
integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==
|
||||
|
||||
uuid@^3.0.0, uuid@^3.0.1, uuid@^3.3.2:
|
||||
version "3.3.3"
|
||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866"
|
||||
integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==
|
||||
version "3.4.0"
|
||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
|
||||
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
|
||||
|
||||
validate-npm-package-license@^3.0.1:
|
||||
version "3.0.4"
|
||||
|
|
Loading…
Reference in New Issue