You are on page 1of 68

PROJECT

CHAT APPLICATION USING


REACT JS

i
A Web Based Chat
Application

Abhay Rawat
Sumit Beniwal
Harsh Draveria
Arpeet Rathi
DECLARATION
We, Sumit, Harsh, Abhay & Arpeet hereby declare that the project report entitled Chat
application using React js done by us under the guidance of Mr. Azar Ahmed fulfilment of
the requirements for the award of Bachelor of Computer Application.

ACKNOWLEDGEMENT

We convey our thanks to Mr Azhar ahmed for providing us necessary support and
details at the right time during the progressive reviews.

We would like to express our sincere and deep sense of gratitude to our Project
Guide Mr Azhar ahmed for his valuable guidance, suggestions and constant
encouragement paved way for the successful completion of my project work.

We wish to express our thanks to all Teaching and Non-teaching staff members of
the KCC INSTITUTE who were helpful in many ways for the completion of the
project.

….
.
..
ABSTRACT

Chat refers to the process of communicating, interacting and/or exchanging messages


over the Internet. It involves two or more individuals that communicate through a chat -
enabled service or software. Chat may be delivered through text, audio
or video communication via the Internet A chat application has basic two components,
viz server and client. A server is a computer program or a device that provides
functionality for other programs or devices. Clients who want to chat with each other
connect to the server The chat application we are going to make will be more like a
chat room, rather than a peer to peer chat. So this means that multiple users can
connect to the chat server and send their messages. Every message is broadcasted to
every connected chat user . With the rapid development of mobile phones, mobile
devices have become one of the integral part of daily activities. In recent years, chat
applications have evolved and made a major change in social media because of their
distinctive features that attract audiences. It provides real-time messaging and offers
different services including, exchange text messages, images, files and etc. Moreover, it
supports cross platforms such as Android and iOS. There are currently hundred millions
of users smartphone are using chat applications on monthly basis. There are two types
of architecture in those applications, client-server and peer-to-peer networks. In a peer-
to-peer network, there is no central server and each user has his/her own data storage.
On the contrary, there are dedicated servers and clients in a client-server network and
the data is stored on a central server[3]. Security and privacy in chat applications have a
paramount importance but few people take it seriously. In a test done by the Electronic
Frontier Foundation, most of the popular messaging applications failed to meet most
security standards. These applications might be using the conversations as an
information for certain purposes. Moreover, reading the private conversations is certainly
unacceptable in terms of privacy. Most applications only used Transport Layer Security
(TLS) for securing channel, the service provider has full access to every message
exchanged through their infrastructure . Therefore, these messages can be accessed by
attackers. Therefore to maintain protection and privacy, messages should be encrypted
from sender to receiver and no one can read messages even the service provider, in
addition to protecting the local storage of the device . In this paper, we focus on security,
privacy and speed by proposing end-to-end security which ensures only sender and
receiver can read messages without a third party. As well as storage protection and fast
transfer of messages between the parties. The main contributions of this paper are the
following: 1- Propose client-server mobile chat application which supports the status of
the communicating parties whether online or offline. - Provide a friendship request
service. 3. Secure key exchange, then calculate the session key. 4. Secure exchange of
end-to-end message 5.Analysis and test the proposed chat..

v
TABLE OF CONTENTS

TITLE PAGE NO
S.NO

1
ABSTRACT V

LIST OF FIGURES VII

3 LIST OF ABBREVATIONS VII

4 AIM
1-
1. DESCRIPTION
. BACKEND SOURCE
3. SCOPE AND OBJECTIVE
4. PROJECT OUTLINE
5. HARDWARE REQUIREMENTS
6. SOFT WARE REQUIREMENTS

5 CHAT ENGINE
1. FEATURES -3
. CHAT OBJECT
3. MESSAGE OBJECT
4. WORKING OF API

6 NETLIFY

1. ADVANTAGES 3-4
. DISADVANTAGES

7 1. Html 4-5
. CSS

8 node JS 5-8

vi
1. REQUIREMENTS
. NEEDS
3. ADVANTAGES
4. DISADVANTAGES
5. PROS AND CONS
6. BENIFIT
7. APPLICATION OF REACT-JS

9 SOURCE CODE 9-31

9 RESULT 31-34

10 CONCLUSION 34

LIST OF FIGURES

S.NO FIGURE NAME PAGE.NO

1
NODE –JS
1. ADVANTAGES 6-8
. BE NIFITS
3. PROS AND CONS
4. APPLICATIONS

4 RESULT 31-34

LIST OF ABBREVATIONS

vii
API Application Programming
Interface

JSON JAVA SCRIP OBJECT NOTATION

CSS
CASCADING STYLES SHEET

HTML
HYPER TEXT MARKUP
LANGUAGE

viii
AIM:
To create a chat Application using node js
DESCRIPTION
A chat application makes it easy to communicate with people anywhere in the world
by sending and receiving messages in real time. With a chat app, users are able to
receive the same engaging and lively interactions through custom messaging
features, just as they would in person. This also keeps users conversing on your
platform instead of looking elsewhere for a messaging solution. Whether it’s a private
chat, group chat, or large scale chat, adding personalized chat features to your app
can help ensure that your users have a memorable experience.

BACKEND - REACTJS
React (also known as React.js or ReactJS) is a free and open-source front-end
JavaScript library for building user interfaces based on UI components. It is
maintained by Meta (formerly Facebook) and a community of individual developers
and companies.React can be used as a base in the development of single-page,
mobile, or server-rendered applications with frameworks like Next.js. However, React
is only concerned with state management and rendering that state to the DOM, so
creating React applications usually requires the use of additional libraries for routing,
as well as certain client-side functionality.

PROJECT OUTLINE
User can login to the chat application using their username and password then
allowed to use the chat app. In this chat application user can send and receive text
Messages, Multimedia , create groups or chat groups for their common discussion .
chat admin is someone who creates the group who’s allowed to add any numbers
user under the group where they can share their common thoughts. After using the
chat application user can logout the chat app through the logout option.
SCOPE AND OBJECTIVE
The chat application is built using react js deployed using chat engine api , and hosted
on netlify. The main aspect is where one user can can send text ,images from one end
and the other receives the same from their end. Also user can create a chat group ,add
any number of people to their wish and share the text,images apparently the other
members of the group receives the same in the chat room.

HARDWARE REQUIREMENTS
• Windows system

• A good internet quality

SOFTWARE REQUIREMENTS
• react js

• chat chord api

• netlify to host chat app


CHAT CORD– API:
API stands for Application Programming Interface. An API is a software intermediary
that allows two applications to talk to each other APIs unlock a door to software (or
web-based data), in a way that is controlled and safe for the program. Code can then
be entered that sends requests to the receiving software, and data can be returned.
A clear example of this in action is the Google Maps API

Chat Chord is an API which makes it easy to build chat services. Building a chat from
scratch takes a lot of time, code, and is expensive. It's better to use a product instead
of writing it from scratch. We make it easy to build your chat idea in minutes.

FEATURES:

• Authenticate user
• Subscribe (connect) to incoming chats and messages
• Create chats and messages
• Add and remove people from chats
• Edit and delete chat and message data.

CHAT OBJECT:

• id (int) - Unique primary key to identify this chat


• admin (String) - Unique username of the person who created this chat
• title (String) - Optional title of this chat
• created (Datetime) - Date-time of chat creation
• people (Array) - Array of people added to this chat

MESSAGE OBJECT:

• id (int) - Unique primary key to identify this message
• sender (String) - Unique username of the person who sent this message
• text (String) - Contents of the message sent
• created (Datetime) - Date-time of message creation

WORKING OF API KEY


