├── .gitignore
├── README.md
├── client
├── index.html
├── package-lock.json
├── package.json
├── src
│ ├── client.js
│ ├── handlers.js
│ ├── main.js
│ └── recorder.js
└── webpack.config.js
└── server
├── config.js
├── lib
├── gstreamer.js
├── routes
│ ├── record.js
│ └── stat.js
└── utils.js
├── main.js
├── package-lock.json
└── package.json
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | server/record
4 | client/bundle.js
5 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # mediasoup-recording
2 |
3 | PoC for media recording w/ `mediasoup` and GStreamer.
4 |
5 | ## Feat
6 |
7 | - send single audio track from client
8 | - opus audio only
9 | - return consumer back for local preview
10 | - create rtpTransport and consumer on server
11 | - spawn `gst-launch-1.0` and record it into `.ogg`
12 |
13 | ## Dev
14 |
15 | You need to install GStreamer beforehand.
16 |
17 | ```sh
18 | # macOS
19 | brew install gstreamer
20 | brew install gst-plugins-base
21 | brew install gst-plugins-good
22 | brew install gst-plugins-bad
23 | ```
24 |
25 | After that, setup repos.
26 |
27 | ```sh
28 | cd server
29 | npm i
30 |
31 | # create directry for recorded files and specify it in config.js
32 |
33 | # run rest+media server on http://127.0.0.1:2345
34 | npm run dev
35 |
36 | cd client
37 | npm i
38 |
39 | # run web server on http://127.0.0.1:9000
40 | npm run dev
41 | ```
42 |
--------------------------------------------------------------------------------
/client/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Recording PoC
7 |
8 |
9 |
10 |
11 |
12 |
13 |
Recording PoC
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
Setup mic.
25 |
26 |
27 |
28 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
Record
39 |
40 |
41 |
42 |
43 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
Logs
53 |
54 |
55 |
56 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
--------------------------------------------------------------------------------
/client/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "mediasoup-recording-client",
3 | "version": "1.0.0",
4 | "description": "",
5 | "scripts": {
6 | "dev": "webpack-dev-server",
7 | "build": "webpack --mode=production"
8 | },
9 | "keywords": [],
10 | "author": "",
11 | "license": "ISC",
12 | "devDependencies": {
13 | "webpack": "^4.39.0",
14 | "webpack-cli": "^3.3.6",
15 | "webpack-dev-server": "^3.7.2"
16 | },
17 | "dependencies": {
18 | "mediasoup-client": "^3.2.0"
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/client/src/client.js:
--------------------------------------------------------------------------------
1 | import { Device } from "mediasoup-client";
2 |
3 | export default class Client {
4 | constructor(recorder) {
5 | this._recorder = recorder;
6 | this._device = null;
7 | this._sendTransport = null;
8 | this._recvTransport = null;
9 | this._producer = null;
10 | this._consumer = null;
11 | }
12 |
13 | async start(track) {
14 | console.warn("start()", track);
15 |
16 | if (this._device === null) {
17 | await this._setup();
18 | }
19 | if (this._sendTransport === null) {
20 | await this._connectSendTransport();
21 | }
22 | if (this._recvTransport === null) {
23 | await this._connectRecvTransport();
24 | }
25 |
26 | // sending
27 | this._producer = await this._sendTransport
28 | .produce({ track })
29 | .catch(console.error);
30 | console.warn(this._producer);
31 |
32 | // recving to preview
33 | const info = await this._recorder
34 | .consume({
35 | producerId: this._producer.id,
36 | transportId: this._recvTransport.id,
37 | rtpCapabilities: this._device.rtpCapabilities
38 | })
39 | .catch(console.error);
40 | this._consumer = await this._recvTransport
41 | .consume(info)
42 | .catch(console.error);
43 | console.warn(this._consumer);
44 |
45 | // start recording
46 | await this._recorder
47 | .start({ producerId: this._producer.id })
48 | .catch(console.error);
49 |
50 | return this._consumer;
51 | }
52 |
53 | async stop() {
54 | console.warn("client.stop()");
55 | this._producer.close();
56 | this._consumer.close();
57 |
58 | await this._recorder
59 | .stop({ producerId: this._producer.id })
60 | .catch(console.error);
61 |
62 | this._producer = null;
63 | this._consumer = null;
64 | }
65 |
66 | async fetchStat() {
67 | const producerId = this._producer === null ? null : this._producer.id;
68 |
69 | const stat = await this._recorder.stat({ producerId }).catch(console.error);
70 | return stat;
71 | }
72 |
73 | async _setup() {
74 | this._device = new Device();
75 |
76 | const routerRtpCapabilities = await this._recorder
77 | .getCapabilities()
78 | .catch(console.error);
79 | await this._device.load({ routerRtpCapabilities }).catch(console.error);
80 |
81 | console.warn(routerRtpCapabilities);
82 | }
83 |
84 | async _connectSendTransport() {
85 | const transportInfo = await this._recorder
86 | .createTransport()
87 | .catch(console.error);
88 |
89 | transportInfo.iceServers = [{ urls: "stun:stun.l.google.com:19302" }];
90 | this._sendTransport = this._device.createSendTransport(transportInfo);
91 | console.warn(this._sendTransport);
92 |
93 | this._sendTransport.on(
94 | "connect",
95 | async ({ dtlsParameters }, callback, errback) => {
96 | console.warn("client.sendTransport.on(connect)");
97 | try {
98 | await this._recorder.connectTransport({
99 | transportId: this._sendTransport.id,
100 | dtlsParameters
101 | });
102 | callback();
103 | } catch (err) {
104 | errback(err);
105 | }
106 | }
107 | );
108 | this._sendTransport.on(
109 | "produce",
110 | async ({ kind, rtpParameters }, callback, errback) => {
111 | console.warn("client.sendTransport.on(produce)");
112 | try {
113 | const { id } = await this._recorder.produce({
114 | transportId: this._sendTransport.id,
115 | kind,
116 | rtpParameters
117 | });
118 | callback({ id });
119 | } catch (err) {
120 | console.error(err);
121 | errback(err);
122 | }
123 | }
124 | );
125 | }
126 | async _connectRecvTransport() {
127 | const transportInfo = await this._recorder
128 | .createTransport()
129 | .catch(console.error);
130 |
131 | transportInfo.iceServers = [{ urls: "stun:stun.l.google.com:19302" }];
132 | this._recvTransport = this._device.createRecvTransport(transportInfo);
133 | console.warn(this._recvTransport);
134 |
135 | this._recvTransport.on(
136 | "connect",
137 | async ({ dtlsParameters }, callback, errback) => {
138 | console.warn("client.recvTransport.on(connect)");
139 | try {
140 | await this._recorder.connectTransport({
141 | transportId: this._recvTransport.id,
142 | dtlsParameters
143 | });
144 | callback();
145 | } catch (err) {
146 | errback(err);
147 | }
148 | }
149 | );
150 | }
151 | }
152 |
--------------------------------------------------------------------------------
/client/src/handlers.js:
--------------------------------------------------------------------------------
1 | export const onLoad = async (
2 | state,
3 | { $micMute, $micUnmute, $recStart, $recStop },
4 | { logger }
5 | ) => {
6 | logger.log("loaded");
7 |
8 | $micMute.disabled = $micUnmute.disabled = $recStart.disabled = $recStop.disabled = true;
9 | };
10 |
11 | export const onClickMicCapture = async (
12 | state,
13 | { $micCapture, $micAudio, $micMute, $micUnmute, $recStart },
14 | { logger }
15 | ) => {
16 | logger.log("capturing mic.");
17 |
18 | const stream = await navigator.mediaDevices
19 | .getUserMedia({ audio: true })
20 | .catch(err => logger.error(err.toString()));
21 |
22 | state.track = stream.getTracks()[0];
23 | $micCapture.disabled = true;
24 | $recStart.disabled = false;
25 |
26 | $micMute.disabled = state.muted;
27 | $micUnmute.disabled = !state.muted;
28 |
29 | $micAudio.srcObject = new MediaStream([state.track]);
30 |
31 | logger.log("captured!");
32 | };
33 |
34 | export const onClickMicMute = (state, { $micMute, $micUnmute }, { logger }) => {
35 | logger.log(`muted`);
36 |
37 | state.muted = true;
38 |
39 | state.track.enabled = !state.muted;
40 | $micMute.disabled = state.muted;
41 | $micUnmute.disabled = !state.muted;
42 | };
43 |
44 | export const onClickMicUnmute = (
45 | state,
46 | { $micMute, $micUnmute },
47 | { logger }
48 | ) => {
49 | logger.log(`unmuted`);
50 |
51 | state.muted = false;
52 |
53 | state.track.enabled = !state.muted;
54 | $micMute.disabled = state.muted;
55 | $micUnmute.disabled = !state.muted;
56 | };
57 |
58 | export const onClickRecStart = async (
59 | state,
60 | { $micAudio, $recStart, $recStop, $recAudio },
61 | { logger, client }
62 | ) => {
63 | logger.log("start recording");
64 |
65 | state.recording = true;
66 |
67 | $recStart.disabled = state.recording;
68 | $recStop.disabled = !state.recording;
69 |
70 | // update local track again (mediasoup-client stop() the track...)
71 | const stream = await navigator.mediaDevices
72 | .getUserMedia({ audio: true })
73 | .catch(err => logger.error(err.toString()));
74 | state.track = stream.getTracks()[0];
75 | $micAudio.srcObject = new MediaStream([state.track]);
76 |
77 | logger.log("update track again");
78 |
79 | const consumer = await client.start(state.track);
80 | $recAudio.srcObject = new MediaStream([consumer.track]);
81 |
82 | logger.log("now recording...");
83 | };
84 |
85 | export const onClickRecStop = async (
86 | state,
87 | { $recStart, $recStop, $recAudio },
88 | { logger, client }
89 | ) => {
90 | logger.log("stop recording");
91 |
92 | state.recording = false;
93 |
94 | $recStart.disabled = state.recording;
95 | $recStop.disabled = !state.recording;
96 |
97 | $recAudio.srcObject.getTracks().forEach(t => t.stop());
98 | $recAudio.srcObject = null;
99 |
100 | await client.stop();
101 |
102 | logger.log("stopped");
103 | };
104 |
105 | export const onClickStatFetch = async (_, __, { logger, client }) => {
106 | const res = await client
107 | .fetchStat()
108 | .catch(err => logger.error(err.toString()));
109 | logger.log(JSON.stringify(res, null, 2));
110 | };
111 |
--------------------------------------------------------------------------------
/client/src/main.js:
--------------------------------------------------------------------------------
1 | import Recorder from "./recorder";
2 | import Client from "./client";
3 | import {
4 | onLoad,
5 | onClickMicCapture,
6 | onClickMicMute,
7 | onClickMicUnmute,
8 | onClickRecStart,
9 | onClickRecStop,
10 | onClickStatFetch
11 | } from "./handlers";
12 |
13 | (async () => {
14 | const state = {
15 | track: null, // MediaStreamTrack to record
16 | muted: false, // track is enabled or NOT
17 | recording: false // recording or NOT
18 | };
19 |
20 | const els = {
21 | $micCapture: document.getElementById("mic-capture"),
22 | $micAudio: document.getElementById("mic-audio"),
23 | $micMute: document.getElementById("mic-mute"),
24 | $micUnmute: document.getElementById("mic-unmute"),
25 | $recStart: document.getElementById("rec-start"),
26 | $recStop: document.getElementById("rec-stop"),
27 | $recAudio: document.getElementById("rec-audio"),
28 | $statFetch: document.getElementById("stat-fetch"),
29 | $evLogs: document.getElementById("ev-logs")
30 | };
31 |
32 | const logger = {
33 | log(data) {
34 | console.log(data);
35 | const time = new Date().toLocaleTimeString();
36 | els.$evLogs.textContent += `${time}: ${data}\n`;
37 | },
38 | error(err) {
39 | console.error(err);
40 | }
41 | };
42 | const recorder = new Recorder("http://localhost:2345");
43 | const client = new Client(recorder);
44 |
45 | const context = {
46 | logger,
47 | client
48 | };
49 |
50 | // attach handlers
51 | els.$micCapture.onclick = () => onClickMicCapture(state, els, context);
52 | els.$micMute.onclick = () => onClickMicMute(state, els, context);
53 | els.$micUnmute.onclick = () => onClickMicUnmute(state, els, context);
54 | els.$recStart.onclick = () => onClickRecStart(state, els, context);
55 | els.$recStop.onclick = () => onClickRecStop(state, els, context);
56 | els.$statFetch.onclick = () => onClickStatFetch(state, els, context);
57 |
58 | console.warn(state, context);
59 | onLoad(state, els, context);
60 | })();
61 |
--------------------------------------------------------------------------------
/client/src/recorder.js:
--------------------------------------------------------------------------------
1 | export default class Record {
2 | constructor(serverUrl) {
3 | this._url = serverUrl;
4 | }
5 |
6 | async getCapabilities() {
7 | console.warn("recorder.getCapabilities()");
8 | const routerRtpCapabilities = await this._fetch("/record/capabilities", {
9 | method: "GET"
10 | });
11 | return routerRtpCapabilities;
12 | }
13 |
14 | async createTransport() {
15 | console.warn("recorder.createTransport()");
16 | const transportInfo = await this._fetch("/record/transport/create", {
17 | method: "POST"
18 | });
19 | return transportInfo;
20 | }
21 |
22 | async connectTransport(body) {
23 | console.warn("recorder.connectTransport()", body);
24 | await this._fetch("/record/transport/connect", {
25 | method: "POST",
26 | body
27 | });
28 | return null;
29 | }
30 |
31 | async produce(body) {
32 | console.warn("recorder.produce()", body);
33 | const res = await this._fetch("/record/produce", {
34 | method: "POST",
35 | body
36 | });
37 | return res;
38 | }
39 |
40 | async consume(body) {
41 | console.warn("recorder.consume()", body);
42 | const res = await this._fetch("/record/consume", {
43 | method: "POST",
44 | body
45 | });
46 | return res;
47 | }
48 |
49 | async start(body) {
50 | console.warn("recorder.start()", body);
51 | await this._fetch("/record/start", {
52 | method: "POST",
53 | body
54 | });
55 | return null;
56 | }
57 |
58 | async stop(body) {
59 | console.warn("recorder.stop()", body);
60 | await this._fetch("/record/stop", {
61 | method: "POST",
62 | body
63 | });
64 | return null;
65 | }
66 |
67 | async stat(body) {
68 | console.warn("recorder.stat()", body);
69 | const res = await this._fetch("/stat", {
70 | method: "POST",
71 | body
72 | });
73 | return res;
74 | }
75 |
76 | async _fetch(url, options) {
77 | if ("body" in options) {
78 | options.body = JSON.stringify(options.body);
79 | }
80 |
81 | const res = await fetch(`${this._url}${url}`, options);
82 | const json = await res.json();
83 |
84 | if (json.error) {
85 | throw new Error(`${json.error}: ${json.message}`);
86 | }
87 |
88 | return json;
89 | }
90 | }
91 |
--------------------------------------------------------------------------------
/client/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require("path");
2 | const rootPath = path.resolve(".");
3 |
4 | const config = {
5 | mode: "development",
6 | devtool: false,
7 | context: rootPath,
8 | entry: {
9 | app: "./src/main.js"
10 | },
11 | output: {
12 | path: `${rootPath}/`,
13 | filename: "bundle.js"
14 | },
15 | devServer: {
16 | contentBase: `${rootPath}/`,
17 | watchContentBase: true,
18 | host: "0.0.0.0",
19 | port: 9000,
20 | inline: false
21 | }
22 | };
23 |
24 | module.exports = config;
25 |
--------------------------------------------------------------------------------
/server/config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | serverIp: "127.0.0.1",
3 | serverPort: 2345,
4 | rtcMinPort: 3001,
5 | rtcMaxPort: 4000,
6 | recMinPort: 4001,
7 | recMaxPort: 5000,
8 | recordDir: "./record",
9 | mediaCodecs: [
10 | {
11 | kind: "audio",
12 | name: "opus",
13 | mimeType: "audio/opus",
14 | clockRate: 48000,
15 | channels: 2
16 | }
17 | ]
18 | };
19 |
--------------------------------------------------------------------------------
/server/lib/gstreamer.js:
--------------------------------------------------------------------------------
1 | const { exec } = require("child_process");
2 |
3 | module.exports = (port, codec, dest) => {
4 | const clockRate = codec.clockRate;
5 | const pt = codec.preferredPayloadType;
6 |
7 | const cmd = "gst-launch-1.0";
8 | const opts = [
9 | `rtpbin name=rtpbin udpsrc port=${port} caps="application/x-rtp,media=audio,clock-rate=${clockRate},encoding-name=OPUS,payload=${pt}"`,
10 | "rtpbin.recv_rtp_sink_0 rtpbin.",
11 | "rtpopusdepay",
12 | // debug: echo back
13 | // "opusdec",
14 | // "autoaudiosink"
15 | "opusparse",
16 | "oggmux",
17 | `filesink location=${dest}`
18 | ].join(" ! ");
19 |
20 | console.log(`record rtp:${port} => ${dest}`);
21 | console.log(cmd, opts);
22 |
23 | return exec(`${cmd} ${opts}`);
24 | };
25 |
--------------------------------------------------------------------------------
/server/lib/routes/record.js:
--------------------------------------------------------------------------------
1 | const spawnGStreamer = require("../gstreamer");
2 | const { pickNumberFromRange } = require("../utils");
3 |
4 | module.exports = async (fastify, options, done) => {
5 | const { serverIp, recMinPort, recMaxPort, recordDir } = fastify.$config;
6 | const { router, transports, producerItems } = fastify.$state;
7 |
8 | fastify.get("/record/capabilities", async () => {
9 | return router.rtpCapabilities;
10 | });
11 |
12 | fastify.post("/record/transport/create", async () => {
13 | const transport = await router
14 | .createWebRtcTransport({
15 | listenIps: [{ ip: serverIp }]
16 | })
17 | .catch(console.error);
18 |
19 | // client close browser
20 | transport.on("dtlsstatechange", state => {
21 | if (state !== "closed") return;
22 | transport.close();
23 | transports.delete(transport.id, transport);
24 | });
25 |
26 | transports.set(transport.id, transport);
27 | console.log(`transport created with id ${transport.id}`);
28 |
29 | return {
30 | id: transport.id,
31 | iceParameters: transport.iceParameters,
32 | iceCandidates: transport.iceCandidates,
33 | dtlsParameters: transport.dtlsParameters
34 | };
35 | });
36 |
37 | fastify.post("/record/transport/connect", async req => {
38 | const { transportId, dtlsParameters } = JSON.parse(req.body);
39 |
40 | const transport = transports.get(transportId);
41 | if (!transport)
42 | throw new Error(`transport with id "${transportId}" not found`);
43 |
44 | await transport.connect({ dtlsParameters }).catch(console.error);
45 | console.log(`transport with id ${transport.id} connected`);
46 |
47 | return {};
48 | });
49 |
50 | fastify.post("/record/produce", async req => {
51 | const { transportId, kind, rtpParameters } = JSON.parse(req.body);
52 |
53 | const transport = transports.get(transportId);
54 | if (!transport)
55 | throw new Error(`transport with id "${transportId}" not found`);
56 |
57 | const producer = await transport
58 | .produce({
59 | kind,
60 | rtpParameters
61 | })
62 | .catch(console.error);
63 |
64 | const producerId = producer.id;
65 |
66 | // client close browser => transportclose => close producerItem
67 | producer.once("transportclose", () => {
68 | // XXX: same as /record/stop handler...
69 | const producerItem = producerItems.get(producerId);
70 | if (!producerItem) return;
71 |
72 | const {
73 | producer,
74 | consumer,
75 | rtpTransport,
76 | rtpConsumer,
77 | recordProcess
78 | } = producerItem;
79 | producer.close();
80 | console.log(`producer closed with id ${producerId}`);
81 | consumer.close();
82 | console.log(`consumer closed with id ${consumer.id}`);
83 | rtpTransport.close();
84 | console.log("rtpTransport closed on", rtpTransport.tuple);
85 | rtpConsumer.close();
86 | console.log(`rtpConsumer closed with id ${rtpConsumer.id}`);
87 | // gst-launch needs SIGINT
88 | recordProcess.kill("SIGINT");
89 | console.log(`process killed with pid ${recordProcess.pid}`);
90 |
91 | producerItems.delete(producerId);
92 | });
93 |
94 | console.log(`producer created with id ${producer.id}`);
95 |
96 | producerItems.set(producerId, {
97 | producer,
98 | consumer: null,
99 | rtpTransport: null,
100 | rtpConsumer: null,
101 | recordProcess: null
102 | });
103 |
104 | return { id: producerId };
105 | });
106 |
107 | fastify.post("/record/consume", async req => {
108 | const { producerId, transportId, rtpCapabilities } = JSON.parse(req.body);
109 |
110 | const transport = transports.get(transportId);
111 | if (!transport)
112 | throw new Error(`transport with id "${transportId}" not found`);
113 |
114 | const consumer = await transport.consume({
115 | producerId,
116 | rtpCapabilities: rtpCapabilities
117 | });
118 | console.log(`consumer created with id ${consumer.id}`);
119 |
120 | const producerItem = producerItems.get(producerId);
121 | if (!producerItem)
122 | throw new Error(`producerItem with id "${producerId}" not found`);
123 |
124 | producerItem.consumer = consumer;
125 |
126 | return {
127 | id: consumer.id,
128 | producerId,
129 | kind: consumer.kind,
130 | rtpParameters: consumer.rtpParameters
131 | };
132 | });
133 |
134 | fastify.post("/record/start", async req => {
135 | const { producerId } = JSON.parse(req.body);
136 |
137 | const producerItem = producerItems.get(producerId);
138 | if (!producerItem)
139 | throw new Error(`producerItem with id "${producerId}" not found`);
140 |
141 | const rtpTransport = await router
142 | .createPlainRtpTransport({ listenIp: serverIp })
143 | .catch(console.error);
144 |
145 | const remotePort = pickNumberFromRange(recMinPort, recMaxPort);
146 | await rtpTransport
147 | .connect({ ip: serverIp, port: remotePort })
148 | .catch(console.error);
149 |
150 | console.log("rtpTransport created on", rtpTransport.tuple);
151 |
152 | const rtpConsumer = await rtpTransport
153 | .consume({
154 | producerId,
155 | rtpCapabilities: router.rtpCapabilities
156 | })
157 | .catch(console.error);
158 |
159 | console.log(`rtpConsumer created with id ${rtpConsumer.id}`);
160 |
161 | const ps = spawnGStreamer(
162 | rtpTransport.tuple.remotePort,
163 | router.rtpCapabilities.codecs[0],
164 | `${recordDir}/${producerId}.ogg`
165 | );
166 | console.log("recording process spawned with pid", ps.pid);
167 |
168 | ps.on("exit", (code, signal) => {
169 | console.log(`process exited with code: ${code}, signal: ${signal}`);
170 | });
171 |
172 | producerItem.rtpTransport = rtpTransport;
173 | producerItem.rtpConsumer = rtpConsumer;
174 | producerItem.recordProcess = ps;
175 |
176 | return {};
177 | });
178 |
179 | fastify.post("/record/stop", async req => {
180 | const { producerId } = JSON.parse(req.body);
181 |
182 | const producerItem = producerItems.get(producerId);
183 | if (!producerItem)
184 | throw new Error(`producerItem with id "${producerId}" not found`);
185 |
186 | const {
187 | producer,
188 | consumer,
189 | rtpTransport,
190 | rtpConsumer,
191 | recordProcess
192 | } = producerItem;
193 | producer.close();
194 | console.log(`producer closed with id ${producerId}`);
195 | consumer.close();
196 | console.log(`consumer closed with id ${consumer.id}`);
197 | rtpTransport.close();
198 | console.log("rtpTransport closed on", rtpTransport.tuple);
199 | rtpConsumer.close();
200 | console.log(`rtpConsumer closed with id ${rtpConsumer.id}`);
201 | // gst-launch needs SIGINT
202 | recordProcess.kill("SIGINT");
203 | console.log(`process killed with pid ${recordProcess.pid}`);
204 |
205 | producerItems.delete(producerId);
206 |
207 | return {};
208 | });
209 |
210 | done();
211 | };
212 |
--------------------------------------------------------------------------------
/server/lib/routes/stat.js:
--------------------------------------------------------------------------------
1 | module.exports = async (fastify, options, done) => {
2 | const { producerItems } = fastify.$state;
3 |
4 | fastify.post("/stat", async req => {
5 | const { producerId } = JSON.parse(req.body);
6 |
7 | const res = {
8 | server: {
9 | nowProducingItems: producerItems.size
10 | },
11 | yours: {}
12 | };
13 |
14 | const producerItem = producerItems.get(producerId);
15 | if (!producerItem) return res;
16 |
17 | const {
18 | producer,
19 | consumer,
20 | rtpTransport,
21 | rtpConsumer,
22 | recordProcess
23 | } = producerItem;
24 |
25 | return Object.assign(res, {
26 | yours: {
27 | producerId: producer.id,
28 | consumerId: consumer.id,
29 | rtpTransportId: rtpTransport.id,
30 | rtpConsumerId: rtpConsumer.id,
31 | recordProcessId: recordProcess.pid
32 | }
33 | });
34 | });
35 |
36 | done();
37 | };
38 |
--------------------------------------------------------------------------------
/server/lib/utils.js:
--------------------------------------------------------------------------------
1 | exports.pickNumberFromRange = (min, max) =>
2 | Math.floor(Math.random() * (max - min)) + 1 + min;
3 |
--------------------------------------------------------------------------------
/server/main.js:
--------------------------------------------------------------------------------
1 | const fs = require("fs");
2 | const createFastify = require("fastify");
3 | const mediasoup = require("mediasoup");
4 | const formBody = require("fastify-formbody");
5 | const cors = require("fastify-cors");
6 | const config = require("./config");
7 | const statRoute = require("./lib/routes/stat");
8 | const recordRoute = require("./lib/routes/record");
9 |
10 | (async () => {
11 | // ensure directory exists
12 | fs.accessSync(config.recordDir);
13 |
14 | // TODO: use multiple worker and balance
15 | const worker = await mediasoup.createWorker({
16 | rtcMinPort: config.rtcMinPort,
17 | rtcMaxPort: config.rtcMaxPort
18 | });
19 | worker.once("died", () => {
20 | console.log("mediasoup Worker died, exit..");
21 | process.exit(1);
22 | });
23 |
24 | const router = await worker.createRouter({
25 | mediaCodecs: config.mediaCodecs
26 | });
27 |
28 | const fastify = createFastify();
29 |
30 | fastify.register(cors);
31 | fastify.register(formBody);
32 |
33 | fastify.decorate("$config", config);
34 | fastify.decorate("$state", {
35 | router,
36 | // Map
37 | transports: new Map(),
38 | // Map
39 | producerItems: new Map()
40 | });
41 |
42 | fastify.register(recordRoute);
43 | fastify.register(statRoute);
44 |
45 | fastify.listen(config.serverPort, config.serverIp, (err, address) => {
46 | if (err) {
47 | console.log("server creation failed, exit..");
48 | process.exit(1);
49 | }
50 |
51 | console.log(`server listening on ${address}`);
52 | });
53 | })();
54 |
--------------------------------------------------------------------------------
/server/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "mediasoup-recording-server",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "abbrev": {
8 | "version": "1.1.1",
9 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
10 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
11 | "dev": true
12 | },
13 | "abstract-logging": {
14 | "version": "2.0.0",
15 | "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.0.tgz",
16 | "integrity": "sha512-/oA9z7JszpIioo6J6dB79LVUgJ3eD3cxkAmdCkvWWS+Y9tPtALs1rLqOekLUXUbYqM2fB9TTK0ibAyZJJOP/CA=="
17 | },
18 | "ajv": {
19 | "version": "6.10.2",
20 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
21 | "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
22 | "requires": {
23 | "fast-deep-equal": "^2.0.1",
24 | "fast-json-stable-stringify": "^2.0.0",
25 | "json-schema-traverse": "^0.4.1",
26 | "uri-js": "^4.2.2"
27 | }
28 | },
29 | "ansi-align": {
30 | "version": "2.0.0",
31 | "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz",
32 | "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=",
33 | "dev": true,
34 | "requires": {
35 | "string-width": "^2.0.0"
36 | },
37 | "dependencies": {
38 | "ansi-regex": {
39 | "version": "3.0.0",
40 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
41 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
42 | "dev": true
43 | },
44 | "string-width": {
45 | "version": "2.1.1",
46 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
47 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
48 | "dev": true,
49 | "requires": {
50 | "is-fullwidth-code-point": "^2.0.0",
51 | "strip-ansi": "^4.0.0"
52 | }
53 | },
54 | "strip-ansi": {
55 | "version": "4.0.0",
56 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
57 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
58 | "dev": true,
59 | "requires": {
60 | "ansi-regex": "^3.0.0"
61 | }
62 | }
63 | }
64 | },
65 | "ansi-styles": {
66 | "version": "3.2.1",
67 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
68 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
69 | "dev": true,
70 | "requires": {
71 | "color-convert": "^1.9.0"
72 | }
73 | },
74 | "anymatch": {
75 | "version": "2.0.0",
76 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
77 | "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
78 | "dev": true,
79 | "requires": {
80 | "micromatch": "^3.1.4",
81 | "normalize-path": "^2.1.1"
82 | },
83 | "dependencies": {
84 | "normalize-path": {
85 | "version": "2.1.1",
86 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
87 | "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
88 | "dev": true,
89 | "requires": {
90 | "remove-trailing-separator": "^1.0.1"
91 | }
92 | }
93 | }
94 | },
95 | "archy": {
96 | "version": "1.0.0",
97 | "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
98 | "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA="
99 | },
100 | "arr-diff": {
101 | "version": "4.0.0",
102 | "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
103 | "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
104 | "dev": true
105 | },
106 | "arr-flatten": {
107 | "version": "1.1.0",
108 | "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
109 | "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
110 | "dev": true
111 | },
112 | "arr-union": {
113 | "version": "3.1.0",
114 | "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
115 | "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
116 | "dev": true
117 | },
118 | "array-find-index": {
119 | "version": "1.0.2",
120 | "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
121 | "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
122 | "optional": true
123 | },
124 | "array-unique": {
125 | "version": "0.3.2",
126 | "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
127 | "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
128 | "dev": true
129 | },
130 | "asn1": {
131 | "version": "0.2.4",
132 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
133 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
134 | "optional": true,
135 | "requires": {
136 | "safer-buffer": "~2.1.0"
137 | }
138 | },
139 | "assert-plus": {
140 | "version": "1.0.0",
141 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
142 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
143 | "optional": true
144 | },
145 | "assign-symbols": {
146 | "version": "1.0.0",
147 | "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
148 | "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
149 | "dev": true
150 | },
151 | "async-each": {
152 | "version": "1.0.3",
153 | "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
154 | "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
155 | "dev": true
156 | },
157 | "asynckit": {
158 | "version": "0.4.0",
159 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
160 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
161 | "optional": true
162 | },
163 | "atob": {
164 | "version": "2.1.2",
165 | "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
166 | "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
167 | "dev": true
168 | },
169 | "atomic-sleep": {
170 | "version": "1.0.0",
171 | "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
172 | "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ=="
173 | },
174 | "avvio": {
175 | "version": "6.5.0",
176 | "resolved": "https://registry.npmjs.org/avvio/-/avvio-6.5.0.tgz",
177 | "integrity": "sha512-BmzcZ7gFpyFJsW8G+tfQw8vJNUboA9SDkkHLZ9RAALhvw/rplfWwni8Ee1rA11zj/J7/E5EvZmweusVvTHjWCA==",
178 | "requires": {
179 | "archy": "^1.0.0",
180 | "debug": "^4.0.0",
181 | "fastq": "^1.6.0"
182 | },
183 | "dependencies": {
184 | "debug": {
185 | "version": "4.1.1",
186 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
187 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
188 | "requires": {
189 | "ms": "^2.1.1"
190 | }
191 | },
192 | "ms": {
193 | "version": "2.1.2",
194 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
195 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
196 | }
197 | }
198 | },
199 | "aws-sign2": {
200 | "version": "0.7.0",
201 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
202 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
203 | "optional": true
204 | },
205 | "aws4": {
206 | "version": "1.8.0",
207 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
208 | "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
209 | "optional": true
210 | },
211 | "balanced-match": {
212 | "version": "1.0.0",
213 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
214 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
215 | "dev": true
216 | },
217 | "base": {
218 | "version": "0.11.2",
219 | "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
220 | "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
221 | "dev": true,
222 | "requires": {
223 | "cache-base": "^1.0.1",
224 | "class-utils": "^0.3.5",
225 | "component-emitter": "^1.2.1",
226 | "define-property": "^1.0.0",
227 | "isobject": "^3.0.1",
228 | "mixin-deep": "^1.2.0",
229 | "pascalcase": "^0.1.1"
230 | },
231 | "dependencies": {
232 | "define-property": {
233 | "version": "1.0.0",
234 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
235 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
236 | "dev": true,
237 | "requires": {
238 | "is-descriptor": "^1.0.0"
239 | }
240 | },
241 | "is-accessor-descriptor": {
242 | "version": "1.0.0",
243 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
244 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
245 | "dev": true,
246 | "requires": {
247 | "kind-of": "^6.0.0"
248 | }
249 | },
250 | "is-data-descriptor": {
251 | "version": "1.0.0",
252 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
253 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
254 | "dev": true,
255 | "requires": {
256 | "kind-of": "^6.0.0"
257 | }
258 | },
259 | "is-descriptor": {
260 | "version": "1.0.2",
261 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
262 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
263 | "dev": true,
264 | "requires": {
265 | "is-accessor-descriptor": "^1.0.0",
266 | "is-data-descriptor": "^1.0.0",
267 | "kind-of": "^6.0.2"
268 | }
269 | }
270 | }
271 | },
272 | "bcrypt-pbkdf": {
273 | "version": "1.0.2",
274 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
275 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
276 | "optional": true,
277 | "requires": {
278 | "tweetnacl": "^0.14.3"
279 | }
280 | },
281 | "binary-extensions": {
282 | "version": "1.13.1",
283 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
284 | "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
285 | "dev": true
286 | },
287 | "boxen": {
288 | "version": "1.3.0",
289 | "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz",
290 | "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==",
291 | "dev": true,
292 | "requires": {
293 | "ansi-align": "^2.0.0",
294 | "camelcase": "^4.0.0",
295 | "chalk": "^2.0.1",
296 | "cli-boxes": "^1.0.0",
297 | "string-width": "^2.0.0",
298 | "term-size": "^1.2.0",
299 | "widest-line": "^2.0.0"
300 | },
301 | "dependencies": {
302 | "ansi-regex": {
303 | "version": "3.0.0",
304 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
305 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
306 | "dev": true
307 | },
308 | "camelcase": {
309 | "version": "4.1.0",
310 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
311 | "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
312 | "dev": true
313 | },
314 | "string-width": {
315 | "version": "2.1.1",
316 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
317 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
318 | "dev": true,
319 | "requires": {
320 | "is-fullwidth-code-point": "^2.0.0",
321 | "strip-ansi": "^4.0.0"
322 | }
323 | },
324 | "strip-ansi": {
325 | "version": "4.0.0",
326 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
327 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
328 | "dev": true,
329 | "requires": {
330 | "ansi-regex": "^3.0.0"
331 | }
332 | }
333 | }
334 | },
335 | "brace-expansion": {
336 | "version": "1.1.11",
337 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
338 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
339 | "dev": true,
340 | "requires": {
341 | "balanced-match": "^1.0.0",
342 | "concat-map": "0.0.1"
343 | }
344 | },
345 | "braces": {
346 | "version": "2.3.2",
347 | "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
348 | "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
349 | "dev": true,
350 | "requires": {
351 | "arr-flatten": "^1.1.0",
352 | "array-unique": "^0.3.2",
353 | "extend-shallow": "^2.0.1",
354 | "fill-range": "^4.0.0",
355 | "isobject": "^3.0.1",
356 | "repeat-element": "^1.1.2",
357 | "snapdragon": "^0.8.1",
358 | "snapdragon-node": "^2.0.1",
359 | "split-string": "^3.0.2",
360 | "to-regex": "^3.0.1"
361 | },
362 | "dependencies": {
363 | "extend-shallow": {
364 | "version": "2.0.1",
365 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
366 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
367 | "dev": true,
368 | "requires": {
369 | "is-extendable": "^0.1.0"
370 | }
371 | }
372 | }
373 | },
374 | "cache-base": {
375 | "version": "1.0.1",
376 | "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
377 | "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
378 | "dev": true,
379 | "requires": {
380 | "collection-visit": "^1.0.0",
381 | "component-emitter": "^1.2.1",
382 | "get-value": "^2.0.6",
383 | "has-value": "^1.0.0",
384 | "isobject": "^3.0.1",
385 | "set-value": "^2.0.0",
386 | "to-object-path": "^0.3.0",
387 | "union-value": "^1.0.0",
388 | "unset-value": "^1.0.0"
389 | }
390 | },
391 | "camelcase-keys": {
392 | "version": "2.1.0",
393 | "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
394 | "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
395 | "optional": true,
396 | "requires": {
397 | "camelcase": "^2.0.0",
398 | "map-obj": "^1.0.0"
399 | },
400 | "dependencies": {
401 | "camelcase": {
402 | "version": "2.1.1",
403 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
404 | "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
405 | "optional": true
406 | }
407 | }
408 | },
409 | "capture-stack-trace": {
410 | "version": "1.0.1",
411 | "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz",
412 | "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==",
413 | "dev": true
414 | },
415 | "caseless": {
416 | "version": "0.12.0",
417 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
418 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
419 | "optional": true
420 | },
421 | "chalk": {
422 | "version": "2.4.2",
423 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
424 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
425 | "dev": true,
426 | "requires": {
427 | "ansi-styles": "^3.2.1",
428 | "escape-string-regexp": "^1.0.5",
429 | "supports-color": "^5.3.0"
430 | },
431 | "dependencies": {
432 | "supports-color": {
433 | "version": "5.5.0",
434 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
435 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
436 | "dev": true,
437 | "requires": {
438 | "has-flag": "^3.0.0"
439 | }
440 | }
441 | }
442 | },
443 | "chokidar": {
444 | "version": "2.1.6",
445 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz",
446 | "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==",
447 | "dev": true,
448 | "requires": {
449 | "anymatch": "^2.0.0",
450 | "async-each": "^1.0.1",
451 | "braces": "^2.3.2",
452 | "fsevents": "^1.2.7",
453 | "glob-parent": "^3.1.0",
454 | "inherits": "^2.0.3",
455 | "is-binary-path": "^1.0.0",
456 | "is-glob": "^4.0.0",
457 | "normalize-path": "^3.0.0",
458 | "path-is-absolute": "^1.0.0",
459 | "readdirp": "^2.2.1",
460 | "upath": "^1.1.1"
461 | }
462 | },
463 | "ci-info": {
464 | "version": "1.6.0",
465 | "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz",
466 | "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==",
467 | "dev": true
468 | },
469 | "clang-tools-prebuilt": {
470 | "version": "0.1.4",
471 | "resolved": "https://registry.npmjs.org/clang-tools-prebuilt/-/clang-tools-prebuilt-0.1.4.tgz",
472 | "integrity": "sha1-8gINNlN2CMDPrQeuvglNmXMFkLM=",
473 | "optional": true,
474 | "requires": {
475 | "home-path": "^0.1.1",
476 | "mkdirp": "^0.5.0",
477 | "nugget": "^1.5.1",
478 | "path-exists": "^1.0.0"
479 | },
480 | "dependencies": {
481 | "path-exists": {
482 | "version": "1.0.0",
483 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-1.0.0.tgz",
484 | "integrity": "sha1-1aiZjrce83p0w06w2eum6HjuoIE=",
485 | "optional": true
486 | }
487 | }
488 | },
489 | "class-utils": {
490 | "version": "0.3.6",
491 | "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
492 | "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
493 | "dev": true,
494 | "requires": {
495 | "arr-union": "^3.1.0",
496 | "define-property": "^0.2.5",
497 | "isobject": "^3.0.0",
498 | "static-extend": "^0.1.1"
499 | },
500 | "dependencies": {
501 | "define-property": {
502 | "version": "0.2.5",
503 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
504 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
505 | "dev": true,
506 | "requires": {
507 | "is-descriptor": "^0.1.0"
508 | }
509 | }
510 | }
511 | },
512 | "cli-boxes": {
513 | "version": "1.0.0",
514 | "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz",
515 | "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=",
516 | "dev": true
517 | },
518 | "collection-visit": {
519 | "version": "1.0.0",
520 | "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
521 | "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
522 | "dev": true,
523 | "requires": {
524 | "map-visit": "^1.0.0",
525 | "object-visit": "^1.0.0"
526 | }
527 | },
528 | "color-convert": {
529 | "version": "1.9.3",
530 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
531 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
532 | "dev": true,
533 | "requires": {
534 | "color-name": "1.1.3"
535 | }
536 | },
537 | "color-name": {
538 | "version": "1.1.3",
539 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
540 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
541 | "dev": true
542 | },
543 | "combined-stream": {
544 | "version": "1.0.8",
545 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
546 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
547 | "optional": true,
548 | "requires": {
549 | "delayed-stream": "~1.0.0"
550 | }
551 | },
552 | "component-emitter": {
553 | "version": "1.3.0",
554 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
555 | "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
556 | "dev": true
557 | },
558 | "concat-map": {
559 | "version": "0.0.1",
560 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
561 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
562 | "dev": true
563 | },
564 | "configstore": {
565 | "version": "3.1.2",
566 | "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz",
567 | "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==",
568 | "dev": true,
569 | "requires": {
570 | "dot-prop": "^4.1.0",
571 | "graceful-fs": "^4.1.2",
572 | "make-dir": "^1.0.0",
573 | "unique-string": "^1.0.0",
574 | "write-file-atomic": "^2.0.0",
575 | "xdg-basedir": "^3.0.0"
576 | },
577 | "dependencies": {
578 | "make-dir": {
579 | "version": "1.3.0",
580 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
581 | "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
582 | "dev": true,
583 | "requires": {
584 | "pify": "^3.0.0"
585 | }
586 | },
587 | "pify": {
588 | "version": "3.0.0",
589 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
590 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
591 | "dev": true
592 | }
593 | }
594 | },
595 | "cookie": {
596 | "version": "0.4.1",
597 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
598 | "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA=="
599 | },
600 | "copy-descriptor": {
601 | "version": "0.1.1",
602 | "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
603 | "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
604 | "dev": true
605 | },
606 | "core-util-is": {
607 | "version": "1.0.2",
608 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
609 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
610 | },
611 | "create-error-class": {
612 | "version": "3.0.2",
613 | "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
614 | "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=",
615 | "dev": true,
616 | "requires": {
617 | "capture-stack-trace": "^1.0.0"
618 | }
619 | },
620 | "crypto-random-string": {
621 | "version": "1.0.0",
622 | "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
623 | "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=",
624 | "dev": true
625 | },
626 | "currently-unhandled": {
627 | "version": "0.4.1",
628 | "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
629 | "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
630 | "optional": true,
631 | "requires": {
632 | "array-find-index": "^1.0.1"
633 | }
634 | },
635 | "dashdash": {
636 | "version": "1.14.1",
637 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
638 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
639 | "optional": true,
640 | "requires": {
641 | "assert-plus": "^1.0.0"
642 | }
643 | },
644 | "debug": {
645 | "version": "2.6.9",
646 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
647 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
648 | "requires": {
649 | "ms": "2.0.0"
650 | }
651 | },
652 | "decamelize": {
653 | "version": "1.2.0",
654 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
655 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
656 | "optional": true
657 | },
658 | "decode-uri-component": {
659 | "version": "0.2.0",
660 | "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
661 | "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
662 | "dev": true
663 | },
664 | "deep-extend": {
665 | "version": "0.6.0",
666 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
667 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
668 | "dev": true
669 | },
670 | "deepmerge": {
671 | "version": "4.2.2",
672 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
673 | "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg=="
674 | },
675 | "define-property": {
676 | "version": "2.0.2",
677 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
678 | "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
679 | "dev": true,
680 | "requires": {
681 | "is-descriptor": "^1.0.2",
682 | "isobject": "^3.0.1"
683 | },
684 | "dependencies": {
685 | "is-accessor-descriptor": {
686 | "version": "1.0.0",
687 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
688 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
689 | "dev": true,
690 | "requires": {
691 | "kind-of": "^6.0.0"
692 | }
693 | },
694 | "is-data-descriptor": {
695 | "version": "1.0.0",
696 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
697 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
698 | "dev": true,
699 | "requires": {
700 | "kind-of": "^6.0.0"
701 | }
702 | },
703 | "is-descriptor": {
704 | "version": "1.0.2",
705 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
706 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
707 | "dev": true,
708 | "requires": {
709 | "is-accessor-descriptor": "^1.0.0",
710 | "is-data-descriptor": "^1.0.0",
711 | "kind-of": "^6.0.2"
712 | }
713 | }
714 | }
715 | },
716 | "delayed-stream": {
717 | "version": "1.0.0",
718 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
719 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
720 | "optional": true
721 | },
722 | "dot-prop": {
723 | "version": "4.2.1",
724 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz",
725 | "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==",
726 | "dev": true,
727 | "requires": {
728 | "is-obj": "^1.0.0"
729 | }
730 | },
731 | "duplexer3": {
732 | "version": "0.1.4",
733 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
734 | "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
735 | "dev": true
736 | },
737 | "ecc-jsbn": {
738 | "version": "0.1.2",
739 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
740 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
741 | "optional": true,
742 | "requires": {
743 | "jsbn": "~0.1.0",
744 | "safer-buffer": "^2.1.0"
745 | }
746 | },
747 | "error-ex": {
748 | "version": "1.3.2",
749 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
750 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
751 | "optional": true,
752 | "requires": {
753 | "is-arrayish": "^0.2.1"
754 | }
755 | },
756 | "escape-string-regexp": {
757 | "version": "1.0.5",
758 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
759 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
760 | "dev": true
761 | },
762 | "expand-brackets": {
763 | "version": "2.1.4",
764 | "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
765 | "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
766 | "dev": true,
767 | "requires": {
768 | "debug": "^2.3.3",
769 | "define-property": "^0.2.5",
770 | "extend-shallow": "^2.0.1",
771 | "posix-character-classes": "^0.1.0",
772 | "regex-not": "^1.0.0",
773 | "snapdragon": "^0.8.1",
774 | "to-regex": "^3.0.1"
775 | },
776 | "dependencies": {
777 | "define-property": {
778 | "version": "0.2.5",
779 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
780 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
781 | "dev": true,
782 | "requires": {
783 | "is-descriptor": "^0.1.0"
784 | }
785 | },
786 | "extend-shallow": {
787 | "version": "2.0.1",
788 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
789 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
790 | "dev": true,
791 | "requires": {
792 | "is-extendable": "^0.1.0"
793 | }
794 | }
795 | }
796 | },
797 | "extend": {
798 | "version": "3.0.2",
799 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
800 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
801 | "optional": true
802 | },
803 | "extend-shallow": {
804 | "version": "3.0.2",
805 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
806 | "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
807 | "dev": true,
808 | "requires": {
809 | "assign-symbols": "^1.0.0",
810 | "is-extendable": "^1.0.1"
811 | },
812 | "dependencies": {
813 | "is-extendable": {
814 | "version": "1.0.1",
815 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
816 | "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
817 | "dev": true,
818 | "requires": {
819 | "is-plain-object": "^2.0.4"
820 | }
821 | }
822 | }
823 | },
824 | "extglob": {
825 | "version": "2.0.4",
826 | "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
827 | "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
828 | "dev": true,
829 | "requires": {
830 | "array-unique": "^0.3.2",
831 | "define-property": "^1.0.0",
832 | "expand-brackets": "^2.1.4",
833 | "extend-shallow": "^2.0.1",
834 | "fragment-cache": "^0.2.1",
835 | "regex-not": "^1.0.0",
836 | "snapdragon": "^0.8.1",
837 | "to-regex": "^3.0.1"
838 | },
839 | "dependencies": {
840 | "define-property": {
841 | "version": "1.0.0",
842 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
843 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
844 | "dev": true,
845 | "requires": {
846 | "is-descriptor": "^1.0.0"
847 | }
848 | },
849 | "extend-shallow": {
850 | "version": "2.0.1",
851 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
852 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
853 | "dev": true,
854 | "requires": {
855 | "is-extendable": "^0.1.0"
856 | }
857 | },
858 | "is-accessor-descriptor": {
859 | "version": "1.0.0",
860 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
861 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
862 | "dev": true,
863 | "requires": {
864 | "kind-of": "^6.0.0"
865 | }
866 | },
867 | "is-data-descriptor": {
868 | "version": "1.0.0",
869 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
870 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
871 | "dev": true,
872 | "requires": {
873 | "kind-of": "^6.0.0"
874 | }
875 | },
876 | "is-descriptor": {
877 | "version": "1.0.2",
878 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
879 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
880 | "dev": true,
881 | "requires": {
882 | "is-accessor-descriptor": "^1.0.0",
883 | "is-data-descriptor": "^1.0.0",
884 | "kind-of": "^6.0.2"
885 | }
886 | }
887 | }
888 | },
889 | "extsprintf": {
890 | "version": "1.3.0",
891 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
892 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
893 | "optional": true
894 | },
895 | "fast-decode-uri-component": {
896 | "version": "1.0.1",
897 | "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz",
898 | "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg=="
899 | },
900 | "fast-deep-equal": {
901 | "version": "2.0.1",
902 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
903 | "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
904 | },
905 | "fast-json-stable-stringify": {
906 | "version": "2.0.0",
907 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
908 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
909 | },
910 | "fast-json-stringify": {
911 | "version": "1.21.0",
912 | "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-1.21.0.tgz",
913 | "integrity": "sha512-xY6gyjmHN3AK1Y15BCbMpeO9+dea5ePVsp3BouHCdukcx0hOHbXwFhRodhcI0NpZIgDChSeAKkHW9YjKvhwKBA==",
914 | "requires": {
915 | "ajv": "^6.11.0",
916 | "deepmerge": "^4.2.2",
917 | "string-similarity": "^4.0.1"
918 | },
919 | "dependencies": {
920 | "ajv": {
921 | "version": "6.12.3",
922 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz",
923 | "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==",
924 | "requires": {
925 | "fast-deep-equal": "^3.1.1",
926 | "fast-json-stable-stringify": "^2.0.0",
927 | "json-schema-traverse": "^0.4.1",
928 | "uri-js": "^4.2.2"
929 | }
930 | },
931 | "fast-deep-equal": {
932 | "version": "3.1.3",
933 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
934 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
935 | }
936 | }
937 | },
938 | "fast-redact": {
939 | "version": "2.0.0",
940 | "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-2.0.0.tgz",
941 | "integrity": "sha512-zxpkULI9W9MNTK2sJ3BpPQrTEXFNESd2X6O1tXMFpK/XM0G5c5Rll2EVYZH2TqI3xRGK/VaJ+eEOt7pnENJpeA=="
942 | },
943 | "fast-safe-stringify": {
944 | "version": "2.0.7",
945 | "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz",
946 | "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA=="
947 | },
948 | "fastify": {
949 | "version": "2.15.1",
950 | "resolved": "https://registry.npmjs.org/fastify/-/fastify-2.15.1.tgz",
951 | "integrity": "sha512-pEE1pa5j/vtZeZTbPpFgsJgzLbThcYgiLDw2yZIG8qNZ5LkF1Ew2vbv9k3nTXNxGEPYFBbyNTCKRSj3JbX+FhA==",
952 | "requires": {
953 | "abstract-logging": "^2.0.0",
954 | "ajv": "^6.12.0",
955 | "avvio": "^6.4.1",
956 | "fast-json-stringify": "^1.18.0",
957 | "find-my-way": "^2.2.2",
958 | "flatstr": "^1.0.12",
959 | "light-my-request": "^3.7.3",
960 | "middie": "^4.1.0",
961 | "pino": "^5.17.0",
962 | "proxy-addr": "^2.0.6",
963 | "readable-stream": "^3.6.0",
964 | "rfdc": "^1.1.2",
965 | "secure-json-parse": "^2.1.0",
966 | "tiny-lru": "^7.0.2"
967 | },
968 | "dependencies": {
969 | "ajv": {
970 | "version": "6.12.3",
971 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz",
972 | "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==",
973 | "requires": {
974 | "fast-deep-equal": "^3.1.1",
975 | "fast-json-stable-stringify": "^2.0.0",
976 | "json-schema-traverse": "^0.4.1",
977 | "uri-js": "^4.2.2"
978 | }
979 | },
980 | "fast-deep-equal": {
981 | "version": "3.1.3",
982 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
983 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
984 | },
985 | "readable-stream": {
986 | "version": "3.6.0",
987 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
988 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
989 | "requires": {
990 | "inherits": "^2.0.3",
991 | "string_decoder": "^1.1.1",
992 | "util-deprecate": "^1.0.1"
993 | }
994 | }
995 | }
996 | },
997 | "fastify-cors": {
998 | "version": "2.1.3",
999 | "resolved": "https://registry.npmjs.org/fastify-cors/-/fastify-cors-2.1.3.tgz",
1000 | "integrity": "sha512-ZHFzKn1DddymsxzvdtjEQfkuMfGgwcp++FKuTTMmAN2KFB7hJRmOINffjfRdmUcgXdE4LoSy5XJROWKx/b+CPQ==",
1001 | "requires": {
1002 | "fastify-plugin": "^1.5.0",
1003 | "vary": "^1.1.2"
1004 | }
1005 | },
1006 | "fastify-formbody": {
1007 | "version": "3.1.0",
1008 | "resolved": "https://registry.npmjs.org/fastify-formbody/-/fastify-formbody-3.1.0.tgz",
1009 | "integrity": "sha512-GQQtRmI8w07SMcnXiWrk9H8GAMJwheKAkQS4q0FbJ56Qu8bV39GOffiZ8GLHQmvcJ2B65S+4IAtNjsG6vtMEig==",
1010 | "requires": {
1011 | "fastify-plugin": "^1.0.0",
1012 | "qs": "^6.5.1"
1013 | }
1014 | },
1015 | "fastify-plugin": {
1016 | "version": "1.6.0",
1017 | "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-1.6.0.tgz",
1018 | "integrity": "sha512-lFa9txg8LZx4tljj33oG53nUXhVg0baZxtP9Pxi0dJmI0NQxzkDk5DS9kr3D7iMalUAp3mvIq16OQumc7eIvLA==",
1019 | "requires": {
1020 | "semver": "^6.0.0"
1021 | },
1022 | "dependencies": {
1023 | "semver": {
1024 | "version": "6.3.0",
1025 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
1026 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
1027 | }
1028 | }
1029 | },
1030 | "fastq": {
1031 | "version": "1.8.0",
1032 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz",
1033 | "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==",
1034 | "requires": {
1035 | "reusify": "^1.0.4"
1036 | }
1037 | },
1038 | "fill-range": {
1039 | "version": "4.0.0",
1040 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
1041 | "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
1042 | "dev": true,
1043 | "requires": {
1044 | "extend-shallow": "^2.0.1",
1045 | "is-number": "^3.0.0",
1046 | "repeat-string": "^1.6.1",
1047 | "to-regex-range": "^2.1.0"
1048 | },
1049 | "dependencies": {
1050 | "extend-shallow": {
1051 | "version": "2.0.1",
1052 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
1053 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
1054 | "dev": true,
1055 | "requires": {
1056 | "is-extendable": "^0.1.0"
1057 | }
1058 | }
1059 | }
1060 | },
1061 | "find-my-way": {
1062 | "version": "2.2.5",
1063 | "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-2.2.5.tgz",
1064 | "integrity": "sha512-GjRZZlGcGmTh9t+6Xrj5K0YprpoAFCAiCPgmAH9Kb09O4oX6hYuckDfnDipYj+Q7B1GtYWSzDI5HEecNYscLQg==",
1065 | "requires": {
1066 | "fast-decode-uri-component": "^1.0.0",
1067 | "safe-regex2": "^2.0.0",
1068 | "semver-store": "^0.3.0"
1069 | }
1070 | },
1071 | "flatstr": {
1072 | "version": "1.0.12",
1073 | "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz",
1074 | "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw=="
1075 | },
1076 | "for-in": {
1077 | "version": "1.0.2",
1078 | "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
1079 | "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
1080 | "dev": true
1081 | },
1082 | "forever-agent": {
1083 | "version": "0.6.1",
1084 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
1085 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
1086 | "optional": true
1087 | },
1088 | "form-data": {
1089 | "version": "2.3.3",
1090 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
1091 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
1092 | "optional": true,
1093 | "requires": {
1094 | "asynckit": "^0.4.0",
1095 | "combined-stream": "^1.0.6",
1096 | "mime-types": "^2.1.12"
1097 | }
1098 | },
1099 | "forwarded": {
1100 | "version": "0.1.2",
1101 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
1102 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
1103 | },
1104 | "fragment-cache": {
1105 | "version": "0.2.1",
1106 | "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
1107 | "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
1108 | "dev": true,
1109 | "requires": {
1110 | "map-cache": "^0.2.2"
1111 | }
1112 | },
1113 | "fsevents": {
1114 | "version": "1.2.9",
1115 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz",
1116 | "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==",
1117 | "dev": true,
1118 | "optional": true,
1119 | "requires": {
1120 | "nan": "^2.12.1",
1121 | "node-pre-gyp": "^0.12.0"
1122 | },
1123 | "dependencies": {
1124 | "abbrev": {
1125 | "version": "1.1.1",
1126 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
1127 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
1128 | "dev": true,
1129 | "optional": true
1130 | },
1131 | "ansi-regex": {
1132 | "version": "2.1.1",
1133 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
1134 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
1135 | "dev": true,
1136 | "optional": true
1137 | },
1138 | "aproba": {
1139 | "version": "1.2.0",
1140 | "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
1141 | "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
1142 | "dev": true,
1143 | "optional": true
1144 | },
1145 | "are-we-there-yet": {
1146 | "version": "1.1.5",
1147 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
1148 | "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
1149 | "dev": true,
1150 | "optional": true,
1151 | "requires": {
1152 | "delegates": "^1.0.0",
1153 | "readable-stream": "^2.0.6"
1154 | }
1155 | },
1156 | "balanced-match": {
1157 | "version": "1.0.0",
1158 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
1159 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
1160 | "dev": true,
1161 | "optional": true
1162 | },
1163 | "brace-expansion": {
1164 | "version": "1.1.11",
1165 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
1166 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
1167 | "dev": true,
1168 | "optional": true,
1169 | "requires": {
1170 | "balanced-match": "^1.0.0",
1171 | "concat-map": "0.0.1"
1172 | }
1173 | },
1174 | "chownr": {
1175 | "version": "1.1.1",
1176 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
1177 | "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==",
1178 | "dev": true,
1179 | "optional": true
1180 | },
1181 | "code-point-at": {
1182 | "version": "1.1.0",
1183 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
1184 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
1185 | "dev": true,
1186 | "optional": true
1187 | },
1188 | "concat-map": {
1189 | "version": "0.0.1",
1190 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
1191 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
1192 | "dev": true,
1193 | "optional": true
1194 | },
1195 | "console-control-strings": {
1196 | "version": "1.1.0",
1197 | "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
1198 | "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
1199 | "dev": true,
1200 | "optional": true
1201 | },
1202 | "core-util-is": {
1203 | "version": "1.0.2",
1204 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
1205 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
1206 | "dev": true,
1207 | "optional": true
1208 | },
1209 | "debug": {
1210 | "version": "4.1.1",
1211 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
1212 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
1213 | "dev": true,
1214 | "optional": true,
1215 | "requires": {
1216 | "ms": "^2.1.1"
1217 | }
1218 | },
1219 | "deep-extend": {
1220 | "version": "0.6.0",
1221 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
1222 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
1223 | "dev": true,
1224 | "optional": true
1225 | },
1226 | "delegates": {
1227 | "version": "1.0.0",
1228 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
1229 | "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
1230 | "dev": true,
1231 | "optional": true
1232 | },
1233 | "detect-libc": {
1234 | "version": "1.0.3",
1235 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
1236 | "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
1237 | "dev": true,
1238 | "optional": true
1239 | },
1240 | "fs-minipass": {
1241 | "version": "1.2.5",
1242 | "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz",
1243 | "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==",
1244 | "dev": true,
1245 | "optional": true,
1246 | "requires": {
1247 | "minipass": "^2.2.1"
1248 | }
1249 | },
1250 | "fs.realpath": {
1251 | "version": "1.0.0",
1252 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
1253 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
1254 | "dev": true,
1255 | "optional": true
1256 | },
1257 | "gauge": {
1258 | "version": "2.7.4",
1259 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
1260 | "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
1261 | "dev": true,
1262 | "optional": true,
1263 | "requires": {
1264 | "aproba": "^1.0.3",
1265 | "console-control-strings": "^1.0.0",
1266 | "has-unicode": "^2.0.0",
1267 | "object-assign": "^4.1.0",
1268 | "signal-exit": "^3.0.0",
1269 | "string-width": "^1.0.1",
1270 | "strip-ansi": "^3.0.1",
1271 | "wide-align": "^1.1.0"
1272 | }
1273 | },
1274 | "glob": {
1275 | "version": "7.1.3",
1276 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
1277 | "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
1278 | "dev": true,
1279 | "optional": true,
1280 | "requires": {
1281 | "fs.realpath": "^1.0.0",
1282 | "inflight": "^1.0.4",
1283 | "inherits": "2",
1284 | "minimatch": "^3.0.4",
1285 | "once": "^1.3.0",
1286 | "path-is-absolute": "^1.0.0"
1287 | }
1288 | },
1289 | "has-unicode": {
1290 | "version": "2.0.1",
1291 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
1292 | "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
1293 | "dev": true,
1294 | "optional": true
1295 | },
1296 | "iconv-lite": {
1297 | "version": "0.4.24",
1298 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
1299 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
1300 | "dev": true,
1301 | "optional": true,
1302 | "requires": {
1303 | "safer-buffer": ">= 2.1.2 < 3"
1304 | }
1305 | },
1306 | "ignore-walk": {
1307 | "version": "3.0.1",
1308 | "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz",
1309 | "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==",
1310 | "dev": true,
1311 | "optional": true,
1312 | "requires": {
1313 | "minimatch": "^3.0.4"
1314 | }
1315 | },
1316 | "inflight": {
1317 | "version": "1.0.6",
1318 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1319 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
1320 | "dev": true,
1321 | "optional": true,
1322 | "requires": {
1323 | "once": "^1.3.0",
1324 | "wrappy": "1"
1325 | }
1326 | },
1327 | "inherits": {
1328 | "version": "2.0.3",
1329 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
1330 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
1331 | "dev": true,
1332 | "optional": true
1333 | },
1334 | "is-fullwidth-code-point": {
1335 | "version": "1.0.0",
1336 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
1337 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
1338 | "dev": true,
1339 | "optional": true,
1340 | "requires": {
1341 | "number-is-nan": "^1.0.0"
1342 | }
1343 | },
1344 | "isarray": {
1345 | "version": "1.0.0",
1346 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
1347 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
1348 | "dev": true,
1349 | "optional": true
1350 | },
1351 | "minimatch": {
1352 | "version": "3.0.4",
1353 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
1354 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
1355 | "dev": true,
1356 | "optional": true,
1357 | "requires": {
1358 | "brace-expansion": "^1.1.7"
1359 | }
1360 | },
1361 | "minimist": {
1362 | "version": "0.0.8",
1363 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
1364 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
1365 | "dev": true,
1366 | "optional": true
1367 | },
1368 | "minipass": {
1369 | "version": "2.3.5",
1370 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz",
1371 | "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==",
1372 | "dev": true,
1373 | "optional": true,
1374 | "requires": {
1375 | "safe-buffer": "^5.1.2",
1376 | "yallist": "^3.0.0"
1377 | }
1378 | },
1379 | "minizlib": {
1380 | "version": "1.2.1",
1381 | "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz",
1382 | "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==",
1383 | "dev": true,
1384 | "optional": true,
1385 | "requires": {
1386 | "minipass": "^2.2.1"
1387 | }
1388 | },
1389 | "mkdirp": {
1390 | "version": "0.5.1",
1391 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
1392 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
1393 | "dev": true,
1394 | "optional": true,
1395 | "requires": {
1396 | "minimist": "0.0.8"
1397 | }
1398 | },
1399 | "ms": {
1400 | "version": "2.1.1",
1401 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
1402 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
1403 | "dev": true,
1404 | "optional": true
1405 | },
1406 | "needle": {
1407 | "version": "2.3.0",
1408 | "resolved": "https://registry.npmjs.org/needle/-/needle-2.3.0.tgz",
1409 | "integrity": "sha512-QBZu7aAFR0522EyaXZM0FZ9GLpq6lvQ3uq8gteiDUp7wKdy0lSd2hPlgFwVuW1CBkfEs9PfDQsQzZghLs/psdg==",
1410 | "dev": true,
1411 | "optional": true,
1412 | "requires": {
1413 | "debug": "^4.1.0",
1414 | "iconv-lite": "^0.4.4",
1415 | "sax": "^1.2.4"
1416 | }
1417 | },
1418 | "node-pre-gyp": {
1419 | "version": "0.12.0",
1420 | "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz",
1421 | "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==",
1422 | "dev": true,
1423 | "optional": true,
1424 | "requires": {
1425 | "detect-libc": "^1.0.2",
1426 | "mkdirp": "^0.5.1",
1427 | "needle": "^2.2.1",
1428 | "nopt": "^4.0.1",
1429 | "npm-packlist": "^1.1.6",
1430 | "npmlog": "^4.0.2",
1431 | "rc": "^1.2.7",
1432 | "rimraf": "^2.6.1",
1433 | "semver": "^5.3.0",
1434 | "tar": "^4"
1435 | }
1436 | },
1437 | "nopt": {
1438 | "version": "4.0.1",
1439 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
1440 | "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
1441 | "dev": true,
1442 | "optional": true,
1443 | "requires": {
1444 | "abbrev": "1",
1445 | "osenv": "^0.1.4"
1446 | }
1447 | },
1448 | "npm-bundled": {
1449 | "version": "1.0.6",
1450 | "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz",
1451 | "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==",
1452 | "dev": true,
1453 | "optional": true
1454 | },
1455 | "npm-packlist": {
1456 | "version": "1.4.1",
1457 | "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.1.tgz",
1458 | "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==",
1459 | "dev": true,
1460 | "optional": true,
1461 | "requires": {
1462 | "ignore-walk": "^3.0.1",
1463 | "npm-bundled": "^1.0.1"
1464 | }
1465 | },
1466 | "npmlog": {
1467 | "version": "4.1.2",
1468 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
1469 | "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
1470 | "dev": true,
1471 | "optional": true,
1472 | "requires": {
1473 | "are-we-there-yet": "~1.1.2",
1474 | "console-control-strings": "~1.1.0",
1475 | "gauge": "~2.7.3",
1476 | "set-blocking": "~2.0.0"
1477 | }
1478 | },
1479 | "number-is-nan": {
1480 | "version": "1.0.1",
1481 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
1482 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
1483 | "dev": true,
1484 | "optional": true
1485 | },
1486 | "object-assign": {
1487 | "version": "4.1.1",
1488 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1489 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
1490 | "dev": true,
1491 | "optional": true
1492 | },
1493 | "once": {
1494 | "version": "1.4.0",
1495 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1496 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
1497 | "dev": true,
1498 | "optional": true,
1499 | "requires": {
1500 | "wrappy": "1"
1501 | }
1502 | },
1503 | "os-homedir": {
1504 | "version": "1.0.2",
1505 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
1506 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
1507 | "dev": true,
1508 | "optional": true
1509 | },
1510 | "os-tmpdir": {
1511 | "version": "1.0.2",
1512 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
1513 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
1514 | "dev": true,
1515 | "optional": true
1516 | },
1517 | "osenv": {
1518 | "version": "0.1.5",
1519 | "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
1520 | "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
1521 | "dev": true,
1522 | "optional": true,
1523 | "requires": {
1524 | "os-homedir": "^1.0.0",
1525 | "os-tmpdir": "^1.0.0"
1526 | }
1527 | },
1528 | "path-is-absolute": {
1529 | "version": "1.0.1",
1530 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1531 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
1532 | "dev": true,
1533 | "optional": true
1534 | },
1535 | "process-nextick-args": {
1536 | "version": "2.0.0",
1537 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
1538 | "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
1539 | "dev": true,
1540 | "optional": true
1541 | },
1542 | "rc": {
1543 | "version": "1.2.8",
1544 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
1545 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
1546 | "dev": true,
1547 | "optional": true,
1548 | "requires": {
1549 | "deep-extend": "^0.6.0",
1550 | "ini": "~1.3.0",
1551 | "minimist": "^1.2.0",
1552 | "strip-json-comments": "~2.0.1"
1553 | },
1554 | "dependencies": {
1555 | "minimist": {
1556 | "version": "1.2.0",
1557 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
1558 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
1559 | "dev": true,
1560 | "optional": true
1561 | }
1562 | }
1563 | },
1564 | "readable-stream": {
1565 | "version": "2.3.6",
1566 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
1567 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
1568 | "dev": true,
1569 | "optional": true,
1570 | "requires": {
1571 | "core-util-is": "~1.0.0",
1572 | "inherits": "~2.0.3",
1573 | "isarray": "~1.0.0",
1574 | "process-nextick-args": "~2.0.0",
1575 | "safe-buffer": "~5.1.1",
1576 | "string_decoder": "~1.1.1",
1577 | "util-deprecate": "~1.0.1"
1578 | }
1579 | },
1580 | "rimraf": {
1581 | "version": "2.6.3",
1582 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
1583 | "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
1584 | "dev": true,
1585 | "optional": true,
1586 | "requires": {
1587 | "glob": "^7.1.3"
1588 | }
1589 | },
1590 | "safe-buffer": {
1591 | "version": "5.1.2",
1592 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1593 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
1594 | "dev": true,
1595 | "optional": true
1596 | },
1597 | "safer-buffer": {
1598 | "version": "2.1.2",
1599 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1600 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
1601 | "dev": true,
1602 | "optional": true
1603 | },
1604 | "sax": {
1605 | "version": "1.2.4",
1606 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
1607 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
1608 | "dev": true,
1609 | "optional": true
1610 | },
1611 | "semver": {
1612 | "version": "5.7.0",
1613 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
1614 | "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==",
1615 | "dev": true,
1616 | "optional": true
1617 | },
1618 | "set-blocking": {
1619 | "version": "2.0.0",
1620 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
1621 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
1622 | "dev": true,
1623 | "optional": true
1624 | },
1625 | "signal-exit": {
1626 | "version": "3.0.2",
1627 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
1628 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
1629 | "dev": true,
1630 | "optional": true
1631 | },
1632 | "string-width": {
1633 | "version": "1.0.2",
1634 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
1635 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
1636 | "dev": true,
1637 | "optional": true,
1638 | "requires": {
1639 | "code-point-at": "^1.0.0",
1640 | "is-fullwidth-code-point": "^1.0.0",
1641 | "strip-ansi": "^3.0.0"
1642 | }
1643 | },
1644 | "string_decoder": {
1645 | "version": "1.1.1",
1646 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
1647 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
1648 | "dev": true,
1649 | "optional": true,
1650 | "requires": {
1651 | "safe-buffer": "~5.1.0"
1652 | }
1653 | },
1654 | "strip-ansi": {
1655 | "version": "3.0.1",
1656 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
1657 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
1658 | "dev": true,
1659 | "optional": true,
1660 | "requires": {
1661 | "ansi-regex": "^2.0.0"
1662 | }
1663 | },
1664 | "strip-json-comments": {
1665 | "version": "2.0.1",
1666 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
1667 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
1668 | "dev": true,
1669 | "optional": true
1670 | },
1671 | "tar": {
1672 | "version": "4.4.8",
1673 | "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz",
1674 | "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==",
1675 | "dev": true,
1676 | "optional": true,
1677 | "requires": {
1678 | "chownr": "^1.1.1",
1679 | "fs-minipass": "^1.2.5",
1680 | "minipass": "^2.3.4",
1681 | "minizlib": "^1.1.1",
1682 | "mkdirp": "^0.5.0",
1683 | "safe-buffer": "^5.1.2",
1684 | "yallist": "^3.0.2"
1685 | }
1686 | },
1687 | "util-deprecate": {
1688 | "version": "1.0.2",
1689 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1690 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
1691 | "dev": true,
1692 | "optional": true
1693 | },
1694 | "wide-align": {
1695 | "version": "1.1.3",
1696 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
1697 | "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
1698 | "dev": true,
1699 | "optional": true,
1700 | "requires": {
1701 | "string-width": "^1.0.2 || 2"
1702 | }
1703 | },
1704 | "wrappy": {
1705 | "version": "1.0.2",
1706 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1707 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
1708 | "dev": true,
1709 | "optional": true
1710 | },
1711 | "yallist": {
1712 | "version": "3.0.3",
1713 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
1714 | "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
1715 | "dev": true,
1716 | "optional": true
1717 | }
1718 | }
1719 | },
1720 | "get-stdin": {
1721 | "version": "4.0.1",
1722 | "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
1723 | "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
1724 | "optional": true
1725 | },
1726 | "get-value": {
1727 | "version": "2.0.6",
1728 | "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
1729 | "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
1730 | "dev": true
1731 | },
1732 | "getpass": {
1733 | "version": "0.1.7",
1734 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
1735 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
1736 | "optional": true,
1737 | "requires": {
1738 | "assert-plus": "^1.0.0"
1739 | }
1740 | },
1741 | "glob-parent": {
1742 | "version": "3.1.0",
1743 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
1744 | "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
1745 | "dev": true,
1746 | "requires": {
1747 | "is-glob": "^3.1.0",
1748 | "path-dirname": "^1.0.0"
1749 | },
1750 | "dependencies": {
1751 | "is-glob": {
1752 | "version": "3.1.0",
1753 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
1754 | "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
1755 | "dev": true,
1756 | "requires": {
1757 | "is-extglob": "^2.1.0"
1758 | }
1759 | }
1760 | }
1761 | },
1762 | "global-dirs": {
1763 | "version": "0.1.1",
1764 | "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
1765 | "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=",
1766 | "dev": true,
1767 | "requires": {
1768 | "ini": "^1.3.4"
1769 | }
1770 | },
1771 | "got": {
1772 | "version": "6.7.1",
1773 | "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
1774 | "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
1775 | "dev": true,
1776 | "requires": {
1777 | "create-error-class": "^3.0.0",
1778 | "duplexer3": "^0.1.4",
1779 | "get-stream": "^3.0.0",
1780 | "is-redirect": "^1.0.0",
1781 | "is-retry-allowed": "^1.0.0",
1782 | "is-stream": "^1.0.0",
1783 | "lowercase-keys": "^1.0.0",
1784 | "safe-buffer": "^5.0.1",
1785 | "timed-out": "^4.0.0",
1786 | "unzip-response": "^2.0.1",
1787 | "url-parse-lax": "^1.0.0"
1788 | },
1789 | "dependencies": {
1790 | "get-stream": {
1791 | "version": "3.0.0",
1792 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
1793 | "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
1794 | "dev": true
1795 | }
1796 | }
1797 | },
1798 | "graceful-fs": {
1799 | "version": "4.2.0",
1800 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz",
1801 | "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg=="
1802 | },
1803 | "h264-profile-level-id": {
1804 | "version": "1.0.0",
1805 | "resolved": "https://registry.npmjs.org/h264-profile-level-id/-/h264-profile-level-id-1.0.0.tgz",
1806 | "integrity": "sha512-2zKitj+ZntjPsy/OvQV5dPfJsppoDmHCKbw/kfXbul6tHVVk6j31ccLZ7M/XJFPcj2PacGyiQF5A/Jsi3ZRF5w==",
1807 | "requires": {
1808 | "debug": "^4.1.1"
1809 | },
1810 | "dependencies": {
1811 | "debug": {
1812 | "version": "4.1.1",
1813 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
1814 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
1815 | "requires": {
1816 | "ms": "^2.1.1"
1817 | }
1818 | },
1819 | "ms": {
1820 | "version": "2.1.2",
1821 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1822 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
1823 | }
1824 | }
1825 | },
1826 | "har-schema": {
1827 | "version": "2.0.0",
1828 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
1829 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
1830 | "optional": true
1831 | },
1832 | "har-validator": {
1833 | "version": "5.1.3",
1834 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
1835 | "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
1836 | "optional": true,
1837 | "requires": {
1838 | "ajv": "^6.5.5",
1839 | "har-schema": "^2.0.0"
1840 | }
1841 | },
1842 | "has-flag": {
1843 | "version": "3.0.0",
1844 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
1845 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
1846 | "dev": true
1847 | },
1848 | "has-value": {
1849 | "version": "1.0.0",
1850 | "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
1851 | "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
1852 | "dev": true,
1853 | "requires": {
1854 | "get-value": "^2.0.6",
1855 | "has-values": "^1.0.0",
1856 | "isobject": "^3.0.0"
1857 | }
1858 | },
1859 | "has-values": {
1860 | "version": "1.0.0",
1861 | "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
1862 | "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
1863 | "dev": true,
1864 | "requires": {
1865 | "is-number": "^3.0.0",
1866 | "kind-of": "^4.0.0"
1867 | },
1868 | "dependencies": {
1869 | "kind-of": {
1870 | "version": "4.0.0",
1871 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
1872 | "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
1873 | "dev": true,
1874 | "requires": {
1875 | "is-buffer": "^1.1.5"
1876 | }
1877 | }
1878 | }
1879 | },
1880 | "home-path": {
1881 | "version": "0.1.2",
1882 | "resolved": "https://registry.npmjs.org/home-path/-/home-path-0.1.2.tgz",
1883 | "integrity": "sha1-PbJsojrcFE/uqPHi18j2yJDL/io=",
1884 | "optional": true
1885 | },
1886 | "hosted-git-info": {
1887 | "version": "2.7.1",
1888 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
1889 | "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
1890 | "optional": true
1891 | },
1892 | "http-signature": {
1893 | "version": "1.2.0",
1894 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
1895 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
1896 | "optional": true,
1897 | "requires": {
1898 | "assert-plus": "^1.0.0",
1899 | "jsprim": "^1.2.2",
1900 | "sshpk": "^1.7.0"
1901 | }
1902 | },
1903 | "ignore-by-default": {
1904 | "version": "1.0.1",
1905 | "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
1906 | "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=",
1907 | "dev": true
1908 | },
1909 | "import-lazy": {
1910 | "version": "2.1.0",
1911 | "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
1912 | "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
1913 | "dev": true
1914 | },
1915 | "imurmurhash": {
1916 | "version": "0.1.4",
1917 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
1918 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
1919 | "dev": true
1920 | },
1921 | "indent-string": {
1922 | "version": "2.1.0",
1923 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
1924 | "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
1925 | "optional": true,
1926 | "requires": {
1927 | "repeating": "^2.0.0"
1928 | }
1929 | },
1930 | "inherits": {
1931 | "version": "2.0.4",
1932 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
1933 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
1934 | },
1935 | "ini": {
1936 | "version": "1.3.7",
1937 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz",
1938 | "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==",
1939 | "dev": true
1940 | },
1941 | "ipaddr.js": {
1942 | "version": "1.9.1",
1943 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
1944 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
1945 | },
1946 | "is-accessor-descriptor": {
1947 | "version": "0.1.6",
1948 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
1949 | "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
1950 | "dev": true,
1951 | "requires": {
1952 | "kind-of": "^3.0.2"
1953 | },
1954 | "dependencies": {
1955 | "kind-of": {
1956 | "version": "3.2.2",
1957 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
1958 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
1959 | "dev": true,
1960 | "requires": {
1961 | "is-buffer": "^1.1.5"
1962 | }
1963 | }
1964 | }
1965 | },
1966 | "is-arrayish": {
1967 | "version": "0.2.1",
1968 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
1969 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
1970 | "optional": true
1971 | },
1972 | "is-binary-path": {
1973 | "version": "1.0.1",
1974 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
1975 | "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
1976 | "dev": true,
1977 | "requires": {
1978 | "binary-extensions": "^1.0.0"
1979 | }
1980 | },
1981 | "is-buffer": {
1982 | "version": "1.1.6",
1983 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
1984 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
1985 | "dev": true
1986 | },
1987 | "is-ci": {
1988 | "version": "1.2.1",
1989 | "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz",
1990 | "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==",
1991 | "dev": true,
1992 | "requires": {
1993 | "ci-info": "^1.5.0"
1994 | }
1995 | },
1996 | "is-data-descriptor": {
1997 | "version": "0.1.4",
1998 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
1999 | "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
2000 | "dev": true,
2001 | "requires": {
2002 | "kind-of": "^3.0.2"
2003 | },
2004 | "dependencies": {
2005 | "kind-of": {
2006 | "version": "3.2.2",
2007 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
2008 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
2009 | "dev": true,
2010 | "requires": {
2011 | "is-buffer": "^1.1.5"
2012 | }
2013 | }
2014 | }
2015 | },
2016 | "is-descriptor": {
2017 | "version": "0.1.6",
2018 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
2019 | "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
2020 | "dev": true,
2021 | "requires": {
2022 | "is-accessor-descriptor": "^0.1.6",
2023 | "is-data-descriptor": "^0.1.4",
2024 | "kind-of": "^5.0.0"
2025 | },
2026 | "dependencies": {
2027 | "kind-of": {
2028 | "version": "5.1.0",
2029 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
2030 | "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
2031 | "dev": true
2032 | }
2033 | }
2034 | },
2035 | "is-extendable": {
2036 | "version": "0.1.1",
2037 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
2038 | "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
2039 | "dev": true
2040 | },
2041 | "is-extglob": {
2042 | "version": "2.1.1",
2043 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
2044 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
2045 | "dev": true
2046 | },
2047 | "is-finite": {
2048 | "version": "1.0.2",
2049 | "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
2050 | "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
2051 | "optional": true,
2052 | "requires": {
2053 | "number-is-nan": "^1.0.0"
2054 | }
2055 | },
2056 | "is-fullwidth-code-point": {
2057 | "version": "2.0.0",
2058 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
2059 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
2060 | "dev": true
2061 | },
2062 | "is-glob": {
2063 | "version": "4.0.1",
2064 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
2065 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
2066 | "dev": true,
2067 | "requires": {
2068 | "is-extglob": "^2.1.1"
2069 | }
2070 | },
2071 | "is-installed-globally": {
2072 | "version": "0.1.0",
2073 | "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz",
2074 | "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=",
2075 | "dev": true,
2076 | "requires": {
2077 | "global-dirs": "^0.1.0",
2078 | "is-path-inside": "^1.0.0"
2079 | },
2080 | "dependencies": {
2081 | "is-path-inside": {
2082 | "version": "1.0.1",
2083 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
2084 | "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
2085 | "dev": true,
2086 | "requires": {
2087 | "path-is-inside": "^1.0.1"
2088 | }
2089 | }
2090 | }
2091 | },
2092 | "is-npm": {
2093 | "version": "1.0.0",
2094 | "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz",
2095 | "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=",
2096 | "dev": true
2097 | },
2098 | "is-number": {
2099 | "version": "3.0.0",
2100 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
2101 | "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
2102 | "dev": true,
2103 | "requires": {
2104 | "kind-of": "^3.0.2"
2105 | },
2106 | "dependencies": {
2107 | "kind-of": {
2108 | "version": "3.2.2",
2109 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
2110 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
2111 | "dev": true,
2112 | "requires": {
2113 | "is-buffer": "^1.1.5"
2114 | }
2115 | }
2116 | }
2117 | },
2118 | "is-obj": {
2119 | "version": "1.0.1",
2120 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
2121 | "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
2122 | "dev": true
2123 | },
2124 | "is-plain-object": {
2125 | "version": "2.0.4",
2126 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
2127 | "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
2128 | "dev": true,
2129 | "requires": {
2130 | "isobject": "^3.0.1"
2131 | }
2132 | },
2133 | "is-redirect": {
2134 | "version": "1.0.0",
2135 | "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
2136 | "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=",
2137 | "dev": true
2138 | },
2139 | "is-retry-allowed": {
2140 | "version": "1.1.0",
2141 | "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz",
2142 | "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=",
2143 | "dev": true
2144 | },
2145 | "is-stream": {
2146 | "version": "1.1.0",
2147 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
2148 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
2149 | "dev": true
2150 | },
2151 | "is-typedarray": {
2152 | "version": "1.0.0",
2153 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
2154 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
2155 | "optional": true
2156 | },
2157 | "is-utf8": {
2158 | "version": "0.2.1",
2159 | "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
2160 | "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
2161 | "optional": true
2162 | },
2163 | "is-windows": {
2164 | "version": "1.0.2",
2165 | "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
2166 | "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
2167 | "dev": true
2168 | },
2169 | "isarray": {
2170 | "version": "1.0.0",
2171 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
2172 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
2173 | "dev": true
2174 | },
2175 | "isexe": {
2176 | "version": "2.0.0",
2177 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
2178 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
2179 | "dev": true
2180 | },
2181 | "isobject": {
2182 | "version": "3.0.1",
2183 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
2184 | "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
2185 | "dev": true
2186 | },
2187 | "isstream": {
2188 | "version": "0.1.2",
2189 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
2190 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
2191 | "optional": true
2192 | },
2193 | "jsbn": {
2194 | "version": "0.1.1",
2195 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
2196 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
2197 | "optional": true
2198 | },
2199 | "json-schema": {
2200 | "version": "0.2.3",
2201 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
2202 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
2203 | "optional": true
2204 | },
2205 | "json-schema-traverse": {
2206 | "version": "0.4.1",
2207 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
2208 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
2209 | },
2210 | "json-stringify-safe": {
2211 | "version": "5.0.1",
2212 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
2213 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
2214 | "optional": true
2215 | },
2216 | "jsprim": {
2217 | "version": "1.4.1",
2218 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
2219 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
2220 | "optional": true,
2221 | "requires": {
2222 | "assert-plus": "1.0.0",
2223 | "extsprintf": "1.3.0",
2224 | "json-schema": "0.2.3",
2225 | "verror": "1.10.0"
2226 | }
2227 | },
2228 | "kind-of": {
2229 | "version": "6.0.2",
2230 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
2231 | "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
2232 | "dev": true
2233 | },
2234 | "latest-version": {
2235 | "version": "3.1.0",
2236 | "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz",
2237 | "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=",
2238 | "dev": true,
2239 | "requires": {
2240 | "package-json": "^4.0.0"
2241 | }
2242 | },
2243 | "light-my-request": {
2244 | "version": "3.8.0",
2245 | "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-3.8.0.tgz",
2246 | "integrity": "sha512-cIOWmNsgoStysmkzcv2EwvLwMb2hEm6oqKMerG/b5ey9F0we2Qony8cAZgBktmGPYUvPyKsDCzMcYU6fXbpWew==",
2247 | "requires": {
2248 | "ajv": "^6.10.2",
2249 | "cookie": "^0.4.0",
2250 | "readable-stream": "^3.4.0",
2251 | "set-cookie-parser": "^2.4.1"
2252 | },
2253 | "dependencies": {
2254 | "readable-stream": {
2255 | "version": "3.6.0",
2256 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
2257 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
2258 | "requires": {
2259 | "inherits": "^2.0.3",
2260 | "string_decoder": "^1.1.1",
2261 | "util-deprecate": "^1.0.1"
2262 | }
2263 | }
2264 | }
2265 | },
2266 | "load-json-file": {
2267 | "version": "1.1.0",
2268 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
2269 | "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
2270 | "optional": true,
2271 | "requires": {
2272 | "graceful-fs": "^4.1.2",
2273 | "parse-json": "^2.2.0",
2274 | "pify": "^2.0.0",
2275 | "pinkie-promise": "^2.0.0",
2276 | "strip-bom": "^2.0.0"
2277 | },
2278 | "dependencies": {
2279 | "pify": {
2280 | "version": "2.3.0",
2281 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
2282 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
2283 | "optional": true
2284 | }
2285 | }
2286 | },
2287 | "loud-rejection": {
2288 | "version": "1.6.0",
2289 | "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
2290 | "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
2291 | "optional": true,
2292 | "requires": {
2293 | "currently-unhandled": "^0.4.1",
2294 | "signal-exit": "^3.0.0"
2295 | }
2296 | },
2297 | "lowercase-keys": {
2298 | "version": "1.0.1",
2299 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
2300 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
2301 | "dev": true
2302 | },
2303 | "map-cache": {
2304 | "version": "0.2.2",
2305 | "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
2306 | "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
2307 | "dev": true
2308 | },
2309 | "map-obj": {
2310 | "version": "1.0.1",
2311 | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
2312 | "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
2313 | "optional": true
2314 | },
2315 | "map-visit": {
2316 | "version": "1.0.0",
2317 | "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
2318 | "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
2319 | "dev": true,
2320 | "requires": {
2321 | "object-visit": "^1.0.0"
2322 | }
2323 | },
2324 | "mediasoup": {
2325 | "version": "3.2.4",
2326 | "resolved": "https://registry.npmjs.org/mediasoup/-/mediasoup-3.2.4.tgz",
2327 | "integrity": "sha512-k0DMINCmsy93mhU5mmL4VASd/ONZYqg2kG9LurdFLNEWvy0Wv2wCGJ3djw6WlqE7OVtHJKoITe/31fc0WT1Quw==",
2328 | "requires": {
2329 | "clang-tools-prebuilt": "^0.1.4",
2330 | "debug": "^4.1.1",
2331 | "h264-profile-level-id": "^1.0.0",
2332 | "netstring": "^0.3.0",
2333 | "random-number": "0.0.9",
2334 | "uuid": "^3.3.2"
2335 | },
2336 | "dependencies": {
2337 | "debug": {
2338 | "version": "4.1.1",
2339 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
2340 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
2341 | "requires": {
2342 | "ms": "^2.1.1"
2343 | }
2344 | },
2345 | "ms": {
2346 | "version": "2.1.2",
2347 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
2348 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
2349 | }
2350 | }
2351 | },
2352 | "meow": {
2353 | "version": "3.7.0",
2354 | "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
2355 | "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
2356 | "optional": true,
2357 | "requires": {
2358 | "camelcase-keys": "^2.0.0",
2359 | "decamelize": "^1.1.2",
2360 | "loud-rejection": "^1.0.0",
2361 | "map-obj": "^1.0.1",
2362 | "minimist": "^1.1.3",
2363 | "normalize-package-data": "^2.3.4",
2364 | "object-assign": "^4.0.1",
2365 | "read-pkg-up": "^1.0.1",
2366 | "redent": "^1.0.0",
2367 | "trim-newlines": "^1.0.0"
2368 | }
2369 | },
2370 | "micromatch": {
2371 | "version": "3.1.10",
2372 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
2373 | "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
2374 | "dev": true,
2375 | "requires": {
2376 | "arr-diff": "^4.0.0",
2377 | "array-unique": "^0.3.2",
2378 | "braces": "^2.3.1",
2379 | "define-property": "^2.0.2",
2380 | "extend-shallow": "^3.0.2",
2381 | "extglob": "^2.0.4",
2382 | "fragment-cache": "^0.2.1",
2383 | "kind-of": "^6.0.2",
2384 | "nanomatch": "^1.2.9",
2385 | "object.pick": "^1.3.0",
2386 | "regex-not": "^1.0.0",
2387 | "snapdragon": "^0.8.1",
2388 | "to-regex": "^3.0.2"
2389 | }
2390 | },
2391 | "middie": {
2392 | "version": "4.1.0",
2393 | "resolved": "https://registry.npmjs.org/middie/-/middie-4.1.0.tgz",
2394 | "integrity": "sha512-eylPpZA+K3xO9kpDjagoPkEUkNcWV3EAo5OEz0MqsekUpT7KbnQkk8HNZkh4phx2vvOAmNNZuLRWF9lDDHPpVQ==",
2395 | "requires": {
2396 | "path-to-regexp": "^4.0.0",
2397 | "reusify": "^1.0.2"
2398 | }
2399 | },
2400 | "mime-db": {
2401 | "version": "1.40.0",
2402 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
2403 | "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==",
2404 | "optional": true
2405 | },
2406 | "mime-types": {
2407 | "version": "2.1.24",
2408 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
2409 | "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
2410 | "optional": true,
2411 | "requires": {
2412 | "mime-db": "1.40.0"
2413 | }
2414 | },
2415 | "minimatch": {
2416 | "version": "3.0.4",
2417 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
2418 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
2419 | "dev": true,
2420 | "requires": {
2421 | "brace-expansion": "^1.1.7"
2422 | }
2423 | },
2424 | "minimist": {
2425 | "version": "1.2.0",
2426 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
2427 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
2428 | },
2429 | "mixin-deep": {
2430 | "version": "1.3.2",
2431 | "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
2432 | "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
2433 | "dev": true,
2434 | "requires": {
2435 | "for-in": "^1.0.2",
2436 | "is-extendable": "^1.0.1"
2437 | },
2438 | "dependencies": {
2439 | "is-extendable": {
2440 | "version": "1.0.1",
2441 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
2442 | "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
2443 | "dev": true,
2444 | "requires": {
2445 | "is-plain-object": "^2.0.4"
2446 | }
2447 | }
2448 | }
2449 | },
2450 | "mkdirp": {
2451 | "version": "0.5.1",
2452 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
2453 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
2454 | "optional": true,
2455 | "requires": {
2456 | "minimist": "0.0.8"
2457 | },
2458 | "dependencies": {
2459 | "minimist": {
2460 | "version": "0.0.8",
2461 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
2462 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
2463 | "optional": true
2464 | }
2465 | }
2466 | },
2467 | "ms": {
2468 | "version": "2.0.0",
2469 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
2470 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
2471 | },
2472 | "nan": {
2473 | "version": "2.14.0",
2474 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
2475 | "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
2476 | "dev": true,
2477 | "optional": true
2478 | },
2479 | "nanomatch": {
2480 | "version": "1.2.13",
2481 | "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
2482 | "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
2483 | "dev": true,
2484 | "requires": {
2485 | "arr-diff": "^4.0.0",
2486 | "array-unique": "^0.3.2",
2487 | "define-property": "^2.0.2",
2488 | "extend-shallow": "^3.0.2",
2489 | "fragment-cache": "^0.2.1",
2490 | "is-windows": "^1.0.2",
2491 | "kind-of": "^6.0.2",
2492 | "object.pick": "^1.3.0",
2493 | "regex-not": "^1.0.0",
2494 | "snapdragon": "^0.8.1",
2495 | "to-regex": "^3.0.1"
2496 | }
2497 | },
2498 | "netstring": {
2499 | "version": "0.3.0",
2500 | "resolved": "https://registry.npmjs.org/netstring/-/netstring-0.3.0.tgz",
2501 | "integrity": "sha1-ho3FsgxY0/cwVTHUk2jqqr0ZtxI="
2502 | },
2503 | "nodemon": {
2504 | "version": "1.19.1",
2505 | "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.19.1.tgz",
2506 | "integrity": "sha512-/DXLzd/GhiaDXXbGId5BzxP1GlsqtMGM9zTmkWrgXtSqjKmGSbLicM/oAy4FR0YWm14jCHRwnR31AHS2dYFHrg==",
2507 | "dev": true,
2508 | "requires": {
2509 | "chokidar": "^2.1.5",
2510 | "debug": "^3.1.0",
2511 | "ignore-by-default": "^1.0.1",
2512 | "minimatch": "^3.0.4",
2513 | "pstree.remy": "^1.1.6",
2514 | "semver": "^5.5.0",
2515 | "supports-color": "^5.2.0",
2516 | "touch": "^3.1.0",
2517 | "undefsafe": "^2.0.2",
2518 | "update-notifier": "^2.5.0"
2519 | },
2520 | "dependencies": {
2521 | "debug": {
2522 | "version": "3.2.6",
2523 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
2524 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
2525 | "dev": true,
2526 | "requires": {
2527 | "ms": "^2.1.1"
2528 | }
2529 | },
2530 | "ms": {
2531 | "version": "2.1.2",
2532 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
2533 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
2534 | "dev": true
2535 | },
2536 | "supports-color": {
2537 | "version": "5.5.0",
2538 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
2539 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
2540 | "dev": true,
2541 | "requires": {
2542 | "has-flag": "^3.0.0"
2543 | }
2544 | }
2545 | }
2546 | },
2547 | "nopt": {
2548 | "version": "1.0.10",
2549 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
2550 | "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
2551 | "dev": true,
2552 | "requires": {
2553 | "abbrev": "1"
2554 | }
2555 | },
2556 | "normalize-package-data": {
2557 | "version": "2.5.0",
2558 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
2559 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
2560 | "optional": true,
2561 | "requires": {
2562 | "hosted-git-info": "^2.1.4",
2563 | "resolve": "^1.10.0",
2564 | "semver": "2 || 3 || 4 || 5",
2565 | "validate-npm-package-license": "^3.0.1"
2566 | }
2567 | },
2568 | "normalize-path": {
2569 | "version": "3.0.0",
2570 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
2571 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
2572 | "dev": true
2573 | },
2574 | "npm-run-path": {
2575 | "version": "2.0.2",
2576 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
2577 | "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
2578 | "dev": true,
2579 | "requires": {
2580 | "path-key": "^2.0.0"
2581 | }
2582 | },
2583 | "nugget": {
2584 | "version": "1.6.2",
2585 | "resolved": "https://registry.npmjs.org/nugget/-/nugget-1.6.2.tgz",
2586 | "integrity": "sha1-iMpuA7pXBqmRc/XaCQJZPWvK4Qc=",
2587 | "optional": true,
2588 | "requires": {
2589 | "debug": "^2.1.3",
2590 | "minimist": "^1.1.0",
2591 | "pretty-bytes": "^1.0.2",
2592 | "progress-stream": "^1.1.0",
2593 | "request": "^2.45.0",
2594 | "single-line-log": "^0.4.1",
2595 | "throttleit": "0.0.2"
2596 | }
2597 | },
2598 | "number-is-nan": {
2599 | "version": "1.0.1",
2600 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
2601 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
2602 | "optional": true
2603 | },
2604 | "oauth-sign": {
2605 | "version": "0.9.0",
2606 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
2607 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
2608 | "optional": true
2609 | },
2610 | "object-assign": {
2611 | "version": "4.1.1",
2612 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
2613 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
2614 | "optional": true
2615 | },
2616 | "object-copy": {
2617 | "version": "0.1.0",
2618 | "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
2619 | "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
2620 | "dev": true,
2621 | "requires": {
2622 | "copy-descriptor": "^0.1.0",
2623 | "define-property": "^0.2.5",
2624 | "kind-of": "^3.0.3"
2625 | },
2626 | "dependencies": {
2627 | "define-property": {
2628 | "version": "0.2.5",
2629 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
2630 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
2631 | "dev": true,
2632 | "requires": {
2633 | "is-descriptor": "^0.1.0"
2634 | }
2635 | },
2636 | "kind-of": {
2637 | "version": "3.2.2",
2638 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
2639 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
2640 | "dev": true,
2641 | "requires": {
2642 | "is-buffer": "^1.1.5"
2643 | }
2644 | }
2645 | }
2646 | },
2647 | "object-keys": {
2648 | "version": "0.4.0",
2649 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz",
2650 | "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=",
2651 | "optional": true
2652 | },
2653 | "object-visit": {
2654 | "version": "1.0.1",
2655 | "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
2656 | "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
2657 | "dev": true,
2658 | "requires": {
2659 | "isobject": "^3.0.0"
2660 | }
2661 | },
2662 | "object.pick": {
2663 | "version": "1.3.0",
2664 | "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
2665 | "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
2666 | "dev": true,
2667 | "requires": {
2668 | "isobject": "^3.0.1"
2669 | }
2670 | },
2671 | "p-finally": {
2672 | "version": "1.0.0",
2673 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
2674 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
2675 | "dev": true
2676 | },
2677 | "package-json": {
2678 | "version": "4.0.1",
2679 | "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz",
2680 | "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=",
2681 | "dev": true,
2682 | "requires": {
2683 | "got": "^6.7.1",
2684 | "registry-auth-token": "^3.0.1",
2685 | "registry-url": "^3.0.3",
2686 | "semver": "^5.1.0"
2687 | }
2688 | },
2689 | "parse-json": {
2690 | "version": "2.2.0",
2691 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
2692 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
2693 | "optional": true,
2694 | "requires": {
2695 | "error-ex": "^1.2.0"
2696 | }
2697 | },
2698 | "pascalcase": {
2699 | "version": "0.1.1",
2700 | "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
2701 | "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
2702 | "dev": true
2703 | },
2704 | "path-dirname": {
2705 | "version": "1.0.2",
2706 | "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
2707 | "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
2708 | "dev": true
2709 | },
2710 | "path-is-absolute": {
2711 | "version": "1.0.1",
2712 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
2713 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
2714 | "dev": true
2715 | },
2716 | "path-is-inside": {
2717 | "version": "1.0.2",
2718 | "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
2719 | "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
2720 | "dev": true
2721 | },
2722 | "path-key": {
2723 | "version": "2.0.1",
2724 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
2725 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
2726 | "dev": true
2727 | },
2728 | "path-parse": {
2729 | "version": "1.0.6",
2730 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
2731 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
2732 | "optional": true
2733 | },
2734 | "path-to-regexp": {
2735 | "version": "4.0.5",
2736 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-4.0.5.tgz",
2737 | "integrity": "sha512-l+fTaGG2N9ZRpCEUj5fG1VKdDLaiqwCIvPngpnxzREhcdobhZC4ou4w984HBu72DqAJ5CfcdV6tjqNOunfpdsQ=="
2738 | },
2739 | "path-type": {
2740 | "version": "1.1.0",
2741 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
2742 | "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
2743 | "optional": true,
2744 | "requires": {
2745 | "graceful-fs": "^4.1.2",
2746 | "pify": "^2.0.0",
2747 | "pinkie-promise": "^2.0.0"
2748 | },
2749 | "dependencies": {
2750 | "pify": {
2751 | "version": "2.3.0",
2752 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
2753 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
2754 | "optional": true
2755 | }
2756 | }
2757 | },
2758 | "performance-now": {
2759 | "version": "2.1.0",
2760 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
2761 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
2762 | "optional": true
2763 | },
2764 | "pinkie": {
2765 | "version": "2.0.4",
2766 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
2767 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
2768 | "optional": true
2769 | },
2770 | "pinkie-promise": {
2771 | "version": "2.0.1",
2772 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
2773 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
2774 | "optional": true,
2775 | "requires": {
2776 | "pinkie": "^2.0.0"
2777 | }
2778 | },
2779 | "pino": {
2780 | "version": "5.17.0",
2781 | "resolved": "https://registry.npmjs.org/pino/-/pino-5.17.0.tgz",
2782 | "integrity": "sha512-LqrqmRcJz8etUjyV0ddqB6OTUutCgQULPFg2b4dtijRHUsucaAdBgSUW58vY6RFSX+NT8963F+q0tM6lNwGShA==",
2783 | "requires": {
2784 | "fast-redact": "^2.0.0",
2785 | "fast-safe-stringify": "^2.0.7",
2786 | "flatstr": "^1.0.12",
2787 | "pino-std-serializers": "^2.4.2",
2788 | "quick-format-unescaped": "^3.0.3",
2789 | "sonic-boom": "^0.7.5"
2790 | }
2791 | },
2792 | "pino-std-serializers": {
2793 | "version": "2.4.2",
2794 | "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-2.4.2.tgz",
2795 | "integrity": "sha512-WaL504dO8eGs+vrK+j4BuQQq6GLKeCCcHaMB2ItygzVURcL1CycwNEUHTD/lHFHs/NL5qAz2UKrjYWXKSf4aMQ=="
2796 | },
2797 | "posix-character-classes": {
2798 | "version": "0.1.1",
2799 | "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
2800 | "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
2801 | "dev": true
2802 | },
2803 | "prepend-http": {
2804 | "version": "1.0.4",
2805 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
2806 | "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
2807 | "dev": true
2808 | },
2809 | "pretty-bytes": {
2810 | "version": "1.0.4",
2811 | "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz",
2812 | "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=",
2813 | "optional": true,
2814 | "requires": {
2815 | "get-stdin": "^4.0.1",
2816 | "meow": "^3.1.0"
2817 | }
2818 | },
2819 | "process-nextick-args": {
2820 | "version": "2.0.1",
2821 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
2822 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
2823 | "dev": true
2824 | },
2825 | "progress-stream": {
2826 | "version": "1.2.0",
2827 | "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz",
2828 | "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=",
2829 | "optional": true,
2830 | "requires": {
2831 | "speedometer": "~0.1.2",
2832 | "through2": "~0.2.3"
2833 | },
2834 | "dependencies": {
2835 | "isarray": {
2836 | "version": "0.0.1",
2837 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
2838 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
2839 | "optional": true
2840 | },
2841 | "readable-stream": {
2842 | "version": "1.1.14",
2843 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
2844 | "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
2845 | "optional": true,
2846 | "requires": {
2847 | "core-util-is": "~1.0.0",
2848 | "inherits": "~2.0.1",
2849 | "isarray": "0.0.1",
2850 | "string_decoder": "~0.10.x"
2851 | }
2852 | },
2853 | "string_decoder": {
2854 | "version": "0.10.31",
2855 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
2856 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
2857 | "optional": true
2858 | },
2859 | "through2": {
2860 | "version": "0.2.3",
2861 | "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz",
2862 | "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=",
2863 | "optional": true,
2864 | "requires": {
2865 | "readable-stream": "~1.1.9",
2866 | "xtend": "~2.1.1"
2867 | }
2868 | },
2869 | "xtend": {
2870 | "version": "2.1.2",
2871 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
2872 | "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
2873 | "optional": true,
2874 | "requires": {
2875 | "object-keys": "~0.4.0"
2876 | }
2877 | }
2878 | }
2879 | },
2880 | "proxy-addr": {
2881 | "version": "2.0.6",
2882 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
2883 | "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
2884 | "requires": {
2885 | "forwarded": "~0.1.2",
2886 | "ipaddr.js": "1.9.1"
2887 | }
2888 | },
2889 | "pseudomap": {
2890 | "version": "1.0.2",
2891 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
2892 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
2893 | "dev": true
2894 | },
2895 | "psl": {
2896 | "version": "1.3.0",
2897 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.0.tgz",
2898 | "integrity": "sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag==",
2899 | "optional": true
2900 | },
2901 | "pstree.remy": {
2902 | "version": "1.1.7",
2903 | "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.7.tgz",
2904 | "integrity": "sha512-xsMgrUwRpuGskEzBFkH8NmTimbZ5PcPup0LA8JJkHIm2IMUbQcpo3yeLNWVrufEYjh8YwtSVh0xz6UeWc5Oh5A==",
2905 | "dev": true
2906 | },
2907 | "punycode": {
2908 | "version": "2.1.1",
2909 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
2910 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
2911 | },
2912 | "qs": {
2913 | "version": "6.7.0",
2914 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
2915 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
2916 | },
2917 | "quick-format-unescaped": {
2918 | "version": "3.0.3",
2919 | "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-3.0.3.tgz",
2920 | "integrity": "sha512-dy1yjycmn9blucmJLXOfZDx1ikZJUi6E8bBZLnhPG5gBrVhHXx2xVyqqgKBubVNEXmx51dBACMHpoMQK/N/AXQ=="
2921 | },
2922 | "random-number": {
2923 | "version": "0.0.9",
2924 | "resolved": "https://registry.npmjs.org/random-number/-/random-number-0.0.9.tgz",
2925 | "integrity": "sha512-ipG3kRCREi/YQpi2A5QGcvDz1KemohovWmH6qGfboVyyGdR2t/7zQz0vFxrfxpbHQgPPdtVlUDaks3aikD1Ljw=="
2926 | },
2927 | "rc": {
2928 | "version": "1.2.8",
2929 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
2930 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
2931 | "dev": true,
2932 | "requires": {
2933 | "deep-extend": "^0.6.0",
2934 | "ini": "~1.3.0",
2935 | "minimist": "^1.2.0",
2936 | "strip-json-comments": "~2.0.1"
2937 | }
2938 | },
2939 | "read-pkg": {
2940 | "version": "1.1.0",
2941 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
2942 | "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
2943 | "optional": true,
2944 | "requires": {
2945 | "load-json-file": "^1.0.0",
2946 | "normalize-package-data": "^2.3.2",
2947 | "path-type": "^1.0.0"
2948 | }
2949 | },
2950 | "read-pkg-up": {
2951 | "version": "1.0.1",
2952 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
2953 | "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
2954 | "optional": true,
2955 | "requires": {
2956 | "find-up": "^1.0.0",
2957 | "read-pkg": "^1.0.0"
2958 | },
2959 | "dependencies": {
2960 | "find-up": {
2961 | "version": "1.1.2",
2962 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
2963 | "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
2964 | "optional": true,
2965 | "requires": {
2966 | "path-exists": "^2.0.0",
2967 | "pinkie-promise": "^2.0.0"
2968 | }
2969 | },
2970 | "path-exists": {
2971 | "version": "2.1.0",
2972 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
2973 | "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
2974 | "optional": true,
2975 | "requires": {
2976 | "pinkie-promise": "^2.0.0"
2977 | }
2978 | }
2979 | }
2980 | },
2981 | "readable-stream": {
2982 | "version": "2.3.6",
2983 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
2984 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
2985 | "dev": true,
2986 | "requires": {
2987 | "core-util-is": "~1.0.0",
2988 | "inherits": "~2.0.3",
2989 | "isarray": "~1.0.0",
2990 | "process-nextick-args": "~2.0.0",
2991 | "safe-buffer": "~5.1.1",
2992 | "string_decoder": "~1.1.1",
2993 | "util-deprecate": "~1.0.1"
2994 | }
2995 | },
2996 | "readdirp": {
2997 | "version": "2.2.1",
2998 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
2999 | "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
3000 | "dev": true,
3001 | "requires": {
3002 | "graceful-fs": "^4.1.11",
3003 | "micromatch": "^3.1.10",
3004 | "readable-stream": "^2.0.2"
3005 | }
3006 | },
3007 | "redent": {
3008 | "version": "1.0.0",
3009 | "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
3010 | "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
3011 | "optional": true,
3012 | "requires": {
3013 | "indent-string": "^2.1.0",
3014 | "strip-indent": "^1.0.1"
3015 | }
3016 | },
3017 | "regex-not": {
3018 | "version": "1.0.2",
3019 | "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
3020 | "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
3021 | "dev": true,
3022 | "requires": {
3023 | "extend-shallow": "^3.0.2",
3024 | "safe-regex": "^1.1.0"
3025 | }
3026 | },
3027 | "registry-auth-token": {
3028 | "version": "3.4.0",
3029 | "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz",
3030 | "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==",
3031 | "dev": true,
3032 | "requires": {
3033 | "rc": "^1.1.6",
3034 | "safe-buffer": "^5.0.1"
3035 | }
3036 | },
3037 | "registry-url": {
3038 | "version": "3.1.0",
3039 | "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
3040 | "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
3041 | "dev": true,
3042 | "requires": {
3043 | "rc": "^1.0.1"
3044 | }
3045 | },
3046 | "remove-trailing-separator": {
3047 | "version": "1.1.0",
3048 | "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
3049 | "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
3050 | "dev": true
3051 | },
3052 | "repeat-element": {
3053 | "version": "1.1.3",
3054 | "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
3055 | "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
3056 | "dev": true
3057 | },
3058 | "repeat-string": {
3059 | "version": "1.6.1",
3060 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
3061 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
3062 | "dev": true
3063 | },
3064 | "repeating": {
3065 | "version": "2.0.1",
3066 | "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
3067 | "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
3068 | "optional": true,
3069 | "requires": {
3070 | "is-finite": "^1.0.0"
3071 | }
3072 | },
3073 | "request": {
3074 | "version": "2.88.0",
3075 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
3076 | "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
3077 | "optional": true,
3078 | "requires": {
3079 | "aws-sign2": "~0.7.0",
3080 | "aws4": "^1.8.0",
3081 | "caseless": "~0.12.0",
3082 | "combined-stream": "~1.0.6",
3083 | "extend": "~3.0.2",
3084 | "forever-agent": "~0.6.1",
3085 | "form-data": "~2.3.2",
3086 | "har-validator": "~5.1.0",
3087 | "http-signature": "~1.2.0",
3088 | "is-typedarray": "~1.0.0",
3089 | "isstream": "~0.1.2",
3090 | "json-stringify-safe": "~5.0.1",
3091 | "mime-types": "~2.1.19",
3092 | "oauth-sign": "~0.9.0",
3093 | "performance-now": "^2.1.0",
3094 | "qs": "~6.5.2",
3095 | "safe-buffer": "^5.1.2",
3096 | "tough-cookie": "~2.4.3",
3097 | "tunnel-agent": "^0.6.0",
3098 | "uuid": "^3.3.2"
3099 | },
3100 | "dependencies": {
3101 | "qs": {
3102 | "version": "6.5.2",
3103 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
3104 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
3105 | "optional": true
3106 | }
3107 | }
3108 | },
3109 | "resolve": {
3110 | "version": "1.12.0",
3111 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
3112 | "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==",
3113 | "optional": true,
3114 | "requires": {
3115 | "path-parse": "^1.0.6"
3116 | }
3117 | },
3118 | "resolve-url": {
3119 | "version": "0.2.1",
3120 | "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
3121 | "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
3122 | "dev": true
3123 | },
3124 | "ret": {
3125 | "version": "0.1.15",
3126 | "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
3127 | "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
3128 | "dev": true
3129 | },
3130 | "reusify": {
3131 | "version": "1.0.4",
3132 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
3133 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
3134 | },
3135 | "rfdc": {
3136 | "version": "1.1.4",
3137 | "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz",
3138 | "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug=="
3139 | },
3140 | "safe-buffer": {
3141 | "version": "5.1.2",
3142 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
3143 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
3144 | },
3145 | "safe-regex": {
3146 | "version": "1.1.0",
3147 | "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
3148 | "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
3149 | "dev": true,
3150 | "requires": {
3151 | "ret": "~0.1.10"
3152 | }
3153 | },
3154 | "safe-regex2": {
3155 | "version": "2.0.0",
3156 | "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-2.0.0.tgz",
3157 | "integrity": "sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==",
3158 | "requires": {
3159 | "ret": "~0.2.0"
3160 | },
3161 | "dependencies": {
3162 | "ret": {
3163 | "version": "0.2.2",
3164 | "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz",
3165 | "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ=="
3166 | }
3167 | }
3168 | },
3169 | "safer-buffer": {
3170 | "version": "2.1.2",
3171 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
3172 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
3173 | "optional": true
3174 | },
3175 | "secure-json-parse": {
3176 | "version": "2.1.0",
3177 | "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.1.0.tgz",
3178 | "integrity": "sha512-GckO+MS/wT4UogDyoI/H/S1L0MCcKS1XX/vp48wfmU7Nw4woBmb8mIpu4zPBQjKlRT88/bt9xdoV4111jPpNJA=="
3179 | },
3180 | "semver": {
3181 | "version": "5.7.0",
3182 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
3183 | "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA=="
3184 | },
3185 | "semver-diff": {
3186 | "version": "2.1.0",
3187 | "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
3188 | "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
3189 | "dev": true,
3190 | "requires": {
3191 | "semver": "^5.0.3"
3192 | }
3193 | },
3194 | "semver-store": {
3195 | "version": "0.3.0",
3196 | "resolved": "https://registry.npmjs.org/semver-store/-/semver-store-0.3.0.tgz",
3197 | "integrity": "sha512-TcZvGMMy9vodEFSse30lWinkj+JgOBvPn8wRItpQRSayhc+4ssDs335uklkfvQQJgL/WvmHLVj4Ycv2s7QCQMg=="
3198 | },
3199 | "set-cookie-parser": {
3200 | "version": "2.4.6",
3201 | "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.4.6.tgz",
3202 | "integrity": "sha512-mNCnTUF0OYPwYzSHbdRdCfNNHqrne+HS5tS5xNb6yJbdP9wInV0q5xPLE0EyfV/Q3tImo3y/OXpD8Jn0Jtnjrg=="
3203 | },
3204 | "set-value": {
3205 | "version": "2.0.1",
3206 | "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
3207 | "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
3208 | "dev": true,
3209 | "requires": {
3210 | "extend-shallow": "^2.0.1",
3211 | "is-extendable": "^0.1.1",
3212 | "is-plain-object": "^2.0.3",
3213 | "split-string": "^3.0.1"
3214 | },
3215 | "dependencies": {
3216 | "extend-shallow": {
3217 | "version": "2.0.1",
3218 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
3219 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
3220 | "dev": true,
3221 | "requires": {
3222 | "is-extendable": "^0.1.0"
3223 | }
3224 | }
3225 | }
3226 | },
3227 | "shebang-command": {
3228 | "version": "1.2.0",
3229 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
3230 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
3231 | "dev": true,
3232 | "requires": {
3233 | "shebang-regex": "^1.0.0"
3234 | }
3235 | },
3236 | "shebang-regex": {
3237 | "version": "1.0.0",
3238 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
3239 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
3240 | "dev": true
3241 | },
3242 | "signal-exit": {
3243 | "version": "3.0.2",
3244 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
3245 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
3246 | },
3247 | "single-line-log": {
3248 | "version": "0.4.1",
3249 | "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-0.4.1.tgz",
3250 | "integrity": "sha1-h6VWSfdJ14PsDc2AToFA2Yc8fO4=",
3251 | "optional": true
3252 | },
3253 | "snapdragon": {
3254 | "version": "0.8.2",
3255 | "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
3256 | "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
3257 | "dev": true,
3258 | "requires": {
3259 | "base": "^0.11.1",
3260 | "debug": "^2.2.0",
3261 | "define-property": "^0.2.5",
3262 | "extend-shallow": "^2.0.1",
3263 | "map-cache": "^0.2.2",
3264 | "source-map": "^0.5.6",
3265 | "source-map-resolve": "^0.5.0",
3266 | "use": "^3.1.0"
3267 | },
3268 | "dependencies": {
3269 | "define-property": {
3270 | "version": "0.2.5",
3271 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
3272 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
3273 | "dev": true,
3274 | "requires": {
3275 | "is-descriptor": "^0.1.0"
3276 | }
3277 | },
3278 | "extend-shallow": {
3279 | "version": "2.0.1",
3280 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
3281 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
3282 | "dev": true,
3283 | "requires": {
3284 | "is-extendable": "^0.1.0"
3285 | }
3286 | }
3287 | }
3288 | },
3289 | "snapdragon-node": {
3290 | "version": "2.1.1",
3291 | "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
3292 | "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
3293 | "dev": true,
3294 | "requires": {
3295 | "define-property": "^1.0.0",
3296 | "isobject": "^3.0.0",
3297 | "snapdragon-util": "^3.0.1"
3298 | },
3299 | "dependencies": {
3300 | "define-property": {
3301 | "version": "1.0.0",
3302 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
3303 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
3304 | "dev": true,
3305 | "requires": {
3306 | "is-descriptor": "^1.0.0"
3307 | }
3308 | },
3309 | "is-accessor-descriptor": {
3310 | "version": "1.0.0",
3311 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
3312 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
3313 | "dev": true,
3314 | "requires": {
3315 | "kind-of": "^6.0.0"
3316 | }
3317 | },
3318 | "is-data-descriptor": {
3319 | "version": "1.0.0",
3320 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
3321 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
3322 | "dev": true,
3323 | "requires": {
3324 | "kind-of": "^6.0.0"
3325 | }
3326 | },
3327 | "is-descriptor": {
3328 | "version": "1.0.2",
3329 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
3330 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
3331 | "dev": true,
3332 | "requires": {
3333 | "is-accessor-descriptor": "^1.0.0",
3334 | "is-data-descriptor": "^1.0.0",
3335 | "kind-of": "^6.0.2"
3336 | }
3337 | }
3338 | }
3339 | },
3340 | "snapdragon-util": {
3341 | "version": "3.0.1",
3342 | "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
3343 | "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
3344 | "dev": true,
3345 | "requires": {
3346 | "kind-of": "^3.2.0"
3347 | },
3348 | "dependencies": {
3349 | "kind-of": {
3350 | "version": "3.2.2",
3351 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
3352 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
3353 | "dev": true,
3354 | "requires": {
3355 | "is-buffer": "^1.1.5"
3356 | }
3357 | }
3358 | }
3359 | },
3360 | "sonic-boom": {
3361 | "version": "0.7.7",
3362 | "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-0.7.7.tgz",
3363 | "integrity": "sha512-Ei5YOo5J64GKClHIL/5evJPgASXFVpfVYbJV9PILZQytTK6/LCwHvsZJW2Ig4p9FMC2OrBrMnXKgRN/OEoAWfg==",
3364 | "requires": {
3365 | "atomic-sleep": "^1.0.0",
3366 | "flatstr": "^1.0.12"
3367 | }
3368 | },
3369 | "source-map": {
3370 | "version": "0.5.7",
3371 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
3372 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
3373 | "dev": true
3374 | },
3375 | "source-map-resolve": {
3376 | "version": "0.5.2",
3377 | "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
3378 | "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
3379 | "dev": true,
3380 | "requires": {
3381 | "atob": "^2.1.1",
3382 | "decode-uri-component": "^0.2.0",
3383 | "resolve-url": "^0.2.1",
3384 | "source-map-url": "^0.4.0",
3385 | "urix": "^0.1.0"
3386 | }
3387 | },
3388 | "source-map-url": {
3389 | "version": "0.4.0",
3390 | "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
3391 | "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
3392 | "dev": true
3393 | },
3394 | "spdx-correct": {
3395 | "version": "3.1.0",
3396 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
3397 | "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
3398 | "optional": true,
3399 | "requires": {
3400 | "spdx-expression-parse": "^3.0.0",
3401 | "spdx-license-ids": "^3.0.0"
3402 | }
3403 | },
3404 | "spdx-exceptions": {
3405 | "version": "2.2.0",
3406 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
3407 | "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
3408 | "optional": true
3409 | },
3410 | "spdx-expression-parse": {
3411 | "version": "3.0.0",
3412 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
3413 | "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
3414 | "optional": true,
3415 | "requires": {
3416 | "spdx-exceptions": "^2.1.0",
3417 | "spdx-license-ids": "^3.0.0"
3418 | }
3419 | },
3420 | "spdx-license-ids": {
3421 | "version": "3.0.5",
3422 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
3423 | "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==",
3424 | "optional": true
3425 | },
3426 | "speedometer": {
3427 | "version": "0.1.4",
3428 | "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz",
3429 | "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=",
3430 | "optional": true
3431 | },
3432 | "split-string": {
3433 | "version": "3.1.0",
3434 | "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
3435 | "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
3436 | "dev": true,
3437 | "requires": {
3438 | "extend-shallow": "^3.0.0"
3439 | }
3440 | },
3441 | "sshpk": {
3442 | "version": "1.16.1",
3443 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
3444 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
3445 | "optional": true,
3446 | "requires": {
3447 | "asn1": "~0.2.3",
3448 | "assert-plus": "^1.0.0",
3449 | "bcrypt-pbkdf": "^1.0.0",
3450 | "dashdash": "^1.12.0",
3451 | "ecc-jsbn": "~0.1.1",
3452 | "getpass": "^0.1.1",
3453 | "jsbn": "~0.1.0",
3454 | "safer-buffer": "^2.0.2",
3455 | "tweetnacl": "~0.14.0"
3456 | }
3457 | },
3458 | "static-extend": {
3459 | "version": "0.1.2",
3460 | "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
3461 | "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
3462 | "dev": true,
3463 | "requires": {
3464 | "define-property": "^0.2.5",
3465 | "object-copy": "^0.1.0"
3466 | },
3467 | "dependencies": {
3468 | "define-property": {
3469 | "version": "0.2.5",
3470 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
3471 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
3472 | "dev": true,
3473 | "requires": {
3474 | "is-descriptor": "^0.1.0"
3475 | }
3476 | }
3477 | }
3478 | },
3479 | "string-similarity": {
3480 | "version": "4.0.2",
3481 | "resolved": "https://registry.npmjs.org/string-similarity/-/string-similarity-4.0.2.tgz",
3482 | "integrity": "sha512-eCsPPyoQBgY4TMpVD6DVfO7pLrimUONriaO4Xjp3WPUW0YnNLqdHgRj23xotLlqrL90eJhBeq3zdAJf2mQgfBQ=="
3483 | },
3484 | "string_decoder": {
3485 | "version": "1.1.1",
3486 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
3487 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
3488 | "requires": {
3489 | "safe-buffer": "~5.1.0"
3490 | }
3491 | },
3492 | "strip-bom": {
3493 | "version": "2.0.0",
3494 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
3495 | "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
3496 | "optional": true,
3497 | "requires": {
3498 | "is-utf8": "^0.2.0"
3499 | }
3500 | },
3501 | "strip-eof": {
3502 | "version": "1.0.0",
3503 | "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
3504 | "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
3505 | "dev": true
3506 | },
3507 | "strip-indent": {
3508 | "version": "1.0.1",
3509 | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
3510 | "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
3511 | "optional": true,
3512 | "requires": {
3513 | "get-stdin": "^4.0.1"
3514 | }
3515 | },
3516 | "strip-json-comments": {
3517 | "version": "2.0.1",
3518 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
3519 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
3520 | "dev": true
3521 | },
3522 | "term-size": {
3523 | "version": "1.2.0",
3524 | "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz",
3525 | "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=",
3526 | "dev": true,
3527 | "requires": {
3528 | "execa": "^0.7.0"
3529 | },
3530 | "dependencies": {
3531 | "cross-spawn": {
3532 | "version": "5.1.0",
3533 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
3534 | "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
3535 | "dev": true,
3536 | "requires": {
3537 | "lru-cache": "^4.0.1",
3538 | "shebang-command": "^1.2.0",
3539 | "which": "^1.2.9"
3540 | }
3541 | },
3542 | "execa": {
3543 | "version": "0.7.0",
3544 | "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
3545 | "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
3546 | "dev": true,
3547 | "requires": {
3548 | "cross-spawn": "^5.0.1",
3549 | "get-stream": "^3.0.0",
3550 | "is-stream": "^1.1.0",
3551 | "npm-run-path": "^2.0.0",
3552 | "p-finally": "^1.0.0",
3553 | "signal-exit": "^3.0.0",
3554 | "strip-eof": "^1.0.0"
3555 | }
3556 | },
3557 | "get-stream": {
3558 | "version": "3.0.0",
3559 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
3560 | "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
3561 | "dev": true
3562 | },
3563 | "lru-cache": {
3564 | "version": "4.1.5",
3565 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
3566 | "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
3567 | "dev": true,
3568 | "requires": {
3569 | "pseudomap": "^1.0.2",
3570 | "yallist": "^2.1.2"
3571 | }
3572 | },
3573 | "yallist": {
3574 | "version": "2.1.2",
3575 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
3576 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
3577 | "dev": true
3578 | }
3579 | }
3580 | },
3581 | "throttleit": {
3582 | "version": "0.0.2",
3583 | "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz",
3584 | "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=",
3585 | "optional": true
3586 | },
3587 | "timed-out": {
3588 | "version": "4.0.1",
3589 | "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
3590 | "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
3591 | "dev": true
3592 | },
3593 | "tiny-lru": {
3594 | "version": "7.0.6",
3595 | "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-7.0.6.tgz",
3596 | "integrity": "sha512-zNYO0Kvgn5rXzWpL0y3RS09sMK67eGaQj9805jlK9G6pSadfriTczzLHFXa/xcW4mIRfmlB9HyQ/+SgL0V1uow=="
3597 | },
3598 | "to-object-path": {
3599 | "version": "0.3.0",
3600 | "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
3601 | "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
3602 | "dev": true,
3603 | "requires": {
3604 | "kind-of": "^3.0.2"
3605 | },
3606 | "dependencies": {
3607 | "kind-of": {
3608 | "version": "3.2.2",
3609 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
3610 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
3611 | "dev": true,
3612 | "requires": {
3613 | "is-buffer": "^1.1.5"
3614 | }
3615 | }
3616 | }
3617 | },
3618 | "to-regex": {
3619 | "version": "3.0.2",
3620 | "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
3621 | "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
3622 | "dev": true,
3623 | "requires": {
3624 | "define-property": "^2.0.2",
3625 | "extend-shallow": "^3.0.2",
3626 | "regex-not": "^1.0.2",
3627 | "safe-regex": "^1.1.0"
3628 | }
3629 | },
3630 | "to-regex-range": {
3631 | "version": "2.1.1",
3632 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
3633 | "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
3634 | "dev": true,
3635 | "requires": {
3636 | "is-number": "^3.0.0",
3637 | "repeat-string": "^1.6.1"
3638 | }
3639 | },
3640 | "touch": {
3641 | "version": "3.1.0",
3642 | "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
3643 | "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==",
3644 | "dev": true,
3645 | "requires": {
3646 | "nopt": "~1.0.10"
3647 | }
3648 | },
3649 | "tough-cookie": {
3650 | "version": "2.4.3",
3651 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
3652 | "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
3653 | "optional": true,
3654 | "requires": {
3655 | "psl": "^1.1.24",
3656 | "punycode": "^1.4.1"
3657 | },
3658 | "dependencies": {
3659 | "punycode": {
3660 | "version": "1.4.1",
3661 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
3662 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
3663 | "optional": true
3664 | }
3665 | }
3666 | },
3667 | "trim-newlines": {
3668 | "version": "1.0.0",
3669 | "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
3670 | "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
3671 | "optional": true
3672 | },
3673 | "tunnel-agent": {
3674 | "version": "0.6.0",
3675 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
3676 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
3677 | "optional": true,
3678 | "requires": {
3679 | "safe-buffer": "^5.0.1"
3680 | }
3681 | },
3682 | "tweetnacl": {
3683 | "version": "0.14.5",
3684 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
3685 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
3686 | "optional": true
3687 | },
3688 | "undefsafe": {
3689 | "version": "2.0.2",
3690 | "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz",
3691 | "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=",
3692 | "dev": true,
3693 | "requires": {
3694 | "debug": "^2.2.0"
3695 | }
3696 | },
3697 | "union-value": {
3698 | "version": "1.0.1",
3699 | "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
3700 | "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
3701 | "dev": true,
3702 | "requires": {
3703 | "arr-union": "^3.1.0",
3704 | "get-value": "^2.0.6",
3705 | "is-extendable": "^0.1.1",
3706 | "set-value": "^2.0.1"
3707 | }
3708 | },
3709 | "unique-string": {
3710 | "version": "1.0.0",
3711 | "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz",
3712 | "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=",
3713 | "dev": true,
3714 | "requires": {
3715 | "crypto-random-string": "^1.0.0"
3716 | }
3717 | },
3718 | "unset-value": {
3719 | "version": "1.0.0",
3720 | "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
3721 | "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
3722 | "dev": true,
3723 | "requires": {
3724 | "has-value": "^0.3.1",
3725 | "isobject": "^3.0.0"
3726 | },
3727 | "dependencies": {
3728 | "has-value": {
3729 | "version": "0.3.1",
3730 | "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
3731 | "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
3732 | "dev": true,
3733 | "requires": {
3734 | "get-value": "^2.0.3",
3735 | "has-values": "^0.1.4",
3736 | "isobject": "^2.0.0"
3737 | },
3738 | "dependencies": {
3739 | "isobject": {
3740 | "version": "2.1.0",
3741 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
3742 | "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
3743 | "dev": true,
3744 | "requires": {
3745 | "isarray": "1.0.0"
3746 | }
3747 | }
3748 | }
3749 | },
3750 | "has-values": {
3751 | "version": "0.1.4",
3752 | "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
3753 | "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
3754 | "dev": true
3755 | }
3756 | }
3757 | },
3758 | "unzip-response": {
3759 | "version": "2.0.1",
3760 | "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz",
3761 | "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=",
3762 | "dev": true
3763 | },
3764 | "upath": {
3765 | "version": "1.1.2",
3766 | "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz",
3767 | "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==",
3768 | "dev": true
3769 | },
3770 | "update-notifier": {
3771 | "version": "2.5.0",
3772 | "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz",
3773 | "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==",
3774 | "dev": true,
3775 | "requires": {
3776 | "boxen": "^1.2.1",
3777 | "chalk": "^2.0.1",
3778 | "configstore": "^3.0.0",
3779 | "import-lazy": "^2.1.0",
3780 | "is-ci": "^1.0.10",
3781 | "is-installed-globally": "^0.1.0",
3782 | "is-npm": "^1.0.0",
3783 | "latest-version": "^3.0.0",
3784 | "semver-diff": "^2.0.0",
3785 | "xdg-basedir": "^3.0.0"
3786 | }
3787 | },
3788 | "uri-js": {
3789 | "version": "4.2.2",
3790 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
3791 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
3792 | "requires": {
3793 | "punycode": "^2.1.0"
3794 | }
3795 | },
3796 | "urix": {
3797 | "version": "0.1.0",
3798 | "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
3799 | "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
3800 | "dev": true
3801 | },
3802 | "url-parse-lax": {
3803 | "version": "1.0.0",
3804 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
3805 | "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
3806 | "dev": true,
3807 | "requires": {
3808 | "prepend-http": "^1.0.1"
3809 | }
3810 | },
3811 | "use": {
3812 | "version": "3.1.1",
3813 | "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
3814 | "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
3815 | "dev": true
3816 | },
3817 | "util-deprecate": {
3818 | "version": "1.0.2",
3819 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
3820 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
3821 | },
3822 | "uuid": {
3823 | "version": "3.3.2",
3824 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
3825 | "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
3826 | },
3827 | "validate-npm-package-license": {
3828 | "version": "3.0.4",
3829 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
3830 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
3831 | "optional": true,
3832 | "requires": {
3833 | "spdx-correct": "^3.0.0",
3834 | "spdx-expression-parse": "^3.0.0"
3835 | }
3836 | },
3837 | "vary": {
3838 | "version": "1.1.2",
3839 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
3840 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
3841 | },
3842 | "verror": {
3843 | "version": "1.10.0",
3844 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
3845 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
3846 | "optional": true,
3847 | "requires": {
3848 | "assert-plus": "^1.0.0",
3849 | "core-util-is": "1.0.2",
3850 | "extsprintf": "^1.2.0"
3851 | }
3852 | },
3853 | "which": {
3854 | "version": "1.3.1",
3855 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
3856 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
3857 | "dev": true,
3858 | "requires": {
3859 | "isexe": "^2.0.0"
3860 | }
3861 | },
3862 | "widest-line": {
3863 | "version": "2.0.1",
3864 | "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz",
3865 | "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==",
3866 | "dev": true,
3867 | "requires": {
3868 | "string-width": "^2.1.1"
3869 | },
3870 | "dependencies": {
3871 | "ansi-regex": {
3872 | "version": "3.0.0",
3873 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
3874 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
3875 | "dev": true
3876 | },
3877 | "string-width": {
3878 | "version": "2.1.1",
3879 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
3880 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
3881 | "dev": true,
3882 | "requires": {
3883 | "is-fullwidth-code-point": "^2.0.0",
3884 | "strip-ansi": "^4.0.0"
3885 | }
3886 | },
3887 | "strip-ansi": {
3888 | "version": "4.0.0",
3889 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
3890 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
3891 | "dev": true,
3892 | "requires": {
3893 | "ansi-regex": "^3.0.0"
3894 | }
3895 | }
3896 | }
3897 | },
3898 | "write-file-atomic": {
3899 | "version": "2.4.3",
3900 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
3901 | "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==",
3902 | "dev": true,
3903 | "requires": {
3904 | "graceful-fs": "^4.1.11",
3905 | "imurmurhash": "^0.1.4",
3906 | "signal-exit": "^3.0.2"
3907 | }
3908 | },
3909 | "xdg-basedir": {
3910 | "version": "3.0.0",
3911 | "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",
3912 | "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=",
3913 | "dev": true
3914 | }
3915 | }
3916 | }
3917 |
--------------------------------------------------------------------------------
/server/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "mediasoup-recording-server",
3 | "version": "1.0.0",
4 | "description": "",
5 | "scripts": {
6 | "dev": "nodemon -w ./main.js -w ./lib ./main.js"
7 | },
8 | "keywords": [],
9 | "author": "",
10 | "license": "ISC",
11 | "devDependencies": {
12 | "nodemon": "^1.19.1"
13 | },
14 | "dependencies": {
15 | "fastify": "^2.15.1",
16 | "fastify-cors": "^2.1.3",
17 | "fastify-formbody": "^3.1.0",
18 | "mediasoup": "^3.2.4"
19 | }
20 | }
21 |
--------------------------------------------------------------------------------