diff --git a/.eslintrc.json b/.eslintrc.json index d169b46..a5cc2d8 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -11,7 +11,9 @@ }, "ignorePatterns": ["*.config.js"], "rules": { + "class-methods-use-this": "off", "no-useless-constructor": "off", + "import/no-unresolved": "off", "import/extensions": [ "error", "ignorePackages", diff --git a/.github/workflows/publish-graph.yml b/.github/workflows/publish-graph-to-current.yml similarity index 82% rename from .github/workflows/publish-graph.yml rename to .github/workflows/publish-graph-to-current.yml index ada9f57..a405a4b 100644 --- a/.github/workflows/publish-graph.yml +++ b/.github/workflows/publish-graph-to-current.yml @@ -1,4 +1,4 @@ -name: 'Publish Graph' +name: 'Publish Graph to Current' on: pull_request: branches: @@ -19,4 +19,4 @@ jobs: run: yarn install --frozen-lockfile - name: Publish Graph - run: yarn apollo:rover + run: yarn apollo:rover:current diff --git a/.github/workflows/publish-graph-to-develop.yml b/.github/workflows/publish-graph-to-develop.yml new file mode 100644 index 0000000..8448964 --- /dev/null +++ b/.github/workflows/publish-graph-to-develop.yml @@ -0,0 +1,22 @@ +name: 'Publish Graph to Develop' +on: + pull_request: + branches: + - develop + +jobs: + publish-graph: + name: Publish Graph + runs-on: ubuntu-latest + env: + APOLLO_KEY: ${{secrets.APOLLO_KEY}} + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Install Dependencies + run: yarn install --frozen-lockfile + + - name: Publish Graph + run: yarn apollo:rover:develop diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 90c6453..b518c0b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -24,6 +24,16 @@ jobs: runs-on: ubuntu-latest env: DATABASE_URL: postgresql://postgres:postgres@localhost:5432/test?schema=public + FIREBASE_API_KEY: ${{secrets.FIREBASE_API_KEY}} + FIREBASE_AUTH_DOMAIN: ${{secrets.FIREBASE_AUTH_DOMAIN}} + FIREBASE_PROJECT_ID: ${{secrets.FIREBASE_PROJECT_ID}} + FIREBASE_STORAGE_BUCKET: ${{secrets.FIREBASE_STORAGE_BUCKET}} + FIREBASE_SENDER_ID: ${{secrets.FIREBASE_SENDER_ID}} + FIREBASE_API_ID: ${{secrets.FIREBASE_API_ID}} + FIREBASE_MEASUREMENT_ID: ${{secrets.FIREBASE_MEASUREMENT_ID}} + FIREBASE_ADMIN_PROJECT_ID: ${{secrets.FIREBASE_ADMIN_PROJECT_ID}} + FIREBASE_ADMIN_PRIVATE_KEY: ${{secrets.FIREBASE_ADMIN_PRIVATE_KEY}} + FIREBASE_ADMIN_CLIENT_EMAIL: ${{secrets.FIREBASE_ADMIN_CLIENT_EMAIL}} services: db: image: postgres diff --git a/.gitignore b/.gitignore index 468297e..496eb8a 100644 --- a/.gitignore +++ b/.gitignore @@ -37,3 +37,6 @@ lerna-debug.log* !.vscode/launch.json !.vscode/extensions.json *.code-workspace + +# firebase admin secret keys +programmist-c0b3c-firebase-adminsdk-*.json diff --git a/jest.config.json b/jest.config.json index 52ae4b9..8719f0c 100644 --- a/jest.config.json +++ b/jest.config.json @@ -5,7 +5,9 @@ "transform": { "^.+\\.(t|j)s$": "ts-jest" }, - "collectCoverageFrom": ["**/*.(t|j)s"], - "coverageDirectory": "../coverage", - "testEnvironment": "node" + "collectCoverageFrom": ["./src/**/*.ts"], + "coveragePathIgnorePatterns": ["dist", "node_modules", "./src/libs/prisma/generated"], + "coverageDirectory": "./coverage", + "testEnvironment": "node", + "setupFiles": ["dotenv/config"] } diff --git a/package.json b/package.json index 4d5d15c..64d063c 100644 --- a/package.json +++ b/package.json @@ -15,16 +15,17 @@ "start": "nest start", "prod": "node dist/main", "lint": "eslint ./src/**/*.ts", - "test": "jest", + "test": "jest --silent=false --verbose false", "test:watch": "jest --watch", "test:cov": "jest --coverage", "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", - "test:e2e": "jest --config ./test/jest-e2e.json", + "test:e2e": "jest --silent=false --verbose false --config ./test/jest-e2e.json", "prisma:gen": "prisma generate --schema ./src/libs/prisma/schema.prisma", "prisma:migrate": "prisma migrate dev --schema ./src/libs/prisma/schema.prisma", "prisma:clear": "prisma db push --accept-data-loss --schema ./src/libs/prisma/schema.prisma", "prisma:studio": "prisma studio --schema ./src/libs/prisma/schema.prisma", - "apollo:rover": "rover graph publish Programmist-h0lm9@current --schema ./schema.gql" + "apollo:rover:current": "rover graph publish Programmist-h0lm9@current --schema ./schema.gql", + "apollo:rover:develop": "rover graph publish Programmist-h0lm9@develop --schema ./schema.gql" }, "dependencies": { "@nestjs/apollo": "^10.0.14", @@ -40,6 +41,8 @@ "class-transformer": "^0.5.1", "class-validator": "^0.13.2", "express": "^4.18.1", + "firebase": "^9.8.3", + "firebase-admin": "^11.0.0", "graphql-tag": "^2.12.6", "jest-mock-extended": "^2.0.6", "rxjs": "^7.5.5", @@ -51,7 +54,7 @@ "@nestjs/cli": "^8.2.6", "@nestjs/schematics": "^8.0.11", "@types/jest": "^28.1.1", - "@types/node": "^17.0.42", + "@types/node": "^18.0.0", "@typescript-eslint/eslint-plugin": "^5.27.1", "@typescript-eslint/parser": "^5.27.1", "apollo-server-express": "^3.8.2", diff --git a/schema.gql b/schema.gql index bb0afa5..3ec1224 100644 --- a/schema.gql +++ b/schema.gql @@ -56,8 +56,6 @@ input NestedStringFilter { type Query { findUserById(where: UserWhereUniqueInput!): User findUsers(cursor: UserWhereUniqueInput, distinct: [UserScalarFieldEnum!], orderBy: [UserOrderByWithRelationInput!], skip: Int, take: Int, where: UserWhereInput): [User!]! - getAllUsers: [User!]! - getAuthorizationHeader: String! } enum QueryMode { @@ -90,35 +88,30 @@ input StringFilter { } type User { - avatarURL: String! createdAt: DateTime! id: ID! name: String! } input UserCreateInput { - avatarURL: String! createdAt: DateTime - id: String + id: String! name: String! } input UserOrderByWithRelationInput { - avatarURL: SortOrder createdAt: SortOrder id: SortOrder name: SortOrder } enum UserScalarFieldEnum { - avatarURL createdAt id name } input UserUpdateInput { - avatarURL: StringFieldUpdateOperationsInput createdAt: DateTimeFieldUpdateOperationsInput id: StringFieldUpdateOperationsInput name: StringFieldUpdateOperationsInput @@ -128,7 +121,6 @@ input UserWhereInput { AND: [UserWhereInput!] NOT: [UserWhereInput!] OR: [UserWhereInput!] - avatarURL: StringFilter createdAt: DateTimeFilter id: StringFilter name: StringFilter diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 0c82cb6..7756f3a 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -2,9 +2,10 @@ import { Module } from '@nestjs/common'; import Components from '../components'; import EnvModule from '../config/environment/getter/getter.module'; import GraphQLConfig from '../config/graphql/graphql.config'; +import FirebaseModule from '../libs/firebase/firebase.module'; import PrismaModule from '../libs/prisma/prisma.module'; @Module({ - imports: [EnvModule, GraphQLConfig, PrismaModule, ...Components], + imports: [EnvModule, GraphQLConfig, PrismaModule, FirebaseModule, ...Components], }) export default class AppModule {} diff --git a/src/components/user/user.resolver.mutation.spec.ts b/src/components/user/user.resolver.mutation.spec.ts new file mode 100644 index 0000000..55943c5 --- /dev/null +++ b/src/components/user/user.resolver.mutation.spec.ts @@ -0,0 +1,54 @@ +import FirebaseService from '../../libs/firebase/firebase.service'; +import { mock, MockedType } from '../../test/mock'; +import UserMutation from './user.resolver.mutation'; +import UserService from './user.service'; + +describe('User Mutation Resolver Test', () => { + let mockedFirebaseService: MockedType; + let mockedUserService: MockedType; + let userQuery: UserMutation; + + beforeEach(() => { + mockedFirebaseService = mock(); + mockedUserService = mock(); + userQuery = new UserMutation(mockedFirebaseService, mockedUserService); + }); + + test('createUser', async () => { + const fakeUser = { + id: 'abc-123', + name: 'yukarisan-lover', + createdAt: new Date(), + }; + mockedUserService.create.mockResolvedValue(fakeUser); + + const expectUser = fakeUser; + await expect(userQuery.createUser({ data: { id: expectUser.id, name: expectUser.name } })).resolves.toEqual(expectUser); + }); + + test('updateUser', async () => { + const fakeUser = { + id: 'abc-123', + name: 'yukarisan-lover', + createdAt: new Date(), + }; + mockedUserService.update.mockResolvedValue(fakeUser); + + const expectUser = fakeUser; + await expect(userQuery.updateUser({ where: { id: expectUser.id }, data: { id: expectUser.id, name: expectUser.name } })).resolves.toEqual( + expectUser, + ); + }); + + test('deleteUser', async () => { + const fakeUser = { + id: 'abc-123', + name: 'yukarisan-lover', + createdAt: new Date(), + }; + mockedUserService.delete.mockResolvedValue(fakeUser); + + const expectUser = fakeUser; + await expect(userQuery.deleteUser({ where: { id: expectUser.id } })).resolves.toEqual(expectUser); + }); +}); diff --git a/src/components/user/user.resolver.mutation.ts b/src/components/user/user.resolver.mutation.ts index 94713dc..eb5d252 100644 --- a/src/components/user/user.resolver.mutation.ts +++ b/src/components/user/user.resolver.mutation.ts @@ -1,4 +1,7 @@ +import { UseGuards } from '@nestjs/common'; import { Resolver, Mutation, Args } from '@nestjs/graphql'; +import AuthGuard from '../../guards/auth.guard'; +import FirebaseService from '../../libs/firebase/firebase.service'; import { CreateOneUserArgs } from '../../libs/prisma/generated/user/create-one-user/args'; import { DeleteOneUserArgs } from '../../libs/prisma/generated/user/delete-one-user/args'; import { UpdateOneUserArgs } from '../../libs/prisma/generated/user/update-one-user/args'; @@ -6,26 +9,37 @@ import { User } from '../../libs/prisma/generated/user/user/model'; import UserService from './user.service'; @Resolver() +@UseGuards(AuthGuard) export default class UserMutation { - constructor(private service: UserService) {} + constructor(private firebaseService: FirebaseService, private service: UserService) {} @Mutation(() => User) async createUser(@Args() args: CreateOneUserArgs) { - const user = this.service.create(args); + const user = await this.service.create(args); return user; } @Mutation(() => User) async updateUser(@Args() args: UpdateOneUserArgs) { - const user = this.service.update(args); + if (!args.where.id) { + throw new Error('where.idは必須のプロパティです。'); + } + + const user = await this.service.update(args); + await this.firebaseService.adminAuth.updateUser(args.where.id, { displayName: args.data.name }); return user; } @Mutation(() => User) async deleteUser(@Args() args: DeleteOneUserArgs) { - const user = this.service.delete(args); + if (!args.where.id) { + throw new Error('where.idは必須のプロパティです。'); + } + + const user = await this.service.delete(args); + await this.firebaseService.adminAuth.deleteUser(args.where.id); return user; } diff --git a/src/components/user/user.resolver.query.spec.ts b/src/components/user/user.resolver.query.spec.ts new file mode 100644 index 0000000..8ac3b94 --- /dev/null +++ b/src/components/user/user.resolver.query.spec.ts @@ -0,0 +1,54 @@ +import { mock, MockedType } from '../../test/mock'; +import UserQuery from './user.resolver.query'; +import UserService from './user.service'; + +describe('User Query Resolver Test', () => { + let mockedUserService: MockedType; + let userQuery: UserQuery; + + beforeEach(() => { + mockedUserService = mock(); + userQuery = new UserQuery(mockedUserService); + }); + + test('findUserById', async () => { + const fakeUser = { + id: 'abc-123', + name: 'yukarisan-lover', + createdAt: new Date(), + }; + mockedUserService.findUser.mockResolvedValue(fakeUser); + + const expectUser = fakeUser; + await expect(userQuery.findUserById({ where: { id: expectUser.id } })).resolves.toEqual(expectUser); + }); + + test('findUsers', async () => { + const fakeUsers = [ + { + id: 'abc-123', + name: 'yukarisan-lover', + createdAt: new Date(), + }, + { + id: 'abc-124', + name: 'mikusan-lover', + createdAt: new Date(), + }, + ]; + mockedUserService.findUsers.mockResolvedValue(fakeUsers); + + const expectUsers = fakeUsers; + await expect( + userQuery.findUsers({ + where: { + AND: expectUsers.map((user) => ({ + name: { + equals: user.name, + }, + })), + }, + }), + ).resolves.toEqual(expectUsers); + }); +}); diff --git a/src/components/user/user.resolver.query.ts b/src/components/user/user.resolver.query.ts index 1c8fa3f..46a13c3 100644 --- a/src/components/user/user.resolver.query.ts +++ b/src/components/user/user.resolver.query.ts @@ -1,6 +1,4 @@ -import { UseGuards } from '@nestjs/common'; -import { Resolver, Query, Args, Context } from '@nestjs/graphql'; -import AuthGuard from '../../guards/auth.guard'; +import { Resolver, Query, Args } from '@nestjs/graphql'; import { FindManyUserArgs } from '../../libs/prisma/generated/user/find-many-user/args'; import { FindUniqueUserArgs } from '../../libs/prisma/generated/user/find-unique-user/args'; import { User } from '../../libs/prisma/generated/user/user/model'; @@ -10,13 +8,6 @@ import UserService from './user.service'; export default class UserQuery { constructor(private service: UserService) {} - // eslint-disable-next-line class-methods-use-this - @Query(() => String) - @UseGuards(AuthGuard) - getAuthorizationHeader(@Context() context): string { - return context.authorization; - } - @Query(() => User, { nullable: true }) async findUserById(@Args() args: FindUniqueUserArgs): Promise { const user = await this.service.findUser(args); @@ -26,14 +17,7 @@ export default class UserQuery { @Query(() => [User]) async findUsers(@Args() args: FindManyUserArgs): Promise { - const users = this.service.findUsers(args); - - return users; - } - - @Query(() => [User]) - async getAllUsers() { - const users = this.service.findUsers(); + const users = await this.service.findUsers(args); return users; } diff --git a/src/components/user/user.resolver.spec.ts b/src/components/user/user.resolver.spec.ts deleted file mode 100644 index 10350df..0000000 --- a/src/components/user/user.resolver.spec.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { mock, MockedType } from '../../test/mock'; -import UserQuery from './user.resolver.query'; -import UserService from './user.service'; - -describe('user resolver test', () => { - let mockedUserService: MockedType; - let userQuery: UserQuery; - - beforeEach(() => { - mockedUserService = mock(); - userQuery = new UserQuery(mockedUserService); - }); - - test('should create new user', async () => { - const fakeUser = { - id: 'abc-123', - name: 'yukarisan-lover', - avatarURL: 'https://www.example.com/icon.png', - createdAt: new Date(Date.now()), - }; - mockedUserService.findUser.mockResolvedValue(fakeUser); - - const expectUser = fakeUser; - await expect(userQuery.findUserById({ where: { id: expectUser.id } })).resolves.toEqual(expectUser); - }); -}); diff --git a/src/components/user/user.service.spec.ts b/src/components/user/user.service.spec.ts index 450933a..98d12a7 100644 --- a/src/components/user/user.service.spec.ts +++ b/src/components/user/user.service.spec.ts @@ -1,7 +1,7 @@ import MockContext from '../../test/mock'; import UserService from './user.service'; -describe('user db service test', () => { +describe('User DB Service Test', () => { let mockContext: MockContext; let userService: UserService; @@ -10,12 +10,40 @@ describe('user db service test', () => { userService = new UserService(mockContext.prisma); }); - test('should create new user', async () => { + test('findUser', async () => { const fakeUser = { id: 'abc-123', name: 'yukarisan-lover', avatarURL: 'https://www.example.com/icon.png', - createdAt: new Date(Date.now()), + createdAt: new Date(), + }; + mockContext.prisma.user.findUnique.mockResolvedValue(fakeUser); + + const expectUser = fakeUser; + await expect(userService.findUser({ where: { id: expectUser.id } })).resolves.toEqual(expectUser); + }); + + test('findUsers', async () => { + const fakeUser = [ + { + id: 'abc-123', + name: 'yukarisan-lover', + avatarURL: 'https://www.example.com/icon.png', + createdAt: new Date(), + }, + ]; + mockContext.prisma.user.findMany.mockResolvedValue(fakeUser); + + const expectUser = fakeUser; + await expect(userService.findUsers({ where: { name: { equals: expectUser[0].name } } })).resolves.toEqual(expectUser); + }); + + test('create', async () => { + const fakeUser = { + id: 'abc-123', + name: 'yukarisan-lover', + avatarURL: 'https://www.example.com/icon.png', + createdAt: new Date(), }; mockContext.prisma.user.create.mockResolvedValue(fakeUser); @@ -23,16 +51,29 @@ describe('user db service test', () => { await expect(userService.create({ data: expectUser })).resolves.toEqual(expectUser); }); - test('should update user name', async () => { + test('update', async () => { const fakeUser = { id: 'abc-123', name: 'mikusan-lover', avatarURL: 'https://www.example.com/icon.png', - createdAt: new Date(Date.now()), + createdAt: new Date(), }; mockContext.prisma.user.update.mockResolvedValue(fakeUser); const expectUser = fakeUser; await expect(userService.update({ where: { id: expectUser.id }, data: { name: expectUser.name } })).resolves.toEqual(expectUser); }); + + test('delete', async () => { + const fakeUser = { + id: 'abc-123', + name: 'mikusan-lover', + avatarURL: 'https://www.example.com/icon.png', + createdAt: new Date(), + }; + mockContext.prisma.user.delete.mockResolvedValue(fakeUser); + + const expectUser = fakeUser; + await expect(userService.delete({ where: { id: expectUser.id } })).resolves.toEqual(expectUser); + }); }); diff --git a/src/config/environment/getter/getter.service.ts b/src/config/environment/getter/getter.service.ts index ff0574d..c82e61f 100644 --- a/src/config/environment/getter/getter.service.ts +++ b/src/config/environment/getter/getter.service.ts @@ -1,60 +1,58 @@ import { Injectable } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { ApolloConfigInput } from 'apollo-server-types'; +import { AppOptions, credential } from 'firebase-admin'; +import { FirebaseOptions } from 'firebase/app'; @Injectable() export default class Env { constructor(private configService: ConfigService) {} get NodeEnv(): string { - let nodeEnv = this.configService.get('NODE_ENV'); - if (!nodeEnv) { - nodeEnv = 'production'; - } + const nodeEnv = this.configService.get('NODE_ENV', 'production'); return nodeEnv; } get Port(): number { - const port = this.configService.get('PORT'); - if (!port) { - throw new Error('PORT environment variable must be specified.'); - } + const port = this.configService.get('PORT', 3000); return port; } get DatabaseURL(): string { - const databaseURL = this.configService.get('DATABASE_URL'); - if (!databaseURL) { - throw new Error('DATABASE_URL environment variable must be specified.'); - } + const databaseURL = this.configService.getOrThrow('DATABASE_URL'); return databaseURL; } - get ApolloKey(): string { - const apolloKey = this.configService.get('APOLLO_KEY'); - if (!apolloKey) { - throw new Error('APOLLO_KEY environment variable must be specified.'); - } - - return apolloKey; + get ApolloStudioConfig(): ApolloConfigInput { + return { + key: this.configService.getOrThrow('APOLLO_KEY'), + graphId: this.configService.getOrThrow('APOLLO_GRAPH_ID'), + }; } - get ApolloGraphId(): string { - const apolloGraphId = this.configService.get('APOLLO_GRAPH_ID'); - if (!apolloGraphId) { - throw new Error('APOLLO_GRAPH_ID environment variable must be specified.'); - } - - return apolloGraphId; + get FirebaseConfig(): FirebaseOptions { + return { + apiKey: this.configService.getOrThrow('FIREBASE_API_KEY'), + authDomain: this.configService.getOrThrow('FIREBASE_AUTH_DOMAIN'), + projectId: this.configService.getOrThrow('FIREBASE_PROJECT_ID'), + storageBucket: this.configService.getOrThrow('FIREBASE_STORAGE_BUCKET'), + messagingSenderId: this.configService.getOrThrow('FIREBASE_SENDER_ID'), + appId: this.configService.getOrThrow('FIREBASE_API_ID'), + measurementId: this.configService.getOrThrow('FIREBASE_MEASUREMENT_ID'), + }; } - get ApolloStudioConfig(): ApolloConfigInput { + get FirebaseAdminConfig(): AppOptions { return { - key: this.ApolloKey, - graphId: this.ApolloGraphId, + credential: credential.cert({ + projectId: this.configService.getOrThrow('FIREBASE_ADMIN_PROJECT_ID'), + privateKey: this.configService.getOrThrow('FIREBASE_ADMIN_PRIVATE_KEY').replace(/\\n/g, '\n'), + clientEmail: this.configService.getOrThrow('FIREBASE_ADMIN_CLIENT_EMAIL'), + }), + storageBucket: this.configService.getOrThrow('FIREBASE_STORAGE_BUCKET'), }; } } diff --git a/src/config/environment/validator.ts b/src/config/environment/validator.ts index ae0e4c8..d954927 100644 --- a/src/config/environment/validator.ts +++ b/src/config/environment/validator.ts @@ -13,6 +13,36 @@ class EnvValidator { APOLLO_KEY: string; APOLLO_GRAPH_ID: string; + + @IsNotEmpty() + FIREBASE_ADMIN_PROJECT_ID: string; + + @IsNotEmpty() + FIREBASE_ADMIN_PRIVATE_KEY: string; + + @IsNotEmpty() + FIREBASE_ADMIN_CLIENT_EMAIL: string; + + @IsNotEmpty() + FIREBASE_API_KEY: string; + + @IsNotEmpty() + FIREBASE_AUTH_DOMAIN: string; + + @IsNotEmpty() + FIREBASE_PROJECT_ID: string; + + @IsNotEmpty() + FIREBASE_STORAGE_BUCKET: string; + + @IsNotEmpty() + FIREBASE_SENDER_ID: string; + + @IsNotEmpty() + FIREBASE_API_ID: string; + + @IsNotEmpty() + FIREBASE_MEASUREMENT_ID: string; } const validate = (config: Record) => { diff --git a/src/guards/auth.guard.ts b/src/guards/auth.guard.ts index 23698ad..4268bf2 100644 --- a/src/guards/auth.guard.ts +++ b/src/guards/auth.guard.ts @@ -1,17 +1,37 @@ import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common'; import { Observable } from 'rxjs'; +import FirebaseService from '../libs/firebase/firebase.service'; + +const validateAuthorization = async (firebase: FirebaseService, authorization: string | undefined, uid: string | undefined) => { + if (!(authorization && uid)) { + return false; + } + + const decodedToken = await firebase.adminAuth.verifyIdToken(authorization); + + return decodedToken.uid === uid; +}; @Injectable() export default class AuthGuard implements CanActivate { - // eslint-disable-next-line class-methods-use-this + constructor(private firebase: FirebaseService) {} + canActivate(context: ExecutionContext): boolean | Promise | Observable { let authorization: string | undefined; + let uid: string | undefined; context.getArgs().forEach((arg) => { - if (arg && arg.authorization) { - authorization = arg.authorization; + if (arg && arg.req && arg.req.headers) { + if (arg.req.headers.authorization) { + authorization = arg.req.headers.authorization; + } + if (arg.req.headers.uid) { + uid = arg.req.headers.uid; + } } }); - return !!authorization; + const isValid = validateAuthorization(this.firebase, authorization, uid); + + return isValid; } } diff --git a/src/libs/firebase/firebase.module.ts b/src/libs/firebase/firebase.module.ts new file mode 100644 index 0000000..7a9112b --- /dev/null +++ b/src/libs/firebase/firebase.module.ts @@ -0,0 +1,9 @@ +import { Global, Module } from '@nestjs/common'; +import FirebaseService from './firebase.service'; + +@Global() +@Module({ + providers: [FirebaseService], + exports: [FirebaseService], +}) +export default class FirebaseModule {} diff --git a/src/libs/firebase/firebase.service.ts b/src/libs/firebase/firebase.service.ts new file mode 100644 index 0000000..d6303d8 --- /dev/null +++ b/src/libs/firebase/firebase.service.ts @@ -0,0 +1,35 @@ +import { Injectable, OnModuleDestroy } from '@nestjs/common'; +import { + App, + initializeApp as initializeAdminApp, + getApp as getAdminApp, + getApps as getAdminApps, + deleteApp as deleteAdminApp, +} from 'firebase-admin/app'; +import { Auth as AdminAuth, getAuth as getAdminAuth } from 'firebase-admin/auth'; +import { FirebaseApp, initializeApp, getApp, getApps, deleteApp } from 'firebase/app'; +import { Auth, getAuth } from 'firebase/auth'; +import Env from '../../config/environment/getter/getter.service'; + +@Injectable() +export default class FirebaseService implements OnModuleDestroy { + private app: FirebaseApp; + + private adminApp: App; + + auth: Auth; + + adminAuth: AdminAuth; + + constructor(private env: Env) { + this.app = getApps().length ? getApp() : initializeApp(env.FirebaseConfig); + this.adminApp = getAdminApps().length ? getAdminApp() : initializeAdminApp(env.FirebaseAdminConfig); + this.auth = getAuth(this.app); + this.adminAuth = getAdminAuth(this.adminApp); + } + + async onModuleDestroy() { + await Promise.all(getApps().map((firebaseApp) => deleteApp(firebaseApp))); + await Promise.all(getAdminApps().map((firebaseAdminApp) => deleteAdminApp(firebaseAdminApp))); + } +} diff --git a/src/libs/prisma/generated/user/user-count-aggregate/input.ts b/src/libs/prisma/generated/user/user-count-aggregate/input.ts index b801a85..c2e7328 100644 --- a/src/libs/prisma/generated/user/user-count-aggregate/input.ts +++ b/src/libs/prisma/generated/user/user-count-aggregate/input.ts @@ -10,9 +10,6 @@ export class UserCountAggregateInput { @Field(() => Boolean, {nullable:true}) name?: true; - @Field(() => Boolean, {nullable:true}) - avatarURL?: true; - @Field(() => Boolean, {nullable:true}) createdAt?: true; diff --git a/src/libs/prisma/generated/user/user-count-aggregate/output.ts b/src/libs/prisma/generated/user/user-count-aggregate/output.ts index ef4c6bc..1a54787 100644 --- a/src/libs/prisma/generated/user/user-count-aggregate/output.ts +++ b/src/libs/prisma/generated/user/user-count-aggregate/output.ts @@ -11,9 +11,6 @@ export class UserCountAggregate { @Field(() => Int, {nullable:false}) name!: number; - @Field(() => Int, {nullable:false}) - avatarURL!: number; - @Field(() => Int, {nullable:false}) createdAt!: number; diff --git a/src/libs/prisma/generated/user/user-count-order-by-aggregate/input.ts b/src/libs/prisma/generated/user/user-count-order-by-aggregate/input.ts index 31b0de3..0046e39 100644 --- a/src/libs/prisma/generated/user/user-count-order-by-aggregate/input.ts +++ b/src/libs/prisma/generated/user/user-count-order-by-aggregate/input.ts @@ -11,9 +11,6 @@ export class UserCountOrderByAggregateInput { @Field(() => SortOrder, {nullable:true}) name?: keyof typeof SortOrder; - @Field(() => SortOrder, {nullable:true}) - avatarURL?: keyof typeof SortOrder; - @Field(() => SortOrder, {nullable:true}) createdAt?: keyof typeof SortOrder; } diff --git a/src/libs/prisma/generated/user/user-create-many/input.ts b/src/libs/prisma/generated/user/user-create-many/input.ts index ddc0487..64d47ee 100644 --- a/src/libs/prisma/generated/user/user-create-many/input.ts +++ b/src/libs/prisma/generated/user/user-create-many/input.ts @@ -4,14 +4,11 @@ import { InputType } from '@nestjs/graphql'; @InputType() export class UserCreateManyInput { - @Field(() => String, {nullable:true}) - id?: string; - @Field(() => String, {nullable:false}) - name!: string; + id!: string; @Field(() => String, {nullable:false}) - avatarURL!: string; + name!: string; @Field(() => Date, {nullable:true}) createdAt?: Date | string; diff --git a/src/libs/prisma/generated/user/user-create/input.ts b/src/libs/prisma/generated/user/user-create/input.ts index 18033fb..ba1e965 100644 --- a/src/libs/prisma/generated/user/user-create/input.ts +++ b/src/libs/prisma/generated/user/user-create/input.ts @@ -4,14 +4,11 @@ import { InputType } from '@nestjs/graphql'; @InputType() export class UserCreateInput { - @Field(() => String, {nullable:true}) - id?: string; - @Field(() => String, {nullable:false}) - name!: string; + id!: string; @Field(() => String, {nullable:false}) - avatarURL!: string; + name!: string; @Field(() => Date, {nullable:true}) createdAt?: Date | string; diff --git a/src/libs/prisma/generated/user/user-group-by/output.ts b/src/libs/prisma/generated/user/user-group-by/output.ts index 18587d9..e10628f 100644 --- a/src/libs/prisma/generated/user/user-group-by/output.ts +++ b/src/libs/prisma/generated/user/user-group-by/output.ts @@ -13,9 +13,6 @@ export class UserGroupBy { @Field(() => String, {nullable:false}) name!: string; - @Field(() => String, {nullable:false}) - avatarURL!: string; - @Field(() => Date, {nullable:false}) createdAt!: Date | string; diff --git a/src/libs/prisma/generated/user/user-max-aggregate/input.ts b/src/libs/prisma/generated/user/user-max-aggregate/input.ts index 4b39900..160b8ab 100644 --- a/src/libs/prisma/generated/user/user-max-aggregate/input.ts +++ b/src/libs/prisma/generated/user/user-max-aggregate/input.ts @@ -10,9 +10,6 @@ export class UserMaxAggregateInput { @Field(() => Boolean, {nullable:true}) name?: true; - @Field(() => Boolean, {nullable:true}) - avatarURL?: true; - @Field(() => Boolean, {nullable:true}) createdAt?: true; } diff --git a/src/libs/prisma/generated/user/user-max-aggregate/output.ts b/src/libs/prisma/generated/user/user-max-aggregate/output.ts index 8ec6311..9b204e3 100644 --- a/src/libs/prisma/generated/user/user-max-aggregate/output.ts +++ b/src/libs/prisma/generated/user/user-max-aggregate/output.ts @@ -10,9 +10,6 @@ export class UserMaxAggregate { @Field(() => String, {nullable:true}) name?: string; - @Field(() => String, {nullable:true}) - avatarURL?: string; - @Field(() => Date, {nullable:true}) createdAt?: Date | string; } diff --git a/src/libs/prisma/generated/user/user-max-order-by-aggregate/input.ts b/src/libs/prisma/generated/user/user-max-order-by-aggregate/input.ts index 3b1f9aa..615408c 100644 --- a/src/libs/prisma/generated/user/user-max-order-by-aggregate/input.ts +++ b/src/libs/prisma/generated/user/user-max-order-by-aggregate/input.ts @@ -11,9 +11,6 @@ export class UserMaxOrderByAggregateInput { @Field(() => SortOrder, {nullable:true}) name?: keyof typeof SortOrder; - @Field(() => SortOrder, {nullable:true}) - avatarURL?: keyof typeof SortOrder; - @Field(() => SortOrder, {nullable:true}) createdAt?: keyof typeof SortOrder; } diff --git a/src/libs/prisma/generated/user/user-min-aggregate/input.ts b/src/libs/prisma/generated/user/user-min-aggregate/input.ts index 15f7ec9..3fb0dc0 100644 --- a/src/libs/prisma/generated/user/user-min-aggregate/input.ts +++ b/src/libs/prisma/generated/user/user-min-aggregate/input.ts @@ -10,9 +10,6 @@ export class UserMinAggregateInput { @Field(() => Boolean, {nullable:true}) name?: true; - @Field(() => Boolean, {nullable:true}) - avatarURL?: true; - @Field(() => Boolean, {nullable:true}) createdAt?: true; } diff --git a/src/libs/prisma/generated/user/user-min-aggregate/output.ts b/src/libs/prisma/generated/user/user-min-aggregate/output.ts index f3db92e..aa23209 100644 --- a/src/libs/prisma/generated/user/user-min-aggregate/output.ts +++ b/src/libs/prisma/generated/user/user-min-aggregate/output.ts @@ -10,9 +10,6 @@ export class UserMinAggregate { @Field(() => String, {nullable:true}) name?: string; - @Field(() => String, {nullable:true}) - avatarURL?: string; - @Field(() => Date, {nullable:true}) createdAt?: Date | string; } diff --git a/src/libs/prisma/generated/user/user-min-order-by-aggregate/input.ts b/src/libs/prisma/generated/user/user-min-order-by-aggregate/input.ts index edcca7e..077359f 100644 --- a/src/libs/prisma/generated/user/user-min-order-by-aggregate/input.ts +++ b/src/libs/prisma/generated/user/user-min-order-by-aggregate/input.ts @@ -11,9 +11,6 @@ export class UserMinOrderByAggregateInput { @Field(() => SortOrder, {nullable:true}) name?: keyof typeof SortOrder; - @Field(() => SortOrder, {nullable:true}) - avatarURL?: keyof typeof SortOrder; - @Field(() => SortOrder, {nullable:true}) createdAt?: keyof typeof SortOrder; } diff --git a/src/libs/prisma/generated/user/user-order-by-with-aggregation/input.ts b/src/libs/prisma/generated/user/user-order-by-with-aggregation/input.ts index 174633a..d0c2fb1 100644 --- a/src/libs/prisma/generated/user/user-order-by-with-aggregation/input.ts +++ b/src/libs/prisma/generated/user/user-order-by-with-aggregation/input.ts @@ -14,9 +14,6 @@ export class UserOrderByWithAggregationInput { @Field(() => SortOrder, {nullable:true}) name?: keyof typeof SortOrder; - @Field(() => SortOrder, {nullable:true}) - avatarURL?: keyof typeof SortOrder; - @Field(() => SortOrder, {nullable:true}) createdAt?: keyof typeof SortOrder; diff --git a/src/libs/prisma/generated/user/user-order-by-with-relation/input.ts b/src/libs/prisma/generated/user/user-order-by-with-relation/input.ts index 8df0cbe..5c58284 100644 --- a/src/libs/prisma/generated/user/user-order-by-with-relation/input.ts +++ b/src/libs/prisma/generated/user/user-order-by-with-relation/input.ts @@ -11,9 +11,6 @@ export class UserOrderByWithRelationInput { @Field(() => SortOrder, {nullable:true}) name?: keyof typeof SortOrder; - @Field(() => SortOrder, {nullable:true}) - avatarURL?: keyof typeof SortOrder; - @Field(() => SortOrder, {nullable:true}) createdAt?: keyof typeof SortOrder; } diff --git a/src/libs/prisma/generated/user/user-scalar-field/enum.ts b/src/libs/prisma/generated/user/user-scalar-field/enum.ts index 9b8b7cc..147e53f 100644 --- a/src/libs/prisma/generated/user/user-scalar-field/enum.ts +++ b/src/libs/prisma/generated/user/user-scalar-field/enum.ts @@ -3,7 +3,6 @@ import { registerEnumType } from '@nestjs/graphql'; export enum UserScalarFieldEnum { id = "id", name = "name", - avatarURL = "avatarURL", createdAt = "createdAt" } diff --git a/src/libs/prisma/generated/user/user-scalar-where-with-aggregates/input.ts b/src/libs/prisma/generated/user/user-scalar-where-with-aggregates/input.ts index 6e6057f..41d0206 100644 --- a/src/libs/prisma/generated/user/user-scalar-where-with-aggregates/input.ts +++ b/src/libs/prisma/generated/user/user-scalar-where-with-aggregates/input.ts @@ -21,9 +21,6 @@ export class UserScalarWhereWithAggregatesInput { @Field(() => StringWithAggregatesFilter, {nullable:true}) name?: StringWithAggregatesFilter; - @Field(() => StringWithAggregatesFilter, {nullable:true}) - avatarURL?: StringWithAggregatesFilter; - @Field(() => DateTimeWithAggregatesFilter, {nullable:true}) createdAt?: DateTimeWithAggregatesFilter; } diff --git a/src/libs/prisma/generated/user/user-unchecked-create/input.ts b/src/libs/prisma/generated/user/user-unchecked-create/input.ts index 6402a45..91059bd 100644 --- a/src/libs/prisma/generated/user/user-unchecked-create/input.ts +++ b/src/libs/prisma/generated/user/user-unchecked-create/input.ts @@ -4,14 +4,11 @@ import { InputType } from '@nestjs/graphql'; @InputType() export class UserUncheckedCreateInput { - @Field(() => String, {nullable:true}) - id?: string; - @Field(() => String, {nullable:false}) - name!: string; + id!: string; @Field(() => String, {nullable:false}) - avatarURL!: string; + name!: string; @Field(() => Date, {nullable:true}) createdAt?: Date | string; diff --git a/src/libs/prisma/generated/user/user-unchecked-update-many/input.ts b/src/libs/prisma/generated/user/user-unchecked-update-many/input.ts index db82e4e..6175c82 100644 --- a/src/libs/prisma/generated/user/user-unchecked-update-many/input.ts +++ b/src/libs/prisma/generated/user/user-unchecked-update-many/input.ts @@ -12,9 +12,6 @@ export class UserUncheckedUpdateManyInput { @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) name?: StringFieldUpdateOperationsInput; - @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) - avatarURL?: StringFieldUpdateOperationsInput; - @Field(() => DateTimeFieldUpdateOperationsInput, {nullable:true}) createdAt?: DateTimeFieldUpdateOperationsInput; } diff --git a/src/libs/prisma/generated/user/user-unchecked-update/input.ts b/src/libs/prisma/generated/user/user-unchecked-update/input.ts index 5cf72b0..86e841b 100644 --- a/src/libs/prisma/generated/user/user-unchecked-update/input.ts +++ b/src/libs/prisma/generated/user/user-unchecked-update/input.ts @@ -12,9 +12,6 @@ export class UserUncheckedUpdateInput { @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) name?: StringFieldUpdateOperationsInput; - @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) - avatarURL?: StringFieldUpdateOperationsInput; - @Field(() => DateTimeFieldUpdateOperationsInput, {nullable:true}) createdAt?: DateTimeFieldUpdateOperationsInput; } diff --git a/src/libs/prisma/generated/user/user-update-many-mutation/input.ts b/src/libs/prisma/generated/user/user-update-many-mutation/input.ts index f50c336..9b96be0 100644 --- a/src/libs/prisma/generated/user/user-update-many-mutation/input.ts +++ b/src/libs/prisma/generated/user/user-update-many-mutation/input.ts @@ -12,9 +12,6 @@ export class UserUpdateManyMutationInput { @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) name?: StringFieldUpdateOperationsInput; - @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) - avatarURL?: StringFieldUpdateOperationsInput; - @Field(() => DateTimeFieldUpdateOperationsInput, {nullable:true}) createdAt?: DateTimeFieldUpdateOperationsInput; } diff --git a/src/libs/prisma/generated/user/user-update/input.ts b/src/libs/prisma/generated/user/user-update/input.ts index 73956f0..f504385 100644 --- a/src/libs/prisma/generated/user/user-update/input.ts +++ b/src/libs/prisma/generated/user/user-update/input.ts @@ -12,9 +12,6 @@ export class UserUpdateInput { @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) name?: StringFieldUpdateOperationsInput; - @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) - avatarURL?: StringFieldUpdateOperationsInput; - @Field(() => DateTimeFieldUpdateOperationsInput, {nullable:true}) createdAt?: DateTimeFieldUpdateOperationsInput; } diff --git a/src/libs/prisma/generated/user/user-where/input.ts b/src/libs/prisma/generated/user/user-where/input.ts index 40da39f..9d500f0 100644 --- a/src/libs/prisma/generated/user/user-where/input.ts +++ b/src/libs/prisma/generated/user/user-where/input.ts @@ -21,9 +21,6 @@ export class UserWhereInput { @Field(() => StringFilter, {nullable:true}) name?: StringFilter; - @Field(() => StringFilter, {nullable:true}) - avatarURL?: StringFilter; - @Field(() => DateTimeFilter, {nullable:true}) createdAt?: DateTimeFilter; } diff --git a/src/libs/prisma/generated/user/user/model.ts b/src/libs/prisma/generated/user/user/model.ts index 86c10fe..c41c19a 100644 --- a/src/libs/prisma/generated/user/user/model.ts +++ b/src/libs/prisma/generated/user/user/model.ts @@ -11,9 +11,6 @@ export class User { @Field(() => String, {nullable:false}) name!: string; - @Field(() => String, {nullable:false}) - avatarURL!: string; - @Field(() => Date, {nullable:false}) createdAt!: Date; } diff --git a/src/libs/prisma/migrations/20220616000446_init/migration.sql b/src/libs/prisma/migrations/20220618120939_init/migration.sql similarity index 86% rename from src/libs/prisma/migrations/20220616000446_init/migration.sql rename to src/libs/prisma/migrations/20220618120939_init/migration.sql index b80f0ba..4d1d697 100644 --- a/src/libs/prisma/migrations/20220616000446_init/migration.sql +++ b/src/libs/prisma/migrations/20220618120939_init/migration.sql @@ -2,7 +2,6 @@ CREATE TABLE "users" ( "id" TEXT NOT NULL, "name" TEXT NOT NULL, - "avatar_url" TEXT NOT NULL, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "users_pkey" PRIMARY KEY ("id") diff --git a/src/libs/prisma/schema.prisma b/src/libs/prisma/schema.prisma index dc06efa..3582d03 100644 --- a/src/libs/prisma/schema.prisma +++ b/src/libs/prisma/schema.prisma @@ -3,9 +3,13 @@ generator client { } generator nestgraphql { - provider = "prisma-nestjs-graphql" - output = "./generated" - outputFilePattern = "{model}/{name}/{type}.ts" + provider = "prisma-nestjs-graphql" + output = "./generated" + outputFilePattern = "{model}/{name}/{type}.ts" + noAtomicOperations = true + purgeOutput = true + noTypeId = true + requireSingleFieldsInWhereUniqueInput = ture } datasource db { @@ -14,9 +18,8 @@ datasource db { } model User { - id String @id @default(uuid()) + id String @id name String - avatarURL String @map("avatar_url") createdAt DateTime @default(now()) @map("created_at") @@map("users") diff --git a/test/app.e2e-spec.ts b/test/app.e2e-spec.ts index 3c177d5..f8a7812 100644 --- a/test/app.e2e-spec.ts +++ b/test/app.e2e-spec.ts @@ -1,34 +1,45 @@ -import { INestApplication } from '@nestjs/common'; +/* eslint-disable no-console */ +import { INestApplication, INestApplicationContext } from '@nestjs/common'; import { Test } from '@nestjs/testing'; +import { Auth as AdminAuth } from 'firebase-admin/auth'; +import { signInWithCustomToken, Auth } from 'firebase/auth'; import gql from 'graphql-tag'; import request from 'supertest-graphql'; import AppModule from '../src/app/app.module'; +import FirebaseModule from '../src/libs/firebase/firebase.module'; +import FirebaseService from '../src/libs/firebase/firebase.service'; -describe('e2e test', () => { +describe('E2E Test', () => { let app: INestApplication; + let firebaseModule: INestApplicationContext; + let auth: Auth; + let adminAuth: AdminAuth; beforeEach(async () => { - const moduleRef = await Test.createTestingModule({ + const appModuleRef = await Test.createTestingModule({ imports: [AppModule], }).compile(); - - app = moduleRef.createNestApplication(); + app = appModuleRef.createNestApplication(); await app.init(); + + firebaseModule = app.select(FirebaseModule); + auth = firebaseModule.get(FirebaseService).auth; + adminAuth = firebaseModule.get(FirebaseService).adminAuth; }); - afterAll(async () => { + afterEach(async () => { + await firebaseModule.close(); await app.close(); }); - test('should get all users', async () => { + test('findUsers', async () => { const { data, errors, response } = await request(app.getHttpServer()) .query( gql` - query GetAllUsers { - getAllUsers { + query FindUserById { + findUsers { id name - avatarURL createdAt } } @@ -37,7 +48,137 @@ describe('e2e test', () => { .expectNoErrors(); expect(response.status).toBe(200); - console.dir(data); - console.dir(errors); + console.log(data); + console.log(errors); + }); + + test('createUser, updateUser, deleteUser', async () => { + const testUserRecord = await adminAuth.createUser({ + displayName: 'e2e-test-user', + email: `e2e-test-user${Date.parse(Date())}@gmail.com`, + password: 'e2e-test-user', + }); + const testCustomToken = await adminAuth.createCustomToken(testUserRecord.uid); + const testUserCredential = await signInWithCustomToken(auth, testCustomToken); + const testUser = testUserCredential.user; + const testToken = await testUser.getIdToken(); + + const createdUser = await request(app.getHttpServer()) + .mutate( + gql` + mutation CreateUser($data: UserCreateInput!) { + createUser(data: $data) { + id + name + createdAt + } + } + `, + ) + .variables({ + data: { + id: testUser.uid, + name: testUser.displayName, + }, + }) + .set('authorization', testToken) + .set('uid', testUser.uid) + .expectNoErrors(); + + expect(createdUser.response.status).toBe(200); + console.log(createdUser.data); + console.log(createdUser.errors); + + const updatedUser = await request(app.getHttpServer()) + .mutate( + gql` + mutation UpdateUser($data: UserUpdateInput!, $where: UserWhereUniqueInput!) { + updateUser(data: $data, where: $where) { + id + name + createdAt + } + } + `, + ) + .variables({ + data: { + name: `updated ${testUser.displayName}`, + }, + where: { + id: testUser.uid, + }, + }) + .set('authorization', testToken) + .set('uid', testUser.uid) + .expectNoErrors(); + + expect(updatedUser.response.status).toBe(200); + console.log(updatedUser.data); + console.log(updatedUser.errors); + + const deletedUser = await request(app.getHttpServer()) + .mutate( + gql` + mutation DeleteUser($where: UserWhereUniqueInput!) { + deleteUser(where: $where) { + id + name + createdAt + } + } + `, + ) + .variables({ + where: { + id: testUser.uid, + }, + }) + .set('authorization', testToken) + .set('uid', testUser.uid) + .expectNoErrors(); + + expect(deletedUser.response.status).toBe(200); + console.log(deletedUser.data); + console.log(deletedUser.errors); + }); + + test('AuthGuard', async () => { + const testUserRecord = await adminAuth.createUser({ + displayName: 'e2e-test-user', + email: `e2e-test-user${Date.parse(Date())}@gmail.com`, + password: 'e2e-test-user', + }); + const testCustomToken = await adminAuth.createCustomToken(testUserRecord.uid); + const testUserCredential = await signInWithCustomToken(auth, testCustomToken); + const testUser = testUserCredential.user; + const testToken = await testUser.getIdToken(); + + const createdUser = await request(app.getHttpServer()) + .mutate( + gql` + mutation CreateUser($data: UserCreateInput!) { + createUser(data: $data) { + id + name + createdAt + } + } + `, + ) + .variables({ + data: { + id: 'invalid-fake-uid', + name: testUser.displayName, + }, + }) + .set('authorization', testToken) + .set('uid', 'invalid-fake-uid'); + + expect(createdUser.data).toEqual(null); + console.log(createdUser.data); + console.log(createdUser.errors); + + await adminAuth.deleteUser(testUser.uid); }); }); diff --git a/yarn.lock b/yarn.lock index 47185b6..c633dc5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -439,6 +439,434 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@fastify/busboy@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-1.1.0.tgz#4472f856e2bb5a9ee34ad64b93891b73b73537ca" + integrity sha512-Fv854f94v0CzIDllbY3i/0NJPNBRNLDawf3BTYVGCe9VrIIs3Wi7AFx24F9NzCxdf0wyx/x0Q9kEVnvDOPnlxA== + dependencies: + text-decoding "^1.0.0" + +"@firebase/analytics-compat@0.1.11": + version "0.1.11" + resolved "https://registry.yarnpkg.com/@firebase/analytics-compat/-/analytics-compat-0.1.11.tgz#0dd12c628e063bba2851b4da57fe67024c52ae2d" + integrity sha512-Jx5iXM3nlMa6utqGWNDtmdIztFhLCqMx2Iw809BbynhTSa3esF4e5RevCRk+5oDDfW11uLHckLpe6MhmINKIkA== + dependencies: + "@firebase/analytics" "0.7.10" + "@firebase/analytics-types" "0.7.0" + "@firebase/component" "0.5.15" + "@firebase/util" "1.6.1" + tslib "^2.1.0" + +"@firebase/analytics-types@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@firebase/analytics-types/-/analytics-types-0.7.0.tgz#91960e7c87ce8bf18cf8dd9e55ccbf5dc3989b5d" + integrity sha512-DNE2Waiwy5+zZnCfintkDtBfaW6MjIG883474v6Z0K1XZIvl76cLND4iv0YUb48leyF+PJK1KO2XrgHb/KpmhQ== + +"@firebase/analytics@0.7.10": + version "0.7.10" + resolved "https://registry.yarnpkg.com/@firebase/analytics/-/analytics-0.7.10.tgz#43223a6630a4d96ae3d24ef8303ba9384f939e02" + integrity sha512-efZ9jdzTW1/COE5gVdJVdplsltooKPH7M3XpSi/kDyegR1sC05C5NQaiBIYcaTyX2yf1OVcCfsWEcZFhhPTPGw== + dependencies: + "@firebase/component" "0.5.15" + "@firebase/installations" "0.5.10" + "@firebase/logger" "0.3.3" + "@firebase/util" "1.6.1" + tslib "^2.1.0" + +"@firebase/app-check-compat@0.2.9": + version "0.2.9" + resolved "https://registry.yarnpkg.com/@firebase/app-check-compat/-/app-check-compat-0.2.9.tgz#0a4656f14d49496b756cfc0a976136b7420893e0" + integrity sha512-DgHCcUR3vC3KrAQccs+cggTjNusF/oxPJmw1397H0jw5vWVu0oTtmIduyKB2GE0KDo0q0bHNPPR8GEVugjeFPg== + dependencies: + "@firebase/app-check" "0.5.9" + "@firebase/app-check-types" "0.4.0" + "@firebase/component" "0.5.15" + "@firebase/logger" "0.3.3" + "@firebase/util" "1.6.1" + tslib "^2.1.0" + +"@firebase/app-check-interop-types@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@firebase/app-check-interop-types/-/app-check-interop-types-0.1.0.tgz#83afd9d41f99166c2bdb2d824e5032e9edd8fe53" + integrity sha512-uZfn9s4uuRsaX5Lwx+gFP3B6YsyOKUE+Rqa6z9ojT4VSRAsZFko9FRn6OxQUA1z5t5d08fY4pf+/+Dkd5wbdbA== + +"@firebase/app-check-types@0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@firebase/app-check-types/-/app-check-types-0.4.0.tgz#7007a9d1d720db20bcf466fe6785c96feaa0a82d" + integrity sha512-SsWafqMABIOu7zLgWbmwvHGOeQQVQlwm42kwwubsmfLmL4Sf5uGpBfDhQ0CAkpi7bkJ/NwNFKafNDL9prRNP0Q== + +"@firebase/app-check@0.5.9": + version "0.5.9" + resolved "https://registry.yarnpkg.com/@firebase/app-check/-/app-check-0.5.9.tgz#79a78cf6f0cd362e4ae9a9ec89d7e47ace5776a6" + integrity sha512-IxOSpw4cL6fQD2AGLhXHxsdCjzQEYGyRwvS2vtguMxTYhRQ/EWXvej+P42cXf373vDrmAMKrnIUgC4P1yMPLSA== + dependencies: + "@firebase/component" "0.5.15" + "@firebase/logger" "0.3.3" + "@firebase/util" "1.6.1" + tslib "^2.1.0" + +"@firebase/app-compat@0.1.27": + version "0.1.27" + resolved "https://registry.yarnpkg.com/@firebase/app-compat/-/app-compat-0.1.27.tgz#9afed61a751d6b36d35a4d4a53291235308d997f" + integrity sha512-0A5ENP/KK0Eev94qPuxaclfOE0oA6hyCVQTdi0ox1bPm+VzGGD/jXP6Bzw+IUmy33ChjP/639bm6Myh8AG4PwA== + dependencies: + "@firebase/app" "0.7.26" + "@firebase/component" "0.5.15" + "@firebase/logger" "0.3.3" + "@firebase/util" "1.6.1" + tslib "^2.1.0" + +"@firebase/app-types@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@firebase/app-types/-/app-types-0.7.0.tgz#c9e16d1b8bed1a991840b8d2a725fb58d0b5899f" + integrity sha512-6fbHQwDv2jp/v6bXhBw2eSRbNBpxHcd1NBF864UksSMVIqIyri9qpJB1Mn6sGZE+bnDsSQBC5j2TbMxYsJQkQg== + +"@firebase/app@0.7.26": + version "0.7.26" + resolved "https://registry.yarnpkg.com/@firebase/app/-/app-0.7.26.tgz#56ce15a52d67000c5c44355a8ec5b0ad697a908c" + integrity sha512-FmJ4uaUyazmOZZWJO9OviKfnw+lrwMPQbWBMutymSQT8Gx783Ddnhs5IdmfV0NeLrlGy4ZwfP6/+RJyy2wGDXw== + dependencies: + "@firebase/component" "0.5.15" + "@firebase/logger" "0.3.3" + "@firebase/util" "1.6.1" + idb "7.0.1" + tslib "^2.1.0" + +"@firebase/auth-compat@0.2.16": + version "0.2.16" + resolved "https://registry.yarnpkg.com/@firebase/auth-compat/-/auth-compat-0.2.16.tgz#fc2ae89e01891c54ca2f37d618103b77a409ff80" + integrity sha512-wwyuBwtCXwygr1Vyr7M4v8iD1eGRUEGM0XNGG2BQkFnlF7rkwpGsmgiiSkaA8kFYibNSTx2TkdBNfvJXzYPL6A== + dependencies: + "@firebase/auth" "0.20.3" + "@firebase/auth-types" "0.11.0" + "@firebase/component" "0.5.15" + "@firebase/util" "1.6.1" + node-fetch "2.6.7" + selenium-webdriver "4.1.2" + tslib "^2.1.0" + +"@firebase/auth-interop-types@0.1.6": + version "0.1.6" + resolved "https://registry.yarnpkg.com/@firebase/auth-interop-types/-/auth-interop-types-0.1.6.tgz#5ce13fc1c527ad36f1bb1322c4492680a6cf4964" + integrity sha512-etIi92fW3CctsmR9e3sYM3Uqnoq861M0Id9mdOPF6PWIg38BXL5k4upCNBggGUpLIS0H1grMOvy/wn1xymwe2g== + +"@firebase/auth-types@0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@firebase/auth-types/-/auth-types-0.11.0.tgz#b9c73c60ca07945b3bbd7a097633e5f78fa9e886" + integrity sha512-q7Bt6cx+ySj9elQHTsKulwk3+qDezhzRBFC9zlQ1BjgMueUOnGMcvqmU0zuKlQ4RhLSH7MNAdBV2znVaoN3Vxw== + +"@firebase/auth@0.20.3": + version "0.20.3" + resolved "https://registry.yarnpkg.com/@firebase/auth/-/auth-0.20.3.tgz#a0c6bb3eb2624b26e5a58c29a4a6c11afd61ba6c" + integrity sha512-iElaZvVxxW2WAAmmqwTkdPBdixdI2TpURACwNn0G4XpuxlNeF3hYK1nDla2Oa/r39QGtlb9FChTTBby4Uu/Flw== + dependencies: + "@firebase/component" "0.5.15" + "@firebase/logger" "0.3.3" + "@firebase/util" "1.6.1" + node-fetch "2.6.7" + selenium-webdriver "4.1.2" + tslib "^2.1.0" + +"@firebase/component@0.5.15": + version "0.5.15" + resolved "https://registry.yarnpkg.com/@firebase/component/-/component-0.5.15.tgz#5ceaf3c3f2e495a5ac65b2b41354ca6d44e33f88" + integrity sha512-VRnZxmvtJmXupTPg37LxM0zdyMN54EXkmsFD4x5Bm4eZUay9VGnhfiGnE3m9Af/2hnURA2idIBN/23L6982iPQ== + dependencies: + "@firebase/util" "1.6.1" + tslib "^2.1.0" + +"@firebase/database-compat@0.2.1", "@firebase/database-compat@^0.2.0": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@firebase/database-compat/-/database-compat-0.2.1.tgz#0cea97206679c03009b8662c146cf7399cbed0db" + integrity sha512-xpru5ZtO7um2FmfIw4gCAbkWpyOEwxzamU/5phuwze3ZihMdh+UrDrwrhvfqzQ/KIKXsK76Uyx5F3NCAS8+5eg== + dependencies: + "@firebase/component" "0.5.15" + "@firebase/database" "0.13.1" + "@firebase/database-types" "0.9.9" + "@firebase/logger" "0.3.3" + "@firebase/util" "1.6.1" + tslib "^2.1.0" + +"@firebase/database-types@0.9.9", "@firebase/database-types@^0.9.7": + version "0.9.9" + resolved "https://registry.yarnpkg.com/@firebase/database-types/-/database-types-0.9.9.tgz#73fe21acb278555478e0a71a64b066147e998711" + integrity sha512-Zp86fHzQFZKYVM7yDWVAgVTeOJ39g2wT0ijeiN0jpHAHceeoV013q3jPIIGuooV2HMwWOTIBZGqh+DxrHMFyUw== + dependencies: + "@firebase/app-types" "0.7.0" + "@firebase/util" "1.6.1" + +"@firebase/database@0.13.1": + version "0.13.1" + resolved "https://registry.yarnpkg.com/@firebase/database/-/database-0.13.1.tgz#2ef40f961d36ae7c1030805385035df576c06116" + integrity sha512-k6PeAzf9x9DG3AJtA6SkJsTD1ivOWvrV71VPOYabBch05QDB0HOYs1EauGhzqa6GOcYz+ncb4pNEkgFDvcnEfQ== + dependencies: + "@firebase/auth-interop-types" "0.1.6" + "@firebase/component" "0.5.15" + "@firebase/logger" "0.3.3" + "@firebase/util" "1.6.1" + faye-websocket "0.11.4" + tslib "^2.1.0" + +"@firebase/firestore-compat@0.1.19": + version "0.1.19" + resolved "https://registry.yarnpkg.com/@firebase/firestore-compat/-/firestore-compat-0.1.19.tgz#51ff1718dfaf6abf4029e62010b26ddf07c0c420" + integrity sha512-fE3anYxNvX50zILPdGZaJBFcK3NPOHzZR7lLupFBsmd0YFtFT4E89p0QQ3A/oZK9/74jNuvjZoJ8hamknPkZHQ== + dependencies: + "@firebase/component" "0.5.15" + "@firebase/firestore" "3.4.10" + "@firebase/firestore-types" "2.5.0" + "@firebase/util" "1.6.1" + tslib "^2.1.0" + +"@firebase/firestore-types@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@firebase/firestore-types/-/firestore-types-2.5.0.tgz#16fca40b6980fdb000de86042d7a96635f2bcdd7" + integrity sha512-I6c2m1zUhZ5SH0cWPmINabDyH5w0PPFHk2UHsjBpKdZllzJZ2TwTkXbDtpHUZNmnc/zAa0WNMNMvcvbb/xJLKA== + +"@firebase/firestore@3.4.10": + version "3.4.10" + resolved "https://registry.yarnpkg.com/@firebase/firestore/-/firestore-3.4.10.tgz#3e74a9224684d0f6d8012803cd6678f3c25afa1f" + integrity sha512-QUW9B7U8G0zbontuEPCJaoD320AZPOM4skV+Jd+WJIUUrmg/pLCW68Tt9ycg6zQ+1WdJtzaOU35NPJS7VIP8Ug== + dependencies: + "@firebase/component" "0.5.15" + "@firebase/logger" "0.3.3" + "@firebase/util" "1.6.1" + "@firebase/webchannel-wrapper" "0.6.2" + "@grpc/grpc-js" "^1.3.2" + "@grpc/proto-loader" "^0.6.0" + node-fetch "2.6.7" + tslib "^2.1.0" + +"@firebase/functions-compat@0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@firebase/functions-compat/-/functions-compat-0.2.2.tgz#539505a22624e52faf3d3f6d7f2a6b79973af37e" + integrity sha512-CeAoQDVrrqjc6q0prgyO3mEDDQM84vSH09sNRRMxd9kTjZtKZD4DXf+BKfULSvMAK9mgmL70LBz8RsrcXs6YXg== + dependencies: + "@firebase/component" "0.5.15" + "@firebase/functions" "0.8.2" + "@firebase/functions-types" "0.5.0" + "@firebase/util" "1.6.1" + tslib "^2.1.0" + +"@firebase/functions-types@0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@firebase/functions-types/-/functions-types-0.5.0.tgz#b50ba95ccce9e96f7cda453228ffe1684645625b" + integrity sha512-qza0M5EwX+Ocrl1cYI14zoipUX4gI/Shwqv0C1nB864INAD42Dgv4v94BCyxGHBg2kzlWy8PNafdP7zPO8aJQA== + +"@firebase/functions@0.8.2": + version "0.8.2" + resolved "https://registry.yarnpkg.com/@firebase/functions/-/functions-0.8.2.tgz#0ff9ef01f45778fb6cfb75d010099dca7b6b3d13" + integrity sha512-w2ng6vodOYj7Xo/J3h0SN6NfpRzId00DOKZDvGylH+LoQPFBshHJmv2mpM5ljEntxWvtv3aGrjD6YvgKr9JUJA== + dependencies: + "@firebase/app-check-interop-types" "0.1.0" + "@firebase/auth-interop-types" "0.1.6" + "@firebase/component" "0.5.15" + "@firebase/messaging-interop-types" "0.1.0" + "@firebase/util" "1.6.1" + node-fetch "2.6.7" + tslib "^2.1.0" + +"@firebase/installations@0.5.10": + version "0.5.10" + resolved "https://registry.yarnpkg.com/@firebase/installations/-/installations-0.5.10.tgz#f189ee9c47948b52e1008ee861734a0598659539" + integrity sha512-lTnYmtGPXwLqjiqvS4KH/V9a3vtZYWBU3Lsx+iOndFkzEyEANQ4qwUgZsP94qWRFd1WumcgDqhFmoVeYkDQCew== + dependencies: + "@firebase/component" "0.5.15" + "@firebase/util" "1.6.1" + idb "7.0.1" + tslib "^2.1.0" + +"@firebase/logger@0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@firebase/logger/-/logger-0.3.3.tgz#0f724b1e0b166d17ac285aac5c8ec14d136beed4" + integrity sha512-POTJl07jOKTOevLXrTvJD/VZ0M6PnJXflbAh5J9VGkmtXPXNG6MdZ9fmRgqYhXKTaDId6AQenQ262uwgpdtO0Q== + dependencies: + tslib "^2.1.0" + +"@firebase/messaging-compat@0.1.14": + version "0.1.14" + resolved "https://registry.yarnpkg.com/@firebase/messaging-compat/-/messaging-compat-0.1.14.tgz#c622c5d8a661dd3b6bc0b4395c879ed46a99a1d7" + integrity sha512-XNF5+TxhbFa5nAmkf/PbbNFfmiTcyBfjIl322Me6ZYK4leC8+O9beR7w0wWei8+GhUSIHn3D69ZZRewUUkXukA== + dependencies: + "@firebase/component" "0.5.15" + "@firebase/messaging" "0.9.14" + "@firebase/util" "1.6.1" + tslib "^2.1.0" + +"@firebase/messaging-interop-types@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@firebase/messaging-interop-types/-/messaging-interop-types-0.1.0.tgz#bdac02dd31edd5cb9eec37b1db698ea5e2c1a631" + integrity sha512-DbvUl/rXAZpQeKBnwz0NYY5OCqr2nFA0Bj28Fmr3NXGqR4PAkfTOHuQlVtLO1Nudo3q0HxAYLa68ZDAcuv2uKQ== + +"@firebase/messaging@0.9.14": + version "0.9.14" + resolved "https://registry.yarnpkg.com/@firebase/messaging/-/messaging-0.9.14.tgz#3855bdef3eceda90f07edd15e1ae302cbcaa4631" + integrity sha512-TrSDdZT/wI94m+kay4ibYDUsBiSkijU71zWhSXPJRGSUNuq8EP0ecs2eu01Kipb6ghl5YUiFFL/uY5Y6WK/I5A== + dependencies: + "@firebase/component" "0.5.15" + "@firebase/installations" "0.5.10" + "@firebase/messaging-interop-types" "0.1.0" + "@firebase/util" "1.6.1" + idb "7.0.1" + tslib "^2.1.0" + +"@firebase/performance-compat@0.1.10": + version "0.1.10" + resolved "https://registry.yarnpkg.com/@firebase/performance-compat/-/performance-compat-0.1.10.tgz#21560a3fe037f82ea6b1facf37e41c875de24797" + integrity sha512-WhY2pjpXHiyRfnk9t3/BKGK/C0u4pC61mEYh8t8MLayz8KwuiavJj1wuCN2nG2R0y8CXZAsifFLQs1h0K3XzDA== + dependencies: + "@firebase/component" "0.5.15" + "@firebase/logger" "0.3.3" + "@firebase/performance" "0.5.10" + "@firebase/performance-types" "0.1.0" + "@firebase/util" "1.6.1" + tslib "^2.1.0" + +"@firebase/performance-types@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@firebase/performance-types/-/performance-types-0.1.0.tgz#5e6efa9dc81860aee2cb7121b39ae8fa137e69fc" + integrity sha512-6p1HxrH0mpx+622Ql6fcxFxfkYSBpE3LSuwM7iTtYU2nw91Hj6THC8Bc8z4nboIq7WvgsT/kOTYVVZzCSlXl8w== + +"@firebase/performance@0.5.10": + version "0.5.10" + resolved "https://registry.yarnpkg.com/@firebase/performance/-/performance-0.5.10.tgz#cade908333b6ba51fbf5333dc17995976db56d26" + integrity sha512-rX+OsVMc6IIkrZqFmIjvEfRuRJ84ftPJDDpnqZ134pqTPr3MQgRzU/gPgLio8EdUN5YCthWyA8nB8NrEzBysSA== + dependencies: + "@firebase/component" "0.5.15" + "@firebase/installations" "0.5.10" + "@firebase/logger" "0.3.3" + "@firebase/util" "1.6.1" + tslib "^2.1.0" + +"@firebase/polyfill@0.3.36": + version "0.3.36" + resolved "https://registry.yarnpkg.com/@firebase/polyfill/-/polyfill-0.3.36.tgz#c057cce6748170f36966b555749472b25efdb145" + integrity sha512-zMM9oSJgY6cT2jx3Ce9LYqb0eIpDE52meIzd/oe/y70F+v9u1LDqk5kUF5mf16zovGBWMNFmgzlsh6Wj0OsFtg== + dependencies: + core-js "3.6.5" + promise-polyfill "8.1.3" + whatwg-fetch "2.0.4" + +"@firebase/remote-config-compat@0.1.10": + version "0.1.10" + resolved "https://registry.yarnpkg.com/@firebase/remote-config-compat/-/remote-config-compat-0.1.10.tgz#476faa6acf8f70a1b2331d9268c217a1129c2a3e" + integrity sha512-FSZg9JqgnYIDV78J74W6JUANGjrzCgTRKHioBifONo3e2CdEqQKrvIuGCXEE9+9vYyuqNEtmv5DUIPC4n6XYCQ== + dependencies: + "@firebase/component" "0.5.15" + "@firebase/logger" "0.3.3" + "@firebase/remote-config" "0.3.9" + "@firebase/remote-config-types" "0.2.0" + "@firebase/util" "1.6.1" + tslib "^2.1.0" + +"@firebase/remote-config-types@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@firebase/remote-config-types/-/remote-config-types-0.2.0.tgz#1e2759fc01f20b58c564db42196f075844c3d1fd" + integrity sha512-hqK5sCPeZvcHQ1D6VjJZdW6EexLTXNMJfPdTwbD8NrXUw6UjWC4KWhLK/TSlL0QPsQtcKRkaaoP+9QCgKfMFPw== + +"@firebase/remote-config@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@firebase/remote-config/-/remote-config-0.3.9.tgz#2e08a21669dfa4816b4b304ec51c41681e00002b" + integrity sha512-SQ7tArNyI3sPlbmyAB3X2rS8lHcVlPWIQPRLCmgpKjPKM6Jsv7onCUK+M23DW95iEjK4vEVU5QkxUP3fUXWkxg== + dependencies: + "@firebase/component" "0.5.15" + "@firebase/installations" "0.5.10" + "@firebase/logger" "0.3.3" + "@firebase/util" "1.6.1" + tslib "^2.1.0" + +"@firebase/storage-compat@0.1.15": + version "0.1.15" + resolved "https://registry.yarnpkg.com/@firebase/storage-compat/-/storage-compat-0.1.15.tgz#55994b60ccb1a0db39abb0c558665251c17a4298" + integrity sha512-XjqAYIc8oJv6OAeeLdCUC3KF0wXAzRoBGktRhPMc9umSxVE7Dnr960kF6qtdAbLFGi/uhj478AdpKSQgZ75rQA== + dependencies: + "@firebase/component" "0.5.15" + "@firebase/storage" "0.9.7" + "@firebase/storage-types" "0.6.0" + "@firebase/util" "1.6.1" + tslib "^2.1.0" + +"@firebase/storage-types@0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@firebase/storage-types/-/storage-types-0.6.0.tgz#0b1af64a2965af46fca138e5b70700e9b7e6312a" + integrity sha512-1LpWhcCb1ftpkP/akhzjzeFxgVefs6eMD2QeKiJJUGH1qOiows2w5o0sKCUSQrvrRQS1lz3SFGvNR1Ck/gqxeA== + +"@firebase/storage@0.9.7": + version "0.9.7" + resolved "https://registry.yarnpkg.com/@firebase/storage/-/storage-0.9.7.tgz#2c0b698b29d99aeb6e33906bb949caad67376f5c" + integrity sha512-0unWzgx5bceyO3SX/ilHaxwwHidN5sXZGakFLjAn8cbpjVpmybcKaLOduBxlMXeDCdUFfO8FcvEajFkV+0t2hA== + dependencies: + "@firebase/component" "0.5.15" + "@firebase/util" "1.6.1" + node-fetch "2.6.7" + tslib "^2.1.0" + +"@firebase/util@1.6.1": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@firebase/util/-/util-1.6.1.tgz#203e7e5f95d91b42b042e9d9e21472ad2bfcdb44" + integrity sha512-+eDE6uG5GgvXYHbAzfP1mpJUX1VDBD+A8CjBeBoNAKAVAApMSDxDODqRcOq7NW7kFJXSUkMzDJWhnUIifX2R8w== + dependencies: + tslib "^2.1.0" + +"@firebase/webchannel-wrapper@0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.6.2.tgz#6d05fa126104c9907573364dc04147b89b530e15" + integrity sha512-zThUKcqIU6utWzM93uEvhlh8qj8A5LMPFJPvk/ODb+8GSSif19xM2Lw1M2ijyBy8+6skSkQBbavPzOU5Oh/8tQ== + +"@google-cloud/firestore@^5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@google-cloud/firestore/-/firestore-5.0.2.tgz#36923fde45987f928a220d347f341c5602f9e340" + integrity sha512-xlGcNYaW0nvUMzNn2+pLfbEBVt6oysVqtM89faMgZWkWfEtvIQGS0h5PRdLlcqufNzRCX3yIGv29Pb+03ys+VA== + dependencies: + fast-deep-equal "^3.1.1" + functional-red-black-tree "^1.0.1" + google-gax "^2.24.1" + protobufjs "^6.8.6" + +"@google-cloud/paginator@^3.0.7": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@google-cloud/paginator/-/paginator-3.0.7.tgz#fb6f8e24ec841f99defaebf62c75c2e744dd419b" + integrity sha512-jJNutk0arIQhmpUUQJPJErsojqo834KcyB6X7a1mxuic8i1tKXxde8E69IZxNZawRIlZdIK2QY4WALvlK5MzYQ== + dependencies: + arrify "^2.0.0" + extend "^3.0.2" + +"@google-cloud/projectify@^2.0.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@google-cloud/projectify/-/projectify-2.1.1.tgz#ae6af4fee02d78d044ae434699a630f8df0084ef" + integrity sha512-+rssMZHnlh0twl122gXY4/aCrk0G1acBqkHFfYddtsqpYXGxA29nj9V5V9SfC+GyOG00l650f6lG9KL+EpFEWQ== + +"@google-cloud/promisify@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@google-cloud/promisify/-/promisify-3.0.0.tgz#5cd6941fc30c4acac18051706aa5af96069bd3e3" + integrity sha512-91ArYvRgXWb73YvEOBMmOcJc0bDRs5yiVHnqkwoG0f3nm7nZuipllz6e7BvFESBvjkDTBC0zMD8QxedUwNLc1A== + +"@google-cloud/storage@^6.1.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@google-cloud/storage/-/storage-6.1.0.tgz#f882a969c5637ff445764d7b172f68fd0d9e63f8" + integrity sha512-zqZwzpRWCJuPne7x9Vc2H79zANl0uh9bNPGis0xAuC88ZEvBXfQqYCAVyiL1YIxi7rf51l8wy9vBr1pONMfxxA== + dependencies: + "@google-cloud/paginator" "^3.0.7" + "@google-cloud/projectify" "^2.0.0" + "@google-cloud/promisify" "^3.0.0" + abort-controller "^3.0.0" + arrify "^2.0.0" + async-retry "^1.3.3" + compressible "^2.0.12" + duplexify "^4.0.0" + ent "^2.2.0" + extend "^3.0.2" + gaxios "^5.0.0" + google-auth-library "^8.0.1" + mime "^3.0.0" + mime-types "^2.0.8" + p-limit "^3.0.1" + pumpify "^2.0.0" + retry-request "^5.0.0" + stream-events "^1.0.4" + teeny-request "^8.0.0" + uuid "^8.0.0" + "@graphql-tools/merge@8.2.13": version "8.2.13" resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-8.2.13.tgz#d4f254dcea301ce3d9c23b03eb68a7ae9baf6981" @@ -499,6 +927,25 @@ dependencies: tslib "^2.4.0" +"@grpc/grpc-js@^1.3.2", "@grpc/grpc-js@~1.6.0": + version "1.6.7" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.6.7.tgz#4c4fa998ff719fe859ac19fe977fdef097bb99aa" + integrity sha512-eBM03pu9hd3VqDQG+kHahiG1x80RGkkqqRb1Pchcwqej/KkAH95gAvKs6laqaHCycYaPK+TKuNQnOz9UXYA8qw== + dependencies: + "@grpc/proto-loader" "^0.6.4" + "@types/node" ">=12.12.47" + +"@grpc/proto-loader@^0.6.0", "@grpc/proto-loader@^0.6.12", "@grpc/proto-loader@^0.6.4": + version "0.6.13" + resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.6.13.tgz#008f989b72a40c60c96cd4088522f09b05ac66bc" + integrity sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g== + dependencies: + "@types/long" "^4.0.1" + lodash.camelcase "^4.3.0" + long "^4.0.0" + protobufjs "^6.11.3" + yargs "^16.2.0" + "@humanwhocodes/config-array@^0.9.2": version "0.9.5" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7" @@ -937,6 +1384,11 @@ consola "^2.15.0" node-fetch "^2.6.1" +"@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== + "@prisma/client@^3.15.1": version "3.15.2" resolved "https://registry.yarnpkg.com/@prisma/client/-/client-3.15.2.tgz#2181398147afc79bfe0d83c03a88dc45b49bd365" @@ -1045,6 +1497,11 @@ dependencies: "@sinonjs/commons" "^1.7.0" +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + "@ts-morph/common@~0.16.0": version "0.16.0" resolved "https://registry.yarnpkg.com/@ts-morph/common/-/common-0.16.0.tgz#57e27d4b3fd65a4cd72cb36679ed08acb40fa3ba" @@ -1184,7 +1641,7 @@ "@types/qs" "*" "@types/range-parser" "*" -"@types/express@4.17.13": +"@types/express@4.17.13", "@types/express@^4.17.13": version "4.17.13" resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034" integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== @@ -1221,12 +1678,12 @@ "@types/istanbul-lib-report" "*" "@types/jest@^28.1.1": - version "28.1.1" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-28.1.1.tgz#8c9ba63702a11f8c386ee211280e8b68cb093cd1" - integrity sha512-C2p7yqleUKtCkVjlOur9BWVA4HgUQmEj/HWCt5WzZ5mLXrWnyIfl0wGuArc+kBXsy0ZZfLp+7dywB4HtSVYGVA== + version "28.1.2" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-28.1.2.tgz#c678569bb2d8e5474dd88f0851613611aeed9809" + integrity sha512-5dNM7mMuIrCtNJsFfvUO/5xCrG8swuT2c7ND+sl3XwlwxJf3k7e7o+PRvcFN/iIm8XhCqHqxLOj9yutDDOJoRg== dependencies: - jest-matcher-utils "^27.0.0" - pretty-format "^27.0.0" + jest-matcher-utils "^28.0.0" + pretty-format "^28.0.0" "@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.11" @@ -1238,7 +1695,14 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/long@^4.0.0": +"@types/jsonwebtoken@^8.5.8": + version "8.5.8" + resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-8.5.8.tgz#01b39711eb844777b7af1d1f2b4cf22fda1c0c44" + integrity sha512-zm6xBQpFDIDM6o9r6HSgDeIcLy82TKWctCXEPbJJcXb5AKmi5BNNdLXneixK4lplX3PqIVcwLBCGE/kAGnlD4A== + dependencies: + "@types/node" "*" + +"@types/long@^4.0.0", "@types/long@^4.0.1": version "4.0.2" resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== @@ -1253,7 +1717,7 @@ resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== -"@types/node@*": +"@types/node@*", "@types/node@>=12.12.47", "@types/node@>=13.7.0", "@types/node@^18.0.0": version "18.0.0" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.0.tgz#67c7b724e1bcdd7a8821ce0d5ee184d3b4dd525a" integrity sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA== @@ -1263,11 +1727,6 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== -"@types/node@^17.0.42": - version "17.0.45" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" - integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== - "@types/parse-json@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" @@ -1544,6 +2003,13 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + accepts@^1.3.5, accepts@~1.3.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -1572,6 +2038,13 @@ acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== +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" + ajv-formats@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" @@ -1800,12 +2273,17 @@ array.prototype.flat@^1.2.5: es-abstract "^1.19.2" es-shim-unscopables "^1.0.0" +arrify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + asap@^2.0.0: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== -async-retry@^1.2.1: +async-retry@^1.2.1, async-retry@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== @@ -1916,11 +2394,16 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base64-js@^1.3.1: +base64-js@^1.3.0, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== +bignumber.js@^9.0.0: + version "9.0.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.2.tgz#71c6c6bed38de64e24a65ebe16cfcf23ae693673" + integrity sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw== + binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" @@ -2009,6 +2492,11 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" +buffer-equal-constant-time@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== + buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" @@ -2248,6 +2736,13 @@ component-emitter@^1.3.0: resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== +compressible@^2.0.12: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -2314,6 +2809,11 @@ cookiejar@^2.1.3: resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.3.tgz#fc7a6216e408e74414b90230050842dacda75acc" integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ== +core-js@3.6.5: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" + integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== + core-util-is@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" @@ -2364,7 +2864,7 @@ debug@2.6.9, debug@^2.6.9: dependencies: ms "2.0.0" -debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: +debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -2446,11 +2946,6 @@ dezalgo@1.0.3: asap "^2.0.0" wrappy "1" -diff-sequences@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" - integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== - diff-sequences@^28.1.1: version "28.1.1" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-28.1.1.tgz#9989dc731266dc2903457a70e996f3a041913ac6" @@ -2492,6 +2987,16 @@ dotenv@16.0.1: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.1.tgz#8f8f9d94876c35dac989876a5d3a82a267fdce1d" integrity sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ== +duplexify@^4.0.0, duplexify@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.2.tgz#18b4f8d28289132fa0b9573c898d9f903f81c7b0" + integrity sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw== + dependencies: + end-of-stream "^1.4.1" + inherits "^2.0.3" + readable-stream "^3.1.1" + stream-shift "^1.0.0" + easy-table@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/easy-table/-/easy-table-1.1.0.tgz#86f9ab4c102f0371b7297b92a651d5824bc8cb73" @@ -2499,15 +3004,22 @@ easy-table@1.1.0: optionalDependencies: wcwidth ">=1.0.1" +ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + dependencies: + safe-buffer "^5.0.1" + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.4.147: - version "1.4.158" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.158.tgz#abbdaaf64676bfa4bc0307522125db34424a0ada" - integrity sha512-gppO3/+Y6sP432HtvwvuU8S+YYYLH4PmAYvQwqUtt9HDOmEsBwQfLnK9T8+1NIKwAS1BEygIjTaATC4H5EzvxQ== + version "1.4.160" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.160.tgz#da54e24fddeaca52f37965c7bec1bd964c97d487" + integrity sha512-O1Z12YfyeX2LXYO7MdHIPazGXzLzQnr1ADW55U2ARQsJBPgfpJz3u+g3Mo2l1wSyfOCdiGqaX9qtV4XKZ0HNRA== emittery@^0.10.2: version "0.10.2" @@ -2524,7 +3036,7 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -end-of-stream@^1.1.0: +end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -2539,6 +3051,11 @@ enhanced-resolve@^5.7.0, enhanced-resolve@^5.9.3: graceful-fs "^4.2.4" tapable "^2.2.0" +ent@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" + integrity sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA== + error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -2805,6 +3322,11 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + eventemitter3@^3.1.0: version "3.1.2" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" @@ -2898,6 +3420,11 @@ express@4.18.1, express@^4.18.1: utils-merge "1.0.1" vary "~1.1.2" +extend@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + external-editor@^3.0.3: version "3.1.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" @@ -2943,6 +3470,11 @@ fast-safe-stringify@2.1.1, fast-safe-stringify@^2.1.1: resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== +fast-text-encoding@^1.0.0, fast-text-encoding@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz#ec02ac8e01ab8a319af182dae2681213cfe9ce53" + integrity sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig== + fastq@^1.6.0: version "1.13.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" @@ -2950,6 +3482,13 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +faye-websocket@0.11.4: + version "0.11.4" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== + dependencies: + websocket-driver ">=0.5.1" + fb-watchman@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" @@ -3020,6 +3559,55 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" +firebase-admin@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/firebase-admin/-/firebase-admin-11.0.0.tgz#b10355cd9b142cf305fcb7842b51f918d3745a11" + integrity sha512-x56u+Q1P8QDvQKaYRe29ZUM/3f829cP8tsKCDXOhaIX/GbGfgcdjRhPmCafzlwgCWP5wW9NkOgIhnrw94zucvw== + dependencies: + "@fastify/busboy" "^1.1.0" + "@firebase/database-compat" "^0.2.0" + "@firebase/database-types" "^0.9.7" + "@types/node" ">=12.12.47" + jsonwebtoken "^8.5.1" + jwks-rsa "^2.0.2" + node-forge "^1.3.1" + uuid "^8.3.2" + optionalDependencies: + "@google-cloud/firestore" "^5.0.2" + "@google-cloud/storage" "^6.1.0" + +firebase@^9.8.3: + version "9.8.3" + resolved "https://registry.yarnpkg.com/firebase/-/firebase-9.8.3.tgz#63e5664ad4d5740c8db00702fb9b948665f65cbf" + integrity sha512-PCThy5cFXnbiUtFPJ9vVdcG7wKibOKNR+iuNXf+54xMGJzYb+rM2P8GUqtr2fhVQkfs42uJ6gGKG4soNGkP64w== + dependencies: + "@firebase/analytics" "0.7.10" + "@firebase/analytics-compat" "0.1.11" + "@firebase/app" "0.7.26" + "@firebase/app-check" "0.5.9" + "@firebase/app-check-compat" "0.2.9" + "@firebase/app-compat" "0.1.27" + "@firebase/app-types" "0.7.0" + "@firebase/auth" "0.20.3" + "@firebase/auth-compat" "0.2.16" + "@firebase/database" "0.13.1" + "@firebase/database-compat" "0.2.1" + "@firebase/firestore" "3.4.10" + "@firebase/firestore-compat" "0.1.19" + "@firebase/functions" "0.8.2" + "@firebase/functions-compat" "0.2.2" + "@firebase/installations" "0.5.10" + "@firebase/messaging" "0.9.14" + "@firebase/messaging-compat" "0.1.14" + "@firebase/performance" "0.5.10" + "@firebase/performance-compat" "0.1.10" + "@firebase/polyfill" "0.3.36" + "@firebase/remote-config" "0.3.9" + "@firebase/remote-config-compat" "0.1.10" + "@firebase/storage" "0.9.7" + "@firebase/storage-compat" "0.1.15" + "@firebase/util" "1.6.1" + flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" @@ -3145,6 +3733,44 @@ functions-have-names@^1.2.2: resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== +gaxios@^4.0.0: + version "4.3.3" + resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-4.3.3.tgz#d44bdefe52d34b6435cc41214fdb160b64abfc22" + integrity sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA== + dependencies: + abort-controller "^3.0.0" + extend "^3.0.2" + https-proxy-agent "^5.0.0" + is-stream "^2.0.0" + node-fetch "^2.6.7" + +gaxios@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-5.0.0.tgz#df11e5d0a45831dd39eb5fbbba0d6a6b09815e70" + integrity sha512-VD/yc5ln6XU8Ch1hyYY6kRMBE0Yc2np3fPyeJeYHhrPs1i8rgnsApPMWyrugkl7LLoSqpOJVBWlQIa87OAvt8Q== + dependencies: + abort-controller "^3.0.0" + extend "^3.0.2" + https-proxy-agent "^5.0.0" + is-stream "^2.0.0" + node-fetch "^2.6.7" + +gcp-metadata@^4.2.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-4.3.1.tgz#fb205fe6a90fef2fd9c85e6ba06e5559ee1eefa9" + integrity sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A== + dependencies: + gaxios "^4.0.0" + json-bigint "^1.0.0" + +gcp-metadata@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-5.0.0.tgz#a00f999f60a4461401e7c515f8a3267cfb401ee7" + integrity sha512-gfwuX3yA3nNsHSWUL4KG90UulNiq922Ukj3wLTrcnX33BB7PwB1o0ubR8KVvXu9nJH+P5w1j2SQSNNqto+H0DA== + dependencies: + gaxios "^5.0.0" + json-bigint "^1.0.0" + gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -3249,6 +3875,62 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" +google-auth-library@^7.14.0: + version "7.14.1" + resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-7.14.1.tgz#e3483034162f24cc71b95c8a55a210008826213c" + integrity sha512-5Rk7iLNDFhFeBYc3s8l1CqzbEBcdhwR193RlD4vSNFajIcINKI8W8P0JLmBpwymHqqWbX34pJDQu39cSy/6RsA== + dependencies: + arrify "^2.0.0" + base64-js "^1.3.0" + ecdsa-sig-formatter "^1.0.11" + fast-text-encoding "^1.0.0" + gaxios "^4.0.0" + gcp-metadata "^4.2.0" + gtoken "^5.0.4" + jws "^4.0.0" + lru-cache "^6.0.0" + +google-auth-library@^8.0.1: + version "8.0.2" + resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-8.0.2.tgz#5fa0f2d3795c3e4019d2bb315ade4454cc9c30b5" + integrity sha512-HoG+nWFAThLovKpvcbYzxgn+nBJPTfAwtq0GxPN821nOO+21+8oP7MoEHfd1sbDulUFFGfcjJr2CnJ4YssHcyg== + dependencies: + arrify "^2.0.0" + base64-js "^1.3.0" + ecdsa-sig-formatter "^1.0.11" + fast-text-encoding "^1.0.0" + gaxios "^5.0.0" + gcp-metadata "^5.0.0" + gtoken "^5.3.2" + jws "^4.0.0" + lru-cache "^6.0.0" + +google-gax@^2.24.1: + version "2.30.5" + resolved "https://registry.yarnpkg.com/google-gax/-/google-gax-2.30.5.tgz#e836f984f3228900a8336f608c83d75f9cb73eff" + integrity sha512-Jey13YrAN2hfpozHzbtrwEfEHdStJh1GwaQ2+Akh1k0Tv/EuNVSuBtHZoKSBm5wBMvNsxTsEIZ/152NrYyZgxQ== + dependencies: + "@grpc/grpc-js" "~1.6.0" + "@grpc/proto-loader" "^0.6.12" + "@types/long" "^4.0.0" + abort-controller "^3.0.0" + duplexify "^4.0.0" + fast-text-encoding "^1.0.3" + google-auth-library "^7.14.0" + is-stream-ended "^0.1.4" + node-fetch "^2.6.1" + object-hash "^3.0.0" + proto3-json-serializer "^0.1.8" + protobufjs "6.11.3" + retry-request "^4.0.0" + +google-p12-pem@^3.1.3: + version "3.1.4" + resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-3.1.4.tgz#123f7b40da204de4ed1fbf2fd5be12c047fc8b3b" + integrity sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg== + dependencies: + node-forge "^1.3.1" + graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" @@ -3276,6 +3958,15 @@ graphql@^16.5.0: resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.5.0.tgz#41b5c1182eaac7f3d47164fb247f61e4dfb69c85" integrity sha512-qbHgh8Ix+j/qY+a/ZcJnFQ+j8ezakqPiHwPiZhV/3PgGlgf96QMBB5/f2rkiC9sgLoy/xvT6TSiaf2nTHJh5iA== +gtoken@^5.0.4, gtoken@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-5.3.2.tgz#deb7dc876abe002178e0515e383382ea9446d58f" + integrity sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ== + dependencies: + gaxios "^4.0.0" + google-p12-pem "^3.1.3" + jws "^4.0.0" + has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" @@ -3338,6 +4029,28 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" +http-parser-js@>=0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.6.tgz#2e02406ab2df8af8a7abfba62e0da01c62b95afd" + integrity sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA== + +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + human-signals@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" @@ -3355,6 +4068,11 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +idb@7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/idb/-/idb-7.0.1.tgz#d2875b3a2f205d854ee307f6d196f246fea590a7" + integrity sha512-UUxlE7vGWK5RfB/fDwEGgRf84DY/ieqNha6msMV99UsEMQhJ1RwbCd8AYBj3QMgnE3VZnfQvm4oKVCJTYlqIgg== + ieee754@^1.1.13: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" @@ -3365,6 +4083,11 @@ ignore@^5.2.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== + import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" @@ -3567,6 +4290,11 @@ is-shared-array-buffer@^1.0.2: dependencies: call-bind "^1.0.2" +is-stream-ended@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-stream-ended/-/is-stream-ended-0.1.4.tgz#f50224e95e06bce0e356d440a4827cd35b267eda" + integrity sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw== + is-stream@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" @@ -3739,16 +4467,6 @@ jest-config@^28.1.1: slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" - integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== - dependencies: - chalk "^4.0.0" - diff-sequences "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" - jest-diff@^28.1.1: version "28.1.1" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-28.1.1.tgz#1a3eedfd81ae79810931c63a1d0f201b9120106c" @@ -3789,11 +4507,6 @@ jest-environment-node@^28.1.1: jest-mock "^28.1.1" jest-util "^28.1.1" -jest-get-type@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" - integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== - jest-get-type@^28.0.2: version "28.0.2" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-28.0.2.tgz#34622e628e4fdcd793d46db8a242227901fcf203" @@ -3826,17 +4539,7 @@ jest-leak-detector@^28.1.1: jest-get-type "^28.0.2" pretty-format "^28.1.1" -jest-matcher-utils@^27.0.0: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" - integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== - dependencies: - chalk "^4.0.0" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" - -jest-matcher-utils@^28.1.1: +jest-matcher-utils@^28.0.0, jest-matcher-utils@^28.1.1: version "28.1.1" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-28.1.1.tgz#a7c4653c2b782ec96796eb3088060720f1e29304" integrity sha512-NPJPRWrbmR2nAJ+1nmnfcKKzSwgfaciCCrYZzVnNoxVoyusYWIjkBMNvu0RHJe7dNj4hH3uZOPZsQA+xAYWqsw== @@ -4059,6 +4762,13 @@ jest@^28.1.1: import-local "^3.0.2" jest-cli "^28.1.1" +jose@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/jose/-/jose-2.0.5.tgz#29746a18d9fff7dcf9d5d2a6f62cb0c7cd27abd3" + integrity sha512-BAiDNeDKTMgk4tvD0BbxJ8xHEHBZgpeRZ1zGPPsitSyMgjoMWiLGYAE7H7NpP5h0lPppQajQs871E8NHUrzVPA== + dependencies: + "@panva/asn1.js" "^1.0.0" + js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -4084,6 +4794,13 @@ jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +json-bigint@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" + integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== + dependencies: + bignumber.js "^9.0.0" + json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" @@ -4130,6 +4847,78 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +jsonwebtoken@^8.5.1: + version "8.5.1" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" + integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== + dependencies: + jws "^3.2.2" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + semver "^5.6.0" + +jszip@^3.6.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.0.tgz#faf3db2b4b8515425e34effcdbb086750a346061" + integrity sha512-LDfVtOLtOxb9RXkYOwPyNBTQDL4eUbqahtoY6x07GiDJHwSYvn8sHHIw8wINImV3MqbMNve2gSuM1DDqEKk09Q== + dependencies: + lie "~3.3.0" + pako "~1.0.2" + readable-stream "~2.3.6" + setimmediate "^1.0.5" + +jwa@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" + integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jwa@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.0.tgz#a7e9c3f29dae94027ebcaf49975c9345593410fc" + integrity sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jwks-rsa@^2.0.2: + version "2.1.4" + resolved "https://registry.yarnpkg.com/jwks-rsa/-/jwks-rsa-2.1.4.tgz#38ebfbe9cb4cdce3be070e6575796304917bae97" + integrity sha512-mpArfgPkUpX11lNtGxsF/szkasUcbWHGplZl/uFvFO2NuMHmt0dQXIihh0rkPU2yQd5niQtuUHbXnG/WKiXF6Q== + dependencies: + "@types/express" "^4.17.13" + "@types/jsonwebtoken" "^8.5.8" + debug "^4.3.4" + jose "^2.0.5" + limiter "^1.1.5" + lru-memoizer "^2.1.4" + +jws@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" + integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== + dependencies: + jwa "^1.4.1" + safe-buffer "^5.0.1" + +jws@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.0.tgz#2d4e8cf6a318ffaa12615e9dec7e86e6c97310f4" + integrity sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg== + dependencies: + jwa "^2.0.0" + safe-buffer "^5.0.1" + kleur@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" @@ -4153,6 +4942,18 @@ libphonenumber-js@^1.9.43: resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.10.6.tgz#a453efe9d692cc9457abb20a712dec34472a7164" integrity sha512-CIjT100/SmntsUjsLVs2t3ufeN4KdNXUxhD07tH153pdbaCWuAjv0jK/gPuywR3IImB/U/MQM+x9RfhMs5XZiA== +lie@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== + dependencies: + immediate "~3.0.5" + +limiter@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/limiter/-/limiter-1.1.5.tgz#8f92a25b3b16c6131293a0cc834b4a838a2aa7c2" + integrity sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA== + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" @@ -4178,6 +4979,46 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== + +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== + +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== + lodash.memoize@4.x: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -4193,6 +5034,11 @@ lodash.omit@4.5.0: resolved "https://registry.yarnpkg.com/lodash.omit/-/lodash.omit-4.5.0.tgz#6eb19ae5a1ee1dd9df0b969e66ce0b7fa30b5e60" integrity sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg== +lodash.once@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== + lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -4233,6 +5079,22 @@ lru-cache@^7.10.1: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.10.1.tgz#db577f42a94c168f676b638d15da8fb073448cab" integrity sha512-BQuhQxPuRl79J5zSXRP+uNzPOyZw2oFI9JLRQ80XswSvg21KMKNtQza9eF42rfI/3Z40RvzBdXgziEkudzjo8A== +lru-cache@~4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" + integrity sha512-uQw9OqphAGiZhkuPlpFGmdTU2tEuhxTourM/19qGJrxBPHAr/f8BT1a0i/lOclESnGatdJG/UCkP9kZB/Lh1iw== + dependencies: + pseudomap "^1.0.1" + yallist "^2.0.0" + +lru-memoizer@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/lru-memoizer/-/lru-memoizer-2.1.4.tgz#b864d92b557f00b1eeb322156a0409cb06dafac6" + integrity sha512-IXAq50s4qwrOBrXJklY+KhgZF+5y98PDaNo0gi/v2KQBFLyWr+JyFvijZXkGKjQj/h9c0OwoE+JZbwUXce76hQ== + dependencies: + lodash.clonedeep "^4.5.0" + lru-cache "~4.0.0" + macos-release@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.5.0.tgz#067c2c88b5f3fb3c56a375b2ec93826220fa1ff2" @@ -4304,12 +5166,12 @@ micromatch@^4.0.4: braces "^3.0.2" picomatch "^2.3.1" -mime-db@1.52.0: +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.0.8, mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -4326,6 +5188,11 @@ mime@2.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== +mime@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" + integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== + mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -4432,13 +5299,18 @@ node-emoji@1.11.0: dependencies: lodash "^4.17.21" -node-fetch@^2.6.1, node-fetch@^2.6.7: +node-fetch@2.6.7, node-fetch@^2.6.1, node-fetch@^2.6.7: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== dependencies: whatwg-url "^5.0.0" +node-forge@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -4466,7 +5338,7 @@ object-assign@^4, object-assign@^4.1.1: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-hash@3.0.0: +object-hash@3.0.0, object-hash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== @@ -4589,6 +5461,13 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" +p-limit@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" @@ -4613,6 +5492,11 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +pako@~1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -4724,16 +5608,7 @@ prettier@^2.6.2: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== -pretty-format@^27.0.0, pretty-format@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" - integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== - dependencies: - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^17.0.1" - -pretty-format@^28.1.1: +pretty-format@^28.0.0, pretty-format@^28.1.1: version "28.1.1" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.1.tgz#f731530394e0f7fcd95aba6b43c50e02d86b95cb" integrity sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw== @@ -4772,6 +5647,11 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +promise-polyfill@8.1.3: + version "8.1.3" + resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-8.1.3.tgz#8c99b3cf53f3a91c68226ffde7bde81d7f904116" + integrity sha512-MG5r82wBzh7pSKDRa9y+vllNHz3e3d4CNj1PQE4BQYxLme0gKYYBm9YENq+UkEikyZ0XbiGWxYlVw3Rl9O/U8g== + prompts@^2.0.1: version "2.4.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" @@ -4780,6 +5660,32 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" +proto3-json-serializer@^0.1.8: + version "0.1.9" + resolved "https://registry.yarnpkg.com/proto3-json-serializer/-/proto3-json-serializer-0.1.9.tgz#705ddb41b009dd3e6fcd8123edd72926abf65a34" + integrity sha512-A60IisqvnuI45qNRygJjrnNjX2TMdQGMY+57tR3nul3ZgO2zXkR9OGR8AXxJhkqx84g0FTnrfi3D5fWMSdANdQ== + dependencies: + protobufjs "^6.11.2" + +protobufjs@6.11.3, protobufjs@^6.11.2, protobufjs@^6.11.3, protobufjs@^6.8.6: + version "6.11.3" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.3.tgz#637a527205a35caa4f3e2a9a4a13ddffe0e7af74" + integrity sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/long" "^4.0.1" + "@types/node" ">=13.7.0" + long "^4.0.0" + proxy-addr@~2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" @@ -4788,6 +5694,11 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" +pseudomap@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== + pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -4796,6 +5707,15 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" +pumpify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-2.0.1.tgz#abfc7b5a621307c728b551decbbefb51f0e4aa1e" + integrity sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw== + dependencies: + duplexify "^4.1.1" + inherits "^2.0.3" + pump "^3.0.0" + punycode@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" @@ -4854,17 +5774,12 @@ raw-body@2.5.1: iconv-lite "0.4.24" unpipe "1.0.0" -react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== - react-is@^18.0.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== -readable-stream@^2.2.2: +readable-stream@^2.2.2, 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== @@ -4877,7 +5792,7 @@ readable-stream@^2.2.2: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.4.0, readable-stream@^3.6.0: +readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -4968,6 +5883,22 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" +retry-request@^4.0.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/retry-request/-/retry-request-4.2.2.tgz#b7d82210b6d2651ed249ba3497f07ea602f1a903" + integrity sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg== + dependencies: + debug "^4.1.1" + extend "^3.0.2" + +retry-request@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/retry-request/-/retry-request-5.0.1.tgz#c6be2a4a36f1554ba3251fa8fd945af26ee0e9ec" + integrity sha512-lxFKrlBt0OZzCWh/V0uPEN0vlr3OhdeXnpeY5OES+ckslm791Cb1D5P7lJUSnY7J5hiCjcyaUGmzCnIGDCUBig== + dependencies: + debug "^4.1.1" + extend "^3.0.2" + retry@0.13.1: version "0.13.1" resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" @@ -5011,7 +5942,7 @@ rxjs@^7.2.0, rxjs@^7.5.5: dependencies: tslib "^2.1.0" -safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -5035,6 +5966,15 @@ schema-utils@^3.1.0, schema-utils@^3.1.1: ajv "^6.12.5" ajv-keywords "^3.5.2" +selenium-webdriver@4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.1.2.tgz#d463b4335632d2ea41a9e988e435a55dc41f5314" + integrity sha512-e4Ap8vQvhipgBB8Ry9zBiKGkU6kHKyNnWiavGGLKkrdW81Zv7NVMtFOL/j3yX0G8QScM7XIXijKssNd4EUxSOw== + dependencies: + jszip "^3.6.0" + tmp "^0.2.1" + ws ">=7.4.6" + semver@7.x, semver@^7.3.5, semver@^7.3.7: version "7.3.7" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" @@ -5042,6 +5982,11 @@ semver@7.x, semver@^7.3.5, semver@^7.3.7: dependencies: lru-cache "^6.0.0" +semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -5083,6 +6028,11 @@ serve-static@1.15.0: parseurl "~1.3.3" send "0.18.0" +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + setprototypeof@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" @@ -5189,6 +6139,18 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== +stream-events@^1.0.4, stream-events@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/stream-events/-/stream-events-1.0.5.tgz#bbc898ec4df33a4902d892333d47da9bf1c406d5" + integrity sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg== + dependencies: + stubs "^3.0.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + streamsearch@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" @@ -5277,6 +6239,11 @@ strip-outer@^1.0.1: dependencies: escape-string-regexp "^1.0.2" +stubs@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/stubs/-/stubs-3.0.0.tgz#e8d2ba1fa9c90570303c030b6900f7d5f89abe5b" + integrity sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw== + subscriptions-transport-ws@0.11.0, subscriptions-transport-ws@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.11.0.tgz#baf88f050cba51d52afe781de5e81b3c31f89883" @@ -5387,6 +6354,17 @@ tar@^6.1.11: mkdirp "^1.0.3" yallist "^4.0.0" +teeny-request@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-8.0.0.tgz#9614410ba70114fd28ba7bf5077dce3e2f02adf7" + integrity sha512-6KEYxXI4lQPSDkXzXpPmJPNmo7oqduFFbhOEHf8sfsLbXyCsb+umUjBtMGAKhaSToD8JNCtQutTRefu29K64JA== + dependencies: + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + node-fetch "^2.6.1" + stream-events "^1.0.5" + uuid "^8.0.0" + terminal-link@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" @@ -5425,6 +6403,11 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" +text-decoding@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/text-decoding/-/text-decoding-1.0.0.tgz#38a5692d23b5c2b12942d6e245599cb58b1bc52f" + integrity sha512-/0TJD42KDnVwKmDK6jj3xP7E2MG7SHAOG4tyTgyUCRPdHwvkquYNLEQltmdMa3owq3TkddCVcTsoctJI8VQNKA== + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -5447,6 +6430,13 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" +tmp@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -5665,7 +6655,7 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -uuid@8.3.2, uuid@^8.0.0: +uuid@8.3.2, uuid@^8.0.0, uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== @@ -5771,6 +6761,25 @@ webpack@5.72.1: watchpack "^2.3.1" webpack-sources "^3.2.3" +websocket-driver@>=0.5.1: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +whatwg-fetch@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" + integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng== + whatwg-mimetype@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" @@ -5841,16 +6850,16 @@ ws@8.7.0: resolved "https://registry.yarnpkg.com/ws/-/ws-8.7.0.tgz#eaf9d874b433aa00c0e0d8752532444875db3957" integrity sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg== +ws@>=7.4.6, ws@^8.4.0: + version "8.8.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.0.tgz#8e71c75e2f6348dbf8d78005107297056cb77769" + integrity sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ== + "ws@^5.2.0 || ^6.0.0 || ^7.0.0": version "7.5.8" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.8.tgz#ac2729881ab9e7cbaf8787fe3469a48c5c7f636a" integrity sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw== -ws@^8.4.0: - version "8.8.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.0.tgz#8e71c75e2f6348dbf8d78005107297056cb77769" - integrity sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ== - xss@^1.0.8: version "1.0.13" resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.13.tgz#6e48f616128b39f366dfadc57411e1eb5b341c6c" @@ -5869,6 +6878,11 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== +yallist@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== + yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" @@ -5879,11 +6893,29 @@ yaml@^1.10.0: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + yargs-parser@^21.0.0, yargs-parser@^21.0.1: version "21.0.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.1.tgz#0267f286c877a4f0f728fceb6f8a3e4cb95c6e35" integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + yargs@^17.3.1: version "17.5.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" @@ -5902,6 +6934,11 @@ yn@3.1.1: resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + zen-observable-ts@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-1.1.0.tgz#2d1aa9d79b87058e9b75698b92791c1838551f83"