mirror of
https://github.com/marcogll/passkit-generator.git
synced 2026-03-15 14:25:17 +00:00
First working version that let you download pass on http request
Added config.json for paths and credentials configuration.
This commit is contained in:
7
.gitignore
vendored
7
.gitignore
vendored
@@ -1,2 +1,9 @@
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
node_modules
|
node_modules
|
||||||
|
output/
|
||||||
|
passModels/
|
||||||
|
certificates/pass.cer
|
||||||
|
certificates/passCertificate-exported.p12
|
||||||
|
certificates/passcertificate.pem
|
||||||
|
certificates/passkey.pem
|
||||||
|
certificates/source-AppleWWDRCA.cer
|
||||||
|
|||||||
25
certificates/WWDR.pem
Normal file
25
certificates/WWDR.pem
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIEIjCCAwqgAwIBAgIIAd68xDltoBAwDQYJKoZIhvcNAQEFBQAwYjELMAkGA1UE
|
||||||
|
BhMCVVMxEzARBgNVBAoTCkFwcGxlIEluYy4xJjAkBgNVBAsTHUFwcGxlIENlcnRp
|
||||||
|
ZmljYXRpb24gQXV0aG9yaXR5MRYwFAYDVQQDEw1BcHBsZSBSb290IENBMB4XDTEz
|
||||||
|
MDIwNzIxNDg0N1oXDTIzMDIwNzIxNDg0N1owgZYxCzAJBgNVBAYTAlVTMRMwEQYD
|
||||||
|
VQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3JsZHdpZGUgRGV2ZWxv
|
||||||
|
cGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3aWRlIERldmVsb3Bl
|
||||||
|
ciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3
|
||||||
|
DQEBAQUAA4IBDwAwggEKAoIBAQDKOFSmy1aqyCQ5SOmM7uxfuH8mkbw0U3rOfGOA
|
||||||
|
YXdkXqUHI7Y5/lAtFVZYcC1+xG7BSoU+L/DehBqhV8mvexj/avoVEkkVCBmsqtsq
|
||||||
|
Mu2WY2hSFT2Miuy/axiV4AOsAX2XBWfODoWVN2rtCbauZ81RZJ/GXNG8V25nNYB2
|
||||||
|
NqSHgW44j9grFU57Jdhav06DwY3Sk9UacbVgnJ0zTlX5ElgMhrgWDcHld0WNUEi6
|
||||||
|
Ky3klIXh6MSdxmilsKP8Z35wugJZS3dCkTm59c3hTO/AO0iMpuUhXf1qarunFjVg
|
||||||
|
0uat80YpyejDi+l5wGphZxWy8P3laLxiX27Pmd3vG2P+kmWrAgMBAAGjgaYwgaMw
|
||||||
|
HQYDVR0OBBYEFIgnFwmpthhgi+zruvZHWcVSVKO3MA8GA1UdEwEB/wQFMAMBAf8w
|
||||||
|
HwYDVR0jBBgwFoAUK9BpR5R2Cf70a40uQKb3R01/CF4wLgYDVR0fBCcwJTAjoCGg
|
||||||
|
H4YdaHR0cDovL2NybC5hcHBsZS5jb20vcm9vdC5jcmwwDgYDVR0PAQH/BAQDAgGG
|
||||||
|
MBAGCiqGSIb3Y2QGAgEEAgUAMA0GCSqGSIb3DQEBBQUAA4IBAQBPz+9Zviz1smwv
|
||||||
|
j+4ThzLoBTWobot9yWkMudkXvHcs1Gfi/ZptOllc34MBvbKuKmFysa/Nw0Uwj6OD
|
||||||
|
Dc4dR7Txk4qjdJukw5hyhzs+r0ULklS5MruQGFNrCk4QttkdUGwhgAqJTleMa1s8
|
||||||
|
Pab93vcNIx0LSiaHP7qRkkykGRIZbVf1eliHe2iK5IaMSuviSRSqpd1VAKmuu0sw
|
||||||
|
ruGgsbwpgOYJd+W+NKIByn/c4grmO7i77LpilfMFY0GCzQ87HUyVpNur+cmV6U/k
|
||||||
|
TecmmYHpvPm0KdIBembhLoz2IYrF+Hjhga6/05Cdqa3zr/04GpZnMBxRpVzscYqC
|
||||||
|
tGwPDBUf
|
||||||
|
-----END CERTIFICATE-----
|
||||||
25
certificates/pkcs12tokeys.sh
Executable file
25
certificates/pkcs12tokeys.sh
Executable file
@@ -0,0 +1,25 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# This script is just a shortcut to extract public and private keys from pkcs#12 key file
|
||||||
|
|
||||||
|
# For the ones who never used BASH, remember to not put spaces
|
||||||
|
# in variable=value or it won't work.
|
||||||
|
|
||||||
|
# This is the pass used on .p12 file exported from the keychain
|
||||||
|
passToExtract="alpaca2018"
|
||||||
|
# This is the secret to encrypt the key (second command) - use complex secret on production
|
||||||
|
secret="123456"
|
||||||
|
# This is the name of the .p12 file exported from the keychain.
|
||||||
|
# You can put also paths but remember the starting point is the "certificates/" folder
|
||||||
|
# Example : the file is on the parent folder
|
||||||
|
# baseFile="../pass-exported.p12"
|
||||||
|
baseFile="passCertificate-exported.p12"
|
||||||
|
|
||||||
|
cd "$(dirname "$0")"
|
||||||
|
|
||||||
|
# Certificate Key in .pem format
|
||||||
|
sudo openssl pkcs12 -in ${baseFile} -clcerts -nokeys -out passcertificate.pem -passin pass:${passToExtract}
|
||||||
|
|
||||||
|
# Key in .pem format
|
||||||
|
sudo openssl pkcs12 -in ${baseFile} -nocerts -out passkey.pem -passin pass:$passToExtract -passout pass:${secret}
|
||||||
|
|
||||||
19
config.json
Normal file
19
config.json
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"certificates": {
|
||||||
|
"dir": "certificates",
|
||||||
|
"files": {
|
||||||
|
"wwdr_pem": "WWDR.pem",
|
||||||
|
"certificate": "passcertificate.pem",
|
||||||
|
"key": "passkey.pem"
|
||||||
|
},
|
||||||
|
"credentials": {
|
||||||
|
"dev_pem_key": "123456"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"output": {
|
||||||
|
"dir": "output"
|
||||||
|
},
|
||||||
|
"models": {
|
||||||
|
"dir": "passModels"
|
||||||
|
}
|
||||||
|
}
|
||||||
245
index.js
245
index.js
@@ -1,15 +1,250 @@
|
|||||||
let express = require("express");
|
const express = require("express");
|
||||||
let instance = express();
|
const crypto = require("crypto");
|
||||||
|
const shellExec = require("child_process").exec;
|
||||||
|
const spawn = require("child_process").spawn;
|
||||||
|
const os = require("os");
|
||||||
|
const path = require("path");
|
||||||
|
const archiver = require("archiver");
|
||||||
|
const async = require("async");
|
||||||
|
const fs = require("fs");
|
||||||
|
|
||||||
|
const _configuration = Object.freeze(require("./config.json"));
|
||||||
|
|
||||||
instance.listen(80, "127.0.0.1", function(req, res) {
|
const instance = express();
|
||||||
|
const supportedTypesOfPass = /(boarding|event|coupon|generic|store)/i;
|
||||||
|
const passModelsDir = _configuration.models.dir;
|
||||||
|
const outputDir = _configuration.output.dir;
|
||||||
|
const Certificates = _configuration.certificates;
|
||||||
|
|
||||||
|
function removeDotFiles(from) {
|
||||||
|
return from.filter(e => {
|
||||||
|
return e.charAt(0) !== "."
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function capitalizeFirst(str) {
|
||||||
|
return str[0].toUpperCase()+str.slice(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Checks if the certificate and the key files originated from che .p12 file are available
|
||||||
|
|
||||||
|
@function checkSignatureRequirements
|
||||||
|
@returns {Object} Promise
|
||||||
|
*/
|
||||||
|
|
||||||
|
function checkSignatureRequirements() {
|
||||||
|
let checkCertificate = new Promise(function(available, notAvailable) {
|
||||||
|
fs.access(`${Certificates.dir}/${Certificates.files.certificate}`, (e) => (!!e ? notAvailable : available)() );
|
||||||
|
});
|
||||||
|
|
||||||
|
let checkKey = new Promise(function(available, notAvailable) {
|
||||||
|
fs.access(`${Certificates.dir}/${Certificates.files.key}`, (e) => (!!e ? notAvailable : available)() );
|
||||||
|
});
|
||||||
|
|
||||||
|
return Promise.all([checkCertificate, checkKey]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Generates the cryptografic signature for the manifest file.
|
||||||
|
Spawns Openssl process since Node.js has no support for PKCSs.
|
||||||
|
|
||||||
|
@function generateManifestSignature
|
||||||
|
@params {String} manifestPath - temp dir path created to keep the manifest file.
|
||||||
|
@returns {Object} Promise
|
||||||
|
*/
|
||||||
|
|
||||||
|
function generateManifestSignature(manifestPath) {
|
||||||
|
return new Promise(function(done, rejected) {
|
||||||
|
checkSignatureRequirements()
|
||||||
|
.then(function() {
|
||||||
|
let opensslError = false;
|
||||||
|
let opensslBuffer = [];
|
||||||
|
|
||||||
|
let opensslProcess = spawn("openssl", [
|
||||||
|
"smime",
|
||||||
|
"-binary",
|
||||||
|
"-sign",
|
||||||
|
"-certfile", path.resolve(Certificates.dir, Certificates.files["wwdr_pem"]),
|
||||||
|
"-signer", path.resolve(Certificates.dir, Certificates.files["certificate"]),
|
||||||
|
"-inkey", path.resolve(Certificates.dir, Certificates.files["key"]),
|
||||||
|
"-in", path.resolve(`${manifestPath}/manifest.json`),
|
||||||
|
// "-out", path.resolve("passCreator", "event.pass", "./signature"),
|
||||||
|
"-outform", "DER",
|
||||||
|
"-passin", `pass:${Certificates.credentials["dev_pem_key"]}`
|
||||||
|
]);
|
||||||
|
|
||||||
|
opensslProcess.stdout.on("data", function(data) {
|
||||||
|
opensslBuffer.push(data);
|
||||||
|
});
|
||||||
|
|
||||||
|
opensslProcess.stderr.on("data", function(data) {
|
||||||
|
opensslBuffer.push(data);
|
||||||
|
opensslError = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
opensslProcess.stdout.on("end", function() {
|
||||||
|
if (opensslError) {
|
||||||
|
return rejected(Buffer.concat(opensslBuffer));
|
||||||
|
}
|
||||||
|
|
||||||
|
return done(Buffer.concat(opensslBuffer));
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch(function(e) {
|
||||||
|
return rejected(`Cannot fulfill signature requirements.\n${e}`);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function generateManifest(fromObject, tempFolderPath) {
|
||||||
|
return new Promise(function(done, failed) {
|
||||||
|
if (!fromObject || typeof fromObject !== "object" && typeof fromObject !== "string") {
|
||||||
|
return failed("generateManifest: Argument 0 must be of an object or a string");
|
||||||
|
}
|
||||||
|
|
||||||
|
let source = typeof fromObject === "object" ? JSON.stringify(fromObject) : fromObject;
|
||||||
|
|
||||||
|
let manifestBuffer = Buffer.from(source);
|
||||||
|
|
||||||
|
let manifestWS = fs.createWriteStream(`${tempFolderPath}/manifest.json`);
|
||||||
|
manifestWS.write(source);
|
||||||
|
manifestWS.end();
|
||||||
|
|
||||||
|
return done(manifestBuffer);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
instance.listen(80, "0.0.0.0", function(req, res) {
|
||||||
console.log("Listening on 80")
|
console.log("Listening on 80")
|
||||||
});
|
});
|
||||||
|
|
||||||
instance.get("/", function (req, res) {
|
instance.get("/", function (req, res) {
|
||||||
res.send("Hello there")
|
res.send("Hello there");
|
||||||
|
});
|
||||||
|
|
||||||
|
instance.get("/gen/:type", function (req, res) {
|
||||||
|
fs.readdir(passModelsDir, {}, function (err, result) {
|
||||||
|
/* Invalid path for passModelsDir */
|
||||||
|
if (err) {
|
||||||
|
console.error(err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Removing all the files and folders which start with "." (hidden files and folder) from the Array */
|
||||||
|
result = removeDotFiles(result);
|
||||||
|
|
||||||
|
/* No folders inside passModelsDir */
|
||||||
|
if (!result) {
|
||||||
|
res.write("No pass models found.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Type in URL not conformant to supportedTypesOfPass */
|
||||||
|
if (!supportedTypesOfPass.test(req.params.type)) {
|
||||||
|
res.send("The requested type of pass is not supported.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* type in URL has not corresponding model in pass folder */
|
||||||
|
if (!result.some(model => model.toLowerCase().includes(req.params.type.toLowerCase()))) {
|
||||||
|
res.send("No models available for this query.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
fs.mkdtemp(path.join(os.tmpdir(), "passkitWebServer-"), function(err, tempFolder) {
|
||||||
|
if (err) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
|
||||||
|
let manifest = {};
|
||||||
|
|
||||||
|
//fs.readdir(`${tempFolderName}/${req.params.type}.pass`, function(err, fileList) {
|
||||||
|
fs.readdir(`${passModelsDir}/${req.params.type}.pass`, function(err, fileList) {
|
||||||
|
if (err) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
|
||||||
|
fileList = removeDotFiles(fileList);
|
||||||
|
|
||||||
|
if (!fileList) {
|
||||||
|
throw "Unable to create pass. Model has not files inside.";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!fileList.includes("pass.json")) {
|
||||||
|
throw "Unable to create pass. Pass.json file is required but not found in model.";
|
||||||
|
}
|
||||||
|
|
||||||
|
let manifestRaw = {};
|
||||||
|
let archive = archiver("zip")
|
||||||
|
|
||||||
|
async.each(fileList, function getHashAndArchive(file, callback) {
|
||||||
|
let passFileStream = fs.createReadStream(`${passModelsDir}/${req.params.type}.pass/${file}`);
|
||||||
|
let hashFlow = crypto.createHash("sha1");
|
||||||
|
|
||||||
|
// adding the files to the zip - i'm not using .directory method because it adds also hidden files like .DS_Store on macOS
|
||||||
|
archive.file(`${passModelsDir}/${req.params.type}.pass/${file}`, { name: file });
|
||||||
|
|
||||||
|
passFileStream.on("data", function(data) {
|
||||||
|
hashFlow.update(data);
|
||||||
|
});
|
||||||
|
|
||||||
|
passFileStream.on("error", function(e) {
|
||||||
|
console.log(e);
|
||||||
|
return callback(e);
|
||||||
|
});
|
||||||
|
|
||||||
|
passFileStream.on("end", function() {
|
||||||
|
manifestRaw[file] = hashFlow.digest("hex").trim();
|
||||||
|
return callback();
|
||||||
|
});
|
||||||
|
}, function end(error) {
|
||||||
|
if (error) {
|
||||||
|
throw new Error(`Unable to compile manifest. ${error}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
generateManifest(manifestRaw, tempFolder)
|
||||||
|
.then(function(manifestBuffer) {
|
||||||
|
|
||||||
|
archive.append(manifestBuffer, { name: "manifest.json" });
|
||||||
|
|
||||||
|
generateManifestSignature(tempFolder)
|
||||||
|
.then(function(signatureBuffer) {
|
||||||
|
|
||||||
|
if (!fs.existsSync("output")) {
|
||||||
|
fs.mkdirSync("output");
|
||||||
|
}
|
||||||
|
|
||||||
|
archive.append(signatureBuffer, { name: "signature" });
|
||||||
|
let outputWS = fs.createWriteStream(`${outputDir}/${req.params.type}.pkpass`);
|
||||||
|
|
||||||
|
archive.pipe(outputWS);
|
||||||
|
archive.finalize();
|
||||||
|
|
||||||
|
outputWS.on("close", function() {
|
||||||
|
res.download(`${outputDir}/${req.params.type}.pkpass`, `${req.params.type}.pkpass`, {
|
||||||
|
cacheControl: false,
|
||||||
|
headers: {
|
||||||
|
"Content-type": "application/vnd.apple.pkpass",
|
||||||
|
"Content-length": fs.statSync(`${outputDir}/${req.params.type}.pkpass`).size
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch(function(buffer) {
|
||||||
|
throw buffer.toString();
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch(function(error) {
|
||||||
|
throw error;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
instance.on("error", function() {
|
instance.on("error", function() {
|
||||||
console.log("got error");
|
console.log("got error");
|
||||||
})
|
});
|
||||||
|
|||||||
375
package-lock.json
generated
375
package-lock.json
generated
@@ -9,37 +9,136 @@
|
|||||||
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
|
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
|
||||||
"integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
|
"integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
|
||||||
"requires": {
|
"requires": {
|
||||||
"mime-types": "2.1.18",
|
"mime-types": "~2.1.18",
|
||||||
"negotiator": "0.6.1"
|
"negotiator": "0.6.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"archiver": {
|
||||||
|
"version": "2.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/archiver/-/archiver-2.1.1.tgz",
|
||||||
|
"integrity": "sha1-/2YrSnggFJSj7lRNOjP+dJZQnrw=",
|
||||||
|
"requires": {
|
||||||
|
"archiver-utils": "^1.3.0",
|
||||||
|
"async": "^2.0.0",
|
||||||
|
"buffer-crc32": "^0.2.1",
|
||||||
|
"glob": "^7.0.0",
|
||||||
|
"lodash": "^4.8.0",
|
||||||
|
"readable-stream": "^2.0.0",
|
||||||
|
"tar-stream": "^1.5.0",
|
||||||
|
"zip-stream": "^1.2.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"archiver-utils": {
|
||||||
|
"version": "1.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz",
|
||||||
|
"integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=",
|
||||||
|
"requires": {
|
||||||
|
"glob": "^7.0.0",
|
||||||
|
"graceful-fs": "^4.1.0",
|
||||||
|
"lazystream": "^1.0.0",
|
||||||
|
"lodash": "^4.8.0",
|
||||||
|
"normalize-path": "^2.0.0",
|
||||||
|
"readable-stream": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"array-flatten": {
|
"array-flatten": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
|
||||||
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
|
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
|
||||||
},
|
},
|
||||||
|
"async": {
|
||||||
|
"version": "2.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
|
||||||
|
"integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==",
|
||||||
|
"requires": {
|
||||||
|
"lodash": "^4.14.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"balanced-match": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
|
||||||
|
},
|
||||||
|
"bl": {
|
||||||
|
"version": "1.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz",
|
||||||
|
"integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==",
|
||||||
|
"requires": {
|
||||||
|
"readable-stream": "^2.3.5",
|
||||||
|
"safe-buffer": "^5.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"body-parser": {
|
"body-parser": {
|
||||||
"version": "1.18.2",
|
"version": "1.18.2",
|
||||||
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
|
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
|
||||||
"integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=",
|
"integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=",
|
||||||
"requires": {
|
"requires": {
|
||||||
"bytes": "3.0.0",
|
"bytes": "3.0.0",
|
||||||
"content-type": "1.0.4",
|
"content-type": "~1.0.4",
|
||||||
"debug": "2.6.9",
|
"debug": "2.6.9",
|
||||||
"depd": "1.1.2",
|
"depd": "~1.1.1",
|
||||||
"http-errors": "1.6.3",
|
"http-errors": "~1.6.2",
|
||||||
"iconv-lite": "0.4.19",
|
"iconv-lite": "0.4.19",
|
||||||
"on-finished": "2.3.0",
|
"on-finished": "~2.3.0",
|
||||||
"qs": "6.5.1",
|
"qs": "6.5.1",
|
||||||
"raw-body": "2.3.2",
|
"raw-body": "2.3.2",
|
||||||
"type-is": "1.6.16"
|
"type-is": "~1.6.15"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"brace-expansion": {
|
||||||
|
"version": "1.1.11",
|
||||||
|
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
|
||||||
|
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
|
||||||
|
"requires": {
|
||||||
|
"balanced-match": "^1.0.0",
|
||||||
|
"concat-map": "0.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"buffer-alloc": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.1.0.tgz",
|
||||||
|
"integrity": "sha1-BVFNM78WVtNUDGhPZbEgLpDsowM=",
|
||||||
|
"requires": {
|
||||||
|
"buffer-alloc-unsafe": "^0.1.0",
|
||||||
|
"buffer-fill": "^0.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"buffer-alloc-unsafe": {
|
||||||
|
"version": "0.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-0.1.1.tgz",
|
||||||
|
"integrity": "sha1-/+H2dVHdBVc33iUzN7/oU9+rGmo="
|
||||||
|
},
|
||||||
|
"buffer-crc32": {
|
||||||
|
"version": "0.2.13",
|
||||||
|
"resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
|
||||||
|
"integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI="
|
||||||
|
},
|
||||||
|
"buffer-fill": {
|
||||||
|
"version": "0.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-0.1.1.tgz",
|
||||||
|
"integrity": "sha512-YgBMBzdRLEfgxJIGu2wrvI2E03tMCFU1p7d1KhB4BOoMN0VxmTFjSyN5JtKt9z8Z9JajMHruI6SE25W96wNv7Q=="
|
||||||
|
},
|
||||||
"bytes": {
|
"bytes": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
|
||||||
"integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
|
"integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
|
||||||
},
|
},
|
||||||
|
"compress-commons": {
|
||||||
|
"version": "1.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz",
|
||||||
|
"integrity": "sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8=",
|
||||||
|
"requires": {
|
||||||
|
"buffer-crc32": "^0.2.1",
|
||||||
|
"crc32-stream": "^2.0.0",
|
||||||
|
"normalize-path": "^2.0.0",
|
||||||
|
"readable-stream": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"concat-map": {
|
||||||
|
"version": "0.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
||||||
|
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
|
||||||
|
},
|
||||||
"content-disposition": {
|
"content-disposition": {
|
||||||
"version": "0.5.2",
|
"version": "0.5.2",
|
||||||
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
|
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
|
||||||
@@ -60,6 +159,25 @@
|
|||||||
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
|
||||||
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
|
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
|
||||||
},
|
},
|
||||||
|
"core-util-is": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
|
||||||
|
},
|
||||||
|
"crc": {
|
||||||
|
"version": "3.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/crc/-/crc-3.5.0.tgz",
|
||||||
|
"integrity": "sha1-mLi6fUiWZbo5efWbITgTdBAaGWQ="
|
||||||
|
},
|
||||||
|
"crc32-stream": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=",
|
||||||
|
"requires": {
|
||||||
|
"crc": "^3.4.4",
|
||||||
|
"readable-stream": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"debug": {
|
"debug": {
|
||||||
"version": "2.6.9",
|
"version": "2.6.9",
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
||||||
@@ -88,6 +206,14 @@
|
|||||||
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
|
||||||
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
|
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
|
||||||
},
|
},
|
||||||
|
"end-of-stream": {
|
||||||
|
"version": "1.4.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
|
||||||
|
"integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
|
||||||
|
"requires": {
|
||||||
|
"once": "^1.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"escape-html": {
|
"escape-html": {
|
||||||
"version": "1.0.3",
|
"version": "1.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
|
||||||
@@ -103,36 +229,36 @@
|
|||||||
"resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz",
|
"resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz",
|
||||||
"integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=",
|
"integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=",
|
||||||
"requires": {
|
"requires": {
|
||||||
"accepts": "1.3.5",
|
"accepts": "~1.3.5",
|
||||||
"array-flatten": "1.1.1",
|
"array-flatten": "1.1.1",
|
||||||
"body-parser": "1.18.2",
|
"body-parser": "1.18.2",
|
||||||
"content-disposition": "0.5.2",
|
"content-disposition": "0.5.2",
|
||||||
"content-type": "1.0.4",
|
"content-type": "~1.0.4",
|
||||||
"cookie": "0.3.1",
|
"cookie": "0.3.1",
|
||||||
"cookie-signature": "1.0.6",
|
"cookie-signature": "1.0.6",
|
||||||
"debug": "2.6.9",
|
"debug": "2.6.9",
|
||||||
"depd": "1.1.2",
|
"depd": "~1.1.2",
|
||||||
"encodeurl": "1.0.2",
|
"encodeurl": "~1.0.2",
|
||||||
"escape-html": "1.0.3",
|
"escape-html": "~1.0.3",
|
||||||
"etag": "1.8.1",
|
"etag": "~1.8.1",
|
||||||
"finalhandler": "1.1.1",
|
"finalhandler": "1.1.1",
|
||||||
"fresh": "0.5.2",
|
"fresh": "0.5.2",
|
||||||
"merge-descriptors": "1.0.1",
|
"merge-descriptors": "1.0.1",
|
||||||
"methods": "1.1.2",
|
"methods": "~1.1.2",
|
||||||
"on-finished": "2.3.0",
|
"on-finished": "~2.3.0",
|
||||||
"parseurl": "1.3.2",
|
"parseurl": "~1.3.2",
|
||||||
"path-to-regexp": "0.1.7",
|
"path-to-regexp": "0.1.7",
|
||||||
"proxy-addr": "2.0.3",
|
"proxy-addr": "~2.0.3",
|
||||||
"qs": "6.5.1",
|
"qs": "6.5.1",
|
||||||
"range-parser": "1.2.0",
|
"range-parser": "~1.2.0",
|
||||||
"safe-buffer": "5.1.1",
|
"safe-buffer": "5.1.1",
|
||||||
"send": "0.16.2",
|
"send": "0.16.2",
|
||||||
"serve-static": "1.13.2",
|
"serve-static": "1.13.2",
|
||||||
"setprototypeof": "1.1.0",
|
"setprototypeof": "1.1.0",
|
||||||
"statuses": "1.4.0",
|
"statuses": "~1.4.0",
|
||||||
"type-is": "1.6.16",
|
"type-is": "~1.6.16",
|
||||||
"utils-merge": "1.0.1",
|
"utils-merge": "1.0.1",
|
||||||
"vary": "1.1.2"
|
"vary": "~1.1.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"finalhandler": {
|
"finalhandler": {
|
||||||
@@ -141,12 +267,12 @@
|
|||||||
"integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
|
"integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"debug": "2.6.9",
|
"debug": "2.6.9",
|
||||||
"encodeurl": "1.0.2",
|
"encodeurl": "~1.0.2",
|
||||||
"escape-html": "1.0.3",
|
"escape-html": "~1.0.3",
|
||||||
"on-finished": "2.3.0",
|
"on-finished": "~2.3.0",
|
||||||
"parseurl": "1.3.2",
|
"parseurl": "~1.3.2",
|
||||||
"statuses": "1.4.0",
|
"statuses": "~1.4.0",
|
||||||
"unpipe": "1.0.0"
|
"unpipe": "~1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"forwarded": {
|
"forwarded": {
|
||||||
@@ -159,15 +285,43 @@
|
|||||||
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
|
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
|
||||||
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
|
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
|
||||||
},
|
},
|
||||||
|
"fs-constants": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
|
||||||
|
},
|
||||||
|
"fs.realpath": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
|
||||||
|
},
|
||||||
|
"glob": {
|
||||||
|
"version": "7.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
|
||||||
|
"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
|
||||||
|
"requires": {
|
||||||
|
"fs.realpath": "^1.0.0",
|
||||||
|
"inflight": "^1.0.4",
|
||||||
|
"inherits": "2",
|
||||||
|
"minimatch": "^3.0.4",
|
||||||
|
"once": "^1.3.0",
|
||||||
|
"path-is-absolute": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"graceful-fs": {
|
||||||
|
"version": "4.1.11",
|
||||||
|
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
|
||||||
|
"integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
|
||||||
|
},
|
||||||
"http-errors": {
|
"http-errors": {
|
||||||
"version": "1.6.3",
|
"version": "1.6.3",
|
||||||
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
|
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
|
||||||
"integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
|
"integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
|
||||||
"requires": {
|
"requires": {
|
||||||
"depd": "1.1.2",
|
"depd": "~1.1.2",
|
||||||
"inherits": "2.0.3",
|
"inherits": "2.0.3",
|
||||||
"setprototypeof": "1.1.0",
|
"setprototypeof": "1.1.0",
|
||||||
"statuses": "1.4.0"
|
"statuses": ">= 1.4.0 < 2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"iconv-lite": {
|
"iconv-lite": {
|
||||||
@@ -175,6 +329,15 @@
|
|||||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
|
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
|
||||||
"integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="
|
"integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="
|
||||||
},
|
},
|
||||||
|
"inflight": {
|
||||||
|
"version": "1.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
|
||||||
|
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
|
||||||
|
"requires": {
|
||||||
|
"once": "^1.3.0",
|
||||||
|
"wrappy": "1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"inherits": {
|
"inherits": {
|
||||||
"version": "2.0.3",
|
"version": "2.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
|
||||||
@@ -185,6 +348,24 @@
|
|||||||
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz",
|
||||||
"integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs="
|
"integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs="
|
||||||
},
|
},
|
||||||
|
"isarray": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
|
||||||
|
},
|
||||||
|
"lazystream": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=",
|
||||||
|
"requires": {
|
||||||
|
"readable-stream": "^2.0.5"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"lodash": {
|
||||||
|
"version": "4.17.10",
|
||||||
|
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
|
||||||
|
"integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg=="
|
||||||
|
},
|
||||||
"media-typer": {
|
"media-typer": {
|
||||||
"version": "0.3.0",
|
"version": "0.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
|
||||||
@@ -215,7 +396,15 @@
|
|||||||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
|
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
|
||||||
"integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
|
"integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"mime-db": "1.33.0"
|
"mime-db": "~1.33.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"minimatch": {
|
||||||
|
"version": "3.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
|
||||||
|
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
|
||||||
|
"requires": {
|
||||||
|
"brace-expansion": "^1.1.7"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ms": {
|
"ms": {
|
||||||
@@ -228,6 +417,14 @@
|
|||||||
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
|
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
|
||||||
"integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
|
"integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
|
||||||
},
|
},
|
||||||
|
"normalize-path": {
|
||||||
|
"version": "2.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
|
||||||
|
"integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
|
||||||
|
"requires": {
|
||||||
|
"remove-trailing-separator": "^1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"on-finished": {
|
"on-finished": {
|
||||||
"version": "2.3.0",
|
"version": "2.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
|
||||||
@@ -236,22 +433,40 @@
|
|||||||
"ee-first": "1.1.1"
|
"ee-first": "1.1.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"once": {
|
||||||
|
"version": "1.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||||
|
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
||||||
|
"requires": {
|
||||||
|
"wrappy": "1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"parseurl": {
|
"parseurl": {
|
||||||
"version": "1.3.2",
|
"version": "1.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
|
||||||
"integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
|
"integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
|
||||||
},
|
},
|
||||||
|
"path-is-absolute": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
|
||||||
|
},
|
||||||
"path-to-regexp": {
|
"path-to-regexp": {
|
||||||
"version": "0.1.7",
|
"version": "0.1.7",
|
||||||
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
|
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
|
||||||
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
|
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
|
||||||
},
|
},
|
||||||
|
"process-nextick-args": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
|
||||||
|
},
|
||||||
"proxy-addr": {
|
"proxy-addr": {
|
||||||
"version": "2.0.3",
|
"version": "2.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz",
|
||||||
"integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==",
|
"integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"forwarded": "0.1.2",
|
"forwarded": "~0.1.2",
|
||||||
"ipaddr.js": "1.6.0"
|
"ipaddr.js": "1.6.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -289,7 +504,7 @@
|
|||||||
"depd": "1.1.1",
|
"depd": "1.1.1",
|
||||||
"inherits": "2.0.3",
|
"inherits": "2.0.3",
|
||||||
"setprototypeof": "1.0.3",
|
"setprototypeof": "1.0.3",
|
||||||
"statuses": "1.4.0"
|
"statuses": ">= 1.3.1 < 2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"setprototypeof": {
|
"setprototypeof": {
|
||||||
@@ -299,6 +514,25 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"readable-stream": {
|
||||||
|
"version": "2.3.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
|
||||||
|
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
|
||||||
|
"requires": {
|
||||||
|
"core-util-is": "~1.0.0",
|
||||||
|
"inherits": "~2.0.3",
|
||||||
|
"isarray": "~1.0.0",
|
||||||
|
"process-nextick-args": "~2.0.0",
|
||||||
|
"safe-buffer": "~5.1.1",
|
||||||
|
"string_decoder": "~1.1.1",
|
||||||
|
"util-deprecate": "~1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"remove-trailing-separator": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
|
||||||
|
"integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8="
|
||||||
|
},
|
||||||
"safe-buffer": {
|
"safe-buffer": {
|
||||||
"version": "5.1.1",
|
"version": "5.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
|
||||||
@@ -310,18 +544,18 @@
|
|||||||
"integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
|
"integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"debug": "2.6.9",
|
"debug": "2.6.9",
|
||||||
"depd": "1.1.2",
|
"depd": "~1.1.2",
|
||||||
"destroy": "1.0.4",
|
"destroy": "~1.0.4",
|
||||||
"encodeurl": "1.0.2",
|
"encodeurl": "~1.0.2",
|
||||||
"escape-html": "1.0.3",
|
"escape-html": "~1.0.3",
|
||||||
"etag": "1.8.1",
|
"etag": "~1.8.1",
|
||||||
"fresh": "0.5.2",
|
"fresh": "0.5.2",
|
||||||
"http-errors": "1.6.3",
|
"http-errors": "~1.6.2",
|
||||||
"mime": "1.4.1",
|
"mime": "1.4.1",
|
||||||
"ms": "2.0.0",
|
"ms": "2.0.0",
|
||||||
"on-finished": "2.3.0",
|
"on-finished": "~2.3.0",
|
||||||
"range-parser": "1.2.0",
|
"range-parser": "~1.2.0",
|
||||||
"statuses": "1.4.0"
|
"statuses": "~1.4.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"serve-static": {
|
"serve-static": {
|
||||||
@@ -329,9 +563,9 @@
|
|||||||
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
|
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
|
||||||
"integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
|
"integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"encodeurl": "1.0.2",
|
"encodeurl": "~1.0.2",
|
||||||
"escape-html": "1.0.3",
|
"escape-html": "~1.0.3",
|
||||||
"parseurl": "1.3.2",
|
"parseurl": "~1.3.2",
|
||||||
"send": "0.16.2"
|
"send": "0.16.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -345,13 +579,40 @@
|
|||||||
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
|
||||||
"integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
|
"integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
|
||||||
},
|
},
|
||||||
|
"string_decoder": {
|
||||||
|
"version": "1.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
|
||||||
|
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
|
||||||
|
"requires": {
|
||||||
|
"safe-buffer": "~5.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tar-stream": {
|
||||||
|
"version": "1.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.0.tgz",
|
||||||
|
"integrity": "sha512-lh2iAPG/BHNmN6WB9Ybdynk9rEJ5GD/dy4zscHmVlwa1dq2tpE+BH78i5vjYwYVWEaOXGBjzxr89aVACF17Cpw==",
|
||||||
|
"requires": {
|
||||||
|
"bl": "^1.0.0",
|
||||||
|
"buffer-alloc": "^1.1.0",
|
||||||
|
"end-of-stream": "^1.0.0",
|
||||||
|
"fs-constants": "^1.0.0",
|
||||||
|
"readable-stream": "^2.0.0",
|
||||||
|
"to-buffer": "^1.1.0",
|
||||||
|
"xtend": "^4.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"to-buffer": {
|
||||||
|
"version": "1.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
|
||||||
|
"integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg=="
|
||||||
|
},
|
||||||
"type-is": {
|
"type-is": {
|
||||||
"version": "1.6.16",
|
"version": "1.6.16",
|
||||||
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
|
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
|
||||||
"integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
|
"integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"media-typer": "0.3.0",
|
"media-typer": "0.3.0",
|
||||||
"mime-types": "2.1.18"
|
"mime-types": "~2.1.18"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"unpipe": {
|
"unpipe": {
|
||||||
@@ -359,6 +620,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
|
||||||
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
|
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
|
||||||
},
|
},
|
||||||
|
"util-deprecate": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
|
||||||
|
},
|
||||||
"utils-merge": {
|
"utils-merge": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
|
||||||
@@ -368,6 +634,27 @@
|
|||||||
"version": "1.1.2",
|
"version": "1.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
|
||||||
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
|
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
|
||||||
|
},
|
||||||
|
"wrappy": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
|
||||||
|
},
|
||||||
|
"xtend": {
|
||||||
|
"version": "4.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
|
||||||
|
"integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
|
||||||
|
},
|
||||||
|
"zip-stream": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz",
|
||||||
|
"integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=",
|
||||||
|
"requires": {
|
||||||
|
"archiver-utils": "^1.3.0",
|
||||||
|
"compress-commons": "^1.2.0",
|
||||||
|
"lodash": "^4.8.0",
|
||||||
|
"readable-stream": "^2.0.0"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,8 @@
|
|||||||
"author": "Alexander Patrick Cerutti",
|
"author": "Alexander Patrick Cerutti",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"archiver": "^2.1.1",
|
||||||
|
"async": "^2.6.0",
|
||||||
"express": "^4.16.3"
|
"express": "^4.16.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user