An application programming interface key (API key) is a unique code that is
passed in to an API to identify the calling application or user. API keys are
used to track and control how the API is being used, for example to prevent
malicious use or abuse of the API. The API key often acts as both a unique
identifier and a secret token for authentication, and is assigned a set of
access that is specific to the identity that is associated with it.
NETLIFY

Netlify is a web developer platform that multiplies productivity By unifying the elements of the
modern decoupled web, from local development to advanced edge logic, Netlify enables a 10x faster
path to much more performance, secure, and scalable websites and apps. Our bet on the Jamstack is
quickly coming true. The web is rapidly changing away from monolithic to decoupled apps, and web
developers are storming ahead with more power than ever. Netlify is built to cater to that movement,
and in just a few years we’ve on-boarded millions of developers and businesses, and are building and
serving millions of web projects daily around the globe. Fun fact: in the time it took you to read the
above, Netlify served over 600,000 requests.

ADVANTAGES:
● Netlify Is Less Expensive, and You Get a Faster Site.
● Netlify Build Enables Developers to Build With Any Integration.
● It's Easier to Launch a Site Using Netlify.

DISADVANTAGES:

● Netlify Is Less Expensive, and You Get a Faster Site.


● Netlify Build Enables Developers to Build With Any Integration.
● It's Easier to Launch a Site Using Net
HTML

HTML stands for HyperText Markup Language. It is used to design the web pages. With the help of HTML,
you can create a complete website structure. HTML is the combination of Hypertext and Markup language.
Hypertext defines the link between the web pages and markup language defines the text document within the
tag that define the structure of web pages.

Advantages :

 HTML helps to build structure of a website and is a widely used Markup language.
 It is easy to learn.
 Every browser supports HTML Language.
 HTML is light weighted and fast to load.
 Storage of big files are allowed because of the application cache feature.
 Do not get to purchase any extra software because it’s by default in every window.

Disadvantages :

 It cannot produce dynamic output alone, since it’s a static language.


 Making the structure of HTML documents becomes tough to understand.
 Errors can be costly.
 It is the time consuming as the time it consume to maintain on the
color scheme of a page and to make lists, tables and forms.
css

Cascading Style Sheets (CSS) is a style sheet language used for describing
the presentation of a document written in a mark up language such as HTML CSS is a
cornerstone technology of the World Wide Web, alongside HTML and JavaScript.

CSS is designed to enable the separation of presentation and content, including layout,
colours, and fonts This separation can improve content accessibility; provide more flexibility
and control in the specification of presentation characteristics; enable multiple web pages to
share formatting by specifying the relevant CSS in a separate .

Use
Before CSS, nearly all presentational attributes of HTML documents were contained within the
HTML markup. All font colors, background styles, element alignments, borders, and sizes had to
be explicitly described, often repeatedly, within the HTML. CSS lets authors move much of that
information to another file, the style sheet, resulting in considerably simpler HTML. And
additionally, as more and more devices are able to access responsive web pages, different
screen sizes and layouts begin to appear. Customizing a website for each device size is costly
and increasingly difficult. The modular nature of CSS means that styles can be reused in different
parts of a site or even across sites, promoting consistency and efficiency.

For example, headings ( h1 elements), sub-headings ( h2 ), sub-sub-headings ( h3 ), etc., are


defined structurally using HTML. In print and on the screen, choice
of font, size, color and emphasis for these elements is presentational.

Before CSS, document authors who wanted to assign such typographic characteristics to, say,
all h2 headings had to repeat HTML presentational markup for each occurrence of that heading
type. This made documents more complex, larger, and more error-prone and difficult to maintain.
CSS allows the separation of presentation from structure. CSS can define color, font, text
alignment, size, borders, spacing, layout and many other typographic characteristics, and can do
so independently for on-screen and printed views. CSS also defines non-visual styles, such as
reading speed and emphasis for aural text readers. The W3C has now deprecated the use of all
presentational HTML markup.[16]

For example, under pre-CSS HTML, a heading element defined with red text would be written as:

<h1><font color="red">Chapter 1.</font></h1>

Using CSS, the same element can be coded using style properties instead of HTML
presentational attributes:
<h1 style="color: red;">Chapter 1.</h1>

The advantages of this may not be immediately clear but the power of CSS becomes more
apparent when the style properties are placed in an internal style element or, even better, an
external CSS file. For example, suppose the document contains the style element:

<style>
h1 {
color: red;
}
</style>

All h1 elements in the document will then automatically become red without requiring any explicit
code. If the author later wanted to make h1 elements blue instead, this could be done by
changing the style element to:

<style>
h1 {
color: blue;
}
</style>

rather than by laboriously going through the document and changing the color for each
individual h1 element.

The styles can also be placed in an external CSS file, as described below, and loaded using
syntax similar to:

<link href="path/to/file.css" rel="stylesheet" type="text/css">

This further decouples the styling from the HTML document and makes it possible to restyle
multiple documents by simply editing a shared external CSS file.
NODE-JS

Node.js is a cross-platform, open-source JavaScript runtime environment that can run


on Windows, Linux, Unix, macOS, and more. Node.js runs on the V8 JavaScript engine, and
executes JavaScript code outside a web browser.

Node.js lets developers use JavaScript to write command line tools and for server-side scripting.
The ability to run JavaScript code on the server is often used to generate dynamic web
page content before the page is sent to the user's web browser. Consequently, Node.js
represents a "JavaScript everywhere" paradigm,[6] unifying web-application development around
a single programming language, as opposed to using different languages for the server- versus
client-side programming.

NODE JS requirements:

• HTML + CSS. No front-end dev is a stranger to HTML and CSS. ...


• JSX. In React, you never really touch HTML proper. ...
• JavaScript Fundamentals + ES6. ...
• Node + npm. ...
• Redux.

NEEDS OF NODE-JS
Node.js is an open source, a server-side script which runs on the top of Google’s
open-source scripting engine V8. Node.js is fast, lightweight and efficient. It uses
the asynchronous mode of operation, event-driven Input/Output rather than using
the traditional threads or separate threads for each process. Node.js was originally
written by Ryan Dahl in the year 2009. It is a cross-platform Javascript run-time
environment that executes Javascript code outside of a browser. Node.js uses
javascript for creating node applications or we can use any other language that
ultimately compiles to javascript (like typescript). The javascript is written in the
same way as we’d use in any client-side application. However, we need to set up
the node development environment.
Node.js allows the creation of web servers and networking tools using JavaScript and a collection
of "modules" that handle various core functionalities.[14][17][28][29][30] Modules are provided for file
system I/O, networking (DNS, HTTP, TCP, TLS/SSL or UDP), binary data
(buffers), cryptography functions, data streams and other core functions.[17][29][31] Node.js's modules
use an API designed to reduce the complexity of writing server applications.[17][29]

JavaScript is the only language that Node.js supports natively, but many compile-to-
JS languages are available.[32] As a result, Node.js applications can be written in CoffeeScript,
[33]
Dart, TypeScript, ClojureScript and others.

Node.js is primarily used to build network programs such as web servers.[28] The most significant
difference between Node.js and PHP is that most functions in PHP block until completion
(commands execute only after previous commands finish), while Node.js functions are non-
blocking (commands execute concurrently or even in parallel,[34][35][improper synthesis?] and use callbacks to
signal completion or failure).[28]

Node.js is officially supported by Linux, macOS and Microsoft Windows 8.1 and Server 2012
(and later),[3] with Tier 2 support for SmartOS and IBM AIX and experimental support
for FreeBSD. OpenBSD also works, and LTS versions are available for IBM i (AS/400).[36] The
source code may also be built on similar operating systems that are not officially supported, such
as NonStop OS[37] and Unix servers.

Platform architecture[edit]
Node.js enables development of fast web servers in JavaScript using event-driven programming.
[17]
Developers can create scalable servers without using threading by using a simplified model
that uses callbacks to signal the completion of a task.[17][page needed] Node.js connects the ease of a
scripting language (JavaScript) with the power of Unix network programming. [17]

