From ebb075ce4d5b57710c78aee596f75595ff2c2bb3 Mon Sep 17 00:00:00 2001
From: Federico Minaya
Date: Sun, 25 Apr 2021 17:45:39 -0300
Subject: [PATCH] feat: sign in with credentials (#2)
* feat: sign in with credentials
* 1.2.0
---
.gitignore | 3 +-
README.md | 57 +++-
.../src/pages/api/auth/[...nextauth].ts | 5 +-
.../src/pages/api/sanity/signUp.ts | 6 +
.../full-example/src/pages/credentials.tsx | 86 +++++
examples/full-example/studio/schemas/user.ts | 5 +
examples/full-example/studio/tsconfig.json | 3 +
examples/full-example/tsconfig.json | 3 -
package.json | 4 +-
src/adapter.ts | 167 ++++++++++
src/client.ts | 17 +
src/credentials.ts | 79 +++++
src/index.ts | 169 +---------
tsconfig.json | 6 +-
yarn.lock | 298 +++++++++++++++++-
15 files changed, 716 insertions(+), 192 deletions(-)
create mode 100644 examples/full-example/src/pages/api/sanity/signUp.ts
create mode 100644 examples/full-example/src/pages/credentials.tsx
create mode 100644 src/adapter.ts
create mode 100644 src/client.ts
create mode 100644 src/credentials.ts
diff --git a/.gitignore b/.gitignore
index a0d218e..b119bd8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
node_modules
dist
-.env
\ No newline at end of file
+.env
+.next
\ No newline at end of file
diff --git a/README.md b/README.md
index a379923..0f7f9ed 100644
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
-> NextAuth Adapter for Sanity
+> NextAuth Adapter and Provider for Sanity
## Overview
@@ -17,6 +17,8 @@
- Saving users and account in Sanity
- Retrieving of full linked provider information for a user
- Stale While Revalidate
+- Auth with Credentials
+- Hash Credentials Passwords with Argon2
### Database sessions
@@ -56,13 +58,16 @@ npm i next-auth-sanity
import NextAuth, { NextAuthOptions } from 'next-auth';
import Providers from 'next-auth/providers';
import { NextApiRequest, NextApiResponse } from 'next';
-import { SanityAdapter } from 'next-auth-sanity';
-import { client } from '/your/sanity/client';
+import { SanityAdapter, SanityCredentials } from 'next-auth-sanity';
+import { client } from 'your/sanity/client';
const options: NextAuthOptions = {
providers: [
- clientId: process.env.GITHUB_CLIENT_ID!,
- clientSecret: process.env.GITHUB_CLIENT_SECRET!,
+ Providers.GitHub({
+ clientId: process.env.GITHUB_CLIENT_ID,
+ clientSecret: process.env.GITHUB_CLIENT_SECRET
+ }),
+ SanityCredentials({ client }) // only if you use sign in with credentials
],
session: {
jwt: true
@@ -98,6 +103,12 @@ export default {
name: 'image',
title: 'Image',
type: 'url'
+ },
+ {
+ // this is only if you use credentials provider
+ name: 'password',
+ type: 'string',
+ hidden: true
}
]
};
@@ -145,6 +156,42 @@ export default {
};
```
+### Sign Up and Sign In With Credentials
+
+### Setup
+
+`API Route`
+
+```ts
+// pages/api/sanity/signUp.ts
+
+import { signUpHandler } from 'next-auth-sanity';
+import { NextApiRequest, NextApiResponse } from 'next';
+import { client } from 'your/sanity/client';
+
+export default (req: NextApiRequest, res: NextApiResponse) =>
+ signUpHandler({ req, res, client });
+```
+
+`Client`
+
+```ts
+import { signUp } from 'next-auth-sanity/client';
+import { signIn } from 'next-auth/client';
+
+const user = await signUp({
+ email,
+ password,
+ name
+});
+
+await signIn('credentials', {
+ redirect: false,
+ email,
+ password
+});
+```
+
## Author
👤 **Fedeya **
diff --git a/examples/full-example/src/pages/api/auth/[...nextauth].ts b/examples/full-example/src/pages/api/auth/[...nextauth].ts
index bfb57be..e2def7e 100644
--- a/examples/full-example/src/pages/api/auth/[...nextauth].ts
+++ b/examples/full-example/src/pages/api/auth/[...nextauth].ts
@@ -1,7 +1,7 @@
import NextAuth, { NextAuthOptions } from 'next-auth';
import Providers from 'next-auth/providers';
import { NextApiRequest, NextApiResponse } from 'next';
-import { SanityAdapter } from 'next-auth-sanity';
+import { SanityAdapter, SanityCredentials } from '../../../../../../dist';
import { client } from '../../../libs/sanity';
const options: NextAuthOptions = {
@@ -9,7 +9,8 @@ const options: NextAuthOptions = {
Providers.GitHub({
clientId: process.env.GITHUB_CLIENT_ID,
clientSecret: process.env.GITHUB_CLIENT_SECRET
- })
+ }),
+ SanityCredentials({ client })
],
session: {
jwt: true
diff --git a/examples/full-example/src/pages/api/sanity/signUp.ts b/examples/full-example/src/pages/api/sanity/signUp.ts
new file mode 100644
index 0000000..73120fb
--- /dev/null
+++ b/examples/full-example/src/pages/api/sanity/signUp.ts
@@ -0,0 +1,6 @@
+import { signUpHandler } from '../../../../../../dist';
+import { NextApiRequest, NextApiResponse } from 'next';
+import { client } from '../../../libs/sanity';
+
+export default (req: NextApiRequest, res: NextApiResponse) =>
+ signUpHandler({ req, res, client });
diff --git a/examples/full-example/src/pages/credentials.tsx b/examples/full-example/src/pages/credentials.tsx
new file mode 100644
index 0000000..59c190c
--- /dev/null
+++ b/examples/full-example/src/pages/credentials.tsx
@@ -0,0 +1,86 @@
+import React, { FC, useState } from 'react';
+import { useSession, signIn, signOut } from 'next-auth/client';
+import { signUp } from '../../../../dist/client';
+
+const Credentials: FC = () => {
+ const [email, setEmail] = useState('');
+ const [session, loading] = useSession();
+ const [password, setPassword] = useState('');
+ const [name, setName] = useState('');
+
+ const handleSubmit = async (e: React.FormEvent) => {
+ e.preventDefault();
+
+ const user = await signUp({
+ email,
+ password,
+ name
+ });
+
+ await signIn('credentials', {
+ redirect: false,
+ email,
+ password
+ });
+
+ console.log(user);
+ };
+
+ const handleSubmitSignIn = async (e: React.FormEvent) => {
+ e.preventDefault();
+ await signIn('credentials', {
+ redirect: false,
+ email,
+ password
+ });
+ };
+
+ if (loading) return Loading...
;
+
+ return (
+
+
User: {session?.user.name}
+
Sign Up
+
+
+
Sign In
+
+
+ );
+};
+
+export default Credentials;
diff --git a/examples/full-example/studio/schemas/user.ts b/examples/full-example/studio/schemas/user.ts
index 9fb36f8..b3d0162 100644
--- a/examples/full-example/studio/schemas/user.ts
+++ b/examples/full-example/studio/schemas/user.ts
@@ -19,6 +19,11 @@ export default {
name: 'image',
title: 'Image',
type: 'url'
+ },
+ {
+ name: 'password',
+ type: 'string',
+ hidden: true
}
]
};
diff --git a/examples/full-example/studio/tsconfig.json b/examples/full-example/studio/tsconfig.json
index eeb06e6..5cf7242 100644
--- a/examples/full-example/studio/tsconfig.json
+++ b/examples/full-example/studio/tsconfig.json
@@ -2,5 +2,8 @@
// Note: This config is only used to help editors like VS Code understand/resolve
// parts, the actual transpilation is done by babel. Any compiler configuration in
// here will be ignored.
+ "compilerOptions": {
+ "outDir": "dist"
+ },
"include": ["./node_modules/@sanity/base/types/**/*.ts", "./**/*.ts", "./**/*.tsx"]
}
diff --git a/examples/full-example/tsconfig.json b/examples/full-example/tsconfig.json
index 3959bf1..37588c0 100644
--- a/examples/full-example/tsconfig.json
+++ b/examples/full-example/tsconfig.json
@@ -17,9 +17,6 @@
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
- "paths": {
- "next-auth-sanity": ["../../src"]
- }
},
"include": [
"next-env.d.ts",
diff --git a/package.json b/package.json
index 6a381c1..b74cc87 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "next-auth-sanity",
"description": "NextAuth Adapter for Sanity",
- "version": "1.1.1",
+ "version": "1.2.0",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"repository": {
@@ -28,6 +28,8 @@
},
"dependencies": {
"@sanity/client": "^2.8.0",
+ "argon2": "^0.27.2",
+ "axios": "^0.21.1",
"groq": "^2.2.6",
"lru-cache": "^6.0.0"
},
diff --git a/src/adapter.ts b/src/adapter.ts
new file mode 100644
index 0000000..58b5469
--- /dev/null
+++ b/src/adapter.ts
@@ -0,0 +1,167 @@
+import { Profile, Session } from 'next-auth/adapters';
+import { User } from 'next-auth';
+import {
+ getUserByIdQuery,
+ getUserByProviderAccountIdQuery,
+ getUserByEmailQuery
+} from './queries';
+import LRU from 'lru-cache';
+import { SanityClient } from '@sanity/client';
+
+type Options = {
+ client: SanityClient;
+};
+
+const userCache = new LRU({
+ maxAge: 24 * 60 * 60 * 1000,
+ max: 1000
+});
+
+export const SanityAdapter = ({ client }: Options) => {
+ const getAdapter = async () => {
+ async function createUser(profile: Profile): Promise {
+ const user = await client.create({
+ _type: 'user',
+ email: profile.email,
+ name: profile.name,
+ image: profile.image
+ });
+
+ userCache.set(user._id, {
+ id: user._id,
+ ...user
+ });
+
+ return {
+ id: user._id,
+ ...user
+ };
+ }
+
+ async function getUser(id: string): Promise {
+ const cachedUser = userCache.get(id);
+
+ if (cachedUser) {
+ (async () => {
+ const user = await client.fetch(getUserByIdQuery, {
+ id
+ });
+
+ userCache.set(user._id, {
+ id: user._id,
+ ...user
+ });
+ })();
+
+ return cachedUser;
+ }
+
+ const user = await client.fetch(getUserByIdQuery, {
+ id
+ });
+
+ return {
+ id: user._id,
+ ...user
+ };
+ }
+
+ async function linkAccount(
+ userId: string,
+ providerId: string,
+ providerType: string,
+ providerAccountId: string,
+ refreshToken: string,
+ accessToken: string,
+ accessTokenExpires: number
+ ): Promise {
+ await client.create({
+ _type: 'account',
+ providerId,
+ providerType,
+ providerAccountId: `${providerAccountId}`,
+ refreshToken,
+ accessToken,
+ accessTokenExpires,
+ user: {
+ _type: 'reference',
+ _ref: userId
+ }
+ });
+ }
+
+ async function getUserByProviderAccountId(
+ providerId: string,
+ providerAccountId: string
+ ) {
+ const account = await client.fetch(getUserByProviderAccountIdQuery, {
+ providerId,
+ providerAccountId: String(providerAccountId)
+ });
+
+ return account?.user;
+ }
+
+ async function getUserByEmail(email: string) {
+ const user = await client.fetch(getUserByEmailQuery, {
+ email
+ });
+
+ return user;
+ }
+
+ async function createSession(): Promise {
+ console.log('[createSession] method not implemented');
+
+ return {} as any;
+ }
+ async function getSession(): Promise {
+ console.log('[getSession] method not implemented');
+ return {} as any;
+ }
+ async function updateSession(): Promise {
+ console.log('[updateSession] method not implemented');
+ return {} as any;
+ }
+ async function deleteSession() {
+ console.log('[deleteSession] method not implemented');
+ }
+
+ async function updateUser(user: User & { id: string }): Promise {
+ const { id, name, email, image } = user;
+
+ userCache.set(id, user);
+
+ const newUser = await client
+ .patch(id)
+ .set({
+ name,
+ email,
+ image
+ })
+ .commit();
+
+ return {
+ id: newUser._id,
+ ...newUser
+ };
+ }
+
+ return {
+ createUser,
+ getUser,
+ linkAccount,
+ getUserByProviderAccountId,
+ getUserByEmail,
+ createSession,
+ getSession,
+ updateSession,
+ deleteSession,
+ updateUser
+ };
+ };
+
+ return {
+ getAdapter
+ };
+};
diff --git a/src/client.ts b/src/client.ts
new file mode 100644
index 0000000..980a694
--- /dev/null
+++ b/src/client.ts
@@ -0,0 +1,17 @@
+import { User } from 'next-auth';
+import axios from 'axios';
+
+export interface SignUpData {
+ email: string;
+ password: string;
+ name?: string;
+ image?: string;
+}
+
+export const signUp = async (data: SignUpData) => {
+ const res = await axios.post('/api/sanity/signUp', {
+ ...data
+ });
+
+ return res.data;
+};
diff --git a/src/credentials.ts b/src/credentials.ts
new file mode 100644
index 0000000..81deffd
--- /dev/null
+++ b/src/credentials.ts
@@ -0,0 +1,79 @@
+import Providers, { CredentialsProvider } from 'next-auth/providers';
+import { SanityClient } from '@sanity/client';
+import { getUserByEmailQuery } from './queries';
+import argon2 from 'argon2';
+import { IncomingMessage, ServerResponse } from 'node:http';
+
+interface Options {
+ client: SanityClient;
+}
+
+type CredentialsConfig = ReturnType;
+
+export interface Handler {
+ req: IncomingMessage & { body: any };
+ res: ServerResponse & {
+ json: (body: any) => void;
+ };
+ client: SanityClient;
+}
+
+export const signUpHandler = async ({ req, client, res }: Handler) => {
+ const { email, password, name, image } = req.body;
+
+ const user = await client.fetch(getUserByEmailQuery, {
+ email
+ });
+
+ if (user) {
+ res.json({ error: 'User already exist' });
+ return;
+ }
+
+ const newUser = await client.create({
+ _type: 'user',
+ email,
+ password: await argon2.hash(password),
+ name,
+ image
+ });
+
+ res.json({
+ email: newUser.email,
+ name: newUser.name,
+ image: newUser.image
+ });
+};
+
+export const SanityCredentials = ({ client }: Options): CredentialsConfig =>
+ Providers.Credentials({
+ credentials: {
+ name: 'Credentials',
+ email: {
+ label: 'Email',
+ type: 'text'
+ },
+ password: {
+ label: 'Password',
+ type: 'password'
+ }
+ },
+ async authorize({ email, password }: { email: string; password: string }) {
+ const user = await client.fetch(getUserByEmailQuery, {
+ email
+ });
+
+ if (!user) throw new Error('Email does not exist');
+
+ if (await argon2.verify(user.password, password)) {
+ return {
+ email: user.email,
+ name: user.name,
+ image: user.image,
+ id: user.id
+ };
+ }
+
+ throw new Error('Password Invalid');
+ }
+ });
diff --git a/src/index.ts b/src/index.ts
index 58b5469..2a78a86 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,167 +1,2 @@
-import { Profile, Session } from 'next-auth/adapters';
-import { User } from 'next-auth';
-import {
- getUserByIdQuery,
- getUserByProviderAccountIdQuery,
- getUserByEmailQuery
-} from './queries';
-import LRU from 'lru-cache';
-import { SanityClient } from '@sanity/client';
-
-type Options = {
- client: SanityClient;
-};
-
-const userCache = new LRU({
- maxAge: 24 * 60 * 60 * 1000,
- max: 1000
-});
-
-export const SanityAdapter = ({ client }: Options) => {
- const getAdapter = async () => {
- async function createUser(profile: Profile): Promise {
- const user = await client.create({
- _type: 'user',
- email: profile.email,
- name: profile.name,
- image: profile.image
- });
-
- userCache.set(user._id, {
- id: user._id,
- ...user
- });
-
- return {
- id: user._id,
- ...user
- };
- }
-
- async function getUser(id: string): Promise {
- const cachedUser = userCache.get(id);
-
- if (cachedUser) {
- (async () => {
- const user = await client.fetch(getUserByIdQuery, {
- id
- });
-
- userCache.set(user._id, {
- id: user._id,
- ...user
- });
- })();
-
- return cachedUser;
- }
-
- const user = await client.fetch(getUserByIdQuery, {
- id
- });
-
- return {
- id: user._id,
- ...user
- };
- }
-
- async function linkAccount(
- userId: string,
- providerId: string,
- providerType: string,
- providerAccountId: string,
- refreshToken: string,
- accessToken: string,
- accessTokenExpires: number
- ): Promise {
- await client.create({
- _type: 'account',
- providerId,
- providerType,
- providerAccountId: `${providerAccountId}`,
- refreshToken,
- accessToken,
- accessTokenExpires,
- user: {
- _type: 'reference',
- _ref: userId
- }
- });
- }
-
- async function getUserByProviderAccountId(
- providerId: string,
- providerAccountId: string
- ) {
- const account = await client.fetch(getUserByProviderAccountIdQuery, {
- providerId,
- providerAccountId: String(providerAccountId)
- });
-
- return account?.user;
- }
-
- async function getUserByEmail(email: string) {
- const user = await client.fetch(getUserByEmailQuery, {
- email
- });
-
- return user;
- }
-
- async function createSession(): Promise {
- console.log('[createSession] method not implemented');
-
- return {} as any;
- }
- async function getSession(): Promise {
- console.log('[getSession] method not implemented');
- return {} as any;
- }
- async function updateSession(): Promise {
- console.log('[updateSession] method not implemented');
- return {} as any;
- }
- async function deleteSession() {
- console.log('[deleteSession] method not implemented');
- }
-
- async function updateUser(user: User & { id: string }): Promise {
- const { id, name, email, image } = user;
-
- userCache.set(id, user);
-
- const newUser = await client
- .patch(id)
- .set({
- name,
- email,
- image
- })
- .commit();
-
- return {
- id: newUser._id,
- ...newUser
- };
- }
-
- return {
- createUser,
- getUser,
- linkAccount,
- getUserByProviderAccountId,
- getUserByEmail,
- createSession,
- getSession,
- updateSession,
- deleteSession,
- updateUser
- };
- };
-
- return {
- getAdapter
- };
-};
+export { SanityAdapter } from './adapter';
+export { SanityCredentials, signUpHandler } from './credentials';
diff --git a/tsconfig.json b/tsconfig.json
index e26018a..9985023 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -67,5 +67,9 @@
/* Advanced Options */
"skipLibCheck": true, /* Skip type checking of declaration files. */
"forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */
- }
+ },
+ "exclude": [
+ "./examples",
+ "./dist"
+ ]
}
diff --git a/yarn.lock b/yarn.lock
index db4fc55..8dab17d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,11 +2,31 @@
# yarn lockfile v1
+"@mapbox/node-pre-gyp@^1.0.1":
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.4.tgz#6c76e7a40138eac39e1a4dc869a083e43e236c00"
+ integrity sha512-M669Qo4nRT7iDmQEjQYC7RU8Z6dpz9UmSbkJ1OFEja3uevCdLKh7IZZki7L1TZj02kRyl82snXFY8QqkyfowrQ==
+ dependencies:
+ detect-libc "^1.0.3"
+ https-proxy-agent "^5.0.0"
+ make-dir "^3.1.0"
+ node-fetch "^2.6.1"
+ nopt "^5.0.0"
+ npmlog "^4.1.2"
+ rimraf "^3.0.2"
+ semver "^7.3.4"
+ tar "^6.1.0"
+
"@panva/asn1.js@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@panva/asn1.js/-/asn1.js-1.0.0.tgz#dd55ae7b8129e02049f009408b97c61ccf9032f6"
integrity sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw==
+"@phc/format@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@phc/format/-/format-1.0.0.tgz#b5627003b3216dc4362125b13f48a4daa76680e4"
+ integrity sha512-m7X9U6BG2+J+R1lSOdCiITLLrxm+cWlNI3HUFA92oLO77ObGNzaKdh8pMLqdZcshtkKuV84olNNXDfMc4FezBQ==
+
"@rexxars/eventsource-polyfill@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@rexxars/eventsource-polyfill/-/eventsource-polyfill-1.0.0.tgz#ab46f2f44da23aedd6f51f13d92a194a5367525b"
@@ -78,11 +98,28 @@
resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.2.tgz#808c9fa7e4517274ed555fa158f2de4b4f468e71"
integrity sha512-HrCIVMLjE1MOozVoD86622S7aunluLb2PJdPfb3nYiEtohm8mIB/vyv0Fd37AdeMFrTUQXEunw78YloMA3Qilg==
+abbrev@1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
+ integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
+
+agent-base@6:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
+ integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
+ dependencies:
+ debug "4"
+
ansi-regex@^2.0.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
+ansi-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+ integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
+
ansi-regex@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
@@ -110,11 +147,41 @@ app-root-path@^3.0.0:
resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.0.0.tgz#210b6f43873227e18a4b810a032283311555d5ad"
integrity sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw==
+aproba@^1.0.3:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
+ integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
+
+are-we-there-yet@~1.1.2:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
+ integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^2.0.6"
+
+argon2@^0.27.2:
+ version "0.27.2"
+ resolved "https://registry.yarnpkg.com/argon2/-/argon2-0.27.2.tgz#f334ca15aee748739ac81f76b85d197841e8cdcc"
+ integrity sha512-evnzS/Q9rj6ahaaCJjLDoJo9ZuXHhVL2BrBz3wFHb5/i9zAJovBuIY+5t2En7tJjhFXs4O3rUZDeGZxBiDOLwQ==
+ dependencies:
+ "@mapbox/node-pre-gyp" "^1.0.1"
+ "@phc/format" "^1.0.0"
+ node-addon-api "^3.0.2"
+ opencollective-postinstall "^2.0.3"
+
argparse@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+axios@^0.21.1:
+ version "0.21.1"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8"
+ integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==
+ dependencies:
+ follow-redirects "^1.10.0"
+
balanced-match@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
@@ -170,6 +237,11 @@ chalk@^4.0.0, chalk@^4.1.0:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
+chownr@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
+ integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
+
cli-highlight@^2.1.10:
version "2.1.11"
resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf"
@@ -191,6 +263,11 @@ cliui@^7.0.2:
strip-ansi "^6.0.0"
wrap-ansi "^7.0.0"
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+ integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+
color-convert@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
@@ -208,6 +285,11 @@ concat-map@0.0.1:
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+ integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
+
core-util-is@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
@@ -225,6 +307,13 @@ crypto-js@^4.0.0:
resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.0.0.tgz#2904ab2677a9d042856a2ea2ef80de92e4a36dcc"
integrity sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg==
+debug@4, debug@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
+ integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==
+ dependencies:
+ ms "2.1.2"
+
debug@^2.6.8:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
@@ -232,13 +321,6 @@ debug@^2.6.8:
dependencies:
ms "2.0.0"
-debug@^4.3.1:
- version "4.3.1"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
- integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==
- dependencies:
- ms "2.1.2"
-
decompress-response@^3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3"
@@ -253,6 +335,16 @@ deep-assign@^2.0.0:
dependencies:
is-obj "^1.0.0"
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+ integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
+
+detect-libc@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
+ integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
+
dotenv@^8.2.0:
version "8.2.0"
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a"
@@ -292,6 +384,11 @@ figlet@^1.1.1:
resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.5.0.tgz#2db4d00a584e5155a96080632db919213c3e003c"
integrity sha512-ZQJM4aifMpz6H19AW1VqvZ7l4pOE9p7i/3LyxgO2kp+PO/VcDYNqIHEMtkccqIhTXMKci4kjueJr/iCQEaT/Ww==
+follow-redirects@^1.10.0:
+ version "1.14.0"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.0.tgz#f5d260f95c5f8c105894491feee5dc8993b402fe"
+ integrity sha512-0vRwd7RKQBTt+mgu87mtYeofLFZpTas2S9zY+jIeuLJMNvudIgF52nr19q40HOwH5RrhWIPuj9puybzSJiRrVg==
+
follow-redirects@^1.2.4:
version "1.13.3"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.3.tgz#e5598ad50174c1bc4e872301e82ac2cd97f90267"
@@ -310,6 +407,13 @@ from2@^2.1.1:
inherits "^2.0.1"
readable-stream "^2.0.0"
+fs-minipass@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
+ integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
+ dependencies:
+ minipass "^3.0.0"
+
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
@@ -320,6 +424,20 @@ futoin-hkdf@^1.3.2:
resolved "https://registry.yarnpkg.com/futoin-hkdf/-/futoin-hkdf-1.3.3.tgz#6ee1c9c105dfa0995ba4f80633cf1c0c32defcb2"
integrity sha512-oR75fYk3B3X9/B02Y6vusrBKucrpC6VjxhRL+C6B7FwUpuSRHbhBNG3AZbcE/xPyJmEQWsyqUFp3VeNNbA3S7A==
+gauge@~2.7.3:
+ version "2.7.4"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
+ integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
+ dependencies:
+ aproba "^1.0.3"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wide-align "^1.1.0"
+
get-caller-file@^2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
@@ -350,7 +468,7 @@ get-it@^5.0.3:
tunnel-agent "^0.6.0"
url-parse "^1.1.9"
-glob@^7.1.6:
+glob@^7.1.3, glob@^7.1.6:
version "7.1.6"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
@@ -379,11 +497,24 @@ has-flag@^4.0.0:
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+has-unicode@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+ integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
+
highlight.js@^10.7.1:
version "10.7.2"
resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.2.tgz#89319b861edc66c48854ed1e6da21ea89f847360"
integrity sha512-oFLl873u4usRM9K63j4ME9u3etNF0PLiJhSQ8rdfuL51Wn3zkD6drf9ZW0dOzjnZI22YYG24z30JcmfCZjMgYg==
+https-proxy-agent@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2"
+ integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==
+ dependencies:
+ agent-base "6"
+ debug "4"
+
ieee754@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
@@ -415,6 +546,18 @@ into-stream@^3.1.0:
from2 "^2.1.1"
p-is-promise "^1.1.0"
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+ integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
+
is-fullwidth-code-point@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
@@ -541,6 +684,13 @@ lru-cache@^6.0.0:
dependencies:
yallist "^4.0.0"
+make-dir@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
+ integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
+ dependencies:
+ semver "^6.0.0"
+
make-error@^1.3.0:
version "1.3.6"
resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
@@ -558,7 +708,22 @@ minimatch@^3.0.4:
dependencies:
brace-expansion "^1.1.7"
-mkdirp@^1.0.4:
+minipass@^3.0.0:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd"
+ integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==
+ dependencies:
+ yallist "^4.0.0"
+
+minizlib@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
+ integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
+ dependencies:
+ minipass "^3.0.0"
+ yallist "^4.0.0"
+
+mkdirp@^1.0.3, mkdirp@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
@@ -610,17 +775,49 @@ next-auth@*:
require_optional "^1.0.1"
typeorm "^0.2.30"
+node-addon-api@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.1.0.tgz#98b21931557466c6729e51cb77cd39c965f42239"
+ integrity sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw==
+
+node-fetch@^2.6.1:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
+ integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
+
nodemailer@^6.4.16:
version "6.5.0"
resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.5.0.tgz#d12c28d8d48778918e25f1999d97910231b175d9"
integrity sha512-Tm4RPrrIZbnqDKAvX+/4M+zovEReiKlEXWDzG4iwtpL9X34MJY+D5LnQPH/+eghe8DLlAVshHAJZAZWBGhkguw==
+nopt@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88"
+ integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==
+ dependencies:
+ abbrev "1"
+
+npmlog@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
+ integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
+ dependencies:
+ are-we-there-yet "~1.1.2"
+ console-control-strings "~1.1.0"
+ gauge "~2.7.3"
+ set-blocking "~2.0.0"
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+ integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
+
oauth@^0.9.15:
version "0.9.15"
resolved "https://registry.yarnpkg.com/oauth/-/oauth-0.9.15.tgz#bd1fefaf686c96b75475aed5196412ff60cfb9c1"
integrity sha1-vR/vr2hslrdUda7VGWQS/2DPucE=
-object-assign@^4.0.1, object-assign@^4.1.1:
+object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
@@ -632,6 +829,11 @@ once@^1.3.0:
dependencies:
wrappy "1"
+opencollective-postinstall@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259"
+ integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==
+
original@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f"
@@ -721,7 +923,7 @@ querystringify@^2.1.1:
resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6"
integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==
-readable-stream@^2.0.0, readable-stream@~2.3.6:
+readable-stream@^2.0.0, readable-stream@^2.0.6, readable-stream@~2.3.6:
version "2.3.7"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
@@ -762,6 +964,13 @@ resolve-from@^2.0.0:
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57"
integrity sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=
+rimraf@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+ integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+ dependencies:
+ glob "^7.1.3"
+
rxjs@^6.5.3:
version "6.6.7"
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9"
@@ -794,6 +1003,23 @@ semver@^5.1.0, semver@^5.6.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+semver@^6.0.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
+ integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+
+semver@^7.3.4:
+ version "7.3.5"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
+ integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
+ dependencies:
+ lru-cache "^6.0.0"
+
+set-blocking@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+ integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+
sha.js@^2.4.11:
version "2.4.11"
resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
@@ -802,6 +1028,11 @@ sha.js@^2.4.11:
inherits "^2.0.1"
safe-buffer "^5.0.1"
+signal-exit@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
+ integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
+
simple-concat@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f"
@@ -812,6 +1043,23 @@ speedometer@~1.0.0:
resolved "https://registry.yarnpkg.com/speedometer/-/speedometer-1.0.0.tgz#cd671cb06752c22bca3370e2f334440be4fc62e2"
integrity sha1-zWccsGdSwivKM3Di8zREC+T8YuI=
+string-width@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+"string-width@^1.0.2 || 2":
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+ integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^4.0.0"
+
string-width@^4.1.0, string-width@^4.2.0:
version "4.2.2"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5"
@@ -828,13 +1076,20 @@ string_decoder@~1.1.1:
dependencies:
safe-buffer "~5.1.0"
-strip-ansi@^3.0.0:
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
dependencies:
ansi-regex "^2.0.0"
+strip-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+ integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
+ dependencies:
+ ansi-regex "^3.0.0"
+
strip-ansi@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
@@ -854,6 +1109,18 @@ supports-color@^7.1.0:
dependencies:
has-flag "^4.0.0"
+tar@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.0.tgz#d1724e9bcc04b977b18d5c573b333a2207229a83"
+ integrity sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==
+ dependencies:
+ chownr "^2.0.0"
+ fs-minipass "^2.0.0"
+ minipass "^3.0.0"
+ minizlib "^2.1.1"
+ mkdirp "^1.0.3"
+ yallist "^4.0.0"
+
thenify-all@^1.0.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
@@ -934,6 +1201,13 @@ util-deprecate@~1.0.1:
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+wide-align@^1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
+ integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
+ dependencies:
+ string-width "^1.0.2 || 2"
+
wrap-ansi@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"