From 37322655e548191ab55df46e20cc4fc389018361 Mon Sep 17 00:00:00 2001 From: Incorbador Date: Tue, 28 Nov 2023 22:07:42 +0100 Subject: [PATCH] Make use of logging lib, move errors to utils/errors, remove yalc from packages --- package-lock.json | 26 +++- packages/react-sdk/package.json | 3 +- packages/react-sdk/yalc.lock | 9 -- packages/react/package.json | 4 +- packages/react/yalc.lock | 13 -- packages/web-core/package.json | 5 +- packages/web-core/src/index.ts | 1 + packages/web-core/src/services/ApiService.ts | 4 +- packages/web-core/src/services/AuthService.ts | 23 +-- .../web-core/src/services/SessionService.ts | 12 +- ...enticatorService.ts => WebAuthnService.ts} | 4 +- packages/web-core/src/services/index.ts | 8 +- packages/web-core/src/types/index.ts | 1 - packages/web-core/src/types/loginHandler.ts | 2 +- .../src/{types => utils/errors}/errors.ts | 8 +- packages/web-core/src/utils/errors/index.ts | 1 + packages/web-core/src/utils/index.ts | 1 + .../react-sdk-example/package-lock.json | 132 ------------------ 18 files changed, 67 insertions(+), 190 deletions(-) delete mode 100644 packages/react-sdk/yalc.lock delete mode 100644 packages/react/yalc.lock rename packages/web-core/src/services/{AuthenticatorService.ts => WebAuthnService.ts} (95%) rename packages/web-core/src/{types => utils/errors}/errors.ts (97%) create mode 100644 packages/web-core/src/utils/errors/index.ts diff --git a/package-lock.json b/package-lock.json index d7043f41..c5ffd154 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7176,6 +7176,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/loglevel": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", + "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", + "engines": { + "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" + } + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -11713,6 +11725,12 @@ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", "dev": true }, + "node_modules/ts-results": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ts-results/-/ts-results-3.3.0.tgz", + "integrity": "sha512-FWqxGX2NHp5oCyaMd96o2y2uMQmSu8Dey6kvyuFdRJ2AzfmWo3kWa4UsPlCGlfQ/qu03m09ZZtppMoY8EMHuiA==", + "dev": true + }, "node_modules/tsconfig-paths": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", @@ -12604,7 +12622,7 @@ "version": "0.1.0", "license": "ISC", "dependencies": { - "@corbado/react-sdk": "file:.yalc/@corbado/react-sdk", + "@corbado/react-sdk": "^0.1.6", "@corbado/web-core": "^0.1.6", "i18next": "23.5.1", "i18next-browser-languagedetector": "7.1.0", @@ -12628,7 +12646,7 @@ "version": "0.1.6", "license": "ISC", "dependencies": { - "@corbado/web-core": "file:.yalc/@corbado/web-core" + "@corbado/web-core": "^0.1.6" }, "devDependencies": { "@types/react": "^18.2.0" @@ -12679,7 +12697,11 @@ "dependencies": { "@github/webauthn-json": "^2.1.1", "axios": "^1.6.0", + "loglevel": "^1.8.1", "rxjs": "^7.8.1" + }, + "devDependencies": { + "ts-results": "^3.3.0" } } } diff --git a/packages/react-sdk/package.json b/packages/react-sdk/package.json index 767136f7..20f6a4bf 100644 --- a/packages/react-sdk/package.json +++ b/packages/react-sdk/package.json @@ -31,8 +31,7 @@ "react": ">=16.8" }, "dependencies": { - "@corbado/web-core": "file:.yalc/@corbado/web-core", - "ts-results": "^3.3.0" + "@corbado/web-core": "^0.1.6" }, "devDependencies": { "@types/react": "^18.2.0" diff --git a/packages/react-sdk/yalc.lock b/packages/react-sdk/yalc.lock deleted file mode 100644 index 471d716f..00000000 --- a/packages/react-sdk/yalc.lock +++ /dev/null @@ -1,9 +0,0 @@ -{ - "version": "v1", - "packages": { - "@corbado/web-core": { - "signature": "0a782b33cacae3e21b582c9ee2f40925", - "file": true - } - } -} \ No newline at end of file diff --git a/packages/react/package.json b/packages/react/package.json index 495f76b7..1279dfe8 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -30,8 +30,8 @@ "url": "https://github.com/corbado/javascript/issues" }, "dependencies": { - "@corbado/react-sdk": "file:.yalc/@corbado/react-sdk", - "@corbado/web-core": "file:.yalc/@corbado/web-core", + "@corbado/react-sdk": "^0.1.6", + "@corbado/web-core": "^0.1.6", "i18next": "23.5.1", "i18next-browser-languagedetector": "7.1.0", "react-i18next": "13.2.2" diff --git a/packages/react/yalc.lock b/packages/react/yalc.lock deleted file mode 100644 index ec2e12ca..00000000 --- a/packages/react/yalc.lock +++ /dev/null @@ -1,13 +0,0 @@ -{ - "version": "v1", - "packages": { - "@corbado/react-sdk": { - "signature": "cd89f3e73ade185866d13b939aea9c28", - "file": true - }, - "@corbado/web-core": { - "signature": "0a782b33cacae3e21b582c9ee2f40925", - "file": true - } - } -} \ No newline at end of file diff --git a/packages/web-core/package.json b/packages/web-core/package.json index 590a6ad0..6e830613 100644 --- a/packages/web-core/package.json +++ b/packages/web-core/package.json @@ -31,7 +31,10 @@ "dependencies": { "@github/webauthn-json": "^2.1.1", "axios": "^1.6.0", - "rxjs": "^7.8.1", + "loglevel": "^1.8.1", + "rxjs": "^7.8.1" + }, + "devDependencies": { "ts-results": "^3.3.0" } } diff --git a/packages/web-core/src/index.ts b/packages/web-core/src/index.ts index 9e935e7e..7dd01066 100644 --- a/packages/web-core/src/index.ts +++ b/packages/web-core/src/index.ts @@ -1,4 +1,5 @@ export * from './utils/constants'; export * from './utils/helpers/webAuthUtils'; +export * from './utils/errors'; export * from './types'; export * from './services'; diff --git a/packages/web-core/src/services/ApiService.ts b/packages/web-core/src/services/ApiService.ts index db7eb6d2..bff0316b 100644 --- a/packages/web-core/src/services/ApiService.ts +++ b/packages/web-core/src/services/ApiService.ts @@ -14,8 +14,8 @@ import type { InitSignUpWithEmailOTPError, LoginWithPasskeyError, SignUpWithPasskeyError, -} from '../types'; -import { CorbadoError, NonRecoverableError } from '../types'; +} from '../utils'; +import { CorbadoError, NonRecoverableError } from '../utils'; // TODO: does this work also without npm start? (e.g. vite js) const packageVersion = '0'; diff --git a/packages/web-core/src/services/AuthService.ts b/packages/web-core/src/services/AuthService.ts index eb9a761e..830eafa1 100644 --- a/packages/web-core/src/services/AuthService.ts +++ b/packages/web-core/src/services/AuthService.ts @@ -1,8 +1,11 @@ +import log from 'loglevel'; import { Subject } from 'rxjs'; import type { Result } from 'ts-results'; import { Ok } from 'ts-results'; import type { AuthenticationResponse } from '../internaltypes/auth'; +import type { IUser, ShortSession, UserAuthMethodsInterface } from '../types'; +import { AuthState, LoginHandler } from '../types'; import type { AppendPasskeyError, CompleteLoginWithEmailOTPError, @@ -10,16 +13,12 @@ import type { InitAutocompletedLoginWithPasskeyError, InitLoginWithEmailOTPError, InitSignUpWithEmailOTPError, - IUser, LoginWithPasskeyError, - ShortSession, SignUpWithPasskeyError, - UserAuthMethodsInterface, -} from '../types'; -import { AuthState, LoginHandler } from '../types'; +} from '../utils'; import type { ApiService } from './ApiService'; -import type { AuthenticatorService } from './AuthenticatorService'; import type { SessionService } from './SessionService'; +import type { WebAuthnService } from './WebAuthnService'; /** * AuthService is a class that handles authentication related operations. @@ -29,7 +28,7 @@ import type { SessionService } from './SessionService'; */ export class AuthService { #apiService: ApiService; - #authenticatorService: AuthenticatorService; + #authenticatorService: WebAuthnService; // sessionService is used to store and manage (e.g. refresh) the user's session #sessionService: SessionService; @@ -45,13 +44,19 @@ export class AuthService { /** * The constructor initializes the AuthService with an instance of ApiService. */ - constructor(apiService: ApiService, sessionService: SessionService, authenticatorService: AuthenticatorService) { + constructor(apiService: ApiService, sessionService: SessionService, authenticatorService: WebAuthnService) { this.#apiService = apiService; this.#authenticatorService = authenticatorService; this.#sessionService = sessionService; } - init() { + init(isDebug = false) { + if (isDebug) { + log.setLevel('debug'); + } else { + log.setLevel('error'); + } + this.#sessionService.init((shortSession: ShortSession | undefined) => { const user = this.#sessionService.getUser(); diff --git a/packages/web-core/src/services/SessionService.ts b/packages/web-core/src/services/SessionService.ts index 764cc5c2..a7126cf2 100644 --- a/packages/web-core/src/services/SessionService.ts +++ b/packages/web-core/src/services/SessionService.ts @@ -3,6 +3,7 @@ import type { AxiosRequestConfig } from 'axios'; import type { IFullUser, IUser } from '../types'; import { ShortSession } from '../types'; import type { ApiService } from './ApiService'; +import log from "loglevel"; const shortSessionKey = 'cbo_short_session'; const longSessionKey = 'cbo_long_session'; @@ -68,7 +69,6 @@ export class SessionService { * @returns The username or null if it's not set. */ public getUser(): IUser | undefined { - console.log(this.#shortSession); if (!this.#shortSession) { return; } @@ -127,7 +127,7 @@ export class SessionService { logout() { // TODO: should we call backend to destroy the session here? - console.log('logging out user'); + log.debug('logging out user'); this.clear(); if (this.#onShortSessionChange) { @@ -204,7 +204,7 @@ export class SessionService { } // nothing to do for now - console.log('no refresh, token still valid'); + log.debug('no refresh, token still valid'); return; } @@ -217,12 +217,12 @@ export class SessionService { }; const response = await this.#apiService.sessionsApi.sessionRefresh({}, options); if (response.status !== 200) { - console.error(`refresh error, status code: ${response.status}`); + log.warn(`refresh error, status code: ${response.status}`); return; } if (!response.data.shortSession?.value) { - console.error('refresh error, missing short session'); + log.warn('refresh error, missing short session'); return; } @@ -231,7 +231,7 @@ export class SessionService { } catch (e) { // if it's a network error, we should do a retry // for all other errors, we should log out the user - console.log(e); + log.warn(e); this.logout(); } } diff --git a/packages/web-core/src/services/AuthenticatorService.ts b/packages/web-core/src/services/WebAuthnService.ts similarity index 95% rename from packages/web-core/src/services/AuthenticatorService.ts rename to packages/web-core/src/services/WebAuthnService.ts index e1259355..61860546 100644 --- a/packages/web-core/src/services/AuthenticatorService.ts +++ b/packages/web-core/src/services/WebAuthnService.ts @@ -2,14 +2,14 @@ import { create, get } from '@github/webauthn-json'; import type { Subject } from 'rxjs'; import type { Result } from 'ts-results'; import { Err, Ok } from 'ts-results'; +import {CorbadoError, NonRecoverableError} from "../utils"; -import { CorbadoError, NonRecoverableError } from '../types'; /** * AuthenticatorService handles all interactions with webAuthn platform authenticators. * Currently, this includes the creation of passkeys and the login with existing passkeys. */ -export class AuthenticatorService { +export class WebAuthnService { #globalErrors: Subject; constructor(globalErrors: Subject) { diff --git a/packages/web-core/src/services/index.ts b/packages/web-core/src/services/index.ts index 724af4a2..795347b1 100644 --- a/packages/web-core/src/services/index.ts +++ b/packages/web-core/src/services/index.ts @@ -1,14 +1,13 @@ import { Subject } from 'rxjs'; import type { IFlowHandlerConfig } from '../types'; -import { NonRecoverableError } from '../types'; -import { defaultTimeout } from '../utils'; +import {defaultTimeout, NonRecoverableError} from '../utils'; import { ApiService } from './ApiService'; -import { AuthenticatorService } from './AuthenticatorService'; import { AuthService } from './AuthService'; import type { FlowHandlerService } from './FlowHandlerService'; import { ProjectService } from './ProjectService'; import { SessionService } from './SessionService'; +import { WebAuthnService } from './WebAuthnService'; export type { ProjectService } from './ProjectService'; export type { AuthService } from './AuthService'; @@ -41,7 +40,7 @@ export class CorbadoApp { this.#projectId = projectId; this.#apiService = new ApiService(this.#projectId, apiTimeout); const sessionService = new SessionService(this.#apiService); - const authenticatorService = new AuthenticatorService(this.#globalErrors); + const authenticatorService = new WebAuthnService(this.#globalErrors); this.#authService = new AuthService(this.#apiService, sessionService, authenticatorService); this.#projectService = new ProjectService(this.#apiService); } @@ -72,7 +71,6 @@ export class CorbadoApp { */ public init() { if (!this.#validateProjectId(this.#projectId)) { - console.log('invalid project id'); this.#globalErrors.next(NonRecoverableError.invalidConfig('Invalid project ID')); } diff --git a/packages/web-core/src/types/index.ts b/packages/web-core/src/types/index.ts index 4edc0e2b..bd23e681 100644 --- a/packages/web-core/src/types/index.ts +++ b/packages/web-core/src/types/index.ts @@ -3,4 +3,3 @@ export * from './auth'; export * from './flowHandler'; export * from './session'; export * from './loginHandler'; -export * from './errors'; diff --git a/packages/web-core/src/types/loginHandler.ts b/packages/web-core/src/types/loginHandler.ts index c3eca27e..3f77c0bc 100644 --- a/packages/web-core/src/types/loginHandler.ts +++ b/packages/web-core/src/types/loginHandler.ts @@ -1,6 +1,6 @@ import type { Result } from 'ts-results'; -import type { CompleteAutocompletedLoginWithPasskeyError } from './errors'; +import type { CompleteAutocompletedLoginWithPasskeyError } from '../utils/errors/errors'; export class LoginHandler { readonly #completionCallback: () => Promise>; diff --git a/packages/web-core/src/types/errors.ts b/packages/web-core/src/utils/errors/errors.ts similarity index 97% rename from packages/web-core/src/types/errors.ts rename to packages/web-core/src/utils/errors/errors.ts index cfe508d0..ff615088 100644 --- a/packages/web-core/src/types/errors.ts +++ b/packages/web-core/src/utils/errors/errors.ts @@ -1,4 +1,6 @@ -import type { ErrorRspAllOfError } from '../api'; +import log from "loglevel"; + +import type { ErrorRspAllOfError } from '../../api'; export type SignUpWithPasskeyError = | UserAlreadyExistsError @@ -28,7 +30,7 @@ export class CorbadoError extends Error { } static fromApiResponse(errorResp: ErrorRspAllOfError): CorbadoError { - console.log('errorResp', errorResp); + log.debug('errorResp', errorResp); switch (errorResp.type) { case 'validation_error': { if (!errorResp.validation?.length) { @@ -77,7 +79,7 @@ export class CorbadoError extends Error { } static fromUnknownException(e: unknown): CorbadoError { - console.log('unknown exception', e); + log.debug('unknown exception', e); return CorbadoError.unknown(); } diff --git a/packages/web-core/src/utils/errors/index.ts b/packages/web-core/src/utils/errors/index.ts new file mode 100644 index 00000000..f72bc43e --- /dev/null +++ b/packages/web-core/src/utils/errors/index.ts @@ -0,0 +1 @@ +export * from './errors'; diff --git a/packages/web-core/src/utils/index.ts b/packages/web-core/src/utils/index.ts index ae33948d..315b424c 100644 --- a/packages/web-core/src/utils/index.ts +++ b/packages/web-core/src/utils/index.ts @@ -1,3 +1,4 @@ export * from './helpers'; export * from './constants'; export * from './flows'; +export * from './errors'; diff --git a/playground/react-sdk-example/package-lock.json b/playground/react-sdk-example/package-lock.json index 6b296fb5..44686b30 100644 --- a/playground/react-sdk-example/package-lock.json +++ b/playground/react-sdk-example/package-lock.json @@ -8,8 +8,6 @@ "name": "react-sdk-example", "version": "0.0.0", "dependencies": { - "@corbado/react-sdk": "file:.yalc/@corbado/react-sdk", - "@corbado/web-core": "file:.yalc/@corbado/web-core", "jwt-decode": "^4.0.0", "react": "^18.2.0", "react-dom": "^18.2.0", @@ -32,30 +30,6 @@ "vite": "^5.0.0" } }, - ".yalc/@corbado/react-sdk": { - "version": "0.1.6+c60bdf88", - "license": "ISC", - "dependencies": { - "@corbado/web-core": "file:.yalc/@corbado/web-core", - "ts-results": "^3.3.0" - }, - "peerDependencies": { - "react": ">=16.8" - } - }, - ".yalc/@corbado/react-sdk/.yalc/@corbado/web-core": {}, - ".yalc/@corbado/react-sdk/node_modules/@corbado/web-core": { - "resolved": ".yalc/@corbado/react-sdk/.yalc/@corbado/web-core", - "link": true - }, - ".yalc/@corbado/web-core": { - "version": "0.1.6", - "license": "ISC", - "dependencies": { - "@github/webauthn-json": "^2.1.1", - "axios": "^1.6.0" - } - }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", @@ -435,14 +409,6 @@ "node": ">=6.9.0" } }, - "node_modules/@corbado/react-sdk": { - "resolved": ".yalc/@corbado/react-sdk", - "link": true - }, - "node_modules/@corbado/web-core": { - "resolved": ".yalc/@corbado/web-core", - "link": true - }, "node_modules/@esbuild/android-arm": { "version": "0.19.5", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.5.tgz", @@ -866,14 +832,6 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@github/webauthn-json": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@github/webauthn-json/-/webauthn-json-2.1.1.tgz", - "integrity": "sha512-XrftRn4z75SnaJOmZQbt7Mk+IIjqVHw+glDGOxuHwXkZBZh/MBoRS7MHjSZMDaLhT4RjN2VqiEU7EOYleuJWSQ==", - "bin": { - "webauthn-json": "dist/bin/main.js" - } - }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.13", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", @@ -1551,11 +1509,6 @@ "node": ">=8" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, "node_modules/autoprefixer": { "version": "10.4.16", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", @@ -1593,16 +1546,6 @@ "postcss": "^8.1.0" } }, - "node_modules/axios": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", - "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1778,17 +1721,6 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", @@ -1865,14 +1797,6 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -2345,38 +2269,6 @@ "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, - "node_modules/follow-redirects": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", - "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/fraction.js": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", @@ -2811,25 +2703,6 @@ "node": ">=8.6" } }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -3211,11 +3084,6 @@ "node": ">= 0.8.0" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",