Node.js was built on top of Google's V8 JavaScript engine since it was open-sourced under
the BSD license, and it contains comprehensive support for fundamental protocols such
as HTTP, DNS and TCP.[14] JavaScript's existing popularity made Node.js accessible to the web-
development community.[14]

Industry support[edit]
There are thousands of open-source libraries for Node.js, most of which are hosted on the npm
website. Multiple developer conferences and events are held that support the Node.js
community, including NodeConf, Node Interactive and Node Summit, as well as a number of
regional events.

The open-source community has developed web frameworks to accelerate the development of
applications. Such frameworks include Connect, Express.js, Socket.IO, Feathers.js, Koa.js,
Hapi.js, Sails.js, Meteor and Derby.[17][38] Various packages have also been created for interfacing
with other languages or runtime environments such as Microsoft .NET.[39]

Modern desktop IDEs provide editing and debugging features specifically for Node.js
applications. Such IDEs include Atom, Brackets, JetBrains WebStorm,[40][41] Microsoft Visual
Studio (with Node.js Tools for Visual Studio,[42] or TypeScript with Node definitions[43][44][45]
[46]
), NetBeans,[47] Nodeclipse Enide Studio[48] (Eclipse-based) and Visual Studio Code.[49][50] Some
web-based IDEs also support Node.js, such as Codeanywhere, Codenvy, Cloud9 IDE, Koding
and the visual flow editor in Node-RED.

Node.js is supported across a number of cloud-hosting platforms such as Jelastic, Google Cloud
Platform, AWS Elastic Beanstalk, Azure Web Apps andJoyent.
ADVANTAGES:

● Makes JavaScript coding easier.


● Extremely competent.
● Excellent cross-platform support.
● Handles dependencies.
● Template designing made easy.
● Provides amazing developer tools.
● UI focused designs.
● Easy to adopt.
DISADVANTAGES:

• The high pace of development. The high pace of development has an advantage and
disadvantage both. ...
• Poor Documentation. It is another cons which are common for constantly
updating technologies. ...
• View Part. Node JS Covers only the UI Layers of the app and nothing else. ...
• JSX as a barrier.

PROS AND CONS

BENIFITS OF NODE-JS

• Performance
• Code reusability
• Easy to learn easy and quick testing
• Native app development
• Server side rendering
STEPS TO USE CHHAT APP
 Visit the application at - https://localhost:3000

 Enter the username and select Chat Rooms

 Click join now

 Now enter another username and select the same


Chat Rooms as in step 2 from another user account
 Now you can chat with each other
SOURCE CODE:

Main.js :
const chatForm = document.getElementById('chat-form');
const chatMessages = document.querySelector('.chat-messages');
const roomName = document.getElementById('room-name');
const userList = document.getElementById('users');

// Get username and room from URL


const { username, room } = Qs.parse(location.search, {
ignoreQueryPrefix: true,
});

const socket = io();

// Join chatroom
socket.emit('joinRoom', { username, room });

// Get room and users


socket.on('roomUsers', ({ room, users }) => {
outputRoomName(room);
outputUsers(users);
});

// Message from server


socket.on('message', (message) => {
console.log(message);
outputMessage(message);

// Scroll down
chatMessages.scrollTop = chatMessages.scrollHeight;
});

// Message submit
chatForm.addEventListener('submit', (e) => {
e.preventDefault();

// Get message text


let msg = e.target.elements.msg.value;

msg = msg.trim();

if (!msg) {
return false;
}

// Emit message to server


socket.emit('chatMessage', msg);

// Clear input
e.target.elements.msg.value = '';
e.target.elements.msg.focus();
});

// Output message to DOM


function outputMessage(message) {
const div = document.createElement('div');
div.classList.add('message');
const p = document.createElement('p');
p.classList.add('meta');
p.innerText = message.username;
p.innerHTML += `: <span>${message.time}</span>`;
div.appendChild(p);
const para = document.createElement('p');
para.classList.add('text');
para.innerText = message.text;
div.appendChild(para);
document.querySelector('.chat-messages').appendChild(div);
}

// Add room name to DOM


function outputRoomName(room) {
roomName.innerText = room;
}

// Add users to DOM


function outputUsers(users) {
userList.innerHTML = '';
users.forEach((user) => {
const li = document.createElement('li');
li.innerText = user.username;
userList.appendChild(li);
});
}

//Prompt the user before leave chat room


