├── .gitignore
├── README.md
├── api
└── api.go
├── db
├── db.go
└── mongo.go
├── frontend
├── next.config.js
├── package.json
├── public
│ ├── drive.gif
│ ├── favicon.png
│ └── image.gif
├── src
│ ├── components
│ │ ├── Card.js
│ │ ├── Content.js
│ │ ├── Entry.js
│ │ ├── Footer.js
│ │ ├── Header.js
│ │ ├── Info.js
│ │ ├── Intro.js
│ │ ├── Letter.js
│ │ ├── PopUp.js
│ │ ├── Text.js
│ │ └── UploadImage.js
│ ├── https
│ │ ├── createLetter.js
│ │ └── getLetter.js
│ ├── pages
│ │ ├── [hash].js
│ │ ├── _app.js
│ │ ├── api
│ │ │ └── hello.js
│ │ └── index.js
│ └── styles
│ │ ├── Card.module.css
│ │ ├── Letter.module.css
│ │ ├── blocks.css
│ │ └── globals.css
└── yarn.lock
├── go.mod
├── go.sum
├── main.go
├── schema
└── schema.go
└── security
├── encrypt.go
└── hash.go
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | #executable
4 | carly
5 |
6 | # dependencies
7 | frontend/node_modules
8 | frontend/.pnp
9 | frontend/.pnp.js
10 |
11 | # testing
12 | /coverage
13 |
14 | # next.js
15 | frontend/.next/*
16 | frontend/out/
17 |
18 | # production
19 | /build
20 |
21 | # misc
22 | .DS_Store
23 | *.pem
24 |
25 | # debug
26 | npm-debug.log*
27 | yarn-debug.log*
28 | yarn-error.log*
29 |
30 | # local env files
31 | frontend/.env.local
32 | frontend/.env.development.local
33 | frontend/.env.test.local
34 | frontend/.env.production.local
35 |
36 | # vercel
37 | .vercel
38 |
39 | #env
40 | .env
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Carly ✉️
2 | #### Genereate beautiful letters for your loved ones that can be shared in seconds
3 | Carly was written to help me send a birthday letter to my mum halfway around the world. Now anyone can do it too!
4 |
5 |
6 | 
7 | 
8 | 
9 | 
10 |
11 | ## Details
12 | Carly is written in Next.js + React on the frontend (hosted on Vercel) and Go with MongoDB Atlas on the backend (hosted as a systemd file with nginx on Digital Ocean).
13 |
14 | To run this locally, you will need to run the web server in Go (using `go run main.go`) as well as the frontend (navigate inside the frontend directory and run `yarn dev`).
15 |
16 | You will also need a MongoDB atlas account (free tier M0 can be accessed by anyone). Once you've made an account, configure a user with admin access and store the username, password, and shared URL in a .env file with MONGO_USER, MONGO_PASS, MONGO_SHARD_URL as the variable names respectively. Make sure that this .env file is located in the same directory as the go.mod file.
17 |
18 | You will also need to create a .env.local file inside the frontend folder and populate it with two variables
19 | `NEXT_PUBLIC_HOST=localhost:3000
20 | NEXT_PUBLIC_HOSTAPI=127.0.0.1:port/api`
21 | You can select any port like 8998.
22 |
23 | ## API
24 | The API provides two endpoints
25 | ### `POST /api`
26 | - Accepts a JSON body that looks like this:
27 | `{
28 | "title": "titleLetter",
29 | "expiry": "getExpiryDate()",
30 | "password": "",
31 | "content": [
32 | {
33 | "person": "person1",
34 | "msg": "msg1",
35 | "imgAdd": "imgAdd1"
36 | },
37 | {
38 | "person":"person2",
39 | "msg": "msg2",
40 | "imgAdd": "imgAdd2"
41 | }...
42 | ]
43 | }`
44 |
45 | The API returns the genereated hash if successful
46 | `#200 OK
47 | #{ "hash": "166989a"}`
48 |
49 | ### `GET /api/{hash}`
50 | The API returns
51 | `#401 Unauthorized` if the letter is password protected
52 |
53 | OR
54 |
55 | `#404 Bad request` if it does not find the hash in the database (or for any other possible error)
56 |
57 | ## Contributing
58 |
59 | Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are **greatly appreciated**.
60 |
61 | 1. Fork the Project
62 | 2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)
63 | 3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)
64 | 4. Push to the Branch (`git push origin feature/AmazingFeature`)
65 | 5. Open a Pull Request
66 |
67 |
68 | ## Acknowledgements
69 | * [Ctrl-v](https://github.com/jackyzha0/ctrl-v)
70 | * [Block CSS](https://thesephist.github.io/blocks.css/)
71 |
--------------------------------------------------------------------------------
/api/api.go:
--------------------------------------------------------------------------------
1 | package api
2 |
3 | import (
4 | "encoding/json"
5 | "fmt"
6 | "net/http"
7 |
8 | "github.com/amirgamil/carly/db"
9 | "github.com/amirgamil/carly/schema"
10 | "github.com/gorilla/mux"
11 | )
12 |
13 | func preflightResponse(w *http.ResponseWriter, r *http.Request) {
14 | //if in production, replace with https://carly.amirbolous.com
15 | (*w).Header().Set("Access-Control-Allow-Origin", "http://localhost:3000")
16 | (*w).Header().Set("Access-Control-Allow-Methods", "POST")
17 | (*w).Header().Set("Access-Control-Allow-Headers", "Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization")
18 | }
19 |
20 | func WriteDB(w http.ResponseWriter, r *http.Request) {
21 | // Allow CORS
22 | preflightResponse(&w, r)
23 | fmt.Println((*r).Method)
24 | if (*r).Method == "OPTIONS" {
25 | return
26 | }
27 | //generic data structure to decode JSON data into (strings to any data types)
28 | var letterCard schema.JSONLetter
29 | err := json.NewDecoder(r.Body).Decode(&letterCard)
30 | if err != nil {
31 | fmt.Println("Error parsing json data from frontend ", err)
32 | }
33 | // make a call to db with letter to write
34 | urlHash := db.AddNew(letterCard.Title, letterCard.Data, letterCard.Expiry, letterCard.Password)
35 | toReturn := map[string]string{
36 | "hash": urlHash,
37 | }
38 | w.Header().Set("Content-Type", "application/json")
39 | json.NewEncoder(w).Encode(toReturn)
40 | }
41 |
42 | func HandleLetter(w http.ResponseWriter, r *http.Request) {
43 | getLetterWithPassword(w, r, "")
44 | }
45 |
46 | func HandleLetterWithPassword(w http.ResponseWriter, r *http.Request) {
47 | _ = r.ParseMultipartForm(0)
48 | password := r.FormValue("password")
49 | fmt.Println("Attempted password ", password)
50 | getLetterWithPassword(w, r, password)
51 | }
52 |
53 | func getLetterWithPassword(w http.ResponseWriter, r *http.Request, password string) {
54 | // Allow CORS
55 | w.Header().Set("Access-Control-Allow-Origin", "*")
56 | vars := mux.Vars(r)
57 | fmt.Println(vars["hash"])
58 | res, err := db.LookUp(vars["hash"], password)
59 | if err != nil {
60 | switch err {
61 | case db.UnauthorizedUser:
62 | w.WriteHeader(http.StatusUnauthorized)
63 | fmt.Println("User is not authorized my dude ", err)
64 | default:
65 | w.WriteHeader(http.StatusBadRequest)
66 | fmt.Println("Couldn't find the letter for %s", vars["hash"])
67 | }
68 |
69 | return
70 | }
71 | w.Header().Set("Content-Type", "application/json")
72 | json.NewEncoder(w).Encode(res)
73 | }
74 |
--------------------------------------------------------------------------------
/db/db.go:
--------------------------------------------------------------------------------
1 | package db
2 |
3 | import (
4 | "encoding/json"
5 | "fmt"
6 | "log"
7 | "os"
8 | "time"
9 |
10 | "github.com/amirgamil/carly/schema"
11 | "github.com/amirgamil/carly/security"
12 | "github.com/joho/godotenv"
13 | )
14 |
15 | const TitleLimit = 100
16 | const CardLimit = 25
17 | const ContentLimit = 100000
18 |
19 | func init() {
20 | err := godotenv.Load()
21 | if err != nil {
22 | log.Println("Error loading .env file: %s", err.Error())
23 | }
24 |
25 | mUser := os.Getenv("MONGO_USER")
26 | mPass := os.Getenv("MONGO_PASS")
27 | mIP := os.Getenv("MONGO_SHARD_URL")
28 | initSession(mUser, mPass, mIP)
29 | }
30 |
31 | func AddNew(title string, content []schema.LetterData, expiry string, password string) string {
32 | titleArr := []byte(title)
33 | err := checkLengths(title, content)
34 | if err != nil {
35 | log.Println(err)
36 | }
37 |
38 | urlHash := security.GenerateUniqueHash(string(titleArr[:20]))
39 | expiryDate, err := time.Parse(time.RFC3339, expiry)
40 | if err != nil {
41 | log.Println("Error parsing the date %s", err)
42 | }
43 | marshalledContent, err := json.Marshal(content)
44 | if err != nil {
45 | log.Println("Error marshalling content")
46 | }
47 | new := schema.Letter{
48 | Hash: urlHash,
49 | Title: title,
50 | Data: string(marshalledContent),
51 | Expiry: expiryDate,
52 | Password: password,
53 | }
54 |
55 | if password != "" {
56 | keyDer, salt, err := security.DeriveKey(password, nil)
57 | if err != nil {
58 | log.Println(err)
59 | }
60 | new.Salt = salt
61 |
62 | encryptedContent, err := security.Encrypt(keyDer, content)
63 | if err != nil {
64 | log.Println("Error encrypting the content ", err)
65 | }
66 | new.Data = encryptedContent
67 |
68 | hashedPassword, err := security.HashPassword(password)
69 | if err != nil {
70 | log.Println("Error hashing the password ", err)
71 | }
72 | new.Password = hashedPassword
73 |
74 | }
75 |
76 | // fmt.Printf("%+v\n", new)
77 | _, insertErr := insert(new)
78 | if insertErr != nil {
79 | fmt.Println("Error inserting a new letter in the db: ", insertErr)
80 | }
81 | return urlHash
82 |
83 | }
84 |
85 | func checkLengths(title string, content []schema.LetterData) error {
86 | if len(title) > TitleLimit {
87 | return fmt.Errorf("title is longer than character limit of %d\n", TitleLimit)
88 | }
89 | if len(content) > CardLimit {
90 | return fmt.Errorf("# of cards is longer than limit of %d\n", CardLimit)
91 | }
92 | for _, s := range content {
93 | if len(s.Message) > ContentLimit {
94 | return fmt.Errorf("content within a card is longer than character limit of %d\n", ContentLimit)
95 | }
96 | }
97 |
98 | return nil
99 | }
100 |
101 | func LookUp(hash string, password string) (schema.JSONLetter, error) {
102 | return fetch(hash, password)
103 | }
104 |
--------------------------------------------------------------------------------
/db/mongo.go:
--------------------------------------------------------------------------------
1 | package db
2 |
3 | import (
4 | "context"
5 | "encoding/json"
6 | "errors"
7 | "fmt"
8 | "log"
9 | "time"
10 |
11 | "github.com/amirgamil/carly/schema"
12 | "github.com/amirgamil/carly/security"
13 | "go.mongodb.org/mongo-driver/bson"
14 | "go.mongodb.org/mongo-driver/mongo"
15 | "go.mongodb.org/mongo-driver/mongo/options"
16 | )
17 |
18 | var Session *mongo.Client
19 | var letters *mongo.Collection
20 | var ctx context.Context
21 |
22 | func initSession(user string, pass string, ip string) {
23 | // load .env file
24 | //"mongodb://%s:%s@%s:27017"
25 | URIfmt := "mongodb://%s:%s@%s" //"mongodb://127.0.0.1:27017" eventually add user and password
26 | fmt.Println(ip)
27 | mongoURI := fmt.Sprintf(URIfmt, user, pass, ip)
28 | ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
29 | defer cancel()
30 | Client, err := mongo.Connect(ctx, options.Client().ApplyURI(
31 | mongoURI,
32 | ))
33 | if err != nil {
34 | log.Println("Error starting Mongo session, ", err)
35 | }
36 |
37 | models := []mongo.IndexModel{
38 | {
39 | Keys: bson.D{{"hash", 1}},
40 | Options: options.Index().SetUnique(true),
41 | },
42 | {
43 | Keys: bson.D{{"expiry", 1}},
44 | Options: options.Index().SetExpireAfterSeconds(0),
45 | },
46 | }
47 | letters = Client.Database("main").Collection("letters")
48 | fmt.Println("Established connection to %s", letters)
49 |
50 | // Specify the MaxTime option to limit the amount of time the operation can run on the server
51 | opts := options.CreateIndexes().SetMaxTime(2 * time.Second)
52 | _, errIn := letters.Indexes().CreateMany(ctx, models, opts)
53 | if errIn != nil {
54 | log.Println(errIn)
55 | }
56 |
57 | }
58 |
59 | func insert(new schema.Letter) (*mongo.InsertOneResult, error) {
60 | return letters.InsertOne(context.Background(), new)
61 | }
62 |
63 | var UnauthorizedUser = errors.New("password is wrong or not provided")
64 |
65 | //look up hash string in the database
66 | //returns a letter if found, if it's password protected (so will need to handle), and an error
67 | func fetch(hash string, password string) (schema.JSONLetter, error) {
68 | //create BSON object of hash string to look for in the database
69 | lookFor := bson.M{"hash": hash}
70 |
71 | var result schema.Letter
72 | _ = letters.FindOne(ctx, lookFor).Decode(&result)
73 | jsonResult := schema.JSONLetter{
74 | Hash: result.Hash,
75 | Title: result.Title,
76 | Expiry: result.Expiry.String(),
77 | }
78 | if result.Password != "" {
79 | isValid := security.VerifyPassword(result.Password, password)
80 | if !isValid {
81 | return schema.JSONLetter{}, UnauthorizedUser
82 | }
83 | //get the key from the Salt in order to decrpt the message
84 | key, _, err := security.DeriveKey(password, result.Salt)
85 | if err != nil {
86 | log.Println("Error calculating key to decrypt the message ", err)
87 | }
88 |
89 | //decrypt the message and only return what is necessary (if no password, dont' care about Salt)
90 | decryptedMessage, err := security.Decrypt(string(key), result.Data)
91 | if err != nil {
92 | log.Println("Error decrypting the message, ", err)
93 | }
94 | jsonResult.Data = decryptedMessage
95 | } else {
96 | var actualData []schema.LetterData
97 | errD := json.Unmarshal([]byte(result.Data), &actualData)
98 | if errD != nil {
99 | log.Println("Error converting decrypted data back to readable format ", errD)
100 | }
101 | jsonResult.Data = actualData
102 | }
103 | return jsonResult, nil
104 | }
105 |
--------------------------------------------------------------------------------
/frontend/next.config.js:
--------------------------------------------------------------------------------
1 | // next.config.js
2 | const withImages = require('next-images')
3 | module.exports = withImages()
--------------------------------------------------------------------------------
/frontend/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "carly",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev",
7 | "build": "next build",
8 | "start": "next start"
9 | },
10 | "dependencies": {
11 | "babel-plugin-styled-components": "^1.8.0",
12 | "next": "10.1.3",
13 | "next-images": "^1.7.0",
14 | "react": "17.0.2",
15 | "react-dom": "17.0.2",
16 | "styled-components": "^5.2.3"
17 | },
18 | "babel": {
19 | "env": {
20 | "development": {
21 | "presets": [
22 | "next/babel"
23 | ],
24 | "plugins": [
25 | [
26 | "styled-components",
27 | {
28 | "ssr": true,
29 | "displayName": true
30 | }
31 | ]
32 | ]
33 | },
34 | "production": {
35 | "presets": [
36 | "next/babel"
37 | ],
38 | "plugins": [
39 | [
40 | "styled-components",
41 | {
42 | "ssr": true,
43 | "displayName": false
44 | }
45 | ]
46 | ]
47 | }
48 | }
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/frontend/public/drive.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amirgamil/carly/ba8dd42490acedc40b2957c65882c5393398f063/frontend/public/drive.gif
--------------------------------------------------------------------------------
/frontend/public/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amirgamil/carly/ba8dd42490acedc40b2957c65882c5393398f063/frontend/public/favicon.png
--------------------------------------------------------------------------------
/frontend/public/image.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amirgamil/carly/ba8dd42490acedc40b2957c65882c5393398f063/frontend/public/image.gif
--------------------------------------------------------------------------------
/frontend/src/components/Card.js:
--------------------------------------------------------------------------------
1 | import styles from '../styles/Card.module.css'
2 |
3 |
4 | const Card = ({data}) => {
5 | return (
6 |
7 |
{data.person}
8 |
9 |
10 |
11 |
12 |
13 | {data.msg}
14 |
15 |
16 |
17 | )
18 | }
19 |
20 | export default Card;
--------------------------------------------------------------------------------
/frontend/src/components/Content.js:
--------------------------------------------------------------------------------
1 | import { useState } from 'react';
2 | import styled from 'styled-components';
3 |
4 | const Wrapper = styled.div`
5 | display: block;
6 | position: relative;
7 | width: calc(100%);
8 | `
9 |
10 | export default function Content({placeholderTxt, content, onchange}) {
11 |
12 | const handleChange = (evt) => {
13 | onchange(evt.target.value);
14 | evt.preventDefault();
15 | }
16 |
17 | return (
18 |
23 | )
24 | }
--------------------------------------------------------------------------------
/frontend/src/components/Entry.js:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 | import Content from '../components/Content'
3 | import Text from '../components/Text'
4 |
5 | const OptionContainer = styled.div`
6 | width: 100%;
7 | margin: 0 auto;
8 | padding: 0;
9 | `;
10 |
11 |
12 | const Entry = ({index, nameLetter, msg, imgAdd, dispatch}) => {
13 | //no way to break this code up since we need to get data from child component and can't pass in
14 | //callback with methods already set
15 | const updateNameData = (value) => {
16 | dispatch({operation: "update", key: "person", value: value, indexModify: index})
17 | }
18 |
19 | const updateMsgData = (value) => {
20 | dispatch({operation: "update", key: "msg", value: value, indexModify: index})
21 | }
22 | const updateImgAdd = (value) => {
23 | var result = value;
24 | if (value.split(".")[0] === "https://drive") {
25 | const arr = value.split("/");
26 | result = "http://drive.google.com/uc?export=view&id=" + arr[arr.length - 2];
27 |
28 | }
29 | dispatch({operation: "update", key: "imgAdd", value: result, indexModify: index})
30 | }
31 |
32 | return (
33 |
34 | Card {index + 1}
35 |
36 |
37 | Who's this from?
38 | Enter your name to display at the top of your letter
39 |
40 |
41 |
42 | What's the message?
43 | Enter it exactly as you want it to appear on the website card (including linebreaks and spaces)
44 |
45 |
46 |
47 | Enter an image address
48 | If you're unsure, scroll up to the adding images section!
49 |
50 |
51 |
52 |
53 | )
54 | }
55 |
56 |
57 | export default Entry;
--------------------------------------------------------------------------------
/frontend/src/components/Footer.js:
--------------------------------------------------------------------------------
1 |
2 | export default function Footer() {
3 | return (
4 |
7 | )
8 | }
--------------------------------------------------------------------------------
/frontend/src/components/Header.js:
--------------------------------------------------------------------------------
1 |
2 |
3 | export default function Header() {
4 | return (
5 |
12 |
13 | )
14 | }
--------------------------------------------------------------------------------
/frontend/src/components/Info.js:
--------------------------------------------------------------------------------
1 |
2 | import img from '../../public/image.gif'
3 | import drive from '../../public/drive.gif'
4 |
5 | const Info = () => {
6 | return (
7 |
8 | How it works
9 |
10 | To create a letter, it's as easy as filling in the information below.
11 |
12 | The generated letter is a "digital card" in that it will live on the web at a URL that can be
13 | accessed on the browser and shared easily across all devices.
14 |
15 | If you would like to have several different cards from different people on the same page
16 | like this , click on the + button in the make card section. These can be addressed
17 | to the same person, or just a collection of different cards.
18 |
19 |
20 |
21 | Use cases
22 |
23 | Creating any kind of letter (birthday, Christmas, wedding etc.) for a family or friend
24 | Creating a thank you wall for a teacher, family or friend
25 | Collecting some different short stories or pieces of writing
26 | Showcasing the work of different students in the same class
27 |
28 | ... many more, get creative!
29 |
30 | Adding images
31 | To add images, there are two options. One, you can find any image online and copy its image address
32 | like this
33 | {/*Code will be duplicated to reduce dependencies, otherwise need to install webpack file loader*/}
34 |
35 |
36 |
37 |
38 |
39 |
40 | Or, you can upload custom photos to Google Drive and get the image address from there like this
41 | (make sure to open the image in a new window!)
42 |
43 |
44 |
45 |
46 |
47 |
48 | Support the project
49 | If you found this project useful, consider supporting it here to keep it free, forever, for everyone :)
51 |
52 |
53 | )
54 | };
55 |
56 |
57 | export default Info;
--------------------------------------------------------------------------------
/frontend/src/components/Intro.js:
--------------------------------------------------------------------------------
1 | import Letter from '../components/Letter'
2 | import Link from 'next/link'
3 |
4 | export default function Intro() {
5 | const tempData = [{
6 | person: "Riley",
7 | msg: `Dear Molly,
8 |
9 | Thanks for being the best friend I could ask for.
10 |
11 | You're always there for me and make me feel special.
12 |
13 | I'm incredibly grateful that I get to laugh with you every single day.
14 |
15 | Best,
16 |
17 | Riley`,
18 | imgAdd: "https://www.ctvsh.com/sites/default/files/styles/large/public/golden-retriever-dog-breed-info.jpg?itok=KV7Ojj-C",
19 | }]
20 | return (
21 | <>
22 |
23 |
24 | Generate a beautiful digital letter that can be
25 | shared in seconds
26 |
27 | Open it in your browser!
28 |
29 |
39 |
40 |
41 | >
42 | )
43 | }
--------------------------------------------------------------------------------
/frontend/src/components/Letter.js:
--------------------------------------------------------------------------------
1 | import styles from '../styles/Letter.module.css'
2 | import Card from './Card'
3 |
4 | const Letter = ({template, title, content}) => {
5 | return (
6 |
7 |
{title}
8 | {content.map((data, index) => {
9 | return (
10 |
11 | )
12 | })}
13 |
14 | )
15 | }
16 |
17 |
18 | export default Letter
--------------------------------------------------------------------------------
/frontend/src/components/PopUp.js:
--------------------------------------------------------------------------------
1 |
2 |
3 | const PopUp = ({url, toggle}) => {
4 |
5 | function copy(evt) {
6 | let element = document.getElementById("url");
7 | navigator.clipboard.writeText(element.value);
8 | }
9 |
10 | return (
11 |
12 |
13 |
Card created!
14 |
15 |
16 | url
17 |
18 |
19 |
20 |
21 |
22 | Copy
23 |
24 | window.location.href=url}>
25 | Go to url
26 |
27 |
28 |
29 |
30 |
31 | )
32 | }
33 |
34 | export default PopUp
--------------------------------------------------------------------------------
/frontend/src/components/Text.js:
--------------------------------------------------------------------------------
1 | import { useState } from 'react';
2 | import styled from 'styled-components';
3 |
4 |
5 | const TitleInput = styled.input`
6 | width: calc(100% - 2em);
7 | padding: 0.5em;
8 | `;
9 |
10 | const Title = ({placeholderTxt, value, onchange}) => {
11 | const handleChange = (evt) => {
12 | onchange(evt.target.value);
13 | evt.preventDefault();
14 | }
15 | return (
16 | handleChange(evt)} value = {value} />
18 | )
19 | }
20 |
21 |
22 | export default Title;
--------------------------------------------------------------------------------
/frontend/src/components/UploadImage.js:
--------------------------------------------------------------------------------
1 | import { useState } from 'react';
2 | import styled from 'styled-components';
3 |
4 |
5 |
6 | export default function UploadImage() {
7 |
8 | return (
9 |
10 |
11 |
12 |
13 | )
14 | }
--------------------------------------------------------------------------------
/frontend/src/https/createLetter.js:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | const createLetter = (data) => {
5 | const requestOptions = {
6 | method: 'POST',
7 | headers: {
8 | "Content-Type": "application/json"
9 | },
10 | body: data
11 | };
12 | const base = process.env.NEXT_PUBLIC_HOSTAPI;
13 | return fetch(base, requestOptions);
14 | }
15 |
16 |
17 | export default createLetter
--------------------------------------------------------------------------------
/frontend/src/https/getLetter.js:
--------------------------------------------------------------------------------
1 |
2 |
3 | const getLetter = async (id, password="") => {
4 | try {
5 | var requestOptions;
6 | if (password != "") {
7 | var formdata = new FormData();
8 | formdata.append("password", password);
9 | var requestOptions = {
10 | method: 'POST',
11 | body: formdata,
12 | redirect: 'follow'
13 | };
14 | }
15 | const base = process.env.NEXT_PUBLIC_HOSTAPI;
16 | return await fetch(base + "/" + id, requestOptions)
17 | .then(res => {
18 | if (res.status === 401) {
19 | throw new Error("unauthorized password");
20 | }
21 | return res.json();
22 | })
23 | .then(data => {
24 | return { ...data, success: true };
25 | }).catch(exception => {
26 | return { status: 401, success: false };
27 | });
28 | } catch (exception) {
29 | console.log("something went wrong trying to fetch the current letter " + exception.response);
30 | }
31 | }
32 |
33 |
34 | export default getLetter;
--------------------------------------------------------------------------------
/frontend/src/pages/[hash].js:
--------------------------------------------------------------------------------
1 | import getLetter from '../https/getLetter'
2 | import styled from 'styled-components'
3 | import Letter from '../components/Letter'
4 | import Footer from '../components/Footer'
5 | import { useState } from 'react';
6 | import { useRouter } from 'next/router'
7 |
8 | //Generate card URLs by making a request to the server, pre-render page from props returned
9 | export async function getServerSideProps(ctx) {
10 | //Query api to check the database for the backend
11 | const data = await getLetter(encodeURIComponent(ctx.params.hash));
12 | if (!data) {
13 | return {
14 | notFound: true,
15 | }
16 | } else if (data.status === 401) {
17 | //Means the letter requires a password, so we need to render it as such
18 | return {
19 | props: {
20 | authenticated: false,
21 | }
22 | }
23 | }
24 | console.log({
25 | props: { data }, //will be passed into page component as props
26 | });
27 | return {
28 | props: { data, authenticated: true }, //will be passed into page component as props
29 | }
30 | }
31 |
32 | const Main = styled.div`
33 | --fg: #010100;
34 | --bg: #f9f2e3;
35 | background: var(--bg);
36 | color: var(--fg);
37 | min-height: 100vh;
38 | font-family: 'Handlee', cursive;
39 | `;
40 |
41 | const ViewLetter = ({ data, authenticated }) => {
42 | const [isAuthenticated, setAuthenticated] = useState(authenticated);
43 | const [password, setPassword] = useState('');
44 | const [clientData, setClientData] = useState(data)
45 | const router = useRouter();
46 | const hash = router.query;
47 |
48 | const tryAuthenticating = () => {
49 | getLetter(hash.hash, password)
50 | .then(data => {
51 | if (data.success === true) {
52 | //need to set client data before we set authenticated which upon the rerender would still have
53 | //undefined data
54 | setClientData(data);
55 | setAuthenticated(true);
56 | } else {
57 | alert("wrong password");
58 | }
59 | }).catch(exception => {
60 | console.log("error authenticating with a password " + exception);
61 | });
62 | }
63 |
64 | if (isAuthenticated) {
65 | return (
66 |
67 | {clientData.content ? : null}
68 |
69 |
70 | )
71 | } else {
72 | return (
73 |
74 |
75 |
Ooops, there's a gift on the other side!
76 | setPassword(evt.target.value)}/>
78 | tryAuthenticating()}>
79 | Submit
80 |
81 |
82 |
83 | )
84 | }
85 | }
86 |
87 | export default ViewLetter
--------------------------------------------------------------------------------
/frontend/src/pages/_app.js:
--------------------------------------------------------------------------------
1 | import '../styles/globals.css'
2 | import '../styles/blocks.css'
3 | import Head from "next/head";
4 |
5 | const MyApp = ({ Component, pageProps }) => {
6 | const title = pageProps["authenticated"] === true ? pageProps.data.title : "carly | letters for your loved ones"
7 | return (
8 | <>
9 |
10 |
11 |
15 |
16 | {title}
17 |
18 |
19 | >
20 | )
21 | }
22 |
23 | export default MyApp
24 |
--------------------------------------------------------------------------------
/frontend/src/pages/api/hello.js:
--------------------------------------------------------------------------------
1 | // Next.js API route support: https://nextjs.org/docs/api-routes/introduction
2 |
3 | export default (req, res) => {
4 | res.status(200).json({ name: 'John Doe' })
5 | }
6 |
--------------------------------------------------------------------------------
/frontend/src/pages/index.js:
--------------------------------------------------------------------------------
1 | import Head from 'next/head';
2 | import Footer from '../components/Footer';
3 | import Header from '../components/Header';
4 | import styled from 'styled-components';
5 | import Intro from '../components/Intro.js'
6 | import Text from '../components/Text'
7 | import PopUp from '../components/PopUp'
8 | import { useReducer, useState } from 'react'
9 | import createLetter from '../https/createLetter'
10 | import Info from '../components/Info'
11 | import Entry from '../components/Entry';
12 | const Container = styled.form`
13 | max-width: 800px;
14 | width: calc(100% - 2em);
15 | margin: 0 auto;
16 | `;
17 |
18 | const OptionContainer = styled.div`
19 | width: 100%;
20 | margin: 0 auto;
21 | `;
22 |
23 | //reducer takes (state, action) but we destructure action into the 4 values we need
24 | const reducer = (cardStore, {operation, key, value, indexModify}) => {
25 | switch (operation) {
26 | case "add":
27 | return [...cardStore, {person: "", msg: "", imgAdd: ""}];
28 | case "remove":
29 | return cardStore.filter((_, index) => index !== key);
30 | case "update":
31 | //need to destructure state to create a new copy so that React picks up the change to rerender!
32 | let newCardStore = [...cardStore]
33 | newCardStore.forEach((data, index) => {
34 | if (index === indexModify) {
35 | data[key] = value;
36 | }
37 | return data;
38 | });
39 | return newCardStore;
40 | default:
41 | return cardStore;
42 | }
43 | };
44 |
45 | export default function Home() {
46 | const [titleLetter, setTitleLetter] = useState('');
47 | //Card store is an array of objects {"person": _, "msg": , "img":}
48 | //useReducer takes (reducer, initialState)
49 | const [cardStore, dispatch] = useReducer(reducer, [{person: "", msg: "", imgAdd: ""}] );
50 | // const [msg, setMsgLetter] = useState(['']);
51 | // const [imgAdd, setImgAdd] = useState(['']);
52 | const [newURL, setNewURL] = useState('');
53 | const [popUp, togglePopUp] = useState(false);
54 | const [password, setPassword] = useState('');
55 | const [expiry, setExpiry] = useState('day');
56 | const [numPeople, setNumPeople] = useState(1);
57 |
58 |
59 | function getExpiryDate() {
60 | var d = new Date();
61 | console.log(expiry);
62 | if (expiry === "day") {
63 | d.setDate(d.getDate() + 1);
64 | } else if (expiry === "week") {
65 | d.setDate(d.getWeek() + 1 * 7);
66 | } else if (expiry === "month") {
67 | d.setMonth(d.getMonth() + 1);
68 | } else if (expiry === "year") {
69 | d.setFullYear(d.getFullYear() + 1);
70 | } else if (expiry === "years") {
71 | d.setFullYear(d.getFullYear() + 5);
72 | }
73 | console.log(d.toISOString());
74 | return d.toISOString();
75 | }
76 |
77 | function generateCard() {
78 |
79 | //prevent resubmission
80 | if (!newURL) {
81 | //since we have nested array of objects in our json, pass in array of names to indicate which we want to process
82 | createLetter(
83 | JSON.stringify({
84 | title: titleLetter,
85 | expiry: getExpiryDate(),
86 | password: password,
87 | content: cardStore
88 | }, ['title', 'expiry', 'password', 'content', 'person', 'msg', 'imgAdd']))
89 | .then(res => res.json())
90 | .then(data => {
91 | const newURL = process.env.NEXT_PUBLIC_HOST;
92 | setNewURL(newURL + data.hash);
93 | togglePopUp(true);
94 | }).catch(exception => {
95 | console.log("Uh oh, error trying to save card to db " + exception);
96 | });
97 | }
98 |
99 |
100 | }
101 |
102 | function decreaseNumberCards() {
103 | const len = cardStore.length;
104 | if (len >= 2) {
105 | dispatch({operation: "remove", key: cardStore.length - 1})
106 | }
107 | }
108 |
109 | return (
110 | <>
111 |
112 |
113 | {popUp ? : null}
114 |
115 |
116 |
117 |
120 |
Let's make a digital letter!
121 |
122 | Pick the title
123 |
124 | {cardStore.map((_, i) => {
125 | return
127 | })}
128 |
129 |
130 |
131 | dispatch({operation: "add"})}>
133 | +
134 |
135 | decreaseNumberCards()}>
137 | -
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
Password
147 |
setPassword(evt.target.value)}/>
149 |
150 |
151 |
Expiry
152 |
setExpiry(evt.target.value)}>
153 | 1 day
154 | 1 week
155 | 1 month
156 | 1 year
157 | 5 years
158 |
159 |
160 |
161 |
162 |
163 |
164 | Create
165 |
166 |
167 |
168 |
169 |
170 |
171 | >
172 | )
173 | }
174 |
--------------------------------------------------------------------------------
/frontend/src/styles/Card.module.css:
--------------------------------------------------------------------------------
1 | .bodyLetter {
2 | padding: 20px !important;
3 | width: calc(100% - 1em);
4 | }
5 |
6 | .person {
7 | padding-bottom: 10px;
8 | font-size: 2em;
9 | }
10 |
11 |
12 | @media (max-width: 600px) {
13 | .cardText {
14 | font-size: 1em;
15 | margin-top: 10px;
16 | }
17 |
18 | .image {
19 | width: 106px;
20 | height: 106px;
21 | margin-left: 30px;
22 | }
23 |
24 | .img {
25 | height: 100px;
26 | width: 100px;
27 | }
28 | }
29 |
30 |
31 | @media (min-width: 600px) {
32 | .cardText {
33 | font-size: 1.5em;
34 | margin-top: 15px;
35 | }
36 |
37 | .image {
38 | width: 206px;
39 | height: 206px;
40 | margin-left: 10px;
41 | }
42 |
43 | .img {
44 | height: 200px;
45 | width: 200px;
46 | }
47 | }
48 |
49 |
50 |
51 | .cardText {
52 | white-space: pre-line;
53 | padding-top: 10px;
54 | }
55 |
56 | .image {
57 | transform: rotate(-3deg);
58 | padding: 0 !important;
59 | margin-top: -50px !important;
60 | }
61 |
62 | .img {
63 | padding: 0 !important;
64 | object-fit: cover;
65 | }
--------------------------------------------------------------------------------
/frontend/src/styles/Letter.module.css:
--------------------------------------------------------------------------------
1 | @media (max-width: 751px) {
2 | .letterCard {
3 | rotate: (0deg);
4 | }
5 | }
6 |
7 | .letterCard {
8 | background: var(--bg);
9 | color: var(--fg);
10 | font-family: 'Handlee', cursive;
11 | max-width: 800px;
12 | width: calc(100% - 4em);
13 | margin: 0 auto;
14 | padding: 1em !important;
15 | }
16 |
17 |
18 | .template {
19 | border: 3.5px solid black;
20 | transform: rotate(-1deg);
21 | }
22 |
23 |
24 |
--------------------------------------------------------------------------------
/frontend/src/styles/blocks.css:
--------------------------------------------------------------------------------
1 | /*Source code for blocks*/
2 | body{--block-text-color:#222;--block-background-color:#fff;--block-accent-color:#00ae86;--block-shadow-color:#444}.block{display:block;color:var(--block-text-color);border:3px solid var(--block-text-color);border-radius:3px;padding:4px 8px;background:var(--block-background-color);font-weight:700;cursor:pointer;box-sizing:border-box;position:relative;top:-2px;left:-2px;transition:transform .2s;margin:8px 6px 10px;z-index:1;user-select:none;-webkit-user-select:none;-moz-user-select:none}.block.wrapper,.block.wrapper.inline{display:inline-block;padding:0}.block.wrapper>*{margin:0}.block:before{content:"";background:var(--block-background-color);border:3px solid var(--block-text-color);border-radius:3px;box-sizing:border-box;position:absolute;top:-3px;left:-3px;height:calc(100% + 6px);width:calc(100% + 6px);z-index:-1}.block:focus,.block:hover{transform:translate(2px,2px)}.block:after{content:"";display:block;box-sizing:border-box;background:var(--block-shadow-color);border:3px solid var(--block-text-color);border-radius:3px;height:calc(100% + 6px);width:calc(100% + 6px);position:absolute;top:3px;left:3px;right:0;z-index:-2;transition:transform .2s}.block:focus:after,.block:hover:after{transform:translate(-2px,-3px)}.block:active{color:var(--block-text-color);transform:translate(3px,3px)}.block:active:after{transform:translate(-4px,-4px)}.block:focus{outline:none}.block.fixed{cursor:auto}.block.fixed:active,.block.fixed:active:after,.block.fixed:active:before,.block.fixed:focus,.block.fixed:focus:after,.block.fixed:focus:before,.block.fixed:hover,.block.fixed:hover:after,.block.fixed:hover:before{transform:none}.block.accent{color:var(--block-background-color)}.block.accent,.block.accent:before{background:var(--block-accent-color)}.block.inline{display:inline-block;font-size:.75em;padding:0 6px;margin:3px 2px 1px 4px}.block.inline:after{top:-1px;left:-1px}.block.inline:focus,.block.inline:hover{transform:translate(1px,1px)}.block.inline:focus:after,.block.inline:hover:after{transform:translate(-1px,-1px)}.block.inline:active{transform:translate(2px,2px)}.block.round,.block.round:after,.block.round:before{border-radius:30px}.block.round:after{left:1px}
3 | /*# sourceMappingURL=blocks.min.css.map */
--------------------------------------------------------------------------------
/frontend/src/styles/globals.css:
--------------------------------------------------------------------------------
1 | html,
2 | body {
3 | padding: 0;
4 | margin: 0 auto;
5 | --fg: #010100;
6 | --bg: #f9f2e3;
7 | --cp: #78a3ff;
8 |
9 | background-color: #fefcf8;
10 | border: 0;
11 | font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
12 | Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
13 | min-height: 100vh;
14 | height: 100vh;
15 | }
16 | /*Fonts*/
17 | @import url('https://fonts.googleapis.com/css2?family=Handlee&display=swap');
18 |
19 |
20 |
21 |
22 |
23 | header {
24 | display: flex;
25 | flex-direction: row;
26 | align-items: center;
27 | width: 100%;
28 | border-bottom: 1px solid black;
29 | justify-content: space-between;
30 | background: var(--bg);
31 | color: var(--fg);
32 | padding-right: 20px;
33 | padding-left: 20px;
34 | }
35 |
36 |
37 | footer, header {
38 | text-align: center;
39 | }
40 |
41 | nav {
42 | display: flex;
43 | flex-direction: row;
44 | }
45 |
46 | a {
47 | color: inherit;
48 | text-decoration: none;
49 | }
50 |
51 | * {
52 | box-sizing: border-box;
53 | }
54 |
55 | /*CSS for index.js*/
56 |
57 | .blockBody {
58 | display: flex;
59 | position: relative;
60 | width: 100%;
61 | }
62 |
63 | textarea {
64 | top: 0;
65 | left: 0;
66 | bottom: 0em;
67 | right: 0;
68 | overflow: hidden;
69 | resize: none;
70 | position: absolute;
71 |
72 | }
73 |
74 |
75 | input, textarea, .p-heights {
76 | width: 100% !important;
77 | background-color: var(--bg);
78 | padding: 0.75em;
79 | border: 1px solid black;
80 | font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
81 | Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
82 | }
83 |
84 | .p-heights.new-line {
85 | padding-bottom: 27px !important;
86 | }
87 |
88 | textarea, .p-heights {
89 | box-sizing: border-box;
90 | color: var(--fg);
91 | min-height: 3em;
92 | margin: 0;
93 | line-height: 1.5em;
94 | word-wrap: break-word;
95 | white-space: pre-wrap;
96 | }
97 |
98 | .p-heights {
99 | visibility: hidden;
100 | }
101 |
102 | section h2 {
103 | /*allows highligh to just cover length of element*/
104 | display: inline-block;
105 | }
106 |
107 | a {
108 | color: var(--cp);
109 | }
110 |
111 | a:hover {
112 | text-decoration: underline;
113 | }
114 |
115 | .center-horiz {
116 | display: flex;
117 | flex-direction: column;
118 | align-items: center;
119 | }
120 |
121 | .gif {
122 | max-width: 600px;
123 | margin: 0 auto;
124 | }
125 |
126 |
127 |
128 | @media (max-width: 600px) {
129 | .gif {
130 | width: 80vw;
131 | }
132 | .headerIntro {
133 | font-size: 2em;
134 | }
135 |
136 | .subheaderIntro {
137 | font-size: 1em;
138 | margin-top: -1em;
139 | }
140 |
141 | .infoTitle {
142 | font-size: 1.5em;
143 | }
144 |
145 | .infoText {
146 | font-size: 1.2em;
147 | }
148 |
149 | input, textarea, .p-heights {
150 | font-size: 0.8em;
151 | }
152 |
153 | .password {
154 | width: 100%
155 | }
156 |
157 | .passwordContainer {
158 | width: calc(100% - 2em);
159 | }
160 | }
161 |
162 | @media (min-width: 600px) {
163 | .headerIntro {
164 | font-size: 3em;
165 | }
166 |
167 | .subheaderIntro {
168 | font-size: 2em;
169 | }
170 |
171 | .infoTitle {
172 | font-size: 2em;
173 | }
174 |
175 | .infoText {
176 | font-size: 1.5em;
177 | }
178 |
179 | input, textarea, .p-heights{
180 | font-size: 1em;
181 | }
182 |
183 | .passwordContainer {
184 | width: 50%;
185 | }
186 | }
187 |
188 | .cp {
189 | color: var(--cp);
190 | }
191 |
192 | .headerIntro {
193 | padding: 0 20px 0 20px;
194 | }
195 |
196 | .subheaderIntro {
197 | position: relative;
198 | }
199 |
200 | /*Modal content*/
201 |
202 | .option {
203 | font-size: 1.5em;
204 | }
205 |
206 |
207 | .modal {
208 | position: fixed;
209 | z-index: 5;
210 | background-color: var(--bg);
211 | opacity: 0.95;
212 | top: 0;
213 | left: 0;
214 | right: 0;
215 | bottom: 0;
216 | display: flex;
217 | align-items: center;
218 | justify-content: center;
219 | }
220 |
221 |
222 | .modal-content {
223 | width: 300px;
224 | padding: 20px !important;
225 | margin: 0 auto;
226 | border: 1px solid black;
227 | }
228 |
229 | .block p {
230 | font-weight: normal !important;
231 | }
232 |
233 |
234 |
--------------------------------------------------------------------------------
/frontend/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@babel/code-frame@7.12.11":
6 | version "7.12.11"
7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f"
8 | integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==
9 | dependencies:
10 | "@babel/highlight" "^7.10.4"
11 |
12 | "@babel/code-frame@^7.12.13":
13 | version "7.12.13"
14 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658"
15 | integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==
16 | dependencies:
17 | "@babel/highlight" "^7.12.13"
18 |
19 | "@babel/generator@^7.13.9":
20 | version "7.13.9"
21 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.9.tgz#3a7aa96f9efb8e2be42d38d80e2ceb4c64d8de39"
22 | integrity sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==
23 | dependencies:
24 | "@babel/types" "^7.13.0"
25 | jsesc "^2.5.1"
26 | source-map "^0.5.0"
27 |
28 | "@babel/helper-annotate-as-pure@^7.0.0":
29 | version "7.12.13"
30 | resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab"
31 | integrity sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==
32 | dependencies:
33 | "@babel/types" "^7.12.13"
34 |
35 | "@babel/helper-function-name@^7.12.13":
36 | version "7.12.13"
37 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a"
38 | integrity sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==
39 | dependencies:
40 | "@babel/helper-get-function-arity" "^7.12.13"
41 | "@babel/template" "^7.12.13"
42 | "@babel/types" "^7.12.13"
43 |
44 | "@babel/helper-get-function-arity@^7.12.13":
45 | version "7.12.13"
46 | resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583"
47 | integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==
48 | dependencies:
49 | "@babel/types" "^7.12.13"
50 |
51 | "@babel/helper-module-imports@^7.0.0":
52 | version "7.13.12"
53 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977"
54 | integrity sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==
55 | dependencies:
56 | "@babel/types" "^7.13.12"
57 |
58 | "@babel/helper-split-export-declaration@^7.12.13":
59 | version "7.12.13"
60 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05"
61 | integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==
62 | dependencies:
63 | "@babel/types" "^7.12.13"
64 |
65 | "@babel/helper-validator-identifier@^7.12.11":
66 | version "7.12.11"
67 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed"
68 | integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==
69 |
70 | "@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13":
71 | version "7.13.10"
72 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1"
73 | integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==
74 | dependencies:
75 | "@babel/helper-validator-identifier" "^7.12.11"
76 | chalk "^2.0.0"
77 | js-tokens "^4.0.0"
78 |
79 | "@babel/parser@^7.12.13", "@babel/parser@^7.13.15":
80 | version "7.13.15"
81 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.15.tgz#8e66775fb523599acb6a289e12929fa5ab0954d8"
82 | integrity sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ==
83 |
84 | "@babel/runtime@7.12.5":
85 | version "7.12.5"
86 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e"
87 | integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==
88 | dependencies:
89 | regenerator-runtime "^0.13.4"
90 |
91 | "@babel/template@^7.12.13":
92 | version "7.12.13"
93 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327"
94 | integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==
95 | dependencies:
96 | "@babel/code-frame" "^7.12.13"
97 | "@babel/parser" "^7.12.13"
98 | "@babel/types" "^7.12.13"
99 |
100 | "@babel/traverse@^7.4.5":
101 | version "7.13.15"
102 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.15.tgz#c38bf7679334ddd4028e8e1f7b3aa5019f0dada7"
103 | integrity sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==
104 | dependencies:
105 | "@babel/code-frame" "^7.12.13"
106 | "@babel/generator" "^7.13.9"
107 | "@babel/helper-function-name" "^7.12.13"
108 | "@babel/helper-split-export-declaration" "^7.12.13"
109 | "@babel/parser" "^7.13.15"
110 | "@babel/types" "^7.13.14"
111 | debug "^4.1.0"
112 | globals "^11.1.0"
113 |
114 | "@babel/types@7.8.3":
115 | version "7.8.3"
116 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c"
117 | integrity sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==
118 | dependencies:
119 | esutils "^2.0.2"
120 | lodash "^4.17.13"
121 | to-fast-properties "^2.0.0"
122 |
123 | "@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.14":
124 | version "7.13.14"
125 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.14.tgz#c35a4abb15c7cd45a2746d78ab328e362cbace0d"
126 | integrity sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==
127 | dependencies:
128 | "@babel/helper-validator-identifier" "^7.12.11"
129 | lodash "^4.17.19"
130 | to-fast-properties "^2.0.0"
131 |
132 | "@emotion/is-prop-valid@^0.8.8":
133 | version "0.8.8"
134 | resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a"
135 | integrity sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==
136 | dependencies:
137 | "@emotion/memoize" "0.7.4"
138 |
139 | "@emotion/memoize@0.7.4":
140 | version "0.7.4"
141 | resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb"
142 | integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==
143 |
144 | "@emotion/stylis@^0.8.4":
145 | version "0.8.5"
146 | resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04"
147 | integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==
148 |
149 | "@emotion/unitless@^0.7.4":
150 | version "0.7.5"
151 | resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed"
152 | integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==
153 |
154 | "@hapi/accept@5.0.1":
155 | version "5.0.1"
156 | resolved "https://registry.yarnpkg.com/@hapi/accept/-/accept-5.0.1.tgz#068553e867f0f63225a506ed74e899441af53e10"
157 | integrity sha512-fMr4d7zLzsAXo28PRRQPXR1o2Wmu+6z+VY1UzDp0iFo13Twj8WePakwXBiqn3E1aAlTpSNzCXdnnQXFhst8h8Q==
158 | dependencies:
159 | "@hapi/boom" "9.x.x"
160 | "@hapi/hoek" "9.x.x"
161 |
162 | "@hapi/boom@9.x.x":
163 | version "9.1.2"
164 | resolved "https://registry.yarnpkg.com/@hapi/boom/-/boom-9.1.2.tgz#48bd41d67437164a2d636e3b5bc954f8c8dc5e38"
165 | integrity sha512-uJEJtiNHzKw80JpngDGBCGAmWjBtzxDCz17A9NO2zCi8LLBlb5Frpq4pXwyN+2JQMod4pKz5BALwyneCgDg89Q==
166 | dependencies:
167 | "@hapi/hoek" "9.x.x"
168 |
169 | "@hapi/hoek@9.x.x":
170 | version "9.1.1"
171 | resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.1.1.tgz#9daf5745156fd84b8e9889a2dc721f0c58e894aa"
172 | integrity sha512-CAEbWH7OIur6jEOzaai83jq3FmKmv4PmX1JYfs9IrYcGEVI/lyL1EXJGCj7eFVJ0bg5QR8LMxBlEtA+xKiLpFw==
173 |
174 | "@next/env@10.1.3":
175 | version "10.1.3"
176 | resolved "https://registry.yarnpkg.com/@next/env/-/env-10.1.3.tgz#29e5d62919b4a7b1859f8d36169848dc3f5ddebe"
177 | integrity sha512-q7z7NvmRs66lCQmVJtKjDxVtMTjSwP6ExVzaH46pbTH60MHgzEJ9H4jXrFLTihPmCIvpAv6Ai04jbS8dcg1ZMQ==
178 |
179 | "@next/polyfill-module@10.1.3":
180 | version "10.1.3"
181 | resolved "https://registry.yarnpkg.com/@next/polyfill-module/-/polyfill-module-10.1.3.tgz#beafe89bc4235d436fa0ed02c9d2a5d311fb0238"
182 | integrity sha512-1DtUVcuoBJAn5IrxIZQjUG1KTPkiXMYloykPSkRxawimgvG9dRj2kscU+4KGNSFxHoxW9c68VRCb+7MDz5aGGw==
183 |
184 | "@next/react-dev-overlay@10.1.3":
185 | version "10.1.3"
186 | resolved "https://registry.yarnpkg.com/@next/react-dev-overlay/-/react-dev-overlay-10.1.3.tgz#ee1c6033b29be9b383e061bd9705021d131ea445"
187 | integrity sha512-vIgUah3bR9+MKzwU1Ni5ONfYM0VdI42i7jZ+Ei1c0wjwkG9anVnDqhSQ3mVg62GP2nt7ExaaFyf9THbsw5KYXg==
188 | dependencies:
189 | "@babel/code-frame" "7.12.11"
190 | anser "1.4.9"
191 | chalk "4.0.0"
192 | classnames "2.2.6"
193 | css.escape "1.5.1"
194 | data-uri-to-buffer "3.0.1"
195 | platform "1.3.6"
196 | shell-quote "1.7.2"
197 | source-map "0.8.0-beta.0"
198 | stacktrace-parser "0.1.10"
199 | strip-ansi "6.0.0"
200 |
201 | "@next/react-refresh-utils@10.1.3":
202 | version "10.1.3"
203 | resolved "https://registry.yarnpkg.com/@next/react-refresh-utils/-/react-refresh-utils-10.1.3.tgz#65b3e1b9846c02452787fde1d54ad9c54b506dbd"
204 | integrity sha512-P4GJZuLKfD/o42JvGZ/xP4Hxg68vd3NeZxOLqIuQKFjjaYgC2IrO+lE5PTwGmRkytjfprJC+9j7Jss/xQAS6QA==
205 |
206 | "@opentelemetry/api@0.14.0":
207 | version "0.14.0"
208 | resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-0.14.0.tgz#4e17d8d2f1da72b19374efa7b6526aa001267cae"
209 | integrity sha512-L7RMuZr5LzMmZiQSQDy9O1jo0q+DaLy6XpYJfIGfYSfoJA5qzYwUP3sP1uMIQ549DvxAgM3ng85EaPTM/hUHwQ==
210 | dependencies:
211 | "@opentelemetry/context-base" "^0.14.0"
212 |
213 | "@opentelemetry/context-base@^0.14.0":
214 | version "0.14.0"
215 | resolved "https://registry.yarnpkg.com/@opentelemetry/context-base/-/context-base-0.14.0.tgz#c67fc20a4d891447ca1a855d7d70fa79a3533001"
216 | integrity sha512-sDOAZcYwynHFTbLo6n8kIbLiVF3a3BLkrmehJUyEbT9F+Smbi47kLGS2gG2g0fjBLR/Lr1InPD7kXL7FaTqEkw==
217 |
218 | "@types/json-schema@^7.0.6":
219 | version "7.0.7"
220 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad"
221 | integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==
222 |
223 | "@types/node@*":
224 | version "14.14.37"
225 | resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.37.tgz#a3dd8da4eb84a996c36e331df98d82abd76b516e"
226 | integrity sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw==
227 |
228 | ajv-keywords@^3.5.2:
229 | version "3.5.2"
230 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
231 | integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
232 |
233 | ajv@^6.12.5:
234 | version "6.12.6"
235 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
236 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
237 | dependencies:
238 | fast-deep-equal "^3.1.1"
239 | fast-json-stable-stringify "^2.0.0"
240 | json-schema-traverse "^0.4.1"
241 | uri-js "^4.2.2"
242 |
243 | anser@1.4.9:
244 | version "1.4.9"
245 | resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.9.tgz#1f85423a5dcf8da4631a341665ff675b96845760"
246 | integrity sha512-AI+BjTeGt2+WFk4eWcqbQ7snZpDBt8SaLlj0RT2h5xfdWaiy51OjYvqwMrNzJLGy8iOAL6nKDITWO+rd4MkYEA==
247 |
248 | ansi-regex@^5.0.0:
249 | version "5.0.0"
250 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
251 | integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
252 |
253 | ansi-styles@^3.2.1:
254 | version "3.2.1"
255 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
256 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
257 | dependencies:
258 | color-convert "^1.9.0"
259 |
260 | ansi-styles@^4.1.0:
261 | version "4.3.0"
262 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
263 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
264 | dependencies:
265 | color-convert "^2.0.1"
266 |
267 | anymatch@~3.1.1:
268 | version "3.1.2"
269 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
270 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
271 | dependencies:
272 | normalize-path "^3.0.0"
273 | picomatch "^2.0.4"
274 |
275 | array-filter@^1.0.0:
276 | version "1.0.0"
277 | resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83"
278 | integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=
279 |
280 | asn1.js@^5.2.0:
281 | version "5.4.1"
282 | resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07"
283 | integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==
284 | dependencies:
285 | bn.js "^4.0.0"
286 | inherits "^2.0.1"
287 | minimalistic-assert "^1.0.0"
288 | safer-buffer "^2.1.0"
289 |
290 | assert@2.0.0:
291 | version "2.0.0"
292 | resolved "https://registry.yarnpkg.com/assert/-/assert-2.0.0.tgz#95fc1c616d48713510680f2eaf2d10dd22e02d32"
293 | integrity sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==
294 | dependencies:
295 | es6-object-assign "^1.1.0"
296 | is-nan "^1.2.1"
297 | object-is "^1.0.1"
298 | util "^0.12.0"
299 |
300 | assert@^1.1.1:
301 | version "1.5.0"
302 | resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"
303 | integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==
304 | dependencies:
305 | object-assign "^4.1.1"
306 | util "0.10.3"
307 |
308 | ast-types@0.13.2:
309 | version "0.13.2"
310 | resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.2.tgz#df39b677a911a83f3a049644fb74fdded23cea48"
311 | integrity sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA==
312 |
313 | available-typed-arrays@^1.0.2:
314 | version "1.0.2"
315 | resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz#6b098ca9d8039079ee3f77f7b783c4480ba513f5"
316 | integrity sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==
317 | dependencies:
318 | array-filter "^1.0.0"
319 |
320 | "babel-plugin-styled-components@>= 1.12.0", babel-plugin-styled-components@^1.8.0:
321 | version "1.12.0"
322 | resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.12.0.tgz#1dec1676512177de6b827211e9eda5a30db4f9b9"
323 | integrity sha512-FEiD7l5ZABdJPpLssKXjBUJMYqzbcNzBowfXDCdJhOpbhWiewapUaY+LZGT8R4Jg2TwOjGjG4RKeyrO5p9sBkA==
324 | dependencies:
325 | "@babel/helper-annotate-as-pure" "^7.0.0"
326 | "@babel/helper-module-imports" "^7.0.0"
327 | babel-plugin-syntax-jsx "^6.18.0"
328 | lodash "^4.17.11"
329 |
330 | babel-plugin-syntax-jsx@6.18.0, babel-plugin-syntax-jsx@^6.18.0:
331 | version "6.18.0"
332 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
333 | integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=
334 |
335 | base64-js@^1.0.2:
336 | version "1.5.1"
337 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
338 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
339 |
340 | big.js@^5.2.2:
341 | version "5.2.2"
342 | resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
343 | integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
344 |
345 | binary-extensions@^2.0.0:
346 | version "2.2.0"
347 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
348 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
349 |
350 | bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9:
351 | version "4.12.0"
352 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"
353 | integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==
354 |
355 | bn.js@^5.0.0, bn.js@^5.1.1:
356 | version "5.2.0"
357 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002"
358 | integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==
359 |
360 | braces@~3.0.2:
361 | version "3.0.2"
362 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
363 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
364 | dependencies:
365 | fill-range "^7.0.1"
366 |
367 | brorand@^1.0.1, brorand@^1.1.0:
368 | version "1.1.0"
369 | resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
370 | integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
371 |
372 | browserify-aes@^1.0.0, browserify-aes@^1.0.4:
373 | version "1.2.0"
374 | resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
375 | integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
376 | dependencies:
377 | buffer-xor "^1.0.3"
378 | cipher-base "^1.0.0"
379 | create-hash "^1.1.0"
380 | evp_bytestokey "^1.0.3"
381 | inherits "^2.0.1"
382 | safe-buffer "^5.0.1"
383 |
384 | browserify-cipher@^1.0.0:
385 | version "1.0.1"
386 | resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"
387 | integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==
388 | dependencies:
389 | browserify-aes "^1.0.4"
390 | browserify-des "^1.0.0"
391 | evp_bytestokey "^1.0.0"
392 |
393 | browserify-des@^1.0.0:
394 | version "1.0.2"
395 | resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c"
396 | integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==
397 | dependencies:
398 | cipher-base "^1.0.1"
399 | des.js "^1.0.0"
400 | inherits "^2.0.1"
401 | safe-buffer "^5.1.2"
402 |
403 | browserify-rsa@^4.0.0, browserify-rsa@^4.0.1:
404 | version "4.1.0"
405 | resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d"
406 | integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==
407 | dependencies:
408 | bn.js "^5.0.0"
409 | randombytes "^2.0.1"
410 |
411 | browserify-sign@^4.0.0:
412 | version "4.2.1"
413 | resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3"
414 | integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==
415 | dependencies:
416 | bn.js "^5.1.1"
417 | browserify-rsa "^4.0.1"
418 | create-hash "^1.2.0"
419 | create-hmac "^1.1.7"
420 | elliptic "^6.5.3"
421 | inherits "^2.0.4"
422 | parse-asn1 "^5.1.5"
423 | readable-stream "^3.6.0"
424 | safe-buffer "^5.2.0"
425 |
426 | browserify-zlib@0.2.0, browserify-zlib@^0.2.0:
427 | version "0.2.0"
428 | resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
429 | integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
430 | dependencies:
431 | pako "~1.0.5"
432 |
433 | browserslist@4.16.1:
434 | version "4.16.1"
435 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.1.tgz#bf757a2da376b3447b800a16f0f1c96358138766"
436 | integrity sha512-UXhDrwqsNcpTYJBTZsbGATDxZbiVDsx6UjpmRUmtnP10pr8wAYr5LgFoEFw9ixriQH2mv/NX2SfGzE/o8GndLA==
437 | dependencies:
438 | caniuse-lite "^1.0.30001173"
439 | colorette "^1.2.1"
440 | electron-to-chromium "^1.3.634"
441 | escalade "^3.1.1"
442 | node-releases "^1.1.69"
443 |
444 | buffer-xor@^1.0.3:
445 | version "1.0.3"
446 | resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
447 | integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
448 |
449 | buffer@5.6.0:
450 | version "5.6.0"
451 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786"
452 | integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==
453 | dependencies:
454 | base64-js "^1.0.2"
455 | ieee754 "^1.1.4"
456 |
457 | buffer@^4.3.0:
458 | version "4.9.2"
459 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8"
460 | integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==
461 | dependencies:
462 | base64-js "^1.0.2"
463 | ieee754 "^1.1.4"
464 | isarray "^1.0.0"
465 |
466 | builtin-status-codes@^3.0.0:
467 | version "3.0.0"
468 | resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
469 | integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
470 |
471 | bytes@3.1.0:
472 | version "3.1.0"
473 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
474 | integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
475 |
476 | call-bind@^1.0.0, call-bind@^1.0.2:
477 | version "1.0.2"
478 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
479 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
480 | dependencies:
481 | function-bind "^1.1.1"
482 | get-intrinsic "^1.0.2"
483 |
484 | camelize@^1.0.0:
485 | version "1.0.0"
486 | resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b"
487 | integrity sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=
488 |
489 | caniuse-lite@^1.0.30001173, caniuse-lite@^1.0.30001179:
490 | version "1.0.30001208"
491 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001208.tgz#a999014a35cebd4f98c405930a057a0d75352eb9"
492 | integrity sha512-OE5UE4+nBOro8Dyvv0lfx+SRtfVIOM9uhKqFmJeUbGriqhhStgp1A0OyBpgy3OUF8AhYCT+PVwPC1gMl2ZcQMA==
493 |
494 | chalk@2.4.2, chalk@^2.0.0, chalk@^2.4.2:
495 | version "2.4.2"
496 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
497 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
498 | dependencies:
499 | ansi-styles "^3.2.1"
500 | escape-string-regexp "^1.0.5"
501 | supports-color "^5.3.0"
502 |
503 | chalk@4.0.0:
504 | version "4.0.0"
505 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.0.0.tgz#6e98081ed2d17faab615eb52ac66ec1fe6209e72"
506 | integrity sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==
507 | dependencies:
508 | ansi-styles "^4.1.0"
509 | supports-color "^7.1.0"
510 |
511 | chokidar@3.5.1:
512 | version "3.5.1"
513 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a"
514 | integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==
515 | dependencies:
516 | anymatch "~3.1.1"
517 | braces "~3.0.2"
518 | glob-parent "~5.1.0"
519 | is-binary-path "~2.1.0"
520 | is-glob "~4.0.1"
521 | normalize-path "~3.0.0"
522 | readdirp "~3.5.0"
523 | optionalDependencies:
524 | fsevents "~2.3.1"
525 |
526 | cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
527 | version "1.0.4"
528 | resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
529 | integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
530 | dependencies:
531 | inherits "^2.0.1"
532 | safe-buffer "^5.0.1"
533 |
534 | classnames@2.2.6:
535 | version "2.2.6"
536 | resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce"
537 | integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==
538 |
539 | color-convert@^1.9.0:
540 | version "1.9.3"
541 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
542 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
543 | dependencies:
544 | color-name "1.1.3"
545 |
546 | color-convert@^2.0.1:
547 | version "2.0.1"
548 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
549 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
550 | dependencies:
551 | color-name "~1.1.4"
552 |
553 | color-name@1.1.3:
554 | version "1.1.3"
555 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
556 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
557 |
558 | color-name@~1.1.4:
559 | version "1.1.4"
560 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
561 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
562 |
563 | colorette@^1.2.1:
564 | version "1.2.2"
565 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94"
566 | integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==
567 |
568 | commondir@^1.0.1:
569 | version "1.0.1"
570 | resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
571 | integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
572 |
573 | console-browserify@^1.1.0:
574 | version "1.2.0"
575 | resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
576 | integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==
577 |
578 | constants-browserify@1.0.0, constants-browserify@^1.0.0:
579 | version "1.0.0"
580 | resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
581 | integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
582 |
583 | convert-source-map@1.7.0:
584 | version "1.7.0"
585 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
586 | integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
587 | dependencies:
588 | safe-buffer "~5.1.1"
589 |
590 | core-util-is@~1.0.0:
591 | version "1.0.2"
592 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
593 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
594 |
595 | create-ecdh@^4.0.0:
596 | version "4.0.4"
597 | resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e"
598 | integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==
599 | dependencies:
600 | bn.js "^4.1.0"
601 | elliptic "^6.5.3"
602 |
603 | create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0:
604 | version "1.2.0"
605 | resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
606 | integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
607 | dependencies:
608 | cipher-base "^1.0.1"
609 | inherits "^2.0.1"
610 | md5.js "^1.3.4"
611 | ripemd160 "^2.0.1"
612 | sha.js "^2.4.0"
613 |
614 | create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7:
615 | version "1.1.7"
616 | resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
617 | integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
618 | dependencies:
619 | cipher-base "^1.0.3"
620 | create-hash "^1.1.0"
621 | inherits "^2.0.1"
622 | ripemd160 "^2.0.0"
623 | safe-buffer "^5.0.1"
624 | sha.js "^2.4.8"
625 |
626 | crypto-browserify@3.12.0, crypto-browserify@^3.11.0:
627 | version "3.12.0"
628 | resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
629 | integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==
630 | dependencies:
631 | browserify-cipher "^1.0.0"
632 | browserify-sign "^4.0.0"
633 | create-ecdh "^4.0.0"
634 | create-hash "^1.1.0"
635 | create-hmac "^1.1.0"
636 | diffie-hellman "^5.0.0"
637 | inherits "^2.0.1"
638 | pbkdf2 "^3.0.3"
639 | public-encrypt "^4.0.0"
640 | randombytes "^2.0.0"
641 | randomfill "^1.0.3"
642 |
643 | css-color-keywords@^1.0.0:
644 | version "1.0.0"
645 | resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05"
646 | integrity sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU=
647 |
648 | css-to-react-native@^3.0.0:
649 | version "3.0.0"
650 | resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.0.0.tgz#62dbe678072a824a689bcfee011fc96e02a7d756"
651 | integrity sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==
652 | dependencies:
653 | camelize "^1.0.0"
654 | css-color-keywords "^1.0.0"
655 | postcss-value-parser "^4.0.2"
656 |
657 | css.escape@1.5.1:
658 | version "1.5.1"
659 | resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb"
660 | integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=
661 |
662 | cssnano-preset-simple@1.2.2:
663 | version "1.2.2"
664 | resolved "https://registry.yarnpkg.com/cssnano-preset-simple/-/cssnano-preset-simple-1.2.2.tgz#c631bf79ffec7fdfc4069e2f2da3ca67d99d8413"
665 | integrity sha512-gtvrcRSGtP3hA/wS8mFVinFnQdEsEpm3v4I/s/KmNjpdWaThV/4E5EojAzFXxyT5OCSRPLlHR9iQexAqKHlhGQ==
666 | dependencies:
667 | caniuse-lite "^1.0.30001179"
668 | postcss "^7.0.32"
669 |
670 | cssnano-simple@1.2.2:
671 | version "1.2.2"
672 | resolved "https://registry.yarnpkg.com/cssnano-simple/-/cssnano-simple-1.2.2.tgz#72c2c3970e67123c3b4130894a30dc1050267007"
673 | integrity sha512-4slyYc1w4JhSbhVX5xi9G0aQ42JnRyPg+7l7cqoNyoIDzfWx40Rq3JQZnoAWDu60A4AvKVp9ln/YSUOdhDX68g==
674 | dependencies:
675 | cssnano-preset-simple "1.2.2"
676 | postcss "^7.0.32"
677 |
678 | data-uri-to-buffer@3.0.1:
679 | version "3.0.1"
680 | resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636"
681 | integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==
682 |
683 | debug@2:
684 | version "2.6.9"
685 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
686 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
687 | dependencies:
688 | ms "2.0.0"
689 |
690 | debug@^4.1.0:
691 | version "4.3.1"
692 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
693 | integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==
694 | dependencies:
695 | ms "2.1.2"
696 |
697 | define-properties@^1.1.3:
698 | version "1.1.3"
699 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
700 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
701 | dependencies:
702 | object-keys "^1.0.12"
703 |
704 | depd@~1.1.2:
705 | version "1.1.2"
706 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
707 | integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
708 |
709 | des.js@^1.0.0:
710 | version "1.0.1"
711 | resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843"
712 | integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==
713 | dependencies:
714 | inherits "^2.0.1"
715 | minimalistic-assert "^1.0.0"
716 |
717 | diffie-hellman@^5.0.0:
718 | version "5.0.3"
719 | resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
720 | integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==
721 | dependencies:
722 | bn.js "^4.1.0"
723 | miller-rabin "^4.0.0"
724 | randombytes "^2.0.0"
725 |
726 | domain-browser@4.19.0:
727 | version "4.19.0"
728 | resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-4.19.0.tgz#1093e17c0a17dbd521182fe90d49ac1370054af1"
729 | integrity sha512-fRA+BaAWOR/yr/t7T9E9GJztHPeFjj8U35ajyAjCDtAAnTn1Rc1f6W6VGPJrO1tkQv9zWu+JRof7z6oQtiYVFQ==
730 |
731 | domain-browser@^1.1.1:
732 | version "1.2.0"
733 | resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
734 | integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
735 |
736 | electron-to-chromium@^1.3.634:
737 | version "1.3.713"
738 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.713.tgz#4583efb17f2d1e9ec07a44c8004ea73c013ad146"
739 | integrity sha512-HWgkyX4xTHmxcWWlvv7a87RHSINEcpKYZmDMxkUlHcY+CJcfx7xEfBHuXVsO1rzyYs1WQJ7EgDp2CoErakBIow==
740 |
741 | elliptic@^6.5.3:
742 | version "6.5.4"
743 | resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb"
744 | integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==
745 | dependencies:
746 | bn.js "^4.11.9"
747 | brorand "^1.1.0"
748 | hash.js "^1.0.0"
749 | hmac-drbg "^1.0.1"
750 | inherits "^2.0.4"
751 | minimalistic-assert "^1.0.1"
752 | minimalistic-crypto-utils "^1.0.1"
753 |
754 | emojis-list@^2.0.0:
755 | version "2.1.0"
756 | resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
757 | integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
758 |
759 | emojis-list@^3.0.0:
760 | version "3.0.0"
761 | resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
762 | integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
763 |
764 | encoding@0.1.13:
765 | version "0.1.13"
766 | resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9"
767 | integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==
768 | dependencies:
769 | iconv-lite "^0.6.2"
770 |
771 | es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2:
772 | version "1.18.0"
773 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4"
774 | integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==
775 | dependencies:
776 | call-bind "^1.0.2"
777 | es-to-primitive "^1.2.1"
778 | function-bind "^1.1.1"
779 | get-intrinsic "^1.1.1"
780 | has "^1.0.3"
781 | has-symbols "^1.0.2"
782 | is-callable "^1.2.3"
783 | is-negative-zero "^2.0.1"
784 | is-regex "^1.1.2"
785 | is-string "^1.0.5"
786 | object-inspect "^1.9.0"
787 | object-keys "^1.1.1"
788 | object.assign "^4.1.2"
789 | string.prototype.trimend "^1.0.4"
790 | string.prototype.trimstart "^1.0.4"
791 | unbox-primitive "^1.0.0"
792 |
793 | es-to-primitive@^1.2.1:
794 | version "1.2.1"
795 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
796 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
797 | dependencies:
798 | is-callable "^1.1.4"
799 | is-date-object "^1.0.1"
800 | is-symbol "^1.0.2"
801 |
802 | es6-object-assign@^1.1.0:
803 | version "1.1.0"
804 | resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c"
805 | integrity sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=
806 |
807 | escalade@^3.1.1:
808 | version "3.1.1"
809 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
810 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
811 |
812 | escape-string-regexp@^1.0.5:
813 | version "1.0.5"
814 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
815 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
816 |
817 | esutils@^2.0.2:
818 | version "2.0.3"
819 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
820 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
821 |
822 | etag@1.8.1:
823 | version "1.8.1"
824 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
825 | integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
826 |
827 | events@^3.0.0:
828 | version "3.3.0"
829 | resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
830 | integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
831 |
832 | evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
833 | version "1.0.3"
834 | resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
835 | integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
836 | dependencies:
837 | md5.js "^1.3.4"
838 | safe-buffer "^5.1.1"
839 |
840 | fast-deep-equal@^3.1.1:
841 | version "3.1.3"
842 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
843 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
844 |
845 | fast-json-stable-stringify@^2.0.0:
846 | version "2.1.0"
847 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
848 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
849 |
850 | file-loader@^6.0.0:
851 | version "6.2.0"
852 | resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d"
853 | integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==
854 | dependencies:
855 | loader-utils "^2.0.0"
856 | schema-utils "^3.0.0"
857 |
858 | fill-range@^7.0.1:
859 | version "7.0.1"
860 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
861 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
862 | dependencies:
863 | to-regex-range "^5.0.1"
864 |
865 | find-cache-dir@3.3.1:
866 | version "3.3.1"
867 | resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880"
868 | integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==
869 | dependencies:
870 | commondir "^1.0.1"
871 | make-dir "^3.0.2"
872 | pkg-dir "^4.1.0"
873 |
874 | find-up@^4.0.0:
875 | version "4.1.0"
876 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
877 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
878 | dependencies:
879 | locate-path "^5.0.0"
880 | path-exists "^4.0.0"
881 |
882 | foreach@^2.0.5:
883 | version "2.0.5"
884 | resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99"
885 | integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k=
886 |
887 | fsevents@~2.3.1:
888 | version "2.3.2"
889 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
890 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
891 |
892 | function-bind@^1.1.1:
893 | version "1.1.1"
894 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
895 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
896 |
897 | get-intrinsic@^1.0.2, get-intrinsic@^1.1.1:
898 | version "1.1.1"
899 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"
900 | integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==
901 | dependencies:
902 | function-bind "^1.1.1"
903 | has "^1.0.3"
904 | has-symbols "^1.0.1"
905 |
906 | get-orientation@1.1.2:
907 | version "1.1.2"
908 | resolved "https://registry.yarnpkg.com/get-orientation/-/get-orientation-1.1.2.tgz#20507928951814f8a91ded0a0e67b29dfab98947"
909 | integrity sha512-/pViTfifW+gBbh/RnlFYHINvELT9Znt+SYyDKAUL6uV6By019AK/s+i9XP4jSwq7lwP38Fd8HVeTxym3+hkwmQ==
910 | dependencies:
911 | stream-parser "^0.3.1"
912 |
913 | glob-parent@~5.1.0:
914 | version "5.1.2"
915 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
916 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
917 | dependencies:
918 | is-glob "^4.0.1"
919 |
920 | glob-to-regexp@^0.4.1:
921 | version "0.4.1"
922 | resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
923 | integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
924 |
925 | globals@^11.1.0:
926 | version "11.12.0"
927 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
928 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
929 |
930 | graceful-fs@^4.1.2:
931 | version "4.2.6"
932 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"
933 | integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==
934 |
935 | has-bigints@^1.0.1:
936 | version "1.0.1"
937 | resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113"
938 | integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==
939 |
940 | has-flag@^3.0.0:
941 | version "3.0.0"
942 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
943 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
944 |
945 | has-flag@^4.0.0:
946 | version "4.0.0"
947 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
948 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
949 |
950 | has-symbols@^1.0.1, has-symbols@^1.0.2:
951 | version "1.0.2"
952 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423"
953 | integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==
954 |
955 | has@^1.0.3:
956 | version "1.0.3"
957 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
958 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
959 | dependencies:
960 | function-bind "^1.1.1"
961 |
962 | hash-base@^3.0.0:
963 | version "3.1.0"
964 | resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33"
965 | integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==
966 | dependencies:
967 | inherits "^2.0.4"
968 | readable-stream "^3.6.0"
969 | safe-buffer "^5.2.0"
970 |
971 | hash.js@^1.0.0, hash.js@^1.0.3:
972 | version "1.1.7"
973 | resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
974 | integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
975 | dependencies:
976 | inherits "^2.0.3"
977 | minimalistic-assert "^1.0.1"
978 |
979 | he@1.2.0:
980 | version "1.2.0"
981 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
982 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
983 |
984 | hmac-drbg@^1.0.1:
985 | version "1.0.1"
986 | resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
987 | integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
988 | dependencies:
989 | hash.js "^1.0.3"
990 | minimalistic-assert "^1.0.0"
991 | minimalistic-crypto-utils "^1.0.1"
992 |
993 | hoist-non-react-statics@^3.0.0:
994 | version "3.3.2"
995 | resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
996 | integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
997 | dependencies:
998 | react-is "^16.7.0"
999 |
1000 | http-errors@1.7.3:
1001 | version "1.7.3"
1002 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06"
1003 | integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==
1004 | dependencies:
1005 | depd "~1.1.2"
1006 | inherits "2.0.4"
1007 | setprototypeof "1.1.1"
1008 | statuses ">= 1.5.0 < 2"
1009 | toidentifier "1.0.0"
1010 |
1011 | https-browserify@1.0.0, https-browserify@^1.0.0:
1012 | version "1.0.0"
1013 | resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
1014 | integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
1015 |
1016 | iconv-lite@0.4.24:
1017 | version "0.4.24"
1018 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
1019 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
1020 | dependencies:
1021 | safer-buffer ">= 2.1.2 < 3"
1022 |
1023 | iconv-lite@^0.6.2:
1024 | version "0.6.2"
1025 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01"
1026 | integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==
1027 | dependencies:
1028 | safer-buffer ">= 2.1.2 < 3.0.0"
1029 |
1030 | ieee754@^1.1.4:
1031 | version "1.2.1"
1032 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
1033 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
1034 |
1035 | inherits@2.0.1:
1036 | version "2.0.1"
1037 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
1038 | integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
1039 |
1040 | inherits@2.0.3:
1041 | version "2.0.3"
1042 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
1043 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
1044 |
1045 | inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4:
1046 | version "2.0.4"
1047 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
1048 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
1049 |
1050 | is-arguments@^1.0.4:
1051 | version "1.1.0"
1052 | resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9"
1053 | integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==
1054 | dependencies:
1055 | call-bind "^1.0.0"
1056 |
1057 | is-bigint@^1.0.1:
1058 | version "1.0.1"
1059 | resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.1.tgz#6923051dfcbc764278540b9ce0e6b3213aa5ebc2"
1060 | integrity sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==
1061 |
1062 | is-binary-path@~2.1.0:
1063 | version "2.1.0"
1064 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
1065 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
1066 | dependencies:
1067 | binary-extensions "^2.0.0"
1068 |
1069 | is-boolean-object@^1.1.0:
1070 | version "1.1.0"
1071 | resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0"
1072 | integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==
1073 | dependencies:
1074 | call-bind "^1.0.0"
1075 |
1076 | is-callable@^1.1.4, is-callable@^1.2.3:
1077 | version "1.2.3"
1078 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e"
1079 | integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==
1080 |
1081 | is-date-object@^1.0.1:
1082 | version "1.0.2"
1083 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e"
1084 | integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==
1085 |
1086 | is-extglob@^2.1.1:
1087 | version "2.1.1"
1088 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
1089 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
1090 |
1091 | is-generator-function@^1.0.7:
1092 | version "1.0.8"
1093 | resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.8.tgz#dfb5c2b120e02b0a8d9d2c6806cd5621aa922f7b"
1094 | integrity sha512-2Omr/twNtufVZFr1GhxjOMFPAj2sjc/dKaIqBhvo4qciXfJmITGH6ZGd8eZYNHza8t1y0e01AuqRhJwfWp26WQ==
1095 |
1096 | is-glob@^4.0.1, is-glob@~4.0.1:
1097 | version "4.0.1"
1098 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
1099 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
1100 | dependencies:
1101 | is-extglob "^2.1.1"
1102 |
1103 | is-nan@^1.2.1:
1104 | version "1.3.2"
1105 | resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d"
1106 | integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==
1107 | dependencies:
1108 | call-bind "^1.0.0"
1109 | define-properties "^1.1.3"
1110 |
1111 | is-negative-zero@^2.0.1:
1112 | version "2.0.1"
1113 | resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24"
1114 | integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==
1115 |
1116 | is-number-object@^1.0.4:
1117 | version "1.0.4"
1118 | resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197"
1119 | integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==
1120 |
1121 | is-number@^7.0.0:
1122 | version "7.0.0"
1123 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
1124 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
1125 |
1126 | is-regex@^1.1.2:
1127 | version "1.1.2"
1128 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251"
1129 | integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==
1130 | dependencies:
1131 | call-bind "^1.0.2"
1132 | has-symbols "^1.0.1"
1133 |
1134 | is-string@^1.0.5:
1135 | version "1.0.5"
1136 | resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6"
1137 | integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==
1138 |
1139 | is-symbol@^1.0.2, is-symbol@^1.0.3:
1140 | version "1.0.3"
1141 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937"
1142 | integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==
1143 | dependencies:
1144 | has-symbols "^1.0.1"
1145 |
1146 | is-typed-array@^1.1.3:
1147 | version "1.1.5"
1148 | resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.5.tgz#f32e6e096455e329eb7b423862456aa213f0eb4e"
1149 | integrity sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==
1150 | dependencies:
1151 | available-typed-arrays "^1.0.2"
1152 | call-bind "^1.0.2"
1153 | es-abstract "^1.18.0-next.2"
1154 | foreach "^2.0.5"
1155 | has-symbols "^1.0.1"
1156 |
1157 | isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
1158 | version "1.0.0"
1159 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
1160 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
1161 |
1162 | isobject@^2.0.0:
1163 | version "2.1.0"
1164 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
1165 | integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
1166 | dependencies:
1167 | isarray "1.0.0"
1168 |
1169 | jest-worker@27.0.0-next.5:
1170 | version "27.0.0-next.5"
1171 | resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.0-next.5.tgz#5985ee29b12a4e191f4aae4bb73b97971d86ec28"
1172 | integrity sha512-mk0umAQ5lT+CaOJ+Qp01N6kz48sJG2kr2n1rX0koqKf6FIygQV0qLOdN9SCYID4IVeSigDOcPeGLozdMLYfb5g==
1173 | dependencies:
1174 | "@types/node" "*"
1175 | merge-stream "^2.0.0"
1176 | supports-color "^8.0.0"
1177 |
1178 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
1179 | version "4.0.0"
1180 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
1181 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
1182 |
1183 | jsesc@^2.5.1:
1184 | version "2.5.2"
1185 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
1186 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
1187 |
1188 | json-schema-traverse@^0.4.1:
1189 | version "0.4.1"
1190 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
1191 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
1192 |
1193 | json5@^1.0.1:
1194 | version "1.0.1"
1195 | resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
1196 | integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
1197 | dependencies:
1198 | minimist "^1.2.0"
1199 |
1200 | json5@^2.1.2:
1201 | version "2.2.0"
1202 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3"
1203 | integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==
1204 | dependencies:
1205 | minimist "^1.2.5"
1206 |
1207 | line-column@^1.0.2:
1208 | version "1.0.2"
1209 | resolved "https://registry.yarnpkg.com/line-column/-/line-column-1.0.2.tgz#d25af2936b6f4849172b312e4792d1d987bc34a2"
1210 | integrity sha1-0lryk2tvSEkXKzEuR5LR2Ye8NKI=
1211 | dependencies:
1212 | isarray "^1.0.0"
1213 | isobject "^2.0.0"
1214 |
1215 | loader-utils@1.2.3:
1216 | version "1.2.3"
1217 | resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7"
1218 | integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==
1219 | dependencies:
1220 | big.js "^5.2.2"
1221 | emojis-list "^2.0.0"
1222 | json5 "^1.0.1"
1223 |
1224 | loader-utils@^2.0.0:
1225 | version "2.0.0"
1226 | resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0"
1227 | integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==
1228 | dependencies:
1229 | big.js "^5.2.2"
1230 | emojis-list "^3.0.0"
1231 | json5 "^2.1.2"
1232 |
1233 | locate-path@^5.0.0:
1234 | version "5.0.0"
1235 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
1236 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
1237 | dependencies:
1238 | p-locate "^4.1.0"
1239 |
1240 | lodash.sortby@^4.7.0:
1241 | version "4.7.0"
1242 | resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
1243 | integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=
1244 |
1245 | lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.19:
1246 | version "4.17.21"
1247 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
1248 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
1249 |
1250 | loose-envify@^1.1.0, loose-envify@^1.4.0:
1251 | version "1.4.0"
1252 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
1253 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
1254 | dependencies:
1255 | js-tokens "^3.0.0 || ^4.0.0"
1256 |
1257 | make-dir@^3.0.2:
1258 | version "3.1.0"
1259 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
1260 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
1261 | dependencies:
1262 | semver "^6.0.0"
1263 |
1264 | md5.js@^1.3.4:
1265 | version "1.3.5"
1266 | resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
1267 | integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
1268 | dependencies:
1269 | hash-base "^3.0.0"
1270 | inherits "^2.0.1"
1271 | safe-buffer "^5.1.2"
1272 |
1273 | merge-stream@^2.0.0:
1274 | version "2.0.0"
1275 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
1276 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
1277 |
1278 | miller-rabin@^4.0.0:
1279 | version "4.0.1"
1280 | resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
1281 | integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==
1282 | dependencies:
1283 | bn.js "^4.0.0"
1284 | brorand "^1.0.1"
1285 |
1286 | mime-db@1.47.0:
1287 | version "1.47.0"
1288 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c"
1289 | integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==
1290 |
1291 | mime-types@^2.1.27:
1292 | version "2.1.30"
1293 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d"
1294 | integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==
1295 | dependencies:
1296 | mime-db "1.47.0"
1297 |
1298 | minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
1299 | version "1.0.1"
1300 | resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
1301 | integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
1302 |
1303 | minimalistic-crypto-utils@^1.0.1:
1304 | version "1.0.1"
1305 | resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
1306 | integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
1307 |
1308 | minimist@^1.2.0, minimist@^1.2.5:
1309 | version "1.2.5"
1310 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
1311 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
1312 |
1313 | ms@2.0.0:
1314 | version "2.0.0"
1315 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
1316 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
1317 |
1318 | ms@2.1.2:
1319 | version "2.1.2"
1320 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
1321 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
1322 |
1323 | nanoid@^3.1.16:
1324 | version "3.1.22"
1325 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.22.tgz#b35f8fb7d151990a8aebd5aa5015c03cf726f844"
1326 | integrity sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ==
1327 |
1328 | native-url@0.3.4:
1329 | version "0.3.4"
1330 | resolved "https://registry.yarnpkg.com/native-url/-/native-url-0.3.4.tgz#29c943172aed86c63cee62c8c04db7f5756661f8"
1331 | integrity sha512-6iM8R99ze45ivyH8vybJ7X0yekIcPf5GgLV5K0ENCbmRcaRIDoj37BC8iLEmaaBfqqb8enuZ5p0uhY+lVAbAcA==
1332 | dependencies:
1333 | querystring "^0.2.0"
1334 |
1335 | next-images@^1.7.0:
1336 | version "1.7.0"
1337 | resolved "https://registry.yarnpkg.com/next-images/-/next-images-1.7.0.tgz#70761ad88543b222d383e139824063c04f1119d6"
1338 | integrity sha512-7sTjSajbaYStlkl0pYNSUBJD0t6XpH5uE2b9XGrSO9Fh+XLaq10aHP7reEA2f1lBH6D4KTKjFy4S3lNQNVX/lA==
1339 | dependencies:
1340 | file-loader "^6.0.0"
1341 | url-loader "^4.0.0"
1342 |
1343 | next@10.1.3:
1344 | version "10.1.3"
1345 | resolved "https://registry.yarnpkg.com/next/-/next-10.1.3.tgz#e26e8371343a42bc2ba9be5cb253a7d324d03673"
1346 | integrity sha512-8Jf38F+s0YcXXkJGF5iUxOqSmbHrey0fX5Epc43L0uwDKmN2jK9vhc2ihCwXC1pmu8d2m/8wfTiXRJKGti55yw==
1347 | dependencies:
1348 | "@babel/runtime" "7.12.5"
1349 | "@hapi/accept" "5.0.1"
1350 | "@next/env" "10.1.3"
1351 | "@next/polyfill-module" "10.1.3"
1352 | "@next/react-dev-overlay" "10.1.3"
1353 | "@next/react-refresh-utils" "10.1.3"
1354 | "@opentelemetry/api" "0.14.0"
1355 | assert "2.0.0"
1356 | ast-types "0.13.2"
1357 | browserify-zlib "0.2.0"
1358 | browserslist "4.16.1"
1359 | buffer "5.6.0"
1360 | caniuse-lite "^1.0.30001179"
1361 | chalk "2.4.2"
1362 | chokidar "3.5.1"
1363 | constants-browserify "1.0.0"
1364 | crypto-browserify "3.12.0"
1365 | cssnano-simple "1.2.2"
1366 | domain-browser "4.19.0"
1367 | encoding "0.1.13"
1368 | etag "1.8.1"
1369 | find-cache-dir "3.3.1"
1370 | get-orientation "1.1.2"
1371 | https-browserify "1.0.0"
1372 | jest-worker "27.0.0-next.5"
1373 | native-url "0.3.4"
1374 | node-fetch "2.6.1"
1375 | node-html-parser "1.4.9"
1376 | node-libs-browser "^2.2.1"
1377 | os-browserify "0.3.0"
1378 | p-limit "3.1.0"
1379 | path-browserify "1.0.1"
1380 | pnp-webpack-plugin "1.6.4"
1381 | postcss "8.1.7"
1382 | process "0.11.10"
1383 | prop-types "15.7.2"
1384 | querystring-es3 "0.2.1"
1385 | raw-body "2.4.1"
1386 | react-is "16.13.1"
1387 | react-refresh "0.8.3"
1388 | stream-browserify "3.0.0"
1389 | stream-http "3.1.1"
1390 | string_decoder "1.3.0"
1391 | styled-jsx "3.3.2"
1392 | timers-browserify "2.0.12"
1393 | tty-browserify "0.0.1"
1394 | use-subscription "1.5.1"
1395 | util "0.12.3"
1396 | vm-browserify "1.1.2"
1397 | watchpack "2.1.1"
1398 |
1399 | node-fetch@2.6.1:
1400 | version "2.6.1"
1401 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
1402 | integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
1403 |
1404 | node-html-parser@1.4.9:
1405 | version "1.4.9"
1406 | resolved "https://registry.yarnpkg.com/node-html-parser/-/node-html-parser-1.4.9.tgz#3c8f6cac46479fae5800725edb532e9ae8fd816c"
1407 | integrity sha512-UVcirFD1Bn0O+TSmloHeHqZZCxHjvtIeGdVdGMhyZ8/PWlEiZaZ5iJzR189yKZr8p0FXN58BUeC7RHRkf/KYGw==
1408 | dependencies:
1409 | he "1.2.0"
1410 |
1411 | node-libs-browser@^2.2.1:
1412 | version "2.2.1"
1413 | resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425"
1414 | integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==
1415 | dependencies:
1416 | assert "^1.1.1"
1417 | browserify-zlib "^0.2.0"
1418 | buffer "^4.3.0"
1419 | console-browserify "^1.1.0"
1420 | constants-browserify "^1.0.0"
1421 | crypto-browserify "^3.11.0"
1422 | domain-browser "^1.1.1"
1423 | events "^3.0.0"
1424 | https-browserify "^1.0.0"
1425 | os-browserify "^0.3.0"
1426 | path-browserify "0.0.1"
1427 | process "^0.11.10"
1428 | punycode "^1.2.4"
1429 | querystring-es3 "^0.2.0"
1430 | readable-stream "^2.3.3"
1431 | stream-browserify "^2.0.1"
1432 | stream-http "^2.7.2"
1433 | string_decoder "^1.0.0"
1434 | timers-browserify "^2.0.4"
1435 | tty-browserify "0.0.0"
1436 | url "^0.11.0"
1437 | util "^0.11.0"
1438 | vm-browserify "^1.0.1"
1439 |
1440 | node-releases@^1.1.69:
1441 | version "1.1.71"
1442 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb"
1443 | integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==
1444 |
1445 | normalize-path@^3.0.0, normalize-path@~3.0.0:
1446 | version "3.0.0"
1447 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
1448 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
1449 |
1450 | object-assign@^4.1.1:
1451 | version "4.1.1"
1452 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
1453 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
1454 |
1455 | object-inspect@^1.9.0:
1456 | version "1.9.0"
1457 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a"
1458 | integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==
1459 |
1460 | object-is@^1.0.1:
1461 | version "1.1.5"
1462 | resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac"
1463 | integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==
1464 | dependencies:
1465 | call-bind "^1.0.2"
1466 | define-properties "^1.1.3"
1467 |
1468 | object-keys@^1.0.12, object-keys@^1.1.1:
1469 | version "1.1.1"
1470 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
1471 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
1472 |
1473 | object.assign@^4.1.2:
1474 | version "4.1.2"
1475 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940"
1476 | integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==
1477 | dependencies:
1478 | call-bind "^1.0.0"
1479 | define-properties "^1.1.3"
1480 | has-symbols "^1.0.1"
1481 | object-keys "^1.1.1"
1482 |
1483 | os-browserify@0.3.0, os-browserify@^0.3.0:
1484 | version "0.3.0"
1485 | resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
1486 | integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
1487 |
1488 | p-limit@3.1.0:
1489 | version "3.1.0"
1490 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
1491 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
1492 | dependencies:
1493 | yocto-queue "^0.1.0"
1494 |
1495 | p-limit@^2.2.0:
1496 | version "2.3.0"
1497 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
1498 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
1499 | dependencies:
1500 | p-try "^2.0.0"
1501 |
1502 | p-locate@^4.1.0:
1503 | version "4.1.0"
1504 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
1505 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
1506 | dependencies:
1507 | p-limit "^2.2.0"
1508 |
1509 | p-try@^2.0.0:
1510 | version "2.2.0"
1511 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
1512 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
1513 |
1514 | pako@~1.0.5:
1515 | version "1.0.11"
1516 | resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
1517 | integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
1518 |
1519 | parse-asn1@^5.0.0, parse-asn1@^5.1.5:
1520 | version "5.1.6"
1521 | resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4"
1522 | integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==
1523 | dependencies:
1524 | asn1.js "^5.2.0"
1525 | browserify-aes "^1.0.0"
1526 | evp_bytestokey "^1.0.0"
1527 | pbkdf2 "^3.0.3"
1528 | safe-buffer "^5.1.1"
1529 |
1530 | path-browserify@0.0.1:
1531 | version "0.0.1"
1532 | resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"
1533 | integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==
1534 |
1535 | path-browserify@1.0.1:
1536 | version "1.0.1"
1537 | resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd"
1538 | integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==
1539 |
1540 | path-exists@^4.0.0:
1541 | version "4.0.0"
1542 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
1543 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
1544 |
1545 | pbkdf2@^3.0.3:
1546 | version "3.1.2"
1547 | resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075"
1548 | integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==
1549 | dependencies:
1550 | create-hash "^1.1.2"
1551 | create-hmac "^1.1.4"
1552 | ripemd160 "^2.0.1"
1553 | safe-buffer "^5.0.1"
1554 | sha.js "^2.4.8"
1555 |
1556 | picomatch@^2.0.4, picomatch@^2.2.1:
1557 | version "2.2.3"
1558 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.3.tgz#465547f359ccc206d3c48e46a1bcb89bf7ee619d"
1559 | integrity sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==
1560 |
1561 | pkg-dir@^4.1.0:
1562 | version "4.2.0"
1563 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
1564 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
1565 | dependencies:
1566 | find-up "^4.0.0"
1567 |
1568 | platform@1.3.6:
1569 | version "1.3.6"
1570 | resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.6.tgz#48b4ce983164b209c2d45a107adb31f473a6e7a7"
1571 | integrity sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==
1572 |
1573 | pnp-webpack-plugin@1.6.4:
1574 | version "1.6.4"
1575 | resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149"
1576 | integrity sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==
1577 | dependencies:
1578 | ts-pnp "^1.1.6"
1579 |
1580 | postcss-value-parser@^4.0.2:
1581 | version "4.1.0"
1582 | resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb"
1583 | integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==
1584 |
1585 | postcss@8.1.7:
1586 | version "8.1.7"
1587 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.1.7.tgz#ff6a82691bd861f3354fd9b17b2332f88171233f"
1588 | integrity sha512-llCQW1Pz4MOPwbZLmOddGM9eIJ8Bh7SZ2Oj5sxZva77uVaotYDsYTch1WBTNu7fUY0fpWp0fdt7uW40D4sRiiQ==
1589 | dependencies:
1590 | colorette "^1.2.1"
1591 | line-column "^1.0.2"
1592 | nanoid "^3.1.16"
1593 | source-map "^0.6.1"
1594 |
1595 | postcss@^7.0.32:
1596 | version "7.0.35"
1597 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24"
1598 | integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==
1599 | dependencies:
1600 | chalk "^2.4.2"
1601 | source-map "^0.6.1"
1602 | supports-color "^6.1.0"
1603 |
1604 | process-nextick-args@~2.0.0:
1605 | version "2.0.1"
1606 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
1607 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
1608 |
1609 | process@0.11.10, process@^0.11.10:
1610 | version "0.11.10"
1611 | resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
1612 | integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
1613 |
1614 | prop-types@15.7.2:
1615 | version "15.7.2"
1616 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
1617 | integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
1618 | dependencies:
1619 | loose-envify "^1.4.0"
1620 | object-assign "^4.1.1"
1621 | react-is "^16.8.1"
1622 |
1623 | public-encrypt@^4.0.0:
1624 | version "4.0.3"
1625 | resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
1626 | integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==
1627 | dependencies:
1628 | bn.js "^4.1.0"
1629 | browserify-rsa "^4.0.0"
1630 | create-hash "^1.1.0"
1631 | parse-asn1 "^5.0.0"
1632 | randombytes "^2.0.1"
1633 | safe-buffer "^5.1.2"
1634 |
1635 | punycode@1.3.2:
1636 | version "1.3.2"
1637 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
1638 | integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
1639 |
1640 | punycode@^1.2.4:
1641 | version "1.4.1"
1642 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
1643 | integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
1644 |
1645 | punycode@^2.1.0:
1646 | version "2.1.1"
1647 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
1648 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
1649 |
1650 | querystring-es3@0.2.1, querystring-es3@^0.2.0:
1651 | version "0.2.1"
1652 | resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
1653 | integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
1654 |
1655 | querystring@0.2.0:
1656 | version "0.2.0"
1657 | resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
1658 | integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
1659 |
1660 | querystring@^0.2.0:
1661 | version "0.2.1"
1662 | resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.1.tgz#40d77615bb09d16902a85c3e38aa8b5ed761c2dd"
1663 | integrity sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==
1664 |
1665 | randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
1666 | version "2.1.0"
1667 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
1668 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
1669 | dependencies:
1670 | safe-buffer "^5.1.0"
1671 |
1672 | randomfill@^1.0.3:
1673 | version "1.0.4"
1674 | resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"
1675 | integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==
1676 | dependencies:
1677 | randombytes "^2.0.5"
1678 | safe-buffer "^5.1.0"
1679 |
1680 | raw-body@2.4.1:
1681 | version "2.4.1"
1682 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c"
1683 | integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==
1684 | dependencies:
1685 | bytes "3.1.0"
1686 | http-errors "1.7.3"
1687 | iconv-lite "0.4.24"
1688 | unpipe "1.0.0"
1689 |
1690 | react-dom@17.0.2:
1691 | version "17.0.2"
1692 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23"
1693 | integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==
1694 | dependencies:
1695 | loose-envify "^1.1.0"
1696 | object-assign "^4.1.1"
1697 | scheduler "^0.20.2"
1698 |
1699 | react-is@16.13.1, react-is@^16.7.0, react-is@^16.8.1:
1700 | version "16.13.1"
1701 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
1702 | integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
1703 |
1704 | react-refresh@0.8.3:
1705 | version "0.8.3"
1706 | resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz#721d4657672d400c5e3c75d063c4a85fb2d5d68f"
1707 | integrity sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==
1708 |
1709 | react@17.0.2:
1710 | version "17.0.2"
1711 | resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037"
1712 | integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==
1713 | dependencies:
1714 | loose-envify "^1.1.0"
1715 | object-assign "^4.1.1"
1716 |
1717 | readable-stream@^2.0.2, readable-stream@^2.3.3, readable-stream@^2.3.6:
1718 | version "2.3.7"
1719 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
1720 | integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
1721 | dependencies:
1722 | core-util-is "~1.0.0"
1723 | inherits "~2.0.3"
1724 | isarray "~1.0.0"
1725 | process-nextick-args "~2.0.0"
1726 | safe-buffer "~5.1.1"
1727 | string_decoder "~1.1.1"
1728 | util-deprecate "~1.0.1"
1729 |
1730 | readable-stream@^3.5.0, readable-stream@^3.6.0:
1731 | version "3.6.0"
1732 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
1733 | integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
1734 | dependencies:
1735 | inherits "^2.0.3"
1736 | string_decoder "^1.1.1"
1737 | util-deprecate "^1.0.1"
1738 |
1739 | readdirp@~3.5.0:
1740 | version "3.5.0"
1741 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e"
1742 | integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==
1743 | dependencies:
1744 | picomatch "^2.2.1"
1745 |
1746 | regenerator-runtime@^0.13.4:
1747 | version "0.13.7"
1748 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55"
1749 | integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==
1750 |
1751 | ripemd160@^2.0.0, ripemd160@^2.0.1:
1752 | version "2.0.2"
1753 | resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
1754 | integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
1755 | dependencies:
1756 | hash-base "^3.0.0"
1757 | inherits "^2.0.1"
1758 |
1759 | safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0:
1760 | version "5.2.1"
1761 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
1762 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
1763 |
1764 | safe-buffer@~5.1.0, safe-buffer@~5.1.1:
1765 | version "5.1.2"
1766 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
1767 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
1768 |
1769 | "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.1.0:
1770 | version "2.1.2"
1771 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
1772 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
1773 |
1774 | scheduler@^0.20.2:
1775 | version "0.20.2"
1776 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91"
1777 | integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==
1778 | dependencies:
1779 | loose-envify "^1.1.0"
1780 | object-assign "^4.1.1"
1781 |
1782 | schema-utils@^3.0.0:
1783 | version "3.0.0"
1784 | resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef"
1785 | integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==
1786 | dependencies:
1787 | "@types/json-schema" "^7.0.6"
1788 | ajv "^6.12.5"
1789 | ajv-keywords "^3.5.2"
1790 |
1791 | semver@^6.0.0:
1792 | version "6.3.0"
1793 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
1794 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
1795 |
1796 | setimmediate@^1.0.4:
1797 | version "1.0.5"
1798 | resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
1799 | integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
1800 |
1801 | setprototypeof@1.1.1:
1802 | version "1.1.1"
1803 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
1804 | integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
1805 |
1806 | sha.js@^2.4.0, sha.js@^2.4.8:
1807 | version "2.4.11"
1808 | resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
1809 | integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
1810 | dependencies:
1811 | inherits "^2.0.1"
1812 | safe-buffer "^5.0.1"
1813 |
1814 | shallowequal@^1.1.0:
1815 | version "1.1.0"
1816 | resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8"
1817 | integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==
1818 |
1819 | shell-quote@1.7.2:
1820 | version "1.7.2"
1821 | resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2"
1822 | integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==
1823 |
1824 | source-map@0.7.3:
1825 | version "0.7.3"
1826 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
1827 | integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
1828 |
1829 | source-map@0.8.0-beta.0:
1830 | version "0.8.0-beta.0"
1831 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11"
1832 | integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==
1833 | dependencies:
1834 | whatwg-url "^7.0.0"
1835 |
1836 | source-map@^0.5.0:
1837 | version "0.5.7"
1838 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
1839 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
1840 |
1841 | source-map@^0.6.1:
1842 | version "0.6.1"
1843 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
1844 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
1845 |
1846 | stacktrace-parser@0.1.10:
1847 | version "0.1.10"
1848 | resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a"
1849 | integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==
1850 | dependencies:
1851 | type-fest "^0.7.1"
1852 |
1853 | "statuses@>= 1.5.0 < 2":
1854 | version "1.5.0"
1855 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
1856 | integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
1857 |
1858 | stream-browserify@3.0.0:
1859 | version "3.0.0"
1860 | resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f"
1861 | integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==
1862 | dependencies:
1863 | inherits "~2.0.4"
1864 | readable-stream "^3.5.0"
1865 |
1866 | stream-browserify@^2.0.1:
1867 | version "2.0.2"
1868 | resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"
1869 | integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==
1870 | dependencies:
1871 | inherits "~2.0.1"
1872 | readable-stream "^2.0.2"
1873 |
1874 | stream-http@3.1.1:
1875 | version "3.1.1"
1876 | resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-3.1.1.tgz#0370a8017cf8d050b9a8554afe608f043eaff564"
1877 | integrity sha512-S7OqaYu0EkFpgeGFb/NPOoPLxFko7TPqtEeFg5DXPB4v/KETHG0Ln6fRFrNezoelpaDKmycEmmZ81cC9DAwgYg==
1878 | dependencies:
1879 | builtin-status-codes "^3.0.0"
1880 | inherits "^2.0.4"
1881 | readable-stream "^3.6.0"
1882 | xtend "^4.0.2"
1883 |
1884 | stream-http@^2.7.2:
1885 | version "2.8.3"
1886 | resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc"
1887 | integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==
1888 | dependencies:
1889 | builtin-status-codes "^3.0.0"
1890 | inherits "^2.0.1"
1891 | readable-stream "^2.3.6"
1892 | to-arraybuffer "^1.0.0"
1893 | xtend "^4.0.0"
1894 |
1895 | stream-parser@^0.3.1:
1896 | version "0.3.1"
1897 | resolved "https://registry.yarnpkg.com/stream-parser/-/stream-parser-0.3.1.tgz#1618548694420021a1182ff0af1911c129761773"
1898 | integrity sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=
1899 | dependencies:
1900 | debug "2"
1901 |
1902 | string-hash@1.1.3:
1903 | version "1.1.3"
1904 | resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b"
1905 | integrity sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=
1906 |
1907 | string.prototype.trimend@^1.0.4:
1908 | version "1.0.4"
1909 | resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80"
1910 | integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==
1911 | dependencies:
1912 | call-bind "^1.0.2"
1913 | define-properties "^1.1.3"
1914 |
1915 | string.prototype.trimstart@^1.0.4:
1916 | version "1.0.4"
1917 | resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed"
1918 | integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==
1919 | dependencies:
1920 | call-bind "^1.0.2"
1921 | define-properties "^1.1.3"
1922 |
1923 | string_decoder@1.3.0, string_decoder@^1.0.0, string_decoder@^1.1.1:
1924 | version "1.3.0"
1925 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
1926 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
1927 | dependencies:
1928 | safe-buffer "~5.2.0"
1929 |
1930 | string_decoder@~1.1.1:
1931 | version "1.1.1"
1932 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
1933 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
1934 | dependencies:
1935 | safe-buffer "~5.1.0"
1936 |
1937 | strip-ansi@6.0.0:
1938 | version "6.0.0"
1939 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
1940 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
1941 | dependencies:
1942 | ansi-regex "^5.0.0"
1943 |
1944 | styled-components@^5.2.3:
1945 | version "5.2.3"
1946 | resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.2.3.tgz#752669fd694aac10de814d96efc287dde0d11385"
1947 | integrity sha512-BlR+KrLW3NL1yhvEB+9Nu9Dt51CuOnHoxd+Hj+rYPdtyR8X11uIW9rvhpy3Dk4dXXBsiW1u5U78f00Lf/afGoA==
1948 | dependencies:
1949 | "@babel/helper-module-imports" "^7.0.0"
1950 | "@babel/traverse" "^7.4.5"
1951 | "@emotion/is-prop-valid" "^0.8.8"
1952 | "@emotion/stylis" "^0.8.4"
1953 | "@emotion/unitless" "^0.7.4"
1954 | babel-plugin-styled-components ">= 1.12.0"
1955 | css-to-react-native "^3.0.0"
1956 | hoist-non-react-statics "^3.0.0"
1957 | shallowequal "^1.1.0"
1958 | supports-color "^5.5.0"
1959 |
1960 | styled-jsx@3.3.2:
1961 | version "3.3.2"
1962 | resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-3.3.2.tgz#2474601a26670a6049fb4d3f94bd91695b3ce018"
1963 | integrity sha512-daAkGd5mqhbBhLd6jYAjYBa9LpxYCzsgo/f6qzPdFxVB8yoGbhxvzQgkC0pfmCVvW3JuAEBn0UzFLBfkHVZG1g==
1964 | dependencies:
1965 | "@babel/types" "7.8.3"
1966 | babel-plugin-syntax-jsx "6.18.0"
1967 | convert-source-map "1.7.0"
1968 | loader-utils "1.2.3"
1969 | source-map "0.7.3"
1970 | string-hash "1.1.3"
1971 | stylis "3.5.4"
1972 | stylis-rule-sheet "0.0.10"
1973 |
1974 | stylis-rule-sheet@0.0.10:
1975 | version "0.0.10"
1976 | resolved "https://registry.yarnpkg.com/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz#44e64a2b076643f4b52e5ff71efc04d8c3c4a430"
1977 | integrity sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==
1978 |
1979 | stylis@3.5.4:
1980 | version "3.5.4"
1981 | resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.5.4.tgz#f665f25f5e299cf3d64654ab949a57c768b73fbe"
1982 | integrity sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==
1983 |
1984 | supports-color@^5.3.0, supports-color@^5.5.0:
1985 | version "5.5.0"
1986 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
1987 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
1988 | dependencies:
1989 | has-flag "^3.0.0"
1990 |
1991 | supports-color@^6.1.0:
1992 | version "6.1.0"
1993 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
1994 | integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
1995 | dependencies:
1996 | has-flag "^3.0.0"
1997 |
1998 | supports-color@^7.1.0:
1999 | version "7.2.0"
2000 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
2001 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
2002 | dependencies:
2003 | has-flag "^4.0.0"
2004 |
2005 | supports-color@^8.0.0:
2006 | version "8.1.1"
2007 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
2008 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
2009 | dependencies:
2010 | has-flag "^4.0.0"
2011 |
2012 | timers-browserify@2.0.12, timers-browserify@^2.0.4:
2013 | version "2.0.12"
2014 | resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee"
2015 | integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==
2016 | dependencies:
2017 | setimmediate "^1.0.4"
2018 |
2019 | to-arraybuffer@^1.0.0:
2020 | version "1.0.1"
2021 | resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
2022 | integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
2023 |
2024 | to-fast-properties@^2.0.0:
2025 | version "2.0.0"
2026 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
2027 | integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
2028 |
2029 | to-regex-range@^5.0.1:
2030 | version "5.0.1"
2031 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
2032 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
2033 | dependencies:
2034 | is-number "^7.0.0"
2035 |
2036 | toidentifier@1.0.0:
2037 | version "1.0.0"
2038 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
2039 | integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
2040 |
2041 | tr46@^1.0.1:
2042 | version "1.0.1"
2043 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"
2044 | integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=
2045 | dependencies:
2046 | punycode "^2.1.0"
2047 |
2048 | ts-pnp@^1.1.6:
2049 | version "1.2.0"
2050 | resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92"
2051 | integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==
2052 |
2053 | tty-browserify@0.0.0:
2054 | version "0.0.0"
2055 | resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
2056 | integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=
2057 |
2058 | tty-browserify@0.0.1:
2059 | version "0.0.1"
2060 | resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811"
2061 | integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==
2062 |
2063 | type-fest@^0.7.1:
2064 | version "0.7.1"
2065 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48"
2066 | integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==
2067 |
2068 | unbox-primitive@^1.0.0:
2069 | version "1.0.1"
2070 | resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471"
2071 | integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==
2072 | dependencies:
2073 | function-bind "^1.1.1"
2074 | has-bigints "^1.0.1"
2075 | has-symbols "^1.0.2"
2076 | which-boxed-primitive "^1.0.2"
2077 |
2078 | unpipe@1.0.0:
2079 | version "1.0.0"
2080 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
2081 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
2082 |
2083 | uri-js@^4.2.2:
2084 | version "4.4.1"
2085 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
2086 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
2087 | dependencies:
2088 | punycode "^2.1.0"
2089 |
2090 | url-loader@^4.0.0:
2091 | version "4.1.1"
2092 | resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2"
2093 | integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==
2094 | dependencies:
2095 | loader-utils "^2.0.0"
2096 | mime-types "^2.1.27"
2097 | schema-utils "^3.0.0"
2098 |
2099 | url@^0.11.0:
2100 | version "0.11.0"
2101 | resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
2102 | integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
2103 | dependencies:
2104 | punycode "1.3.2"
2105 | querystring "0.2.0"
2106 |
2107 | use-subscription@1.5.1:
2108 | version "1.5.1"
2109 | resolved "https://registry.yarnpkg.com/use-subscription/-/use-subscription-1.5.1.tgz#73501107f02fad84c6dd57965beb0b75c68c42d1"
2110 | integrity sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA==
2111 | dependencies:
2112 | object-assign "^4.1.1"
2113 |
2114 | util-deprecate@^1.0.1, util-deprecate@~1.0.1:
2115 | version "1.0.2"
2116 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
2117 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
2118 |
2119 | util@0.10.3:
2120 | version "0.10.3"
2121 | resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
2122 | integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
2123 | dependencies:
2124 | inherits "2.0.1"
2125 |
2126 | util@0.12.3, util@^0.12.0:
2127 | version "0.12.3"
2128 | resolved "https://registry.yarnpkg.com/util/-/util-0.12.3.tgz#971bb0292d2cc0c892dab7c6a5d37c2bec707888"
2129 | integrity sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog==
2130 | dependencies:
2131 | inherits "^2.0.3"
2132 | is-arguments "^1.0.4"
2133 | is-generator-function "^1.0.7"
2134 | is-typed-array "^1.1.3"
2135 | safe-buffer "^5.1.2"
2136 | which-typed-array "^1.1.2"
2137 |
2138 | util@^0.11.0:
2139 | version "0.11.1"
2140 | resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61"
2141 | integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==
2142 | dependencies:
2143 | inherits "2.0.3"
2144 |
2145 | vm-browserify@1.1.2, vm-browserify@^1.0.1:
2146 | version "1.1.2"
2147 | resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
2148 | integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
2149 |
2150 | watchpack@2.1.1:
2151 | version "2.1.1"
2152 | resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.1.1.tgz#e99630550fca07df9f90a06056987baa40a689c7"
2153 | integrity sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==
2154 | dependencies:
2155 | glob-to-regexp "^0.4.1"
2156 | graceful-fs "^4.1.2"
2157 |
2158 | webidl-conversions@^4.0.2:
2159 | version "4.0.2"
2160 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
2161 | integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
2162 |
2163 | whatwg-url@^7.0.0:
2164 | version "7.1.0"
2165 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06"
2166 | integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==
2167 | dependencies:
2168 | lodash.sortby "^4.7.0"
2169 | tr46 "^1.0.1"
2170 | webidl-conversions "^4.0.2"
2171 |
2172 | which-boxed-primitive@^1.0.2:
2173 | version "1.0.2"
2174 | resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
2175 | integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
2176 | dependencies:
2177 | is-bigint "^1.0.1"
2178 | is-boolean-object "^1.1.0"
2179 | is-number-object "^1.0.4"
2180 | is-string "^1.0.5"
2181 | is-symbol "^1.0.3"
2182 |
2183 | which-typed-array@^1.1.2:
2184 | version "1.1.4"
2185 | resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.4.tgz#8fcb7d3ee5adf2d771066fba7cf37e32fe8711ff"
2186 | integrity sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==
2187 | dependencies:
2188 | available-typed-arrays "^1.0.2"
2189 | call-bind "^1.0.0"
2190 | es-abstract "^1.18.0-next.1"
2191 | foreach "^2.0.5"
2192 | function-bind "^1.1.1"
2193 | has-symbols "^1.0.1"
2194 | is-typed-array "^1.1.3"
2195 |
2196 | xtend@^4.0.0, xtend@^4.0.2:
2197 | version "4.0.2"
2198 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
2199 | integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
2200 |
2201 | yocto-queue@^0.1.0:
2202 | version "0.1.0"
2203 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
2204 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
2205 |
--------------------------------------------------------------------------------
/go.mod:
--------------------------------------------------------------------------------
1 | module github.com/amirgamil/carly
2 |
3 | go 1.14
4 |
5 | require (
6 | github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8
7 | github.com/gorilla/mux v1.8.0
8 | github.com/joho/godotenv v1.3.0
9 | go.mongodb.org/mongo-driver v1.5.1
10 | golang.org/x/crypto v0.0.0-20210415154028-4f45737414dc
11 | gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
12 | gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22
13 | )
14 |
--------------------------------------------------------------------------------
/go.sum:
--------------------------------------------------------------------------------
1 | github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
2 | github.com/aws/aws-sdk-go v1.34.28 h1:sscPpn/Ns3i0F4HPEWAVcwdIRaZZCuL7llJ2/60yPIk=
3 | github.com/aws/aws-sdk-go v1.34.28/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48=
4 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
5 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
6 | github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8 h1:DujepqpGd1hyOd7aW59XpK7Qymp8iy83xq74fLr21is=
7 | github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q=
8 | github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
9 | github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
10 | github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
11 | github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0=
12 | github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY=
13 | github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg=
14 | github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI=
15 | github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI=
16 | github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs=
17 | github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI=
18 | github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI=
19 | github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk=
20 | github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28=
21 | github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo=
22 | github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk=
23 | github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw=
24 | github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360=
25 | github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg=
26 | github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE=
27 | github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8=
28 | github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc=
29 | github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc=
30 | github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4=
31 | github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4=
32 | github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ=
33 | github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0=
34 | github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw=
35 | github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
36 | github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
37 | github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
38 | github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
39 | github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
40 | github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
41 | github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
42 | github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
43 | github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
44 | github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc=
45 | github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
46 | github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4=
47 | github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA=
48 | github.com/klauspost/compress v1.9.5 h1:U+CaK85mrNNb4k8BNOfgJtJ/gr6kswUCFj6miSzVC6M=
49 | github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
50 | github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
51 | github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
52 | github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
53 | github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
54 | github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
55 | github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
56 | github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
57 | github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
58 | github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE=
59 | github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0=
60 | github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
61 | github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE=
62 | github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
63 | github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
64 | github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
65 | github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
66 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
67 | github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
68 | github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
69 | github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
70 | github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
71 | github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
72 | github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
73 | github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
74 | github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
75 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
76 | github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
77 | github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
78 | github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
79 | github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
80 | github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
81 | github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
82 | github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
83 | github.com/xdg-go/scram v1.0.2 h1:akYIkZ28e6A96dkWNJQu3nmCzH3YfwMPQExUYDaRv7w=
84 | github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs=
85 | github.com/xdg-go/stringprep v1.0.2 h1:6iq84/ryjjeRmMJwxutI51F2GIPlP5BfTvXHeYjyhBc=
86 | github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM=
87 | github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA=
88 | github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
89 | go.mongodb.org/mongo-driver v1.5.1 h1:9nOVLGDfOaZ9R0tBumx/BcuqkbFpyTCU2r/Po7A2azI=
90 | go.mongodb.org/mongo-driver v1.5.1/go.mod h1:gRXCHX4Jo7J0IJ1oDQyUxF7jfy19UfxniMS4xxMmUqw=
91 | golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
92 | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
93 | golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
94 | golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
95 | golang.org/x/crypto v0.0.0-20210415154028-4f45737414dc h1:+q90ECDSAQirdykUN6sPEiBXBsp8Csjcca8Oy7bgLTA=
96 | golang.org/x/crypto v0.0.0-20210415154028-4f45737414dc/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
97 | golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
98 | golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
99 | golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
100 | golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
101 | golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
102 | golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
103 | golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
104 | golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY=
105 | golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
106 | golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
107 | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
108 | golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
109 | golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
110 | golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
111 | golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
112 | golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
113 | golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
114 | golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
115 | golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
116 | golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
117 | golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ=
118 | golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
119 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
120 | golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
121 | golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
122 | golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
123 | golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
124 | golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
125 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
126 | gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
127 | gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
128 | gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
129 | gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
130 | gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 h1:VpOs+IwYnYBaFnrNAeB8UUWtL3vEUnzSCL1nVjPhqrw=
131 | gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
132 | gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
133 | gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
134 |
--------------------------------------------------------------------------------
/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "log"
5 | "net/http"
6 | "time"
7 |
8 | "github.com/amirgamil/carly/api"
9 | "github.com/gorilla/mux"
10 | )
11 |
12 | // "encoding/json"
13 | // "io"s
14 | // "io/ioutil"
15 | // "log"
16 | // "net/http"
17 | // "os"
18 | // "time"
19 |
20 | func main() {
21 |
22 | r := mux.NewRouter()
23 |
24 | srv := &http.Server{
25 | Handler: r,
26 | Addr: "127.0.0.1:8997",
27 | WriteTimeout: 60 * time.Second,
28 | ReadTimeout: 60 * time.Second,
29 | }
30 |
31 | r.Methods("POST", "OPTIONS").Path("/api").HandlerFunc(api.WriteDB)
32 | r.Methods("GET").Path("/api/{hash}").HandlerFunc(api.HandleLetter)
33 | r.Methods("POST").Path("/api/{hash}").HandlerFunc(api.HandleLetterWithPassword)
34 | http.Handle("/", r)
35 |
36 | log.Printf("Server listening on %s\n", srv.Addr)
37 | log.Fatal(srv.ListenAndServe())
38 | }
39 |
--------------------------------------------------------------------------------
/schema/schema.go:
--------------------------------------------------------------------------------
1 | package schema
2 |
3 | import (
4 | "time"
5 |
6 | "github.com/globalsign/mgo/bson"
7 | )
8 |
9 | type Letter struct {
10 | ID bson.ObjectId `bson:"_id,omitempty"`
11 | Hash string
12 | Expiry time.Time `bson:"expiry" json:"expiry"`
13 | Password string
14 | Title string
15 | Data string
16 | Salt []byte
17 | }
18 |
19 | type JSONLetter struct {
20 | Hash string
21 | Expiry string `json:"expiry"`
22 | Password string
23 | Title string `json:"title"`
24 | Data []LetterData `json:"content"`
25 | Salt []byte
26 | }
27 |
28 | //have to label json here so that when we send back array of it in JSON, it encodes it properly!
29 | type LetterData struct {
30 | Name string `json:"person"`
31 | Message string `json:"msg"`
32 | ImgAdd string `json:"imgAdd"`
33 | }
34 |
--------------------------------------------------------------------------------
/security/encrypt.go:
--------------------------------------------------------------------------------
1 | package security
2 |
3 | import (
4 | "crypto/aes"
5 | "crypto/cipher"
6 | "crypto/rand"
7 | "encoding/json"
8 | "fmt"
9 | "log"
10 |
11 | "github.com/amirgamil/carly/schema"
12 | "golang.org/x/crypto/scrypt"
13 | )
14 |
15 | func Encrypt(key string, data []schema.LetterData) (string, error) {
16 | //generate a new aes cipher block with the key we have
17 | //aes works by transforming data into blocks or grids of bytes to work with
18 | //it does not operate on a long sequence of text
19 | //For more info, see https://www.youtube.com/watch?v=O4xNJsjtN6E&ab_channel=Computerphile
20 | cipherBlock, err := aes.NewCipher([]byte(key))
21 | if err != nil {
22 | log.Println("Error creating a cipher key, ", err)
23 | }
24 |
25 | // wrap block cipher with Galois Counter Mode and standard nonce length
26 | gcm, err := cipher.NewGCM(cipherBlock)
27 | if err != nil {
28 | return "", err
29 | }
30 |
31 | // creates a new byte array the size of the nonce
32 | // which must be passed to Seal
33 | nonce := make([]byte, gcm.NonceSize())
34 | if _, err = rand.Read(nonce); err != nil {
35 | return "", err
36 | }
37 |
38 | marshalledData, err := json.Marshal(data)
39 | if err != nil {
40 | fmt.Println("Error marshalling the data for encryption ", err)
41 | }
42 | //seal nonce with data to use during decryption
43 | cipherText := gcm.Seal(nonce, nonce, marshalledData, nil)
44 |
45 | //cipherText is jibber jabber that needs to be decrypted by the key to be understood
46 | return string(cipherText), nil
47 | }
48 |
49 | func Decrypt(key string, data string) ([]schema.LetterData, error) {
50 | //similar to encrypt
51 | cipherBlock, err := aes.NewCipher([]byte(key))
52 | if err != nil {
53 | log.Println("Error creating a cipher key, ", err)
54 | }
55 |
56 | // wrap block cipher with Galois Counter Mode and standard nonce length
57 | gcm, err := cipher.NewGCM(cipherBlock)
58 | if err != nil {
59 | return nil, err
60 | }
61 |
62 | //TODO: don't understand what this does, need to go over it
63 | // extract the nonce from the data
64 | nonce, cipherText := data[:gcm.NonceSize()], data[gcm.NonceSize():]
65 |
66 | // use nonce to decrypt the data
67 | marshalledData, err := gcm.Open(nil, []byte(nonce), []byte(cipherText), nil)
68 | if err != nil {
69 | return nil, err
70 | }
71 | var cardData []schema.LetterData
72 | errM := json.Unmarshal(marshalledData, &cardData)
73 | if err != nil {
74 | log.Println("Error unmarshalling encrypted data ", errM)
75 | }
76 | return cardData, nil
77 |
78 | }
79 |
80 | //use key length of 16
81 | const keyBytes = 16
82 | const cpuLimit = 16384
83 | const relativeMemoryCost = 8
84 | const relativeCPUCost = 1
85 |
86 | //Securely get key from password (Percival et al. https://www.tarsnap.com/scrypt/scrypt.pdf)
87 | func DeriveKey(password string, salt []byte) (string, []byte, error) {
88 | if salt == nil {
89 | //reads and copies keyBytes into a new byte array
90 | salt = make([]byte, keyBytes)
91 | if _, err := rand.Read(salt); err != nil {
92 | return "", nil, err
93 | }
94 | }
95 |
96 | derivedKey, err := scrypt.Key([]byte(password), salt, cpuLimit, relativeMemoryCost, relativeCPUCost, keyBytes)
97 | if err != nil {
98 | log.Println("Error getting a derived key ", err)
99 | return "", nil, err
100 | }
101 | return string(derivedKey), salt, nil
102 | }
103 |
--------------------------------------------------------------------------------
/security/hash.go:
--------------------------------------------------------------------------------
1 | package security
2 |
3 | import (
4 | "crypto/md5"
5 | "encoding/hex"
6 | "fmt"
7 | "time"
8 |
9 | "golang.org/x/crypto/bcrypt"
10 | )
11 |
12 | const urlLength = 7
13 |
14 | //Create unique identifier for string and timestamp
15 | func GenerateUniqueHash(content string) string {
16 | timeStamp := time.Now().String()
17 | fmt.Println(timeStamp)
18 | return hashString(timeStamp + content)[:urlLength]
19 | }
20 |
21 | //hash string by sum and encoding the resultant sum from hex back to a string
22 | func hashString(stringToHash string) string {
23 | b := []byte(stringToHash)
24 | hashSum := md5.Sum(b)
25 | return hex.EncodeToString(hashSum[:])
26 | }
27 |
28 | //TODO: add security via a password
29 | func HashPassword(password string) (string, error) {
30 | hash, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
31 | return string(hash), err
32 | }
33 |
34 | func VerifyPassword(hashedPassword string, userPassword string) bool {
35 | byteHashedPassword := []byte(hashedPassword)
36 | byteUserPassword := []byte(userPassword)
37 |
38 | err := bcrypt.CompareHashAndPassword(byteHashedPassword, byteUserPassword)
39 | if err != nil {
40 | fmt.Println("Error verifying password, ", err)
41 | return false
42 | }
43 | return true
44 | }
45 |
--------------------------------------------------------------------------------