document.getElementById('leave-btn').addEventListener('click', () =>
{
const leaveRoom = confirm('Are you sure you want to leave this
chatroom?');
if (leaveRoom) {
window.location = '../index.html';
} else {
}
});

CSS:
@import url("https://fonts.googleapis.com/css?
family=Roboto&display=swap");

:root {
--light-color: #f9f9f9;
}

*{
box-sizing: border-box;
margin: 0;
padding: 0;
}

body {
font-family: "Roboto", sans-serif;
font-size: 16px;
background: var(--light-color);
margin: 20px;
}

ul {
list-style: none;
}

a{
text-decoration: none;
}

.btn {
cursor: pointer;
padding: 5px 21px;
background: #ef483c;
color: #ffffff;
border: 0;
font-size: 17px;
}

.leavebtn {
cursor: pointer;
border-radius: 15px;
padding: 5px 21px;
background: #ef483c;
color: #ffffff;
border: 0;
font-size: 17px;
}

/* Chat Page */

.chat-container {
max-width: 1100px;
background: #fff;
margin: 30px auto;
overflow: hidden;
}

.chat-header {
background: #717171;
color: #fff;
padding: 15px;
display: flex;
align-items: center;
justify-content: space-between;
}

.chat-main {
display: grid;
grid-template-columns: 1fr 3fr;
}

.chat-sidebar {
background: #797979f2;
color: #fff;
padding: 15px 26px 65px;
overflow-y: scroll;
}

.chat-sidebar h2 {
font-size: 17px;
background: rgba(0, 0, 0, 0.21);
padding: 10px;
margin-bottom: 20px;
}

.chat-sidebar h3 {
margin-bottom: 15px;
}

.chat-sidebar ul li {
padding: 10px 0;
}

.chat-messages {
padding: 30px;
max-height: 500px;
overflow-y: scroll;
}

.chat-messages .message {
padding: 10px;
margin-bottom: 15px;
background-color: #e4e7ff;
border-radius: 7px;
overflow-wrap: break-word;
}

.chat-messages .message .meta {


font-size: 15px;
color: #f44336;
opacity: 0.7;
margin-bottom: 7px;
}

.chat-messages .message .meta span {


color: #777;
}

.chat-form-container {
padding: 20px 30px;
background-color: #717171;
}

.chat-form-container form {
display: flex;
}
.chat-form-container input[type="text"] {
font-size: 16px;
padding: 5px;
height: 40px;
flex: 1;
}

/* Join Page */
.join-container {
max-width: 500px;
margin: 80px auto;
color: #fff;
}

.join-header {
text-align: center;
padding: 20px;
background: #717171;
}

.join-main {
padding: 30px 40px;
background: #5a5a5a;
}

.join-main p {
margin-bottom: 20px;
}

.join-main .form-control {
margin-bottom: 20px;
}

.join-main label {
display: block;
margin-bottom: 5px;
}

.join-main input[type="text"] {
font-size: 16px;
padding: 5px;
height: 40px;
width: 100%;
}
.join-main select {
font-size: 16px;
padding: 5px;
height: 40px;
width: 100%;
}

.join-main .btn {
margin-top: 20px;
width: 100%;
}

@media (max-width: 700px) {


.chat-main {
display: block;
}

.chat-sidebar {
display: none;
}
}
MESSAGES.JS :
const moment = require('moment');

function formatMessage(username, text) {


return {
username,
text,
time: moment().format('h:mm a')
};
}

module.exports = formatMessage;

USERS.JS :
const users = [];

// Join user to chat


function userJoin(id, username, room) {
const user = { id, username, room };

users.push(user);

return user;
}

// Get current user


function getCurrentUser(id) {
return users.find(user => user.id === id);
}

// User leaves chat


function userLeave(id) {
const index = users.findIndex(user => user.id === id);

if (index !== -1) {


return users.splice(index, 1)[0];
}
}

// Get room users


function getRoomUsers(room) {
return users.filter(user => user.room === room);
}

module.exports = {
userJoin,
getCurrentUser,
userLeave,
getRoomUsers
};

JSON FILES:
{
"name": "chatcord",
"version": "1.0.0",
"description": "Realtime chat app with rooms",
"main": "server.js",
"scripts": {
"start": "node server",
"dev": "nodemon server"
},
"author": "Brad Traversy",
"license": "MIT",
"dependencies": {
"express": "^4.17.1",
"moment": "^2.24.0",
"socket.io": "^2.4.0"
},
"devDependencies": {
"nodemon": "^2.0.2"
}
}
PACKAGE -LOCK

{
"name": "chatcord",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"abbrev": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-
1.1.1.tgz",
"integrity":
"sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTN
NfNtAfZ9/1RtehkszU9qcTii0Q==",
"dev": true
},
"accepts": {
"version": "1.3.7",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-
1.3.7.tgz",
"integrity": "sha512-
Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtau
xh1hOxNgIf5bv7dQpA==",
"requires": {
"mime-types": "~2.1.24",
"negotiator": "0.6.2"
}
},
"after": {
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/after/-/after-
0.8.2.tgz",
"integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8="
},
"ansi-align": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ansi-align/-/ansi-
align-2.0.0.tgz",
"integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=",
"dev": true,
"requires": {
"string-width": "^2.0.0"
}
},
"ansi-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-
regex-3.0.0.tgz",
"integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
"dev": true
},
"ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-
styles-3.2.1.tgz",
"integrity":
"sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1F
lyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
"color-convert": "^1.9.0"
}
},
"anymatch": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-
3.1.1.tgz",
"integrity": "sha512-
mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2
D6LNh9jkBCeyLktzjg==",
"dev": true,
"requires": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
}
},
"array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-
flatten-1.1.1.tgz",
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
},
"arraybuffer.slice": {
"version": "0.0.7",
"resolved":
"https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-
0.0.7.tgz",
"integrity": "sha512-
wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQ
A/qgTJ+8ANR3acjrog=="
},
"backo2": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/backo2/-/backo2-
1.0.2.tgz",
"integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc="
},
"balanced-match": {
"version": "1.0.0",
"resolved":
"https://registry.npmjs.org/balanced-match/-/balanced-match-
1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"dev": true
},
"base64-arraybuffer": {
"version": "0.1.4",
"resolved":
"https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-
0.1.4.tgz",
"integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI="
},
"base64id": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/base64id/-/base64id-
2.0.0.tgz",
"integrity":
"sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530
PEERE6/WyEg3lsuyw4GHlPZHog=="
},
"binary-extensions": {
"version": "2.0.0",
"resolved":
"https://registry.npmjs.org/binary-extensions/-/binary-extensions-
2.0.0.tgz",
"integrity":
"sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL
05ffWgnRSf/DXv+WrUAVr93/ow==",
"dev": true
},
"blob": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/blob/-/blob-
0.0.5.tgz",
"integrity": "sha512-
gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/
bUYNmHTGJx/UEmn6doAvvuig=="
},
"body-parser": {
"version": "1.19.0",
"resolved": "https://registry.npmjs.org/body-parser/-/body-
parser-1.19.0.tgz",
"integrity": "sha512-
dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK
22krhrj1+rgzifNCsw==",
"requires": {
"bytes": "3.1.0",
"content-type": "~1.0.4",
"debug": "2.6.9",
"depd": "~1.1.2",
"http-errors": "1.7.2",
"iconv-lite": "0.4.24",
"on-finished": "~2.3.0",
"qs": "6.7.0",
"raw-body": "2.4.0",
"type-is": "~1.6.17"
}
},
"boxen": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/boxen/-/boxen-
1.3.0.tgz",
"integrity": "sha512-
TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCe
hscshe45f+C1TBZbLw==",
"dev": true,
"requires": {
"ansi-align": "^2.0.0",
"camelcase": "^4.0.0",
"chalk": "^2.0.1",
"cli-boxes": "^1.0.0",
"string-width": "^2.0.0",
"term-size": "^1.2.0",
"widest-line": "^2.0.0"
}
},
"brace-expansion": {
"version": "1.1.11",
"resolved":
"https://registry.npmjs.org/brace-expansion/-/brace-expansion-
1.1.11.tgz",
"integrity":
"sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEB
l0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"braces": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-
3.0.2.tgz",
"integrity": "sha512-
b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+
lBQpZMP1k8l+78Ha0A==",
"dev": true,
"requires": {
"fill-range": "^7.0.1"
}
},
"bytes": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-
3.1.0.tgz",
"integrity": "sha512-
zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopb
zwv8f+wZcVzfVTI2Dg=="
},
"camelcase": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-
4.1.0.tgz",
"integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
"dev": true
},
"capture-stack-trace": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/capture-stack-
trace/-/capture-stack-trace-1.0.1.tgz",
"integrity":
"sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnK
ZV0aiJDgzmWqqkV/g7JD+DW0qw==",
"dev": true
},
"chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-
2.4.2.tgz",
"integrity":
"sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjk
Cb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0"
}
},
"chokidar": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-
3.3.1.tgz",
"integrity": "sha512-
4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioA
d0rc6NlHUOEaWkTeqg==",
"dev": true,
"requires": {
"anymatch": "~3.1.1",
"braces": "~3.0.2",
"fsevents": "~2.1.2",
"glob-parent": "~5.1.0",
"is-binary-path": "~2.1.0",
"is-glob": "~4.0.1",
"normalize-path": "~3.0.0",
"readdirp": "~3.3.0"
}
},
"ci-info": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-
1.6.0.tgz",
"integrity": "sha512-
vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfv
SZd84GmHko+MxFQU2A==",
"dev": true
},
"cli-boxes": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-
1.0.0.tgz",
"integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=",
"dev": true
},
"color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-
convert-1.9.3.tgz",
"integrity": "sha512-
QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/
SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
"requires": {
"color-name": "1.1.3"
}
},
"color-name": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-
name-1.1.3.tgz",
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
"dev": true
},
"component-bind": {
"version": "1.0.0",
"resolved":
"https://registry.npmjs.org/component-bind/-/component-bind-
1.0.0.tgz",
"integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E="
},
"component-emitter": {
"version": "1.3.0",
"resolved":
"https://registry.npmjs.org/component-emitter/-/component-emitter-
1.3.0.tgz",
"integrity":
"sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r9
0uNb+SESBuE0QYoB90YdfatsRg=="
},
"component-inherit": {
"version": "0.0.3",
"resolved":
"https://registry.npmjs.org/component-inherit/-/component-inherit-
0.0.3.tgz",
"integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM="
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-
map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
},
"configstore": {
"version": "3.1.2",
"resolved":
"https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz",
"integrity": "sha512-
vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk
7h9od5Og0kxx4zUXmw==",
"dev": true,
"requires": {
"dot-prop": "^4.1.0",
"graceful-fs": "^4.1.2",
"make-dir": "^1.0.0",
"unique-string": "^1.0.0",
"write-file-atomic": "^2.0.0",
"xdg-basedir": "^3.0.0"
}
},
"content-disposition": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/content-
disposition/-/content-disposition-0.5.3.tgz",
"integrity": "sha512-
ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqL
rhT0qEYFcWng8z1z0g==",
"requires": {
"safe-buffer": "5.1.2"
}
},
"content-type": {
"version": "1.0.4",
"resolved":
"https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
"integrity": "sha512-
hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/
tvIG/tUc9mOUJiPBhPXA=="
},
"cookie": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-
0.4.0.tgz",
"integrity": "sha512-
+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/
W6ZaPDOUbnjOt/99w66zk+l1Xg=="
},
"cookie-signature": {
"version": "1.0.6",
"resolved":
"https://registry.npmjs.org/cookie-signature/-/cookie-signature-
1.0.6.tgz",
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
},
"create-error-class": {
"version": "3.0.2",
"resolved":
"https://registry.npmjs.org/create-error-class/-/create-error-class-
3.0.2.tgz",
"integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=",
"dev": true,
"requires": {
"capture-stack-trace": "^1.0.0"
}
},
"cross-spawn": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-
spawn-5.1.0.tgz",
"integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
"dev": true,
"requires": {
"lru-cache": "^4.0.1",
"shebang-command": "^1.2.0",
"which": "^1.2.9"
}
},
"crypto-random-string": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/crypto-random-
string/-/crypto-random-string-1.0.0.tgz",
"integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=",
"dev": true
},
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-
2.6.9.tgz",
"integrity": "sha512-
bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/
E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
"ms": "2.0.0"
}
},
"deep-extend": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-
extend-0.6.0.tgz",
"integrity":
"sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWs
m2XEMrNIEtWR64sY1LEKD2vAOA==",
"dev": true
},
"depd": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/depd/-/depd-
1.1.2.tgz",
"integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
},
"destroy": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-
1.0.4.tgz",
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
},
"dot-prop": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-
4.2.0.tgz",
"integrity": "sha512-
tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/
mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
"dev": true,
"requires": {
"is-obj": "^1.0.0"
}
},
"duplexer3": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-
0.1.4.tgz",
"integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
"dev": true
},
"ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-
1.1.1.tgz",
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
},
"encodeurl": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-
1.0.2.tgz",
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
},
"engine.io": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-
3.5.0.tgz",
"integrity": "sha512-
21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/
OCL7nkfRaOui2ZCJloGznGA==",
"requires": {
"accepts": "~1.3.4",
"base64id": "2.0.0",
"cookie": "~0.4.1",
"debug": "~4.1.0",
"engine.io-parser": "~2.2.0",
"ws": "~7.4.2"
},
"dependencies": {
"cookie": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-
0.4.1.tgz",
"integrity": "sha512-
ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+
wF8zELf3dFNl/kxkUA=="
},
"debug": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-
4.1.1.tgz",
"integrity":
"sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256e
hJCkX+XRQm16eZLqLNS8RSZXZw==",
"requires": {
"ms": "^2.1.1"
}
},
"ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-
2.1.3.tgz",
"integrity":
"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/
XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
}
}
},
"engine.io-client": {
"version": "3.5.0",
"resolved":
"https://registry.npmjs.org/engine.io-client/-/engine.io-client-
3.5.0.tgz",
"integrity":
"sha512-12wPRfMrugVw/DNyJk34GQ5vIVArEcVMXWugQGGuw2XxUSztFNmJggZmv8IZ
lLyEdnpO1QB9LkcjeWewO2vxtA==",
"requires": {
"component-emitter": "~1.3.0",
"component-inherit": "0.0.3",
"debug": "~3.1.0",
"engine.io-parser": "~2.2.0",
"has-cors": "1.1.0",
"indexof": "0.0.1",
"parseqs": "0.0.6",
"parseuri": "0.0.6",
"ws": "~7.4.2",
"xmlhttprequest-ssl": "~1.5.4",
"yeast": "0.1.2"
},
"dependencies": {
"debug": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-
3.1.0.tgz",
"integrity": "sha512-
OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDsl
f55723cKPUOGSmMY3g==",
"requires": {
"ms": "2.0.0"
}
}
}
},
"engine.io-parser": {
"version": "2.2.1",
"resolved":
"https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-
2.2.1.tgz",
"integrity":
"sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4
ZLkpahtDGZgtr3zLovanJghPqg==",
"requires": {
"after": "0.8.2",
"arraybuffer.slice": "~0.0.7",
"base64-arraybuffer": "0.1.4",
"blob": "0.0.5",
"has-binary2": "~1.0.2"
}
},
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-
html-1.0.3.tgz",
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
},
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-
regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
"dev": true
},
"etag": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/etag/-/etag-
1.8.1.tgz",
"integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
},
"execa": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/execa/-/execa-
0.7.0.tgz",
"integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
"dev": true,
"requires": {
"cross-spawn": "^5.0.1",
"get-stream": "^3.0.0",
"is-stream": "^1.1.0",
"npm-run-path": "^2.0.0",
"p-finally": "^1.0.0",
"signal-exit": "^3.0.0",
"strip-eof": "^1.0.0"
}
},
"express": {
"version": "4.17.1",
"resolved": "https://registry.npmjs.org/express/-/express-
4.17.1.tgz",
"integrity":
"sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrr
xBqM7VoeUVqgb27xlEMXTnYt4g==",
"requires": {
"accepts": "~1.3.7",
"array-flatten": "1.1.1",
"body-parser": "1.19.0",
"content-disposition": "0.5.3",
"content-type": "~1.0.4",
"cookie": "0.4.0",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "~1.1.2",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"finalhandler": "~1.1.2",
"fresh": "0.5.2",
"merge-descriptors": "1.0.1",
"methods": "~1.1.2",
"on-finished": "~2.3.0",
"parseurl": "~1.3.3",
"path-to-regexp": "0.1.7",
"proxy-addr": "~2.0.5",
"qs": "6.7.0",
"range-parser": "~1.2.1",
"safe-buffer": "5.1.2",
"send": "0.17.1",
"serve-static": "1.14.1",
"setprototypeof": "1.1.1",
"statuses": "~1.5.0",
"type-is": "~1.6.18",
"utils-merge": "1.0.1",
"vary": "~1.1.2"
}
},
"fill-range": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-
range-7.0.1.tgz",
"integrity": "sha512-
qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oq
kSg9ir6jaLWJ2USVpQ==",
"dev": true,
"requires": {
"to-regex-range": "^5.0.1"
}
},
"finalhandler": {
"version": "1.1.2",
"resolved":
"https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
"integrity": "sha512-
aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6a
rUviZGGJsBg6z0zsWA==",
"requires": {
"debug": "2.6.9",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"on-finished": "~2.3.0",
"parseurl": "~1.3.3",
"statuses": "~1.5.0",
"unpipe": "~1.0.0"
}
},
"forwarded": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-
0.1.2.tgz",
"integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
},
"fresh": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-
0.5.2.tgz",
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
},
"fsevents": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-
2.1.2.tgz",
"integrity": "sha512-
R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3
EYPPJ0dOOjvx32ldZA==",
"dev": true,
"optional": true
},
"get-stream": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-
stream-3.0.0.tgz",
"integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
"dev": true
},
"glob-parent": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-
parent-5.1.1.tgz",
"integrity": "sha512-
FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/
WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
"dev": true,
"requires": {
"is-glob": "^4.0.1"
}
},
"global-dirs": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/global-dirs/-/global-
dirs-0.1.1.tgz",
"integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=",
"dev": true,
"requires": {
"ini": "^1.3.4"
}
},
"got": {
"version": "6.7.1",
"resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
"integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
"dev": true,
"requires": {
"create-error-class": "^3.0.0",
"duplexer3": "^0.1.4",
"get-stream": "^3.0.0",
"is-redirect": "^1.0.0",
"is-retry-allowed": "^1.0.0",
"is-stream": "^1.0.0",
"lowercase-keys": "^1.0.0",
"safe-buffer": "^5.0.1",
"timed-out": "^4.0.0",
"unzip-response": "^2.0.1",
"url-parse-lax": "^1.0.0"
}
},
"graceful-fs": {
"version": "4.2.3",
"resolved":
"https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
"integrity": "sha512-
a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yf
TCj4Vuyy3mSJytDWRQ==",
"dev": true
},
"has-binary2": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-binary2/-/has-
binary2-1.0.3.tgz",
"integrity": "sha512-
G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtq
qNU+L3SL50vzZhXOnw==",
"requires": {
"isarray": "2.0.1"
}
},
"has-cors": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/has-cors/-/has-cors-
1.1.0.tgz",
"integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk="
},
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-
3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
"http-errors": {
"version": "1.7.2",
"resolved": "https://registry.npmjs.org/http-errors/-/http-
errors-1.7.2.tgz",
"integrity":
"sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNao
qcoFVI4lQJ5plg63TvGfRSDCRg==",
"requires": {
"depd": "~1.1.2",
"inherits": "2.0.3",
"setprototypeof": "1.1.1",
"statuses": ">= 1.5.0 < 2",
"toidentifier": "1.0.0"
}
},
"iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-
lite-0.4.24.tgz",
"integrity": "sha512-
v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhC
L1HwLI21bEqdpj8/rA==",
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
},
"ignore-by-default": {
"version": "1.0.1",
"resolved":
"https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-
1.0.1.tgz",
"integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=",
"dev": true
},
"import-lazy": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/import-lazy/-/import-
lazy-2.1.0.tgz",
"integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
"dev": true
},
"imurmurhash": {
"version": "0.1.4",
"resolved":
"https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
"integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
"dev": true
},
"indexof": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/indexof/-/indexof-
0.0.1.tgz",
"integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
},
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-
2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
"ini": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
"integrity":
"sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEY
S9EhHBb2qacRUMtC7svLwe0lcw==",
"dev": true
},
"ipaddr.js": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-
1.9.1.tgz",
"integrity":
"sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3
R+akZ6R/w18ZlXSHBYXiYUPO3g=="
},
"is-binary-path": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-
binary-path-2.1.0.tgz",
"integrity":
"sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZ
TjWy725IfelLeVcEM97mmtRGXw==",
"dev": true,
"requires": {
"binary-extensions": "^2.0.0"
}
},
"is-ci": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/is-ci/-/is-ci-
1.2.1.tgz",
"integrity": "sha512-
s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhb
ypvf5yyRw/VXW1IiWg==",
"dev": true,
"requires": {
"ci-info": "^1.5.0"
}
},
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-
extglob-2.1.1.tgz",
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
"dev": true
},
"is-fullwidth-code-point": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-
point/-/is-fullwidth-code-point-2.0.0.tgz",
"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
"dev": true
},
"is-glob": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-
4.0.1.tgz",
"integrity":
"sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafx
J/LdH79LLs2Kfrn85TLKyA7BUg==",
"dev": true,
"requires": {
"is-extglob": "^2.1.1"
}
},
"is-installed-globally": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/is-installed-
globally/-/is-installed-globally-0.1.0.tgz",
"integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=",
"dev": true,
"requires": {
"global-dirs": "^0.1.0",
"is-path-inside": "^1.0.0"
}
},
"is-npm": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-npm/-/is-npm-
1.0.0.tgz",
"integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=",
"dev": true
},
"is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-
7.0.0.tgz",
"integrity": "sha512-
41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGv
Np6NZWZUBlbGXYxxng==",
"dev": true
},
"is-obj": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-obj/-/is-obj-
1.0.1.tgz",
"integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
"dev": true
},
"is-path-inside": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-path-inside/-/is-
path-inside-1.0.1.tgz",
"integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
"dev": true,
"requires": {
"path-is-inside": "^1.0.1"
}
},
"is-redirect": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-redirect/-/is-
redirect-1.0.0.tgz",
"integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=",
"dev": true
},
"is-retry-allowed": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-
retry-allowed-1.2.0.tgz",
"integrity": "sha512-
RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311
gVU137K8Ei55/zVJRg==",
"dev": true
},
"is-stream": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-
1.1.0.tgz",
"integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
"dev": true
},
"isarray": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-
2.0.1.tgz",
"integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4="
},
"isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-
2.0.0.tgz",
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
"dev": true
},
"latest-version": {
"version": "3.1.0",
"resolved":
"https://registry.npmjs.org/latest-version/-/latest-version-
3.1.0.tgz",
"integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=",
"dev": true,
"requires": {
"package-json": "^4.0.0"
}
},
"lowercase-keys": {
"version": "1.0.1",
"resolved":
"https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-
1.0.1.tgz",
"integrity": "sha512-
G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0
JTG4icfZQH+xPyh8VA==",
"dev": true
},
"lru-cache": {
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-
4.1.5.tgz",
"integrity":
"sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCo
JiRKs+1bSpFHVgQxvJ17F2li5g==",
"dev": true,
"requires": {
"pseudomap": "^1.0.2",
"yallist": "^2.1.2"
}
},
"make-dir": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-
1.3.0.tgz",
"integrity": "sha512-
2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiU
WAYQRbxa7vKn34s5sQ==",
"dev": true,
"requires": {
"pify": "^3.0.0"
}
},
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-
typer-0.3.0.tgz",
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
},
"merge-descriptors": {
"version": "1.0.1",
"resolved":
"https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-
1.0.1.tgz",
"integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
},
"methods": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/methods/-/methods-
1.1.2.tgz",
"integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
},
"mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-
1.6.0.tgz",
"integrity": "sha512-
x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc
70j2EbeTFRsrswaQeg=="
},
"mime-db": {
"version": "1.43.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-
1.43.0.tgz",
"integrity": "sha512-
+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1A
rTVFUva8sAul1NzRzQ=="
},
"mime-types": {
"version": "2.1.26",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-
types-2.1.26.tgz",
"integrity": "sha512-
01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/
MbEhO/dh5aZ5sNj/dWQ==",
"requires": {
"mime-db": "1.43.0"
}
},
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-
3.0.4.tgz",
"integrity": "sha512-
yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4
hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-
1.2.5.tgz",
"integrity": "sha512-
FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qt
J8uiZ+PUxkDWcgIXLw==",
"dev": true
},
"moment": {
"version": "2.24.0",
"resolved": "https://registry.npmjs.org/moment/-/moment-
2.24.0.tgz",
"integrity":
"sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5
Vw4B9S446EtIhodAzkFCcR4dQg=="
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
"negotiator": {
"version": "0.6.2",
"resolved":
"https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
"integrity":
"sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kf
F574pFQI7mum2AUqDidoKqcTOw=="
},
"nodemon": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/nodemon/-/nodemon-
2.0.2.tgz",
"integrity": "sha512-
GWhYPMfde2+M0FsHnggIHXTqPDHXia32HRhh6H0d75Mt9FKUoCBvumNHr7LdrpPBTKxs
WmIEOjoN+P4IU6Hcaw==",
"dev": true,
"requires": {
"chokidar": "^3.2.2",
"debug": "^3.2.6",
"ignore-by-default": "^1.0.1",
"minimatch": "^3.0.4",
"pstree.remy": "^1.1.7",
"semver": "^5.7.1",
"supports-color": "^5.5.0",
"touch": "^3.1.0",
"undefsafe": "^2.0.2",
"update-notifier": "^2.5.0"
},
"dependencies": {
"debug": {
"version": "3.2.6",
"resolved": "https://registry.npmjs.org/debug/-/debug-
3.2.6.tgz",
"integrity": "sha512-
mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyE
KA1hsCId6DIhgITtWQ==",
"dev": true,
"requires": {
"ms": "^2.1.1"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-
2.1.2.tgz",
"integrity": "sha512-
sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM
0b+adUTEvbs1PEaH2w==",
"dev": true
}
}
},
"nopt": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-
1.0.10.tgz",
"integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
"dev": true,
"requires": {
"abbrev": "1"
}
},
"normalize-path": {
"version": "3.0.0",
"resolved":
"https://registry.npmjs.org/normalize-path/-/normalize-path-
3.0.0.tgz",
"integrity": "sha512-
6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2
Pnb/mD4WYojCRwcwLA==",
"dev": true
},
"npm-run-path": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-
run-path-2.0.2.tgz",
"integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
"dev": true,
"requires": {
"path-key": "^2.0.0"
}
},
"on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-
finished-2.3.0.tgz",
"integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
"requires": {
"ee-first": "1.1.1"
}
},
"p-finally": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-
1.0.0.tgz",
"integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
"dev": true
},
"package-json": {
"version": "4.0.1",
"resolved":
"https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz",
"integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=",
"dev": true,
"requires": {
"got": "^6.7.1",
"registry-auth-token": "^3.0.1",
"registry-url": "^3.0.3",
"semver": "^5.1.0"
}
},
"parseqs": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/parseqs/-/parseqs-
0.0.6.tgz",
"integrity":
"sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0
iztID5uJpZsFlUPDP8ThPL7M8w=="
},
"parseuri": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/parseuri/-/parseuri-
0.0.6.tgz",
"integrity": "sha512-
AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqS
E033IOMUSOMCcK3Sow=="
},
"parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-
1.3.3.tgz",
"integrity":
"sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63
hoG1fcj3fHynXi9NYO4nWOL+qQ=="
},
"path-is-inside": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/path-is-inside/-/path-
is-inside-1.0.2.tgz",
"integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
"dev": true
},
"path-key": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-
2.0.1.tgz",
"integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
"dev": true
},
"path-to-regexp": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-
to-regexp-0.1.7.tgz",
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
},
"picomatch": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-
2.2.2.tgz",
"integrity":
"sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekF
Y3IP1Nt2DHu0re+V2ZHIpMkuWg==",
"dev": true
},
"pify": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-
3.0.0.tgz",
"integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
"dev": true
},
"prepend-http": {
"version": "1.0.4",
"resolved":
"https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
"integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
"dev": true
},
"proxy-addr": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-
addr-2.0.6.tgz",
"integrity":
"sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCg
liBnqmuM+UJmBErbAUFIoDbjOw==",
"requires": {
"forwarded": "~0.1.2",
"ipaddr.js": "1.9.1"
}
},
"pseudomap": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-
1.0.2.tgz",
"integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
"dev": true
},
"pstree.remy": {
"version": "1.1.7",
"resolved":
"https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.7.tgz",
"integrity": "sha512-
xsMgrUwRpuGskEzBFkH8NmTimbZ5PcPup0LA8JJkHIm2IMUbQcpo3yeLNWVrufEYjh8Y
wtSVh0xz6UeWc5Oh5A==",
"dev": true
},
"qs": {
"version": "6.7.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
"integrity":
"sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmm
X56+HZphIGtV0XeCirBtpDrTyQ=="
},
"range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-
parser-1.2.1.tgz",
"integrity": "sha512-
Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/
2yxQ5BVd/GTl5agOwSg=="
},
"raw-body": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-
2.4.0.tgz",
"integrity":
"sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0Qep
Xs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
"requires": {
"bytes": "3.1.0",
"http-errors": "1.7.2",
"iconv-lite": "0.4.24",
"unpipe": "1.0.0"
}
},
"rc": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
"integrity": "sha512-
y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgex
CgccckhcZvywyQYPOw==",
"dev": true,
"requires": {
"deep-extend": "^0.6.0",
"ini": "~1.3.0",
"minimist": "^1.2.0",
"strip-json-comments": "~2.0.1"
}
},
"readdirp": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-
3.3.0.tgz",
"integrity":
"sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2
g+b55yVrmXzqkyLf4xaWYM0IkQ==",
"dev": true,
"requires": {
"picomatch": "^2.0.7"
}
},
"registry-auth-token": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/registry-auth-
token/-/registry-auth-token-3.4.0.tgz",
"integrity": "sha512-
4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLT
yYfxSpmfSAjQpcuP+A==",
"dev": true,
"requires": {
"rc": "^1.1.6",
"safe-buffer": "^5.0.1"
}
},
"registry-url": {
"version": "3.1.0",
"resolved":
"https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
"integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
"dev": true,
"requires": {
"rc": "^1.0.1"
}
},
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-
buffer-5.1.2.tgz",
"integrity":
"sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmM
JSoF8LOIrt8ud/wPtojys4G6+g=="
},
"safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-
buffer-2.1.2.tgz",
"integrity": "sha512-
YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7
vcyRHk0cbwqcQriUtg=="
},
"semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-
5.7.1.tgz",
"integrity":
"sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFy
K7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true
},
"semver-diff": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/semver-diff/-/semver-
diff-2.1.0.tgz",
"integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
"dev": true,
"requires": {
"semver": "^5.0.3"
}
},
"send": {
"version": "0.17.1",
"resolved": "https://registry.npmjs.org/send/-/send-
0.17.1.tgz",
"integrity": "sha512-
BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI
+XjPJcNuE3V4fT9sAg==",
"requires": {
"debug": "2.6.9",
"depd": "~1.1.2",
"destroy": "~1.0.4",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"fresh": "0.5.2",
"http-errors": "~1.7.2",
"mime": "1.6.0",
"ms": "2.1.1",
"on-finished": "~2.3.0",
"range-parser": "~1.2.1",
"statuses": "~1.5.0"
},
"dependencies": {
"ms": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-
2.1.1.tgz",
"integrity":
"sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6
nF8hDVesS/FpnYaD/kOWhYQvyg=="
}
}
},
"serve-static": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-
static-1.14.1.tgz",
"integrity":
"sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfF
npFntl7ecpZs+3mW+XbQZu9QCg==",
"requires": {
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
"send": "0.17.1"
}
},
"setprototypeof": {
"version": "1.1.1",
"resolved":
"https://registry.npmjs.org/setprototypeof/-/setprototypeof-
1.1.1.tgz",
"integrity": "sha512-
JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwE
bHMOxEZ1lqVRYP2OAw=="
},
"shebang-command": {
"version": "1.2.0",
"resolved":
"https://registry.npmjs.org/shebang-command/-/shebang-command-
1.2.0.tgz",
"integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
"dev": true,
"requires": {
"shebang-regex": "^1.0.0"
}
},
"shebang-regex": {
"version": "1.0.0",
"resolved":
"https://registry.npmjs.org/shebang-regex/-/shebang-regex-
1.0.0.tgz",
"integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
"dev": true
},
"signal-exit": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-
exit-3.0.2.tgz",
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
"dev": true
},
"socket.io": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-
2.4.0.tgz",
"integrity":
"sha512-9UPJ1UTvKayuQfVv2IQ3k7tCQC/fboDyIK62i99dAQIyHKaBsNdTpwHLgKJ6
guRWxRtC9H+138UwpaGuQO9uWQ==",
"requires": {
"debug": "~4.1.0",
"engine.io": "~3.5.0",
"has-binary2": "~1.0.2",
"socket.io-adapter": "~1.1.0",
"socket.io-client": "2.4.0",
"socket.io-parser": "~3.4.0"
},
"dependencies": {
"debug": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-
4.1.1.tgz",
"integrity":
"sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256e
hJCkX+XRQm16eZLqLNS8RSZXZw==",
"requires": {
"ms": "^2.1.1"
}
},
"ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-
2.1.3.tgz",
"integrity":
"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/
XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
}
}
},
"socket.io-adapter": {
"version": "1.1.2",
"resolved":
"https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-
1.1.2.tgz",
"integrity": "sha512-
WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQ
yT8FkrriRM8vXLYz8g=="
},
"socket.io-client": {
"version": "2.4.0",
"resolved":
"https://registry.npmjs.org/socket.io-client/-/socket.io-client-
2.4.0.tgz",
"integrity": "sha512-
M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQ
bE/995AdTem2uNyKKQ==",
"requires": {
"backo2": "1.0.2",
"component-bind": "1.0.0",
"component-emitter": "~1.3.0",
"debug": "~3.1.0",
"engine.io-client": "~3.5.0",
"has-binary2": "~1.0.2",
"indexof": "0.0.1",
"parseqs": "0.0.6",
"parseuri": "0.0.6",
"socket.io-parser": "~3.3.0",
"to-array": "0.1.4"
},
"dependencies": {
"debug": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-
3.1.0.tgz",
"integrity": "sha512-
OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDsl
f55723cKPUOGSmMY3g==",
"requires": {
"ms": "2.0.0"
}
},
"socket.io-parser": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/socket.io-
parser/-/socket.io-parser-3.3.2.tgz",
"integrity":
"sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrN
fjALvcQ+vMDM/33AWOYP/JSjDg==",
"requires": {
"component-emitter": "~1.3.0",
"debug": "~3.1.0",
"isarray": "2.0.1"
}
}
}
},
"socket.io-parser": {
"version": "3.4.1",
"resolved":
"https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-
3.4.1.tgz",
"integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI+
+tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==",
"requires": {
"component-emitter": "1.2.1",
"debug": "~4.1.0",
"isarray": "2.0.1"
},
"dependencies": {
"component-emitter": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/component-
emitter/-/component-emitter-1.2.1.tgz",
"integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
},
"debug": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-
4.1.1.tgz",
"integrity":
"sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256e
hJCkX+XRQm16eZLqLNS8RSZXZw==",
"requires": {
"ms": "^2.1.1"
}
},
"ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-
2.1.3.tgz",
"integrity":
"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/
XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
}
}
},
"statuses": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-
1.5.0.tgz",
"integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
},
"string-width": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-
width-2.1.1.tgz",
"integrity": "sha512-
nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvV
wdfeZ7w7aCvJD7ugkw==",
"dev": true,
"requires": {
"is-fullwidth-code-point": "^2.0.0",
"strip-ansi": "^4.0.0"
}
},
"strip-ansi": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-
ansi-4.0.0.tgz",
"integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
"dev": true,
"requires": {
"ansi-regex": "^3.0.0"
}
},
"strip-eof": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-
1.0.0.tgz",
"integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
"dev": true
},
"strip-json-comments": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/strip-json-
comments/-/strip-json-comments-2.0.1.tgz",
"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
"dev": true
},
"supports-color": {
"version": "5.5.0",
"resolved":
"https://registry.npmjs.org/supports-color/-/supports-color-
5.5.0.tgz",
"integrity": "sha512-
QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0e
y4f5lgLrkB0aX0QMow==",
"dev": true,
"requires": {
"has-flag": "^3.0.0"
}
},
"term-size": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/term-size/-/term-size-
1.2.0.tgz",
"integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=",
"dev": true,
"requires": {
"execa": "^0.7.0"
}
},
"timed-out": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/timed-out/-/timed-out-
4.0.1.tgz",
"integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
"dev": true
},
"to-array": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/to-array/-/to-array-
0.1.4.tgz",
"integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA="
},
"to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-
regex-range-5.0.1.tgz",
"integrity": "sha512-
65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCy
neCMJiGqrADCSNk8sQ==",
"dev": true,
"requires": {
"is-number": "^7.0.0"
}
},
"toidentifier": {
"version": "1.0.0",
"resolved":
"https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
"integrity":
"sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp
0vcYnvteJln5FNQDRrxj3YcbVw=="
},
"touch": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/touch/-/touch-
3.1.0.tgz",
"integrity":
"sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6
FkJez9D/hleyAXTBGLwwZUw9lA==",
"dev": true,
"requires": {
"nopt": "~1.0.10"
}
},
"type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-
1.6.18.tgz",
"integrity": "sha512-
TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q
+iA+ma9BGm06XQBy8g==",
"requires": {
"media-typer": "0.3.0",
"mime-types": "~2.1.24"
}
},
"undefsafe": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-
2.0.3.tgz",
"integrity":
"sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6
AwJY69hdixaFQOuoYsMjE5/C2A==",
"dev": true,
"requires": {
"debug": "^2.2.0"
}
},
"unique-string": {
"version": "1.0.0",
"resolved":
"https://registry.npmjs.org/unique-string/-/unique-string-
1.0.0.tgz",
"integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=",
"dev": true,
"requires": {
"crypto-random-string": "^1.0.0"
}
},
"unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-
1.0.0.tgz",
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
},
"unzip-response": {
"version": "2.0.1",
"resolved":
"https://registry.npmjs.org/unzip-response/-/unzip-response-
2.0.1.tgz",
"integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=",
"dev": true
},
"update-notifier": {
"version": "2.5.0",
"resolved":
"https://registry.npmjs.org/update-notifier/-/update-notifier-
2.5.0.tgz",
"integrity":
"sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1I
W1WWl7ovZxsX49lMBWLxSdm5Dw==",
"dev": true,
"requires": {
"boxen": "^1.2.1",
"chalk": "^2.0.1",
"configstore": "^3.0.0",
"import-lazy": "^2.1.0",
"is-ci": "^1.0.10",
"is-installed-globally": "^0.1.0",
"is-npm": "^1.0.0",
"latest-version": "^3.0.0",
"semver-diff": "^2.0.0",
"xdg-basedir": "^3.0.0"
}
},
"url-parse-lax": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/url-parse-lax/-/url-
parse-lax-1.0.0.tgz",
"integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
"dev": true,
"requires": {
"prepend-http": "^1.0.1"
}
},
"utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-
merge-1.0.1.tgz",
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
},
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-
1.1.2.tgz",
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
},
"which": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/which/-/which-
1.3.1.tgz",
"integrity": "sha512-
HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/
TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
"dev": true,
"requires": {
"isexe": "^2.0.0"
}
},
"widest-line": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/widest-line/-/widest-
line-2.0.1.tgz",
"integrity":
"sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVf
tDz6n/EOu3tNACS84v509qwnJA==",
"dev": true,
"requires": {
"string-width": "^2.1.1"
}
},
"write-file-atomic": {
"version": "2.4.3",
"resolved":
"https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-
2.4.3.tgz",
"integrity":
"sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM
4ZG/V8wZlSniJnCKWPmBYAucRQ==",
"dev": true,
"requires": {
"graceful-fs": "^4.1.11",
"imurmurhash": "^0.1.4",
"signal-exit": "^3.0.2"
}
},
"ws": {
"version": "7.4.2",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.4.2.tgz",
"integrity":
"sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3
+SlomNV/LdY6RXEbBpMH6EOJnA=="
},
"xdg-basedir": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-
basedir-3.0.0.tgz",
"integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=",
"dev": true
},
"xmlhttprequest-ssl": {
"version": "1.5.5",
"resolved":
"https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-
1.5.5.tgz",
"integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4="
},
"yallist": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-
2.1.2.tgz",
"integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
"dev": true
},
"yeast": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/yeast/-/yeast-
0.1.2.tgz",
"integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk="
}
}
}
RESULT
login-page

HOME PAGE

3
SENDING MESSAGES

CREATING A CHAT GROUP

33
CONCLUSION :
We have successfully created a Chat Apllicaiton using node js with the help of chat
cord API key and hosted successfully on netlify

34

You might also like