From 28a5de64c4fa294c2c7d437ba97a91db66b5a013 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Sat, 10 Dec 2022 16:51:54 +0900 Subject: [PATCH 001/298] =?UTF-8?q?refactor:=20=EC=B1=84=EB=84=90=20?= =?UTF-8?q?=EC=A0=91=EC=86=8D,=20=EC=B4=88=EB=8C=80=20=EC=8B=9C=20?= =?UTF-8?q?=EC=9D=91=EB=8B=B5=20=EB=B3=80=EA=B2=BD=20#304?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/channel/channel.service.ts | 5 +++++ server/apps/api/src/channel/channels.controller.ts | 8 ++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/server/apps/api/src/channel/channel.service.ts b/server/apps/api/src/channel/channel.service.ts index 3548f207..d77b9e09 100644 --- a/server/apps/api/src/channel/channel.service.ts +++ b/server/apps/api/src/channel/channel.service.ts @@ -186,6 +186,8 @@ export class ChannelService { async inviteChannel(inviteChannelDto: InviteChannelDto) { const { community_id, channel_id, users } = inviteChannelDto; await this.addUserToChannel(community_id, channel_id, users); + const channelInfo = getChannelBasicInfo(await this.channelRepository.findById(channel_id)); + return { ...channelInfo, lastRead: false }; } async updateLastRead(updateLastReadDto: UpdateLastReadDto) { @@ -200,5 +202,8 @@ export class ChannelService { async joinChannel(joinChannelDto: JoinChannelDto) { const { requestUserId, channel_id, community_id } = joinChannelDto; await this.addUserToChannel(community_id, channel_id, [requestUserId]); + const channelInfo = getChannelBasicInfo(await this.channelRepository.findById(channel_id)); + if (channelInfo) delete channelInfo.users; + return { ...channelInfo, lastRead: false }; } } diff --git a/server/apps/api/src/channel/channels.controller.ts b/server/apps/api/src/channel/channels.controller.ts index 28606425..9038ded2 100644 --- a/server/apps/api/src/channel/channels.controller.ts +++ b/server/apps/api/src/channel/channels.controller.ts @@ -48,8 +48,8 @@ export class ChannelsController { @Post(':channel_id/users') @UseGuards(JwtAccessGuard) async inviteChannel(@ReceivedData() inviteChannelDto: InviteChannelDto) { - await this.channelService.inviteChannel(inviteChannelDto); - return responseForm(200, { message: '채널 초대 성공' }); + const channelInfo = await this.channelService.inviteChannel(inviteChannelDto); + return responseForm(200, channelInfo); } @Patch(':channel_id/lastRead') @@ -62,7 +62,7 @@ export class ChannelsController { @Post(':channel_id') @UseGuards(JwtAccessGuard) async joinChannel(@ReceivedData() joinChannelDto: JoinChannelDto) { - await this.channelService.joinChannel(joinChannelDto); - return responseForm(200, { message: '채널 접속 성공!' }); + const channelInfo = await this.channelService.joinChannel(joinChannelDto); + return responseForm(200, channelInfo); } } From 10d3d6298b60459bf90e8ccc57c925876baa8229 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Sat, 10 Dec 2022 18:50:36 +0900 Subject: [PATCH 002/298] =?UTF-8?q?refactor:=20=EC=BD=94=EB=93=9C=EB=A6=AC?= =?UTF-8?q?=EB=B7=B0=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?#305?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/channel/channel.service.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/apps/api/src/channel/channel.service.ts b/server/apps/api/src/channel/channel.service.ts index d77b9e09..77117516 100644 --- a/server/apps/api/src/channel/channel.service.ts +++ b/server/apps/api/src/channel/channel.service.ts @@ -187,6 +187,7 @@ export class ChannelService { const { community_id, channel_id, users } = inviteChannelDto; await this.addUserToChannel(community_id, channel_id, users); const channelInfo = getChannelBasicInfo(await this.channelRepository.findById(channel_id)); + if (!channelInfo) throw new BadRequestException(); return { ...channelInfo, lastRead: false }; } @@ -203,7 +204,7 @@ export class ChannelService { const { requestUserId, channel_id, community_id } = joinChannelDto; await this.addUserToChannel(community_id, channel_id, [requestUserId]); const channelInfo = getChannelBasicInfo(await this.channelRepository.findById(channel_id)); - if (channelInfo) delete channelInfo.users; + if (!channelInfo) throw new BadRequestException(); return { ...channelInfo, lastRead: false }; } } From 552c26590a47cc86e66a2a5e404cc3cedcf0e6f6 Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Sat, 10 Dec 2022 17:52:24 +0900 Subject: [PATCH 003/298] =?UTF-8?q?integration=20test=20option=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/community/communities.controller.ts | 1 - server/apps/api/test/community.e2e-spec.ts | 46 +++++++++---------- server/apps/api/test/jest-e2e.json | 2 +- server/apps/api/test/user.e2e-spec.ts | 34 +++++++------- server/package.json | 2 +- 5 files changed, 42 insertions(+), 43 deletions(-) diff --git a/server/apps/api/src/community/communities.controller.ts b/server/apps/api/src/community/communities.controller.ts index c41d5b15..d749fb6b 100644 --- a/server/apps/api/src/community/communities.controller.ts +++ b/server/apps/api/src/community/communities.controller.ts @@ -23,7 +23,6 @@ export class CommunitiesController { async appendUsersToCommunity( @ReceivedData() appendUsersToCommunityDto: AppendUsersToCommunityDto, ) { - console.log(appendUsersToCommunityDto); await this.communityService.appendUsersToCommunity(appendUsersToCommunityDto); return responseForm(200, { message: '커뮤니티 사용자 추가 완료' }); } diff --git a/server/apps/api/test/community.e2e-spec.ts b/server/apps/api/test/community.e2e-spec.ts index d5228f4c..95a7c2aa 100644 --- a/server/apps/api/test/community.e2e-spec.ts +++ b/server/apps/api/test/community.e2e-spec.ts @@ -15,7 +15,7 @@ import { Community, CommunitySchema } from '@schemas/community.schema'; import { communityDto1, modifyCommunityDto1 } from '@mock/community.mock'; describe('Community E2E Test', () => { - let app, userModel, communityModel, mongod, user1; + let app, server, userModel, communityModel, mongod, user1; let accessToken; beforeAll(async () => { @@ -36,7 +36,8 @@ describe('Community E2E Test', () => { }); beforeEach(async () => { - await request(app.getHttpServer()) + server = await app.getHttpServer(); + await request(server) .post(signupURL) .send({ id: initTestUser1.id, @@ -47,9 +48,7 @@ describe('Community E2E Test', () => { user1 = await userModel.findOne({ id: initTestUser1.id }); }); accessToken = ( - await request(app.getHttpServer()) - .post(singinURL) - .send({ id: user1.id, password: initTestUser1.password }) + await request(server).post(singinURL).send({ id: user1.id, password: initTestUser1.password }) ).body.result.accessToken; }); @@ -59,7 +58,7 @@ describe('Community E2E Test', () => { // TODO: url refactoring 검토 describe('Post /api/community ', () => { it('커뮤니티 추가', async () => { - await request(app.getHttpServer()) + await request(server) .post(`/api/community`) .set('Authorization', `Bearer ${accessToken}`) .send(communityDto1) @@ -72,12 +71,12 @@ describe('Community E2E Test', () => { describe('Get /api/communities', () => { it('자신이 속한 커뮤니티들의 정보', async () => { - await request(app.getHttpServer()) + await request(server) .post(`/api/community`) .set('Authorization', `Bearer ${accessToken}`) .send(communityDto1); - await request(app.getHttpServer()) + await request(server) .get(`/api/communities`) .set('Authorization', `Bearer ${accessToken}`) .expect((res) => { @@ -91,13 +90,13 @@ describe('Community E2E Test', () => { describe('Post /api/communities/:id/users ', () => { it('커뮤니티 사용자 추가', async () => { const user2 = await userModel.create(initTestUser2); - await request(app.getHttpServer()) + await request(server) .post(`/api/community`) .set('Authorization', `Bearer ${accessToken}`) .send(communityDto1); const community = await communityModel.findOne({ name: communityDto1.name }); - await request(app.getHttpServer()) + await request(server) .post(`/api/communities/${community._id}/users`) .set('Authorization', `Bearer ${accessToken}`) .send({ community_id: community._id, requestUserId: user1._id, users: [user2._id] }) @@ -111,13 +110,13 @@ describe('Community E2E Test', () => { describe('Delete /api/communities/:id', () => { it('커뮤니티들 삭제', async () => { - await request(app.getHttpServer()) + await request(server) .post(`/api/community`) .set('Authorization', `Bearer ${accessToken}`) .send(communityDto1); const community = await communityModel.findOne({ name: communityDto1.name }); - await request(app.getHttpServer()) + await request(server) .delete(`/api/communities/${community._id.toString()}`) .set('Authorization', `Bearer ${accessToken}`) .send(communityDto1) @@ -134,18 +133,18 @@ describe('Community E2E Test', () => { describe('Get /api/communities/:id/users ', () => { it('커뮤니티 사용자 정보 전달', async () => { const user2 = await userModel.create(initTestUser2); - await request(app.getHttpServer()) + await request(server) .post(`/api/community`) .set('Authorization', `Bearer ${accessToken}`) .send(communityDto1); const community = await communityModel.findOne({ name: communityDto1.name }); - await request(app.getHttpServer()) + await request(server) .post(`/api/communities/${community._id.toString()}/users`) .set('Authorization', `Bearer ${accessToken}`) .send({ community_id: community._id, requestUserId: user1._id, users: [user2._id] }); - await request(app.getHttpServer()) + await request(server) .get(`/api/communities/${community._id.toString()}/users`) .set('Authorization', `Bearer ${accessToken}`) .expect((res) => { @@ -158,7 +157,7 @@ describe('Community E2E Test', () => { describe('Delete /api/communities/:id/me ', () => { it('커뮤니티 퇴장', async () => { let user2; - await request(app.getHttpServer()) + await request(server) .post(signupURL) .send({ id: initTestUser2.id, @@ -169,18 +168,18 @@ describe('Community E2E Test', () => { user2 = await userModel.findOne({ id: initTestUser2.id }); }); const user2AccessToken = ( - await request(app.getHttpServer()) + await request(server) .post(singinURL) .send({ id: user2.id, password: initTestUser2.password }) ).body.result.accessToken; - await request(app.getHttpServer()) + await request(server) .post(`/api/community`) .set('Authorization', `Bearer ${accessToken}`) .send(communityDto1); const community = await communityModel.findOne({ name: communityDto1.name }); - await request(app.getHttpServer()) + await request(server) .post(`/api/communities/${community._id.toString()}/users`) .set('Authorization', `Bearer ${accessToken}`) .send({ @@ -188,7 +187,7 @@ describe('Community E2E Test', () => { requestUserId: user1._id.toString(), users: [user2._id], }); - await request(app.getHttpServer()) + await request(server) .delete(`/api/communities/${community._id.toString()}/me`) .set('Authorization', `Bearer ${accessToken}`) .expect((res) => { @@ -198,7 +197,7 @@ describe('Community E2E Test', () => { expect(res.body.error).toBeDefined(); }); - await request(app.getHttpServer()) + await request(server) .delete(`/api/communities/${community._id.toString()}/me`) .set('Authorization', `Bearer ${user2AccessToken}`) .expect((res) => { @@ -212,14 +211,14 @@ describe('Community E2E Test', () => { describe('Patch /api/communities/:id/settings ', () => { it('커뮤니티 정보 수', async () => { const user2 = await userModel.create(initTestUser2); - await request(app.getHttpServer()) + await request(server) .post(`/api/community`) .set('Authorization', `Bearer ${accessToken}`) .send(communityDto1); const community = await communityModel.findOne({ name: communityDto1.name }); - await request(app.getHttpServer()) + await request(server) .patch(`/api/communities/${community._id.toString()}/settings`) .set('Authorization', `Bearer ${accessToken}`) .send(modifyCommunityDto1) @@ -235,6 +234,7 @@ describe('Community E2E Test', () => { afterEach(async () => { // await mongoDbServerCleanup(); + server.close(); const collections = mongod.collections; for (const key in collections) { const collection = collections[key]; diff --git a/server/apps/api/test/jest-e2e.json b/server/apps/api/test/jest-e2e.json index 485b8aca..0eb99a1f 100644 --- a/server/apps/api/test/jest-e2e.json +++ b/server/apps/api/test/jest-e2e.json @@ -14,7 +14,7 @@ "@schemas/(.*)": "/dao/schemas/$1", "@repository/(.*)": "/dao/repository/$1", "@utils/(.*)": "/utils/$1", - "@custom_pipe/(.*)": "/custom_pipe/$1", + "@custom/(.*)": "/custom/$1", "@user/(.*)": "/apps/api/src/user/$1", "@channel/(.*)": "/apps/api/src/channel/$1", "@community/(.*)": "/apps/api/src/community/$1", diff --git a/server/apps/api/test/user.e2e-spec.ts b/server/apps/api/test/user.e2e-spec.ts index 926210eb..a48f19e5 100644 --- a/server/apps/api/test/user.e2e-spec.ts +++ b/server/apps/api/test/user.e2e-spec.ts @@ -12,7 +12,7 @@ import { importWinstonModule } from '@api/modules/Winstone.module'; import { followingURL, signupURL, singinURL } from '@api/test/urls/urls'; describe('User E2E Test', () => { - let app, userModel, mongod, user1; + let app, server, userModel, mongod, user1; let accessToken; beforeAll(async () => { @@ -27,7 +27,8 @@ describe('User E2E Test', () => { }); beforeEach(async () => { - await request(app.getHttpServer()) + server = await app.getHttpServer(); + await request(server) .post(signupURL) .send({ id: initTestUser1.id, @@ -38,9 +39,7 @@ describe('User E2E Test', () => { user1 = await userModel.findOne({ id: initTestUser1.id }); }); accessToken = ( - await request(app.getHttpServer()) - .post(singinURL) - .send({ id: user1.id, password: initTestUser1.password }) + await request(server).post(singinURL).send({ id: user1.id, password: initTestUser1.password }) ).body.result.accessToken; }); @@ -51,7 +50,7 @@ describe('User E2E Test', () => { describe('Post /api/user/following/:id', () => { it('팔로잉 정상 동작', async () => { const user2 = await userModel.create(initTestUser2); - await request(app.getHttpServer()) + await request(server) .post(`${followingURL}/${user2._id}`) .set('Authorization', `Bearer ${accessToken}`) .expect((res) => { @@ -64,11 +63,11 @@ describe('User E2E Test', () => { it('언팔로잉 정상 동작', async () => { const user2 = await userModel.create(initTestUser2); - await request(app.getHttpServer()) + await request(server) .post(`${followingURL}/${user2._id}`) .set('Authorization', `Bearer ${accessToken}`); - await request(app.getHttpServer()) + await request(server) .post(`/api/user/following/${user2._id}`) .set('Authorization', `Bearer ${accessToken}`) .expect((res) => { @@ -83,7 +82,7 @@ describe('User E2E Test', () => { describe('Get /api/user/followers ', () => { it('팔로워 정보 정상 동작', async () => { let user2; - await request(app.getHttpServer()) + await request(server) .post(signupURL) .send({ id: initTestUser2.id, @@ -94,16 +93,16 @@ describe('User E2E Test', () => { user2 = await userModel.findOne({ id: initTestUser2.id }); }); const user2AccessToken = ( - await request(app.getHttpServer()) + await request(server) .post(singinURL) .send({ id: user2.id, password: initTestUser2.password }) ).body.result.accessToken; - await request(app.getHttpServer()) + await request(server) .post(`${followingURL}/${user1._id}`) .set('Authorization', `Bearer ${user2AccessToken}`); - await request(app.getHttpServer()) + await request(server) .get('/api/user/followers') .set('Authorization', `Bearer ${accessToken}`) .expect(200) @@ -117,11 +116,11 @@ describe('User E2E Test', () => { describe('Get /api/user/followings ', () => { it('팔로워 정보 정상 동작', async () => { const user2 = await userModel.create(initTestUser2); - await request(app.getHttpServer()) + await request(server) .post(`${followingURL}/${user2._id}`) .set('Authorization', `Bearer ${accessToken}`); - await request(app.getHttpServer()) + await request(server) .get('/api/user/followings') .set('Authorization', `Bearer ${accessToken}`) .expect(200) @@ -134,7 +133,7 @@ describe('User E2E Test', () => { describe('Patch /api/user/settings ', () => { it('팔로워 정보 정상 동작', async () => { - await request(app.getHttpServer()) + await request(server) .patch('/api/user/settings') .set('Authorization', `Bearer ${accessToken}`) .send(user1Modify) @@ -151,7 +150,7 @@ describe('User E2E Test', () => { describe('Get /api/users ', () => { it('사용자 검색 정상 동작', async () => { const user2 = await userModel.create(initTestUser2); - return request(app.getHttpServer()) + return request(server) .get('/api/users?search=test') .expect(200) .expect((res) => { @@ -163,6 +162,7 @@ describe('User E2E Test', () => { afterEach(async () => { // await mongoDbServerCleanup(); + server.close(); const collections = mongod.collections; for (const key in collections) { const collection = collections[key]; @@ -171,7 +171,7 @@ describe('User E2E Test', () => { }); afterAll(async () => { + await app.close(); await mongoDbServerStop(); - app.close(); }); }); diff --git a/server/package.json b/server/package.json index 6ffafd7c..b0089b70 100644 --- a/server/package.json +++ b/server/package.json @@ -22,7 +22,7 @@ "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": "NODE_ENV=test jest --runInBand --detectOpenHandles --forceExit --config apps/api/test/jest-e2e.json", + "test:e2e": "NODE_ENV=test jest --coverage --ci --reporters=default --reporters=jest-junit --runInBand --detectOpenHandles --forceExit --config apps/api/test/jest-e2e.json", "test:report": "jest --coverage --ci --reporters=default --reporters=jest-junit" }, "dependencies": { From 0a1c8d03f29ff7be510c608175e5ff0179eb6684 Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Sat, 10 Dec 2022 19:48:13 +0900 Subject: [PATCH 004/298] =?UTF-8?q?fix:=20jest=20=EC=84=A4=EC=B9=98=20?= =?UTF-8?q?=EC=9D=98=EC=A1=B4=EC=84=B1=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/server.yml | 2 +- server/custom/pipe/mongodbObjectIdValidation.pipe.ts | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/server.yml b/.github/workflows/server.yml index 4c04c55b..5c117e9b 100644 --- a/.github/workflows/server.yml +++ b/.github/workflows/server.yml @@ -85,7 +85,7 @@ jobs: cache: 'npm' - name: Yarn 설치 - run: npm install yarn + run: npm install yarn --force - name: yarn으로 패키지 설치 run: yarn install diff --git a/server/custom/pipe/mongodbObjectIdValidation.pipe.ts b/server/custom/pipe/mongodbObjectIdValidation.pipe.ts index ee4a2631..72f0c232 100644 --- a/server/custom/pipe/mongodbObjectIdValidation.pipe.ts +++ b/server/custom/pipe/mongodbObjectIdValidation.pipe.ts @@ -9,11 +9,8 @@ import mongoose from 'mongoose'; import { WINSTON_MODULE_NEST_PROVIDER } from 'nest-winston'; export class ObjectIdValidationPipe implements PipeTransform { - constructor(@Inject(WINSTON_MODULE_NEST_PROVIDER) private readonly logger: LoggerService) {} - transform(value: any, metadata: ArgumentMetadata) { if (!mongoose.Types.ObjectId.isValid(value)) { - this.logger.error(JSON.stringify('MongoDB 올바른 사용자 _id 형식이 아닙니다.')); throw new BadRequestException('올바른 사용자 _id 형식이 아닙니다.'); } return value; From b157a0b71978736ad4b4bf4f62483f943d0ca54a Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Sat, 10 Dec 2022 17:32:59 +0900 Subject: [PATCH 005/298] =?UTF-8?q?feat:=20=EB=B4=87=20=EB=A9=94=EC=84=B8?= =?UTF-8?q?=EC=A7=80=EB=A5=BC=20=EB=8B=B4=EB=8B=B9=ED=95=98=EB=8A=94=20Bot?= =?UTF-8?q?Service=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/channel/bot.service.ts | 36 ++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 server/apps/api/src/channel/bot.service.ts diff --git a/server/apps/api/src/channel/bot.service.ts b/server/apps/api/src/channel/bot.service.ts new file mode 100644 index 00000000..dc98d9d0 --- /dev/null +++ b/server/apps/api/src/channel/bot.service.ts @@ -0,0 +1,36 @@ +import { BOT_ID } from '@utils/def'; +import { makeChat } from '@chat-list/helper/makeChat'; +import { ChatListRespository } from '@repository/chat-list.respository'; +import { ChannelRepository } from '@repository/channel.repository'; +import { Injectable } from '@nestjs/common'; + +const makeBotMessageDate = () => + new Date().toLocaleDateString('ko', { + year: 'numeric', + month: 'short', + day: 'numeric', + hour: 'numeric', + minute: 'numeric', + }); + +@Injectable() +export class BotService { + constructor( + private readonly chatListRepository: ChatListRespository, + private readonly channelRepository: ChannelRepository, + ) {} + async infoMakeChannel(channel_id, nickname) { + const botMessage = { + channel_id: channel_id, + type: 'TEXT', + content: `${nickname}님이 이 채널을 ${makeBotMessageDate()}에 생성했습니다.`, + senderId: BOT_ID, + } as const; + const newChatList = await this.chatListRepository.create({ + chat: [makeChat(0, botMessage)], + }); + await this.channelRepository.addArrAtArr({ _id: channel_id }, 'chatLists', [ + newChatList._id.toString(), + ]); + } +} From 7b0d7a32ee67f8b4e40148353ff47f4aa674e232 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Sat, 10 Dec 2022 17:34:07 +0900 Subject: [PATCH 006/298] =?UTF-8?q?refactor:=20=EB=B4=87=20=EB=A9=94?= =?UTF-8?q?=EC=84=B8=EC=A7=80=20=EC=83=9D=EC=84=B1=20=EB=A1=9C=EC=A7=81bot?= =?UTF-8?q?.service=EB=A1=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/channel/channel.module.ts | 2 ++ .../apps/api/src/channel/channel.service.ts | 28 ++----------------- 2 files changed, 5 insertions(+), 25 deletions(-) diff --git a/server/apps/api/src/channel/channel.module.ts b/server/apps/api/src/channel/channel.module.ts index 108a0584..ea9e9296 100644 --- a/server/apps/api/src/channel/channel.module.ts +++ b/server/apps/api/src/channel/channel.module.ts @@ -12,6 +12,7 @@ import { UserModule } from '@user/user.module'; import { ChannelsController } from '@channel/channels.controller'; import { ChatListModule } from '@chat-list/chat-list.module'; import { ChatListRespository } from '@repository/chat-list.respository'; +import { BotService } from '@channel/bot.service'; @Module({ imports: [ @@ -27,6 +28,7 @@ import { ChatListRespository } from '@repository/chat-list.respository'; CommunityRepository, UserRepository, ChatListRespository, + BotService, ], exports: [MongooseModule], }) diff --git a/server/apps/api/src/channel/channel.service.ts b/server/apps/api/src/channel/channel.service.ts index 77117516..cf9478fb 100644 --- a/server/apps/api/src/channel/channel.service.ts +++ b/server/apps/api/src/channel/channel.service.ts @@ -13,9 +13,8 @@ import { import { ExitChannelDto } from '@channel/dto/exit-channel.dto'; import { getChannelBasicInfo, getChannelToUserForm } from '@channel/helper'; import { getUserBasicInfo } from '@user/helper/getUserBasicInfo'; -import { BOT_ID } from '@utils/def'; -import { makeChat } from '@chat-list/helper/makeChat'; import { ChatListRespository } from '@repository/chat-list.respository'; +import { BotService } from '@channel/bot.service'; @Injectable() export class ChannelService { @@ -24,6 +23,7 @@ export class ChannelService { private readonly communityRepository: CommunityRepository, private readonly chatListRepository: ChatListRespository, private readonly userRepository: UserRepository, + private readonly botService: BotService, ) {} async createChannel(createChannelDto: CreateChannelDto) { @@ -46,29 +46,7 @@ export class ChannelService { } const user = await this.userRepository.findById(managerId); - // 봇 메세지 생성 - const dateForm = new Date().toLocaleDateString('ko', { - year: 'numeric', - month: 'short', - day: 'numeric', - hour: 'numeric', - minute: 'numeric', - }); - - const botMessage = { - channel_id: channel.id, - type: 'TEXT', - content: `${user.nickname}님이 이 채널을 ${dateForm}에 생성했습니다.`, - senderId: BOT_ID, - } as const; - - const newChatList = await this.chatListRepository.create({ - chat: [makeChat(0, botMessage)], - }); - // 채널의 chatList에 봇 메세지 추가 - await this.channelRepository.addArrAtArr({ _id: channel._id }, 'chatLists', [ - newChatList._id.toString(), - ]); + this.botService.infoMakeChannel(channel._id, user.nickname); return getChannelBasicInfo(channel); } From d610d3c4e4ea294e6f952259358940d31d1ecf6d Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Sat, 10 Dec 2022 22:30:05 +0900 Subject: [PATCH 007/298] =?UTF-8?q?feat:=20create-channel.dto=EC=97=90=20n?= =?UTF-8?q?ickname=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/channel/dto/create-channel.dto.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/apps/api/src/channel/dto/create-channel.dto.ts b/server/apps/api/src/channel/dto/create-channel.dto.ts index 400d312a..53c7e7e3 100644 --- a/server/apps/api/src/channel/dto/create-channel.dto.ts +++ b/server/apps/api/src/channel/dto/create-channel.dto.ts @@ -16,6 +16,10 @@ export class CreateChannelDto { @Expose({ name: 'requestUserId' }) managerId: string; + @IsString() + @IsNotEmpty() + nickname: string; + @IsString() @IsNotEmpty() type: 'Channel' | 'DM'; From bbcc3308e570bb9c12ec7e2917f7433c52d006a6 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Sat, 10 Dec 2022 22:30:27 +0900 Subject: [PATCH 008/298] =?UTF-8?q?feat:=20ReceivedData=20decorator?= =?UTF-8?q?=EC=97=90=20nickname=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/custom/decorator/ReceivedData.decorator.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/server/custom/decorator/ReceivedData.decorator.ts b/server/custom/decorator/ReceivedData.decorator.ts index 13bca4e4..fe558a4d 100644 --- a/server/custom/decorator/ReceivedData.decorator.ts +++ b/server/custom/decorator/ReceivedData.decorator.ts @@ -7,5 +7,6 @@ export const ReceivedData = createParamDecorator((data: unknown, ctx: ExecutionC ...req.params, ...req.query, requestUserId: req.user._id, + nickname: req.user.nickname, }; }); From 48769098171e764bc9aa96bd06d1564351b5d2d9 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Sat, 10 Dec 2022 22:46:25 +0900 Subject: [PATCH 009/298] =?UTF-8?q?refactor:=20=EB=B4=87=20=EB=A9=94?= =?UTF-8?q?=EC=84=B8=EC=A7=80=20=EC=83=9D=EC=84=B1=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `channel.service` -> `channel.controller`로 이동 --- server/apps/api/src/channel/channel.controller.ts | 4 +++- server/apps/api/src/channel/channel.service.ts | 5 ----- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/server/apps/api/src/channel/channel.controller.ts b/server/apps/api/src/channel/channel.controller.ts index bb69ddf1..afdebc67 100644 --- a/server/apps/api/src/channel/channel.controller.ts +++ b/server/apps/api/src/channel/channel.controller.ts @@ -5,15 +5,17 @@ import { CreateChannelDto } from '@channel/dto'; import { responseForm } from '@utils/responseForm'; import { ReceivedData } from '@custom/decorator/ReceivedData.decorator'; import { userToManagerPipe } from '@custom/pipe/userToManger.pipe'; +import { BotService } from '@channel/bot.service'; @Controller('api/channel') export class ChannelController { - constructor(private channelService: ChannelService) {} + constructor(private channelService: ChannelService, private botService: BotService) {} @Post() @UseGuards(JwtAccessGuard) async createChannel(@ReceivedData(userToManagerPipe) createChannelDto: CreateChannelDto) { const newChannel = await this.channelService.createChannel(createChannelDto); + await this.botService.infoMakeChannel(newChannel._id, createChannelDto.nickname); delete newChannel.users; return responseForm(200, newChannel); diff --git a/server/apps/api/src/channel/channel.service.ts b/server/apps/api/src/channel/channel.service.ts index cf9478fb..03bd48a2 100644 --- a/server/apps/api/src/channel/channel.service.ts +++ b/server/apps/api/src/channel/channel.service.ts @@ -14,7 +14,6 @@ import { ExitChannelDto } from '@channel/dto/exit-channel.dto'; import { getChannelBasicInfo, getChannelToUserForm } from '@channel/helper'; import { getUserBasicInfo } from '@user/helper/getUserBasicInfo'; import { ChatListRespository } from '@repository/chat-list.respository'; -import { BotService } from '@channel/bot.service'; @Injectable() export class ChannelService { @@ -23,7 +22,6 @@ export class ChannelService { private readonly communityRepository: CommunityRepository, private readonly chatListRepository: ChatListRespository, private readonly userRepository: UserRepository, - private readonly botService: BotService, ) {} async createChannel(createChannelDto: CreateChannelDto) { @@ -44,9 +42,6 @@ export class ChannelService { // 공개 채널일 경우 : 채널 유저에 커뮤니티 사용자 모두 존재 await this.addUserToChannel(community._id, channel._id, community.users); } - const user = await this.userRepository.findById(managerId); - - this.botService.infoMakeChannel(channel._id, user.nickname); return getChannelBasicInfo(channel); } From 209317808084ec78036372e602e9e01cfeef7586 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Sat, 10 Dec 2022 22:52:09 +0900 Subject: [PATCH 010/298] =?UTF-8?q?fix:=20communityId=EA=B0=80=20=EB=B0=98?= =?UTF-8?q?=ED=99=98=EB=90=98=EC=A7=80=20=EC=95=8A=EC=9D=80=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - communit_id -> communityId로 오타 수정 --- server/apps/api/src/channel/helper/getChannelBasicInfo.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/apps/api/src/channel/helper/getChannelBasicInfo.ts b/server/apps/api/src/channel/helper/getChannelBasicInfo.ts index df94554e..c7c92966 100644 --- a/server/apps/api/src/channel/helper/getChannelBasicInfo.ts +++ b/server/apps/api/src/channel/helper/getChannelBasicInfo.ts @@ -2,7 +2,7 @@ export const getChannelBasicInfo = (channel) => { return { _id: channel._id, name: channel.name, - community_id: channel.community_id, + communityId: channel.communityId, managerId: channel.managerId, description: channel.description, type: channel.type, From c3abc295194392d5100539cb5743c6a9038ac65b Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Sat, 10 Dec 2022 22:52:55 +0900 Subject: [PATCH 011/298] =?UTF-8?q?feat:=20class-validator=EC=97=90=20whit?= =?UTF-8?q?elist:=20true=EB=A1=9C=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 검증 규칙이 정의되지 않은 프로퍼티 제거 --- server/apps/api/src/main.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/server/apps/api/src/main.ts b/server/apps/api/src/main.ts index 19d502ed..12b57f2e 100644 --- a/server/apps/api/src/main.ts +++ b/server/apps/api/src/main.ts @@ -20,6 +20,7 @@ async function bootstrap() { app.useGlobalPipes( new ValidationPipe({ validateCustomDecorators: true, + whitelist: true, }), ); app.useGlobalInterceptors(new SentryInterceptor(app.get(WINSTON_MODULE_NEST_PROVIDER))); From f3888a9f6ed29071bea0e25d8ce19de0f67dbef8 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Sat, 10 Dec 2022 23:27:19 +0900 Subject: [PATCH 012/298] =?UTF-8?q?fix:=20bot=20chatting=20type=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20(TEXT=20->=20SYSTEM)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/channel/bot.service.ts | 2 +- server/apps/api/src/chat-list/dto/restore-message.dto.ts | 2 +- server/utils/def.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/server/apps/api/src/channel/bot.service.ts b/server/apps/api/src/channel/bot.service.ts index dc98d9d0..d063f36e 100644 --- a/server/apps/api/src/channel/bot.service.ts +++ b/server/apps/api/src/channel/bot.service.ts @@ -22,7 +22,7 @@ export class BotService { async infoMakeChannel(channel_id, nickname) { const botMessage = { channel_id: channel_id, - type: 'TEXT', + type: 'SYSTEM', content: `${nickname}님이 이 채널을 ${makeBotMessageDate()}에 생성했습니다.`, senderId: BOT_ID, } as const; diff --git a/server/apps/api/src/chat-list/dto/restore-message.dto.ts b/server/apps/api/src/chat-list/dto/restore-message.dto.ts index 24404aca..b59cae0f 100644 --- a/server/apps/api/src/chat-list/dto/restore-message.dto.ts +++ b/server/apps/api/src/chat-list/dto/restore-message.dto.ts @@ -9,7 +9,7 @@ export class RestoreMessageDto { @IsString() @IsNotEmpty() - type: 'TEXT' | 'IMAGE'; + type: 'TEXT' | 'IMAGE' | 'SYSTEM'; @IsString() @IsNotEmpty() diff --git a/server/utils/def.ts b/server/utils/def.ts index d9339458..d0e76022 100644 --- a/server/utils/def.ts +++ b/server/utils/def.ts @@ -1,5 +1,5 @@ export const STATUS = ['ONLINE', 'OFFLINE', 'AFK']; export const PROVIDER = ['ASNITY', 'GITHUB']; export const CHANNEL_TYPE = ['CHANNEL', 'DM']; -export const CHAT_TYPE = ['TEXT', 'IMAGE']; +export const CHAT_TYPE = ['TEXT', 'IMAGE', 'SYSTEM']; export const BOT_ID = '639045fc61d68253e03c50da'; From a0183655d3228d11856fdc584f3abdb40e5acbee Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Sun, 11 Dec 2022 00:00:51 +0900 Subject: [PATCH 013/298] =?UTF-8?q?fix:=20isPrivate=EA=B0=80=20false?= =?UTF-8?q?=EB=A1=9C=EB=A7=8C=20=EB=82=98=EC=98=A4=EB=8A=94=20=EC=9D=B4?= =?UTF-8?q?=EC=8A=88=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 문자열 "true"로 받아야 true가 되도록 구현했던거 수정 --- server/apps/api/src/channel/dto/create-channel.dto.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/server/apps/api/src/channel/dto/create-channel.dto.ts b/server/apps/api/src/channel/dto/create-channel.dto.ts index 53c7e7e3..586563f8 100644 --- a/server/apps/api/src/channel/dto/create-channel.dto.ts +++ b/server/apps/api/src/channel/dto/create-channel.dto.ts @@ -1,5 +1,5 @@ import { IsBoolean, IsMongoId, IsNotEmpty, IsOptional, IsString, Length } from 'class-validator'; -import { Expose, Transform } from 'class-transformer'; +import { Expose } from 'class-transformer'; export class CreateChannelDto { @IsMongoId() @@ -26,7 +26,6 @@ export class CreateChannelDto { @IsBoolean() @IsNotEmpty() - @Transform(({ value }) => value === 'true') isPrivate: boolean; @IsString() From 5153882eef0e35d050da88af1d5de12445be2902 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Sun, 11 Dec 2022 00:36:34 +0900 Subject: [PATCH 014/298] =?UTF-8?q?fix:=20community=EC=97=90=20=EC=97=86?= =?UTF-8?q?=EB=8A=94=20=EC=9C=A0=EC=A0=80=20=EC=B4=88=EB=8C=80=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8F=84=EB=A1=9D=20=EC=98=88=EC=99=B8?= =?UTF-8?q?=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apps/api/src/channel/channel.service.ts | 56 +++++++++++-------- 1 file changed, 34 insertions(+), 22 deletions(-) diff --git a/server/apps/api/src/channel/channel.service.ts b/server/apps/api/src/channel/channel.service.ts index 03bd48a2..943780ff 100644 --- a/server/apps/api/src/channel/channel.service.ts +++ b/server/apps/api/src/channel/channel.service.ts @@ -65,28 +65,6 @@ export class ChannelService { } } - async addUserToChannel(community_id, channel_id, newUsers) { - // 채널 도큐먼트의 유저 필드 업데이트 - try { - await this.channelRepository.addArrAtArr({ _id: channel_id }, 'users', newUsers); - } catch (error) { - throw new BadRequestException('채널에 user 추가 중 오류 발생!'); - } - // 유저 도큐먼트의 커뮤니티:채널 필드 업데이트 - try { - await Promise.all( - newUsers.map((userId) => { - this.userRepository.updateObject( - { _id: userId }, - getChannelToUserForm(community_id, channel_id), - ); - }), - ); - } catch (error) { - throw new BadRequestException('유저 도큐먼트에 communities 필드 업데이트 중 오류 발생!'); - } - } - async getChannelInfo(channel_id) { const channel = await this.channelRepository.findOne({ _id: channel_id }); const users = await Promise.all( @@ -158,6 +136,7 @@ export class ChannelService { async inviteChannel(inviteChannelDto: InviteChannelDto) { const { community_id, channel_id, users } = inviteChannelDto; + await this.checkUserInCommunity(community_id, users); await this.addUserToChannel(community_id, channel_id, users); const channelInfo = getChannelBasicInfo(await this.channelRepository.findById(channel_id)); if (!channelInfo) throw new BadRequestException(); @@ -175,9 +154,42 @@ export class ChannelService { async joinChannel(joinChannelDto: JoinChannelDto) { const { requestUserId, channel_id, community_id } = joinChannelDto; + await this.checkUserInCommunity(community_id, [requestUserId]); await this.addUserToChannel(community_id, channel_id, [requestUserId]); const channelInfo = getChannelBasicInfo(await this.channelRepository.findById(channel_id)); if (!channelInfo) throw new BadRequestException(); return { ...channelInfo, lastRead: false }; } + + async checkUserInCommunity(community_id, newUsers) { + const community = await this.communityRepository.findById(community_id); + const userSet = new Set(community.users); + newUsers.map((user) => { + if (!userSet.has(user)) { + throw new BadRequestException('커뮤니티에 없는 유저는 채널에 참여할 수 없습니다.'); + } + }); + } + + async addUserToChannel(community_id, channel_id, newUsers) { + // 채널 도큐먼트의 유저 필드 업데이트 + try { + await this.channelRepository.addArrAtArr({ _id: channel_id }, 'users', newUsers); + } catch (error) { + throw new BadRequestException('채널에 user 추가 중 오류 발생!'); + } + // 유저 도큐먼트의 커뮤니티:채널 필드 업데이트 + try { + await Promise.all( + newUsers.map((userId) => { + this.userRepository.updateObject( + { _id: userId }, + getChannelToUserForm(community_id, channel_id), + ); + }), + ); + } catch (error) { + throw new BadRequestException('유저 도큐먼트에 communities 필드 업데이트 중 오류 발생!'); + } + } } From 1363332e486b185d5f6cf5e61c90ce54452a84a2 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Sun, 11 Dec 2022 00:38:26 +0900 Subject: [PATCH 015/298] =?UTF-8?q?feat:=20=EC=B1=84=EB=84=90=EC=97=90=20?= =?UTF-8?q?=EC=B4=88=EB=8C=80=EC=8B=9C=20user:communities=EC=97=90=20=5Fid?= =?UTF-8?q?=ED=95=84=EB=93=9C=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/channel/helper/addObjectForm.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/server/apps/api/src/channel/helper/addObjectForm.ts b/server/apps/api/src/channel/helper/addObjectForm.ts index 19bed1d1..155cebc6 100644 --- a/server/apps/api/src/channel/helper/addObjectForm.ts +++ b/server/apps/api/src/channel/helper/addObjectForm.ts @@ -1,5 +1,6 @@ export function getChannelToUserForm(community_id: string, channel_id: string) { return { + [`communities.${community_id.toString()}._id`]: community_id, [`communities.${community_id.toString()}.channels.${channel_id.toString()}`]: new Date(), }; } From c6242cb08ad006c88b826c8d0a6b9c1148a89a60 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Sun, 11 Dec 2022 01:19:24 +0900 Subject: [PATCH 016/298] =?UTF-8?q?fix:=20=EC=B1=84=EB=84=90=20=EC=9D=B4?= =?UTF-8?q?=ED=83=88=20=EC=8B=9C=20communities:=5Fid=EA=B0=80=20=EC=82=AC?= =?UTF-8?q?=EB=9D=BC=EC=A7=80=EB=8A=94=20=EC=9D=B4=EC=8A=88=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/channel/helper/addObjectForm.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/server/apps/api/src/channel/helper/addObjectForm.ts b/server/apps/api/src/channel/helper/addObjectForm.ts index 155cebc6..19bed1d1 100644 --- a/server/apps/api/src/channel/helper/addObjectForm.ts +++ b/server/apps/api/src/channel/helper/addObjectForm.ts @@ -1,6 +1,5 @@ export function getChannelToUserForm(community_id: string, channel_id: string) { return { - [`communities.${community_id.toString()}._id`]: community_id, [`communities.${community_id.toString()}.channels.${channel_id.toString()}`]: new Date(), }; } From 53e0aed6ea01740ac05ebb9b14fd9ee301299a13 Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Fri, 9 Dec 2022 17:12:32 +0900 Subject: [PATCH 017/298] =?UTF-8?q?feat:=20new=20message=20callback=20?= =?UTF-8?q?=EC=9D=B8=EC=9E=90=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- shared/socket/NewMessage.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/shared/socket/NewMessage.ts b/shared/socket/NewMessage.ts index e32282fa..555af2a0 100644 --- a/shared/socket/NewMessage.ts +++ b/shared/socket/NewMessage.ts @@ -4,4 +4,5 @@ export interface NewMessage { message: string; id: string; time: Date; + cb: () => void; } From 4e82665d459be12f343b0ddc5dbab59f815168b4 Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Fri, 9 Dec 2022 17:13:34 +0900 Subject: [PATCH 018/298] =?UTF-8?q?fix:=20api=20request=20error=20?= =?UTF-8?q?=EB=B0=9C=EC=83=9D=20=EC=8B=9C=20error=20throw=20=EB=8C=80?= =?UTF-8?q?=EC=8B=A0=20callback=20=EC=9D=B8=EC=9E=90=EB=A1=9C=20=EC=A0=84?= =?UTF-8?q?=EB=8B=AC.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/socket/src/axios/request-api-server.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/server/apps/socket/src/axios/request-api-server.ts b/server/apps/socket/src/axios/request-api-server.ts index da7dc9b7..0bcf1034 100644 --- a/server/apps/socket/src/axios/request-api-server.ts +++ b/server/apps/socket/src/axios/request-api-server.ts @@ -2,7 +2,7 @@ import axios from 'axios'; import { WsException } from '@nestjs/websockets'; export const requestApiServer = async ({ path, accessToken, data }) => { - const apiUrl = 'http://localhost:3000' + path; + const apiUrl = 'http://localhost:' + (process.env.NODE_ENV == 'dev' ? 3000 : 3001) + path; try { const response = await axios({ method: 'post', @@ -19,9 +19,12 @@ export const requestApiServer = async ({ path, accessToken, data }) => { response.data?.name?.match(/error/i) || response.data?.message?.match(/error/i) ) { - throw new WsException('API Server 요청 중 에러가 발생했습니다.'); + // throw new WsException('API Server 요청 중 에러가 발생했습니다.'); + return false; } + return true; } catch (error) { - throw new WsException('API Server 요청 중 에러가 발생했습니다.'); + // throw new WsException('API Server 요청 중 에러가 발생했습니다.'); + return false; } }; From c1599e455e303ab4dbc7792f831fe5807b717756 Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Fri, 9 Dec 2022 17:14:19 +0900 Subject: [PATCH 019/298] =?UTF-8?q?fix:=20mocking=20client=20=EC=88=98?= =?UTF-8?q?=EC=A0=95.=20callback=20=EC=9D=B8=EC=9E=90=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/socket/src/mock_client/client.js | 51 +++++++++++++++----- 1 file changed, 39 insertions(+), 12 deletions(-) diff --git a/server/apps/socket/src/mock_client/client.js b/server/apps/socket/src/mock_client/client.js index 2af10304..27b7eca7 100644 --- a/server/apps/socket/src/mock_client/client.js +++ b/server/apps/socket/src/mock_client/client.js @@ -1,9 +1,10 @@ import { io } from 'socket.io-client'; const port = 8080; +const url = 'http://localhost'; //49.50.167.202'; // 형식은 'commu-{community id}' const accessToken = - 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2MzkwNDU4ODNmNDI2OGUxMjY3OGVmN2YiLCJuaWNrbmFtZSI6Im55IiwiaWF0IjoxNjcwNDc3MjY1LCJleHAiOjE2NzA0NzgxNjV9._XlBanHCSOZXBWlYVlVmnIVKEY88-jH1d_yBGorPxIY'; + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2MzkwNDU4ODNmNDI2OGUxMjY3OGVmN2YiLCJuaWNrbmFtZSI6Im55IiwiaWF0IjoxNjcwNTcyMjc0LCJleHAiOjE2NzA1NzMxNzR9.OzrbH5xFaOXJZjvYwLmAoY95jb6kJDEo0qkjKU7dlJU'; const accessToken2 = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2Mzg0NWNiMTU0NDRmMGEyMGRlNTYxMDUiLCJuaWNrbmFtZSI6InNvb21hbiIsImlhdCI6MTY2OTY1MTM1NywiZXhwIjoxNjY5NjUyMjU3fQ.T3OGoF2hz4ew1iw2c4TA1tldHgTwDxkEyUFBkfUqeHo'; const opt = { @@ -12,22 +13,29 @@ const opt = { }, }; try { - const helloSocket = io(`http://localhost:${port}/socket/commu-hello`, opt); - // const worldSocket = io(`http://localhost:${port}/socket/commu-world`); // 다른 namesapce + const helloSocket = io(`${url}:${port}/socket/commu-hello`, opt); + // console.log(helloSocket); + const worldSocket = io(`${url}:${port}/socket/commu-world`, opt); // 다른 namesapce // console.log(helloSocket.connected); // 연결되었는지 true, false로 나옴 // 처음 연결 후 channel 배열을 전달해야함 const result = helloSocket.emit('join', { channels: ['639086392258e789af7d736e', 'b', 'c'] }); - // worldSocket.emit('join', { channels: ['x', 'y', 'z'] }); + worldSocket.emit('join', { channels: ['x', 'y', 'z'] }); // console.log(result); - // console.log(helloSocket); - // message listen + // // console.log(helloSocket); + // // message listen + const hello = (c) => { + console.log(c); + }; helloSocket.on('new-message', ({ channelId, user_id, message, time }) => { console.log( `new message channel : ${channelId}, sender : ${user_id}, msg : [${time}]${message}`, ); }); + worldSocket.on('new-message', ({ channelId, user_id, message, time }) => { + console.log(`new world channel : ${channelId}, sender : ${user_id}, msg : [${time}]${message}`); + }); helloSocket.on('modify-message', ({ channelId, user_id, messageId, message }) => { console.log( `modify message channel : ${channelId}, sender : ${user_id}, msg(${messageId}) : ${message}`, @@ -41,12 +49,31 @@ try { console.log('fail error ', message); }); // message 전송 - helloSocket.emit('new-message', { - channelId: '639086392258e789af7d736e', - user_id: '639045883f4268e12678ef7f', - message: 'hi its third message', - time: new Date(), - }); + helloSocket.emit( + 'new-message', + { + channelId: '639086392258e789af7d736e', + user_id: '639045883f4268e12678ef7f', + message: 'hi its third message', + time: new Date(), + }, + (c) => { + console.log(c); + }, + ); + + worldSocket.emit( + 'new-message', + { + channelId: 'x', + user_id: '639045883f4268e12678ef7f', + message: 'hi its third message', + time: new Date(), + }, + (c) => { + console.log(c, 'this is world'); + }, + ); helloSocket.emit('modify-message', { channelId: '639086392258e789af7d736e', From 81e7fcff639c024d00f63d525683783cc516f106 Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Fri, 9 Dec 2022 17:18:00 +0900 Subject: [PATCH 020/298] =?UTF-8?q?feat:=20new-message=20callback=20?= =?UTF-8?q?=EC=9D=B8=EC=9E=90=20=EC=8B=A4=ED=96=89=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - new-message를 보낸 전송자는 new-message를 받지 않도록 수정 --- server/apps/socket/src/socket.gateway.ts | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/server/apps/socket/src/socket.gateway.ts b/server/apps/socket/src/socket.gateway.ts index c3b41c6a..1006a0d4 100644 --- a/server/apps/socket/src/socket.gateway.ts +++ b/server/apps/socket/src/socket.gateway.ts @@ -9,8 +9,8 @@ import { WebSocketServer, WsException, } from '@nestjs/websockets'; -import { Server, Socket } from 'socket.io'; -import { Logger, UnauthorizedException, UseFilters } from '@nestjs/common'; +import { Server } from 'socket.io'; +import { Logger, UseFilters } from '@nestjs/common'; import { Join, NewMessage, ModifyMessage } from '@socketInterface/index'; import { SocketWithAuth } from './types'; import { JwtService } from '@nestjs/jwt'; @@ -51,11 +51,10 @@ export class SocketGateway implements OnGatewayInit, OnGatewayConnection, OnGate @MessageBody() data: NewMessage, @ConnectedSocket() socket: SocketWithAuth, ) { - const community = socket.nsp; const communityName = socket.nsp.name; const { id, channelId, user_id, message, time } = data; this.logger.log( - `\nnew message : \n\tns : ${communityName}\n\tchannel : ${channelId}\n\tFrom ${user_id}: [${time}] ${message}`, + `New message. [NS] : ${communityName}, [channel] : ${channelId} [From] ${user_id},[MSG][${time}]:${message}`, ); const restoreMessageDto: RestoreMessageDto = { channel_id: channelId, @@ -64,12 +63,17 @@ export class SocketGateway implements OnGatewayInit, OnGatewayConnection, OnGate senderId: socket.user._id, }; const apiUrl = storeMessageURL(channelId); - await requestApiServer({ + const result = await requestApiServer({ path: apiUrl, accessToken: socket.user.accessToken, data: restoreMessageDto, }); - community.to(channelId).emit('new-message', data); + if (result) { + socket.to(channelId).emit('new-message', data); + } + + const written = result; + return { written }; } @SubscribeMessage('modify-message') @@ -81,7 +85,7 @@ export class SocketGateway implements OnGatewayInit, OnGatewayConnection, OnGate const communityName = socket.nsp.name; const { channelId, user_id, message, messageId } = data; this.logger.log( - `\nmodify message : \n\tns : ${communityName}\n\tchannel : ${channelId}\n\tFrom ${user_id}: ${message}\n\torigin id : ${messageId}`, + `Modify message. [NS] : ${communityName}, [channel] : ${channelId} [From] ${user_id}, [MSG] : ${message}, [Origin id] : ${messageId}`, ); community.to(channelId).emit('modify-message', data); // TODO : db에 message data 수정을 여기서할지 논의하기 @@ -98,7 +102,7 @@ export class SocketGateway implements OnGatewayInit, OnGatewayConnection, OnGate this.logger.log(`Client Disconnected : [NS] '${socket.nsp.name}', [ID] ${socket.id}`); } - handleConnection(socket: SocketWithAuth, ...args: any[]) { + handleConnection(socket: SocketWithAuth) { // client의 connect event this.logger.log(`Client Connected : [NS] '${socket.nsp.name}', [ID] ${socket.id}`); } From 60196293cc8486baf43e0d4842a72b239cb88655 Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Sun, 11 Dec 2022 04:20:37 +0900 Subject: [PATCH 021/298] =?UTF-8?q?refactor:=20interceptor=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=20=EB=B3=80=EA=B2=BD,=20response=20=EC=A0=84=EB=8B=AC?= =?UTF-8?q?=20=EC=8B=9C=20=EC=9E=90=EB=8F=99=20resposeForm=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EA=B0=90=EC=8B=B8=EA=B8=B0=20#249?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../interceptor/api.interceptor.ts} | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) rename server/{apps/api/src/webhook.interceptor.ts => custom/interceptor/api.interceptor.ts} (77%) diff --git a/server/apps/api/src/webhook.interceptor.ts b/server/custom/interceptor/api.interceptor.ts similarity index 77% rename from server/apps/api/src/webhook.interceptor.ts rename to server/custom/interceptor/api.interceptor.ts index d717e776..9dce16a5 100644 --- a/server/apps/api/src/webhook.interceptor.ts +++ b/server/custom/interceptor/api.interceptor.ts @@ -6,7 +6,7 @@ import { LoggerService, NestInterceptor, } from '@nestjs/common'; -import { catchError } from 'rxjs/operators'; +import { catchError, map } from 'rxjs/operators'; import { IncomingWebhook } from '@slack/webhook'; import { of } from 'rxjs'; import * as Sentry from '@sentry/minimal'; @@ -14,11 +14,19 @@ import * as ip from 'ip'; import { WINSTON_MODULE_NEST_PROVIDER } from 'nest-winston'; @Injectable() -export class SentryInterceptor implements NestInterceptor { +export class ApiInterceptor implements NestInterceptor { constructor(@Inject(WINSTON_MODULE_NEST_PROVIDER) private readonly logger: LoggerService) {} intercept(_: ExecutionContext, next: CallHandler) { return next.handle().pipe( + map((data) => { + if (typeof data == 'object' && Object.keys(data).includes('statusCode')) { + // 이미 responseForm 으로 감싸진 경우 그대로 전달 + return data; + } else { + return { statusCode: 200, result: { ...data } }; + } + }), catchError((error) => { this.logger.error(error.response ?? error); if (process.env.NODE_ENV == 'prod') { From d2688d8da829d8daecd311d899ce49ad939fc68c Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Sun, 11 Dec 2022 04:26:38 +0900 Subject: [PATCH 022/298] =?UTF-8?q?fix:=20dev-be=20merge=20=EC=8B=9C?= =?UTF-8?q?=EC=97=90=EB=A7=8C=20=EB=B0=B0=ED=8F=AC=ED=95=98=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/server.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/server.yml b/.github/workflows/server.yml index 5c117e9b..4d12b85f 100644 --- a/.github/workflows/server.yml +++ b/.github/workflows/server.yml @@ -12,7 +12,7 @@ on: jobs: build_api: - if: github.event.pull_request.merged == true + if: ${{ github.event.pull_request.merged == true && contains(github.ref, 'dev-be')}} runs-on: ubuntu-latest steps: - name: 체크아웃 @@ -49,7 +49,7 @@ jobs: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_ASUMI_URL }} if: always() build_socket: - if: github.event.pull_request.merged == true + if: ${{ github.event.pull_request.merged == true && contains(github.ref, 'dev-be')}} runs-on: ubuntu-latest steps: - name: 체크아웃 @@ -109,7 +109,7 @@ jobs: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_FAIL_WEBHOOK_URL }} if: failure() nCloudDeploy: - if: github.event.pull_request.merged == true + if: ${{ github.event.pull_request.merged == true && contains(github.ref, 'dev-be')}} needs: [build_api, build_socket] runs-on: ubuntu-latest steps: From d386a7edcd50504cf12b666679e5e6727a20f64a Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Sun, 11 Dec 2022 04:27:07 +0900 Subject: [PATCH 023/298] =?UTF-8?q?feature:=20test=20interceptor=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20#249?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/test/community.e2e-spec.ts | 3 +++ server/apps/api/test/user.e2e-spec.ts | 3 +++ 2 files changed, 6 insertions(+) diff --git a/server/apps/api/test/community.e2e-spec.ts b/server/apps/api/test/community.e2e-spec.ts index 95a7c2aa..c02cafbe 100644 --- a/server/apps/api/test/community.e2e-spec.ts +++ b/server/apps/api/test/community.e2e-spec.ts @@ -13,6 +13,8 @@ import { followingURL, signupURL, singinURL } from '@api/test/urls/urls'; import { CommunityModule } from '@community/community.module'; import { Community, CommunitySchema } from '@schemas/community.schema'; import { communityDto1, modifyCommunityDto1 } from '@mock/community.mock'; +import { ApiInterceptor } from '@custom/interceptor/api.interceptor'; +import { WINSTON_MODULE_NEST_PROVIDER } from 'nest-winston'; describe('Community E2E Test', () => { let app, server, userModel, communityModel, mongod, user1; @@ -32,6 +34,7 @@ describe('Community E2E Test', () => { userModel = mongod.model(User.name, UserSchema); communityModel = mongod.model(Community.name, CommunitySchema); app = moduleRef.createNestApplication(); + app.useGlobalInterceptors(new ApiInterceptor(app.get(WINSTON_MODULE_NEST_PROVIDER))); await app.init(); }); diff --git a/server/apps/api/test/user.e2e-spec.ts b/server/apps/api/test/user.e2e-spec.ts index a48f19e5..16c11eda 100644 --- a/server/apps/api/test/user.e2e-spec.ts +++ b/server/apps/api/test/user.e2e-spec.ts @@ -10,6 +10,8 @@ import { initTestUser1, initTestUser2, user1Modify } from '@mock/user.mock'; import { importConfigModule } from '@api/modules/Config.module'; import { importWinstonModule } from '@api/modules/Winstone.module'; import { followingURL, signupURL, singinURL } from '@api/test/urls/urls'; +import { ApiInterceptor } from '@custom/interceptor/api.interceptor'; +import { WINSTON_MODULE_NEST_PROVIDER } from 'nest-winston'; describe('User E2E Test', () => { let app, server, userModel, mongod, user1; @@ -23,6 +25,7 @@ describe('User E2E Test', () => { mongod = await moduleRef.get(getConnectionToken()); userModel = mongod.model(User.name, UserSchema); app = moduleRef.createNestApplication(); + app.useGlobalInterceptors(new ApiInterceptor(app.get(WINSTON_MODULE_NEST_PROVIDER))); await app.init(); }); From b06442055e150ddd570e25995d0769985fa9c006 Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Sun, 11 Dec 2022 04:28:18 +0900 Subject: [PATCH 024/298] =?UTF-8?q?feature:=20user,=20community,=20auth(?= =?UTF-8?q?=ED=9A=8C=EC=9B=90=EA=B0=80=EC=9E=85,=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8)=20controller=20responseForm=20=EC=82=AD=EC=A0=9C=20#?= =?UTF-8?q?249?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/auth/auth.controller.ts | 4 ++-- .../apps/api/src/community/communities.controller.ts | 12 ++++++------ .../apps/api/src/community/community.controller.ts | 2 +- server/apps/api/src/main.ts | 4 ++-- server/apps/api/src/user/user.controller.ts | 8 ++++---- server/apps/api/src/user/users.controller.ts | 2 +- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/server/apps/api/src/auth/auth.controller.ts b/server/apps/api/src/auth/auth.controller.ts index a09c9f3a..36aae55f 100644 --- a/server/apps/api/src/auth/auth.controller.ts +++ b/server/apps/api/src/auth/auth.controller.ts @@ -13,7 +13,7 @@ export class AuthController { @Post('signup') // 회원가입 async signUp(@Body() signUpDto: SignUpDto) { await this.authService.signUp(signUpDto); - return responseForm(200, { message: '회원가입 성공!' }); + return { message: '회원가입 성공!' }; } @Post('signin') // 로그인 @@ -26,7 +26,7 @@ export class AuthController { secure: false, maxAge: 360000000, // 100시간 만료 }); - return responseForm(200, { message: '로그인 성공!', accessToken }); + return { message: '로그인 성공!', accessToken }; } @Post('refresh') // AccessToken 재발행 diff --git a/server/apps/api/src/community/communities.controller.ts b/server/apps/api/src/community/communities.controller.ts index d749fb6b..f2a5677d 100644 --- a/server/apps/api/src/community/communities.controller.ts +++ b/server/apps/api/src/community/communities.controller.ts @@ -15,7 +15,7 @@ export class CommunitiesController { async getCommunities(@Req() req: any) { const requestUserid = req.user._id; const result = await this.communityService.getCommunities(requestUserid); - return responseForm(200, result); + return result; } @Post(':community_id/users') @@ -24,14 +24,14 @@ export class CommunitiesController { @ReceivedData() appendUsersToCommunityDto: AppendUsersToCommunityDto, ) { await this.communityService.appendUsersToCommunity(appendUsersToCommunityDto); - return responseForm(200, { message: '커뮤니티 사용자 추가 완료' }); + return { message: '커뮤니티 사용자 추가 완료' }; } @Delete(':community_id') @UseGuards(JwtAccessGuard) async deleteCommunity(@ReceivedData() deleteCommunityDto: DeleteCommunityDto) { await this.communityService.deleteCommunity(deleteCommunityDto); - return responseForm(200, { message: '커뮤니티 삭제 성공' }); + return { message: '커뮤니티 삭제 성공' }; } @Get(':community_id/users') @@ -40,7 +40,7 @@ export class CommunitiesController { @ReceivedData() requestUserAboutCommunityDto: RequestUserAboutCommunityDto, ) { const result = await this.communityService.getUsersInCommunity(requestUserAboutCommunityDto); - return responseForm(200, result); + return result; } @Delete(':community_id/me') @@ -49,13 +49,13 @@ export class CommunitiesController { @ReceivedData() requestUserAboutCommunityDto: RequestUserAboutCommunityDto, ) { await this.communityService.exitUserInCommunity(requestUserAboutCommunityDto); - return responseForm(200, { message: '사용자 커뮤니티 탈퇴 성공' }); + return { message: '사용자 커뮤니티 탈퇴 성공' }; } @Patch(':community_id/settings') @UseGuards(JwtAccessGuard) async modifyCommunitySetting(@ReceivedData() modifyCommunityDto: ModifyCommunityDto) { await this.communityService.modifyCommunity(modifyCommunityDto); - return responseForm(200, { message: '커뮤니티 정보 수정 완료' }); + return { message: '커뮤니티 정보 수정 완료' }; } } diff --git a/server/apps/api/src/community/community.controller.ts b/server/apps/api/src/community/community.controller.ts index 0a7ad781..e37bc984 100644 --- a/server/apps/api/src/community/community.controller.ts +++ b/server/apps/api/src/community/community.controller.ts @@ -14,6 +14,6 @@ export class CommunityController { @UseGuards(JwtAccessGuard) async crateCommunity(@ReceivedData(userToManagerPipe) createCommunityDto: CreateCommunityDto) { const result = await this.communityService.createCommunity(createCommunityDto); - return responseForm(200, result); + return result; } } diff --git a/server/apps/api/src/main.ts b/server/apps/api/src/main.ts index 12b57f2e..6b103c48 100644 --- a/server/apps/api/src/main.ts +++ b/server/apps/api/src/main.ts @@ -3,7 +3,7 @@ import { WINSTON_MODULE_NEST_PROVIDER } from 'nest-winston'; import { ApiModule } from './api.module'; import { ValidationPipe } from '@nestjs/common'; import * as Sentry from '@sentry/node'; -import { SentryInterceptor } from './webhook.interceptor'; +import { ApiInterceptor } from '@custom/interceptor/api.interceptor'; import * as cookieParser from 'cookie-parser'; import * as morgan from 'morgan'; @@ -23,7 +23,7 @@ async function bootstrap() { whitelist: true, }), ); - app.useGlobalInterceptors(new SentryInterceptor(app.get(WINSTON_MODULE_NEST_PROVIDER))); + app.useGlobalInterceptors(new ApiInterceptor(app.get(WINSTON_MODULE_NEST_PROVIDER))); if (process.env.NODE_ENV == 'prod') { Sentry.init({ dsn: process.env.SENTRY_DSN, diff --git a/server/apps/api/src/user/user.controller.ts b/server/apps/api/src/user/user.controller.ts index a0929bfc..92b969ab 100644 --- a/server/apps/api/src/user/user.controller.ts +++ b/server/apps/api/src/user/user.controller.ts @@ -15,7 +15,7 @@ export class UserController { const myId = req.user._id; const addFollowingDto: FollowerDto = { myId, followId: id }; const result = await this.userService.toggleFollowing(addFollowingDto); - return responseForm(200, result); + return result; } @Get('followers') @@ -23,7 +23,7 @@ export class UserController { async getFollowers(@Req() req: any) { const _id = req.user._id; const result = await this.userService.getRelatedUsers(_id, 'followers'); - return responseForm(200, { followers: result }); + return { followers: result }; } @Get('followings') @@ -31,7 +31,7 @@ export class UserController { async getFollowings(@Req() req: any) { const _id = req.user._id; const result = await this.userService.getRelatedUsers(_id, 'followings'); - return responseForm(200, { followings: result }); + return { followings: result }; } @Patch('settings') @@ -39,6 +39,6 @@ export class UserController { async modifyUserSetting(@Body() modifyUserDto: ModifyUserDto, @Req() req: any) { const _id = req.user._id; await this.userService.modifyUser({ ...modifyUserDto, _id }); - return responseForm(200, { message: '사용자 정보 변경 완료' }); + return { message: '사용자 정보 변경 완료' }; } } diff --git a/server/apps/api/src/user/users.controller.ts b/server/apps/api/src/user/users.controller.ts index d98fcc99..d3d7b805 100644 --- a/server/apps/api/src/user/users.controller.ts +++ b/server/apps/api/src/user/users.controller.ts @@ -9,6 +9,6 @@ export class UsersController { @Get() async getUser(@Query('search') id: string) { const result = await this.userService.getUser(id); - return responseForm(200, { users: result }); + return { users: result }; } } From 0436f9e625db8412342946abf60e93f292d572b8 Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Sun, 11 Dec 2022 18:27:35 +0900 Subject: [PATCH 025/298] =?UTF-8?q?refactor:=20=EC=A0=84=EC=B2=B4=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/auth/auth.controller.ts | 6 +++--- server/apps/api/src/channel/channel.controller.ts | 3 +-- .../apps/api/src/channel/channels.controller.ts | 15 +++++++-------- .../api/src/chat-list/chat-list.controller.ts | 7 +++---- .../api/src/community/communities.controller.ts | 1 - .../api/src/community/community.controller.ts | 1 - server/apps/api/src/user/user.controller.ts | 1 - server/apps/api/src/user/users.controller.ts | 1 - 8 files changed, 14 insertions(+), 21 deletions(-) diff --git a/server/apps/api/src/auth/auth.controller.ts b/server/apps/api/src/auth/auth.controller.ts index 36aae55f..a2c49558 100644 --- a/server/apps/api/src/auth/auth.controller.ts +++ b/server/apps/api/src/auth/auth.controller.ts @@ -36,7 +36,7 @@ export class AuthController { if (accessToken === null) { return responseForm(401, { message: '로그인 필요' }); } - return responseForm(200, { message: 'accessToken 재발행 성공!', accessToken }); + return { message: 'accessToken 재발행 성공!', accessToken }; } @Get('me') // 자신의 유저 정보 제공 @@ -44,7 +44,7 @@ export class AuthController { async getMyInfo(@Req() req: any) { const userId = req.user._id; const myInfo = await this.authService.getMyInfo(userId); - return responseForm(200, getUserBasicInfo(myInfo)); + return getUserBasicInfo(myInfo); } @Post('signout') @@ -52,6 +52,6 @@ export class AuthController { async singOut(@Req() req: any, @Res({ passthrough: true }) res: Response) { await this.authService.signOut(req.user._id); // DB에서 refreshToken 제거 res.cookie('refreshToken', 'expired', { maxAge: -1 }); // client에서 refreshToken 제거 - return responseForm(200, { message: '로그아웃 성공!' }); + return { message: '로그아웃 성공!' }; } } diff --git a/server/apps/api/src/channel/channel.controller.ts b/server/apps/api/src/channel/channel.controller.ts index afdebc67..4140ac6e 100644 --- a/server/apps/api/src/channel/channel.controller.ts +++ b/server/apps/api/src/channel/channel.controller.ts @@ -2,7 +2,6 @@ import { Controller, Post, UseGuards } from '@nestjs/common'; import { ChannelService } from '@channel/channel.service'; import { JwtAccessGuard } from '@auth/guard'; import { CreateChannelDto } from '@channel/dto'; -import { responseForm } from '@utils/responseForm'; import { ReceivedData } from '@custom/decorator/ReceivedData.decorator'; import { userToManagerPipe } from '@custom/pipe/userToManger.pipe'; import { BotService } from '@channel/bot.service'; @@ -18,6 +17,6 @@ export class ChannelController { await this.botService.infoMakeChannel(newChannel._id, createChannelDto.nickname); delete newChannel.users; - return responseForm(200, newChannel); + return newChannel; } } diff --git a/server/apps/api/src/channel/channels.controller.ts b/server/apps/api/src/channel/channels.controller.ts index 9038ded2..aeee77b2 100644 --- a/server/apps/api/src/channel/channels.controller.ts +++ b/server/apps/api/src/channel/channels.controller.ts @@ -1,5 +1,4 @@ import { Controller, Delete, Get, Param, Patch, Post, UseGuards } from '@nestjs/common'; -import { responseForm } from '@utils/responseForm'; import { ChannelService } from '@channel/channel.service'; import { DeleteChannelDto, @@ -21,48 +20,48 @@ export class ChannelsController { @UseGuards(JwtAccessGuard) async modifyChannel(@ReceivedData() modifyChannelDto: ModifyChannelDto) { await this.channelService.modifyChannel(modifyChannelDto); - return responseForm(200, { message: '채널 수정 성공!' }); + return { message: '채널 수정 성공!' }; } @Delete(':channel_id/me') @UseGuards(JwtAccessGuard) async exitChannel(@ReceivedData() exitChannelDto: ExitChannelDto) { await this.channelService.exitChannel(exitChannelDto); - return responseForm(200, { message: '채널 퇴장 성공!' }); + return { message: '채널 퇴장 성공!' }; } @Get(':channel_id') @UseGuards(JwtAccessGuard) async getChannelInfo(@Param('channel_id', ObjectIdValidationPipe) channel_id) { const channelInfo = await this.channelService.getChannelInfo(channel_id); - return responseForm(200, channelInfo); + return channelInfo; } @Delete(':channel_id') @UseGuards(JwtAccessGuard) async deleteChannel(@ReceivedData() deleteChannelDto: DeleteChannelDto) { await this.channelService.deleteChannel(deleteChannelDto); - return responseForm(200, { message: '채널 삭제 성공' }); + return { message: '채널 삭제 성공' }; } @Post(':channel_id/users') @UseGuards(JwtAccessGuard) async inviteChannel(@ReceivedData() inviteChannelDto: InviteChannelDto) { const channelInfo = await this.channelService.inviteChannel(inviteChannelDto); - return responseForm(200, channelInfo); + return channelInfo; } @Patch(':channel_id/lastRead') @UseGuards(JwtAccessGuard) async updateLastRead(@ReceivedData() updateLastReadDto: UpdateLastReadDto) { await this.channelService.updateLastRead(updateLastReadDto); - return responseForm(200, { message: 'Last Read 업데이트 성공' }); + return { message: 'Last Read 업데이트 성공' }; } @Post(':channel_id') @UseGuards(JwtAccessGuard) async joinChannel(@ReceivedData() joinChannelDto: JoinChannelDto) { const channelInfo = await this.channelService.joinChannel(joinChannelDto); - return responseForm(200, channelInfo); + return channelInfo; } } diff --git a/server/apps/api/src/chat-list/chat-list.controller.ts b/server/apps/api/src/chat-list/chat-list.controller.ts index 9995f3cd..5f786e6b 100644 --- a/server/apps/api/src/chat-list/chat-list.controller.ts +++ b/server/apps/api/src/chat-list/chat-list.controller.ts @@ -2,7 +2,6 @@ import { Body, Controller, Get, Param, Post, Query, Req, UseGuards } from '@nest import { ChatListService } from '@chat-list/chat-list.service'; import { JwtAccessGuard } from '@auth/guard'; import { RestoreMessageDto } from '@chat-list/dto'; -import { responseForm } from '@utils/responseForm'; @Controller('api/channels') export class ChatListController { @@ -21,7 +20,7 @@ export class ChatListController { channel_id, senderId: requestUserId, }); - return responseForm(200, { message: '채팅 저장 성공!' }); + return { message: '채팅 저장 성공!' }; } @Get(':channel_id/message') @@ -33,7 +32,7 @@ export class ChatListController { requestUserId, channel_id, }); - return responseForm(200, chatList); + return chatList; } @Get(':channel_id/unread-message') @UseGuards(JwtAccessGuard) @@ -43,6 +42,6 @@ export class ChatListController { requestUserId, channel_id, }); - return responseForm(200, { unreadChatId }); + return { unreadChatId }; } } diff --git a/server/apps/api/src/community/communities.controller.ts b/server/apps/api/src/community/communities.controller.ts index f2a5677d..e12184df 100644 --- a/server/apps/api/src/community/communities.controller.ts +++ b/server/apps/api/src/community/communities.controller.ts @@ -1,6 +1,5 @@ import { Controller, Delete, Get, Patch, Post, Req, UseGuards } from '@nestjs/common'; import { CommunityService } from '@api/src/community/community.service'; -import { responseForm } from '@utils/responseForm'; import { JwtAccessGuard } from '@api/src/auth/guard'; import { AppendUsersToCommunityDto, DeleteCommunityDto, ModifyCommunityDto } from '@community/dto'; import { RequestUserAboutCommunityDto } from '@community/dto/request-user-about-community.dto'; diff --git a/server/apps/api/src/community/community.controller.ts b/server/apps/api/src/community/community.controller.ts index e37bc984..a082fe70 100644 --- a/server/apps/api/src/community/community.controller.ts +++ b/server/apps/api/src/community/community.controller.ts @@ -1,6 +1,5 @@ import { Controller, Post, UseGuards } from '@nestjs/common'; import { CommunityService } from '@api/src/community/community.service'; -import { responseForm } from '@utils/responseForm'; import { JwtAccessGuard } from '@api/src/auth/guard'; import { ReceivedData } from '@custom/decorator/ReceivedData.decorator'; import { userToManagerPipe } from '@custom/pipe/userToManger.pipe'; diff --git a/server/apps/api/src/user/user.controller.ts b/server/apps/api/src/user/user.controller.ts index 92b969ab..486d10fa 100644 --- a/server/apps/api/src/user/user.controller.ts +++ b/server/apps/api/src/user/user.controller.ts @@ -1,6 +1,5 @@ import { Body, Controller, Get, Param, Patch, Post, Req, UseGuards } from '@nestjs/common'; import { UserService } from './user.service'; -import { responseForm } from '@utils/responseForm'; import { JwtAccessGuard } from '@api/src/auth/guard'; import { FollowerDto, ModifyUserDto } from './dto'; import { ObjectIdValidationPipe } from '@custom/pipe/mongodbObjectIdValidation.pipe'; diff --git a/server/apps/api/src/user/users.controller.ts b/server/apps/api/src/user/users.controller.ts index d3d7b805..d91e5cf2 100644 --- a/server/apps/api/src/user/users.controller.ts +++ b/server/apps/api/src/user/users.controller.ts @@ -1,6 +1,5 @@ import { Controller, Get, Query } from '@nestjs/common'; import { UserService } from './user.service'; -import { responseForm } from '@utils/responseForm'; @Controller('api/users') export class UsersController { From 6b2db5dec33e140b7f0541a56812febdf129c779 Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Fri, 9 Dec 2022 21:14:21 +0900 Subject: [PATCH 026/298] =?UTF-8?q?feat:=20=EC=82=AC=EC=9A=A9=EC=9E=90=20?= =?UTF-8?q?=EC=B1=84=EB=84=90=20=EC=B4=88=EB=8C=80=20=EC=86=8C=EC=BC=93=20?= =?UTF-8?q?=EC=9D=B4=EB=B2=A4=ED=8A=B8=20=EC=9E=91=EC=84=B1=20#313?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../socket/src/axios/request-api-server.ts | 3 +- .../apps/socket/src/axios/request-api-urls.ts | 2 + server/apps/socket/src/mock_client/client.js | 16 ++--- server/apps/socket/src/socket.gateway.ts | 59 +++++++++++++++---- shared/socket/InviteChannel.ts | 5 ++ shared/socket/index.ts | 1 + 6 files changed, 64 insertions(+), 22 deletions(-) create mode 100644 server/apps/socket/src/axios/request-api-urls.ts create mode 100644 shared/socket/InviteChannel.ts diff --git a/server/apps/socket/src/axios/request-api-server.ts b/server/apps/socket/src/axios/request-api-server.ts index 0bcf1034..0ece7023 100644 --- a/server/apps/socket/src/axios/request-api-server.ts +++ b/server/apps/socket/src/axios/request-api-server.ts @@ -16,13 +16,14 @@ export const requestApiServer = async ({ path, accessToken, data }) => { }); if ( response.status >= 300 || + response.data?.statusCode > 300 || response.data?.name?.match(/error/i) || response.data?.message?.match(/error/i) ) { // throw new WsException('API Server 요청 중 에러가 발생했습니다.'); return false; } - return true; + return response.data.result ?? true; } catch (error) { // throw new WsException('API Server 요청 중 에러가 발생했습니다.'); return false; diff --git a/server/apps/socket/src/axios/request-api-urls.ts b/server/apps/socket/src/axios/request-api-urls.ts new file mode 100644 index 00000000..40585fa9 --- /dev/null +++ b/server/apps/socket/src/axios/request-api-urls.ts @@ -0,0 +1,2 @@ +export const storeMessageURL = (channelId) => `/api/channels/${channelId}/message`; +export const joinChannelInUsersURL = (channelId) => `/api/channels/${channelId}/users`; diff --git a/server/apps/socket/src/mock_client/client.js b/server/apps/socket/src/mock_client/client.js index 27b7eca7..5361495c 100644 --- a/server/apps/socket/src/mock_client/client.js +++ b/server/apps/socket/src/mock_client/client.js @@ -4,7 +4,7 @@ const port = 8080; const url = 'http://localhost'; //49.50.167.202'; // 형식은 'commu-{community id}' const accessToken = - 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2MzkwNDU4ODNmNDI2OGUxMjY3OGVmN2YiLCJuaWNrbmFtZSI6Im55IiwiaWF0IjoxNjcwNTcyMjc0LCJleHAiOjE2NzA1NzMxNzR9.OzrbH5xFaOXJZjvYwLmAoY95jb6kJDEo0qkjKU7dlJU'; + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2MzkwNDVhOWNhYTIwZGVlZmQ1Yzc2NWUiLCJuaWNrbmFtZSI6InNvb21hbiIsImlhdCI6MTY3MDU4NzQ2NywiZXhwIjoxNjcwNTg4MzY3fQ.cmD3b_f5l0IkrNs85XpUzBXRRKEFBVWdkiSB6XxXIXs'; const accessToken2 = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2Mzg0NWNiMTU0NDRmMGEyMGRlNTYxMDUiLCJuaWNrbmFtZSI6InNvb21hbiIsImlhdCI6MTY2OTY1MTM1NywiZXhwIjoxNjY5NjUyMjU3fQ.T3OGoF2hz4ew1iw2c4TA1tldHgTwDxkEyUFBkfUqeHo'; const opt = { @@ -14,20 +14,14 @@ const opt = { }; try { const helloSocket = io(`${url}:${port}/socket/commu-hello`, opt); - // console.log(helloSocket); const worldSocket = io(`${url}:${port}/socket/commu-world`, opt); // 다른 namesapce // console.log(helloSocket.connected); // 연결되었는지 true, false로 나옴 // 처음 연결 후 channel 배열을 전달해야함 - const result = helloSocket.emit('join', { channels: ['639086392258e789af7d736e', 'b', 'c'] }); + const result = helloSocket.emit('join', { channels: ['a', 'b', 'c'] }); worldSocket.emit('join', { channels: ['x', 'y', 'z'] }); - // console.log(result); - // // console.log(helloSocket); - // // message listen - const hello = (c) => { - console.log(c); - }; + helloSocket.on('new-message', ({ channelId, user_id, message, time }) => { console.log( `new message channel : ${channelId}, sender : ${user_id}, msg : [${time}]${message}`, @@ -58,7 +52,7 @@ try { time: new Date(), }, (c) => { - console.log(c); + console.log(c.written, ' this is hello'); }, ); @@ -71,7 +65,7 @@ try { time: new Date(), }, (c) => { - console.log(c, 'this is world'); + console.log(c.written, ' this is world'); }, ); diff --git a/server/apps/socket/src/socket.gateway.ts b/server/apps/socket/src/socket.gateway.ts index 1006a0d4..be3f0551 100644 --- a/server/apps/socket/src/socket.gateway.ts +++ b/server/apps/socket/src/socket.gateway.ts @@ -11,16 +11,16 @@ import { } from '@nestjs/websockets'; import { Server } from 'socket.io'; import { Logger, UseFilters } from '@nestjs/common'; -import { Join, NewMessage, ModifyMessage } from '@socketInterface/index'; +import { Join, NewMessage, ModifyMessage, InviteChannel } from '@socketInterface/index'; import { SocketWithAuth } from './types'; import { JwtService } from '@nestjs/jwt'; import { WsCatchAllFilter } from './exceptions/socket-catch-error'; import { RestoreMessageDto } from '@chat-list/dto'; import { requestApiServer } from './axios/request-api-server'; +import { joinChannelInUsersURL, storeMessageURL } from './axios/request-api-urls'; +import { InviteChannelDto } from '@channel/dto'; //TODO : revers proxy : https://socket.io/docs/v4/reverse-proxy/ -const storeMessageURL = (channelId) => `/api/channels/${channelId}/message`; - @UseFilters(new WsCatchAllFilter()) @WebSocketGateway({ namespace: /\/socket\/commu-.+/, @@ -54,7 +54,7 @@ export class SocketGateway implements OnGatewayInit, OnGatewayConnection, OnGate const communityName = socket.nsp.name; const { id, channelId, user_id, message, time } = data; this.logger.log( - `New message. [NS] : ${communityName}, [channel] : ${channelId} [From] ${user_id},[MSG][${time}]:${message}`, + `New message.\t[NS] : ${communityName},\t[channel] : ${channelId}\t[From] ${user_id},\t[MSG][${time}]:${message}`, ); const restoreMessageDto: RestoreMessageDto = { channel_id: channelId, @@ -63,11 +63,14 @@ export class SocketGateway implements OnGatewayInit, OnGatewayConnection, OnGate senderId: socket.user._id, }; const apiUrl = storeMessageURL(channelId); - const result = await requestApiServer({ - path: apiUrl, - accessToken: socket.user.accessToken, - data: restoreMessageDto, - }); + const result = + process.env.NODE_ENV == 'dev' + ? true + : await requestApiServer({ + path: apiUrl, + accessToken: socket.user.accessToken, + data: restoreMessageDto, + }); if (result) { socket.to(channelId).emit('new-message', data); } @@ -76,6 +79,42 @@ export class SocketGateway implements OnGatewayInit, OnGatewayConnection, OnGate return { written }; } + @SubscribeMessage('invite-users-to-channel') + async inviteChannel( + @MessageBody() data: InviteChannel, + @ConnectedSocket() socket: SocketWithAuth, + ) { + const community = socket.nsp; + const communityName = socket.nsp.name; + const { channel_id, users } = data; + this.logger.log( + `Invite Users to Channel.\t[NS] : ${communityName},\t[channel] : ${channel_id}\t[users] ${users}`, + ); + + const apiUrl = joinChannelInUsersURL(channel_id); + const result = + process.env.NODE_ENV == 'dev' + ? true + : await requestApiServer({ + path: apiUrl, + accessToken: socket.user.accessToken, + data, + }); + if (result) { + Array.from(socket.nsp.sockets.values()).forEach((otherSocket: SocketWithAuth) => { + if (users.includes(otherSocket.user._id)) { + otherSocket.join(channel_id); + // community.in(otherSocket.id).socketsJoin('room1'); + console.log(otherSocket); + otherSocket.emit('invited-to-channel', result); + } + }); + } + + const written = result ? true : false; + return { written }; + } + @SubscribeMessage('modify-message') modifyMessageEvent( @MessageBody() data: ModifyMessage, @@ -85,7 +124,7 @@ export class SocketGateway implements OnGatewayInit, OnGatewayConnection, OnGate const communityName = socket.nsp.name; const { channelId, user_id, message, messageId } = data; this.logger.log( - `Modify message. [NS] : ${communityName}, [channel] : ${channelId} [From] ${user_id}, [MSG] : ${message}, [Origin id] : ${messageId}`, + `Modify message.\t[NS] : ${communityName},\t[channel] : ${channelId}\t[From] ${user_id},\t[MSG] : ${message},\t[Origin id] : ${messageId}`, ); community.to(channelId).emit('modify-message', data); // TODO : db에 message data 수정을 여기서할지 논의하기 diff --git a/shared/socket/InviteChannel.ts b/shared/socket/InviteChannel.ts new file mode 100644 index 00000000..a9a5f029 --- /dev/null +++ b/shared/socket/InviteChannel.ts @@ -0,0 +1,5 @@ +export interface InviteChannel { + community_id: string; + channel_id: string; + users: string[]; +} diff --git a/shared/socket/index.ts b/shared/socket/index.ts index 89a6ad60..d2282725 100644 --- a/shared/socket/index.ts +++ b/shared/socket/index.ts @@ -1,3 +1,4 @@ export * from './NewMessage'; export * from './ModifyMessage'; export * from './Join'; +export * from './InviteChannel'; From 656d2f93275049fbd3229b5d6683cce24e3fbea1 Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Fri, 9 Dec 2022 23:22:53 +0900 Subject: [PATCH 027/298] =?UTF-8?q?refactor:=20middleware=20=EB=8F=85?= =?UTF-8?q?=EB=A6=BD=20=ED=8C=8C=EC=9D=BC=EB=A1=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../socket/src/axios/request-api-server.ts | 7 ++- server/apps/socket/src/socket.gateway.ts | 59 ++++++------------- 2 files changed, 22 insertions(+), 44 deletions(-) diff --git a/server/apps/socket/src/axios/request-api-server.ts b/server/apps/socket/src/axios/request-api-server.ts index 0ece7023..9045c253 100644 --- a/server/apps/socket/src/axios/request-api-server.ts +++ b/server/apps/socket/src/axios/request-api-server.ts @@ -1,11 +1,14 @@ import axios from 'axios'; import { WsException } from '@nestjs/websockets'; -export const requestApiServer = async ({ path, accessToken, data }) => { +export const requestApiServer = async ({ method, path, accessToken, data }) => { + if (process.env.NODE_ENV === 'dev') { + return true; + } const apiUrl = 'http://localhost:' + (process.env.NODE_ENV == 'dev' ? 3000 : 3001) + path; try { const response = await axios({ - method: 'post', + method, url: apiUrl, headers: { 'Content-Type': 'application/json', diff --git a/server/apps/socket/src/socket.gateway.ts b/server/apps/socket/src/socket.gateway.ts index be3f0551..073c63c5 100644 --- a/server/apps/socket/src/socket.gateway.ts +++ b/server/apps/socket/src/socket.gateway.ts @@ -18,14 +18,13 @@ import { WsCatchAllFilter } from './exceptions/socket-catch-error'; import { RestoreMessageDto } from '@chat-list/dto'; import { requestApiServer } from './axios/request-api-server'; import { joinChannelInUsersURL, storeMessageURL } from './axios/request-api-urls'; -import { InviteChannelDto } from '@channel/dto'; -//TODO : revers proxy : https://socket.io/docs/v4/reverse-proxy/ +import { authMiddleware } from './middleware/authMiddleware'; @UseFilters(new WsCatchAllFilter()) @WebSocketGateway({ namespace: /\/socket\/commu-.+/, cors: { - origin: '*', //['http://localhost:80'], + origin: '*', }, }) export class SocketGateway implements OnGatewayInit, OnGatewayConnection, OnGatewayDisconnect { @@ -34,7 +33,7 @@ export class SocketGateway implements OnGatewayInit, OnGatewayConnection, OnGate @WebSocketServer() server: Server; private logger: Logger = new Logger('Socket'); - @SubscribeMessage('join') // socket.on('join', ({}) => {}) + @SubscribeMessage('join') joinEvent(@MessageBody() data: Join, @ConnectedSocket() socket: SocketWithAuth) { const community = socket.nsp; const communityName = socket.nsp.name; @@ -46,7 +45,7 @@ export class SocketGateway implements OnGatewayInit, OnGatewayConnection, OnGate ); } - @SubscribeMessage('new-message') // socket.on('new-message', ({}) => {}) + @SubscribeMessage('new-message') async newMessageEvent( @MessageBody() data: NewMessage, @ConnectedSocket() socket: SocketWithAuth, @@ -62,15 +61,12 @@ export class SocketGateway implements OnGatewayInit, OnGatewayConnection, OnGate content: message, senderId: socket.user._id, }; - const apiUrl = storeMessageURL(channelId); - const result = - process.env.NODE_ENV == 'dev' - ? true - : await requestApiServer({ - path: apiUrl, - accessToken: socket.user.accessToken, - data: restoreMessageDto, - }); + const result = await requestApiServer({ + method: 'post', + path: storeMessageURL(channelId), + accessToken: socket.user.accessToken, + data: restoreMessageDto, + }); if (result) { socket.to(channelId).emit('new-message', data); } @@ -84,22 +80,18 @@ export class SocketGateway implements OnGatewayInit, OnGatewayConnection, OnGate @MessageBody() data: InviteChannel, @ConnectedSocket() socket: SocketWithAuth, ) { - const community = socket.nsp; const communityName = socket.nsp.name; const { channel_id, users } = data; this.logger.log( `Invite Users to Channel.\t[NS] : ${communityName},\t[channel] : ${channel_id}\t[users] ${users}`, ); - const apiUrl = joinChannelInUsersURL(channel_id); - const result = - process.env.NODE_ENV == 'dev' - ? true - : await requestApiServer({ - path: apiUrl, - accessToken: socket.user.accessToken, - data, - }); + const result = await requestApiServer({ + method: 'post', + path: joinChannelInUsersURL(channel_id), + accessToken: socket.user.accessToken, + data, + }); if (result) { Array.from(socket.nsp.sockets.values()).forEach((otherSocket: SocketWithAuth) => { if (users.includes(otherSocket.user._id)) { @@ -133,7 +125,7 @@ export class SocketGateway implements OnGatewayInit, OnGatewayConnection, OnGate afterInit(server: Server) { // 서버 실행 시 실행되는 함수 this.logger.log('웹소켓 서버 실행 시작'); - this.server.use(createTokenMiddleware(this.jwtService)); + this.server.use(authMiddleware(this.jwtService)); } handleDisconnect(socket: SocketWithAuth) { @@ -146,20 +138,3 @@ export class SocketGateway implements OnGatewayInit, OnGatewayConnection, OnGate this.logger.log(`Client Connected : [NS] '${socket.nsp.name}', [ID] ${socket.id}`); } } - -const createTokenMiddleware = (jwtService: JwtService) => (socket: SocketWithAuth, next) => { - const token = socket.handshake.auth.token || socket.handshake.headers['token']; - - try { - const accessToken = token.split(' ')[1]; - const payload = jwtService.verify(accessToken); - socket.user = { - _id: payload._id, - nickname: payload.nickname, - accessToken, - }; - next(); - } catch (error) { - next(new WsException('Unauthorized')); - } -}; From 21d8063a99316d74ceb7416d381094109de642a7 Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Sat, 10 Dec 2022 15:35:01 +0900 Subject: [PATCH 028/298] =?UTF-8?q?fix:=20middleware=20=EC=97=86=EC=96=B4?= =?UTF-8?q?=EC=A7=84=20=EA=B2=83=20=ED=99=95=EC=9D=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../socket/src/middleware/authMiddleware.ts | 20 +++++++++++++++++++ server/apps/socket/src/mock_client/client.js | 6 +++--- 2 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 server/apps/socket/src/middleware/authMiddleware.ts diff --git a/server/apps/socket/src/middleware/authMiddleware.ts b/server/apps/socket/src/middleware/authMiddleware.ts new file mode 100644 index 00000000..1c48ab25 --- /dev/null +++ b/server/apps/socket/src/middleware/authMiddleware.ts @@ -0,0 +1,20 @@ +import { JwtService } from '@nestjs/jwt'; +import { WsException } from '@nestjs/websockets'; +import { SocketWithAuth } from '../types'; + +export const authMiddleware = (jwtService: JwtService) => (socket: SocketWithAuth, next) => { + const token = socket.handshake.auth.token || socket.handshake.headers['token']; + + try { + const accessToken = token.split(' ')[1]; + const payload = jwtService.verify(accessToken); + socket.user = { + _id: payload._id, + nickname: payload.nickname, + accessToken, + }; + next(); + } catch (error) { + next(new WsException('Unauthorized')); + } +}; diff --git a/server/apps/socket/src/mock_client/client.js b/server/apps/socket/src/mock_client/client.js index 5361495c..2fc00e80 100644 --- a/server/apps/socket/src/mock_client/client.js +++ b/server/apps/socket/src/mock_client/client.js @@ -1,10 +1,10 @@ import { io } from 'socket.io-client'; -const port = 8080; -const url = 'http://localhost'; //49.50.167.202'; +const port = 80; +const url = 'http://49.50.167.202'; // 형식은 'commu-{community id}' const accessToken = - 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2MzkwNDVhOWNhYTIwZGVlZmQ1Yzc2NWUiLCJuaWNrbmFtZSI6InNvb21hbiIsImlhdCI6MTY3MDU4NzQ2NywiZXhwIjoxNjcwNTg4MzY3fQ.cmD3b_f5l0IkrNs85XpUzBXRRKEFBVWdkiSB6XxXIXs'; + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2MzkwNDVhOWNhYTIwZGVlZmQ1Yzc2NWUiLCJuaWNrbmFtZSI6InNvb21hbiIsImlhdCI6MTY3MDY1MTQ2MiwiZXhwIjoxNjcwNjUyMzYyfQ.otnpF3c2GfqpKKQoUqA_x_d2j43WYaMQ84pfcGUDHds'; const accessToken2 = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2Mzg0NWNiMTU0NDRmMGEyMGRlNTYxMDUiLCJuaWNrbmFtZSI6InNvb21hbiIsImlhdCI6MTY2OTY1MTM1NywiZXhwIjoxNjY5NjUyMjU3fQ.T3OGoF2hz4ew1iw2c4TA1tldHgTwDxkEyUFBkfUqeHo'; const opt = { From a37a3b1f6d483936ab0ad2470bb985dd4ba8fe4d Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Sat, 10 Dec 2022 17:22:50 +0900 Subject: [PATCH 029/298] =?UTF-8?q?client=20mock=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/socket/src/mock_client/client.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/apps/socket/src/mock_client/client.js b/server/apps/socket/src/mock_client/client.js index 2fc00e80..4ff2002e 100644 --- a/server/apps/socket/src/mock_client/client.js +++ b/server/apps/socket/src/mock_client/client.js @@ -4,7 +4,7 @@ const port = 80; const url = 'http://49.50.167.202'; // 형식은 'commu-{community id}' const accessToken = - 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2MzkwNDVhOWNhYTIwZGVlZmQ1Yzc2NWUiLCJuaWNrbmFtZSI6InNvb21hbiIsImlhdCI6MTY3MDY1MTQ2MiwiZXhwIjoxNjcwNjUyMzYyfQ.otnpF3c2GfqpKKQoUqA_x_d2j43WYaMQ84pfcGUDHds'; + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2MzkwNDU4ODNmNDI2OGUxMjY3OGVmN2YiLCJuaWNrbmFtZSI6Im55IiwiaWF0IjoxNjcwNjYwMTY2LCJleHAiOjE2NzA2NjEwNjZ9.-Aur1P5fcSIDY5HzwGSlF8QtRVppbD6cpwTgY84V3ts'; const accessToken2 = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2Mzg0NWNiMTU0NDRmMGEyMGRlNTYxMDUiLCJuaWNrbmFtZSI6InNvb21hbiIsImlhdCI6MTY2OTY1MTM1NywiZXhwIjoxNjY5NjUyMjU3fQ.T3OGoF2hz4ew1iw2c4TA1tldHgTwDxkEyUFBkfUqeHo'; const opt = { From 3ed9edd183c90b2cc6d9af07c74dbaf73738a166 Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Sat, 10 Dec 2022 19:57:41 +0900 Subject: [PATCH 030/298] =?UTF-8?q?fix:=20=EC=B1=84=EB=84=90=20=EC=B4=88?= =?UTF-8?q?=EB=8C=80=20socket=20callback=20=EC=88=98=EC=A0=95=20#313?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/socket/src/socket.gateway.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/apps/socket/src/socket.gateway.ts b/server/apps/socket/src/socket.gateway.ts index 073c63c5..c5814d62 100644 --- a/server/apps/socket/src/socket.gateway.ts +++ b/server/apps/socket/src/socket.gateway.ts @@ -103,8 +103,8 @@ export class SocketGateway implements OnGatewayInit, OnGatewayConnection, OnGate }); } - const written = result ? true : false; - return { written }; + const isSuccess = result ? true : false; + return { isSuccess }; } @SubscribeMessage('modify-message') From 703409a95a2467dc979368c51485ed3e3c928f05 Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Sat, 10 Dec 2022 20:14:06 +0900 Subject: [PATCH 031/298] feat: invite-users-to-channel fix #313 --- server/apps/socket/src/mock_client/client.js | 2 +- server/apps/socket/src/socket.gateway.ts | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/server/apps/socket/src/mock_client/client.js b/server/apps/socket/src/mock_client/client.js index 4ff2002e..0d592ad6 100644 --- a/server/apps/socket/src/mock_client/client.js +++ b/server/apps/socket/src/mock_client/client.js @@ -4,7 +4,7 @@ const port = 80; const url = 'http://49.50.167.202'; // 형식은 'commu-{community id}' const accessToken = - 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2MzkwNDU4ODNmNDI2OGUxMjY3OGVmN2YiLCJuaWNrbmFtZSI6Im55IiwiaWF0IjoxNjcwNjYwMTY2LCJleHAiOjE2NzA2NjEwNjZ9.-Aur1P5fcSIDY5HzwGSlF8QtRVppbD6cpwTgY84V3ts'; + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2MzkwNDU4ODNmNDI2OGUxMjY3OGVmN2YiLCJuaWNrbmFtZSI6Im55IiwiaWF0IjoxNjcwNjY5OTgxLCJleHAiOjE2NzA2NzA4ODF9.X8-umkeMY0V5UoCyQJvEljbBSp5n-79BwD9-Sk-JYUg'; const accessToken2 = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2Mzg0NWNiMTU0NDRmMGEyMGRlNTYxMDUiLCJuaWNrbmFtZSI6InNvb21hbiIsImlhdCI6MTY2OTY1MTM1NywiZXhwIjoxNjY5NjUyMjU3fQ.T3OGoF2hz4ew1iw2c4TA1tldHgTwDxkEyUFBkfUqeHo'; const opt = { diff --git a/server/apps/socket/src/socket.gateway.ts b/server/apps/socket/src/socket.gateway.ts index c5814d62..746affc5 100644 --- a/server/apps/socket/src/socket.gateway.ts +++ b/server/apps/socket/src/socket.gateway.ts @@ -96,8 +96,6 @@ export class SocketGateway implements OnGatewayInit, OnGatewayConnection, OnGate Array.from(socket.nsp.sockets.values()).forEach((otherSocket: SocketWithAuth) => { if (users.includes(otherSocket.user._id)) { otherSocket.join(channel_id); - // community.in(otherSocket.id).socketsJoin('room1'); - console.log(otherSocket); otherSocket.emit('invited-to-channel', result); } }); From e4728d4953a6ad44024e61b9db47242e875e1ef5 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Sun, 11 Dec 2022 17:48:58 +0900 Subject: [PATCH 032/298] =?UTF-8?q?test:=20=EC=82=AC=EC=9A=A9=EC=9E=90=20?= =?UTF-8?q?=EA=B3=84=EC=A0=95=EC=A0=95=EB=B3=B4=20e2e=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 회원가입 -> 로그인 -> 로그아웃 --- server/apps/api/test/auth.e2e-spec.ts | 54 +++++++++++++++++++++++++++ server/apps/api/test/data/authData.ts | 36 ++++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 server/apps/api/test/auth.e2e-spec.ts create mode 100644 server/apps/api/test/data/authData.ts diff --git a/server/apps/api/test/auth.e2e-spec.ts b/server/apps/api/test/auth.e2e-spec.ts new file mode 100644 index 00000000..5bef53b8 --- /dev/null +++ b/server/apps/api/test/auth.e2e-spec.ts @@ -0,0 +1,54 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import * as request from 'supertest'; +import { mongoDbServerModule } from '@api/modules/mongo-server.module'; +import { UserModule } from '@user/user.module'; +import { importConfigModule } from '@api/modules/Config.module'; +import { importWinstonModule } from '@api/modules/Winstone.module'; +import { signoutURL, signupURL, singinURL } from '@api/test/urls/urls'; +import { authData } from '@api/test/data/authData'; + +describe('Auth E2E Test', () => { + let app, server; + + beforeAll(async () => { + const moduleRef: TestingModule = await Test.createTestingModule({ + imports: [importConfigModule(), mongoDbServerModule(), importWinstonModule(), UserModule], + }).compile(); + + app = moduleRef.createNestApplication(); + await app.init(); + }); + + beforeEach(async () => { + server = await app.getHttpServer(); + }); + + describe('회원가입, 로그인', () => { + it('정상 동작', async () => { + await request(server) + .post(signupURL) + .send(authData.signup.requestForm) + .expect((res) => { + expect(res.body).toBeDefined(); + expect(res.body).toStrictEqual(authData.signup.responseForm); + }); + + const accessToken = ( + await request(server) + .post(singinURL) + .send(authData.signin.requestForm) + .expect((res) => { + expect(res.body).toBeDefined(); + expect(res.body).toEqual(authData.signin.responseForm); + }) + ).body.result.accessToken; + + await request(server) + .post(signoutURL) + .set('Authorization', `Bearer ${accessToken}`) + .expect((res) => { + expect(res.body).toEqual(authData.signout.responseForm); + }); + }); + }); +}); diff --git a/server/apps/api/test/data/authData.ts b/server/apps/api/test/data/authData.ts new file mode 100644 index 00000000..ebeba276 --- /dev/null +++ b/server/apps/api/test/data/authData.ts @@ -0,0 +1,36 @@ +export const authData = { + signup: { + requestForm: { + id: 'testUser1@naver.com', + password: '12341234', + nickname: 'testUser', + }, + responseForm: { + statusCode: 200, + result: { + message: '회원가입 성공!', + }, + }, + }, + signin: { + requestForm: { + id: 'testUser1@naver.com', + password: '12341234', + }, + responseForm: { + statusCode: 200, + result: { + message: '로그인 성공!', + accessToken: expect.any(String), + }, + }, + }, + signout: { + responseForm: { + statusCode: 200, + result: { + message: '로그아웃 성공!', + }, + }, + }, +}; From 7e8eb3f1b638cf6a097ba6d78e1b5cea64ef7c36 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Sun, 11 Dec 2022 17:50:46 +0900 Subject: [PATCH 033/298] =?UTF-8?q?test:=20url=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?=EB=B0=8F=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 수정 : singinURL -> signinURL - 추가 : signoutURL, getMyInfoURL --- server/apps/api/test/urls/urls.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/server/apps/api/test/urls/urls.ts b/server/apps/api/test/urls/urls.ts index 54328af6..0a091045 100644 --- a/server/apps/api/test/urls/urls.ts +++ b/server/apps/api/test/urls/urls.ts @@ -1,3 +1,5 @@ -export const singinURL = '/api/user/auth/signin'; +export const signinURL = '/api/user/auth/signin'; export const signupURL = '/api/user/auth/signup'; +export const signoutURL = '/api/user/auth/signout'; +export const getMyInfoURL = '/api/user/auth/me'; export const followingURL = '/api/user/following'; From ac2d8ee5e0b4407332e964a50557c2d1d4354849 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Sun, 11 Dec 2022 17:51:10 +0900 Subject: [PATCH 034/298] =?UTF-8?q?test:=20URL=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/test/auth.e2e-spec.ts | 4 ++-- server/apps/api/test/community.e2e-spec.ts | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/server/apps/api/test/auth.e2e-spec.ts b/server/apps/api/test/auth.e2e-spec.ts index 5bef53b8..71dc9bbf 100644 --- a/server/apps/api/test/auth.e2e-spec.ts +++ b/server/apps/api/test/auth.e2e-spec.ts @@ -4,7 +4,7 @@ import { mongoDbServerModule } from '@api/modules/mongo-server.module'; import { UserModule } from '@user/user.module'; import { importConfigModule } from '@api/modules/Config.module'; import { importWinstonModule } from '@api/modules/Winstone.module'; -import { signoutURL, signupURL, singinURL } from '@api/test/urls/urls'; +import { signoutURL, signupURL, signinURL } from '@api/test/urls/urls'; import { authData } from '@api/test/data/authData'; describe('Auth E2E Test', () => { @@ -35,7 +35,7 @@ describe('Auth E2E Test', () => { const accessToken = ( await request(server) - .post(singinURL) + .post(signinURL) .send(authData.signin.requestForm) .expect((res) => { expect(res.body).toBeDefined(); diff --git a/server/apps/api/test/community.e2e-spec.ts b/server/apps/api/test/community.e2e-spec.ts index c02cafbe..2e474d7c 100644 --- a/server/apps/api/test/community.e2e-spec.ts +++ b/server/apps/api/test/community.e2e-spec.ts @@ -9,7 +9,7 @@ import { ValidationPipe } from '@nestjs/common'; import { initTestUser1, initTestUser2 } from '@mock/user.mock'; import { importConfigModule } from '@api/modules/Config.module'; import { importWinstonModule } from '@api/modules/Winstone.module'; -import { followingURL, signupURL, singinURL } from '@api/test/urls/urls'; +import { followingURL, signupURL, signinURL } from '@api/test/urls/urls'; import { CommunityModule } from '@community/community.module'; import { Community, CommunitySchema } from '@schemas/community.schema'; import { communityDto1, modifyCommunityDto1 } from '@mock/community.mock'; @@ -51,7 +51,7 @@ describe('Community E2E Test', () => { user1 = await userModel.findOne({ id: initTestUser1.id }); }); accessToken = ( - await request(server).post(singinURL).send({ id: user1.id, password: initTestUser1.password }) + await request(server).post(signinURL).send({ id: user1.id, password: initTestUser1.password }) ).body.result.accessToken; }); @@ -172,7 +172,7 @@ describe('Community E2E Test', () => { }); const user2AccessToken = ( await request(server) - .post(singinURL) + .post(signinURL) .send({ id: user2.id, password: initTestUser2.password }) ).body.result.accessToken; From 2a3ae2161d94f9c427eb0b78dd1303eae9c79b8a Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Sun, 11 Dec 2022 17:51:35 +0900 Subject: [PATCH 035/298] =?UTF-8?q?test:=20URL=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EC=88=98=EC=A0=95=20=EB=B0=8F?= =?UTF-8?q?=20getMyInfo=20test=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/test/data/userData.ts | 17 +++++++++++++++++ server/apps/api/test/user.e2e-spec.ts | 20 ++++++++++++++++---- 2 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 server/apps/api/test/data/userData.ts diff --git a/server/apps/api/test/data/userData.ts b/server/apps/api/test/data/userData.ts new file mode 100644 index 00000000..0732654b --- /dev/null +++ b/server/apps/api/test/data/userData.ts @@ -0,0 +1,17 @@ +export const userData = { + getMyInfo: { + responseForm: { + statusCode: 200, + result: { + _id: expect.any(String), + id: 'test@gmail.com', + nickname: 'test1', + status: 'ONLINE', + profileUrl: 'url', + description: 'default description', + createdAt: expect.any(String), + updatedAt: expect.any(String), + }, + }, + }, +}; diff --git a/server/apps/api/test/user.e2e-spec.ts b/server/apps/api/test/user.e2e-spec.ts index 16c11eda..e83bef00 100644 --- a/server/apps/api/test/user.e2e-spec.ts +++ b/server/apps/api/test/user.e2e-spec.ts @@ -5,11 +5,11 @@ import { mongoDbServerModule, mongoDbServerStop } from '@api/modules/mongo-serve import { UserModule } from '@user/user.module'; import { UserSchema } from '@schemas/user.schema'; import { User } from '@schemas/user.schema'; -import { ValidationPipe } from '@nestjs/common'; import { initTestUser1, initTestUser2, user1Modify } from '@mock/user.mock'; import { importConfigModule } from '@api/modules/Config.module'; import { importWinstonModule } from '@api/modules/Winstone.module'; -import { followingURL, signupURL, singinURL } from '@api/test/urls/urls'; +import { followingURL, getMyInfoURL, signupURL, signinURL } from '@api/test/urls/urls'; +import { userData } from '@api/test/data/userData'; import { ApiInterceptor } from '@custom/interceptor/api.interceptor'; import { WINSTON_MODULE_NEST_PROVIDER } from 'nest-winston'; @@ -42,7 +42,7 @@ describe('User E2E Test', () => { user1 = await userModel.findOne({ id: initTestUser1.id }); }); accessToken = ( - await request(server).post(singinURL).send({ id: user1.id, password: initTestUser1.password }) + await request(server).post(signinURL).send({ id: user1.id, password: initTestUser1.password }) ).body.result.accessToken; }); @@ -50,6 +50,18 @@ describe('User E2E Test', () => { expect(userModel).toBeDefined(); }); + describe('Get /api/user/auth/me', () => { + it('나의 정보 가져오기 정상 동작', async () => { + await request(server) + .get(getMyInfoURL) + .set('Authorization', `Bearer ${accessToken}`) + .expect((res) => { + expect(res.body).toBeDefined(); + expect(res.body).toEqual(userData.getMyInfo.responseForm); + }); + }); + }); + describe('Post /api/user/following/:id', () => { it('팔로잉 정상 동작', async () => { const user2 = await userModel.create(initTestUser2); @@ -97,7 +109,7 @@ describe('User E2E Test', () => { }); const user2AccessToken = ( await request(server) - .post(singinURL) + .post(signinURL) .send({ id: user2.id, password: initTestUser2.password }) ).body.result.accessToken; From bde35e2512891c150703261456237b58593de6b5 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Sun, 11 Dec 2022 18:39:31 +0900 Subject: [PATCH 036/298] =?UTF-8?q?test:=20API=20Response=20interceptor=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=EC=97=90=20=EB=94=B0=EB=A5=B8=20auth=20test?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/test/auth.e2e-spec.ts | 6 +++--- server/apps/api/test/data/authData.ts | 21 ++++++--------------- 2 files changed, 9 insertions(+), 18 deletions(-) diff --git a/server/apps/api/test/auth.e2e-spec.ts b/server/apps/api/test/auth.e2e-spec.ts index 71dc9bbf..82ba131e 100644 --- a/server/apps/api/test/auth.e2e-spec.ts +++ b/server/apps/api/test/auth.e2e-spec.ts @@ -23,14 +23,14 @@ describe('Auth E2E Test', () => { server = await app.getHttpServer(); }); - describe('회원가입, 로그인', () => { + describe('회원가입, 로그인, 로그아웃', () => { it('정상 동작', async () => { await request(server) .post(signupURL) .send(authData.signup.requestForm) .expect((res) => { expect(res.body).toBeDefined(); - expect(res.body).toStrictEqual(authData.signup.responseForm); + expect(res.body).toEqual(authData.signup.responseForm); }); const accessToken = ( @@ -41,7 +41,7 @@ describe('Auth E2E Test', () => { expect(res.body).toBeDefined(); expect(res.body).toEqual(authData.signin.responseForm); }) - ).body.result.accessToken; + ).body.accessToken; await request(server) .post(signoutURL) diff --git a/server/apps/api/test/data/authData.ts b/server/apps/api/test/data/authData.ts index ebeba276..03721dc7 100644 --- a/server/apps/api/test/data/authData.ts +++ b/server/apps/api/test/data/authData.ts @@ -1,36 +1,27 @@ export const authData = { signup: { requestForm: { - id: 'testUser1@naver.com', + id: 'testUser@naver.com', password: '12341234', nickname: 'testUser', }, responseForm: { - statusCode: 200, - result: { - message: '회원가입 성공!', - }, + message: '회원가입 성공!', }, }, signin: { requestForm: { - id: 'testUser1@naver.com', + id: 'testUser@naver.com', password: '12341234', }, responseForm: { - statusCode: 200, - result: { - message: '로그인 성공!', - accessToken: expect.any(String), - }, + message: '로그인 성공!', + accessToken: expect.any(String), }, }, signout: { responseForm: { - statusCode: 200, - result: { - message: '로그아웃 성공!', - }, + message: '로그아웃 성공!', }, }, }; From 26d987c0a9c23d476110bf321d8101949f9e2a00 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Sun, 11 Dec 2022 18:59:17 +0900 Subject: [PATCH 037/298] =?UTF-8?q?test:=20data=20=ED=8F=B4=EB=8D=94=20->?= =?UTF-8?q?=20=5F=5Fmock=5F=5F=20=ED=8F=B4=EB=8D=94=20=EB=A1=9C=20?= =?UTF-8?q?=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/authData.ts => __mock__/auth.mock.ts} | 18 ++++++++++++++++++ server/apps/api/test/auth.e2e-spec.ts | 2 +- server/apps/api/test/data/userData.ts | 17 ----------------- server/apps/api/test/user.e2e-spec.ts | 2 +- 4 files changed, 20 insertions(+), 19 deletions(-) rename server/{apps/api/test/data/authData.ts => __mock__/auth.mock.ts} (56%) delete mode 100644 server/apps/api/test/data/userData.ts diff --git a/server/apps/api/test/data/authData.ts b/server/__mock__/auth.mock.ts similarity index 56% rename from server/apps/api/test/data/authData.ts rename to server/__mock__/auth.mock.ts index 03721dc7..0fae974d 100644 --- a/server/apps/api/test/data/authData.ts +++ b/server/__mock__/auth.mock.ts @@ -25,3 +25,21 @@ export const authData = { }, }, }; + +export const userData = { + getMyInfo: { + responseForm: { + statusCode: 200, + result: { + _id: expect.any(String), + id: 'test@gmail.com', + nickname: 'test1', + status: 'ONLINE', + profileUrl: 'url', + description: 'default description', + createdAt: expect.any(String), + updatedAt: expect.any(String), + }, + }, + }, +}; diff --git a/server/apps/api/test/auth.e2e-spec.ts b/server/apps/api/test/auth.e2e-spec.ts index 82ba131e..c2a77d01 100644 --- a/server/apps/api/test/auth.e2e-spec.ts +++ b/server/apps/api/test/auth.e2e-spec.ts @@ -5,7 +5,7 @@ import { UserModule } from '@user/user.module'; import { importConfigModule } from '@api/modules/Config.module'; import { importWinstonModule } from '@api/modules/Winstone.module'; import { signoutURL, signupURL, signinURL } from '@api/test/urls/urls'; -import { authData } from '@api/test/data/authData'; +import { authData } from '@mock/auth.mock'; describe('Auth E2E Test', () => { let app, server; diff --git a/server/apps/api/test/data/userData.ts b/server/apps/api/test/data/userData.ts deleted file mode 100644 index 0732654b..00000000 --- a/server/apps/api/test/data/userData.ts +++ /dev/null @@ -1,17 +0,0 @@ -export const userData = { - getMyInfo: { - responseForm: { - statusCode: 200, - result: { - _id: expect.any(String), - id: 'test@gmail.com', - nickname: 'test1', - status: 'ONLINE', - profileUrl: 'url', - description: 'default description', - createdAt: expect.any(String), - updatedAt: expect.any(String), - }, - }, - }, -}; diff --git a/server/apps/api/test/user.e2e-spec.ts b/server/apps/api/test/user.e2e-spec.ts index e83bef00..b61fb690 100644 --- a/server/apps/api/test/user.e2e-spec.ts +++ b/server/apps/api/test/user.e2e-spec.ts @@ -9,9 +9,9 @@ import { initTestUser1, initTestUser2, user1Modify } from '@mock/user.mock'; import { importConfigModule } from '@api/modules/Config.module'; import { importWinstonModule } from '@api/modules/Winstone.module'; import { followingURL, getMyInfoURL, signupURL, signinURL } from '@api/test/urls/urls'; -import { userData } from '@api/test/data/userData'; import { ApiInterceptor } from '@custom/interceptor/api.interceptor'; import { WINSTON_MODULE_NEST_PROVIDER } from 'nest-winston'; +import { userData } from '@mock/auth.mock'; describe('User E2E Test', () => { let app, server, userModel, mongod, user1; From cdec1f77735d347f56d2f73ceecfd9c813bb2dc1 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Sun, 11 Dec 2022 16:28:34 +0900 Subject: [PATCH 038/298] =?UTF-8?q?fix:=20chat.schema.ts=20=EC=98=A4?= =?UTF-8?q?=ED=83=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/dao/schemas/chat.schema.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/server/dao/schemas/chat.schema.ts b/server/dao/schemas/chat.schema.ts index 9af4d828..890007c5 100644 --- a/server/dao/schemas/chat.schema.ts +++ b/server/dao/schemas/chat.schema.ts @@ -30,6 +30,5 @@ export class Chat { @Prop({ type: mongoose.Schema.Types.Date }) deletedAt: Date; - Ï; } export const ChatSchema = SchemaFactory.createForClass(Chat); From 6b81f1a6494d3a0ca799a2705912536870e457ae Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Sun, 11 Dec 2022 16:28:52 +0900 Subject: [PATCH 039/298] =?UTF-8?q?feat:=20=EC=B1=84=EB=84=90=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/channel/channel.service.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/server/apps/api/src/channel/channel.service.ts b/server/apps/api/src/channel/channel.service.ts index 943780ff..be33f9cd 100644 --- a/server/apps/api/src/channel/channel.service.ts +++ b/server/apps/api/src/channel/channel.service.ts @@ -28,6 +28,11 @@ export class ChannelService { const { communityId, isPrivate, managerId } = createChannelDto; // 자신이 속한 커뮤니티 찾기 const community = await this.communityRepository.findById(communityId); + + if (!community) throw new BadRequestException('커뮤니티가 없습니다.'); + if (community.deletedAt) throw new BadRequestException('삭제된 커뮤니티 입니다.'); + if (!community.users.includes(managerId)) + throw new BadRequestException('커뮤니티에 존재하지 않는 유저입니다.'); // 채널 생성 const channel = await this.channelRepository.create(createChannelDto); // community 도큐먼트의 channel 필드 업데이트 From b18b67be58c2b693bf68ef5277bd60b1b2421341 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Sun, 11 Dec 2022 16:29:13 +0900 Subject: [PATCH 040/298] =?UTF-8?q?feat:=20=EC=BB=A4=EB=AE=A4=EB=8B=88?= =?UTF-8?q?=ED=8B=B0=20=EC=A0=95=EB=B3=B4=20=EA=B0=80=EC=A0=B8=EC=98=AC=20?= =?UTF-8?q?=EB=95=8C=20=EC=95=88=EC=9D=BD=EC=9D=80=20=EB=A9=94=EC=84=B8?= =?UTF-8?q?=EC=A7=80=20=EC=97=AC=EB=B6=80=20=ED=99=95=EC=9D=B8=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/community/community.module.ts | 9 ++++++++- server/apps/api/src/community/community.service.ts | 12 ++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/server/apps/api/src/community/community.module.ts b/server/apps/api/src/community/community.module.ts index aaeeb856..65e6bbbe 100644 --- a/server/apps/api/src/community/community.module.ts +++ b/server/apps/api/src/community/community.module.ts @@ -9,6 +9,7 @@ import { UserModule } from '@user/user.module'; import { ChannelModule } from '@api/src/channel/channel.module'; import { ChannelRepository } from '@repository/channel.repository'; import { CommunitiesController } from '@community/communities.controller'; +import { ChatListRespository } from '@repository/chat-list.respository'; @Module({ imports: [ @@ -17,7 +18,13 @@ import { CommunitiesController } from '@community/communities.controller'; forwardRef(() => ChannelModule), ], controllers: [CommunityController, CommunitiesController], - providers: [CommunityService, CommunityRepository, UserRepository, ChannelRepository], + providers: [ + CommunityService, + CommunityRepository, + UserRepository, + ChannelRepository, + ChatListRespository, + ], exports: [MongooseModule], }) export class CommunityModule {} diff --git a/server/apps/api/src/community/community.service.ts b/server/apps/api/src/community/community.service.ts index 12793b9d..5e7cf010 100644 --- a/server/apps/api/src/community/community.service.ts +++ b/server/apps/api/src/community/community.service.ts @@ -14,6 +14,7 @@ import { getCommunityBasicInfo } from '@community/helper/getCommunityBasicInfo'; import { getChannelBasicInfo } from '@channel/helper/getChannelBasicInfo'; import { RequestUserAboutCommunityDto } from '@community/dto/request-user-about-community.dto'; import { getUserBasicInfo } from '@user/helper/getUserBasicInfo'; +import { ChatListRespository } from '@repository/chat-list.respository'; @Injectable() export class CommunityService { @@ -21,6 +22,7 @@ export class CommunityService { private readonly communityRepository: CommunityRepository, private readonly userRepository: UserRepository, private readonly channelRepository: ChannelRepository, + private readonly chatListRepository: ChatListRespository, ) {} async getCommunities(requestUserId: string) { @@ -46,14 +48,20 @@ export class CommunityService { const channelsInfo = []; await Promise.all( Array.from(channels.keys()).map(async (channelId) => { - const lastRead = channels.get(channelId); const channel = (await this.channelRepository.findById(channelId)) as any; if (!channel || channel.deletedAt) { throw new BadRequestException('존재하지 않는 채널입니다.'); } const channelInfo = getChannelBasicInfo(channel); // TODO : channel document의 updatedAt 아니고 다르값 비교 - channelInfo['lastRead'] = lastRead.getTime() >= channel.updatedAt.getTime(); + const lastRead = new Date( + JSON.parse(JSON.stringify(user)).communities[`${channel.communityId}`].channels[ + `${channel._id}` + ], + ); + const lastChatList = await this.chatListRepository.findById(channel.chatLists.at(-1)); + const lastChatTime = lastChatList.chat.at(-1).createdAt; + lastRead.getTime() >= lastChatTime; channelsInfo.push(channelInfo); }), ); From ba44a05a95fbb3d8431e203287860777db9c50c9 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Sun, 11 Dec 2022 18:29:27 +0900 Subject: [PATCH 041/298] =?UTF-8?q?fix:=20=EC=BB=A4=EB=AE=A4=EB=8B=88?= =?UTF-8?q?=ED=8B=B0=20=EC=A0=95=EB=B3=B4=20=EA=B0=80=EC=A0=B8=EC=98=AC=20?= =?UTF-8?q?=EB=95=8C=20=EC=95=88=EC=9D=BD=EC=9D=80=20=EB=A9=94=EC=84=B8?= =?UTF-8?q?=EC=A7=80=20=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/community/community.module.ts | 2 ++ server/apps/api/src/community/community.service.ts | 8 +++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/server/apps/api/src/community/community.module.ts b/server/apps/api/src/community/community.module.ts index 65e6bbbe..e9e7c5aa 100644 --- a/server/apps/api/src/community/community.module.ts +++ b/server/apps/api/src/community/community.module.ts @@ -10,12 +10,14 @@ import { ChannelModule } from '@api/src/channel/channel.module'; import { ChannelRepository } from '@repository/channel.repository'; import { CommunitiesController } from '@community/communities.controller'; import { ChatListRespository } from '@repository/chat-list.respository'; +import { ChatListModule } from '@chat-list/chat-list.module'; @Module({ imports: [ MongooseModule.forFeature([{ name: Community.name, schema: CommunitySchema }]), UserModule, forwardRef(() => ChannelModule), + ChatListModule, ], controllers: [CommunityController, CommunitiesController], providers: [ diff --git a/server/apps/api/src/community/community.service.ts b/server/apps/api/src/community/community.service.ts index 5e7cf010..b1bd8232 100644 --- a/server/apps/api/src/community/community.service.ts +++ b/server/apps/api/src/community/community.service.ts @@ -53,15 +53,17 @@ export class CommunityService { throw new BadRequestException('존재하지 않는 채널입니다.'); } const channelInfo = getChannelBasicInfo(channel); - // TODO : channel document의 updatedAt 아니고 다르값 비교 + // 안읽은 채팅 있는 지 확인 const lastRead = new Date( JSON.parse(JSON.stringify(user)).communities[`${channel.communityId}`].channels[ `${channel._id}` ], ); - const lastChatList = await this.chatListRepository.findById(channel.chatLists.at(-1)); + const lastChatList = JSON.parse( + JSON.stringify(await this.chatListRepository.findById(channel.chatLists.at(-1))), + ); const lastChatTime = lastChatList.chat.at(-1).createdAt; - lastRead.getTime() >= lastChatTime; + channelInfo['existUnreadChat'] = lastRead.getTime() <= new Date(lastChatTime).getTime(); channelsInfo.push(channelInfo); }), ); From 55412b32a166ba4af9e9c72924659e52445988c3 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Sun, 11 Dec 2022 19:42:17 +0900 Subject: [PATCH 042/298] =?UTF-8?q?feat:=20=EC=95=88=EC=9D=BC=EC=9D=80=20?= =?UTF-8?q?=EC=B1=84=ED=8C=85=EC=9D=B4=20=EC=97=86=EC=9D=84=20=EA=B2=BD?= =?UTF-8?q?=EC=9A=B0=20-1=EC=9D=84=20=EB=B3=B4=EB=83=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/chat-list/chat-list.service.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/apps/api/src/chat-list/chat-list.service.ts b/server/apps/api/src/chat-list/chat-list.service.ts index d84f33ba..b156c9da 100644 --- a/server/apps/api/src/chat-list/chat-list.service.ts +++ b/server/apps/api/src/chat-list/chat-list.service.ts @@ -100,6 +100,9 @@ export class ChatListService { R = M - 1; } } + if (new Date(unreadChatList[M].createdAt) < lastRead) { + return -1; + } return unreadChatList[M].id; } } From 075e91c45d9d37f2290ce85310c0a9645b235a93 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Sun, 11 Dec 2022 19:55:50 +0900 Subject: [PATCH 043/298] =?UTF-8?q?feat:=20channel=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?=EC=8B=9C=20=EC=B1=84=EB=84=90=20=EB=A7=88=EC=A7=80=EB=A7=89=20?= =?UTF-8?q?=EB=B0=A9=EB=AC=B8=20=EC=8B=9C=EA=B0=84=20=EC=97=85=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/channel/channel.controller.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/server/apps/api/src/channel/channel.controller.ts b/server/apps/api/src/channel/channel.controller.ts index 4140ac6e..1562cbca 100644 --- a/server/apps/api/src/channel/channel.controller.ts +++ b/server/apps/api/src/channel/channel.controller.ts @@ -15,7 +15,12 @@ export class ChannelController { async createChannel(@ReceivedData(userToManagerPipe) createChannelDto: CreateChannelDto) { const newChannel = await this.channelService.createChannel(createChannelDto); await this.botService.infoMakeChannel(newChannel._id, createChannelDto.nickname); - + const updateLastReadDto = { + requestUserId: newChannel.managerId, + community_id: newChannel.communityId, + channel_id: newChannel._id, + }; + await this.channelService.updateLastRead(updateLastReadDto); delete newChannel.users; return newChannel; } From ce42e81eb5bc116da2b52884125125c48bf88c81 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Sun, 11 Dec 2022 21:12:05 +0900 Subject: [PATCH 044/298] =?UTF-8?q?refacotr:=20=EC=BD=94=EB=93=9C=EB=A6=AC?= =?UTF-8?q?=EB=B7=B0=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EB=A6=AC=ED=8E=99?= =?UTF-8?q?=ED=86=A0=EB=A7=81=20#332?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/community/community.service.ts | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/server/apps/api/src/community/community.service.ts b/server/apps/api/src/community/community.service.ts index b1bd8232..1008fde0 100644 --- a/server/apps/api/src/community/community.service.ts +++ b/server/apps/api/src/community/community.service.ts @@ -54,16 +54,11 @@ export class CommunityService { } const channelInfo = getChannelBasicInfo(channel); // 안읽은 채팅 있는 지 확인 - const lastRead = new Date( - JSON.parse(JSON.stringify(user)).communities[`${channel.communityId}`].channels[ - `${channel._id}` - ], - ); - const lastChatList = JSON.parse( - JSON.stringify(await this.chatListRepository.findById(channel.chatLists.at(-1))), - ); + const lastChatList = await this.chatListRepository.findById(channel.chatLists.at(-1)); + const lastChatTime = lastChatList.chat.at(-1).createdAt; - channelInfo['existUnreadChat'] = lastRead.getTime() <= new Date(lastChatTime).getTime(); + channelInfo['existUnreadChat'] = + channels.get(channelId).getTime() <= new Date(lastChatTime).getTime(); channelsInfo.push(channelInfo); }), ); From daa3b7adf04cc10dfa7e4f9a681c364266ab82cd Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Sun, 11 Dec 2022 21:14:24 +0900 Subject: [PATCH 045/298] =?UTF-8?q?refacotr:=20=EC=BD=94=EB=93=9C=EB=A6=AC?= =?UTF-8?q?=EB=B7=B0=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EB=A6=AC=ED=8E=99?= =?UTF-8?q?=ED=86=A0=EB=A7=81=20#332?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - NOT_EXIST_UNREAD_CHAT 상수화 (-1) --- server/apps/api/src/chat-list/chat-list.service.ts | 3 ++- server/utils/def.ts | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/server/apps/api/src/chat-list/chat-list.service.ts b/server/apps/api/src/chat-list/chat-list.service.ts index b156c9da..961971f1 100644 --- a/server/apps/api/src/chat-list/chat-list.service.ts +++ b/server/apps/api/src/chat-list/chat-list.service.ts @@ -5,6 +5,7 @@ import { ChatListRespository } from '@repository/chat-list.respository'; import { GetUnreadMessagePointDto } from '@chat-list/dto/get-unread-message-point.dto'; import { UserRepository } from '@repository/user.repository'; import { makeChat } from '@chat-list/helper/makeChat'; +import { NOT_EXIST_UNREAD_CHAT } from '@utils/def'; @Injectable() export class ChatListService { @@ -101,7 +102,7 @@ export class ChatListService { } } if (new Date(unreadChatList[M].createdAt) < lastRead) { - return -1; + return NOT_EXIST_UNREAD_CHAT; } return unreadChatList[M].id; } diff --git a/server/utils/def.ts b/server/utils/def.ts index d0e76022..c37b35dc 100644 --- a/server/utils/def.ts +++ b/server/utils/def.ts @@ -3,3 +3,4 @@ export const PROVIDER = ['ASNITY', 'GITHUB']; export const CHANNEL_TYPE = ['CHANNEL', 'DM']; export const CHAT_TYPE = ['TEXT', 'IMAGE', 'SYSTEM']; export const BOT_ID = '639045fc61d68253e03c50da'; +export const NOT_EXIST_UNREAD_CHAT = -1; From 5d1a0cd101398fc44ae076547d6202b2106985f6 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Sun, 11 Dec 2022 21:43:48 +0900 Subject: [PATCH 046/298] =?UTF-8?q?refacotr:=20=EC=BD=94=EB=93=9C=EB=A6=AC?= =?UTF-8?q?=EB=B7=B0=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EB=A6=AC=ED=8E=99?= =?UTF-8?q?=ED=86=A0=EB=A7=81=20#332?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 채널이 삭제되었을 때 DB에서 찾지 않도록 쿼리 수정 --- .../apps/api/src/channel/channel.service.ts | 42 +++++++++++++++---- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/server/apps/api/src/channel/channel.service.ts b/server/apps/api/src/channel/channel.service.ts index be33f9cd..82c5cdd0 100644 --- a/server/apps/api/src/channel/channel.service.ts +++ b/server/apps/api/src/channel/channel.service.ts @@ -27,10 +27,13 @@ export class ChannelService { async createChannel(createChannelDto: CreateChannelDto) { const { communityId, isPrivate, managerId } = createChannelDto; // 자신이 속한 커뮤니티 찾기 - const community = await this.communityRepository.findById(communityId); + // const community = await this.communityRepository.findById(communityId); + const community = await this.communityRepository.findOne({ + _id: communityId, + deletedAt: undefined, + }); if (!community) throw new BadRequestException('커뮤니티가 없습니다.'); - if (community.deletedAt) throw new BadRequestException('삭제된 커뮤니티 입니다.'); if (!community.users.includes(managerId)) throw new BadRequestException('커뮤니티에 존재하지 않는 유저입니다.'); // 채널 생성 @@ -56,11 +59,13 @@ export class ChannelService { // 채널의 관리자가 아니면 예외처리 const channel = await this.channelRepository.findOne({ _id: channel_id, - managerId: requestUserId, + deletedAt: undefined, }); if (!channel) { - throw new UnauthorizedException('채널 관리자가 아닙니다.'); + throw new UnauthorizedException('존재하지 않는 채널입니다.'); } + if (channel.managerId !== requestUserId) + throw new UnauthorizedException('채널 관리자가 아닙니다.'); // 채널 수정 try { @@ -71,7 +76,8 @@ export class ChannelService { } async getChannelInfo(channel_id) { - const channel = await this.channelRepository.findOne({ _id: channel_id }); + const channel = await this.channelRepository.findOne({ _id: channel_id, deletedAt: undefined }); + if (!channel) throw new BadRequestException('존재하지 않는 채널입니다.'); const users = await Promise.all( channel.users.map(async (user_id) => { const user = await this.userRepository.findById(user_id); @@ -86,7 +92,11 @@ export class ChannelService { const { channel_id, requestUserId } = exitChannelDto; // channel 관리자이고 channel의 users에 2명이상 존재 시 채널 퇴장 불가능 - const channel = await this.channelRepository.findById(channel_id); + const channel = await this.channelRepository.findOne({ + channel_id: channel_id, + deletedAt: undefined, + }); + if (!channel) throw new BadRequestException('존재하지 않는 채널입니다.'); if (requestUserId === channel.managerId) { if (channel.users.length > 1) { throw new BadRequestException('관리자를 변경하고 채널을 퇴장하십시오!'); @@ -109,7 +119,8 @@ export class ChannelService { async deleteChannel(deleteChannelDto: DeleteChannelDto) { const { channel_id, requestUserId } = deleteChannelDto; // 관리자가 아니면 채널 삭제 에러 처리 - const channel = await this.channelRepository.findById(channel_id); + const channel = await this.channelRepository.findOne({ _id: channel_id, deletedAt: undefined }); + if (!channel) throw new BadRequestException('존재하지 않는 채널입니다.'); if (requestUserId !== channel.managerId) { throw new BadRequestException('관리자가 아닙니다!'); } @@ -141,8 +152,12 @@ export class ChannelService { async inviteChannel(inviteChannelDto: InviteChannelDto) { const { community_id, channel_id, users } = inviteChannelDto; + const channel = await this.channelRepository.findOne({ _id: channel_id, deletedAt: undefined }); + if (!channel) throw new BadRequestException('존재하지 않는 채널입니다.'); + await this.checkUserInCommunity(community_id, users); await this.addUserToChannel(community_id, channel_id, users); + const channelInfo = getChannelBasicInfo(await this.channelRepository.findById(channel_id)); if (!channelInfo) throw new BadRequestException(); return { ...channelInfo, lastRead: false }; @@ -150,6 +165,9 @@ export class ChannelService { async updateLastRead(updateLastReadDto: UpdateLastReadDto) { const { community_id, channel_id, requestUserId } = updateLastReadDto; + const channel = await this.channelRepository.findOne({ _id: channel_id, deletedAt: undefined }); + if (!channel) throw new BadRequestException('존재하지 않는 채널입니다.'); + // 유저 도큐먼트의 커뮤니티:채널 필드 업데이트 await this.userRepository.updateObject( { _id: requestUserId }, @@ -159,15 +177,23 @@ export class ChannelService { async joinChannel(joinChannelDto: JoinChannelDto) { const { requestUserId, channel_id, community_id } = joinChannelDto; + const channel = await this.channelRepository.findOne({ _id: channel_id, deletedAt: undefined }); + if (!channel) throw new BadRequestException('존재하지 않는 채널입니다.'); + await this.checkUserInCommunity(community_id, [requestUserId]); await this.addUserToChannel(community_id, channel_id, [requestUserId]); + const channelInfo = getChannelBasicInfo(await this.channelRepository.findById(channel_id)); if (!channelInfo) throw new BadRequestException(); return { ...channelInfo, lastRead: false }; } async checkUserInCommunity(community_id, newUsers) { - const community = await this.communityRepository.findById(community_id); + const community = await this.communityRepository.findOne({ + _id: community_id, + deletedAt: undefined, + }); + if (!community) throw new UnauthorizedException('존재하지 않는 커뮤니티 입니다.'); const userSet = new Set(community.users); newUsers.map((user) => { if (!userSet.has(user)) { From 59b0f5419ff45b41c1d32aff9549ffc8096c4400 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Mon, 12 Dec 2022 01:46:52 +0900 Subject: [PATCH 047/298] =?UTF-8?q?feat:=20userToSender=20Pipe=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/custom/pipe/userToSender.pipe.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 server/custom/pipe/userToSender.pipe.ts diff --git a/server/custom/pipe/userToSender.pipe.ts b/server/custom/pipe/userToSender.pipe.ts new file mode 100644 index 00000000..0c0e48d0 --- /dev/null +++ b/server/custom/pipe/userToSender.pipe.ts @@ -0,0 +1,14 @@ +import { PipeTransform, Injectable, BadRequestException } from '@nestjs/common'; + +@Injectable() +export class userToSenderPipe implements PipeTransform { + transform(dto): number { + if (!dto.requestUserId) { + throw new BadRequestException('Validation failed'); + } + dto['senderId'] = dto.requestUserId; + delete dto.requestUserId; + + return dto; + } +} From 0a68d42af45ed3d7db71f315e13ba182c22c69a7 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Mon, 12 Dec 2022 01:54:03 +0900 Subject: [PATCH 048/298] =?UTF-8?q?refactor:=20restore-message.dto=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/src/chat-list/dto/restore-message.dto.ts | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/server/apps/api/src/chat-list/dto/restore-message.dto.ts b/server/apps/api/src/chat-list/dto/restore-message.dto.ts index b59cae0f..50bb7c49 100644 --- a/server/apps/api/src/chat-list/dto/restore-message.dto.ts +++ b/server/apps/api/src/chat-list/dto/restore-message.dto.ts @@ -1,13 +1,15 @@ import { Injectable } from '@nestjs/common'; -import { IsNotEmpty, IsOptional, IsString } from 'class-validator'; +import { IsIn, IsMongoId, IsNotEmpty, IsString } from 'class-validator'; +import { Expose } from 'class-transformer'; +import { CHAT_TYPE } from '@utils/def'; @Injectable() export class RestoreMessageDto { - @IsString() - @IsOptional() + @IsMongoId() + @IsNotEmpty() channel_id: string; - @IsString() + @IsIn(CHAT_TYPE) @IsNotEmpty() type: 'TEXT' | 'IMAGE' | 'SYSTEM'; @@ -15,7 +17,8 @@ export class RestoreMessageDto { @IsNotEmpty() content: string; - @IsString() - @IsOptional() + @IsMongoId() + @IsNotEmpty() + @Expose({ name: 'requestUserId' }) senderId: string; } From 8ec51973716450f1f0eb7d70538c545a847c7a2d Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Mon, 12 Dec 2022 01:55:56 +0900 Subject: [PATCH 049/298] =?UTF-8?q?refactore:=20=EC=B1=84=ED=8C=85=20?= =?UTF-8?q?=EC=A0=80=EC=9E=A5=20url=20=EB=B0=8F=20=EC=9D=91=EB=8B=B5=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/src/chat-list/chat-list.controller.ts | 20 ++++--------- .../api/src/chat-list/chat-list.service.ts | 30 +++++++++++-------- .../apps/api/src/chat-list/helper/makeChat.ts | 6 ++-- 3 files changed, 26 insertions(+), 30 deletions(-) diff --git a/server/apps/api/src/chat-list/chat-list.controller.ts b/server/apps/api/src/chat-list/chat-list.controller.ts index 5f786e6b..babbb9aa 100644 --- a/server/apps/api/src/chat-list/chat-list.controller.ts +++ b/server/apps/api/src/chat-list/chat-list.controller.ts @@ -1,26 +1,18 @@ -import { Body, Controller, Get, Param, Post, Query, Req, UseGuards } from '@nestjs/common'; +import { Controller, Get, Param, Post, Query, Req, UseGuards } from '@nestjs/common'; import { ChatListService } from '@chat-list/chat-list.service'; import { JwtAccessGuard } from '@auth/guard'; import { RestoreMessageDto } from '@chat-list/dto'; +import { ReceivedData } from '@custom/decorator/ReceivedData.decorator'; +import { userToSenderPipe } from '@custom/pipe/userToSender.pipe'; @Controller('api/channels') export class ChatListController { constructor(private chatListService: ChatListService) {} - @Post(':channel_id/message') + @Post(':channel_id/chat') @UseGuards(JwtAccessGuard) - async restoreMessage( - @Param('channel_id') channel_id, - @Body() restoreMessageDto: RestoreMessageDto, - @Req() req: any, - ) { - const requestUserId = req.user._id; - await this.chatListService.restoreMessage({ - ...restoreMessageDto, - channel_id, - senderId: requestUserId, - }); - return { message: '채팅 저장 성공!' }; + async restoreMessage(@ReceivedData(userToSenderPipe) restoreMessageDto: RestoreMessageDto) { + return await this.chatListService.restoreMessage(restoreMessageDto); } @Get(':channel_id/message') diff --git a/server/apps/api/src/chat-list/chat-list.service.ts b/server/apps/api/src/chat-list/chat-list.service.ts index 961971f1..59a0dfbf 100644 --- a/server/apps/api/src/chat-list/chat-list.service.ts +++ b/server/apps/api/src/chat-list/chat-list.service.ts @@ -17,6 +17,7 @@ export class ChatListService { async restoreMessage(restoreMessageDto: RestoreMessageDto) { const { channel_id } = restoreMessageDto; + const date = new Date(); const channel = await this.channelRepository.findById(channel_id); const chatLists = await this.chatListRespository.findById(channel.chatLists.at(-1)); const chatNum = (channel.chatLists.length - 1) * 100 + chatLists.chat.length; @@ -24,24 +25,27 @@ export class ChatListService { if (chatNum % 100 === 0) { // chatList가 꽉 찼을 경우 새로운 chatList 생성 const newChatList = await this.chatListRespository.create({ - chat: [makeChat(chatNum, restoreMessageDto)], + chat: [makeChat(chatNum, restoreMessageDto, date)], }); await this.channelRepository.addArrAtArr({ _id: channel._id }, 'chatLists', [ newChatList._id.toString(), ]); - return; - } - - await this.chatListRespository.addArrAtArr({ _id: chatLists._id }, 'chat', [ - makeChat(chatNum, restoreMessageDto), - ]); - // chatList의 마지막 메세지일 경우 lastChatTime 업데이트 - if (chatNum % 100 === 99) { - await this.chatListRespository.updateOne( - { _id: chatLists._id }, - { lastChatTime: new Date() }, - ); + } else { + await this.chatListRespository.addArrAtArr({ _id: chatLists._id }, 'chat', [ + makeChat(chatNum, restoreMessageDto, date), + ]); + // chatList의 마지막 메세지일 경우 lastChatTime 업데이트 + if (chatNum % 100 === 99) { + await this.chatListRespository.updateOne({ _id: chatLists._id }, { lastChatTime: date }); + } } + return { + ...restoreMessageDto, + chatId: chatNum, + communityId: channel.communityId, + createdAt: date, + updatedAt: date, + }; } async getMessage(getMessageDto: GetMessageDto) { diff --git a/server/apps/api/src/chat-list/helper/makeChat.ts b/server/apps/api/src/chat-list/helper/makeChat.ts index d4d16e4d..53376705 100644 --- a/server/apps/api/src/chat-list/helper/makeChat.ts +++ b/server/apps/api/src/chat-list/helper/makeChat.ts @@ -1,12 +1,12 @@ import { RestoreMessageDto } from '@chat-list/dto'; -export const makeChat = (chatNum: number, restoreMessageDto: RestoreMessageDto) => { +export const makeChat = (chatNum: number, restoreMessageDto: RestoreMessageDto, date: Date) => { return { id: chatNum, type: restoreMessageDto.type, content: restoreMessageDto.content, senderId: restoreMessageDto.senderId, - createdAt: new Date(), - updatedAt: new Date(), + createdAt: date, + updatedAt: date, }; }; From ec4a7d93720a0dde5077f846119bdf49df27ada3 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Mon, 12 Dec 2022 01:56:21 +0900 Subject: [PATCH 050/298] =?UTF-8?q?refactor:=20makeChat=20=EC=9D=B8?= =?UTF-8?q?=ED=92=8B=20=ED=98=95=EC=8B=9D=20=EB=B3=80=EA=B2=BD=EC=97=90=20?= =?UTF-8?q?=EB=94=B0=EB=A5=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/channel/bot.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/apps/api/src/channel/bot.service.ts b/server/apps/api/src/channel/bot.service.ts index d063f36e..1bfe7c3a 100644 --- a/server/apps/api/src/channel/bot.service.ts +++ b/server/apps/api/src/channel/bot.service.ts @@ -27,7 +27,7 @@ export class BotService { senderId: BOT_ID, } as const; const newChatList = await this.chatListRepository.create({ - chat: [makeChat(0, botMessage)], + chat: [makeChat(0, botMessage, new Date())], }); await this.channelRepository.addArrAtArr({ _id: channel_id }, 'chatLists', [ newChatList._id.toString(), From aa5f2d84eb2acf3beaeb5d0f355f3eb9ad68ac8b Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Mon, 12 Dec 2022 02:13:27 +0900 Subject: [PATCH 051/298] =?UTF-8?q?refactor:=20chatList=20=EC=9A=94?= =?UTF-8?q?=EC=B2=AD=20Dto=EB=A1=9C=20=ED=95=9C=EB=B2=88=EC=97=90=20?= =?UTF-8?q?=EB=B0=9B=EC=95=84=EC=98=A4=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/src/chat-list/chat-list.controller.ts | 28 +++++++------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/server/apps/api/src/chat-list/chat-list.controller.ts b/server/apps/api/src/chat-list/chat-list.controller.ts index babbb9aa..65a40e3c 100644 --- a/server/apps/api/src/chat-list/chat-list.controller.ts +++ b/server/apps/api/src/chat-list/chat-list.controller.ts @@ -1,9 +1,10 @@ -import { Controller, Get, Param, Post, Query, Req, UseGuards } from '@nestjs/common'; +import { Controller, Get, Post, UseGuards } from '@nestjs/common'; import { ChatListService } from '@chat-list/chat-list.service'; import { JwtAccessGuard } from '@auth/guard'; -import { RestoreMessageDto } from '@chat-list/dto'; +import { GetMessageDto, RestoreMessageDto } from '@chat-list/dto'; import { ReceivedData } from '@custom/decorator/ReceivedData.decorator'; import { userToSenderPipe } from '@custom/pipe/userToSender.pipe'; +import { GetUnreadMessagePointDto } from '@chat-list/dto/get-unread-message-point.dto'; @Controller('api/channels') export class ChatListController { @@ -15,25 +16,16 @@ export class ChatListController { return await this.chatListService.restoreMessage(restoreMessageDto); } - @Get(':channel_id/message') + @Get(':channel_id/chat') @UseGuards(JwtAccessGuard) - async getMessage(@Param('channel_id') channel_id, @Query() query: any, @Req() req: any) { - const requestUserId = req.user._id; - const chatList = await this.chatListService.getMessage({ - ...query, - requestUserId, - channel_id, - }); - return chatList; + async getMessage(@ReceivedData() getMessageDto: GetMessageDto) { + return await this.chatListService.getMessage(getMessageDto); } - @Get(':channel_id/unread-message') + + @Get(':channel_id/unread-chat') @UseGuards(JwtAccessGuard) - async getUnreadMessagePoint(@Param('channel_id') channel_id, @Req() req: any) { - const requestUserId = req.user._id; - const unreadChatId = await this.chatListService.getUnreadMessagePoint({ - requestUserId, - channel_id, - }); + async getUnreadMessagePoint(@ReceivedData() getUnreadMessageDto: GetUnreadMessagePointDto) { + const unreadChatId = await this.chatListService.getUnreadMessagePoint(getUnreadMessageDto); return { unreadChatId }; } } From a6ea2b81a65c54550b2a8294da36feea3ff29014 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Mon, 12 Dec 2022 02:18:37 +0900 Subject: [PATCH 052/298] =?UTF-8?q?refactor:=20restore=20chat=20=EC=9D=91?= =?UTF-8?q?=EB=8B=B5=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - channel_id -> channelId - 현재 클라이언트와 서버간 변수가 맞지 않아 추후 리팩토링 필요 --- server/apps/api/src/chat-list/chat-list.service.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/apps/api/src/chat-list/chat-list.service.ts b/server/apps/api/src/chat-list/chat-list.service.ts index 59a0dfbf..3c5d6d88 100644 --- a/server/apps/api/src/chat-list/chat-list.service.ts +++ b/server/apps/api/src/chat-list/chat-list.service.ts @@ -39,6 +39,9 @@ export class ChatListService { await this.chatListRespository.updateOne({ _id: chatLists._id }, { lastChatTime: date }); } } + restoreMessageDto['channelId'] = restoreMessageDto.channel_id; + delete restoreMessageDto.channel_id; + return { ...restoreMessageDto, chatId: chatNum, From 52e0f07398cd673fb149759303de4d00b4b030e8 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Mon, 12 Dec 2022 02:25:09 +0900 Subject: [PATCH 053/298] =?UTF-8?q?refactor:=20=EC=B1=84=ED=8C=85=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20dto=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - get-message.dto.ts - get-unread-message-point.dto.ts --- server/apps/api/src/chat-list/dto/get-message.dto.ts | 10 +++++----- .../src/chat-list/dto/get-unread-message-point.dto.ts | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/server/apps/api/src/chat-list/dto/get-message.dto.ts b/server/apps/api/src/chat-list/dto/get-message.dto.ts index b83d3495..87ebcfa7 100644 --- a/server/apps/api/src/chat-list/dto/get-message.dto.ts +++ b/server/apps/api/src/chat-list/dto/get-message.dto.ts @@ -1,4 +1,4 @@ -import { IsOptional, IsString } from 'class-validator'; +import { IsMongoId, IsNotEmpty, IsOptional } from 'class-validator'; export class GetMessageDto { @IsOptional() @@ -7,11 +7,11 @@ export class GetMessageDto { @IsOptional() next: number | undefined; - @IsString() - @IsOptional() + @IsMongoId() + @IsNotEmpty() requestUserId: string; - @IsString() - @IsOptional() + @IsMongoId() + @IsNotEmpty() channel_id: string; } diff --git a/server/apps/api/src/chat-list/dto/get-unread-message-point.dto.ts b/server/apps/api/src/chat-list/dto/get-unread-message-point.dto.ts index b8a0ead9..c3a565cf 100644 --- a/server/apps/api/src/chat-list/dto/get-unread-message-point.dto.ts +++ b/server/apps/api/src/chat-list/dto/get-unread-message-point.dto.ts @@ -1,13 +1,13 @@ import { Injectable } from '@nestjs/common'; -import { IsNotEmpty, IsString } from 'class-validator'; +import { IsMongoId, IsNotEmpty } from 'class-validator'; @Injectable() export class GetUnreadMessagePointDto { - @IsString() + @IsMongoId() @IsNotEmpty() requestUserId: string; - @IsString() + @IsMongoId() @IsNotEmpty() channel_id: string; } From 81ac2a98d11e0bc0d7f8ffe5a9a397efbd1d3ac6 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Mon, 12 Dec 2022 03:04:05 +0900 Subject: [PATCH 054/298] =?UTF-8?q?feat:=20modify-message.dto=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/chat-list/dto/index.ts | 2 ++ .../src/chat-list/dto/modify-message.dto.ts | 20 +++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 server/apps/api/src/chat-list/dto/modify-message.dto.ts diff --git a/server/apps/api/src/chat-list/dto/index.ts b/server/apps/api/src/chat-list/dto/index.ts index bba075ae..cf88c866 100644 --- a/server/apps/api/src/chat-list/dto/index.ts +++ b/server/apps/api/src/chat-list/dto/index.ts @@ -1,2 +1,4 @@ export * from './restore-message.dto'; export * from './get-message.dto'; +export * from './get-unread-message-point.dto'; +export * from './modify-message.dto'; diff --git a/server/apps/api/src/chat-list/dto/modify-message.dto.ts b/server/apps/api/src/chat-list/dto/modify-message.dto.ts new file mode 100644 index 00000000..b54b7b4b --- /dev/null +++ b/server/apps/api/src/chat-list/dto/modify-message.dto.ts @@ -0,0 +1,20 @@ +import { Injectable } from '@nestjs/common'; +import { IsMongoId, IsNotEmpty, IsString } from 'class-validator'; + +@Injectable() +export class ModifyMessageDto { + @IsMongoId() + @IsNotEmpty() + requestUserId: string; + + @IsMongoId() + @IsNotEmpty() + channel_id: string; + + @IsNotEmpty() + chat_id; + + @IsString() + @IsNotEmpty() + content: string; +} From ccb3ee4c6ca982fa8336c98f62dcdb21e3ac858f Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Mon, 12 Dec 2022 03:06:45 +0900 Subject: [PATCH 055/298] =?UTF-8?q?feat:=20=EC=B1=84=EB=84=90=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/src/chat-list/chat-list.controller.ts | 16 +++++++-- .../api/src/chat-list/chat-list.service.ts | 33 +++++++++++++++++-- 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/server/apps/api/src/chat-list/chat-list.controller.ts b/server/apps/api/src/chat-list/chat-list.controller.ts index 65a40e3c..c8250adf 100644 --- a/server/apps/api/src/chat-list/chat-list.controller.ts +++ b/server/apps/api/src/chat-list/chat-list.controller.ts @@ -1,10 +1,14 @@ -import { Controller, Get, Post, UseGuards } from '@nestjs/common'; +import { Controller, Get, Patch, Post, UseGuards } from '@nestjs/common'; import { ChatListService } from '@chat-list/chat-list.service'; import { JwtAccessGuard } from '@auth/guard'; -import { GetMessageDto, RestoreMessageDto } from '@chat-list/dto'; +import { + GetMessageDto, + GetUnreadMessagePointDto, + ModifyMessageDto, + RestoreMessageDto, +} from '@chat-list/dto'; import { ReceivedData } from '@custom/decorator/ReceivedData.decorator'; import { userToSenderPipe } from '@custom/pipe/userToSender.pipe'; -import { GetUnreadMessagePointDto } from '@chat-list/dto/get-unread-message-point.dto'; @Controller('api/channels') export class ChatListController { @@ -28,4 +32,10 @@ export class ChatListController { const unreadChatId = await this.chatListService.getUnreadMessagePoint(getUnreadMessageDto); return { unreadChatId }; } + + @Patch(':channel_id/chats/:chat_id') + @UseGuards(JwtAccessGuard) + async modifyMessage(@ReceivedData() modifyMessageDto: ModifyMessageDto) { + return await this.chatListService.modifyMessage(modifyMessageDto); + } } diff --git a/server/apps/api/src/chat-list/chat-list.service.ts b/server/apps/api/src/chat-list/chat-list.service.ts index 3c5d6d88..1edafb4b 100644 --- a/server/apps/api/src/chat-list/chat-list.service.ts +++ b/server/apps/api/src/chat-list/chat-list.service.ts @@ -1,5 +1,5 @@ -import { Injectable } from '@nestjs/common'; -import { GetMessageDto, RestoreMessageDto } from '@chat-list/dto'; +import { BadRequestException, Injectable } from '@nestjs/common'; +import { GetMessageDto, ModifyMessageDto, RestoreMessageDto } from '@chat-list/dto'; import { ChannelRepository } from '@repository/channel.repository'; import { ChatListRespository } from '@repository/chat-list.respository'; import { GetUnreadMessagePointDto } from '@chat-list/dto/get-unread-message-point.dto'; @@ -113,4 +113,33 @@ export class ChatListService { } return unreadChatList[M].id; } + + async modifyMessage(modifyMessageDto: ModifyMessageDto) { + const { requestUserId, channel_id, chat_id, content } = modifyMessageDto; + const channel = await this.channelRepository.findOne({ _id: channel_id, deletedAt: undefined }); + + if (!channel) { + throw new BadRequestException('채널이 존재하지 않습니다.'); + } + const chatListId = Math.floor(+chat_id / 100); + const chatNum = +chat_id % 100; + + const chatList = JSON.parse( + JSON.stringify(await this.chatListRespository.findById(channel.chatLists[chatListId])), + ); + + if (chatList.chat[chatNum].senderId !== requestUserId) + throw new BadRequestException('자신이 보낸 채팅만 수정할 수 있습니다.'); + + chatList.chat[chatNum].content = content; + chatList.chat[chatNum].updatedAt = new Date(); + + await this.chatListRespository.updateOne({ _id: chatList._id }, chatList); + + chatList.chat[chatNum]['community_id'] = channel.communityId; + chatList.chat[chatNum]['chatId'] = chat_id; + delete chatList.chat[chatNum].id; + + return chatList.chat[chatNum]; + } } From bd78076003c67356db18127066df21a0cebd9228 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Mon, 12 Dec 2022 03:12:36 +0900 Subject: [PATCH 056/298] =?UTF-8?q?refactor:=20=EC=B1=84=EB=84=90=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20API=20=EC=9D=91=EB=8B=B5=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/chat-list/chat-list.service.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/apps/api/src/chat-list/chat-list.service.ts b/server/apps/api/src/chat-list/chat-list.service.ts index 1edafb4b..65075113 100644 --- a/server/apps/api/src/chat-list/chat-list.service.ts +++ b/server/apps/api/src/chat-list/chat-list.service.ts @@ -136,7 +136,8 @@ export class ChatListService { await this.chatListRespository.updateOne({ _id: chatList._id }, chatList); - chatList.chat[chatNum]['community_id'] = channel.communityId; + chatList.chat[chatNum]['channelId'] = channel_id; + chatList.chat[chatNum]['communityId'] = channel.communityId; chatList.chat[chatNum]['chatId'] = chat_id; delete chatList.chat[chatNum].id; From b0c6d4e659c0e767f2614b2c220a6cbfffe089dd Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Mon, 12 Dec 2022 03:23:42 +0900 Subject: [PATCH 057/298] =?UTF-8?q?refactor:=20=EC=B1=84=EB=84=90=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/chat-list/chat-list.service.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/server/apps/api/src/chat-list/chat-list.service.ts b/server/apps/api/src/chat-list/chat-list.service.ts index 65075113..98ca43a2 100644 --- a/server/apps/api/src/chat-list/chat-list.service.ts +++ b/server/apps/api/src/chat-list/chat-list.service.ts @@ -136,11 +136,12 @@ export class ChatListService { await this.chatListRespository.updateOne({ _id: chatList._id }, chatList); - chatList.chat[chatNum]['channelId'] = channel_id; - chatList.chat[chatNum]['communityId'] = channel.communityId; - chatList.chat[chatNum]['chatId'] = chat_id; delete chatList.chat[chatNum].id; - - return chatList.chat[chatNum]; + return { + ...chatList.chat[chatNum], + channelId: channel_id, + communityId: channel.communityId, + chatId: chat_id, + }; } } From 3dfef63a7653252815e662869a00eab50bc20c1c Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Sat, 10 Dec 2022 22:05:17 +0900 Subject: [PATCH 058/298] =?UTF-8?q?feat:=20message=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?API=20url=20=EC=83=9D=EC=84=B1=20#312?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/socket/src/axios/request-api-urls.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/apps/socket/src/axios/request-api-urls.ts b/server/apps/socket/src/axios/request-api-urls.ts index 40585fa9..ebc2abc2 100644 --- a/server/apps/socket/src/axios/request-api-urls.ts +++ b/server/apps/socket/src/axios/request-api-urls.ts @@ -1,2 +1,4 @@ export const storeMessageURL = (channelId) => `/api/channels/${channelId}/message`; export const joinChannelInUsersURL = (channelId) => `/api/channels/${channelId}/users`; +export const modifyMessageURL = (channelId, messageId) => + `api/channels/${channelId}/message/${messageId}`; From a7899eabaa393d07e8c887378818b3e048e30b05 Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Sat, 10 Dec 2022 22:08:30 +0900 Subject: [PATCH 059/298] =?UTF-8?q?feat:=20message=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?gateway=20=EC=9E=91=EC=84=B1=20#312?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/socket/src/socket.gateway.ts | 26 +++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/server/apps/socket/src/socket.gateway.ts b/server/apps/socket/src/socket.gateway.ts index 746affc5..772fc453 100644 --- a/server/apps/socket/src/socket.gateway.ts +++ b/server/apps/socket/src/socket.gateway.ts @@ -17,7 +17,7 @@ import { JwtService } from '@nestjs/jwt'; import { WsCatchAllFilter } from './exceptions/socket-catch-error'; import { RestoreMessageDto } from '@chat-list/dto'; import { requestApiServer } from './axios/request-api-server'; -import { joinChannelInUsersURL, storeMessageURL } from './axios/request-api-urls'; +import { joinChannelInUsersURL, modifyMessageURL, storeMessageURL } from './axios/request-api-urls'; import { authMiddleware } from './middleware/authMiddleware'; @UseFilters(new WsCatchAllFilter()) @@ -53,7 +53,7 @@ export class SocketGateway implements OnGatewayInit, OnGatewayConnection, OnGate const communityName = socket.nsp.name; const { id, channelId, user_id, message, time } = data; this.logger.log( - `New message.\t[NS] : ${communityName},\t[channel] : ${channelId}\t[From] ${user_id},\t[MSG][${time}]:${message}`, + `New message.\t[NS] : ${communityName},\t[channel] : ${channelId}\t[From] ${socket.user.nickname},\t[MSG][${time}]:${message}`, ); const restoreMessageDto: RestoreMessageDto = { channel_id: channelId, @@ -106,18 +106,30 @@ export class SocketGateway implements OnGatewayInit, OnGatewayConnection, OnGate } @SubscribeMessage('modify-message') - modifyMessageEvent( + async modifyMessageEvent( @MessageBody() data: ModifyMessage, @ConnectedSocket() socket: SocketWithAuth, ) { const community = socket.nsp; const communityName = socket.nsp.name; - const { channelId, user_id, message, messageId } = data; + const { channelId, message, messageId } = data; this.logger.log( - `Modify message.\t[NS] : ${communityName},\t[channel] : ${channelId}\t[From] ${user_id},\t[MSG] : ${message},\t[Origin id] : ${messageId}`, + `Modify message.\t[NS] : ${communityName},\t[channel] : ${channelId}\t[From] ${socket.user.nickname},\t[MSG] : ${message},\t[Origin id] : ${messageId}`, ); - community.to(channelId).emit('modify-message', data); - // TODO : db에 message data 수정을 여기서할지 논의하기 + + const result = await requestApiServer({ + method: 'patch', + path: modifyMessageURL(channelId, messageId), + accessToken: socket.user.accessToken, + data, + }); + + if (result) { + socket.to(channelId).emit('modify-message', data); + } + + const written = result; + return { written }; } afterInit(server: Server) { From da025a2ff86910aa5850c118a692b7751e777f96 Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Sun, 11 Dec 2022 00:34:29 +0900 Subject: [PATCH 060/298] =?UTF-8?q?fix:=20message=20=EA=B4=80=EB=A0=A8=20?= =?UTF-8?q?=EC=9D=B4=EB=B2=A4=ED=8A=B8=20=EC=88=98=EC=A0=95=EC=97=90=20?= =?UTF-8?q?=EB=8C=80=ED=95=9C=20mock=20client=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/socket/src/mock_client/client.js | 39 +++++++++++++------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/server/apps/socket/src/mock_client/client.js b/server/apps/socket/src/mock_client/client.js index 0d592ad6..36269155 100644 --- a/server/apps/socket/src/mock_client/client.js +++ b/server/apps/socket/src/mock_client/client.js @@ -1,10 +1,10 @@ import { io } from 'socket.io-client'; -const port = 80; -const url = 'http://49.50.167.202'; +const port = 8080; +const url = 'http://localhost'; //49.50.167.202'; // 형식은 'commu-{community id}' const accessToken = - 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2MzkwNDU4ODNmNDI2OGUxMjY3OGVmN2YiLCJuaWNrbmFtZSI6Im55IiwiaWF0IjoxNjcwNjY5OTgxLCJleHAiOjE2NzA2NzA4ODF9.X8-umkeMY0V5UoCyQJvEljbBSp5n-79BwD9-Sk-JYUg'; + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2MzkwNDU4ODNmNDI2OGUxMjY3OGVmN2YiLCJuaWNrbmFtZSI6Im55IiwiaWF0IjoxNjcwNjg2NDE0LCJleHAiOjE2NzA2ODczMTR9.Bf8s_YY--guj7OtYbwD84r2qO9ShvXN4BC33AN-qPTY'; const accessToken2 = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2Mzg0NWNiMTU0NDRmMGEyMGRlNTYxMDUiLCJuaWNrbmFtZSI6InNvb21hbiIsImlhdCI6MTY2OTY1MTM1NywiZXhwIjoxNjY5NjUyMjU3fQ.T3OGoF2hz4ew1iw2c4TA1tldHgTwDxkEyUFBkfUqeHo'; const opt = { @@ -19,7 +19,7 @@ try { // console.log(helloSocket.connected); // 연결되었는지 true, false로 나옴 // 처음 연결 후 channel 배열을 전달해야함 - const result = helloSocket.emit('join', { channels: ['a', 'b', 'c'] }); + const result = helloSocket.emit('join', { channels: ['639086392258e789af7d736e', 'b', 'c'] }); worldSocket.emit('join', { channels: ['x', 'y', 'z'] }); helloSocket.on('new-message', ({ channelId, user_id, message, time }) => { @@ -30,11 +30,13 @@ try { worldSocket.on('new-message', ({ channelId, user_id, message, time }) => { console.log(`new world channel : ${channelId}, sender : ${user_id}, msg : [${time}]${message}`); }); - helloSocket.on('modify-message', ({ channelId, user_id, messageId, message }) => { + + helloSocket.on('modify-message', ({ channelId, user_id, message, time }) => { console.log( - `modify message channel : ${channelId}, sender : ${user_id}, msg(${messageId}) : ${message}`, + `modify message channel : ${channelId}, sender : ${user_id}, msg : [${time}]${message}`, ); }); + helloSocket.on('connect_error', (err) => { console.log(err instanceof Error); // true console.log(err.message); // not authorized @@ -44,8 +46,9 @@ try { }); // message 전송 helloSocket.emit( - 'new-message', + 'message', { + type: 'new', channelId: '639086392258e789af7d736e', user_id: '639045883f4268e12678ef7f', message: 'hi its third message', @@ -57,8 +60,9 @@ try { ); worldSocket.emit( - 'new-message', + 'message', { + type: 'new', channelId: 'x', user_id: '639045883f4268e12678ef7f', message: 'hi its third message', @@ -69,12 +73,19 @@ try { }, ); - helloSocket.emit('modify-message', { - channelId: '639086392258e789af7d736e', - user_id: '311', - messageId: '0a2', - message: 'hi this is modify message', - }); + helloSocket.emit( + 'message', + { + type: 'modify', + channelId: '639086392258e789af7d736e', + user_id: '311', + messageId: '0a2', + message: 'hi this is modify message', + }, + (c) => { + console.log(c.written, ' modify done'); + }, + ); } catch (error) { console.log(error); } From b6b2d6ace541322a123ccfcd31e7f18c58c29778 Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Sun, 11 Dec 2022 00:35:22 +0900 Subject: [PATCH 061/298] =?UTF-8?q?feature:=20message=20=EA=B4=80=EB=A0=A8?= =?UTF-8?q?=20input=20interface=20=EC=84=A4=EC=A0=95=20#312,=20#314?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- shared/socket/DeleteMessage.ts | 7 +++++++ shared/socket/ModifyMessage.ts | 4 ++-- shared/socket/NewMessage.ts | 1 + shared/socket/index.ts | 1 + 4 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 shared/socket/DeleteMessage.ts diff --git a/shared/socket/DeleteMessage.ts b/shared/socket/DeleteMessage.ts new file mode 100644 index 00000000..bcb786af --- /dev/null +++ b/shared/socket/DeleteMessage.ts @@ -0,0 +1,7 @@ +export interface DeleteMessage { + type: string; + channelId: string; + message: string; + messageId: string; + cb: () => void; +} diff --git a/shared/socket/ModifyMessage.ts b/shared/socket/ModifyMessage.ts index 24c2778b..f1d5af04 100644 --- a/shared/socket/ModifyMessage.ts +++ b/shared/socket/ModifyMessage.ts @@ -1,7 +1,7 @@ export interface ModifyMessage { + type: string; channelId: string; - user_id: string; message: string; messageId: string; - time: Date; + cb: () => void; } diff --git a/shared/socket/NewMessage.ts b/shared/socket/NewMessage.ts index 555af2a0..99f6aeed 100644 --- a/shared/socket/NewMessage.ts +++ b/shared/socket/NewMessage.ts @@ -1,4 +1,5 @@ export interface NewMessage { + type: string; channelId: string; user_id: string; message: string; diff --git a/shared/socket/index.ts b/shared/socket/index.ts index d2282725..db85675f 100644 --- a/shared/socket/index.ts +++ b/shared/socket/index.ts @@ -1,4 +1,5 @@ export * from './NewMessage'; export * from './ModifyMessage'; +export * from './DeleteMessage'; export * from './Join'; export * from './InviteChannel'; From 91f95630169effc4a50f2c49cd407d81cac2d35b Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Sun, 11 Dec 2022 00:36:51 +0900 Subject: [PATCH 062/298] =?UTF-8?q?feature:=20message=20=EA=B4=80=EB=A0=A8?= =?UTF-8?q?=20event=20=EC=A0=95=EC=9D=98(modify,=20delete)=20#312,=20#314?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 새로운 메세지, 메세지 수정, 메세지 삭제 - 메세지 이벤트 일원화 및 input에 타입 추가 --- .../apps/socket/src/axios/request-api-urls.ts | 9 ++- .../socket/src/axios/request-api.method.ts | 2 + server/apps/socket/src/socket.gateway.ts | 78 +++++++++---------- 3 files changed, 45 insertions(+), 44 deletions(-) create mode 100644 server/apps/socket/src/axios/request-api.method.ts diff --git a/server/apps/socket/src/axios/request-api-urls.ts b/server/apps/socket/src/axios/request-api-urls.ts index ebc2abc2..a1eb106d 100644 --- a/server/apps/socket/src/axios/request-api-urls.ts +++ b/server/apps/socket/src/axios/request-api-urls.ts @@ -1,4 +1,11 @@ export const storeMessageURL = (channelId) => `/api/channels/${channelId}/message`; export const joinChannelInUsersURL = (channelId) => `/api/channels/${channelId}/users`; -export const modifyMessageURL = (channelId, messageId) => +export const modifyOrDeleteMessageURL = (channelId, messageId) => `api/channels/${channelId}/message/${messageId}`; + +export const getMessageRequestURL = (data) => { + if (data.type == 'new') return storeMessageURL(data.channelId); + else if (data.type == 'modify' || data.type == 'delete') + return modifyOrDeleteMessageURL(data.channelId, data.messageId); + else throw Error('Unknown Message Request Type'); +}; diff --git a/server/apps/socket/src/axios/request-api.method.ts b/server/apps/socket/src/axios/request-api.method.ts new file mode 100644 index 00000000..04316671 --- /dev/null +++ b/server/apps/socket/src/axios/request-api.method.ts @@ -0,0 +1,2 @@ +export const filterHttpMethod = (type) => + type === 'new' ? 'post' : type === 'modify' ? 'patch' : 'delete'; diff --git a/server/apps/socket/src/socket.gateway.ts b/server/apps/socket/src/socket.gateway.ts index 772fc453..100dbacb 100644 --- a/server/apps/socket/src/socket.gateway.ts +++ b/server/apps/socket/src/socket.gateway.ts @@ -11,14 +11,21 @@ import { } from '@nestjs/websockets'; import { Server } from 'socket.io'; import { Logger, UseFilters } from '@nestjs/common'; -import { Join, NewMessage, ModifyMessage, InviteChannel } from '@socketInterface/index'; +import { + Join, + NewMessage, + ModifyMessage, + InviteChannel, + DeleteMessage, +} from '@socketInterface/index'; import { SocketWithAuth } from './types'; import { JwtService } from '@nestjs/jwt'; import { WsCatchAllFilter } from './exceptions/socket-catch-error'; import { RestoreMessageDto } from '@chat-list/dto'; import { requestApiServer } from './axios/request-api-server'; -import { joinChannelInUsersURL, modifyMessageURL, storeMessageURL } from './axios/request-api-urls'; +import { getMessageRequestURL, joinChannelInUsersURL } from './axios/request-api-urls'; import { authMiddleware } from './middleware/authMiddleware'; +import { filterHttpMethod } from './axios/request-api.method'; @UseFilters(new WsCatchAllFilter()) @WebSocketGateway({ @@ -45,30 +52,26 @@ export class SocketGateway implements OnGatewayInit, OnGatewayConnection, OnGate ); } - @SubscribeMessage('new-message') + @SubscribeMessage('message') async newMessageEvent( - @MessageBody() data: NewMessage, + @MessageBody() data: NewMessage | ModifyMessage | DeleteMessage, @ConnectedSocket() socket: SocketWithAuth, ) { const communityName = socket.nsp.name; - const { id, channelId, user_id, message, time } = data; + const { type, channelId, message } = data; this.logger.log( - `New message.\t[NS] : ${communityName},\t[channel] : ${channelId}\t[From] ${socket.user.nickname},\t[MSG][${time}]:${message}`, + `${type} message.\t[NS] : ${communityName},\t[channel] : ${channelId}\t[From] ${socket.user.nickname},\t[MSG]:${message}`, ); - const restoreMessageDto: RestoreMessageDto = { - channel_id: channelId, - type: 'TEXT', - content: message, - senderId: socket.user._id, - }; + const result = await requestApiServer({ - method: 'post', - path: storeMessageURL(channelId), + method: filterHttpMethod(type), + path: getMessageRequestURL(data), accessToken: socket.user.accessToken, - data: restoreMessageDto, + data: getBodyData(socket.user._id, data), }); + console.log(result); if (result) { - socket.to(channelId).emit('new-message', data); + socket.to(channelId).emit(`${type}-message`, data); } const written = result; @@ -105,33 +108,6 @@ export class SocketGateway implements OnGatewayInit, OnGatewayConnection, OnGate return { isSuccess }; } - @SubscribeMessage('modify-message') - async modifyMessageEvent( - @MessageBody() data: ModifyMessage, - @ConnectedSocket() socket: SocketWithAuth, - ) { - const community = socket.nsp; - const communityName = socket.nsp.name; - const { channelId, message, messageId } = data; - this.logger.log( - `Modify message.\t[NS] : ${communityName},\t[channel] : ${channelId}\t[From] ${socket.user.nickname},\t[MSG] : ${message},\t[Origin id] : ${messageId}`, - ); - - const result = await requestApiServer({ - method: 'patch', - path: modifyMessageURL(channelId, messageId), - accessToken: socket.user.accessToken, - data, - }); - - if (result) { - socket.to(channelId).emit('modify-message', data); - } - - const written = result; - return { written }; - } - afterInit(server: Server) { // 서버 실행 시 실행되는 함수 this.logger.log('웹소켓 서버 실행 시작'); @@ -148,3 +124,19 @@ export class SocketGateway implements OnGatewayInit, OnGatewayConnection, OnGate this.logger.log(`Client Connected : [NS] '${socket.nsp.name}', [ID] ${socket.id}`); } } + +const getBodyData = (userId, data) => { + if (data.type == 'new') { + return { + channel_id: data.channelId, + type: 'TEXT', + content: data.message, + senderId: userId, + } as RestoreMessageDto; + } else if (['modify', 'delete'].includes(data.type)) { + delete data['type']; + return data; + } else { + throw Error('Unknown Message Request Type'); + } +}; From a91c12eb1195da284835e3b0573ad03477864c28 Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Sun, 11 Dec 2022 02:22:12 +0900 Subject: [PATCH 063/298] =?UTF-8?q?fix:=20API=20URL=20=EC=9E=84=EC=8B=9C?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/socket/src/axios/request-api-urls.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/apps/socket/src/axios/request-api-urls.ts b/server/apps/socket/src/axios/request-api-urls.ts index a1eb106d..466568ec 100644 --- a/server/apps/socket/src/axios/request-api-urls.ts +++ b/server/apps/socket/src/axios/request-api-urls.ts @@ -1,7 +1,7 @@ export const storeMessageURL = (channelId) => `/api/channels/${channelId}/message`; export const joinChannelInUsersURL = (channelId) => `/api/channels/${channelId}/users`; export const modifyOrDeleteMessageURL = (channelId, messageId) => - `api/channels/${channelId}/message/${messageId}`; + `api/channels/${channelId}/messages/${messageId}`; export const getMessageRequestURL = (data) => { if (data.type == 'new') return storeMessageURL(data.channelId); From baed63108b49dfd4faee233ba54774192abc9a81 Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Mon, 12 Dec 2022 01:46:07 +0900 Subject: [PATCH 064/298] fix: api url fix --- server/apps/socket/src/axios/request-api-urls.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/apps/socket/src/axios/request-api-urls.ts b/server/apps/socket/src/axios/request-api-urls.ts index 466568ec..8f5292d2 100644 --- a/server/apps/socket/src/axios/request-api-urls.ts +++ b/server/apps/socket/src/axios/request-api-urls.ts @@ -1,7 +1,7 @@ -export const storeMessageURL = (channelId) => `/api/channels/${channelId}/message`; +export const storeMessageURL = (channelId) => `/api/channels/${channelId}/chat`; export const joinChannelInUsersURL = (channelId) => `/api/channels/${channelId}/users`; export const modifyOrDeleteMessageURL = (channelId, messageId) => - `api/channels/${channelId}/messages/${messageId}`; + `api/channels/${channelId}/chats/${messageId}`; export const getMessageRequestURL = (data) => { if (data.type == 'new') return storeMessageURL(data.channelId); From 31f018f9f7617cf0348f7efbfb09d2aaf97c6116 Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Mon, 12 Dec 2022 02:11:28 +0900 Subject: [PATCH 065/298] fix: socket chat event fix --- .../socket/src/axios/request-api-server.ts | 5 ++-- server/apps/socket/src/socket.gateway.ts | 27 +++++++++---------- shared/socket/DeleteMessage.ts | 5 ++-- shared/socket/ModifyMessage.ts | 6 ++--- shared/socket/NewMessage.ts | 7 ++--- 5 files changed, 22 insertions(+), 28 deletions(-) diff --git a/server/apps/socket/src/axios/request-api-server.ts b/server/apps/socket/src/axios/request-api-server.ts index 9045c253..37abe4f5 100644 --- a/server/apps/socket/src/axios/request-api-server.ts +++ b/server/apps/socket/src/axios/request-api-server.ts @@ -1,15 +1,14 @@ import axios from 'axios'; -import { WsException } from '@nestjs/websockets'; export const requestApiServer = async ({ method, path, accessToken, data }) => { if (process.env.NODE_ENV === 'dev') { return true; } - const apiUrl = 'http://localhost:' + (process.env.NODE_ENV == 'dev' ? 3000 : 3001) + path; + const url = 'http://localhost:' + (process.env.NODE_ENV == 'dev' ? 3000 : 3001) + path; try { const response = await axios({ method, - url: apiUrl, + url, headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${accessToken}`, diff --git a/server/apps/socket/src/socket.gateway.ts b/server/apps/socket/src/socket.gateway.ts index 100dbacb..44775c55 100644 --- a/server/apps/socket/src/socket.gateway.ts +++ b/server/apps/socket/src/socket.gateway.ts @@ -52,30 +52,30 @@ export class SocketGateway implements OnGatewayInit, OnGatewayConnection, OnGate ); } - @SubscribeMessage('message') - async newMessageEvent( + @SubscribeMessage('chat') + async chatEvent( @MessageBody() data: NewMessage | ModifyMessage | DeleteMessage, @ConnectedSocket() socket: SocketWithAuth, ) { const communityName = socket.nsp.name; - const { type, channelId, message } = data; + const { chatType, channelId } = data; this.logger.log( - `${type} message.\t[NS] : ${communityName},\t[channel] : ${channelId}\t[From] ${socket.user.nickname},\t[MSG]:${message}`, + `${chatType} message.\t[NS] : ${communityName},\t[channel] : ${channelId}\t[From] ${socket.user.nickname}`, ); const result = await requestApiServer({ - method: filterHttpMethod(type), + method: filterHttpMethod(chatType), path: getMessageRequestURL(data), accessToken: socket.user.accessToken, data: getBodyData(socket.user._id, data), }); console.log(result); if (result) { - socket.to(channelId).emit(`${type}-message`, data); + socket.to(channelId).emit(`${chatType}-message`, result); } - const written = result; - return { written }; + const written = result ? true : false; + return { written, chatInfo: result }; } @SubscribeMessage('invite-users-to-channel') @@ -126,16 +126,15 @@ export class SocketGateway implements OnGatewayInit, OnGatewayConnection, OnGate } const getBodyData = (userId, data) => { - if (data.type == 'new') { + if (data.chatType === 'new') { return { - channel_id: data.channelId, type: 'TEXT', content: data.message, - senderId: userId, } as RestoreMessageDto; - } else if (['modify', 'delete'].includes(data.type)) { - delete data['type']; - return data; + } else if (data.chatType === 'delete') { + return undefined; + } else if (data.chatType === 'modify') { + return { content: data.content }; } else { throw Error('Unknown Message Request Type'); } diff --git a/shared/socket/DeleteMessage.ts b/shared/socket/DeleteMessage.ts index bcb786af..d9a277cf 100644 --- a/shared/socket/DeleteMessage.ts +++ b/shared/socket/DeleteMessage.ts @@ -1,7 +1,6 @@ export interface DeleteMessage { - type: string; + chatType: string; channelId: string; - message: string; - messageId: string; + chatId: string; cb: () => void; } diff --git a/shared/socket/ModifyMessage.ts b/shared/socket/ModifyMessage.ts index f1d5af04..8acdb81f 100644 --- a/shared/socket/ModifyMessage.ts +++ b/shared/socket/ModifyMessage.ts @@ -1,7 +1,7 @@ export interface ModifyMessage { - type: string; + chatType: string; channelId: string; - message: string; - messageId: string; + content: string; + chatId: string; cb: () => void; } diff --git a/shared/socket/NewMessage.ts b/shared/socket/NewMessage.ts index 99f6aeed..b732eedc 100644 --- a/shared/socket/NewMessage.ts +++ b/shared/socket/NewMessage.ts @@ -1,9 +1,6 @@ export interface NewMessage { - type: string; + chatType: string; channelId: string; - user_id: string; - message: string; - id: string; - time: Date; + content: string; cb: () => void; } From 140ad6a613bef766503c51bc55ba7a2267003959 Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Mon, 12 Dec 2022 02:19:34 +0900 Subject: [PATCH 066/298] =?UTF-8?q?refactor:=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apps/socket/src/axios/requet-api-body.ts | 16 ++++++++++++++++ server/apps/socket/src/socket.gateway.ts | 19 ++----------------- 2 files changed, 18 insertions(+), 17 deletions(-) create mode 100644 server/apps/socket/src/axios/requet-api-body.ts diff --git a/server/apps/socket/src/axios/requet-api-body.ts b/server/apps/socket/src/axios/requet-api-body.ts new file mode 100644 index 00000000..92814541 --- /dev/null +++ b/server/apps/socket/src/axios/requet-api-body.ts @@ -0,0 +1,16 @@ +import { RestoreMessageDto } from '@chat-list/dto'; + +export const getBodyData = (userId, data) => { + if (data.chatType === 'new') { + return { + type: 'TEXT', + content: data.message, + } as RestoreMessageDto; + } else if (data.chatType === 'delete') { + return undefined; + } else if (data.chatType === 'modify') { + return { content: data.content }; + } else { + throw Error('Unknown Message Request Type'); + } +}; diff --git a/server/apps/socket/src/socket.gateway.ts b/server/apps/socket/src/socket.gateway.ts index 44775c55..fa733f85 100644 --- a/server/apps/socket/src/socket.gateway.ts +++ b/server/apps/socket/src/socket.gateway.ts @@ -21,11 +21,11 @@ import { import { SocketWithAuth } from './types'; import { JwtService } from '@nestjs/jwt'; import { WsCatchAllFilter } from './exceptions/socket-catch-error'; -import { RestoreMessageDto } from '@chat-list/dto'; import { requestApiServer } from './axios/request-api-server'; import { getMessageRequestURL, joinChannelInUsersURL } from './axios/request-api-urls'; import { authMiddleware } from './middleware/authMiddleware'; import { filterHttpMethod } from './axios/request-api.method'; +import { getBodyData } from './axios/requet-api-body'; @UseFilters(new WsCatchAllFilter()) @WebSocketGateway({ @@ -53,7 +53,7 @@ export class SocketGateway implements OnGatewayInit, OnGatewayConnection, OnGate } @SubscribeMessage('chat') - async chatEvent( + async chatEvents( @MessageBody() data: NewMessage | ModifyMessage | DeleteMessage, @ConnectedSocket() socket: SocketWithAuth, ) { @@ -124,18 +124,3 @@ export class SocketGateway implements OnGatewayInit, OnGatewayConnection, OnGate this.logger.log(`Client Connected : [NS] '${socket.nsp.name}', [ID] ${socket.id}`); } } - -const getBodyData = (userId, data) => { - if (data.chatType === 'new') { - return { - type: 'TEXT', - content: data.message, - } as RestoreMessageDto; - } else if (data.chatType === 'delete') { - return undefined; - } else if (data.chatType === 'modify') { - return { content: data.content }; - } else { - throw Error('Unknown Message Request Type'); - } -}; From f67c06aea2239b28bb1a9aeed6583a9760bb34dd Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Mon, 12 Dec 2022 03:41:40 +0900 Subject: [PATCH 067/298] =?UTF-8?q?fix:=20socket=20new-chat=20=EA=B2=80?= =?UTF-8?q?=EC=A6=9D=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../socket/src/axios/request-api-server.ts | 1 + .../apps/socket/src/axios/request-api-urls.ts | 4 +- .../apps/socket/src/axios/requet-api-body.ts | 8 +- server/apps/socket/src/mock_client/client.js | 95 +++++++++---------- server/apps/socket/src/socket.gateway.ts | 5 +- 5 files changed, 51 insertions(+), 62 deletions(-) diff --git a/server/apps/socket/src/axios/request-api-server.ts b/server/apps/socket/src/axios/request-api-server.ts index 37abe4f5..8cfd4ae1 100644 --- a/server/apps/socket/src/axios/request-api-server.ts +++ b/server/apps/socket/src/axios/request-api-server.ts @@ -23,6 +23,7 @@ export const requestApiServer = async ({ method, path, accessToken, data }) => { response.data?.message?.match(/error/i) ) { // throw new WsException('API Server 요청 중 에러가 발생했습니다.'); + console.log(data.name ?? data.message ?? 'API Request Error'); return false; } return response.data.result ?? true; diff --git a/server/apps/socket/src/axios/request-api-urls.ts b/server/apps/socket/src/axios/request-api-urls.ts index 8f5292d2..fca29c7a 100644 --- a/server/apps/socket/src/axios/request-api-urls.ts +++ b/server/apps/socket/src/axios/request-api-urls.ts @@ -4,8 +4,8 @@ export const modifyOrDeleteMessageURL = (channelId, messageId) => `api/channels/${channelId}/chats/${messageId}`; export const getMessageRequestURL = (data) => { - if (data.type == 'new') return storeMessageURL(data.channelId); - else if (data.type == 'modify' || data.type == 'delete') + if (data.chatType === 'new') return storeMessageURL(data.channelId); + else if (data.chatType === 'modify' || data.chatType === 'delete') return modifyOrDeleteMessageURL(data.channelId, data.messageId); else throw Error('Unknown Message Request Type'); }; diff --git a/server/apps/socket/src/axios/requet-api-body.ts b/server/apps/socket/src/axios/requet-api-body.ts index 92814541..e217f9ea 100644 --- a/server/apps/socket/src/axios/requet-api-body.ts +++ b/server/apps/socket/src/axios/requet-api-body.ts @@ -1,11 +1,9 @@ -import { RestoreMessageDto } from '@chat-list/dto'; - -export const getBodyData = (userId, data) => { +export const getBodyData = (data) => { if (data.chatType === 'new') { return { type: 'TEXT', - content: data.message, - } as RestoreMessageDto; + content: data.content, + }; } else if (data.chatType === 'delete') { return undefined; } else if (data.chatType === 'modify') { diff --git a/server/apps/socket/src/mock_client/client.js b/server/apps/socket/src/mock_client/client.js index 36269155..c6fbf7ca 100644 --- a/server/apps/socket/src/mock_client/client.js +++ b/server/apps/socket/src/mock_client/client.js @@ -1,40 +1,35 @@ import { io } from 'socket.io-client'; const port = 8080; -const url = 'http://localhost'; //49.50.167.202'; +const url = 'http://localhost'; // 형식은 'commu-{community id}' const accessToken = - 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2MzkwNDU4ODNmNDI2OGUxMjY3OGVmN2YiLCJuaWNrbmFtZSI6Im55IiwiaWF0IjoxNjcwNjg2NDE0LCJleHAiOjE2NzA2ODczMTR9.Bf8s_YY--guj7OtYbwD84r2qO9ShvXN4BC33AN-qPTY'; -const accessToken2 = - 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2Mzg0NWNiMTU0NDRmMGEyMGRlNTYxMDUiLCJuaWNrbmFtZSI6InNvb21hbiIsImlhdCI6MTY2OTY1MTM1NywiZXhwIjoxNjY5NjUyMjU3fQ.T3OGoF2hz4ew1iw2c4TA1tldHgTwDxkEyUFBkfUqeHo'; + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2Mzk0YzJlNGQxYTYxNWJmNTY0ZDVhY2YiLCJuaWNrbmFtZSI6Im5heW91bmciLCJpYXQiOjE2NzA3ODMxMjIsImV4cCI6MTY3MDc4NDAyMn0.d_xzKiTomxwsDvckKPfZayGELch6JwTlKAYYN3BShUM'; + const opt = { auth: { token: `Bearer ${accessToken}`, }, }; try { - const helloSocket = io(`${url}:${port}/socket/commu-hello`, opt); - const worldSocket = io(`${url}:${port}/socket/commu-world`, opt); // 다른 namesapce + const helloSocket = io(`${url}:${port}/socket/commu-63956c42d1a615bf564e3af6`, opt); + // const worldSocket = io(`${url}:${port}/socket/commu-world`, opt); // 다른 namesapce // console.log(helloSocket.connected); // 연결되었는지 true, false로 나옴 // 처음 연결 후 channel 배열을 전달해야함 - const result = helloSocket.emit('join', { channels: ['639086392258e789af7d736e', 'b', 'c'] }); - worldSocket.emit('join', { channels: ['x', 'y', 'z'] }); + const result = helloSocket.emit('join', { channels: ['63956c5cd1a615bf564e3afe', 'b', 'c'] }); + // worldSocket.emit('join', { channels: ['x', 'y', 'z'] }); - helloSocket.on('new-message', ({ channelId, user_id, message, time }) => { - console.log( - `new message channel : ${channelId}, sender : ${user_id}, msg : [${time}]${message}`, - ); - }); - worldSocket.on('new-message', ({ channelId, user_id, message, time }) => { - console.log(`new world channel : ${channelId}, sender : ${user_id}, msg : [${time}]${message}`); + helloSocket.on('new-chat', (data) => { + console.log(`new message channel : ${JSON.stringify(data)}`); }); + // worldSocket.on('new-chat', (data) => { + // console.log(`new world channel : ${JSON.stringify(data)}`); + // }); - helloSocket.on('modify-message', ({ channelId, user_id, message, time }) => { - console.log( - `modify message channel : ${channelId}, sender : ${user_id}, msg : [${time}]${message}`, - ); + helloSocket.on('modify-chat', (data) => { + console.log(`modify message channel : ${JSON.stringify(data)}`); }); helloSocket.on('connect_error', (err) => { @@ -46,46 +41,42 @@ try { }); // message 전송 helloSocket.emit( - 'message', + 'chat', { - type: 'new', - channelId: '639086392258e789af7d736e', - user_id: '639045883f4268e12678ef7f', - message: 'hi its third message', - time: new Date(), + chatType: 'new', + channelId: '63956c5cd1a615bf564e3afe', + content: '화요일 좋아', }, (c) => { - console.log(c.written, ' this is hello'); + console.log(c.written, ' this is hello ', JSON.stringify(c.chatInfo)); }, ); - worldSocket.emit( - 'message', - { - type: 'new', - channelId: 'x', - user_id: '639045883f4268e12678ef7f', - message: 'hi its third message', - time: new Date(), - }, - (c) => { - console.log(c.written, ' this is world'); - }, - ); + // worldSocket.emit( + // 'message', + // { + // type: 'new', + // channelId: 'x', + // content: 'hi its third message', + // }, + // (c) => { + // console.log(c.written, ' this is world', JSON.stringify(c.chatInfo)); + // }, + // ); - helloSocket.emit( - 'message', - { - type: 'modify', - channelId: '639086392258e789af7d736e', - user_id: '311', - messageId: '0a2', - message: 'hi this is modify message', - }, - (c) => { - console.log(c.written, ' modify done'); - }, - ); + // helloSocket.emit( + // 'message', + // { + // type: 'modify', + // channelId: '639086392258e789af7d736e', + // user_id: '311', + // messageId: '0a2', + // message: 'hi this is modify message', + // }, + // (c) => { + // console.log(c.written, ' modify done'); + // }, + // ); } catch (error) { console.log(error); } diff --git a/server/apps/socket/src/socket.gateway.ts b/server/apps/socket/src/socket.gateway.ts index fa733f85..734e5008 100644 --- a/server/apps/socket/src/socket.gateway.ts +++ b/server/apps/socket/src/socket.gateway.ts @@ -62,16 +62,15 @@ export class SocketGateway implements OnGatewayInit, OnGatewayConnection, OnGate this.logger.log( `${chatType} message.\t[NS] : ${communityName},\t[channel] : ${channelId}\t[From] ${socket.user.nickname}`, ); - const result = await requestApiServer({ method: filterHttpMethod(chatType), path: getMessageRequestURL(data), accessToken: socket.user.accessToken, - data: getBodyData(socket.user._id, data), + data: getBodyData(data), }); console.log(result); if (result) { - socket.to(channelId).emit(`${chatType}-message`, result); + socket.to(channelId).emit(`${chatType}-chat`, result); } const written = result ? true : false; From 7f4dca099f2044e296a0ff9cbe7f4e3885cddfdb Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Mon, 12 Dec 2022 04:00:16 +0900 Subject: [PATCH 068/298] =?UTF-8?q?fix:=20socket=20modify-chat=20=EA=B2=80?= =?UTF-8?q?=EC=A6=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../socket/src/axios/request-api-server.ts | 1 + .../apps/socket/src/axios/request-api-urls.ts | 6 +-- server/apps/socket/src/mock_client/client.js | 49 +++++++++---------- 3 files changed, 28 insertions(+), 28 deletions(-) diff --git a/server/apps/socket/src/axios/request-api-server.ts b/server/apps/socket/src/axios/request-api-server.ts index 8cfd4ae1..12bcb5c2 100644 --- a/server/apps/socket/src/axios/request-api-server.ts +++ b/server/apps/socket/src/axios/request-api-server.ts @@ -28,6 +28,7 @@ export const requestApiServer = async ({ method, path, accessToken, data }) => { } return response.data.result ?? true; } catch (error) { + console.log(error); // throw new WsException('API Server 요청 중 에러가 발생했습니다.'); return false; } diff --git a/server/apps/socket/src/axios/request-api-urls.ts b/server/apps/socket/src/axios/request-api-urls.ts index fca29c7a..d781ab8d 100644 --- a/server/apps/socket/src/axios/request-api-urls.ts +++ b/server/apps/socket/src/axios/request-api-urls.ts @@ -1,11 +1,11 @@ export const storeMessageURL = (channelId) => `/api/channels/${channelId}/chat`; export const joinChannelInUsersURL = (channelId) => `/api/channels/${channelId}/users`; -export const modifyOrDeleteMessageURL = (channelId, messageId) => - `api/channels/${channelId}/chats/${messageId}`; +export const modifyOrDeleteMessageURL = (channelId, chatId) => + `/api/channels/${channelId}/chats/${chatId}`; export const getMessageRequestURL = (data) => { if (data.chatType === 'new') return storeMessageURL(data.channelId); else if (data.chatType === 'modify' || data.chatType === 'delete') - return modifyOrDeleteMessageURL(data.channelId, data.messageId); + return modifyOrDeleteMessageURL(data.channelId, data.chatId); else throw Error('Unknown Message Request Type'); }; diff --git a/server/apps/socket/src/mock_client/client.js b/server/apps/socket/src/mock_client/client.js index c6fbf7ca..78da7585 100644 --- a/server/apps/socket/src/mock_client/client.js +++ b/server/apps/socket/src/mock_client/client.js @@ -4,7 +4,7 @@ const port = 8080; const url = 'http://localhost'; // 형식은 'commu-{community id}' const accessToken = - 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2Mzk0YzJlNGQxYTYxNWJmNTY0ZDVhY2YiLCJuaWNrbmFtZSI6Im5heW91bmciLCJpYXQiOjE2NzA3ODMxMjIsImV4cCI6MTY3MDc4NDAyMn0.d_xzKiTomxwsDvckKPfZayGELch6JwTlKAYYN3BShUM'; + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2Mzk0YzJlNGQxYTYxNWJmNTY0ZDVhY2YiLCJuaWNrbmFtZSI6Im5heW91bmciLCJpYXQiOjE2NzA3ODQ3MTQsImV4cCI6MTY3MDc4NTYxNH0.Cx8pjTF1_rpL2KINFPQjXkFUzu0gtdFX6ng0gbAcKkU'; const opt = { auth: { @@ -40,17 +40,17 @@ try { console.log('fail error ', message); }); // message 전송 - helloSocket.emit( - 'chat', - { - chatType: 'new', - channelId: '63956c5cd1a615bf564e3afe', - content: '화요일 좋아', - }, - (c) => { - console.log(c.written, ' this is hello ', JSON.stringify(c.chatInfo)); - }, - ); + // helloSocket.emit( + // 'chat', + // { + // chatType: 'new', + // channelId: '63956c5cd1a615bf564e3afe', + // content: '화요일 좋아', + // }, + // (c) => { + // console.log(c.written, ' this is hello ', JSON.stringify(c.chatInfo)); + // }, + // ); // worldSocket.emit( // 'message', @@ -64,19 +64,18 @@ try { // }, // ); - // helloSocket.emit( - // 'message', - // { - // type: 'modify', - // channelId: '639086392258e789af7d736e', - // user_id: '311', - // messageId: '0a2', - // message: 'hi this is modify message', - // }, - // (c) => { - // console.log(c.written, ' modify done'); - // }, - // ); + helloSocket.emit( + 'chat', + { + chatType: 'modify', + channelId: '63956c5cd1a615bf564e3afe', + chatId: '6', + content: '맞앙, 화요일 싫어', + }, + (c) => { + console.log(c.written, ' modify done'); + }, + ); } catch (error) { console.log(error); } From 688462bfa3854f0e2fa9cdbef1f300295fafbf17 Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Mon, 12 Dec 2022 14:03:42 +0900 Subject: [PATCH 069/298] =?UTF-8?q?fix:=20get=20communities=20=EC=8B=9C=20?= =?UTF-8?q?=EC=BB=A4=EB=AE=A4=EB=8B=88=ED=8B=B0=20=EB=B0=8F=20=EC=B1=84?= =?UTF-8?q?=EB=84=90=20=EC=A0=95=EB=A0=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/community/community.service.ts | 3 +++ server/apps/api/src/community/helper/sortedByCreateTime.ts | 3 +++ 2 files changed, 6 insertions(+) create mode 100644 server/apps/api/src/community/helper/sortedByCreateTime.ts diff --git a/server/apps/api/src/community/community.service.ts b/server/apps/api/src/community/community.service.ts index 1008fde0..54932411 100644 --- a/server/apps/api/src/community/community.service.ts +++ b/server/apps/api/src/community/community.service.ts @@ -15,6 +15,7 @@ import { getChannelBasicInfo } from '@channel/helper/getChannelBasicInfo'; import { RequestUserAboutCommunityDto } from '@community/dto/request-user-about-community.dto'; import { getUserBasicInfo } from '@user/helper/getUserBasicInfo'; import { ChatListRespository } from '@repository/chat-list.respository'; +import { sortedByCreateTime } from '@community/helper/sortedByCreateTime'; @Injectable() export class CommunityService { @@ -62,10 +63,12 @@ export class CommunityService { channelsInfo.push(channelInfo); }), ); + channelsInfo.sort(sortedByCreateTime); const communityInfo = getCommunityBasicInfo(community, channelsInfo); communitiesInfo.push(communityInfo); }), ); + communitiesInfo.sort(sortedByCreateTime); return { communities: communitiesInfo }; } async createCommunity(createCommunityDto: CreateCommunityDto) { diff --git a/server/apps/api/src/community/helper/sortedByCreateTime.ts b/server/apps/api/src/community/helper/sortedByCreateTime.ts new file mode 100644 index 00000000..270e11c8 --- /dev/null +++ b/server/apps/api/src/community/helper/sortedByCreateTime.ts @@ -0,0 +1,3 @@ +export const sortedByCreateTime = (a, b) => { + return a.createdAt - b.createdAt; +}; From 7f20aa69e6c9ef1dc12a5a1e1c8beb6f43ea89a6 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Mon, 12 Dec 2022 13:58:27 +0900 Subject: [PATCH 070/298] =?UTF-8?q?fix:=20=EA=B4=80=EB=A6=AC=EC=9E=90?= =?UTF-8?q?=EA=B0=80=20=EC=B1=84=EB=84=90=20=EB=82=98=EA=B0=88=20=EC=88=98?= =?UTF-8?q?=20=EC=9E=88=EB=8A=94=20=EC=9D=B4=EC=8A=88=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/channel/channel.service.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/server/apps/api/src/channel/channel.service.ts b/server/apps/api/src/channel/channel.service.ts index 82c5cdd0..11538864 100644 --- a/server/apps/api/src/channel/channel.service.ts +++ b/server/apps/api/src/channel/channel.service.ts @@ -93,16 +93,17 @@ export class ChannelService { // channel 관리자이고 channel의 users에 2명이상 존재 시 채널 퇴장 불가능 const channel = await this.channelRepository.findOne({ - channel_id: channel_id, + _id: channel_id, deletedAt: undefined, }); + if (!channel) throw new BadRequestException('존재하지 않는 채널입니다.'); if (requestUserId === channel.managerId) { if (channel.users.length > 1) { throw new BadRequestException('관리자를 변경하고 채널을 퇴장하십시오!'); } // 관리자 혼자 채널에 존재하고 채널을 나갈 경우 채널 제거 - this.deleteChannel({ channel_id, requestUserId }); + await this.deleteChannel({ channel_id, requestUserId }); } // channel도큐먼트에 users필드에서 user_id 제거 @@ -121,6 +122,7 @@ export class ChannelService { // 관리자가 아니면 채널 삭제 에러 처리 const channel = await this.channelRepository.findOne({ _id: channel_id, deletedAt: undefined }); if (!channel) throw new BadRequestException('존재하지 않는 채널입니다.'); + if (requestUserId !== channel.managerId) { throw new BadRequestException('관리자가 아닙니다!'); } @@ -160,7 +162,7 @@ export class ChannelService { const channelInfo = getChannelBasicInfo(await this.channelRepository.findById(channel_id)); if (!channelInfo) throw new BadRequestException(); - return { ...channelInfo, lastRead: false }; + return { ...channelInfo, existUnreadChat: false }; } async updateLastRead(updateLastReadDto: UpdateLastReadDto) { From 93d1d3880636d4e49f39f5cacd1a8b92a3aed3f5 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Mon, 12 Dec 2022 13:59:05 +0900 Subject: [PATCH 071/298] =?UTF-8?q?refactor:=20=EC=B1=84=ED=8C=85=20?= =?UTF-8?q?=EC=9D=91=EB=8B=B5=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `chatId` -> `id` --- server/apps/api/src/chat-list/chat-list.service.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/server/apps/api/src/chat-list/chat-list.service.ts b/server/apps/api/src/chat-list/chat-list.service.ts index 98ca43a2..517b7cb2 100644 --- a/server/apps/api/src/chat-list/chat-list.service.ts +++ b/server/apps/api/src/chat-list/chat-list.service.ts @@ -44,7 +44,7 @@ export class ChatListService { return { ...restoreMessageDto, - chatId: chatNum, + id: +chatNum, communityId: channel.communityId, createdAt: date, updatedAt: date, @@ -136,12 +136,11 @@ export class ChatListService { await this.chatListRespository.updateOne({ _id: chatList._id }, chatList); - delete chatList.chat[chatNum].id; return { ...chatList.chat[chatNum], channelId: channel_id, communityId: channel.communityId, - chatId: chat_id, + id: +chat_id, }; } } From 017cb012b91df683abe59c59fcbb28a430ac3717 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Mon, 12 Dec 2022 16:17:13 +0900 Subject: [PATCH 072/298] =?UTF-8?q?feat:=20delete-message.dto=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/src/chat-list/dto/delete-message.dto.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 server/apps/api/src/chat-list/dto/delete-message.dto.ts diff --git a/server/apps/api/src/chat-list/dto/delete-message.dto.ts b/server/apps/api/src/chat-list/dto/delete-message.dto.ts new file mode 100644 index 00000000..7fd057b5 --- /dev/null +++ b/server/apps/api/src/chat-list/dto/delete-message.dto.ts @@ -0,0 +1,14 @@ +import { IsMongoId, IsNotEmpty } from 'class-validator'; + +export class DeleteMessageDto { + @IsMongoId() + @IsNotEmpty() + requestUserId: string; + + @IsMongoId() + @IsNotEmpty() + channel_id: string; + + @IsNotEmpty() + chat_id; +} From c25947b743d2b1f9b13d68b1b87945b694381696 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Mon, 12 Dec 2022 16:18:46 +0900 Subject: [PATCH 073/298] =?UTF-8?q?feat:=20=EC=B1=84=ED=8C=85=20=EC=88=98?= =?UTF-8?q?=EC=A0=95,=EC=82=AD=EC=A0=9C=EB=A5=BC=20=EC=9C=84=ED=95=9C=20?= =?UTF-8?q?=EC=BF=BC=EB=A6=AC=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/dao/repository/chat-list.respository.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/server/dao/repository/chat-list.respository.ts b/server/dao/repository/chat-list.respository.ts index 4aebadd0..8efe49d6 100644 --- a/server/dao/repository/chat-list.respository.ts +++ b/server/dao/repository/chat-list.respository.ts @@ -22,4 +22,17 @@ export class ChatListRespository { async updateOne(filter, updateField) { return await this.chatListModel.updateOne(filter, updateField); } + + async updateChatAtChatList(chatListId, chatId, content, date) { + await this.chatListModel.updateOne( + { _id: chatListId, 'chat.id': chatId }, + { $set: { 'chat.$.content': content, 'chat.$.updatedAt': date } }, + ); + } + async deleteChatAtChatList(chatListId, chatId, date) { + await this.chatListModel.updateOne( + { _id: chatListId, 'chat.id': chatId }, + { $set: { 'chat.$.updatedAt': date, 'chat.$.deletedAt': date } }, + ); + } } From 9f1490900b4c9321a528d95ee3b5e8c4e2e4b774 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Mon, 12 Dec 2022 16:19:18 +0900 Subject: [PATCH 074/298] =?UTF-8?q?feat:=20=EC=B1=84=ED=8C=85=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/src/chat-list/chat-list.controller.ts | 9 ++- .../api/src/chat-list/chat-list.service.ts | 55 ++++++++++++++++--- 2 files changed, 56 insertions(+), 8 deletions(-) diff --git a/server/apps/api/src/chat-list/chat-list.controller.ts b/server/apps/api/src/chat-list/chat-list.controller.ts index c8250adf..12f966cd 100644 --- a/server/apps/api/src/chat-list/chat-list.controller.ts +++ b/server/apps/api/src/chat-list/chat-list.controller.ts @@ -1,4 +1,4 @@ -import { Controller, Get, Patch, Post, UseGuards } from '@nestjs/common'; +import { Controller, Delete, Get, Patch, Post, UseGuards } from '@nestjs/common'; import { ChatListService } from '@chat-list/chat-list.service'; import { JwtAccessGuard } from '@auth/guard'; import { @@ -9,6 +9,7 @@ import { } from '@chat-list/dto'; import { ReceivedData } from '@custom/decorator/ReceivedData.decorator'; import { userToSenderPipe } from '@custom/pipe/userToSender.pipe'; +import { DeleteMessageDto } from '@chat-list/dto/delete-message.dto'; @Controller('api/channels') export class ChatListController { @@ -38,4 +39,10 @@ export class ChatListController { async modifyMessage(@ReceivedData() modifyMessageDto: ModifyMessageDto) { return await this.chatListService.modifyMessage(modifyMessageDto); } + + @Delete(':channel_id/chats/:chat_id') + @UseGuards(JwtAccessGuard) + async deleteMessage(@ReceivedData() deleteMessageDto: DeleteMessageDto) { + return await this.chatListService.deleteMessage(deleteMessageDto); + } } diff --git a/server/apps/api/src/chat-list/chat-list.service.ts b/server/apps/api/src/chat-list/chat-list.service.ts index 517b7cb2..a8ce5d5f 100644 --- a/server/apps/api/src/chat-list/chat-list.service.ts +++ b/server/apps/api/src/chat-list/chat-list.service.ts @@ -6,6 +6,7 @@ import { GetUnreadMessagePointDto } from '@chat-list/dto/get-unread-message-poin import { UserRepository } from '@repository/user.repository'; import { makeChat } from '@chat-list/helper/makeChat'; import { NOT_EXIST_UNREAD_CHAT } from '@utils/def'; +import { DeleteMessageDto } from '@chat-list/dto/delete-message.dto'; @Injectable() export class ChatListService { @@ -65,7 +66,9 @@ export class ChatListService { const chatListId = channel.chatLists[chatListIdx]; const chatList = await this.chatListRespository.findById(chatListId); - const chat = JSON.parse(JSON.stringify(chatList)).chat; + const chat = JSON.parse(JSON.stringify(chatList)).chat.filter((message) => { + return !message.deletedAt; + }); // chatListIdx === -1 : 채팅 처음 로딩 시 if (Number(prev ?? next) === -1) @@ -120,27 +123,65 @@ export class ChatListService { if (!channel) { throw new BadRequestException('채널이 존재하지 않습니다.'); + // throw new HttpException('채널이 존재하지 않습니다', 401); } - const chatListId = Math.floor(+chat_id / 100); + const chatListIdx = Math.floor(+chat_id / 100); const chatNum = +chat_id % 100; const chatList = JSON.parse( - JSON.stringify(await this.chatListRespository.findById(channel.chatLists[chatListId])), + JSON.stringify(await this.chatListRespository.findById(channel.chatLists[chatListIdx])), ); if (chatList.chat[chatNum].senderId !== requestUserId) throw new BadRequestException('자신이 보낸 채팅만 수정할 수 있습니다.'); - chatList.chat[chatNum].content = content; - chatList.chat[chatNum].updatedAt = new Date(); + const date = new Date(); - await this.chatListRespository.updateOne({ _id: chatList._id }, chatList); + await this.chatListRespository.updateChatAtChatList(chatList._id, +chat_id, content, date); - return { + const result = { + ...chatList.chat[chatNum], + content: content, + updatedAt: date, + channelId: channel_id, + communityId: channel.communityId, + id: +chat_id, + }; + + return result; + } + + async deleteMessage(deleteMessageDto: DeleteMessageDto) { + const { requestUserId, channel_id, chat_id } = deleteMessageDto; + const channel = await this.channelRepository.findOne({ _id: channel_id, deletedAt: undefined }); + + if (!channel) { + throw new BadRequestException('채널이 존재하지 않습니다.'); + // throw new HttpException('채널이 존재하지 않습니다', 401); + } + const chatListIdx = Math.floor(+chat_id / 100); + const chatNum = +chat_id % 100; + + const chatList = JSON.parse( + JSON.stringify(await this.chatListRespository.findById(channel.chatLists[chatListIdx])), + ); + + if (chatList.chat[chatNum].senderId !== requestUserId) + throw new BadRequestException('자신이 보낸 채팅만 삭제할 수 있습니다.'); + + const date = new Date(); + + await this.chatListRespository.deleteChatAtChatList(chatList._id, +chat_id, date); + + const result = { ...chatList.chat[chatNum], + updatedAt: date, + deletedAt: date, channelId: channel_id, communityId: channel.communityId, id: +chat_id, }; + + return result; } } From 76054980425e30f6e6a56200ca25d30d9de122b0 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Mon, 12 Dec 2022 16:59:46 +0900 Subject: [PATCH 075/298] =?UTF-8?q?refactor:=20=EC=B1=84=ED=8C=85=20?= =?UTF-8?q?=EC=88=98=EC=A0=95,=20=EC=82=AD=EC=A0=9C=20=EB=A6=AC=ED=8C=A9?= =?UTF-8?q?=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - repository에 별도의 함수를 따로 만들지 않고 updateOne을 사용 --- server/apps/api/src/chat-list/chat-list.service.ts | 10 ++++++++-- server/dao/repository/chat-list.respository.ts | 13 ------------- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/server/apps/api/src/chat-list/chat-list.service.ts b/server/apps/api/src/chat-list/chat-list.service.ts index a8ce5d5f..b938950c 100644 --- a/server/apps/api/src/chat-list/chat-list.service.ts +++ b/server/apps/api/src/chat-list/chat-list.service.ts @@ -137,7 +137,10 @@ export class ChatListService { const date = new Date(); - await this.chatListRespository.updateChatAtChatList(chatList._id, +chat_id, content, date); + await this.chatListRespository.updateOne( + { _id: chatList._id, 'chat.id': +chat_id }, + { $set: { 'chat.$.content': content, 'chat.$.updatedAt': date } }, + ); const result = { ...chatList.chat[chatNum], @@ -171,7 +174,10 @@ export class ChatListService { const date = new Date(); - await this.chatListRespository.deleteChatAtChatList(chatList._id, +chat_id, date); + await this.chatListRespository.updateOne( + { _id: chatList._id, 'chat.id': +chat_id }, + { $set: { 'chat.$.updatedAt': date, 'chat.$.deletedAt': date } }, + ); const result = { ...chatList.chat[chatNum], diff --git a/server/dao/repository/chat-list.respository.ts b/server/dao/repository/chat-list.respository.ts index 8efe49d6..4aebadd0 100644 --- a/server/dao/repository/chat-list.respository.ts +++ b/server/dao/repository/chat-list.respository.ts @@ -22,17 +22,4 @@ export class ChatListRespository { async updateOne(filter, updateField) { return await this.chatListModel.updateOne(filter, updateField); } - - async updateChatAtChatList(chatListId, chatId, content, date) { - await this.chatListModel.updateOne( - { _id: chatListId, 'chat.id': chatId }, - { $set: { 'chat.$.content': content, 'chat.$.updatedAt': date } }, - ); - } - async deleteChatAtChatList(chatListId, chatId, date) { - await this.chatListModel.updateOne( - { _id: chatListId, 'chat.id': chatId }, - { $set: { 'chat.$.updatedAt': date, 'chat.$.deletedAt': date } }, - ); - } } From 80bcd90eafb955d9770919bba785d20e3640d55f Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Mon, 12 Dec 2022 21:03:56 +0900 Subject: [PATCH 076/298] =?UTF-8?q?fix:=20docker=20=EB=82=B4=EB=B6=80=20lo?= =?UTF-8?q?calhost=20=EC=98=A4=EB=A5=98=20=ED=95=B4=EA=B2=B0:=20=EC=A3=BC?= =?UTF-8?q?=EC=86=8C=20=EB=8C=80=EC=8B=A0=20=ED=83=80=EA=B2=9F=20=EC=BB=A8?= =?UTF-8?q?=ED=85=8C=EC=9D=B4=EB=84=88=20=EC=9D=B4=EB=A6=84=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/socket/src/axios/request-api-server.ts | 2 +- server/apps/socket/src/mock_client/client.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/server/apps/socket/src/axios/request-api-server.ts b/server/apps/socket/src/axios/request-api-server.ts index 12bcb5c2..af72ae62 100644 --- a/server/apps/socket/src/axios/request-api-server.ts +++ b/server/apps/socket/src/axios/request-api-server.ts @@ -4,7 +4,7 @@ export const requestApiServer = async ({ method, path, accessToken, data }) => { if (process.env.NODE_ENV === 'dev') { return true; } - const url = 'http://localhost:' + (process.env.NODE_ENV == 'dev' ? 3000 : 3001) + path; + const url = 'http://api-container:' + (process.env.NODE_ENV == 'dev' ? 3000 : 3001) + path; try { const response = await axios({ method, diff --git a/server/apps/socket/src/mock_client/client.js b/server/apps/socket/src/mock_client/client.js index 78da7585..f7d79092 100644 --- a/server/apps/socket/src/mock_client/client.js +++ b/server/apps/socket/src/mock_client/client.js @@ -4,7 +4,7 @@ const port = 8080; const url = 'http://localhost'; // 형식은 'commu-{community id}' const accessToken = - 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2Mzk0YzJlNGQxYTYxNWJmNTY0ZDVhY2YiLCJuaWNrbmFtZSI6Im5heW91bmciLCJpYXQiOjE2NzA3ODQ3MTQsImV4cCI6MTY3MDc4NTYxNH0.Cx8pjTF1_rpL2KINFPQjXkFUzu0gtdFX6ng0gbAcKkU'; + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2Mzk0YzJlNGQxYTYxNWJmNTY0ZDVhY2YiLCJuaWNrbmFtZSI6Im5heW91bmciLCJpYXQiOjE2NzA4NDQyNDMsImV4cCI6MTY3MDg0NTE0M30.frX2jym5MdNPbmTD3c9xUeH38WbXArfY2SX-NVZlEzQ'; const opt = { auth: { From affae0e544442e18c389f2dc6dc3af02327d9d4f Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Mon, 12 Dec 2022 20:32:35 +0900 Subject: [PATCH 077/298] =?UTF-8?q?fix:=20accessToken=20=EB=A7=8C=EB=A3=8C?= =?UTF-8?q?=EC=8B=9C=EA=B0=84=20=EC=97=B0=EC=9E=A5=20(15m=20->=201hr)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/auth/helper/signToken.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/apps/api/src/auth/helper/signToken.ts b/server/apps/api/src/auth/helper/signToken.ts index d390f43b..ccb21e07 100644 --- a/server/apps/api/src/auth/helper/signToken.ts +++ b/server/apps/api/src/auth/helper/signToken.ts @@ -11,7 +11,7 @@ export class SignToken { nickname, }; const accessToken = await this.jwt.signAsync(accessTokenPayload, { - expiresIn: '15m', + expiresIn: '1hr', secret: this.config.get('JWT_SECRET'), }); return accessToken; From 0766a730243f4c5fff214d9b058ebd0530cd5a97 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Mon, 12 Dec 2022 20:58:57 +0900 Subject: [PATCH 078/298] =?UTF-8?q?refactor:=20=EC=BD=94=EB=93=9C=EB=A6=AC?= =?UTF-8?q?=EB=B7=B0=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?#358?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - DB에 저장된 값을 이용해 응답하도록 수정했습니다. --- .../api/src/chat-list/chat-list.service.ts | 26 +++++-------------- .../dao/repository/chat-list.respository.ts | 4 +++ 2 files changed, 10 insertions(+), 20 deletions(-) diff --git a/server/apps/api/src/chat-list/chat-list.service.ts b/server/apps/api/src/chat-list/chat-list.service.ts index b938950c..cb37ac99 100644 --- a/server/apps/api/src/chat-list/chat-list.service.ts +++ b/server/apps/api/src/chat-list/chat-list.service.ts @@ -137,21 +137,14 @@ export class ChatListService { const date = new Date(); - await this.chatListRespository.updateOne( + const updatedChatList = await this.chatListRespository.findOneAndUpdate( { _id: chatList._id, 'chat.id': +chat_id }, { $set: { 'chat.$.content': content, 'chat.$.updatedAt': date } }, ); - const result = { - ...chatList.chat[chatNum], - content: content, - updatedAt: date, - channelId: channel_id, - communityId: channel.communityId, - id: +chat_id, - }; + const result = JSON.parse(JSON.stringify(updatedChatList)).chat[+chat_id]; - return result; + return { ...result, communityId: channel.communityId, channelId: channel._id }; } async deleteMessage(deleteMessageDto: DeleteMessageDto) { @@ -174,20 +167,13 @@ export class ChatListService { const date = new Date(); - await this.chatListRespository.updateOne( + const updatedChatList = await this.chatListRespository.findOneAndUpdate( { _id: chatList._id, 'chat.id': +chat_id }, { $set: { 'chat.$.updatedAt': date, 'chat.$.deletedAt': date } }, ); - const result = { - ...chatList.chat[chatNum], - updatedAt: date, - deletedAt: date, - channelId: channel_id, - communityId: channel.communityId, - id: +chat_id, - }; + const result = JSON.parse(JSON.stringify(updatedChatList)).chat[+chat_id]; - return result; + return { ...result, communityId: channel.communityId, channelId: channel._id }; } } diff --git a/server/dao/repository/chat-list.respository.ts b/server/dao/repository/chat-list.respository.ts index 4aebadd0..7fb8ed72 100644 --- a/server/dao/repository/chat-list.respository.ts +++ b/server/dao/repository/chat-list.respository.ts @@ -22,4 +22,8 @@ export class ChatListRespository { async updateOne(filter, updateField) { return await this.chatListModel.updateOne(filter, updateField); } + + async findOneAndUpdate(filter, updateField) { + return await this.chatListModel.findOneAndUpdate(filter, updateField, { new: true }); + } } From 2ce430e82004f1c66d0419db3f77dfe7f1d49714 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Mon, 12 Dec 2022 22:16:12 +0900 Subject: [PATCH 079/298] =?UTF-8?q?fix:=20=EC=BB=A4=EB=AE=A4=EB=8B=88?= =?UTF-8?q?=ED=8B=B0=20=EB=A7=A4=EB=8B=88=EC=A0=80,=20=EC=B1=84=EB=84=90?= =?UTF-8?q?=20=EB=A7=A4=EB=8B=88=EC=A0=80=EB=8A=94=20=EC=B1=84=ED=8C=85?= =?UTF-8?q?=EC=9D=84=20=EC=82=AD=EC=A0=9C=20=EA=B0=80=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/chat-list/chat-list.module.ts | 11 ++++++++++- server/apps/api/src/chat-list/chat-list.service.ts | 13 +++++++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/server/apps/api/src/chat-list/chat-list.module.ts b/server/apps/api/src/chat-list/chat-list.module.ts index e9506cae..9141a1a2 100644 --- a/server/apps/api/src/chat-list/chat-list.module.ts +++ b/server/apps/api/src/chat-list/chat-list.module.ts @@ -8,15 +8,24 @@ import { ChatList, ChatListSchema } from '@schemas/chat-list.schema'; import { ChannelModule } from '@channel/channel.module'; import { UserRepository } from '@repository/user.repository'; import { UserModule } from '@user/user.module'; +import { CommunityRepository } from '@repository/community.repository'; +import { CommunityModule } from '@community/community.module'; @Module({ imports: [ MongooseModule.forFeature([{ name: ChatList.name, schema: ChatListSchema }]), forwardRef(() => ChannelModule), UserModule, + forwardRef(() => CommunityModule), ], controllers: [ChatListController], - providers: [ChatListService, ChatListRespository, ChannelRepository, UserRepository], + providers: [ + ChatListService, + ChatListRespository, + ChannelRepository, + UserRepository, + CommunityRepository, + ], exports: [MongooseModule], }) export class ChatListModule {} diff --git a/server/apps/api/src/chat-list/chat-list.service.ts b/server/apps/api/src/chat-list/chat-list.service.ts index cb37ac99..5b6ff9cf 100644 --- a/server/apps/api/src/chat-list/chat-list.service.ts +++ b/server/apps/api/src/chat-list/chat-list.service.ts @@ -7,12 +7,14 @@ import { UserRepository } from '@repository/user.repository'; import { makeChat } from '@chat-list/helper/makeChat'; import { NOT_EXIST_UNREAD_CHAT } from '@utils/def'; import { DeleteMessageDto } from '@chat-list/dto/delete-message.dto'; +import { CommunityRepository } from '@repository/community.repository'; @Injectable() export class ChatListService { constructor( private readonly channelRepository: ChannelRepository, private readonly chatListRespository: ChatListRespository, + private readonly communityRepository: CommunityRepository, private readonly userRepository: UserRepository, ) {} async restoreMessage(restoreMessageDto: RestoreMessageDto) { @@ -162,8 +164,15 @@ export class ChatListService { JSON.stringify(await this.chatListRespository.findById(channel.chatLists[chatListIdx])), ); - if (chatList.chat[chatNum].senderId !== requestUserId) - throw new BadRequestException('자신이 보낸 채팅만 삭제할 수 있습니다.'); + const community = await this.communityRepository.findById(channel.communityId); + + if ( + ![community.managerId, channel.managerId, chatList.chat[chatNum].senderId].includes( + requestUserId, + ) + ) { + throw new BadRequestException('채팅을 삭제할 수 없습니다.'); + } const date = new Date(); From c09bf98fc439b8b845408d47c854371859b55ebc Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Mon, 12 Dec 2022 21:45:49 +0900 Subject: [PATCH 080/298] =?UTF-8?q?feat:=20=EC=B1=84=ED=8C=85=20300?= =?UTF-8?q?=EC=9E=90=20=EB=AF=B8=EB=A7=8C=20=EC=A0=9C=ED=95=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/socket/src/socket.gateway.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/apps/socket/src/socket.gateway.ts b/server/apps/socket/src/socket.gateway.ts index 734e5008..43c89736 100644 --- a/server/apps/socket/src/socket.gateway.ts +++ b/server/apps/socket/src/socket.gateway.ts @@ -59,6 +59,10 @@ export class SocketGateway implements OnGatewayInit, OnGatewayConnection, OnGate ) { const communityName = socket.nsp.name; const { chatType, channelId } = data; + if ('content' in data && data.content.length > 300) { + return { written: false }; + } + this.logger.log( `${chatType} message.\t[NS] : ${communityName},\t[channel] : ${channelId}\t[From] ${socket.user.nickname}`, ); From 98275f8acbeba2f9a9191beff552d7712093f7cb Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Mon, 12 Dec 2022 21:50:20 +0900 Subject: [PATCH 081/298] =?UTF-8?q?feat:=20=EC=82=AC=EC=9A=A9=EC=9E=90=20?= =?UTF-8?q?=EA=B2=80=EC=83=89=20=EC=8B=9C=20bot=20=EC=A0=9C=EC=99=B8=20#36?= =?UTF-8?q?6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/user/user.service.ts | 5 +---- server/dao/repository/user.repository.ts | 5 +++-- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/server/apps/api/src/user/user.service.ts b/server/apps/api/src/user/user.service.ts index b80a00f5..0074fbb6 100644 --- a/server/apps/api/src/user/user.service.ts +++ b/server/apps/api/src/user/user.service.ts @@ -48,13 +48,10 @@ export class UserService { } async getUser(id: string) { - const users = await this.userRepository.findOr([ + const users = await this.userRepository.findUser([ { id: { $regex: id } }, { nickname: { $regex: id } }, ]); - // if (!users) { - // throw new BadRequestException('요청한 사용자는 없는 사용자입니다.'); - // } return users.map((user) => getUserBasicInfo(user)); } diff --git a/server/dao/repository/user.repository.ts b/server/dao/repository/user.repository.ts index bf24b469..381bf68d 100644 --- a/server/dao/repository/user.repository.ts +++ b/server/dao/repository/user.repository.ts @@ -3,6 +3,7 @@ import { InjectModel } from '@nestjs/mongoose'; import { User, UserDocument } from '@schemas/user.schema'; import { Model } from 'mongoose'; import { CreateUserDto } from '@user/dto/create-user.dto'; +import { BOT_ID } from '@utils/def'; @Injectable() export class UserRepository { @@ -17,8 +18,8 @@ export class UserRepository { return await this.userModel.findOne(condition); } - async findOr(conditions: any) { - return await this.userModel.find({ $or: conditions }); + async findUser(conditions: any) { + return await this.userModel.find({ $and: [{ $or: conditions }, { _id: { $ne: BOT_ID } }] }); } async findById(_id: string) { From 1171c6207211c09d6385d310678acbffabde9ae9 Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Mon, 12 Dec 2022 23:00:41 +0900 Subject: [PATCH 082/298] =?UTF-8?q?fix:=20error=20response=20res.statuscod?= =?UTF-8?q?e=EB=8C=80=EB=A1=9C=20=EA=B0=80=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20#368?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/auth/auth.controller.ts | 2 +- server/custom/interceptor/api.interceptor.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/server/apps/api/src/auth/auth.controller.ts b/server/apps/api/src/auth/auth.controller.ts index a2c49558..2872ea0e 100644 --- a/server/apps/api/src/auth/auth.controller.ts +++ b/server/apps/api/src/auth/auth.controller.ts @@ -1,4 +1,4 @@ -import { Body, Controller, Get, Post, Req, Res, UseGuards } from '@nestjs/common'; +import { Body, Controller, Get, HttpException, Post, Req, Res, UseGuards } from '@nestjs/common'; import { AuthService } from './auth.service'; import { SignInDto, SignUpDto } from './dto'; import { responseForm } from '@utils/responseForm'; diff --git a/server/custom/interceptor/api.interceptor.ts b/server/custom/interceptor/api.interceptor.ts index 9dce16a5..d48329c8 100644 --- a/server/custom/interceptor/api.interceptor.ts +++ b/server/custom/interceptor/api.interceptor.ts @@ -49,7 +49,7 @@ export class ApiInterceptor implements NestInterceptor { ], }); } - return of(error.response ?? error); + throw error; }), ); } From f1f061dd8c90e73da34c02d3a553c6241cfc842a Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Mon, 12 Dec 2022 23:34:56 +0900 Subject: [PATCH 083/298] =?UTF-8?q?fix:=20=EC=BB=A4=EB=AE=A4=EB=8B=88?= =?UTF-8?q?=ED=8B=B0=20=ED=87=B4=EC=9E=A5=20=EC=8B=9C=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=20document=20=EC=86=8D=ED=95=9C=20=EC=BB=A4=EB=AE=A4?= =?UTF-8?q?=EB=8B=88=ED=8B=B0=20=EC=A0=84=EC=B2=B4=20=EC=82=AD=EC=A0=9C=20?= =?UTF-8?q?bug=20fix=20#367?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/community/community.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/apps/api/src/community/community.service.ts b/server/apps/api/src/community/community.service.ts index 54932411..b7d1aeaf 100644 --- a/server/apps/api/src/community/community.service.ts +++ b/server/apps/api/src/community/community.service.ts @@ -203,7 +203,7 @@ export class CommunityService { return this.userRepository.deleteObject( { _id: user_id }, { - communities: { _id: community_id }, + [`communities.${community_id}`]: 1, }, ); } From b1e3584bbbfa1fd7c09deadc07363a6d4973a25c Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Mon, 12 Dec 2022 23:35:18 +0900 Subject: [PATCH 084/298] =?UTF-8?q?fix:=20=EC=BB=A4=EB=AE=A4=EB=8B=88?= =?UTF-8?q?=ED=8B=B0=20=ED=87=B4=EC=9E=A5=20=EC=8B=9C=20=EB=A7=A4=EB=8B=88?= =?UTF-8?q?=EC=A0=80=20=ED=98=BC=EC=9E=90=20=EC=9E=88=EC=9D=84=20=EB=95=8C?= =?UTF-8?q?=20=ED=83=88=ED=87=B4=20=EA=B0=80=EB=8A=A5=ED=95=98=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/community/community.service.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/apps/api/src/community/community.service.ts b/server/apps/api/src/community/community.service.ts index b7d1aeaf..45faa312 100644 --- a/server/apps/api/src/community/community.service.ts +++ b/server/apps/api/src/community/community.service.ts @@ -229,9 +229,10 @@ export class CommunityService { throw new BadRequestException(`요청한 사용자 _id(${requestUserId})가 올바르지 않습니다.`); } else if (!community) { throw new BadRequestException(`요청한 커뮤니티 _id가 올바르지 않습니다.`); - } else if (requestUserId === community.managerId) { + } else if (requestUserId === community.managerId && community.users.length > 1) { throw new BadRequestException(`매니저는 커뮤니티에서 탈퇴할 수 없습니다. 매니저 위임하세요.`); } + // user doc에서 community 삭제하기 await this.deleteCommunityAtUserDocument(requestUserId, community_id); // community doc에서 users에 사용자 삭제하기 From bf9eb3ce7ff9efef4eb709b532bbad6bea2b1698 Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Mon, 12 Dec 2022 23:45:27 +0900 Subject: [PATCH 085/298] =?UTF-8?q?fix:=20=EB=A7=A4=EB=8B=88=EC=A0=80=20?= =?UTF-8?q?=ED=98=BC=EC=9E=90=20=EC=9E=88=EB=8A=94=20=EC=BB=A4=EB=AE=A4?= =?UTF-8?q?=EB=8B=88=ED=8B=B0=20=ED=87=B4=EC=9E=A5=20=EC=8B=9C=20=EC=BB=A4?= =?UTF-8?q?=EB=AE=A4=EB=8B=88=ED=8B=B0=20=EC=82=AD=EC=A0=9C=20#365?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/community/community.service.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/apps/api/src/community/community.service.ts b/server/apps/api/src/community/community.service.ts index 45faa312..6cde729c 100644 --- a/server/apps/api/src/community/community.service.ts +++ b/server/apps/api/src/community/community.service.ts @@ -231,6 +231,9 @@ export class CommunityService { throw new BadRequestException(`요청한 커뮤니티 _id가 올바르지 않습니다.`); } else if (requestUserId === community.managerId && community.users.length > 1) { throw new BadRequestException(`매니저는 커뮤니티에서 탈퇴할 수 없습니다. 매니저 위임하세요.`); + } else if (requestUserId === community.managerId && community.users.length === 1) { + this.deleteCommunity(requestUserAboutCommunityDto); + return; } // user doc에서 community 삭제하기 From 75470949f68491c7f3c0a97c909d4653cb1376ad Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Tue, 13 Dec 2022 00:06:40 +0900 Subject: [PATCH 086/298] =?UTF-8?q?fix:=20=EC=B1=84=EB=84=90=20=EC=9D=B4?= =?UTF-8?q?=ED=83=88=20=EC=9D=B4=EC=8A=88=20=ED=95=B4=EA=B2=B0=20#372?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/channel/channel.service.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/server/apps/api/src/channel/channel.service.ts b/server/apps/api/src/channel/channel.service.ts index 11538864..1047779a 100644 --- a/server/apps/api/src/channel/channel.service.ts +++ b/server/apps/api/src/channel/channel.service.ts @@ -167,8 +167,12 @@ export class ChannelService { async updateLastRead(updateLastReadDto: UpdateLastReadDto) { const { community_id, channel_id, requestUserId } = updateLastReadDto; - const channel = await this.channelRepository.findOne({ _id: channel_id, deletedAt: undefined }); - if (!channel) throw new BadRequestException('존재하지 않는 채널입니다.'); + const channel = await this.channelRepository.findOne({ + _id: channel_id, + deletedAt: undefined, + users: requestUserId, + }); + if (!channel) throw new BadRequestException('사용자가 존재하는 채널이 아닙니다.'); // 유저 도큐먼트의 커뮤니티:채널 필드 업데이트 await this.userRepository.updateObject( From fe8d1fc271cca72c199d0f0c967b16c69bbc8683 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Tue, 13 Dec 2022 01:28:17 +0900 Subject: [PATCH 087/298] =?UTF-8?q?fix:=20=EB=B4=87=20=EB=A9=94=EC=84=B8?= =?UTF-8?q?=EC=A7=80=20=EC=8B=9C=EA=B0=84=20=ED=95=9C=EA=B5=AD=20=EC=8B=9C?= =?UTF-8?q?=EA=B0=84=EC=9C=BC=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/channel/bot.service.ts | 3 ++- server/apps/api/src/channel/helper/getKoreanTime.ts | 7 +++++++ server/apps/api/src/channel/helper/index.ts | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 server/apps/api/src/channel/helper/getKoreanTime.ts diff --git a/server/apps/api/src/channel/bot.service.ts b/server/apps/api/src/channel/bot.service.ts index 1bfe7c3a..67826206 100644 --- a/server/apps/api/src/channel/bot.service.ts +++ b/server/apps/api/src/channel/bot.service.ts @@ -3,9 +3,10 @@ import { makeChat } from '@chat-list/helper/makeChat'; import { ChatListRespository } from '@repository/chat-list.respository'; import { ChannelRepository } from '@repository/channel.repository'; import { Injectable } from '@nestjs/common'; +import { getKoreanTime } from '@channel/helper'; const makeBotMessageDate = () => - new Date().toLocaleDateString('ko', { + getKoreanTime().toLocaleDateString('ko', { year: 'numeric', month: 'short', day: 'numeric', diff --git a/server/apps/api/src/channel/helper/getKoreanTime.ts b/server/apps/api/src/channel/helper/getKoreanTime.ts new file mode 100644 index 00000000..029a2e5e --- /dev/null +++ b/server/apps/api/src/channel/helper/getKoreanTime.ts @@ -0,0 +1,7 @@ +export const getKoreanTime = () => { + const curr = new Date(); + const utc = curr.getTime() + curr.getTimezoneOffset() * 60 * 1000; + const KR_TIME_DIFF = 9 * 60 * 60 * 1000; + + return new Date(utc + KR_TIME_DIFF); +}; diff --git a/server/apps/api/src/channel/helper/index.ts b/server/apps/api/src/channel/helper/index.ts index 19b57ca0..d4731b43 100644 --- a/server/apps/api/src/channel/helper/index.ts +++ b/server/apps/api/src/channel/helper/index.ts @@ -1,2 +1,3 @@ export * from './addObjectForm'; export * from './getChannelBasicInfo'; +export * from './getKoreanTime'; From 5aa90797ea6bea594c87cb7f08dd07ace5980b36 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Tue, 13 Dec 2022 20:08:38 +0900 Subject: [PATCH 088/298] =?UTF-8?q?fix:=20=EC=BB=A4=EB=AE=A4=EB=8B=88?= =?UTF-8?q?=ED=8B=B0=20=EC=A0=95=EB=B3=B4=20=EA=B0=80=EC=A0=B8=EC=98=AC=20?= =?UTF-8?q?=EC=8B=9C=20=EC=95=88=EC=9D=BD=EC=9D=80=20=EC=B1=84=ED=8C=85=20?= =?UTF-8?q?=EC=B0=BE=EC=A7=80=20=EB=AA=BB=ED=95=98=EB=8A=94=20=EC=9D=B4?= =?UTF-8?q?=EC=8A=88=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/community/community.service.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/server/apps/api/src/community/community.service.ts b/server/apps/api/src/community/community.service.ts index 6cde729c..a8c58a05 100644 --- a/server/apps/api/src/community/community.service.ts +++ b/server/apps/api/src/community/community.service.ts @@ -57,9 +57,10 @@ export class CommunityService { // 안읽은 채팅 있는 지 확인 const lastChatList = await this.chatListRepository.findById(channel.chatLists.at(-1)); - const lastChatTime = lastChatList.chat.at(-1).createdAt; + const lastChatTime = lastChatList.chat.at(-1).get('createdAt'); + channelInfo['existUnreadChat'] = - channels.get(channelId).getTime() <= new Date(lastChatTime).getTime(); + new Date(channels.get(channelId).getTime()) <= lastChatTime; channelsInfo.push(channelInfo); }), ); From 032826a565d37c98f50e40d9255703d92ad8fd42 Mon Sep 17 00:00:00 2001 From: soomanbaek Date: Tue, 13 Dec 2022 20:13:51 +0900 Subject: [PATCH 089/298] =?UTF-8?q?refactor:=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EB=9D=BC=EC=9D=B8=20=EB=B0=8F=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=EC=BD=94=EB=93=9C=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/community/community.service.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/server/apps/api/src/community/community.service.ts b/server/apps/api/src/community/community.service.ts index a8c58a05..8a0cc610 100644 --- a/server/apps/api/src/community/community.service.ts +++ b/server/apps/api/src/community/community.service.ts @@ -56,11 +56,9 @@ export class CommunityService { const channelInfo = getChannelBasicInfo(channel); // 안읽은 채팅 있는 지 확인 const lastChatList = await this.chatListRepository.findById(channel.chatLists.at(-1)); - const lastChatTime = lastChatList.chat.at(-1).get('createdAt'); - channelInfo['existUnreadChat'] = - new Date(channels.get(channelId).getTime()) <= lastChatTime; + channelInfo['existUnreadChat'] = channels.get(channelId).getTime() <= lastChatTime; channelsInfo.push(channelInfo); }), ); From 29c73348b3548c6445b991478b8f17e8a54697e8 Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Tue, 13 Dec 2022 01:34:23 +0900 Subject: [PATCH 090/298] feat: import redis #393 --- server/apps/api/modules/Redis.module.ts | 10 + server/apps/api/src/api.module.ts | 2 + server/package.json | 2 + yarn.lock | 4531 +---------------------- 4 files changed, 181 insertions(+), 4364 deletions(-) create mode 100644 server/apps/api/modules/Redis.module.ts diff --git a/server/apps/api/modules/Redis.module.ts b/server/apps/api/modules/Redis.module.ts new file mode 100644 index 00000000..0d79cd60 --- /dev/null +++ b/server/apps/api/modules/Redis.module.ts @@ -0,0 +1,10 @@ +import { RedisModule } from '@liaoliaots/nestjs-redis'; + +export const importRedisModule = () => + RedisModule.forRoot({ + config: { + host: 'localhost', + port: Number(process.env.REDIS_PORT), + password: process.env.REDIS_PASSWORD, + }, + }); diff --git a/server/apps/api/src/api.module.ts b/server/apps/api/src/api.module.ts index d9115376..44b13606 100644 --- a/server/apps/api/src/api.module.ts +++ b/server/apps/api/src/api.module.ts @@ -11,6 +11,7 @@ import { ChatListModule } from '@chat-list/chat-list.module'; import { mongoDbServerModule } from '@api/modules/mongo-server.module'; import { importWinstonModule } from '@api/modules/Winstone.module'; import { importConfigModule } from '@api/modules/Config.module'; +import { importRedisModule } from '@api/modules/Redis.module'; @Module({ imports: [ @@ -18,6 +19,7 @@ import { importConfigModule } from '@api/modules/Config.module'; process.env.NODE_ENV != 'test' ? MongooseModule.forRoot(process.env.MONGODB_URL) : mongoDbServerModule(), + importRedisModule(), importWinstonModule(), UserModule, ChannelModule, diff --git a/server/package.json b/server/package.json index b0089b70..207267ac 100644 --- a/server/package.json +++ b/server/package.json @@ -42,6 +42,7 @@ "shared": "1.0.0" }, "devDependencies": { + "@liaoliaots/nestjs-redis": "^9.0.4", "@nestjs/cli": "^9.0.0", "@nestjs/config": "^2.2.0", "@nestjs/mongoose": "^9.2.1", @@ -69,6 +70,7 @@ "eslint": "^8.0.1", "eslint-config-prettier": "^8.3.0", "eslint-plugin-prettier": "^4.0.0", + "ioredis": "^5.2.4", "jest": "^29.3.1", "jest-junit": "^14.0.1", "mongodb-memory-server": "^8.10.1", diff --git a/yarn.lock b/yarn.lock index e69d40b3..32e86a7a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -71,13 +71,6 @@ ora "5.4.1" rxjs "6.6.7" -"@artilleryio/sketches-js@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@artilleryio/sketches-js/-/sketches-js-1.0.4.tgz#2518e3d09534b27852ac0f36f2705ed42863ea4d" - integrity sha512-G5WYbFnrDWjuwp15KPuN66R3a5xEV4rvBIWl+TLkAlc1tDSyl/WI7mE+EA7rCeKGQGTaSlVVJByTT3hW/w3KuA== - dependencies: - protobufjs "^6.10.2" - "@aws-crypto/ie11-detection@^2.0.0": version "2.0.2" resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-2.0.2.tgz#9c39f4a5558196636031a933ec1b4792de959d6a" @@ -141,14 +134,6 @@ "@aws-sdk/types" "3.212.0" tslib "^2.3.1" -"@aws-sdk/abort-controller@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/abort-controller/-/abort-controller-3.226.0.tgz#3adffb8ee5af57ddb154e8544a8eeec76ad32271" - integrity sha512-cJVzr1xxPBd08voknXvR0RLgtZKGKt6WyDpH/BaPCu3rfSqWCDZKzwqe940eqosjmKrxC6pUZNKASIqHOQ8xxQ== - dependencies: - "@aws-sdk/types" "3.226.0" - tslib "^2.3.1" - "@aws-sdk/client-cognito-identity@3.213.0": version "3.213.0" resolved "https://registry.yarnpkg.com/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.213.0.tgz#b8f9dc7fe8b05b03e3c47f2e0b9f2304e19ec4b0" @@ -190,47 +175,6 @@ "@aws-sdk/util-utf8-node" "3.208.0" tslib "^2.3.1" -"@aws-sdk/client-cognito-identity@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.226.0.tgz#c19825b55e7fc362cce640b92cf5df8d6b82d518" - integrity sha512-f97yYtFN2YyVLCkDM51yLakb5NKy9gTSSXWe9mA9rgynLPfgsJbIHXv3zr1Qg0Ay0p4j1eLYukLaVw1MKlHDgw== - dependencies: - "@aws-crypto/sha256-browser" "2.0.0" - "@aws-crypto/sha256-js" "2.0.0" - "@aws-sdk/client-sts" "3.226.0" - "@aws-sdk/config-resolver" "3.226.0" - "@aws-sdk/credential-provider-node" "3.226.0" - "@aws-sdk/fetch-http-handler" "3.226.0" - "@aws-sdk/hash-node" "3.226.0" - "@aws-sdk/invalid-dependency" "3.226.0" - "@aws-sdk/middleware-content-length" "3.226.0" - "@aws-sdk/middleware-endpoint" "3.226.0" - "@aws-sdk/middleware-host-header" "3.226.0" - "@aws-sdk/middleware-logger" "3.226.0" - "@aws-sdk/middleware-recursion-detection" "3.226.0" - "@aws-sdk/middleware-retry" "3.226.0" - "@aws-sdk/middleware-serde" "3.226.0" - "@aws-sdk/middleware-signing" "3.226.0" - "@aws-sdk/middleware-stack" "3.226.0" - "@aws-sdk/middleware-user-agent" "3.226.0" - "@aws-sdk/node-config-provider" "3.226.0" - "@aws-sdk/node-http-handler" "3.226.0" - "@aws-sdk/protocol-http" "3.226.0" - "@aws-sdk/smithy-client" "3.226.0" - "@aws-sdk/types" "3.226.0" - "@aws-sdk/url-parser" "3.226.0" - "@aws-sdk/util-base64" "3.208.0" - "@aws-sdk/util-body-length-browser" "3.188.0" - "@aws-sdk/util-body-length-node" "3.208.0" - "@aws-sdk/util-defaults-mode-browser" "3.226.0" - "@aws-sdk/util-defaults-mode-node" "3.226.0" - "@aws-sdk/util-endpoints" "3.226.0" - "@aws-sdk/util-user-agent-browser" "3.226.0" - "@aws-sdk/util-user-agent-node" "3.226.0" - "@aws-sdk/util-utf8-browser" "3.188.0" - "@aws-sdk/util-utf8-node" "3.208.0" - tslib "^2.3.1" - "@aws-sdk/client-sso-oidc@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.212.0.tgz#87305787a50228e44ef60355b2e8e68b8fab6401" @@ -269,44 +213,6 @@ "@aws-sdk/util-utf8-node" "3.208.0" tslib "^2.3.1" -"@aws-sdk/client-sso-oidc@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.226.0.tgz#6e9566a41f34d918fd1658ba968a0d33401585bf" - integrity sha512-IKzAhL6RoPs7IZ/rJvekjedQ4oesazCO+Aqh9l2Xct+XY0MFBdh4amgg4t/8fjksfIzmJH48BZoNv5gVak6yRw== - dependencies: - "@aws-crypto/sha256-browser" "2.0.0" - "@aws-crypto/sha256-js" "2.0.0" - "@aws-sdk/config-resolver" "3.226.0" - "@aws-sdk/fetch-http-handler" "3.226.0" - "@aws-sdk/hash-node" "3.226.0" - "@aws-sdk/invalid-dependency" "3.226.0" - "@aws-sdk/middleware-content-length" "3.226.0" - "@aws-sdk/middleware-endpoint" "3.226.0" - "@aws-sdk/middleware-host-header" "3.226.0" - "@aws-sdk/middleware-logger" "3.226.0" - "@aws-sdk/middleware-recursion-detection" "3.226.0" - "@aws-sdk/middleware-retry" "3.226.0" - "@aws-sdk/middleware-serde" "3.226.0" - "@aws-sdk/middleware-stack" "3.226.0" - "@aws-sdk/middleware-user-agent" "3.226.0" - "@aws-sdk/node-config-provider" "3.226.0" - "@aws-sdk/node-http-handler" "3.226.0" - "@aws-sdk/protocol-http" "3.226.0" - "@aws-sdk/smithy-client" "3.226.0" - "@aws-sdk/types" "3.226.0" - "@aws-sdk/url-parser" "3.226.0" - "@aws-sdk/util-base64" "3.208.0" - "@aws-sdk/util-body-length-browser" "3.188.0" - "@aws-sdk/util-body-length-node" "3.208.0" - "@aws-sdk/util-defaults-mode-browser" "3.226.0" - "@aws-sdk/util-defaults-mode-node" "3.226.0" - "@aws-sdk/util-endpoints" "3.226.0" - "@aws-sdk/util-user-agent-browser" "3.226.0" - "@aws-sdk/util-user-agent-node" "3.226.0" - "@aws-sdk/util-utf8-browser" "3.188.0" - "@aws-sdk/util-utf8-node" "3.208.0" - tslib "^2.3.1" - "@aws-sdk/client-sso@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.212.0.tgz#8650c734adba00a0c5abc8b6737d73b2c68019f3" @@ -345,44 +251,6 @@ "@aws-sdk/util-utf8-node" "3.208.0" tslib "^2.3.1" -"@aws-sdk/client-sso@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.226.0.tgz#a7d5239e74ac9e050f91f261e6a8783893b4c95a" - integrity sha512-+Hl1YSLKrxPnQLijhWryI6uV8eKZIsUhvWlzFKx75kjxzjsC/jyk5zV59jnCu0SCCepXB8DKyLVa2WpH7iAHew== - dependencies: - "@aws-crypto/sha256-browser" "2.0.0" - "@aws-crypto/sha256-js" "2.0.0" - "@aws-sdk/config-resolver" "3.226.0" - "@aws-sdk/fetch-http-handler" "3.226.0" - "@aws-sdk/hash-node" "3.226.0" - "@aws-sdk/invalid-dependency" "3.226.0" - "@aws-sdk/middleware-content-length" "3.226.0" - "@aws-sdk/middleware-endpoint" "3.226.0" - "@aws-sdk/middleware-host-header" "3.226.0" - "@aws-sdk/middleware-logger" "3.226.0" - "@aws-sdk/middleware-recursion-detection" "3.226.0" - "@aws-sdk/middleware-retry" "3.226.0" - "@aws-sdk/middleware-serde" "3.226.0" - "@aws-sdk/middleware-stack" "3.226.0" - "@aws-sdk/middleware-user-agent" "3.226.0" - "@aws-sdk/node-config-provider" "3.226.0" - "@aws-sdk/node-http-handler" "3.226.0" - "@aws-sdk/protocol-http" "3.226.0" - "@aws-sdk/smithy-client" "3.226.0" - "@aws-sdk/types" "3.226.0" - "@aws-sdk/url-parser" "3.226.0" - "@aws-sdk/util-base64" "3.208.0" - "@aws-sdk/util-body-length-browser" "3.188.0" - "@aws-sdk/util-body-length-node" "3.208.0" - "@aws-sdk/util-defaults-mode-browser" "3.226.0" - "@aws-sdk/util-defaults-mode-node" "3.226.0" - "@aws-sdk/util-endpoints" "3.226.0" - "@aws-sdk/util-user-agent-browser" "3.226.0" - "@aws-sdk/util-user-agent-node" "3.226.0" - "@aws-sdk/util-utf8-browser" "3.188.0" - "@aws-sdk/util-utf8-node" "3.208.0" - tslib "^2.3.1" - "@aws-sdk/client-sts@3.213.0": version "3.213.0" resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.213.0.tgz#cfc097ad1c4a02eec5623010a06f16a408014267" @@ -425,48 +293,6 @@ fast-xml-parser "4.0.11" tslib "^2.3.1" -"@aws-sdk/client-sts@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.226.0.tgz#40b8e62152bbce2c44c607b80ccc1db280497e1f" - integrity sha512-ZBlqRVbnHvvbkN5g56+mXltNybHNzgV69+2ARubQ8ge9U2qF/LweCmGqZnZLWqdGXwaB9IOvz5ZW2npyJh1X/A== - dependencies: - "@aws-crypto/sha256-browser" "2.0.0" - "@aws-crypto/sha256-js" "2.0.0" - "@aws-sdk/config-resolver" "3.226.0" - "@aws-sdk/credential-provider-node" "3.226.0" - "@aws-sdk/fetch-http-handler" "3.226.0" - "@aws-sdk/hash-node" "3.226.0" - "@aws-sdk/invalid-dependency" "3.226.0" - "@aws-sdk/middleware-content-length" "3.226.0" - "@aws-sdk/middleware-endpoint" "3.226.0" - "@aws-sdk/middleware-host-header" "3.226.0" - "@aws-sdk/middleware-logger" "3.226.0" - "@aws-sdk/middleware-recursion-detection" "3.226.0" - "@aws-sdk/middleware-retry" "3.226.0" - "@aws-sdk/middleware-sdk-sts" "3.226.0" - "@aws-sdk/middleware-serde" "3.226.0" - "@aws-sdk/middleware-signing" "3.226.0" - "@aws-sdk/middleware-stack" "3.226.0" - "@aws-sdk/middleware-user-agent" "3.226.0" - "@aws-sdk/node-config-provider" "3.226.0" - "@aws-sdk/node-http-handler" "3.226.0" - "@aws-sdk/protocol-http" "3.226.0" - "@aws-sdk/smithy-client" "3.226.0" - "@aws-sdk/types" "3.226.0" - "@aws-sdk/url-parser" "3.226.0" - "@aws-sdk/util-base64" "3.208.0" - "@aws-sdk/util-body-length-browser" "3.188.0" - "@aws-sdk/util-body-length-node" "3.208.0" - "@aws-sdk/util-defaults-mode-browser" "3.226.0" - "@aws-sdk/util-defaults-mode-node" "3.226.0" - "@aws-sdk/util-endpoints" "3.226.0" - "@aws-sdk/util-user-agent-browser" "3.226.0" - "@aws-sdk/util-user-agent-node" "3.226.0" - "@aws-sdk/util-utf8-browser" "3.188.0" - "@aws-sdk/util-utf8-node" "3.208.0" - fast-xml-parser "4.0.11" - tslib "^2.3.1" - "@aws-sdk/config-resolver@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/config-resolver/-/config-resolver-3.212.0.tgz#9c7967c0058d7b8c8141db3ca25bf369223e5c20" @@ -478,17 +304,6 @@ "@aws-sdk/util-middleware" "3.212.0" tslib "^2.3.1" -"@aws-sdk/config-resolver@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/config-resolver/-/config-resolver-3.226.0.tgz#b4f19150cf08c9ed36ced3bdffdc64d89e6f3e5b" - integrity sha512-0UWXtfnTT0OtnRP8jJodc8V7xAnWSqsh4RCRyV5uu3Z2Tv+xyW91GKxO+gOXoUP0hHu0lvBM9lYiMJcJWZYLYw== - dependencies: - "@aws-sdk/signature-v4" "3.226.0" - "@aws-sdk/types" "3.226.0" - "@aws-sdk/util-config-provider" "3.208.0" - "@aws-sdk/util-middleware" "3.226.0" - tslib "^2.3.1" - "@aws-sdk/credential-provider-cognito-identity@3.213.0": version "3.213.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.213.0.tgz#5e4fb76c56190f944429618b5d612786cadfd219" @@ -499,16 +314,6 @@ "@aws-sdk/types" "3.212.0" tslib "^2.3.1" -"@aws-sdk/credential-provider-cognito-identity@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.226.0.tgz#fae853f055586c5edfe76493db43f575c7ad3484" - integrity sha512-ukueK6kgTxvUX89oQBoArj7Oh0dYfkToHypnin08SHRZry9VNnK5IfSMO+Q1tXmxCnDtai1ejaAOny900OjMyg== - dependencies: - "@aws-sdk/client-cognito-identity" "3.226.0" - "@aws-sdk/property-provider" "3.226.0" - "@aws-sdk/types" "3.226.0" - tslib "^2.3.1" - "@aws-sdk/credential-provider-env@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.212.0.tgz#30a7bc8761bd190405da66674e06e05ef831c6e1" @@ -518,15 +323,6 @@ "@aws-sdk/types" "3.212.0" tslib "^2.3.1" -"@aws-sdk/credential-provider-env@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.226.0.tgz#0bcb89a9abc166b3a48f5c255b9fcabc4cb80daf" - integrity sha512-sd8uK1ojbXxaZXlthzw/VXZwCPUtU3PjObOfr3Evj7MPIM2IH8h29foOlggx939MdLQGboJf9gKvLlvKDWtJRA== - dependencies: - "@aws-sdk/property-provider" "3.226.0" - "@aws-sdk/types" "3.226.0" - tslib "^2.3.1" - "@aws-sdk/credential-provider-imds@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.212.0.tgz#a21c43251d16a57bfc104753549f32c1737abd07" @@ -538,17 +334,6 @@ "@aws-sdk/url-parser" "3.212.0" tslib "^2.3.1" -"@aws-sdk/credential-provider-imds@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.226.0.tgz#0a4558449eb261412b0490ea1c3242eb91659759" - integrity sha512-//z/COQm2AjYFI1Lb0wKHTQSrvLFTyuKLFQGPJsKS7DPoxGOCKB7hmYerlbl01IDoCxTdyL//TyyPxbZEOQD5Q== - dependencies: - "@aws-sdk/node-config-provider" "3.226.0" - "@aws-sdk/property-provider" "3.226.0" - "@aws-sdk/types" "3.226.0" - "@aws-sdk/url-parser" "3.226.0" - tslib "^2.3.1" - "@aws-sdk/credential-provider-ini@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.212.0.tgz#86bd24a8af17fed2e5e575be92c5ed9823adc144" @@ -563,20 +348,6 @@ "@aws-sdk/types" "3.212.0" tslib "^2.3.1" -"@aws-sdk/credential-provider-ini@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.226.0.tgz#06ad59f5124044ef01413c7ad01119ef15566744" - integrity sha512-Sj7SGl53qmKkD7wvgU0MSTyj8ho6A3tKVbadTHljVz60jiauTEM97Z1DIai6U3oPFVteaKqx7npc8ozeK6mKNg== - dependencies: - "@aws-sdk/credential-provider-env" "3.226.0" - "@aws-sdk/credential-provider-imds" "3.226.0" - "@aws-sdk/credential-provider-sso" "3.226.0" - "@aws-sdk/credential-provider-web-identity" "3.226.0" - "@aws-sdk/property-provider" "3.226.0" - "@aws-sdk/shared-ini-file-loader" "3.226.0" - "@aws-sdk/types" "3.226.0" - tslib "^2.3.1" - "@aws-sdk/credential-provider-node@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.212.0.tgz#20201b5da84bc217bb9e428a82b13669b3e6f22c" @@ -593,22 +364,6 @@ "@aws-sdk/types" "3.212.0" tslib "^2.3.1" -"@aws-sdk/credential-provider-node@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.226.0.tgz#d81c4d8fbacf5ef9bbea6e0e2e15fb61039b5eb6" - integrity sha512-kuOeiVmlhSyMC1Eix0pqHmb4EmpbMHrTw+9ObZbQ2bRXy05Q9fLA6SVBcI01bI1KVh7Qqz9i8ojOY3A2zscjyA== - dependencies: - "@aws-sdk/credential-provider-env" "3.226.0" - "@aws-sdk/credential-provider-imds" "3.226.0" - "@aws-sdk/credential-provider-ini" "3.226.0" - "@aws-sdk/credential-provider-process" "3.226.0" - "@aws-sdk/credential-provider-sso" "3.226.0" - "@aws-sdk/credential-provider-web-identity" "3.226.0" - "@aws-sdk/property-provider" "3.226.0" - "@aws-sdk/shared-ini-file-loader" "3.226.0" - "@aws-sdk/types" "3.226.0" - tslib "^2.3.1" - "@aws-sdk/credential-provider-process@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.212.0.tgz#9659a5e2bd2ae1a2f6d67a068d341c59f23fc7ae" @@ -619,16 +374,6 @@ "@aws-sdk/types" "3.212.0" tslib "^2.3.1" -"@aws-sdk/credential-provider-process@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.226.0.tgz#bcd73a6d31d1b3181917d56e54aacbee242b077f" - integrity sha512-iUDMdnrTvbvaCFhWwqyXrhvQ9+ojPqPqXhwZtY1X/Qaz+73S9gXBPJHZaZb2Ke0yKE1Ql3bJbKvmmxC/qLQMng== - dependencies: - "@aws-sdk/property-provider" "3.226.0" - "@aws-sdk/shared-ini-file-loader" "3.226.0" - "@aws-sdk/types" "3.226.0" - tslib "^2.3.1" - "@aws-sdk/credential-provider-sso@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.212.0.tgz#c74ae70a3c214c8dd131dfb688d15f0cc355def5" @@ -641,18 +386,6 @@ "@aws-sdk/types" "3.212.0" tslib "^2.3.1" -"@aws-sdk/credential-provider-sso@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.226.0.tgz#c8c91e0065153897e659afabd93df62e948058c5" - integrity sha512-QSBeyOIAus4/8u/DeAstE8w/zw+F7PQohdB8JFP/BPaCfc8uKue4UkqqvQWRfm4VSEnHeXt037MDopmCpd98Iw== - dependencies: - "@aws-sdk/client-sso" "3.226.0" - "@aws-sdk/property-provider" "3.226.0" - "@aws-sdk/shared-ini-file-loader" "3.226.0" - "@aws-sdk/token-providers" "3.226.0" - "@aws-sdk/types" "3.226.0" - tslib "^2.3.1" - "@aws-sdk/credential-provider-web-identity@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.212.0.tgz#9724033e623e75a4dbdce0697a3cfea2f21e12cf" @@ -662,36 +395,6 @@ "@aws-sdk/types" "3.212.0" tslib "^2.3.1" -"@aws-sdk/credential-provider-web-identity@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.226.0.tgz#2b7d20f93a40e2243c7e3857f54b103d19a946fb" - integrity sha512-CCpv847rLB0SFOHz2igvUMFAzeT2fD3YnY4C8jltuJoEkn0ITn1Hlgt13nTJ5BUuvyti2mvyXZHmNzhMIMrIlw== - dependencies: - "@aws-sdk/property-provider" "3.226.0" - "@aws-sdk/types" "3.226.0" - tslib "^2.3.1" - -"@aws-sdk/credential-providers@^3.127.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-providers/-/credential-providers-3.226.0.tgz#a206b4b43b7e2df19b600450a1d9cfc3cef2548c" - integrity sha512-oNkUBxlX0kmwt8jEyQAH7p5Tk1g9iWEKGGCTPPZ7A5RoZpmv83zT8ReZ/+QsSmJIWGb0zzraHMzKbmfMSeztZg== - dependencies: - "@aws-sdk/client-cognito-identity" "3.226.0" - "@aws-sdk/client-sso" "3.226.0" - "@aws-sdk/client-sts" "3.226.0" - "@aws-sdk/credential-provider-cognito-identity" "3.226.0" - "@aws-sdk/credential-provider-env" "3.226.0" - "@aws-sdk/credential-provider-imds" "3.226.0" - "@aws-sdk/credential-provider-ini" "3.226.0" - "@aws-sdk/credential-provider-node" "3.226.0" - "@aws-sdk/credential-provider-process" "3.226.0" - "@aws-sdk/credential-provider-sso" "3.226.0" - "@aws-sdk/credential-provider-web-identity" "3.226.0" - "@aws-sdk/property-provider" "3.226.0" - "@aws-sdk/shared-ini-file-loader" "3.226.0" - "@aws-sdk/types" "3.226.0" - tslib "^2.3.1" - "@aws-sdk/credential-providers@^3.186.0": version "3.213.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-providers/-/credential-providers-3.213.0.tgz#c74fd57e55ce6e6cc914784b73e5ce21fe279bc3" @@ -724,17 +427,6 @@ "@aws-sdk/util-base64" "3.208.0" tslib "^2.3.1" -"@aws-sdk/fetch-http-handler@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.226.0.tgz#350f78fc18fe9cb0a889ef4870838a8fcfa8855c" - integrity sha512-JewZPMNEBXfi1xVnRa7pVtK/zgZD8/lQ/YnD8pq79WuMa2cwyhDtr8oqCoqsPW+WJT5ScXoMtuHxN78l8eKWgg== - dependencies: - "@aws-sdk/protocol-http" "3.226.0" - "@aws-sdk/querystring-builder" "3.226.0" - "@aws-sdk/types" "3.226.0" - "@aws-sdk/util-base64" "3.208.0" - tslib "^2.3.1" - "@aws-sdk/hash-node@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/hash-node/-/hash-node-3.212.0.tgz#4c1a8e02ef7b6fea01f81c288122088fc945404c" @@ -744,15 +436,6 @@ "@aws-sdk/util-buffer-from" "3.208.0" tslib "^2.3.1" -"@aws-sdk/hash-node@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/hash-node/-/hash-node-3.226.0.tgz#252d98bcbb1e13c8f26d9d416db03cf8cceac185" - integrity sha512-MdlJhJ9/Espwd0+gUXdZRsHuostB2WxEVAszWxobP0FTT9PnicqnfK7ExmW+DUAc0ywxtEbR3e0UND65rlSTVw== - dependencies: - "@aws-sdk/types" "3.226.0" - "@aws-sdk/util-buffer-from" "3.208.0" - tslib "^2.3.1" - "@aws-sdk/invalid-dependency@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/invalid-dependency/-/invalid-dependency-3.212.0.tgz#9e4dbbfcfdc6bbbc7be9c09775f6a2b8eb7f50d2" @@ -761,14 +444,6 @@ "@aws-sdk/types" "3.212.0" tslib "^2.3.1" -"@aws-sdk/invalid-dependency@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/invalid-dependency/-/invalid-dependency-3.226.0.tgz#74586f60859ed1813985e3d642066cc46d2e9d40" - integrity sha512-QXOYFmap8g9QzRjumcRCIo2GEZkdCwd7ePQW0OABWPhKHzlJ74vvBxywjU3s39EEBEluWXtZ7Iufg6GxZM4ifw== - dependencies: - "@aws-sdk/types" "3.226.0" - tslib "^2.3.1" - "@aws-sdk/is-array-buffer@3.201.0": version "3.201.0" resolved "https://registry.yarnpkg.com/@aws-sdk/is-array-buffer/-/is-array-buffer-3.201.0.tgz#06e557adc284fac2f26071c2944ae01f61b95854" @@ -785,15 +460,6 @@ "@aws-sdk/types" "3.212.0" tslib "^2.3.1" -"@aws-sdk/middleware-content-length@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-content-length/-/middleware-content-length-3.226.0.tgz#6cc952049f6e3cdc3a3778c9dce9f2aee942b5fe" - integrity sha512-ksUzlHJN2JMuyavjA46a4sctvnrnITqt2tbGGWWrAuXY1mel2j+VbgnmJUiwHKUO6bTFBBeft5Vd1TSOb4JmiA== - dependencies: - "@aws-sdk/protocol-http" "3.226.0" - "@aws-sdk/types" "3.226.0" - tslib "^2.3.1" - "@aws-sdk/middleware-endpoint@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.212.0.tgz#f0a4de1d3c2da6c702ce296119d57eb5a9af521e" @@ -808,20 +474,6 @@ "@aws-sdk/util-middleware" "3.212.0" tslib "^2.3.1" -"@aws-sdk/middleware-endpoint@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.226.0.tgz#d776480be4b5a9534c2805b7425be05497f840b7" - integrity sha512-EvLFafjtUxTT0AC9p3aBQu1/fjhWdIeK58jIXaNFONfZ3F8QbEYUPuF/SqZvJM6cWfOO9qwYKkRDbCSTYhprIg== - dependencies: - "@aws-sdk/middleware-serde" "3.226.0" - "@aws-sdk/protocol-http" "3.226.0" - "@aws-sdk/signature-v4" "3.226.0" - "@aws-sdk/types" "3.226.0" - "@aws-sdk/url-parser" "3.226.0" - "@aws-sdk/util-config-provider" "3.208.0" - "@aws-sdk/util-middleware" "3.226.0" - tslib "^2.3.1" - "@aws-sdk/middleware-host-header@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.212.0.tgz#c1a6e38e8f861f7d76c69ff8d62a3da3846da41b" @@ -831,15 +483,6 @@ "@aws-sdk/types" "3.212.0" tslib "^2.3.1" -"@aws-sdk/middleware-host-header@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.226.0.tgz#1e1ecb034929e0dbc532ae501fd93781438f9a24" - integrity sha512-haVkWVh6BUPwKgWwkL6sDvTkcZWvJjv8AgC8jiQuSl8GLZdzHTB8Qhi3IsfFta9HAuoLjxheWBE5Z/L0UrfhLA== - dependencies: - "@aws-sdk/protocol-http" "3.226.0" - "@aws-sdk/types" "3.226.0" - tslib "^2.3.1" - "@aws-sdk/middleware-logger@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.212.0.tgz#c43ec677be6913854b97fb48e0c3a53fe158d910" @@ -848,14 +491,6 @@ "@aws-sdk/types" "3.212.0" tslib "^2.3.1" -"@aws-sdk/middleware-logger@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.226.0.tgz#37fd0e62f555befd526b03748c3aab60dcefecf3" - integrity sha512-m9gtLrrYnpN6yckcQ09rV7ExWOLMuq8mMPF/K3DbL/YL0TuILu9i2T1W+JuxSX+K9FMG2HrLAKivE/kMLr55xA== - dependencies: - "@aws-sdk/types" "3.226.0" - tslib "^2.3.1" - "@aws-sdk/middleware-recursion-detection@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.212.0.tgz#5aebe6164f2484fca47789da33f7f600c8e44391" @@ -865,15 +500,6 @@ "@aws-sdk/types" "3.212.0" tslib "^2.3.1" -"@aws-sdk/middleware-recursion-detection@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.226.0.tgz#e149b9138e94d2fa70e7752ba6b1ccb537009706" - integrity sha512-mwRbdKEUeuNH5TEkyZ5FWxp6bL2UC1WbY+LDv6YjHxmSMKpAoOueEdtU34PqDOLrpXXxIGHDFmjeGeMfktyEcA== - dependencies: - "@aws-sdk/protocol-http" "3.226.0" - "@aws-sdk/types" "3.226.0" - tslib "^2.3.1" - "@aws-sdk/middleware-retry@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-retry/-/middleware-retry-3.212.0.tgz#39c499cdf3423b99f16ca503bae90fd337536aef" @@ -886,18 +512,6 @@ tslib "^2.3.1" uuid "^8.3.2" -"@aws-sdk/middleware-retry@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-retry/-/middleware-retry-3.226.0.tgz#d469d6c20984edcb58e4ca780ddf267f21558f99" - integrity sha512-uMn4dSkv9Na2uvt6K3HgTnVrCRAlGv1MBAtUDLXONqUv1L/Z1fp3CkFkLKQHKylfBwBhe6dXfYEo87i8LZFoqg== - dependencies: - "@aws-sdk/protocol-http" "3.226.0" - "@aws-sdk/service-error-classification" "3.226.0" - "@aws-sdk/types" "3.226.0" - "@aws-sdk/util-middleware" "3.226.0" - tslib "^2.3.1" - uuid "^8.3.2" - "@aws-sdk/middleware-sdk-sts@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.212.0.tgz#cb46e56b072e2b02fb305878fa1b1262b2d368b7" @@ -910,18 +524,6 @@ "@aws-sdk/types" "3.212.0" tslib "^2.3.1" -"@aws-sdk/middleware-sdk-sts@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.226.0.tgz#e8a8cf42bba8963259546120cde1e408628863f9" - integrity sha512-NN9T/qoSD1kZvAT+VLny3NnlqgylYQcsgV3rvi/8lYzw/G/2s8VS6sm/VTWGGZhx08wZRv20MWzYu3bftcyqUg== - dependencies: - "@aws-sdk/middleware-signing" "3.226.0" - "@aws-sdk/property-provider" "3.226.0" - "@aws-sdk/protocol-http" "3.226.0" - "@aws-sdk/signature-v4" "3.226.0" - "@aws-sdk/types" "3.226.0" - tslib "^2.3.1" - "@aws-sdk/middleware-serde@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-serde/-/middleware-serde-3.212.0.tgz#d5ed435769930019df61efa0410a58c63bb0dae3" @@ -930,14 +532,6 @@ "@aws-sdk/types" "3.212.0" tslib "^2.3.1" -"@aws-sdk/middleware-serde@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-serde/-/middleware-serde-3.226.0.tgz#c837ef33b34bec2af19a1c177a0c02a1ae20da5e" - integrity sha512-nPuOOAkSfx9TxzdKFx0X2bDlinOxGrqD7iof926K/AEflxGD1DBdcaDdjlYlPDW2CVE8LV/rAgbYuLxh/E/1VA== - dependencies: - "@aws-sdk/types" "3.226.0" - tslib "^2.3.1" - "@aws-sdk/middleware-signing@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.212.0.tgz#9086db6e1baca5f80598239b51be4e131a26a92e" @@ -950,18 +544,6 @@ "@aws-sdk/util-middleware" "3.212.0" tslib "^2.3.1" -"@aws-sdk/middleware-signing@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.226.0.tgz#ebb1d142ac2767466f2e464bb7dba9837143b4d1" - integrity sha512-E6HmtPcl+IjYDDzi1xI2HpCbBq2avNWcjvCriMZWuTAtRVpnA6XDDGW5GY85IfS3A8G8vuWqEVPr8JcYUcjfew== - dependencies: - "@aws-sdk/property-provider" "3.226.0" - "@aws-sdk/protocol-http" "3.226.0" - "@aws-sdk/signature-v4" "3.226.0" - "@aws-sdk/types" "3.226.0" - "@aws-sdk/util-middleware" "3.226.0" - tslib "^2.3.1" - "@aws-sdk/middleware-stack@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-stack/-/middleware-stack-3.212.0.tgz#1399a0c03a6817fda804612b5760ddbff843ac0c" @@ -969,13 +551,6 @@ dependencies: tslib "^2.3.1" -"@aws-sdk/middleware-stack@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-stack/-/middleware-stack-3.226.0.tgz#b0408370270188103987c457c758f9cf7651754f" - integrity sha512-85wF29LvPvpoed60fZGDYLwv1Zpd/cM0C22WSSFPw1SSJeqO4gtFYyCg2squfT3KI6kF43IIkOCJ+L7GtryPug== - dependencies: - tslib "^2.3.1" - "@aws-sdk/middleware-user-agent@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.212.0.tgz#a1c2332eb867262b1271a21432baafb509014738" @@ -985,15 +560,6 @@ "@aws-sdk/types" "3.212.0" tslib "^2.3.1" -"@aws-sdk/middleware-user-agent@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.226.0.tgz#26653189f3e8da86514f77688a80d0ad445c0799" - integrity sha512-N1WnfzCW1Y5yWhVAphf8OPGTe8Df3vmV7/LdsoQfmpkCZgLZeK2o0xITkUQhRj1mbw7yp8tVFLFV3R2lMurdAQ== - dependencies: - "@aws-sdk/protocol-http" "3.226.0" - "@aws-sdk/types" "3.226.0" - tslib "^2.3.1" - "@aws-sdk/node-config-provider@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/node-config-provider/-/node-config-provider-3.212.0.tgz#62d1815c23dc0836dee5c8fbe758200e8237f05f" @@ -1004,16 +570,6 @@ "@aws-sdk/types" "3.212.0" tslib "^2.3.1" -"@aws-sdk/node-config-provider@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/node-config-provider/-/node-config-provider-3.226.0.tgz#a9e21512ef824142bb928a0b2f85b39a75b8964d" - integrity sha512-B8lQDqiRk7X5izFEUMXmi8CZLOKCTWQJU9HQf3ako+sF0gexo4nHN3jhoRWyLtcgC5S3on/2jxpAcqtm7kuY3w== - dependencies: - "@aws-sdk/property-provider" "3.226.0" - "@aws-sdk/shared-ini-file-loader" "3.226.0" - "@aws-sdk/types" "3.226.0" - tslib "^2.3.1" - "@aws-sdk/node-http-handler@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/node-http-handler/-/node-http-handler-3.212.0.tgz#9e9fc82fd856fd740f8d6c526627966b9aa11580" @@ -1025,17 +581,6 @@ "@aws-sdk/types" "3.212.0" tslib "^2.3.1" -"@aws-sdk/node-http-handler@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/node-http-handler/-/node-http-handler-3.226.0.tgz#373886e949d214a99a3521bd6c141fa17b0e89fe" - integrity sha512-xQCddnZNMiPmjr3W7HYM+f5ir4VfxgJh37eqZwX6EZmyItFpNNeVzKUgA920ka1VPz/ZUYB+2OFGiX3LCLkkaA== - dependencies: - "@aws-sdk/abort-controller" "3.226.0" - "@aws-sdk/protocol-http" "3.226.0" - "@aws-sdk/querystring-builder" "3.226.0" - "@aws-sdk/types" "3.226.0" - tslib "^2.3.1" - "@aws-sdk/property-provider@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/property-provider/-/property-provider-3.212.0.tgz#0adcee53cc378de8f291f40e2427976b1e3f8801" @@ -1044,14 +589,6 @@ "@aws-sdk/types" "3.212.0" tslib "^2.3.1" -"@aws-sdk/property-provider@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/property-provider/-/property-provider-3.226.0.tgz#ef0ff37c319dc37a52f08fa7544f861308a3bbd8" - integrity sha512-TsljjG+Sg0LmdgfiAlWohluWKnxB/k8xenjeozZfzOr5bHmNHtdbWv6BtNvD/R83hw7SFXxbJHlD5H4u9p2NFg== - dependencies: - "@aws-sdk/types" "3.226.0" - tslib "^2.3.1" - "@aws-sdk/protocol-http@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/protocol-http/-/protocol-http-3.212.0.tgz#fc7c6239ad2caf39486ea495186174f53fbc2539" @@ -1060,14 +597,6 @@ "@aws-sdk/types" "3.212.0" tslib "^2.3.1" -"@aws-sdk/protocol-http@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/protocol-http/-/protocol-http-3.226.0.tgz#0af7bdc331508e556b722aad0cb78eefa93466e3" - integrity sha512-zWkVqiTA9RXL6y0hhfZc9bcU4DX2NI6Hw9IhQmSPeM59mdbPjJlY4bLlMr5YxywqO3yQ/ylNoAfrEzrDjlOSRg== - dependencies: - "@aws-sdk/types" "3.226.0" - tslib "^2.3.1" - "@aws-sdk/querystring-builder@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-builder/-/querystring-builder-3.212.0.tgz#a7783429d4d4bdcd9a2d6895b5929716a6a4faa6" @@ -1077,15 +606,6 @@ "@aws-sdk/util-uri-escape" "3.201.0" tslib "^2.3.1" -"@aws-sdk/querystring-builder@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-builder/-/querystring-builder-3.226.0.tgz#11cd751abeac66f1f9349225454bac3e39808926" - integrity sha512-LVurypuNeotO4lmirKXRC4NYrZRAyMJXuwO0f2a5ZAUJCjauwYrifKue6yCfU7bls7gut7nfcR6B99WBYpHs3g== - dependencies: - "@aws-sdk/types" "3.226.0" - "@aws-sdk/util-uri-escape" "3.201.0" - tslib "^2.3.1" - "@aws-sdk/querystring-parser@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-parser/-/querystring-parser-3.212.0.tgz#1a22d8fb472a1144d8780922bccaf43a9fc1fe06" @@ -1094,24 +614,11 @@ "@aws-sdk/types" "3.212.0" tslib "^2.3.1" -"@aws-sdk/querystring-parser@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-parser/-/querystring-parser-3.226.0.tgz#ba6a26727c98d46c95180e6cdc463039c5e4740d" - integrity sha512-FzB+VrQ47KAFxiPt2YXrKZ8AOLZQqGTLCKHzx4bjxGmwgsjV8yIbtJiJhZLMcUQV4LtGeIY9ixIqQhGvnZHE4A== - dependencies: - "@aws-sdk/types" "3.226.0" - tslib "^2.3.1" - "@aws-sdk/service-error-classification@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/service-error-classification/-/service-error-classification-3.212.0.tgz#b38928291966bb0e2f305f9685adac1b5151e9a7" integrity sha512-jCv+uuFq4yGjP8FoCmoOGqnKNHHREDOFf7OxVSCluGMg2LXHfGxxqkqNFJlT3p+QdEp323GSWFY+PUsMJy7BLQ== -"@aws-sdk/service-error-classification@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/service-error-classification/-/service-error-classification-3.226.0.tgz#47cc6a6d5c7be5b0f6d054ca9375cc405c9d63f6" - integrity sha512-9R01dBpE8JILe2CTft7YN2tMufT2mMWMTqxmHwPSmOpsxHTj8hEII7GTfvpb95ThHwW7XMNhg7pbHLbrTJZCVA== - "@aws-sdk/shared-ini-file-loader@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.212.0.tgz#b9c8bc4d8650d3d8a363c89d988bd173d2622a3b" @@ -1120,14 +627,6 @@ "@aws-sdk/types" "3.212.0" tslib "^2.3.1" -"@aws-sdk/shared-ini-file-loader@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.226.0.tgz#d0ade86834b1803ce4b9dcab459e57e0376fd6cf" - integrity sha512-661VQefsARxVyyV2FX9V61V+nNgImk7aN2hYlFKla6BCwZfMng+dEtD0xVGyg1PfRw0qvEv5LQyxMVgHcUSevA== - dependencies: - "@aws-sdk/types" "3.226.0" - tslib "^2.3.1" - "@aws-sdk/signature-v4@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4/-/signature-v4-3.212.0.tgz#e66c0b89750e7dd79829db02c8c289deae15ea92" @@ -1140,18 +639,6 @@ "@aws-sdk/util-uri-escape" "3.201.0" tslib "^2.3.1" -"@aws-sdk/signature-v4@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4/-/signature-v4-3.226.0.tgz#100390b5c5b55a9b0abd05b06fceb36cfa0ecf98" - integrity sha512-/R5q5agdPd7HJB68XMzpxrNPk158EHUvkFkuRu5Qf3kkkHebEzWEBlWoVpUe6ss4rP9Tqcue6xPuaftEmhjpYw== - dependencies: - "@aws-sdk/is-array-buffer" "3.201.0" - "@aws-sdk/types" "3.226.0" - "@aws-sdk/util-hex-encoding" "3.201.0" - "@aws-sdk/util-middleware" "3.226.0" - "@aws-sdk/util-uri-escape" "3.201.0" - tslib "^2.3.1" - "@aws-sdk/smithy-client@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/smithy-client/-/smithy-client-3.212.0.tgz#500b3eedc4540e3d629618f46f6a9c3320495c7f" @@ -1161,15 +648,6 @@ "@aws-sdk/types" "3.212.0" tslib "^2.3.1" -"@aws-sdk/smithy-client@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/smithy-client/-/smithy-client-3.226.0.tgz#d6869ca3627ca33024616c0ec3f707981e080d59" - integrity sha512-BWr1FhWSUhkSBp0TLzliD5AQBjA2Jmo9FlOOt+cBwd9BKkSGlGj+HgATYJ83Sjjg2+J6qvEZBxB78LKVHhorBw== - dependencies: - "@aws-sdk/middleware-stack" "3.226.0" - "@aws-sdk/types" "3.226.0" - tslib "^2.3.1" - "@aws-sdk/token-providers@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.212.0.tgz#bc76a7097e6501599925f86b77f5847c3f355f7a" @@ -1181,29 +659,11 @@ "@aws-sdk/types" "3.212.0" tslib "^2.3.1" -"@aws-sdk/token-providers@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.226.0.tgz#30bf8201bd5583ed7c61350be0c11d69f84ea332" - integrity sha512-3ouRt2i3ve8ivg54PxPhtOTcipzf6BoQsMw0EiO23yYKujhyeFH2IkxV4EYC687xFrUjheqJf8FWU/DD8EQ/ow== - dependencies: - "@aws-sdk/client-sso-oidc" "3.226.0" - "@aws-sdk/property-provider" "3.226.0" - "@aws-sdk/shared-ini-file-loader" "3.226.0" - "@aws-sdk/types" "3.226.0" - tslib "^2.3.1" - "@aws-sdk/types@3.212.0", "@aws-sdk/types@^3.1.0", "@aws-sdk/types@^3.110.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.212.0.tgz#199ceafa82c9c14ed31a3f25992042287d804ca9" integrity sha512-uXBXB1PBYxfPyIvgmjbGdYBlS7rdeMG58uCaY3Ga5scY2xQnj7HU7knATKuIKk2DH1lLT0inqtsRVJS25zRK5w== -"@aws-sdk/types@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.226.0.tgz#3dba2ba223fbb8ac1ebc84de0e036ce69a81d469" - integrity sha512-MmmNHrWeO4man7wpOwrAhXlevqtOV9ZLcH4RhnG5LmRce0RFOApx24HoKENfFCcOyCm5LQBlsXCqi0dZWDWU0A== - dependencies: - tslib "^2.3.1" - "@aws-sdk/url-parser@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/url-parser/-/url-parser-3.212.0.tgz#d4fae88783a5e8f8b59bfceedce269ec87a18f37" @@ -1213,15 +673,6 @@ "@aws-sdk/types" "3.212.0" tslib "^2.3.1" -"@aws-sdk/url-parser@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/url-parser/-/url-parser-3.226.0.tgz#f53d1f868b27fe74aca091a799f2af56237b15a2" - integrity sha512-p5RLE0QWyP0OcTOLmFcLdVgUcUEzmEfmdrnOxyNzomcYb0p3vUagA5zfa1HVK2azsQJFBv28GfvMnba9bGhObg== - dependencies: - "@aws-sdk/querystring-parser" "3.226.0" - "@aws-sdk/types" "3.226.0" - tslib "^2.3.1" - "@aws-sdk/util-base64@3.208.0": version "3.208.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-base64/-/util-base64-3.208.0.tgz#36b430e5396251f761590f7c2f0c5c12193f353c" @@ -1269,16 +720,6 @@ bowser "^2.11.0" tslib "^2.3.1" -"@aws-sdk/util-defaults-mode-browser@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.226.0.tgz#f6f3092463533f33d95d0bdb17fc5c511ad2b072" - integrity sha512-chLx+6AeMSjuPsCVbI1B4Pg3jftjjcsuTsJucjo0DKBb1VSWqPCitmOILQVvKiA2Km8TSs3VcbUuOCyDExkzAg== - dependencies: - "@aws-sdk/property-provider" "3.226.0" - "@aws-sdk/types" "3.226.0" - bowser "^2.11.0" - tslib "^2.3.1" - "@aws-sdk/util-defaults-mode-node@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.212.0.tgz#9a3507715c3c83889c8577ffbf5ff9bd15a924fa" @@ -1291,18 +732,6 @@ "@aws-sdk/types" "3.212.0" tslib "^2.3.1" -"@aws-sdk/util-defaults-mode-node@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.226.0.tgz#34115b6631d0d3a7d57c1c88875e74fb5f06972f" - integrity sha512-Zr0AEj6g8gqiOhr31Pa2tdOFdPQciaAUCg3Uj/eH0znNBdVoptCj67oCW/I5v4pY4ZLZtGhr3uuoxDJH2MB3yg== - dependencies: - "@aws-sdk/config-resolver" "3.226.0" - "@aws-sdk/credential-provider-imds" "3.226.0" - "@aws-sdk/node-config-provider" "3.226.0" - "@aws-sdk/property-provider" "3.226.0" - "@aws-sdk/types" "3.226.0" - tslib "^2.3.1" - "@aws-sdk/util-endpoints@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.212.0.tgz#95c94d83b49e2c069b0401ff2da8d8c4b5be2c69" @@ -1311,14 +740,6 @@ "@aws-sdk/types" "3.212.0" tslib "^2.3.1" -"@aws-sdk/util-endpoints@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.226.0.tgz#3728b2e30f6f757ae862a0b7cf3991e75f252c3f" - integrity sha512-iqOkac/zLmyPBUJd7SLN0PeZMkOmlGgD5PHmmekTClOkce2eUjK9SNX1PzL73aXPoPTyhg9QGLH8uEZEQ8YUzg== - dependencies: - "@aws-sdk/types" "3.226.0" - tslib "^2.3.1" - "@aws-sdk/util-hex-encoding@3.201.0": version "3.201.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.201.0.tgz#21d7ec319240ee68c33d938e71cb79830bea315d" @@ -1340,13 +761,6 @@ dependencies: tslib "^2.3.1" -"@aws-sdk/util-middleware@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-middleware/-/util-middleware-3.226.0.tgz#7069ae96e2e00f6bb82c722e073922fb2b051ca2" - integrity sha512-B96CQnwX4gRvQdaQkdUtqvDPkrptV5+va6FVeJOocU/DbSYMAScLxtR3peMS8cnlOT6nL1Eoa42OI9AfZz1VwQ== - dependencies: - tslib "^2.3.1" - "@aws-sdk/util-uri-escape@3.201.0": version "3.201.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-uri-escape/-/util-uri-escape-3.201.0.tgz#5e708d4cde001a4558ee616f889ceacfadd2ab03" @@ -1363,15 +777,6 @@ bowser "^2.11.0" tslib "^2.3.1" -"@aws-sdk/util-user-agent-browser@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.226.0.tgz#164bb2da8d6353133784e47f0a0ae463bc9ebb73" - integrity sha512-PhBIu2h6sPJPcv2I7ELfFizdl5pNiL4LfxrasMCYXQkJvVnoXztHA1x+CQbXIdtZOIlpjC+6BjDcE0uhnpvfcA== - dependencies: - "@aws-sdk/types" "3.226.0" - bowser "^2.11.0" - tslib "^2.3.1" - "@aws-sdk/util-user-agent-node@3.212.0": version "3.212.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.212.0.tgz#7ebf76afd6782ea46d891a8fccc5d53e925ec9b6" @@ -1381,15 +786,6 @@ "@aws-sdk/types" "3.212.0" tslib "^2.3.1" -"@aws-sdk/util-user-agent-node@3.226.0": - version "3.226.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.226.0.tgz#7569460b9efc6bbd5295275c51357e480ff469c2" - integrity sha512-othPc5Dz/pkYkxH+nZPhc1Al0HndQT8zHD4e9h+EZ+8lkd8n+IsnLfTS/mSJWrfiC6UlNRVw55cItstmJyMe/A== - dependencies: - "@aws-sdk/node-config-provider" "3.226.0" - "@aws-sdk/types" "3.226.0" - tslib "^2.3.1" - "@aws-sdk/util-utf8-browser@3.188.0", "@aws-sdk/util-utf8-browser@^3.0.0": version "3.188.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.188.0.tgz#484762bd600401350e148277731d6744a4a92225" @@ -2382,13 +1778,6 @@ dependencies: regenerator-runtime "^0.13.10" -"@babel/runtime@^7.15.4": - version "7.20.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.6.tgz#facf4879bfed9b5326326273a64220f099b0fce3" - integrity sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA== - dependencies: - regenerator-runtime "^0.13.11" - "@babel/template@^7.18.10", "@babel/template@^7.3.3": version "7.18.10" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" @@ -2521,11 +1910,6 @@ resolved "https://registry.yarnpkg.com/@faker-js/faker/-/faker-7.6.0.tgz#9ea331766084288634a9247fcd8b84f16ff4ba07" integrity sha512-XK6BTq1NDMo9Xqw/YkYyGjSsg44fbNwYRx7QK2CuoQgyy+f1rrTDHoExVM5PsyXCtfl2vs2vVJ0MN0yN6LppRw== -"@gar/promisify@^1.0.1", "@gar/promisify@^1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" - integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== - "@graphql-tools/merge@8.3.11": version "8.3.11" resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-8.3.11.tgz#f5eab764e8d7032c1b7e32d5dc6dea5b2f5bb21e" @@ -2551,18 +1935,6 @@ dependencies: tslib "^2.4.0" -"@hapi/hoek@^9.0.0": - version "9.3.0" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" - integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== - -"@hapi/topo@^5.0.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" - integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== - dependencies: - "@hapi/hoek" "^9.0.0" - "@heroicons/react@^2.0.13": version "2.0.13" resolved "https://registry.yarnpkg.com/@heroicons/react/-/react-2.0.13.tgz#9b1cc54ff77d6625c9565efdce0054a4bcd9074c" @@ -2601,10 +1973,10 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== -"@isaacs/string-locale-compare@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" - integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== +"@ioredis/commands@^1.1.1": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ioredis/commands/-/commands-1.2.0.tgz#6d61b3097470af1fdbbe622795b8921d42018e11" + integrity sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg== "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" @@ -2894,6 +2266,13 @@ resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== +"@liaoliaots/nestjs-redis@^9.0.4": + version "9.0.4" + resolved "https://registry.yarnpkg.com/@liaoliaots/nestjs-redis/-/nestjs-redis-9.0.4.tgz#ce2dc4dfbb52f09c2962d6f593abe747e4d173c3" + integrity sha512-iVktrMEcnzCmi805CSNGcxMyQc02E2L2KTYPiSObIaJJ9Zq4Eqtc6dK8+tqDP7yL2A6qj6xgVagvZbXVsb7i2A== + dependencies: + tslib "2.4.1" + "@mapbox/node-pre-gyp@^1.0.10": version "1.0.10" resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz#8e6735ccebbb1581e5a7e652244cadc8a844d03c" @@ -3115,152 +2494,6 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@npmcli/arborist@^4.0.4": - version "4.3.1" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-4.3.1.tgz#a08cddce3339882f688c1dea1651f6971e781c44" - integrity sha512-yMRgZVDpwWjplorzt9SFSaakWx6QIK248Nw4ZFgkrAy/GvJaFRaSZzE6nD7JBK5r8g/+PTxFq5Wj/sfciE7x+A== - dependencies: - "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/installed-package-contents" "^1.0.7" - "@npmcli/map-workspaces" "^2.0.0" - "@npmcli/metavuln-calculator" "^2.0.0" - "@npmcli/move-file" "^1.1.0" - "@npmcli/name-from-folder" "^1.0.1" - "@npmcli/node-gyp" "^1.0.3" - "@npmcli/package-json" "^1.0.1" - "@npmcli/run-script" "^2.0.0" - bin-links "^3.0.0" - cacache "^15.0.3" - common-ancestor-path "^1.0.1" - json-parse-even-better-errors "^2.3.1" - json-stringify-nice "^1.1.4" - mkdirp "^1.0.4" - mkdirp-infer-owner "^2.0.0" - npm-install-checks "^4.0.0" - npm-package-arg "^8.1.5" - npm-pick-manifest "^6.1.0" - npm-registry-fetch "^12.0.1" - pacote "^12.0.2" - parse-conflict-json "^2.0.1" - proc-log "^1.0.0" - promise-all-reject-late "^1.0.0" - promise-call-limit "^1.0.1" - read-package-json-fast "^2.0.2" - readdir-scoped-modules "^1.1.0" - rimraf "^3.0.2" - semver "^7.3.5" - ssri "^8.0.1" - treeverse "^1.0.4" - walk-up-path "^1.0.0" - -"@npmcli/fs@^1.0.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" - integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== - dependencies: - "@gar/promisify" "^1.0.1" - semver "^7.3.5" - -"@npmcli/fs@^2.1.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" - integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== - dependencies: - "@gar/promisify" "^1.1.3" - semver "^7.3.5" - -"@npmcli/git@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-2.1.0.tgz#2fbd77e147530247d37f325930d457b3ebe894f6" - integrity sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw== - dependencies: - "@npmcli/promise-spawn" "^1.3.2" - lru-cache "^6.0.0" - mkdirp "^1.0.4" - npm-pick-manifest "^6.1.1" - promise-inflight "^1.0.1" - promise-retry "^2.0.1" - semver "^7.3.5" - which "^2.0.2" - -"@npmcli/installed-package-contents@^1.0.6", "@npmcli/installed-package-contents@^1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz#ab7408c6147911b970a8abe261ce512232a3f4fa" - integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== - dependencies: - npm-bundled "^1.1.1" - npm-normalize-package-bin "^1.0.1" - -"@npmcli/map-workspaces@^2.0.0": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz#9e5e8ab655215a262aefabf139782b894e0504fc" - integrity sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg== - dependencies: - "@npmcli/name-from-folder" "^1.0.1" - glob "^8.0.1" - minimatch "^5.0.1" - read-package-json-fast "^2.0.3" - -"@npmcli/metavuln-calculator@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-2.0.0.tgz#70937b8b5a5cad5c588c8a7b38c4a8bd6f62c84c" - integrity sha512-VVW+JhWCKRwCTE+0xvD6p3uV4WpqocNYYtzyvenqL/u1Q3Xx6fGTJ+6UoIoii07fbuEO9U3IIyuGY0CYHDv1sg== - dependencies: - cacache "^15.0.5" - json-parse-even-better-errors "^2.3.1" - pacote "^12.0.0" - semver "^7.3.2" - -"@npmcli/move-file@^1.0.1", "@npmcli/move-file@^1.1.0": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" - integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - -"@npmcli/move-file@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" - integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - -"@npmcli/name-from-folder@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz#77ecd0a4fcb772ba6fe927e2e2e155fbec2e6b1a" - integrity sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA== - -"@npmcli/node-gyp@^1.0.2", "@npmcli/node-gyp@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz#a912e637418ffc5f2db375e93b85837691a43a33" - integrity sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA== - -"@npmcli/package-json@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-1.0.1.tgz#1ed42f00febe5293c3502fd0ef785647355f6e89" - integrity sha512-y6jnu76E9C23osz8gEMBayZmaZ69vFOIk8vR1FJL/wbEJ54+9aVG9rLTjQKSXfgYZEr50nw1txBBFfBZZe+bYg== - dependencies: - json-parse-even-better-errors "^2.3.1" - -"@npmcli/promise-spawn@^1.2.0", "@npmcli/promise-spawn@^1.3.2": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz#42d4e56a8e9274fba180dabc0aea6e38f29274f5" - integrity sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg== - dependencies: - infer-owner "^1.0.4" - -"@npmcli/run-script@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-2.0.0.tgz#9949c0cab415b17aaac279646db4f027d6f1e743" - integrity sha512-fSan/Pu11xS/TdaTpTB0MRn9guwGU8dye+x56mEVgBEd/QsybBbYcAL0phPXi8SGWFEChkQd6M9qL4y6VOpFig== - dependencies: - "@npmcli/node-gyp" "^1.0.2" - "@npmcli/promise-spawn" "^1.3.2" - node-gyp "^8.2.0" - read-package-json-fast "^2.0.1" - "@nuxtjs/opencollective@0.3.2": version "0.3.2" resolved "https://registry.yarnpkg.com/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz#620ce1044f7ac77185e825e1936115bb38e2681c" @@ -3270,292 +2503,6 @@ consola "^2.15.0" node-fetch "^2.6.1" -"@oclif/color@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@oclif/color/-/color-1.0.2.tgz#fbb857251454d737033e1dcd6d19fe5ba1d61350" - integrity sha512-HqTFeMjfLOZajxqffSkyDWFUB3YqsSLRcsvnvITGRzhO0Ip4Qwp0VHVwh+qe0TjJYEltmOgzoxsR1LZPQIHNBQ== - dependencies: - ansi-styles "^4.2.1" - chalk "^4.1.0" - strip-ansi "^6.0.1" - supports-color "^8.1.1" - tslib "^2" - -"@oclif/command@^1.8.15", "@oclif/command@^1.8.16": - version "1.8.20" - resolved "https://registry.yarnpkg.com/@oclif/command/-/command-1.8.20.tgz#7e28387be8744145e1b2ee7db89275bc7f708f2f" - integrity sha512-BHM9byujY0kf0PiRorIyp99K50cA3i6Hyro0+TPpFFx+4QM+PyQ5vMHO/TG5wkEP8tIivNRs24bF8QVyJru25g== - dependencies: - "@oclif/config" "^1.18.2" - "@oclif/errors" "^1.3.6" - "@oclif/help" "^1.0.1" - "@oclif/parser" "^3.8.9" - debug "^4.1.1" - semver "^7.3.8" - -"@oclif/config@1.18.2": - version "1.18.2" - resolved "https://registry.yarnpkg.com/@oclif/config/-/config-1.18.2.tgz#5bfe74a9ba6a8ca3dceb314a81bd9ce2e15ebbfe" - integrity sha512-cE3qfHWv8hGRCP31j7fIS7BfCflm/BNZ2HNqHexH+fDrdF2f1D5S8VmXWLC77ffv3oDvWyvE9AZeR0RfmHCCaA== - dependencies: - "@oclif/errors" "^1.3.3" - "@oclif/parser" "^3.8.0" - debug "^4.1.1" - globby "^11.0.1" - is-wsl "^2.1.1" - tslib "^2.0.0" - -"@oclif/config@1.18.6", "@oclif/config@^1.18.2", "@oclif/config@^1.18.3": - version "1.18.6" - resolved "https://registry.yarnpkg.com/@oclif/config/-/config-1.18.6.tgz#37367026b3110a2f04875509b1920a8ee4489f21" - integrity sha512-OWhCpdu4QqggOPX1YPZ4XVmLLRX+lhGjXV6RNA7sogOwLqlEmSslnN/lhR5dkhcWZbKWBQH29YCrB3LDPRu/IA== - dependencies: - "@oclif/errors" "^1.3.6" - "@oclif/parser" "^3.8.9" - debug "^4.3.4" - globby "^11.1.0" - is-wsl "^2.1.1" - tslib "^2.3.1" - -"@oclif/core@^1.20.3", "@oclif/core@^1.20.4": - version "1.21.0" - resolved "https://registry.yarnpkg.com/@oclif/core/-/core-1.21.0.tgz#d91b2f40a4f446279ab6335c619fc1716fc23ab6" - integrity sha512-B/AKYfHcNRAbb6Xz2kj0FlH9gWEi8aFS4iEr7EzguP3E2DpDk4wcf7eOMOfJYEmhuVd9sOpVWSnI2yP+FL/3Sg== - dependencies: - "@oclif/linewrap" "^1.0.0" - "@oclif/screen" "^3.0.3" - ansi-escapes "^4.3.2" - ansi-styles "^4.3.0" - cardinal "^2.1.1" - chalk "^4.1.2" - clean-stack "^3.0.1" - cli-progress "^3.10.0" - debug "^4.3.4" - ejs "^3.1.6" - fs-extra "^9.1.0" - get-package-type "^0.1.0" - globby "^11.1.0" - hyperlinker "^1.0.0" - indent-string "^4.0.0" - is-wsl "^2.2.0" - js-yaml "^3.14.1" - natural-orderby "^2.0.3" - object-treeify "^1.1.33" - password-prompt "^1.1.2" - semver "^7.3.7" - string-width "^4.2.3" - strip-ansi "^6.0.1" - supports-color "^8.1.1" - supports-hyperlinks "^2.2.0" - tslib "^2.4.1" - widest-line "^3.1.0" - wrap-ansi "^7.0.0" - -"@oclif/errors@1.3.5": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@oclif/errors/-/errors-1.3.5.tgz#a1e9694dbeccab10fe2fe15acb7113991bed636c" - integrity sha512-OivucXPH/eLLlOT7FkCMoZXiaVYf8I/w1eTAM1+gKzfhALwWTusxEx7wBmW0uzvkSg/9ovWLycPaBgJbM3LOCQ== - dependencies: - clean-stack "^3.0.0" - fs-extra "^8.1" - indent-string "^4.0.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -"@oclif/errors@1.3.6", "@oclif/errors@^1.3.3", "@oclif/errors@^1.3.6": - version "1.3.6" - resolved "https://registry.yarnpkg.com/@oclif/errors/-/errors-1.3.6.tgz#e8fe1fc12346cb77c4f274e26891964f5175f75d" - integrity sha512-fYaU4aDceETd89KXP+3cLyg9EHZsLD3RxF2IU9yxahhBpspWjkWi3Dy3bTgcwZ3V47BgxQaGapzJWDM33XIVDQ== - dependencies: - clean-stack "^3.0.0" - fs-extra "^8.1" - indent-string "^4.0.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -"@oclif/help@^1.0.1": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@oclif/help/-/help-1.0.4.tgz#0c7cfd776e3cbe033cab023486ed929be0cd1c77" - integrity sha512-w3xsdZj1af/dFN7oCmvAHbHRj6L0SOO5uGXEve0LLroAJSM3DeEpzgNMjxS5RTV2gVC4RmJ/rTqmp0SRaXGiTA== - dependencies: - "@oclif/config" "1.18.6" - "@oclif/errors" "1.3.6" - chalk "^4.1.2" - indent-string "^4.0.0" - lodash "^4.17.21" - string-width "^4.2.0" - strip-ansi "^6.0.0" - widest-line "^3.1.0" - wrap-ansi "^6.2.0" - -"@oclif/linewrap@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@oclif/linewrap/-/linewrap-1.0.0.tgz#aedcb64b479d4db7be24196384897b5000901d91" - integrity sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw== - -"@oclif/parser@^3.8.0", "@oclif/parser@^3.8.9": - version "3.8.9" - resolved "https://registry.yarnpkg.com/@oclif/parser/-/parser-3.8.9.tgz#9399041ada7e465043f34b24f4d82a8beb68a023" - integrity sha512-1j/kThdse7yHQz6+c3v8RA1I3gD6+SGt2O7IAb/MAMoxqyBrFQDabQHH2UU4eVFGMLN7U91AiYJp11zJ9LcQAg== - dependencies: - "@oclif/errors" "^1.3.6" - "@oclif/linewrap" "^1.0.0" - chalk "^4.1.0" - tslib "^2.4.1" - -"@oclif/plugin-help@^3.3.1": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@oclif/plugin-help/-/plugin-help-3.3.1.tgz#36adb4e0173f741df409bb4b69036d24a53bfb24" - integrity sha512-QuSiseNRJygaqAdABYFWn/H1CwIZCp9zp/PLid6yXvy6VcQV7OenEFF5XuYaCvSARe2Tg9r8Jqls5+fw1A9CbQ== - dependencies: - "@oclif/command" "^1.8.15" - "@oclif/config" "1.18.2" - "@oclif/errors" "1.3.5" - "@oclif/help" "^1.0.1" - chalk "^4.1.2" - indent-string "^4.0.0" - lodash "^4.17.21" - string-width "^4.2.0" - strip-ansi "^6.0.0" - widest-line "^3.1.0" - wrap-ansi "^6.2.0" - -"@oclif/plugin-help@^5.1.19": - version "5.1.19" - resolved "https://registry.yarnpkg.com/@oclif/plugin-help/-/plugin-help-5.1.19.tgz#43051772fefafe9bfe8823e2298103feb351b9c7" - integrity sha512-eQVRCFJOwRj8Tbqz8Lzd9GN38egwLCg+ohJ0xfg12CoXml03WqkfcFiAWkVwSWmLVrZUlUVrxfXKKkmpUaXZHg== - dependencies: - "@oclif/core" "^1.20.4" - -"@oclif/plugin-not-found@^2.3.7": - version "2.3.9" - resolved "https://registry.yarnpkg.com/@oclif/plugin-not-found/-/plugin-not-found-2.3.9.tgz#045277bf04c8fd6ee25e68d5355658985c21404a" - integrity sha512-FJXIa5KmNbCgO8kDVJ23C/SkRRuwMYaRTNs5jejwrwKAm5fPp+TnR1+4pBp64ik7FA806nioqMGlotiyEWfMJA== - dependencies: - "@oclif/color" "^1.0.2" - "@oclif/core" "^1.20.3" - fast-levenshtein "^3.0.0" - lodash "^4.17.21" - -"@oclif/plugin-warn-if-update-available@^2.0.14": - version "2.0.15" - resolved "https://registry.yarnpkg.com/@oclif/plugin-warn-if-update-available/-/plugin-warn-if-update-available-2.0.15.tgz#8d2610ccfb5fbbde639ce86aa95c7208d8152ee1" - integrity sha512-HC3ZNNH2V1m3LTgzc8+5ISpyv0bmZwngANLzc1rM3a0kxUiH1jSagZU5XWBF7B4Wh1VIOFkR96y4D0Dwh6KNfw== - dependencies: - "@oclif/core" "^1.20.4" - chalk "^4.1.0" - debug "^4.1.0" - fs-extra "^9.0.1" - http-call "^5.2.2" - lodash "^4.17.21" - semver "^7.3.8" - -"@oclif/screen@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@oclif/screen/-/screen-3.0.3.tgz#e679ad10535e31d333f809f7a71335cc9aef1e55" - integrity sha512-KX8gMYA9ujBPOd1HFsV9e0iEx7Uoj8AG/3YsW4TtWQTg4lJvr82qNm7o/cFQfYRIt+jw7Ew/4oL4A22zOT+IRA== - -"@octokit/auth-token@^2.4.4": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.5.0.tgz#27c37ea26c205f28443402477ffd261311f21e36" - integrity sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g== - dependencies: - "@octokit/types" "^6.0.3" - -"@octokit/core@^3.5.1": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.6.0.tgz#3376cb9f3008d9b3d110370d90e0a1fcd5fe6085" - integrity sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q== - dependencies: - "@octokit/auth-token" "^2.4.4" - "@octokit/graphql" "^4.5.8" - "@octokit/request" "^5.6.3" - "@octokit/request-error" "^2.0.5" - "@octokit/types" "^6.0.3" - before-after-hook "^2.2.0" - universal-user-agent "^6.0.0" - -"@octokit/endpoint@^6.0.1": - version "6.0.12" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.12.tgz#3b4d47a4b0e79b1027fb8d75d4221928b2d05658" - integrity sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA== - dependencies: - "@octokit/types" "^6.0.3" - is-plain-object "^5.0.0" - universal-user-agent "^6.0.0" - -"@octokit/graphql@^4.5.8": - version "4.8.0" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.8.0.tgz#664d9b11c0e12112cbf78e10f49a05959aa22cc3" - integrity sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg== - dependencies: - "@octokit/request" "^5.6.0" - "@octokit/types" "^6.0.3" - universal-user-agent "^6.0.0" - -"@octokit/openapi-types@^12.11.0": - version "12.11.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-12.11.0.tgz#da5638d64f2b919bca89ce6602d059f1b52d3ef0" - integrity sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ== - -"@octokit/plugin-paginate-rest@^2.16.8": - version "2.21.3" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz#7f12532797775640dbb8224da577da7dc210c87e" - integrity sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw== - dependencies: - "@octokit/types" "^6.40.0" - -"@octokit/plugin-request-log@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" - integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== - -"@octokit/plugin-rest-endpoint-methods@^5.12.0": - version "5.16.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz#7ee8bf586df97dd6868cf68f641354e908c25342" - integrity sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw== - dependencies: - "@octokit/types" "^6.39.0" - deprecation "^2.3.1" - -"@octokit/request-error@^2.0.5", "@octokit/request-error@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.1.0.tgz#9e150357831bfc788d13a4fd4b1913d60c74d677" - integrity sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg== - dependencies: - "@octokit/types" "^6.0.3" - deprecation "^2.0.0" - once "^1.4.0" - -"@octokit/request@^5.6.0", "@octokit/request@^5.6.3": - version "5.6.3" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.6.3.tgz#19a022515a5bba965ac06c9d1334514eb50c48b0" - integrity sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A== - dependencies: - "@octokit/endpoint" "^6.0.1" - "@octokit/request-error" "^2.1.0" - "@octokit/types" "^6.16.1" - is-plain-object "^5.0.0" - node-fetch "^2.6.7" - universal-user-agent "^6.0.0" - -"@octokit/rest@^18.0.6": - version "18.12.0" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.12.0.tgz#f06bc4952fc87130308d810ca9d00e79f6988881" - integrity sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q== - dependencies: - "@octokit/core" "^3.5.1" - "@octokit/plugin-paginate-rest" "^2.16.8" - "@octokit/plugin-request-log" "^1.0.4" - "@octokit/plugin-rest-endpoint-methods" "^5.12.0" - -"@octokit/types@^6.0.3", "@octokit/types@^6.16.1", "@octokit/types@^6.39.0", "@octokit/types@^6.40.0": - version "6.41.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.41.0.tgz#e58ef78d78596d2fb7df9c6259802464b5f84a04" - integrity sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg== - dependencies: - "@octokit/openapi-types" "^12.11.0" - "@open-draft/until@^1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@open-draft/until/-/until-1.0.3.tgz#db9cc719191a62e7d9200f6e7bab21c5b848adca" @@ -3586,59 +2533,6 @@ resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== -"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" - integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== - -"@protobufjs/base64@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" - integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== - -"@protobufjs/codegen@^2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" - integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== - -"@protobufjs/eventemitter@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" - integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== - -"@protobufjs/fetch@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" - integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== - dependencies: - "@protobufjs/aspromise" "^1.1.1" - "@protobufjs/inquire" "^1.1.0" - -"@protobufjs/float@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" - integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== - -"@protobufjs/inquire@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" - integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== - -"@protobufjs/path@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" - integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== - -"@protobufjs/pool@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" - integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== - -"@protobufjs/utf8@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" - integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== - "@remix-run/router@1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.0.3.tgz#953b88c20ea00d0eddaffdc1b115c08474aa295d" @@ -3710,38 +2604,11 @@ "@sentry/types" "7.20.0" tslib "^1.9.3" -"@sideway/address@^4.1.3": - version "4.1.4" - resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" - integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== - dependencies: - "@hapi/hoek" "^9.0.0" - -"@sideway/formula@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.0.tgz#fe158aee32e6bd5de85044be615bc08478a0a13c" - integrity sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg== - -"@sideway/pinpoint@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" - integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== - "@sinclair/typebox@^0.24.1": version "0.24.51" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.51.tgz#645f33fe4e02defe26f2f5c0410e1c094eac7f5f" integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA== -"@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== - -"@sindresorhus/is@^4.0.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== - "@sinonjs/commons@^1.7.0": version "1.8.5" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.5.tgz#e280c94c95f206dcfd5aca00a43f2156b758c764" @@ -3841,20 +2708,6 @@ resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553" integrity sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg== -"@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== - dependencies: - defer-to-connect "^1.0.1" - -"@szmarczak/http-timer@^4.0.5": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" - integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== - dependencies: - defer-to-connect "^2.0.0" - "@tanstack/match-sorter-utils@8.1.1": version "8.1.1" resolved "https://registry.yarnpkg.com/@tanstack/match-sorter-utils/-/match-sorter-utils-8.1.1.tgz#895f407813254a46082a6bbafad9b39b943dc834" @@ -3922,11 +2775,6 @@ "@testing-library/dom" "^8.5.0" "@types/react-dom" "^18.0.0" -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - "@tootallnate/once@2": version "2.0.0" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" @@ -4010,16 +2858,6 @@ dependencies: "@types/node" "*" -"@types/cacheable-request@^6.0.1": - version "6.0.3" - resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" - integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== - dependencies: - "@types/http-cache-semantics" "*" - "@types/keyv" "^3.1.4" - "@types/node" "*" - "@types/responselike" "^1.0.0" - "@types/connect-history-api-fallback@^1.3.5": version "1.3.5" resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" @@ -4090,11 +2928,6 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== -"@types/expect@^1.20.4": - version "1.20.4" - resolved "https://registry.yarnpkg.com/@types/expect/-/expect-1.20.4.tgz#8288e51737bf7e3ab5d7c77bfa695883745264e5" - integrity sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg== - "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18": version "4.17.31" resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz#a1139efeab4e7323834bb0226e62ac019f474b2f" @@ -4126,11 +2959,6 @@ resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== -"@types/http-cache-semantics@*": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" - integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== - "@types/http-proxy@^1.17.8": version "1.17.9" resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.9.tgz#7f0e7931343761efde1e2bf48c40f02f3f75705a" @@ -4218,28 +3046,11 @@ dependencies: "@types/node" "*" -"@types/keyv@^3.1.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" - integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== - dependencies: - "@types/node" "*" - -"@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== - "@types/mime@*": version "3.0.1" resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== -"@types/minimatch@^3.0.3": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" - integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== - "@types/ms@*": version "0.7.31" resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" @@ -4255,26 +3066,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.10.tgz#4c64759f3c2343b7e6c4b9caf761c7a3a05cee34" integrity sha512-juG3RWMBOqcOuXC643OAdSA525V44cVgGV6dUDuiFtss+8Fk5x1hI93Rsld43VeJVIeqlP9I7Fn9/qaVqoEAuQ== -"@types/node@>=13.7.0": - version "18.11.11" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.11.tgz#1d455ac0211549a8409d3cdb371cd55cc971e8dc" - integrity sha512-KJ021B1nlQUBLopzZmPBVuGU9un7WJd/W4ya7Ih02B4Uwky5Nja0yGYav2EfYIk0RR2Q9oVhf60S2XR1BCWJ2g== - -"@types/node@^15.6.1": - version "15.14.9" - resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.9.tgz#bc43c990c3c9be7281868bbc7b8fdd6e2b57adfa" - integrity sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A== - "@types/node@^16.0.0": version "16.18.3" resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.3.tgz#d7f7ba828ad9e540270f01ce00d391c54e6e0abc" integrity sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg== -"@types/normalize-package-data@^2.4.0": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" - integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== - "@types/p-queue@^2.3.2": version "2.3.2" resolved "https://registry.yarnpkg.com/@types/p-queue/-/p-queue-2.3.2.tgz#16bc5fece69ef85efaf2bce8b13f3ebe39c5a1c8" @@ -4352,13 +3148,6 @@ "@types/scheduler" "*" csstype "^3.0.2" -"@types/responselike@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" - integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== - dependencies: - "@types/node" "*" - "@types/retry@0.12.0": version "0.12.0" resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" @@ -4447,14 +3236,6 @@ resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.2.tgz#6286b4c7228d58ab7866d19716f3696e03a09397" integrity sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw== -"@types/vinyl@^2.0.4": - version "2.0.7" - resolved "https://registry.yarnpkg.com/@types/vinyl/-/vinyl-2.0.7.tgz#9739a9a2afaf9af32761c54a0e82c735279f726c" - integrity sha512-4UqPv+2567NhMQuMLdKAyK4yzrfCqwaTt6bLhHEs8PFcxbHILsrxaY63n4wgE/BRLDWDQeI+WcTmkXKExh9hQg== - dependencies: - "@types/expect" "^1.20.4" - "@types/node" "*" - "@types/webidl-conversions@*": version "7.0.0" resolved "https://registry.yarnpkg.com/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz#2b8e60e33906459219aa587e9d1a612ae994cfe7" @@ -4794,7 +3575,7 @@ acorn-walk@^7.0.0: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn-walk@^8.0.0, acorn-walk@^8.0.2, acorn-walk@^8.1.1, acorn-walk@^8.2.0: +acorn-walk@^8.0.0, acorn-walk@^8.0.2, acorn-walk@^8.1.1: version "8.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== @@ -4809,7 +3590,7 @@ acorn@^7.0.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.0.4, acorn@^8.1.0, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.0, acorn@^8.7.1, acorn@^8.8.0, acorn@^8.8.1: +acorn@^8.0.4, acorn@^8.1.0, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0, acorn@^8.8.1: version "8.8.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== @@ -4819,30 +3600,13 @@ add-px-to-style@1.0.0: resolved "https://registry.yarnpkg.com/add-px-to-style/-/add-px-to-style-1.0.0.tgz#d0c135441fa8014a8137904531096f67f28f263a" integrity sha512-YMyxSlXpPjD8uWekCQGuN40lV4bnZagUwqa2m/uFv1z/tNImSk9fnXVMUI5qwME/zzI3MMQRvjZ+69zyfSSyew== -agent-base@6, agent-base@^6.0.0, agent-base@^6.0.2: +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" -agentkeepalive@^4.1.0, agentkeepalive@^4.1.3, agentkeepalive@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.2.1.tgz#a7975cbb9f83b367f06c90cc51ff28fe7d499717" - integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== - dependencies: - debug "^4.1.0" - depd "^1.1.2" - humanize-ms "^1.2.1" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - ajv-formats@2.1.1, ajv-formats@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" @@ -4892,29 +3656,17 @@ ajv@^8.0.0, ajv@^8.8.0: require-from-string "^2.0.2" uri-js "^4.2.2" -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - integrity sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg== - -ansi-align@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" - integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== - dependencies: - string-width "^4.1.0" - ansi-colors@4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== -ansi-escapes@^3.1.0, ansi-escapes@^3.2.0: +ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== -ansi-escapes@^4.2.1, ansi-escapes@^4.3.2: +ansi-escapes@^4.2.1: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -4926,11 +3678,6 @@ ansi-html-community@^0.0.8: resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== - ansi-regex@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" @@ -4946,19 +3693,14 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== - -ansi-styles@^3.0.0, ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" -ansi-styles@^4.0.0, ansi-styles@^4.1.0, ansi-styles@^4.2.1, ansi-styles@^4.3.0: +ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== @@ -4970,16 +3712,6 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== -ansicolors@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" - integrity sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg== - -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== - anymatch@^3.0.3, anymatch@~3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" @@ -4998,35 +3730,6 @@ append-field@^1.0.0: resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== -archiver-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2" - integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw== - dependencies: - glob "^7.1.4" - graceful-fs "^4.2.0" - lazystream "^1.0.0" - lodash.defaults "^4.2.0" - lodash.difference "^4.5.0" - lodash.flatten "^4.4.0" - lodash.isplainobject "^4.0.6" - lodash.union "^4.6.0" - normalize-path "^3.0.0" - readable-stream "^2.0.0" - -archiver@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.3.1.tgz#21e92811d6f09ecfce649fbefefe8c79e57cbbb6" - integrity sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w== - dependencies: - archiver-utils "^2.1.0" - async "^3.2.3" - buffer-crc32 "^0.2.1" - readable-stream "^3.6.0" - readdir-glob "^1.0.0" - tar-stream "^2.2.0" - zip-stream "^4.1.0" - are-we-there-yet@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" @@ -5035,14 +3738,6 @@ are-we-there-yet@^2.0.0: delegates "^1.0.0" readable-stream "^3.6.0" -are-we-there-yet@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" - integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - arg@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" @@ -5081,11 +3776,6 @@ aria-query@^5.0.0: dependencies: deep-equal "^2.0.5" -array-differ@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" - integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== - array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" @@ -5143,136 +3833,11 @@ array.prototype.tosorted@^1.1.1: es-shim-unscopables "^1.0.0" get-intrinsic "^1.1.3" -arrify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" - integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== - -arrivals@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/arrivals/-/arrivals-2.1.2.tgz#bbf8676908f85a133df4c5c1aff8f4cd99e92785" - integrity sha512-g3+rxhxUen2H4+PPBOz6U6pkQ4esBuQPna1rPskgK1jamBdDZeoppyB2vPUM/l0ccunwRrq4r2rKgCvc2FnrFA== - dependencies: - debug "^4.0.1" - nanotimer "0.3.14" - -artillery-plugin-ensure@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/artillery-plugin-ensure/-/artillery-plugin-ensure-1.1.1.tgz#d4e516811d19e8f982ae1d3d78406c063b025ec9" - integrity sha512-pKMuAtK21qEllj34ay2Wm1aIG13L8ltyI1KifODdoagxKre87lLvZBLNDNx+zuYiaSWG5p20btRfKSQbjMLrNA== - dependencies: - debug "^4.3.3" - filtrex "^2.2.3" - -artillery-plugin-expect@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/artillery-plugin-expect/-/artillery-plugin-expect-2.1.0.tgz#1d1a986b96e32d259545eca1afe555108119a286" - integrity sha512-5mGQQQ9/kcEtoJrLYc/l8pY566TTsTOX9JxCP9wjJg5GHXsmJyoXBZarczTJwnmphx6OJp+ut1xj9QLlSFrO9A== - dependencies: - chalk "^4.1.2" - debug "^4.3.2" - lodash "^4.17.21" - -artillery-plugin-metrics-by-endpoint@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/artillery-plugin-metrics-by-endpoint/-/artillery-plugin-metrics-by-endpoint-1.0.2.tgz#268928dbd4938cfd7b08ccf84d4ada20f009cf99" - integrity sha512-/dDlmDhG/tM6zOPJ/AktrbWvYXKfgaT48P6EmYLvb3erq+f5Z06AKKlpqoVRoWfcMYPMVX0Kde5fnaQnnW6CmA== - dependencies: - debug "^4.3.2" - -artillery-plugin-publish-metrics@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/artillery-plugin-publish-metrics/-/artillery-plugin-publish-metrics-2.0.2.tgz#c843a0ebf0607cef769e1e10407501c9bc524a99" - integrity sha512-HkJAWFwGB6cHB+BNID72QSyrQUF+yXbY0nhFZvC3fvvs2Lf3mcK6qNbOuw6EFLbrUnYM04JOOhKQT0jXeqPP9A== - dependencies: - async "^2.6.1" - datadog-metrics "^0.9.3" - debug "^4.1.1" - dogapi "^2.8.4" - hot-shots "^6.0.1" - libhoney "^2.2.3" - lightstep-tracer "^0.31.0" - mixpanel "^0.13.0" - opentracing "^0.14.5" - prom-client "^14.0.1" - semver "^7.3.5" - uuid "^8.3.2" - -artillery@^2.0.0-27: - version "2.0.0-27" - resolved "https://registry.yarnpkg.com/artillery/-/artillery-2.0.0-27.tgz#33a7b34780bd6f112fcd79f4b8d0cee68c22234e" - integrity sha512-IiCCpueb266cOVkblpPYvyLSkKNmQpWNtOvLm92WB+qZh1gsddBkkP5Xx+UTUR38x87h9w1F3Wr2rNg14IPjhw== - dependencies: - "@artilleryio/sketches-js" "^1.0.4" - "@aws-sdk/credential-providers" "^3.127.0" - "@oclif/command" "^1.8.16" - "@oclif/config" "^1.18.3" - "@oclif/plugin-help" "^3.3.1" - agentkeepalive "^4.1.0" - archiver "^5.3.1" - arrivals "^2.1.2" - artillery-plugin-ensure "^1.1.1" - artillery-plugin-expect "^2.1.0" - artillery-plugin-metrics-by-endpoint "^1.0.2" - artillery-plugin-publish-metrics "^2.0.2" - async "^2.6.4" - aws-sdk "^2.1172.0" - chalk "^2.4.2" - cheerio "^1.0.0-rc.10" - ci-info "^2.0.0" - cli-highlight "^2.1.11" - cli-table3 "^0.6.2" - csv-parse "^4.16.3" - debug "^4.3.1" - decompress-response "^6.0.0" - deep-for-each "^3.0.0" - dotenv "^16.0.1" - driftless "^2.0.3" - esprima "^4.0.0" - eventemitter3 "^4.0.4" - fast-deep-equal "^3.1.3" - filtrex "^0.5.4" - form-data "^3.0.0" - fs-extra "^10.1.0" - got "^11.8.5" - hpagent "^0.1.1" - https-proxy-agent "^5.0.0" - ip "^1.1.8" - jmespath "^0.16.0" - joi "^17.6.0" - js-yaml "^3.13.1" - jsonpath "^1.1.1" - lodash "^4.17.19" - mime-types "^2.1.35" - moment "^2.29.4" - nanotimer "^0.3.15" - oclif "^3.1.0" - ora "^4.0.4" - posthog-node "^1.3.0" - socket.io-client "^4.5.1" - socketio-wildcard "^2.0.0" - sprintf-js "^1.1.2" - sqs-consumer "^5.7.0" - temp "^0.9.4" - tmp "0.2.1" - tough-cookie "^4.0.0" - try-require "1.2.1" - update-notifier "^5.1.0" - uuid "^8.0.0" - ws "^7.5.7" - asap@^2.0.0: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== -ast-types@^0.13.2: - version "0.13.4" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" - integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w== - dependencies: - tslib "^2.0.1" - astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" @@ -5290,18 +3855,6 @@ async-mutex@^0.3.2: dependencies: tslib "^2.3.1" -async@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.0.tgz#2796642723573859565633fc6274444bee2f8ce3" - integrity sha512-m9nMwCtLtz29LszVaR0q/FqsJWkrxVoQL95p7JU0us7qUx4WEcySQgwvuneYSGVyvirl81gz7agflS3V1yW14g== - -async@^2.6.1, async@^2.6.4: - version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" - async@^3.2.3: version "3.2.4" resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" @@ -5312,11 +3865,6 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - autoprefixer@^10.4.13: version "10.4.13" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.13.tgz#b5136b59930209a321e9fa3dca2e7c4d223e83a8" @@ -5334,37 +3882,6 @@ available-typed-arrays@^1.0.5: resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== -aws-sdk@^2.1172.0, aws-sdk@^2.1231.0: - version "2.1270.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1270.0.tgz#af620a7603e49128f05f2cd3200bf46cc41a6bc7" - integrity sha512-Dyvcv/cMQxS5ed7wpeDuTZSzRg0ut6bSngHOC+jPiSUyf3LqJI2MnrJMNfcsiVg034bxDVLL5BRI/LfLZc0Ygg== - dependencies: - buffer "4.9.2" - events "1.1.1" - ieee754 "1.1.13" - jmespath "0.16.0" - querystring "0.2.0" - sax "1.2.1" - url "0.10.3" - util "^0.12.4" - uuid "8.0.0" - xml2js "0.4.19" - -axios-retry@^3.1.9: - version "3.3.1" - resolved "https://registry.yarnpkg.com/axios-retry/-/axios-retry-3.3.1.tgz#47624646138aedefbad2ac32f226f4ee94b6dcab" - integrity sha512-RohAUQTDxBSWLFEnoIG/6bvmy8l3TfpkclgStjl5MDCMBDgapAWCmr1r/9harQfWC8bzLC8job6UcL1A1Yc+/Q== - dependencies: - "@babel/runtime" "^7.15.4" - is-retry-allowed "^2.2.0" - -axios@0.24.0: - version "0.24.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.24.0.tgz#804e6fa1e4b9c5288501dd9dff56a7a0940d20d6" - integrity sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA== - dependencies: - follow-redirects "^1.14.4" - axios@^0.21.1, axios@^0.21.4: version "0.21.4" resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" @@ -5381,6 +3898,15 @@ axios@^1.1.3: form-data "^4.0.0" proxy-from-env "^1.1.0" +axios@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.2.1.tgz#44cf04a3c9f0c2252ebd85975361c026cb9f864a" + integrity sha512-I88cFiGu9ryt/tfVEi4kX2SITsvDddTajXTOFmt2uK1ZVA8LytjtdeyefdQWEf5PU8w+4SSJDoYnggflB5tW4A== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + babel-jest@^29.3.1: version "29.3.1" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.3.1.tgz#05c83e0d128cd48c453eea851482a38782249f44" @@ -5499,7 +4025,7 @@ 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.0.2, base64-js@^1.3.1: +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== @@ -5521,54 +4047,15 @@ batch@0.6.1: resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== -before-after-hook@^2.2.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" - integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== - big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== -bignumber.js@^9.0.0: - version "9.1.1" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" - integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== - -bin-links@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-3.0.3.tgz#3842711ef3db2cd9f16a5f404a996a12db355a6e" - integrity sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA== - dependencies: - cmd-shim "^5.0.0" - mkdirp-infer-owner "^2.0.0" - npm-normalize-package-bin "^2.0.0" - read-cmd-shim "^3.0.0" - rimraf "^3.0.0" - write-file-atomic "^4.0.0" - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -binaryextensions@^4.15.0, binaryextensions@^4.16.0: - version "4.18.0" - resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-4.18.0.tgz#22aeada2d14de062c60e8ca59a504a5636a76ceb" - integrity sha512-PQu3Kyv9dM4FnwB7XGj1+HucW+ShvJzJqjuw1JkKVs1mWdwOKVcRjOi+pV9X52A0tNvrPCsPkbFFQb+wE1EAXw== - -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -bintrees@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bintrees/-/bintrees-1.0.2.tgz#49f896d6e858a4a499df85c38fb399b9aff840f8" - integrity sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw== +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== bl@^4.0.3, bl@^4.1.0: version "4.1.0" @@ -5617,20 +4104,6 @@ bowser@^2.11.0: resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== -boxen@^5.0.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" - integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== - dependencies: - ansi-align "^3.0.0" - camelcase "^6.2.0" - chalk "^4.1.0" - cli-boxes "^2.2.1" - string-width "^4.2.2" - type-fest "^0.20.2" - widest-line "^3.1.0" - wrap-ansi "^7.0.0" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -5639,13 +4112,6 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -5653,11 +4119,6 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -browser-or-node@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/browser-or-node/-/browser-or-node-1.3.0.tgz#f2a4e8568f60263050a6714b2cc236bb976647a7" - integrity sha512-0F2z/VSnLbmEeBcUrSuDH5l0HxTXdQQzLjkmBR4cYfvg1zJrKSlmIZFqyFR8oX0NrwPhy3c3HQ6i3OxMbew4Tg== - browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.21.3, browserslist@^4.21.4: version "4.21.4" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" @@ -5689,7 +4150,7 @@ bson@^4.7.0: dependencies: buffer "^5.6.0" -buffer-crc32@^0.2.1, buffer-crc32@^0.2.13, buffer-crc32@~0.2.3: +buffer-crc32@~0.2.3: version "0.2.13" resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== @@ -5704,15 +4165,6 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer@4.9.2: - version "4.9.2" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" - integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - buffer@^5.5.0, buffer@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" @@ -5721,11 +4173,6 @@ buffer@^5.5.0, buffer@^5.6.0: base64-js "^1.3.1" ieee754 "^1.1.13" -builtins@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" - integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== - busboy@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" @@ -5743,85 +4190,6 @@ bytes@3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -cacache@^15.0.3, cacache@^15.0.5, cacache@^15.2.0: - version "15.3.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" - integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== - dependencies: - "@npmcli/fs" "^1.0.0" - "@npmcli/move-file" "^1.0.1" - chownr "^2.0.0" - fs-minipass "^2.0.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^6.0.0" - minipass "^3.1.1" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^1.0.3" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.0.2" - unique-filename "^1.1.1" - -cacache@^16.1.0: - version "16.1.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" - integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== - dependencies: - "@npmcli/fs" "^2.1.0" - "@npmcli/move-file" "^2.0.0" - chownr "^2.0.0" - fs-minipass "^2.1.0" - glob "^8.0.1" - infer-owner "^1.0.4" - lru-cache "^7.7.1" - minipass "^3.1.6" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - mkdirp "^1.0.4" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^9.0.0" - tar "^6.1.11" - unique-filename "^2.0.0" - -cacheable-lookup@^5.0.3: - version "5.0.4" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" - integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== - -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" - -cacheable-request@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" - integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^4.0.0" - lowercase-keys "^2.0.0" - normalize-url "^6.0.1" - responselike "^2.0.0" - call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -5878,14 +4246,6 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001400, caniuse-lite@^1.0.30001426: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz#ec1ec1cfb0a93a34a0600d37903853030520a4e5" integrity sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA== -cardinal@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505" - integrity sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw== - dependencies: - ansicolors "~0.3.2" - redeyed "~2.1.0" - chalk@3.0.0, chalk@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" @@ -5902,17 +4262,6 @@ chalk@4.1.1: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -5922,7 +4271,7 @@ chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -5940,36 +4289,6 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -charenc@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" - integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== - -cheerio-select@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" - integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== - dependencies: - boolbase "^1.0.0" - css-select "^5.1.0" - css-what "^6.1.0" - domelementtype "^2.3.0" - domhandler "^5.0.3" - domutils "^3.0.1" - -cheerio@^1.0.0-rc.10: - version "1.0.0-rc.12" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" - integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== - dependencies: - cheerio-select "^2.1.0" - dom-serializer "^2.0.0" - domhandler "^5.0.3" - domutils "^3.0.1" - htmlparser2 "^8.0.1" - parse5 "^7.0.0" - parse5-htmlparser2-tree-adapter "^7.0.0" - chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.4.2, chokidar@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" @@ -5995,11 +4314,6 @@ chrome-trace-event@^1.0.2: resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - ci-info@^3.2.0: version "3.6.1" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.6.1.tgz#7594f1c95cb7fdfddee7af95a13af7dbc67afdcf" @@ -6043,28 +4357,6 @@ clean-css@^5.2.2: dependencies: source-map "~0.6.0" -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -clean-stack@^3.0.0, clean-stack@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-3.0.1.tgz#155bf0b2221bf5f4fba89528d24c5953f17fe3a8" - integrity sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg== - dependencies: - escape-string-regexp "4.0.0" - -cli-boxes@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" - integrity sha512-3Fo5wu8Ytle8q9iCzS4D2MWVL2X7JVWRiS1BnXbTFDhS9c/REkM9vd1AmabsoZoY5/dGi5TT9iKL8Kb6DeBRQg== - -cli-boxes@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" - integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== - cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" @@ -6079,26 +4371,7 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-highlight@^2.1.11: - version "2.1.11" - resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf" - integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== - dependencies: - chalk "^4.0.0" - highlight.js "^10.7.1" - mz "^2.4.0" - parse5 "^5.1.1" - parse5-htmlparser2-tree-adapter "^6.0.0" - yargs "^16.0.0" - -cli-progress@^3.10.0: - version "3.11.2" - resolved "https://registry.yarnpkg.com/cli-progress/-/cli-progress-3.11.2.tgz#f8c89bd157e74f3f2c43bcfb3505670b4d48fc77" - integrity sha512-lCPoS6ncgX4+rJu5bS3F/iCz17kZ9MPZ6dpuTtI0KXKABkhyXIdYB3Inby1OpaGti3YlI3EeEkM9AuWpelJrVA== - dependencies: - string-width "^4.2.3" - -cli-spinners@^2.2.0, cli-spinners@^2.5.0: +cli-spinners@^2.5.0: version "2.7.0" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a" integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== @@ -6112,22 +4385,6 @@ cli-table3@0.6.2: optionalDependencies: "@colors/colors" "1.5.0" -cli-table3@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" - integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== - dependencies: - string-width "^4.2.0" - optionalDependencies: - "@colors/colors" "1.5.0" - -cli-table@^0.3.1: - version "0.3.11" - resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.11.tgz#ac69cdecbe81dccdba4889b9a18b7da312a9d3ee" - integrity sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ== - dependencies: - colors "1.0.3" - cli-width@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" @@ -6138,15 +4395,6 @@ cli-width@^3.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - cliui@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" @@ -6156,11 +4404,6 @@ cliui@^8.0.1: strip-ansi "^6.0.1" wrap-ansi "^7.0.0" -clone-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" - integrity sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g== - clone-deep@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" @@ -6170,59 +4413,26 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" -clone-response@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" - integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== - dependencies: - mimic-response "^1.0.0" - -clone-stats@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" - integrity sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag== - clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== -clone@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== - -cloneable-readable@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.3.tgz#120a00cb053bfb63a222e709f9683ea2e11d8cec" - integrity sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ== - dependencies: - inherits "^2.0.1" - process-nextick-args "^2.0.0" - readable-stream "^2.3.5" - clsx@^1.1.1: version "1.2.1" resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== -cmd-shim@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-5.0.0.tgz#8d0aaa1a6b0708630694c4dbde070ed94c707724" - integrity sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw== - dependencies: - mkdirp-infer-owner "^2.0.0" +cluster-key-slot@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" + integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== - collect-v8-coverage@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" @@ -6260,7 +4470,7 @@ color-string@^1.6.0: color-name "^1.0.0" simple-swizzle "^0.2.2" -color-support@^1.1.2, color-support@^1.1.3: +color-support@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== @@ -6283,11 +4493,6 @@ colorette@^2.0.10, colorette@^2.0.14: resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== -colors@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" - integrity sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw== - colorspace@1.1.x: version "1.1.4" resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243" @@ -6308,11 +4513,6 @@ commander@4.1.1, commander@^4.0.1: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== -commander@7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.1.0.tgz#f2eaecf131f10e36e07d894698226e36ae0eb5ff" - integrity sha512-pRxBna3MJe6HKnBGsDyMv8ETbptw3axEdYHoqNh7gu5oDcew8fs0xnivZGm06Ogk8zGAJ9VX+OPEr2GXEQK4dg== - commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -6328,11 +4528,6 @@ commander@^8.3.0: resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== -common-ancestor-path@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" - integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== - common-path-prefix@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" @@ -6348,21 +4543,6 @@ 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== -component-type@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-type/-/component-type-1.2.1.tgz#8a47901700238e4fc32269771230226f24b415a9" - integrity sha512-Kgy+2+Uwr75vAi6ChWXgHuLvd+QLD7ssgpaRq2zCvt80ptvAfMc/hijcJxXkBa2wMlEZcJvC2H8Ubo+A9ATHIg== - -compress-commons@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.1.1.tgz#df2a09a7ed17447642bad10a85cc9a19e5c42a7d" - integrity sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ== - dependencies: - buffer-crc32 "^0.2.13" - crc32-stream "^4.0.2" - normalize-path "^3.0.0" - readable-stream "^3.6.0" - compressible@~2.0.16: version "2.0.18" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" @@ -6398,33 +4578,6 @@ concat-stream@^1.5.2: readable-stream "^2.2.2" typedarray "^0.0.6" -concurrently@^7.6.0: - version "7.6.0" - resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-7.6.0.tgz#531a6f5f30cf616f355a4afb8f8fcb2bba65a49a" - integrity sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw== - dependencies: - chalk "^4.1.0" - date-fns "^2.29.1" - lodash "^4.17.21" - rxjs "^7.0.0" - shell-quote "^1.7.3" - spawn-command "^0.0.2-1" - supports-color "^8.1.0" - tree-kill "^1.2.2" - yargs "^17.3.1" - -configstore@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" - integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== - dependencies: - dot-prop "^5.2.0" - graceful-fs "^4.1.2" - make-dir "^3.0.0" - unique-string "^2.0.0" - write-file-atomic "^3.0.0" - xdg-basedir "^4.0.0" - connect-history-api-fallback@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" @@ -6447,7 +4600,7 @@ content-disposition@0.5.4: dependencies: safe-buffer "5.2.1" -content-type@^1.0.4, content-type@~1.0.4: +content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== @@ -6490,7 +4643,7 @@ cookie@^0.4.1, cookie@^0.4.2, cookie@~0.4.1: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== -cookiejar@^2.1.2, cookiejar@^2.1.3: +cookiejar@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.3.tgz#fc7a6216e408e74414b90230050842dacda75acc" integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ== @@ -6543,19 +4696,6 @@ cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: path-type "^4.0.0" yaml "^1.10.0" -crc-32@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" - integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== - -crc32-stream@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-4.0.2.tgz#c922ad22b38395abe9d3870f02fa8134ed709007" - integrity sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w== - dependencies: - crc-32 "^1.2.0" - readable-stream "^3.4.0" - create-require@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" @@ -6593,16 +4733,6 @@ css-color-keywords@^1.0.0: resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" integrity sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg== -crypt@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== - -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - css-declaration-sorter@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz#be5e1d71b7a992433fb1c542c7a1b835e45682ec" @@ -6645,17 +4775,6 @@ css-select@^4.1.3: domutils "^2.8.0" nth-check "^2.0.1" -css-select@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" - integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== - dependencies: - boolbase "^1.0.0" - css-what "^6.1.0" - domhandler "^5.0.2" - domutils "^3.0.1" - nth-check "^2.0.1" - css-to-react-native@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.0.0.tgz#62dbe678072a824a689bcfee011fc96e02a7d756" @@ -6673,7 +4792,7 @@ css-tree@^1.1.2, css-tree@^1.1.3: mdn-data "2.0.14" source-map "^0.6.1" -css-what@^6.0.1, css-what@^6.1.0: +css-what@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== @@ -6766,21 +4885,6 @@ csstype@^3.0.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== -csv-parse@^4.16.3: - version "4.16.3" - resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-4.16.3.tgz#7ca624d517212ebc520a36873c3478fa66efbaf7" - integrity sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg== - -dargs@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" - integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== - -data-uri-to-buffer@3: - version "3.0.1" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" - integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== - data-urls@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" @@ -6790,24 +4894,6 @@ data-urls@^3.0.2: whatwg-mimetype "^3.0.0" whatwg-url "^11.0.0" -datadog-metrics@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/datadog-metrics/-/datadog-metrics-0.9.3.tgz#e62d92b9619129805802d82111c8bcc4439fc859" - integrity sha512-BVsBX2t+4yA3tHs7DnB5H01cHVNiGJ/bHA8y6JppJDyXG7s2DLm6JaozPGpgsgVGd42Is1CHRG/yMDQpt877Xg== - dependencies: - debug "3.1.0" - dogapi "2.8.4" - -date-fns@^2.29.1: - version "2.29.3" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.3.tgz#27402d2fc67eb442b511b70bbdf98e6411cd68a8" - integrity sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA== - -dateformat@^4.5.0: - version "4.6.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-4.6.3.tgz#556fa6497e5217fedb78821424f8a1c22fa3f4b5" - integrity sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA== - debug@2.6.9, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -6815,14 +4901,7 @@ debug@2.6.9, debug@^2.6.9: dependencies: ms "2.0.0" -debug@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@4, debug@4.x, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: +debug@4, debug@4.x, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -6836,30 +4915,11 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debuglog@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" - integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== - decimal.js@^10.4.2: version "10.4.2" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.2.tgz#0341651d1d997d86065a2ce3a441fbd0d8e8b98e" integrity sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA== -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== - dependencies: - mimic-response "^1.0.0" - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" @@ -6886,18 +4946,6 @@ deep-equal@^2.0.5: which-collection "^1.0.1" which-typed-array "^1.1.8" -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-for-each@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/deep-for-each/-/deep-for-each-3.0.0.tgz#0f5d463cb93755c41fccff42145874e9e077fd61" - integrity sha512-pPN+0f8jlnNP+z90qqOdxGghJU5XM6oBDhvAR+qdQzjCg5pk/7VPPvKK1GqoXEFkHza6ZS+Otzzvmr0g3VUaKw== - dependencies: - lodash.isplainobject "^4.0.6" - deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" @@ -6922,16 +4970,6 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== - -defer-to-connect@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - define-lazy-prop@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" @@ -6950,16 +4988,6 @@ defined@^1.0.0: resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.1.tgz#c0b9db27bfaffd95d6f61399419b893df0f91ebf" integrity sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q== -degenerator@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-3.0.2.tgz#6a61fcc42a702d6e50ff6023fe17bff435f68235" - integrity sha512-c0mef3SNQo56t6urUU6tdQAs+ThoD0o9B9MJ8HEt7NQcGEILCRFqQb7ZbP9JAv+QF1Ky5plydhMR/IrqWDm+TQ== - dependencies: - ast-types "^0.13.2" - escodegen "^1.8.1" - esprima "^4.0.0" - vm2 "^3.9.8" - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -6970,7 +4998,7 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== -denque@^2.1.0: +denque@^2.0.1, denque@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== @@ -6980,16 +5008,11 @@ depd@2.0.0, depd@~2.0.0: resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -depd@^1.1.2, depd@~1.1.2: +depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== -deprecation@^2.0.0, deprecation@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" - integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== - destroy@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" @@ -7027,14 +5050,6 @@ dezalgo@1.0.3: asap "^2.0.0" wrappy "1" -dezalgo@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.4.tgz#751235260469084c132157dfa857f386d4c33d81" - integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== - dependencies: - asap "^2.0.0" - wrappy "1" - didyoumean@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" @@ -7050,11 +5065,6 @@ diff@^4.0.1: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== -diff@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" - integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== - dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -7093,17 +5103,6 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dogapi@2.8.4, dogapi@^2.8.4: - version "2.8.4" - resolved "https://registry.yarnpkg.com/dogapi/-/dogapi-2.8.4.tgz#ada64f20c6acdea206b9fd9e70df0c96241b6621" - integrity sha512-065fsvu5dB0o4+ENtLjZILvXMClDNH/yA9H6L8nsdcNiz9l0Hzpn7aQaCOPYXxqyzq4CRPOdwkFXUjDOXfRGbg== - dependencies: - extend "^3.0.2" - json-bigint "^1.0.0" - lodash "^4.17.21" - minimist "^1.2.5" - rc "^1.2.8" - dom-accessibility-api@^0.5.6, dom-accessibility-api@^0.5.9: version "0.5.14" resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.14.tgz#56082f71b1dc7aac69d83c4285eef39c15d93f56" @@ -7134,16 +5133,7 @@ dom-serializer@^1.0.1: domhandler "^4.2.0" entities "^2.0.0" -dom-serializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" - integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.2" - entities "^4.2.0" - -domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: +domelementtype@^2.0.1, domelementtype@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== @@ -7162,13 +5152,6 @@ domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: dependencies: domelementtype "^2.2.0" -domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" - integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== - dependencies: - domelementtype "^2.3.0" - domutils@^2.5.2, domutils@^2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" @@ -7178,15 +5161,6 @@ domutils@^2.5.2, domutils@^2.8.0: domelementtype "^2.2.0" domhandler "^4.2.0" -domutils@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c" - integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== - dependencies: - dom-serializer "^2.0.0" - domelementtype "^2.3.0" - domhandler "^5.0.1" - dot-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" @@ -7195,13 +5169,6 @@ dot-case@^3.0.4: no-case "^3.0.4" tslib "^2.0.3" -dot-prop@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - dotenv-expand@8.0.3: version "8.0.3" resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-8.0.3.tgz#29016757455bcc748469c83a19b36aaf2b83dd6e" @@ -7212,23 +5179,11 @@ dotenv@16.0.1: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.1.tgz#8f8f9d94876c35dac989876a5d3a82a267fdce1d" integrity sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ== -dotenv@^16.0.1, dotenv@^16.0.3: +dotenv@^16.0.3: version "16.0.3" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== -driftless@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/driftless/-/driftless-2.0.3.tgz#4378cade7aa8e39dee33faa94413bdc67850d90b" - integrity sha512-hSDKsQphnL4O0XLAiyWQ8EiM9suXH0Qd4gMtwF86b5wygGV8r95w0JcA38FOmx9N3LjFCIHLG2winLPNken4Tg== - dependencies: - present "^0.0.3" - -duplexer3@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" - integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== - duplexer@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" @@ -7246,13 +5201,6 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -ejs@^3.1.6, ejs@^3.1.8: - version "3.1.8" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.8.tgz#758d32910c78047585c7ef1f92f9ee041c1c190b" - integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ== - dependencies: - jake "^10.8.5" - electron-to-chromium@^1.4.251: version "1.4.284" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" @@ -7288,13 +5236,6 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -encoding@^0.1.12, encoding@^0.1.13: - version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - 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" @@ -7347,26 +5288,16 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== -entities@^4.2.0, entities@^4.3.0, entities@^4.4.0: +entities@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - envinfo@^7.7.3: version "7.8.1" resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== - error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -7381,11 +5312,6 @@ error-stack-parser@^2.0.6: dependencies: stackframe "^1.3.4" -error@^10.4.0: - version "10.4.0" - resolved "https://registry.yarnpkg.com/error/-/error-10.4.0.tgz#6fcf0fd64bceb1e750f8ed9a3dd880f00e46a487" - integrity sha512-YxIFEJuhgcICugOUvRx5th0UM+ActZ9sjY0QJmeVwsQdvosZ7kYzc9QqS0Da3R5iUmgU5meGIxh0xBeZpMVeLw== - es-abstract@^1.19.0, es-abstract@^1.20.4: version "1.20.4" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.4.tgz#1d103f9f8d78d4cf0713edcd6d0ed1a46eed5861" @@ -7456,22 +5382,12 @@ escalade@^3.1.1: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== -escape-goat@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" - integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== - escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== -escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== @@ -7481,17 +5397,10 @@ escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escodegen@^1.8.1: - version "1.14.3" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" - integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== - dependencies: - esprima "^4.0.1" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== escodegen@^2.0.0: version "2.0.0" @@ -7788,12 +5697,7 @@ espree@^9.3.3, espree@^9.4.0: acorn-jsx "^5.3.2" eslint-visitor-keys "^3.3.0" -esprima@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.2.2.tgz#76a0fd66fcfe154fd292667dc264019750b1657b" - integrity sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A== - -esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: +esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -7812,7 +5716,7 @@ esrecurse@^4.1.0, esrecurse@^4.3.0: dependencies: estraverse "^5.2.0" -estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.1.1: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== @@ -7832,11 +5736,6 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== -eventemitter3@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.1.1.tgz#47786bdaa087caf7b1b75e73abc5c7d540158cd0" - integrity sha512-idmH3G0vJjQv2a5N74b+oXcOUKYBqSGJGN1eVV6ELGdUnesAO8RZsU74eaS3VfldRet8N9pFupxppBUKztrBdQ== - eventemitter3@^3.1.0: version "3.1.2" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" @@ -7847,11 +5746,6 @@ eventemitter3@^4.0.0, eventemitter3@^4.0.4: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -events@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" - integrity sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw== - events@^3.2.0, events@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" @@ -7872,7 +5766,7 @@ execa@^4.0.2: signal-exit "^3.0.2" strip-final-newline "^2.0.0" -execa@^5.0.0, execa@^5.1.1: +execa@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== @@ -7945,16 +5839,6 @@ express@4.18.2, express@^4.17.3: 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== - -extend@~2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-2.0.2.tgz#1b74985400171b85554894459c978de6ef453ab7" - integrity sha512-AgFD4VU+lVLP6vjnlNfF7OeInLTyeyckCNPEsuxz1vi786UuK/nk6ynPuhn/h+Ju9++TQyr5EpLRI14fc1QtTQ== - external-editor@^3.0.3: version "3.1.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" @@ -7995,14 +5879,7 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== -fast-levenshtein@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz#37b899ae47e1090e40e3fd2318e4d5f0142ca912" - integrity sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ== - dependencies: - fastest-levenshtein "^1.0.7" - -fast-safe-stringify@2.1.1, fast-safe-stringify@^2.0.7, fast-safe-stringify@^2.1.1: +fast-safe-stringify@2.1.1, fast-safe-stringify@^2.1.1: version "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== @@ -8014,7 +5891,7 @@ fast-xml-parser@4.0.11: dependencies: strnum "^1.0.5" -fastest-levenshtein@^1.0.12, fastest-levenshtein@^1.0.7: +fastest-levenshtein@^1.0.12: version "1.0.16" resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== @@ -8080,23 +5957,6 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -file-uri-to-path@2: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz#7b415aeba227d575851e0a5b0c640d7656403fba" - integrity sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg== - -filelist@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" - integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== - dependencies: - minimatch "^5.0.1" - fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -8104,16 +5964,6 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -filtrex@^0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/filtrex/-/filtrex-0.5.4.tgz#98075d518f068c4f58b7b589a227d98bd9f6395d" - integrity sha512-2phGAjWOYRf96Al6s+w/hMjObP1cRyQ95hoZApjeFO75DXN4Flh9uuUAtL3LI4fkryLa2QWdA8MArvt0GMU0pA== - -filtrex@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/filtrex/-/filtrex-2.2.3.tgz#299dff339ac957558e3f56fa46e9a850b362d64b" - integrity sha512-TL12R6SckvJdZLibXqyp4D//wXZNyCalVYGqaWwQk9zucq9dRxmrJV4oyuRq4PHFHCeV5ZdzncIc/Ybqv1Lr6Q== - finalhandler@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" @@ -8152,33 +6002,11 @@ find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" -find-yarn-workspace-root2@1.2.16: - version "1.2.16" - resolved "https://registry.yarnpkg.com/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz#60287009dd2f324f59646bdb4b7610a6b301c2a9" - integrity sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA== - dependencies: - micromatch "^4.0.2" - pkg-dir "^4.2.0" - -find-yarn-workspace-root@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz#f47fb8d239c900eb78179aa81b66673eac88f7bd" - integrity sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ== - dependencies: - micromatch "^4.0.2" - finity@^0.5.4: version "0.5.4" resolved "https://registry.yarnpkg.com/finity/-/finity-0.5.4.tgz#f2a8a9198e8286467328ec32c8bfcc19a2229c11" integrity sha512-3l+5/1tuw616Lgb0QBimxfdd2TqaDGpfCBpfX6EqtFmqUV3FtQnVEX4Aa62DagYEqnsTIjZcTfbq9msDbXYgyA== -first-chunk-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz#1bdecdb8e083c0664b91945581577a43a9f31d70" - integrity sha512-X8Z+b/0L4lToKYq+lwnKqi9X/Zek0NibLpsJgVsSxpoYq7JtiCtRb5HqKVEjEw/qAb/4AKKRLOwwKHlWNpm2Eg== - dependencies: - readable-stream "^2.0.2" - flat-cache@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" @@ -8211,7 +6039,7 @@ fn.name@1.x.x: resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== -follow-redirects@^1.0.0, follow-redirects@^1.14.0, follow-redirects@^1.14.4, follow-redirects@^1.15.0: +follow-redirects@^1.0.0, follow-redirects@^1.14.0, follow-redirects@^1.15.0: version "1.15.2" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== @@ -8250,15 +6078,6 @@ form-data@^2.5.0: combined-stream "^1.0.6" mime-types "^2.1.12" -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - form-data@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" @@ -8268,11 +6087,6 @@ form-data@^4.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" -formidable@^1.2.2: - version "1.2.6" - resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.6.tgz#d2a51d60162bbc9b4a055d8457a7c75315d1a168" - integrity sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ== - formidable@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/formidable/-/formidable-2.0.1.tgz#4310bc7965d185536f9565184dee74fbb75557ff" @@ -8303,7 +6117,7 @@ fs-constants@^1.0.0: resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@10.1.0, fs-extra@^10.0.0, fs-extra@^10.1.0: +fs-extra@10.1.0, fs-extra@^10.0.0: version "10.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== @@ -8312,26 +6126,7 @@ fs-extra@10.1.0, fs-extra@^10.0.0, fs-extra@^10.1.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^8.1, fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^9.0.1, fs-extra@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^2.0.0, fs-minipass@^2.1.0: +fs-minipass@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== @@ -8358,14 +6153,6 @@ fsevents@^2.3.2, fsevents@~2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== -ftp@^0.3.10: - version "0.3.10" - resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d" - integrity sha512-faFVML1aBx2UoDStmLwv2Wptt4vw5x03xxX172nhA5Y5HBshW5JweqQ2W4xL4dezQTG8inJsuYcpPHHU3X5OTQ== - dependencies: - readable-stream "1.1.x" - xregexp "2.0.0" - function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -8406,20 +6193,6 @@ gauge@^3.0.0: strip-ansi "^6.0.1" wide-align "^1.1.2" -gauge@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" - integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.3" - console-control-strings "^1.1.0" - has-unicode "^2.0.1" - signal-exit "^3.0.7" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.5" - 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" @@ -8449,19 +6222,7 @@ get-port@^5.1.1: resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - integrity sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw== - -get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.0.0, get-stream@^5.1.0: +get-stream@^5.0.0: version "5.2.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== @@ -8481,30 +6242,6 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" -get-uri@3: - version "3.0.2" - resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-3.0.2.tgz#f0ef1356faabc70e1f9404fa3b66b2ba9bfc725c" - integrity sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg== - dependencies: - "@tootallnate/once" "1" - data-uri-to-buffer "3" - debug "4" - file-uri-to-path "2" - fs-extra "^8.1.0" - ftp "^0.3.10" - -github-slugger@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.5.0.tgz#17891bbc73232051474d68bd867a34625c955f7d" - integrity sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw== - -github-username@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/github-username/-/github-username-6.0.0.tgz#d543eced7295102996cd8e4e19050ebdcbe60658" - integrity sha512-7TTrRjxblSI5l6adk9zd+cV5d6i1OrJSo3Vr9xdGqFLBQo0mz5P9eIfKCDJ7eekVGGFLbce0qbPSnktXV2BjDQ== - dependencies: - "@octokit/rest" "^18.0.6" - glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -8524,7 +6261,7 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^7.0.0, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0: +glob@^7.0.0, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -8536,24 +6273,6 @@ glob@^7.0.0, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^8.0.1: - version "8.0.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" - integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -global-dirs@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.1.tgz#0c488971f066baceda21447aecb1a8b911d22485" - integrity sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA== - dependencies: - ini "2.0.0" - globals@^11.1.0, globals@^11.7.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" @@ -8566,7 +6285,7 @@ globals@^13.15.0: dependencies: type-fest "^0.20.2" -globby@^11.0.1, globby@^11.1.0: +globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -8578,11 +6297,6 @@ globby@^11.0.1, globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -google-protobuf@3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.6.1.tgz#7ef58e2bea137a93cdaf5cfd5afa5f6abdd92025" - integrity sha512-SJYemeX5GjDLPnadcmCNQePQHCS4Hl5fOcI/JawqDIYFhCmrtYAjcx/oTQx/Wi8UuCuZQhfvftbmPePPAYHFtA== - gopd@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" @@ -8590,41 +6304,7 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" -got@^11, got@^11.8.5: - version "11.8.5" - resolved "https://registry.yarnpkg.com/got/-/got-11.8.5.tgz#ce77d045136de56e8f024bebb82ea349bc730046" - integrity sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ== - dependencies: - "@sindresorhus/is" "^4.0.0" - "@szmarczak/http-timer" "^4.0.5" - "@types/cacheable-request" "^6.0.1" - "@types/responselike" "^1.0.0" - cacheable-lookup "^5.0.3" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - http2-wrapper "^1.0.0-beta.5.2" - lowercase-keys "^2.0.0" - p-cancelable "^2.0.0" - responselike "^2.0.0" - -got@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" - -graceful-fs@^4.1.2, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== @@ -8651,11 +6331,6 @@ graphql-ws@5.5.5: resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.6.0.tgz#c2dcffa4649db149f6282af726c8c83f1c7c5fdb" integrity sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw== -grouped-queue@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/grouped-queue/-/grouped-queue-2.0.0.tgz#a2c6713f2171e45db2c300a3a9d7c119d694dac8" - integrity sha512-/PiFUa7WIsl48dUeCvhIHnwNmAAzlI/eHoJl0vu3nsFA366JleY7Ff8EVTplZu5kO0MIdZjKTTnzItL61ahbnw== - gzip-size@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" @@ -8668,13 +6343,6 @@ handle-thing@^2.0.0: resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== - dependencies: - ansi-regex "^2.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" @@ -8714,11 +6382,6 @@ has-unicode@^2.0.1: resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== -has-yarn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" - integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== - has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -8736,11 +6399,6 @@ headers-polyfill@^3.1.0: resolved "https://registry.yarnpkg.com/headers-polyfill/-/headers-polyfill-3.1.2.tgz#9a4dcb545c5b95d9569592ef7ec0708aab763fbe" integrity sha512-tWCK4biJ6hcLqTviLXVR9DTRfYGQMXEIUj3gwJ2rZ5wO/at3XtkI4g8mCvFdUF9l1KMBNCfmNAdnahm1cgavQA== -hex2dec@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hex2dec/-/hex2dec-1.0.1.tgz#949bb33f1fdbbeab20e06403a00fc7d5ff284207" - integrity sha512-F9QO0+ZI8r1VZudxw21bD/U5pb2Y9LZY3TsnVqCPaijvw5mIhH5jsH29acLPijl5fECfD8FetJtgX8GN5YPM9Q== - hexoid@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/hexoid/-/hexoid-1.0.0.tgz#ad10c6573fb907de23d9ec63a711267d9dc9bc18" @@ -8753,30 +6411,6 @@ hoist-non-react-statics@^3.0.0: dependencies: react-is "^16.7.0" -highlight.js@^10.7.1: - version "10.7.3" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" - integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -hosted-git-info@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" - integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== - dependencies: - lru-cache "^6.0.0" - -hot-shots@^6.0.1: - version "6.8.7" - resolved "https://registry.yarnpkg.com/hot-shots/-/hot-shots-6.8.7.tgz#9a19502e0b87e3550a257d31760f1fa71155a770" - integrity sha512-XH8iezBSZgVw2jegu96pUfF1Zv0VZ/iXjb7L5yE3F7mn7/bdhf4qeniXjO0wQWeefe433rhOsazNKLxM+XMI9w== - optionalDependencies: - unix-dgram "2.0.x" - hpack.js@^2.1.6: version "2.1.6" resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" @@ -8787,11 +6421,6 @@ hpack.js@^2.1.6: readable-stream "^2.0.1" wbuf "^1.1.0" -hpagent@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/hpagent/-/hpagent-0.1.2.tgz#cab39c66d4df2d4377dbd212295d878deb9bdaa9" - integrity sha512-ePqFXHtSQWAFXYmj+JtOTHr84iNrII4/QRlAAPPE+zqnKy4xJo7Ie1Y4kC7AdB+LxLxSTTzBMASsEcy0q8YyvQ== - html-encoding-sniffer@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" @@ -8843,33 +6472,6 @@ htmlparser2@^6.1.0: domutils "^2.5.2" entities "^2.0.0" -htmlparser2@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.1.tgz#abaa985474fcefe269bc761a779b544d7196d010" - integrity sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.2" - domutils "^3.0.1" - entities "^4.3.0" - -http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - -http-call@^5.2.2: - version "5.3.0" - resolved "https://registry.yarnpkg.com/http-call/-/http-call-5.3.0.tgz#4ded815b13f423de176eb0942d69c43b25b148db" - integrity sha512-ahwimsC23ICE4kPl9xTBjKB4inbRaeLyZeRunC/1Jy/Z6X8tv22MEAjK+KBOMSVLaqXPTTmd8638waVIKLGx2w== - dependencies: - content-type "^1.0.4" - debug "^4.1.1" - is-retry-allowed "^1.1.0" - is-stream "^2.0.0" - parse-json "^4.0.0" - tunnel-agent "^0.6.0" - http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" @@ -8901,15 +6503,6 @@ http-parser-js@>=0.5.1: resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== -http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - 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" @@ -8939,15 +6532,7 @@ http-proxy@^1.18.1: follow-redirects "^1.0.0" requires-port "^1.0.0" -http2-wrapper@^1.0.0-beta.5.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" - integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.0.0" - -https-proxy-agent@5, https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: +https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: 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== @@ -8955,14 +6540,6 @@ https-proxy-agent@5, https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: agent-base "6" debug "4" -https-proxy-agent@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" - integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== - dependencies: - agent-base "6" - debug "4" - human-signals@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" @@ -8973,18 +6550,6 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== - dependencies: - ms "^2.0.0" - -hyperlinker@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hyperlinker/-/hyperlinker-1.0.0.tgz#23dc9e38a206b208ee49bc2d6c8ef47027df0c0e" - integrity sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ== - iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -8992,7 +6557,7 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@0.6.3, iconv-lite@^0.6.2: +iconv-lite@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== @@ -9004,23 +6569,11 @@ icss-utils@^5.0.0, icss-utils@^5.1.0: resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== -ieee754@1.1.13: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== - -ieee754@^1.1.13, ieee754@^1.1.4: +ieee754@^1.1.13: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore-walk@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-4.0.1.tgz#fc840e8346cf88a3a9380c5b17933cd8f4d39fa3" - integrity sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw== - dependencies: - minimatch "^3.0.4" - ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" @@ -9044,11 +6597,6 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A== - import-local@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" @@ -9067,11 +6615,6 @@ indent-string@^4.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -9080,7 +6623,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -9090,16 +6633,6 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== -ini@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" - integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== - -ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - inquirer@7.3.3: version "7.3.3" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" @@ -9159,7 +6692,7 @@ inquirer@^6.2.2: strip-ansi "^5.1.0" through "^2.3.6" -inquirer@^8.0.0, inquirer@^8.2.0: +inquirer@^8.2.0: version "8.2.5" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.5.tgz#d8654a7542c35a9b9e069d27e2df4858784d54f8" integrity sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ== @@ -9199,10 +6732,20 @@ interpret@^2.2.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== -ip@^1.1.5, ip@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48" - integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== +ioredis@^5.2.4: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.2.4.tgz#9e262a668bc29bae98f2054c1e0d7efd86996b96" + integrity sha512-qIpuAEt32lZJQ0XyrloCRdlEdUUNGG9i0UOk6zgzK6igyudNWqEBxfH6OlbnOOoBBvr1WB02mm8fR55CnikRng== + dependencies: + "@ioredis/commands" "^1.1.1" + cluster-key-slot "^1.1.0" + debug "^4.3.4" + denque "^2.0.1" + lodash.defaults "^4.2.0" + lodash.isarguments "^3.1.0" + redis-errors "^1.2.0" + redis-parser "^3.0.0" + standard-as-callback "^2.1.0" ip@^2.0.0: version "2.0.0" @@ -9259,24 +6802,12 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-buffer@~1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-core-module@^2.5.0, is-core-module@^2.8.1, is-core-module@^2.9.0: +is-core-module@^2.8.1, is-core-module@^2.9.0: version "2.11.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== @@ -9300,13 +6831,6 @@ is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== - dependencies: - number-is-nan "^1.0.0" - is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" @@ -9336,24 +6860,11 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" -is-installed-globally@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" - integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== - dependencies: - global-dirs "^3.0.0" - is-path-inside "^3.0.2" - is-interactive@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" - integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== - is-map@^2.0.1, is-map@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" @@ -9369,11 +6880,6 @@ is-node-process@^1.0.1: resolved "https://registry.yarnpkg.com/is-node-process/-/is-node-process-1.0.1.tgz#4fc7ac3a91e8aac58175fe0578abbc56f2831b23" integrity sha512-5IcdXuf++TTNt3oGl9EBdkvndXA8gmc4bz/Y+mdEpWh3Mcn/+kOw6hI7LD5CocqJWMzeb0I0ClndRVNdEPuJXQ== -is-npm@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" - integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== - is-number-object@^1.0.4: version "1.0.7" resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" @@ -9386,21 +6892,11 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-path-inside@^3.0.2, is-path-inside@^3.0.3: +is-path-inside@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -is-plain-obj@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== - is-plain-obj@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" @@ -9413,11 +6909,6 @@ is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - is-potential-custom-element-name@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" @@ -9431,23 +6922,6 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-retry-allowed@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" - integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== - -is-retry-allowed@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz#88f34cbd236e043e71b6932d09b0c65fb7b4d71d" - integrity sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg== - -is-scoped@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-scoped/-/is-scoped-2.1.0.tgz#fef0713772658bdf5bee418608267ddae6d3566d" - integrity sha512-Cv4OpPTHAK9kHYzkzCrof3VJh7H/PrG2MBUMvvJebaaUMbqhm0YAtXnvh0I3Hnj2tMZWwrRROWLSgfJrKqWmlQ== - dependencies: - scoped-regex "^2.0.0" - is-set@^2.0.1, is-set@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" @@ -9495,21 +6969,11 @@ is-typed-array@^1.1.10, is-typed-array@^1.1.3: gopd "^1.0.1" has-tostringtag "^1.0.0" -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - is-unicode-supported@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -is-utf8@^0.2.0, is-utf8@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== - is-weakmap@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" @@ -9535,37 +6999,22 @@ is-what@^4.1.6: resolved "https://registry.yarnpkg.com/is-what/-/is-what-4.1.7.tgz#c41dc1d2d2d6a9285c624c2505f61849c8b1f9cc" integrity sha512-DBVOQNiPKnGMxRMLIYSwERAS5MVY1B7xYiGnpgctsOFvVDz9f9PFXXxMcTOHuoqYp4NK9qFYQaIC1NRRxLMpBQ== -is-wsl@^2.1.1, is-wsl@^2.2.0: +is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== dependencies: is-docker "^2.0.0" -is-yarn-global@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" - integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - -isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - isarray@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== -isbinaryfile@^4.0.10, isbinaryfile@^4.0.8: - version "4.0.10" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3" - integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw== +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isexe@^2.0.0: version "2.0.0" @@ -9577,11 +7026,6 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -isomorphic-ws@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" - integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== - istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" @@ -9634,16 +7078,6 @@ iterare@1.2.1: resolved "https://registry.yarnpkg.com/iterare/-/iterare-1.2.1.tgz#139c400ff7363690e33abffa33cbba8920f00042" integrity sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q== -jake@^10.8.5: - version "10.8.5" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46" - integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw== - dependencies: - async "^3.2.3" - chalk "^4.0.2" - filelist "^1.0.1" - minimatch "^3.0.4" - jest-changed-files@^29.2.0: version "29.2.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.2.0.tgz#b6598daa9803ea6a4dce7968e20ab380ddbee289" @@ -10050,27 +7484,6 @@ jest@^29.3.1: import-local "^3.0.2" jest-cli "^29.3.1" -jmespath@0.16.0, jmespath@^0.16.0: - version "0.16.0" - resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.16.0.tgz#b15b0a85dfd4d930d43e69ed605943c802785076" - integrity sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw== - -joi@^17.6.0: - version "17.7.0" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.7.0.tgz#591a33b1fe1aca2bc27f290bcad9b9c1c570a6b3" - integrity sha512-1/ugc8djfn93rTE3WRKdCzGGt/EtiYKxITMO4Wiv6q5JL1gl9ePt4kBsl1S499nbosspfctIQTpYIhSmHA3WAg== - dependencies: - "@hapi/hoek" "^9.0.0" - "@hapi/topo" "^5.0.0" - "@sideway/address" "^4.1.3" - "@sideway/formula" "^3.0.0" - "@sideway/pinpoint" "^2.0.0" - -join-component@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/join-component/-/join-component-1.1.0.tgz#b8417b750661a392bee2c2537c68b2a9d4977cd5" - integrity sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ== - js-levenshtein@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" @@ -10086,7 +7499,7 @@ js-sdsl@^4.1.4: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.14.1: +js-yaml@^3.13.0, js-yaml@^3.13.1: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -10143,28 +7556,6 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== -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-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - 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" @@ -10185,11 +7576,6 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json-stringify-nice@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" - integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== - json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -10212,13 +7598,6 @@ jsonc-parser@3.2.0: resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" - jsonfile@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" @@ -10228,20 +7607,6 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonparse@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== - -jsonpath@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/jsonpath/-/jsonpath-1.1.1.tgz#0ca1ed8fb65bb3309248cc9d5466d12d5b0b9901" - integrity sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w== - dependencies: - esprima "1.2.2" - static-eval "2.0.2" - underscore "1.12.1" - jsonwebtoken@8.5.1, jsonwebtoken@^8.2.0: version "8.5.1" resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" @@ -10266,16 +7631,6 @@ jsonwebtoken@8.5.1, jsonwebtoken@^8.2.0: array-includes "^3.1.5" object.assign "^4.1.3" -just-diff-apply@^5.2.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.4.1.tgz#1debed059ad009863b4db0e8d8f333d743cdd83b" - integrity sha512-AAV5Jw7tsniWwih8Ly3fXxEZ06y+6p5TwQMsw0dzZ/wPKilzyDgdAnL0Ug4NNIquPUOh1vfFWEHbmXUqM5+o8g== - -just-diff@^5.0.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-5.1.1.tgz#8da6414342a5ed6d02ccd64f5586cbbed3146202" - integrity sha512-u8HXJ3HlNrTzY7zrYYKjNEfBlyjqhdBkoyTVdjtn7p02RJD5NvR8rIClzeGA7t+UYP1/7eAkWNLU0+P3QrEqKQ== - jwa@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" @@ -10298,20 +7653,6 @@ kareem@2.4.1: resolved "https://registry.yarnpkg.com/kareem/-/kareem-2.4.1.tgz#7d81ec518204a48c1cb16554af126806c3cd82b0" integrity sha512-aJ9opVoXroQUPfovYP5kaj2lM7Jn02Gw13bL0lg9v0V7SaUc0qavPs0Eue7d2DcC3NjqI6QAUElXNsuZSeM+EA== -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== - dependencies: - json-buffer "3.0.0" - -keyv@^4.0.0: - version "4.5.2" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.2.tgz#0e310ce73bf7851ec702f2eaf46ec4e3805cce56" - integrity sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g== - dependencies: - json-buffer "3.0.1" - kind-of@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" @@ -10332,20 +7673,6 @@ kuler@^2.0.0: resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== -latest-version@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" - integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== - dependencies: - package-json "^6.3.0" - -lazystream@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638" - integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== - dependencies: - readable-stream "^2.0.5" - leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -10367,33 +7694,11 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -libhoney@^2.2.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/libhoney/-/libhoney-2.3.3.tgz#e2b06ae6afbb1c4c27bbbafab663ac4528466c65" - integrity sha512-WfujgzJjIxN4ZwRwX7iO1LFvzB9x+M7MGEN+FsPrCjTti+cA3CMYR400ElqRO84/ZwEphjiJrO+yqvVceu4N6Q== - dependencies: - superagent "^6.1.0" - superagent-proxy "^3.0.0" - urljoin "^0.1.5" - libphonenumber-js@^1.9.43: version "1.10.14" resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.10.14.tgz#e29da7f539751f724ac54017a098e3c7ca23de94" integrity sha512-McGS7GV/WjJ2KjfOGhJU1oJn29RYeo7Q+RpANRbUNMQ9gj5XArpbjurSuyYPTejFwbaUojstQ4XyWCrAzGOUXw== -lightstep-tracer@^0.31.0: - version "0.31.2" - resolved "https://registry.yarnpkg.com/lightstep-tracer/-/lightstep-tracer-0.31.2.tgz#be012db51de963adde3fa630ec29bd01053da1e3" - integrity sha512-DRdyUrASPkr+hxyHQJ9ImPSIxpUCpqQvfgHwxoZ42G6iEJ2g0/2chCw39tuz60JUmLfTlVp1LFzLscII6YPRoA== - dependencies: - async "1.5.0" - eventemitter3 "1.1.1" - google-protobuf "3.6.1" - hex2dec "1.0.1" - opentracing "^0.14.4" - source-map-support "0.3.3" - thrift "^0.14.1" - lilconfig@^2.0.3, lilconfig@^2.0.5, lilconfig@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.6.tgz#32a384558bd58af3d4c6e077dd1ad1d397bc69d4" @@ -10404,16 +7709,6 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -load-yaml-file@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/load-yaml-file/-/load-yaml-file-0.2.0.tgz#af854edaf2bea89346c07549122753c07372f64d" - integrity sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw== - dependencies: - graceful-fs "^4.1.5" - js-yaml "^3.13.0" - pify "^4.0.1" - strip-bom "^3.0.0" - loader-runner@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" @@ -10452,21 +7747,16 @@ lodash.defaults@^4.2.0: resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== -lodash.difference@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" - integrity sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA== - -lodash.flatten@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== - 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.isarguments@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== + lodash.isboolean@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" @@ -10512,29 +7802,17 @@ lodash.once@^4.0.0: resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== -lodash.union@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" - integrity sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw== - lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== -lodash@4.17.21, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: +lodash@4.17.21, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" - integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== - dependencies: - chalk "^2.4.2" - -log-symbols@^4.0.0, log-symbols@^4.1.0: +log-symbols@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== @@ -10553,11 +7831,6 @@ logform@^2.3.2, logform@^2.4.0: safe-stable-stringify "^2.3.1" triple-beam "^1.3.0" -long@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" - integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== - loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -10572,23 +7845,6 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -10596,11 +7852,6 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -lru-cache@^7.7.1: - version "7.14.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.14.1.tgz#8da8d2f5f59827edb388e63e459ac23d6d408fea" - integrity sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA== - lru_map@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" @@ -10643,50 +7894,6 @@ make-error@1.x, make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -make-fetch-happen@^10.0.1: - version "10.2.1" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" - integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== - dependencies: - agentkeepalive "^4.2.1" - cacache "^16.1.0" - http-cache-semantics "^4.1.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^7.7.1" - minipass "^3.1.6" - minipass-collect "^1.0.2" - minipass-fetch "^2.0.3" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.3" - promise-retry "^2.0.1" - socks-proxy-agent "^7.0.0" - ssri "^9.0.0" - -make-fetch-happen@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" - integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== - dependencies: - agentkeepalive "^4.1.3" - cacache "^15.2.0" - http-cache-semantics "^4.1.0" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^6.0.0" - minipass "^3.1.3" - minipass-collect "^1.0.2" - minipass-fetch "^1.3.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.2" - promise-retry "^2.0.1" - socks-proxy-agent "^6.0.0" - ssri "^8.0.0" - makeerror@1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" @@ -10699,15 +7906,6 @@ md5-file@^5.0.0: resolved "https://registry.yarnpkg.com/md5-file/-/md5-file-5.0.0.tgz#e519f631feca9c39e7f9ea1780b63c4745012e20" integrity sha512-xbEFXCYVWrSx/gEKS1VPlg84h/4L20znVIulKw6kMfmBUAZNAnF00eczz9ICMl+/hjQGo5KSXRxbL/47X3rmMw== -md5@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" - integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== - dependencies: - charenc "0.0.2" - crypt "0.0.2" - is-buffer "~1.1.6" - mdn-data@2.0.14: version "2.0.14" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" @@ -10718,32 +7916,6 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== -"mem-fs-editor@^8.1.2 || ^9.0.0": - version "9.5.0" - resolved "https://registry.yarnpkg.com/mem-fs-editor/-/mem-fs-editor-9.5.0.tgz#9368724bd37f76eebfcf24d71fc6624b01588969" - integrity sha512-7p+bBDqsSisO20YIZf2ntYvST27fFJINn7CKE21XdPUQDcLV62b/yB5sTOooQeEoiZ3rldZQ+4RfONgL/gbRoA== - dependencies: - binaryextensions "^4.16.0" - commondir "^1.0.1" - deep-extend "^0.6.0" - ejs "^3.1.8" - globby "^11.1.0" - isbinaryfile "^4.0.8" - minimatch "^3.1.2" - multimatch "^5.0.0" - normalize-path "^3.0.0" - textextensions "^5.13.0" - -"mem-fs@^1.2.0 || ^2.0.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/mem-fs/-/mem-fs-2.2.1.tgz#c87bc8a53fb17971b129d4bcd59a9149fb78c5b1" - integrity sha512-yiAivd4xFOH/WXlUi6v/nKopBh1QLzwjFi36NK88cGt/PRXI8WeBASqY+YSjIVWvQTx3hR8zHKDBMV6hWmglNA== - dependencies: - "@types/node" "^15.6.1" - "@types/vinyl" "^2.0.4" - vinyl "^2.0.1" - vinyl-file "^3.0.0" - memfs@^3.4.1, memfs@^3.4.3: version "3.4.12" resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.12.tgz#d00f8ad8dab132dc277c659dc85bfd14b07d03bd" @@ -10789,7 +7961,7 @@ mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": 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.31, mime-types@^2.1.35, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, 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== @@ -10801,7 +7973,7 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@2.6.0, mime@^2.4.6: +mime@2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== @@ -10816,16 +7988,6 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mimic-response@^1.0.0, mimic-response@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - min-indent@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" @@ -10850,76 +8012,11 @@ minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" -minimatch@^5.0.1, minimatch@^5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.1.tgz#6c9dffcf9927ff2a31e74b5af11adf8b9604b022" - integrity sha512-362NP+zlprccbEt/SkxKfRMHnNY85V74mVnpUpNyr3F35covl09Kec7/sEFLt3RA4oXmewtoaanoIf67SE5Y5g== - dependencies: - brace-expansion "^2.0.1" - -minimist@^1.1.0, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: +minimist@^1.2.0, minimist@^1.2.6: version "1.2.7" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-fetch@^1.3.2, minipass-fetch@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" - integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== - dependencies: - minipass "^3.1.0" - minipass-sized "^1.0.3" - minizlib "^2.0.0" - optionalDependencies: - encoding "^0.1.12" - -minipass-fetch@^2.0.3: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add" - integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== - dependencies: - minipass "^3.1.6" - minipass-sized "^1.0.3" - minizlib "^2.1.2" - optionalDependencies: - encoding "^0.1.13" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-json-stream@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" - integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== - dependencies: - jsonparse "^1.3.1" - minipass "^3.0.0" - -minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== - dependencies: - minipass "^3.0.0" - minipass@^3.0.0: version "3.3.4" resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.4.tgz#ca99f95dd77c43c7a76bf51e6d200025eee0ffae" @@ -10927,21 +8024,7 @@ minipass@^3.0.0: dependencies: yallist "^4.0.0" -minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3, minipass@^3.1.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -minipass@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.0.0.tgz#7cebb0f9fa7d56f0c5b17853cbe28838a8dbbd3b" - integrity sha512-g2Uuh2jEKoht+zvO6vJqXmYpflPqzRBT+Th2h01DKh5z7wbY/AZ2gCQ78cP70YoHPyFdY30YBV5WxgLOEwOykw== - dependencies: - yallist "^4.0.0" - -minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: +minizlib@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== @@ -10949,22 +8032,6 @@ minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: minipass "^3.0.0" yallist "^4.0.0" -mixpanel@^0.13.0: - version "0.13.0" - resolved "https://registry.yarnpkg.com/mixpanel/-/mixpanel-0.13.0.tgz#699bf510d9ba013c75edcf979ff1e24085fde9d2" - integrity sha512-YOWmpr/o4+zJ8LPjuLUkWLc2ImFeIkX6hF1t62Wlvq6loC6e8EK8qieYO4gYPTPxxtjAryl7xmIvf/7qnPwjrQ== - dependencies: - https-proxy-agent "5.0.0" - -mkdirp-infer-owner@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" - integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== - dependencies: - chownr "^2.0.0" - infer-owner "^1.0.4" - mkdirp "^1.0.3" - mkdirp@^0.5.1, mkdirp@^0.5.4: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" @@ -10977,11 +8044,6 @@ mkdirp@^1.0.3, mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -moment@^2.29.4: - version "2.29.4" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" - integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== - mongodb-connection-string-url@^2.5.4: version "2.5.4" resolved "https://registry.yarnpkg.com/mongodb-connection-string-url/-/mongodb-connection-string-url-2.5.4.tgz#1ee2496f4c4eae64f63c4b2d512aebc89996160a" @@ -11084,7 +8146,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3, ms@^2.0.0, ms@^2.1.1, ms@^2.1.3: +ms@2.1.3, ms@^2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -11135,17 +8197,6 @@ multicast-dns@^7.2.5: dns-packet "^5.2.2" thunky "^1.0.2" -multimatch@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6" - integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA== - dependencies: - "@types/minimatch" "^3.0.3" - array-differ "^3.0.0" - array-union "^2.1.0" - arrify "^2.0.1" - minimatch "^3.0.4" - mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" @@ -11156,35 +8207,11 @@ mute-stream@0.0.8: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -mz@^2.4.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -nan@^2.16.0: - version "2.17.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb" - integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ== - nanoid@^3.3.4: version "3.3.4" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== -nanotimer@0.3.14: - version "0.3.14" - resolved "https://registry.yarnpkg.com/nanotimer/-/nanotimer-0.3.14.tgz#10d811f8d064788180096ce1f96c70846fd5a2ba" - integrity sha512-NpKXdP6ZLwZcODvDeyfoDBVoncbrgvC12txO3F4l9BxMycQjZD29AnasGAy7uSi3dcsTGnGn6/zzvQRwbjS4uw== - -nanotimer@^0.3.15: - version "0.3.15" - resolved "https://registry.yarnpkg.com/nanotimer/-/nanotimer-0.3.15.tgz#280d277db9146eca6f8a570b572abaf2a9acc754" - integrity sha512-xj8HcwceqeRbfSuwNIzYhdbyZu3zoiHX3y2cyVB/cLn0RzVCI8ZZVQLZELEUMG2tYEsjqbCLb3b4q1lDC7ENnA== - natural-compare-lite@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" @@ -11195,12 +8222,7 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -natural-orderby@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/natural-orderby/-/natural-orderby-2.0.3.tgz#8623bc518ba162f8ff1cdb8941d74deb0fdcc016" - integrity sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q== - -negotiator@0.6.3, negotiator@^0.6.2, negotiator@^0.6.3: +negotiator@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== @@ -11225,11 +8247,6 @@ nest-winston@^1.8.0: dependencies: fast-safe-stringify "^2.1.1" -netmask@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7" - integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== - new-find-package-json@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/new-find-package-json/-/new-find-package-json-2.0.0.tgz#96553638781db35061f351e8ccb4d07126b6407d" @@ -11279,22 +8296,6 @@ node-forge@^1: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== -node-gyp@^8.2.0: - version "8.4.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" - integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^9.1.0" - nopt "^5.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -11312,26 +8313,6 @@ nopt@^5.0.0: dependencies: abbrev "1" -normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" - integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== - dependencies: - hosted-git-info "^4.0.1" - is-core-module "^2.5.0" - semver "^7.3.4" - validate-npm-package-license "^3.0.1" - normalize-path@3.0.0, normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -11342,81 +8323,11 @@ normalize-range@^0.1.2: resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== -normalize-url@^4.1.0: - version "4.5.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" - integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== - normalize-url@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== -npm-bundled@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" - integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== - dependencies: - npm-normalize-package-bin "^1.0.1" - -npm-install-checks@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-4.0.0.tgz#a37facc763a2fde0497ef2c6d0ac7c3fbe00d7b4" - integrity sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w== - dependencies: - semver "^7.1.1" - -npm-normalize-package-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" - integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== - -npm-normalize-package-bin@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz#9447a1adaaf89d8ad0abe24c6c84ad614a675fff" - integrity sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ== - -npm-package-arg@^8.0.1, npm-package-arg@^8.1.2, npm-package-arg@^8.1.5: - version "8.1.5" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.5.tgz#3369b2d5fe8fdc674baa7f1786514ddc15466e44" - integrity sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q== - dependencies: - hosted-git-info "^4.0.1" - semver "^7.3.4" - validate-npm-package-name "^3.0.0" - -npm-packlist@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-3.0.0.tgz#0370df5cfc2fcc8f79b8f42b37798dd9ee32c2a9" - integrity sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ== - dependencies: - glob "^7.1.6" - ignore-walk "^4.0.1" - npm-bundled "^1.1.1" - npm-normalize-package-bin "^1.0.1" - -npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.0, npm-pick-manifest@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz#7b5484ca2c908565f43b7f27644f36bb816f5148" - integrity sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA== - dependencies: - npm-install-checks "^4.0.0" - npm-normalize-package-bin "^1.0.1" - npm-package-arg "^8.1.2" - semver "^7.3.4" - -npm-registry-fetch@^12.0.0, npm-registry-fetch@^12.0.1: - version "12.0.2" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-12.0.2.tgz#ae583bb3c902a60dae43675b5e33b5b1f6159f1e" - integrity sha512-Df5QT3RaJnXYuOwtXBXS9BWs+tHH2olvkCLh6jcR/b/u3DvPMlp3J0TvvYwplPKxHMOwfg287PYih9QqaVFoKA== - dependencies: - make-fetch-happen "^10.0.1" - minipass "^3.1.6" - minipass-fetch "^1.4.1" - minipass-json-stream "^1.0.1" - minizlib "^2.1.2" - npm-package-arg "^8.1.5" - npm-run-path@^4.0.0, npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" @@ -11434,16 +8345,6 @@ npmlog@^5.0.1: gauge "^3.0.0" set-blocking "^2.0.0" -npmlog@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" - integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== - dependencies: - are-we-there-yet "^3.0.0" - console-control-strings "^1.1.0" - gauge "^4.0.3" - set-blocking "^2.0.0" - nth-check@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" @@ -11451,17 +8352,12 @@ nth-check@^2.0.1: dependencies: boolbase "^1.0.0" -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== - nwsapi@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.2.tgz#e5418863e7905df67d51ec95938d67bf801f0bb0" integrity sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw== -object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.1: +object-assign@^4, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== @@ -11489,11 +8385,6 @@ object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object-treeify@^1.1.33: - version "1.1.33" - resolved "https://registry.yarnpkg.com/object-treeify/-/object-treeify-1.1.33.tgz#f06fece986830a3cba78ddd32d4c11d1f76cdf40" - integrity sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A== - object.assign@^4.1.3, object.assign@^4.1.4: version "4.1.4" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" @@ -11544,30 +8435,6 @@ obuf@^1.0.0, obuf@^1.1.2: resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== -oclif@^3.1.0: - version "3.4.2" - resolved "https://registry.yarnpkg.com/oclif/-/oclif-3.4.2.tgz#718d6a52107bdab0ca861cd63acdf73eb049a2bc" - integrity sha512-YF7zqHCEWiRvfuXkqyPuQsC4PiEJuXLQWIMXOtdJgOnIKqBh9Sp3e4xFsSal9QheVsCwO5kM3Nhe+G430hk/mA== - dependencies: - "@oclif/core" "^1.20.4" - "@oclif/plugin-help" "^5.1.19" - "@oclif/plugin-not-found" "^2.3.7" - "@oclif/plugin-warn-if-update-available" "^2.0.14" - aws-sdk "^2.1231.0" - concurrently "^7.6.0" - debug "^4.3.3" - find-yarn-workspace-root "^2.0.0" - fs-extra "^8.1" - github-slugger "^1.5.0" - got "^11" - lodash "^4.17.21" - normalize-package-data "^3.0.3" - semver "^7.3.8" - tslib "^2.3.1" - yeoman-environment "^3.11.1" - yeoman-generator "^5.6.1" - yosay "^2.0.2" - on-finished@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" @@ -11629,11 +8496,6 @@ opener@^1.5.2: resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== -opentracing@^0.14.4, opentracing@^0.14.5: - version "0.14.7" - resolved "https://registry.yarnpkg.com/opentracing/-/opentracing-0.14.7.tgz#25d472bd0296dc0b64d7b94cbc995219031428f5" - integrity sha512-vz9iS7MJ5+Bp1URw8Khvdyw1H/hGvzHWlKQ7eRrQojSCDL1/SrWfrY9QebLw97n2deyRtzHRC3MkQfVNUCo91Q== - optionator@^0.8.1, optionator@^0.8.2: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" @@ -11673,20 +8535,6 @@ ora@5.4.1, ora@^5.4.1: strip-ansi "^6.0.0" wcwidth "^1.0.1" -ora@^4.0.4: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-4.1.1.tgz#566cc0348a15c36f5f0e979612842e02ba9dddbc" - integrity sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A== - dependencies: - chalk "^3.0.0" - cli-cursor "^3.1.0" - cli-spinners "^2.2.0" - is-interactive "^1.0.0" - log-symbols "^3.0.0" - mute-stream "0.0.8" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - os-name@4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/os-name/-/os-name-4.0.1.tgz#32cee7823de85a8897647ba4d76db46bf845e555" @@ -11705,16 +8553,11 @@ outvariant@^1.2.1, outvariant@^1.3.0: resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.3.0.tgz#c39723b1d2cba729c930b74bf962317a81b9b1c9" integrity sha512-yeWM9k6UPfG/nzxdaPlJkB2p08hCg4xP6Lx99F+vP8YF7xyZVfTmJjrrNalkmzudD4WFvNLVudQikqUmF8zhVQ== -p-cancelable@^1.0.0, p-cancelable@^1.1.0: +p-cancelable@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== -p-cancelable@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" - integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== - p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" @@ -11748,19 +8591,12 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - p-queue@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-2.4.2.tgz#03609826682b743be9a22dba25051bd46724fc34" integrity sha512-n8/y+yDJwBjoLQe1GSJbbaYQLTI7QHNZI2+rpmCDbe++WLf9HC3gf6iqj5yfPAV71W4UF3ql5W1+UBPXoXTxng== -p-queue@^6.6.1, p-queue@^6.6.2: +p-queue@^6.6.1: version "6.6.2" resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== @@ -11783,83 +8619,11 @@ p-timeout@^3.2.0: dependencies: p-finally "^1.0.0" -p-transform@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-transform/-/p-transform-1.3.0.tgz#2da960ba92c6a56efbe75cbd1edf3ea7b3191049" - integrity sha512-UJKdSzgd3KOnXXAtqN5+/eeHcvTn1hBkesEmElVgvO/NAYcxAvmjzIGmnNd3Tb/gRAvMBdNRFD4qAWdHxY6QXg== - dependencies: - debug "^4.3.2" - p-queue "^6.6.2" - p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pac-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz#b718f76475a6a5415c2efbe256c1c971c84f635e" - integrity sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - get-uri "3" - http-proxy-agent "^4.0.1" - https-proxy-agent "5" - pac-resolver "^5.0.0" - raw-body "^2.2.0" - socks-proxy-agent "5" - -pac-resolver@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-5.0.1.tgz#c91efa3a9af9f669104fa2f51102839d01cde8e7" - integrity sha512-cy7u00ko2KVgBAjuhevqpPeHIkCIqPe1v24cydhWjmeuzaBfmUWFCZJ1iAh5TuVzVZoUzXIW7K8sMYOZ84uZ9Q== - dependencies: - degenerator "^3.0.2" - ip "^1.1.5" - netmask "^2.0.2" - -package-json@^6.3.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" - integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== - dependencies: - got "^9.6.0" - registry-auth-token "^4.0.0" - registry-url "^5.0.0" - semver "^6.2.0" - -pacote@^12.0.0, pacote@^12.0.2: - version "12.0.3" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-12.0.3.tgz#b6f25868deb810e7e0ddf001be88da2bcaca57c7" - integrity sha512-CdYEl03JDrRO3x18uHjBYA9TyoW8gy+ThVcypcDkxPtKlw76e4ejhYB6i9lJ+/cebbjpqPW/CijjqxwDTts8Ow== - dependencies: - "@npmcli/git" "^2.1.0" - "@npmcli/installed-package-contents" "^1.0.6" - "@npmcli/promise-spawn" "^1.2.0" - "@npmcli/run-script" "^2.0.0" - cacache "^15.0.5" - chownr "^2.0.0" - fs-minipass "^2.1.0" - infer-owner "^1.0.4" - minipass "^3.1.3" - mkdirp "^1.0.3" - npm-package-arg "^8.0.1" - npm-packlist "^3.0.0" - npm-pick-manifest "^6.0.0" - npm-registry-fetch "^12.0.0" - promise-retry "^2.0.1" - read-package-json-fast "^2.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.1.0" - -pad-component@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/pad-component/-/pad-component-0.0.1.tgz#ad1f22ce1bf0fdc0d6ddd908af17f351a404b8ac" - integrity sha512-8EKVBxCRSvLnsX1p2LlSFSH3c2/wuhY9/BXXWu8boL78FbVKqn2L5SpURt1x5iw6Gq8PTqJ7MdPoe5nCtX3I+g== - param-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" @@ -11875,23 +8639,6 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-conflict-json@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz#3d05bc8ffe07d39600dc6436c6aefe382033d323" - integrity sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA== - dependencies: - json-parse-even-better-errors "^2.3.1" - just-diff "^5.0.1" - just-diff-apply "^5.2.0" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - parse-json@^5.0.0, parse-json@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" @@ -11902,31 +8649,6 @@ parse-json@^5.0.0, parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse5-htmlparser2-tree-adapter@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" - integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== - dependencies: - parse5 "^6.0.1" - -parse5-htmlparser2-tree-adapter@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" - integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== - dependencies: - domhandler "^5.0.2" - parse5 "^7.0.0" - -parse5@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" - integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== - -parse5@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - parse5@^7.0.0, parse5@^7.1.1: version "7.1.2" resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" @@ -11969,14 +8691,6 @@ passport@^0.6.0: pause "0.0.1" utils-merge "^1.0.1" -password-prompt@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/password-prompt/-/password-prompt-1.1.2.tgz#85b2f93896c5bd9e9f2d6ff0627fa5af3dc00923" - integrity sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA== - dependencies: - ansi-escapes "^3.1.0" - cross-spawn "^6.0.5" - path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" @@ -12366,30 +9080,6 @@ postcss@^8.4.17, postcss@^8.4.18, postcss@^8.4.19: picocolors "^1.0.0" source-map-js "^1.0.2" -posthog-node@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/posthog-node/-/posthog-node-1.3.0.tgz#804ed2f213a2f05253f798bf9569d55a9cad94f7" - integrity sha512-2+VhqiY/rKIqKIXyvemBFHbeijHE25sP7eKltnqcFqAssUE6+sX6vusN9A4luzToOqHQkUZexiCKxvuGagh7JA== - dependencies: - axios "0.24.0" - axios-retry "^3.1.9" - component-type "^1.2.1" - join-component "^1.1.0" - md5 "^2.3.0" - ms "^2.1.3" - remove-trailing-slash "^0.1.1" - uuid "^8.3.2" - -preferred-pm@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/preferred-pm/-/preferred-pm-3.0.3.tgz#1b6338000371e3edbce52ef2e4f65eb2e73586d6" - integrity sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ== - dependencies: - find-up "^5.0.0" - find-yarn-workspace-root2 "1.2.16" - path-exists "^4.0.0" - which-pm "2.0.0" - prefix-style@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/prefix-style/-/prefix-style-2.0.1.tgz#66bba9a870cfda308a5dc20e85e9120932c95a06" @@ -12405,16 +9095,6 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== - -present@^0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/present/-/present-0.0.3.tgz#5aefb8a5ddf6b34c65743bf1cde53523aac1c05a" - integrity sha512-d0QMXYTKHuAO0n0IfI/x2lbNwybdNWjRQ08hQySzqMQ2M0gwh/IetTv2glkPJihFn+cMDYjK/BiVgcLcjsASgg== - prettier-linter-helpers@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" @@ -12427,11 +9107,6 @@ prettier@^2.3.2, prettier@^2.7.1: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== -pretty-bytes@^5.3.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" - integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== - pretty-error@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" @@ -12458,12 +9133,7 @@ pretty-format@^29.0.0, pretty-format@^29.3.1: ansi-styles "^5.0.0" react-is "^18.0.0" -proc-log@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-1.0.0.tgz#0d927307401f69ed79341e83a0b2c9a13395eb77" - integrity sha512-aCk8AO51s+4JyuYGg3Q/a6gnrlDO09NpVWePtjp7xwphcoQ04x5WAfCyugcsbLooWcMJ87CLkD4+604IckEdhg== - -process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: +process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== @@ -12473,36 +9143,6 @@ progress@^2.0.0: resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -prom-client@^14.0.1: - version "14.1.0" - resolved "https://registry.yarnpkg.com/prom-client/-/prom-client-14.1.0.tgz#049609859483d900844924df740722c76ed1fdbb" - integrity sha512-iFWCchQmi4170omLpFXbzz62SQTmPhtBL35v0qGEVRHKcqIeiexaoYeP0vfZTujxEq3tA87iqOdRbC9svS1B9A== - dependencies: - tdigest "^0.1.1" - -promise-all-reject-late@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" - integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== - -promise-call-limit@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-1.0.1.tgz#4bdee03aeb85674385ca934da7114e9bcd3c6e24" - integrity sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== - -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" - prompts@^2.0.1: version "2.4.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" @@ -12520,25 +9160,6 @@ prop-types@^15.5.10, prop-types@^15.7.2, prop-types@^15.8.1: object-assign "^4.1.1" react-is "^16.13.1" -protobufjs@^6.10.2: - 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" @@ -12547,21 +9168,7 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" -proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-5.0.0.tgz#d31405c10d6e8431fde96cba7a0c027ce01d633b" - integrity sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g== - dependencies: - agent-base "^6.0.0" - debug "4" - http-proxy-agent "^4.0.0" - https-proxy-agent "^5.0.0" - lru-cache "^5.1.1" - pac-proxy-agent "^5.0.0" - proxy-from-env "^1.0.0" - socks-proxy-agent "^5.0.0" - -proxy-from-env@^1.0.0, proxy-from-env@^1.1.0: +proxy-from-env@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== @@ -12579,29 +9186,12 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== - punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -pupa@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" - integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== - dependencies: - escape-goat "^2.0.0" - -q@^1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== - -qs@6.11.0, qs@^6.11.0, qs@^6.9.4: +qs@6.11.0, qs@^6.11.0: version "6.11.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== @@ -12613,11 +9203,6 @@ qs@6.9.3: resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.3.tgz#bfadcd296c2d549f1dffa560619132c977f5008e" integrity sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw== -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g== - querystringify@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" @@ -12652,7 +9237,7 @@ range-parser@^1.2.1, range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.5.1, raw-body@^2.2.0: +raw-body@2.5.1: version "2.5.1" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== @@ -12662,16 +9247,6 @@ raw-body@2.5.1, raw-body@^2.2.0: iconv-lite "0.4.24" unpipe "1.0.0" -rc@1.2.8, rc@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - react-custom-scrollbars-2@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/react-custom-scrollbars-2/-/react-custom-scrollbars-2-4.5.0.tgz#cff18e7368bce9d570aea0be780045eda392c745" @@ -12774,49 +9349,7 @@ read-cache@^1.0.0: dependencies: pify "^2.3.0" -read-cmd-shim@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-3.0.1.tgz#868c235ec59d1de2db69e11aec885bc095aea087" - integrity sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g== - -read-package-json-fast@^2.0.1, read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" - integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== - dependencies: - json-parse-even-better-errors "^2.3.0" - npm-normalize-package-bin "^1.0.1" - -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -readable-stream@1.1.x: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.2.2, readable-stream@^2.3.5: +readable-stream@^2.0.1, readable-stream@^2.2.2: 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== @@ -12838,23 +9371,6 @@ readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable string_decoder "^1.1.1" util-deprecate "^1.0.1" -readdir-glob@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.2.tgz#b185789b8e6a43491635b6953295c5c5e3fd224c" - integrity sha512-6RLVvwJtVwEDfPdn6X6Ille4/lxGl0ATOY4FN/B9nxQcgOazvvI0nodiD19ScKq0PvA/29VpaOQML36o5IzZWA== - dependencies: - minimatch "^5.1.0" - -readdir-scoped-modules@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" - integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== - dependencies: - debuglog "^1.0.1" - dezalgo "^1.0.0" - graceful-fs "^4.1.2" - once "^1.3.0" - readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -12884,12 +9400,17 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" -redeyed@~2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-2.1.1.tgz#8984b5815d99cb220469c99eeeffe38913e6cc0b" - integrity sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ== +redis-errors@^1.0.0, redis-errors@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" + integrity sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w== + +redis-parser@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" + integrity sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A== dependencies: - esprima "~4.0.0" + redis-errors "^1.0.0" reflect-metadata@^0.1.13: version "0.1.13" @@ -12908,7 +9429,7 @@ regenerate@^1.4.2: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@^0.13.10, regenerator-runtime@^0.13.11: +regenerator-runtime@^0.13.10: version "0.13.11" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== @@ -12951,20 +9472,6 @@ regexpu-core@^5.1.0: unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.1.0" -registry-auth-token@^4.0.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.2.tgz#f02d49c3668884612ca031419491a13539e21fac" - integrity sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg== - dependencies: - rc "1.2.8" - -registry-url@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" - integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== - dependencies: - rc "^1.2.8" - regjsgen@^0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.7.1.tgz#ee5ef30e18d3f09b7c369b76e7c2373ed25546f6" @@ -12987,16 +9494,6 @@ remove-accents@0.4.2: resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.4.2.tgz#0a43d3aaae1e80db919e07ae254b285d9e1c7bb5" integrity sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA== -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== - -remove-trailing-slash@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz#be2285a59f39c74d1bce4f825950061915e3780d" - integrity sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA== - renderkid@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" @@ -13008,11 +9505,6 @@ renderkid@^3.0.0: lodash "^4.17.21" strip-ansi "^6.0.1" -replace-ext@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.1.tgz#2d6d996d04a15855d967443631dd5f77825b016a" - integrity sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw== - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -13028,11 +9520,6 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== -resolve-alpn@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" - integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== - resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -13055,7 +9542,7 @@ resolve.exports@^1.1.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.1, resolve@^1.9.0: +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.1, resolve@^1.9.0: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== @@ -13073,20 +9560,6 @@ resolve@^2.0.0-next.3: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== - dependencies: - lowercase-keys "^1.0.0" - -responselike@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" - integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== - dependencies: - lowercase-keys "^2.0.0" - restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -13103,11 +9576,6 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - retry@^0.13.1: version "0.13.1" resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" @@ -13118,7 +9586,7 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@2.6.3, rimraf@~2.6.2: +rimraf@2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== @@ -13132,7 +9600,7 @@ rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: dependencies: glob "^7.1.3" -run-async@^2.0.0, run-async@^2.2.0, run-async@^2.4.0: +run-async@^2.2.0, run-async@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== @@ -13151,13 +9619,6 @@ rxjs@6.6.7, rxjs@^6.4.0, rxjs@^6.6.0: dependencies: tslib "^1.9.0" -rxjs@^7.0.0: - version "7.6.0" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.6.0.tgz#361da5362b6ddaa691a2de0b4f2d32028f1eb5a2" - integrity sha512-DDa7d8TFNUalGC9VqXvQ1euWNN7sc63TrUCuM9J998+ViviahMIjKSOU7rfcgFOF+FCD71BhDRv4hrFz+ImDLQ== - dependencies: - tslib "^2.1.0" - rxjs@^7.2.0, rxjs@^7.5.5: version "7.5.7" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.7.tgz#2ec0d57fdc89ece220d2e702730ae8f1e49def39" @@ -13201,16 +9662,6 @@ saslprep@^1.0.3: dependencies: sparse-bitfield "^3.0.3" -sax@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" - integrity sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA== - -sax@>=0.6.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - saxes@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" @@ -13244,11 +9695,6 @@ schema-utils@^4.0.0: ajv-formats "^2.1.1" ajv-keywords "^5.0.0" -scoped-regex@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/scoped-regex/-/scoped-regex-2.1.0.tgz#7b9be845d81fd9d21d1ec97c61a0b7cf86d2015f" - integrity sha512-g3WxHrqSWCZHGHlSrF51VXFdjImhwvH8ZO/pryFH56Qi0cDsZfylQa/t0jCzVQFNbNvM00HfHjkDPEuarKDSWQ== - select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" @@ -13261,26 +9707,19 @@ selfsigned@^2.1.1: dependencies: node-forge "^1" -semver-diff@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" - integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== - dependencies: - semver "^6.3.0" - -"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.5.1, 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@7.x, semver@^7.1.1, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: +semver@7.x, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: version "7.3.8" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== dependencies: lru-cache "^6.0.0" -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: +semver@^5.5.0, semver@^5.5.1, 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.1.1, semver@^6.1.2, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -13388,14 +9827,9 @@ shebang-regex@^1.0.0: shebang-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shell-quote@^1.7.3: - version "1.7.4" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.4.tgz#33fe15dee71ab2a81fcbd3a52106c5cfb9fb75d8" - integrity sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw== + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shelljs@0.8.5, shelljs@^0.8.5: +shelljs@0.8.5: version "0.8.5" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== @@ -13473,7 +9907,7 @@ socket.io-adapter@~2.4.0: resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz#b50a4a9ecdd00c34d4c8c808224daa1a786152a6" integrity sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg== -socket.io-client@^4.5.1, socket.io-client@^4.5.4: +socket.io-client@^4.5.4: version "4.5.4" resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-4.5.4.tgz#d3cde8a06a6250041ba7390f08d2468ccebc5ac9" integrity sha512-ZpKteoA06RzkD32IbqILZ+Cnst4xewU7ZYK12aS1mzHftFFjpoMz69IuhP/nL25pJfao/amoPI527KnuhFm01g== @@ -13515,11 +9949,6 @@ socket.io@4.5.3: socket.io-adapter "~2.4.0" socket.io-parser "~4.2.0" -socketio-wildcard@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/socketio-wildcard/-/socketio-wildcard-2.0.0.tgz#2466e832276b19163563bee772388747f912475b" - integrity sha512-Bf3ioZq15Z2yhFLDasRvbYitg82rwm+5AuER5kQvEQHhNFf4R4K5o/h57nEpN7A59T9FyRtTj34HZfMWAruw/A== - sockjs@^0.3.24: version "0.3.24" resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" @@ -13529,34 +9958,7 @@ sockjs@^0.3.24: uuid "^8.3.2" websocket-driver "^0.7.4" -socks-proxy-agent@5, socks-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz#032fb583048a29ebffec2e6a73fca0761f48177e" - integrity sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ== - dependencies: - agent-base "^6.0.2" - debug "4" - socks "^2.3.3" - -socks-proxy-agent@^6.0.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" - integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - -socks-proxy-agent@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" - integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - -socks@^2.3.3, socks@^2.6.2, socks@^2.7.1: +socks@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== @@ -13564,25 +9966,11 @@ socks@^2.3.3, socks@^2.6.2, socks@^2.7.1: ip "^2.0.0" smart-buffer "^4.2.0" -sort-keys@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-4.2.0.tgz#6b7638cee42c506fff8c1cecde7376d21315be18" - integrity sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg== - dependencies: - is-plain-obj "^2.0.0" - source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== -source-map-support@0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.3.3.tgz#34900977d5ba3f07c7757ee72e73bb1a9b53754f" - integrity sha512-9O4+y9n64RewmFoKUZ/5Tx9IHIcXM6Q+RTSw6ehnqybUz4a7iwR3Eaw80uLtqqQ5D0C+5H03D4KKGo9PdP33Gg== - dependencies: - source-map "0.1.32" - source-map-support@0.5.13: version "0.5.13" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" @@ -13599,13 +9987,6 @@ source-map-support@0.5.21, source-map-support@^0.5.20, source-map-support@~0.5.2 buffer-from "^1.0.0" source-map "^0.6.0" -source-map@0.1.32: - version "0.1.32" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.32.tgz#c8b6c167797ba4740a8ea33252162ff08591b266" - integrity sha512-htQyLrrRLkQ87Zfrir4/yN+vAUd6DNjVayEjTSHXu29AYQJw57I4/xEL/M6p6E/woPNJwvZt6rVlzc7gFEJccQ== - dependencies: - amdefine ">=0.0.4" - source-map@0.7.4, source-map@^0.7.3: version "0.7.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" @@ -13628,37 +10009,6 @@ sparse-bitfield@^3.0.3: dependencies: memory-pager "^1.0.2" -spawn-command@^0.0.2-1: - version "0.0.2-1" - resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0" - integrity sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg== - -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.12" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz#69077835abe2710b65f03969898b6637b505a779" - integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== - spdy-transport@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" @@ -13682,37 +10032,11 @@ spdy@^4.0.2: select-hose "^2.0.0" spdy-transport "^3.0.0" -sprintf-js@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" - integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== -sqs-consumer@^5.7.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/sqs-consumer/-/sqs-consumer-5.7.0.tgz#d7c83516e0258d261caae199889e094bda93ac05" - integrity sha512-CjPzGsmmsKb6L0ia1WjbxjojjIHjVZ1FDK8s1MhEnf1eS8lJjuC28QEmcBpryQgsyaIcg1SgTsuicoZe008oQg== - dependencies: - debug "^4.3.1" - -ssri@^8.0.0, ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== - dependencies: - minipass "^3.1.1" - -ssri@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" - integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== - dependencies: - minipass "^3.1.1" - stable@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" @@ -13735,12 +10059,10 @@ stackframe@^1.3.4: resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== -static-eval@2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/static-eval/-/static-eval-2.0.2.tgz#2d1759306b1befa688938454c546b7871f806a42" - integrity sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg== - dependencies: - escodegen "^1.8.1" +standard-as-callback@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45" + integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A== statuses@2.0.1: version "2.0.1" @@ -13772,16 +10094,7 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -13790,7 +10103,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^2.0.0, string-width@^2.1.0: +string-width@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -13846,11 +10159,6 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== - string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -13858,13 +10166,6 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== - dependencies: - ansi-regex "^2.0.0" - strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" @@ -13886,28 +10187,6 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-bom-buf@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-bom-buf/-/strip-bom-buf-1.0.0.tgz#1cb45aaf57530f4caf86c7f75179d2c9a51dd572" - integrity sha512-1sUIL1jck0T1mhOLP2c696BIznzT525Lkub+n4jjMHjhjhoAQA6Ye659DxdlZBr0aLDMQoTxKIpnlqxgtwjsuQ== - dependencies: - is-utf8 "^0.2.1" - -strip-bom-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz#f87db5ef2613f6968aa545abfe1ec728b6a829ca" - integrity sha512-yH0+mD8oahBZWnY43vxs4pSinn8SMKAdml/EOGBewoe1Y0Eitd0h2Mg3ZRiXruUW6L4P+lvZiEgbh0NgUGia1w== - dependencies: - first-chunk-stream "^2.0.0" - strip-bom "^2.0.0" - -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g== - dependencies: - is-utf8 "^0.2.0" - strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -13930,7 +10209,7 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" -strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: +strip-json-comments@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== @@ -13990,31 +10269,6 @@ subscriptions-transport-ws@0.11.0: symbol-observable "^1.0.4" ws "^5.2.0 || ^6.0.0 || ^7.0.0" -superagent-proxy@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/superagent-proxy/-/superagent-proxy-3.0.0.tgz#e1a17ccba25883599e18d2974020fe83ee7d95d1" - integrity sha512-wAlRInOeDFyd9pyonrkJspdRAxdLrcsZ6aSnS+8+nu4x1aXbz6FWSTT9M6Ibze+eG60szlL7JA8wEIV7bPWuyQ== - dependencies: - debug "^4.3.2" - proxy-agent "^5.0.0" - -superagent@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/superagent/-/superagent-6.1.0.tgz#09f08807bc41108ef164cfb4be293cebd480f4a6" - integrity sha512-OUDHEssirmplo3F+1HWKUrUjvnQuA+nZI6i/JJBdXb5eq9IyEQwPyPpqND+SSsxf6TygpBEkUjISVRN4/VOpeg== - dependencies: - component-emitter "^1.3.0" - cookiejar "^2.1.2" - debug "^4.1.1" - fast-safe-stringify "^2.0.7" - form-data "^3.0.0" - formidable "^1.2.2" - methods "^1.1.2" - mime "^2.4.6" - qs "^6.9.4" - readable-stream "^3.6.0" - semver "^7.3.2" - superagent@^8.0.3: version "8.0.3" resolved "https://registry.yarnpkg.com/superagent/-/superagent-8.0.3.tgz#15c8ec5611a1f01386994cfeeda5aa138bcb7b17" @@ -14046,40 +10300,27 @@ supertest@^6.1.3: methods "^1.1.2" superagent "^8.0.3" -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== - -supports-color@^5.3.0: +supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" -supports-color@^7.0.0, supports-color@^7.1.0: +supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" -supports-color@^8.0.0, supports-color@^8.1.0, supports-color@^8.1.1: +supports-color@^8.0.0: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" - integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" @@ -14152,20 +10393,12 @@ tailwindcss@^3.2.4: quick-lru "^5.1.1" resolve "^1.22.1" -taketalk@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/taketalk/-/taketalk-1.0.0.tgz#b4d4f0deed206ae7df775b129ea2ca6de52f26dd" - integrity sha512-kS7E53It6HA8S1FVFBWP7HDwgTiJtkmYk7TsowGlizzVrivR1Mf9mgjXHY1k7rOfozRVMZSfwjB3bevO4QEqpg== - dependencies: - get-stdin "^4.0.1" - minimist "^1.1.0" - tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== -tar-stream@^2.1.4, tar-stream@^2.2.0: +tar-stream@^2.1.4: version "2.2.0" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== @@ -14176,18 +10409,6 @@ tar-stream@^2.1.4, tar-stream@^2.2.0: inherits "^2.0.3" readable-stream "^3.1.1" -tar@^6.0.2, tar@^6.1.0, tar@^6.1.2: - version "6.1.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.13.tgz#46e22529000f612180601a6fe0680e7da508847b" - integrity sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^4.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - tar@^6.1.11: version "6.1.12" resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.12.tgz#3b742fb05669b55671fb769ab67a7791ea1a62e6" @@ -14200,21 +10421,6 @@ tar@^6.1.11: mkdirp "^1.0.3" yallist "^4.0.0" -tdigest@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/tdigest/-/tdigest-0.1.2.tgz#96c64bac4ff10746b910b0e23b515794e12faced" - integrity sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA== - dependencies: - bintrees "1.0.2" - -temp@^0.9.4: - version "0.9.4" - resolved "https://registry.yarnpkg.com/temp/-/temp-0.9.4.tgz#cd20a8580cb63635d0e4e9d4bd989d44286e7620" - integrity sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA== - dependencies: - mkdirp "^0.5.1" - rimraf "~2.6.2" - terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.3.6: version "5.3.6" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz#5590aec31aa3c6f771ce1b1acca60639eab3195c" @@ -14255,36 +10461,6 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -textextensions@^5.12.0, textextensions@^5.13.0: - version "5.15.0" - resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-5.15.0.tgz#4bb3296ad6fc111cf4b39c589dd028d8aaaf7060" - integrity sha512-MeqZRHLuaGamUXGuVn2ivtU3LA3mLCCIO5kUGoohTCoGmCBg/+8yPhWVX9WSl9telvVd8erftjFk9Fwb2dD6rw== - -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - -thrift@^0.14.1: - version "0.14.2" - resolved "https://registry.yarnpkg.com/thrift/-/thrift-0.14.2.tgz#723c38a27da2d235ee744b5850ea61d29f3f988e" - integrity sha512-bW8EaE6iw3hSt4HB2HpBdHW86Xpb9IUJfqufx4NwEu7OGuIpS0ISj+Yy1Z1Wvhfno6SPNhKRJ1qFXea84HcrOQ== - dependencies: - browser-or-node "^1.2.1" - isomorphic-ws "^4.0.1" - node-int64 "^0.4.0" - q "^1.5.0" - ws "^5.2.2" - through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -14295,13 +10471,6 @@ thunky@^1.0.2: resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== -tmp@0.2.1, 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" - tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -14309,6 +10478,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" @@ -14331,11 +10507,6 @@ to-no-case@^1.0.0: resolved "https://registry.yarnpkg.com/to-no-case/-/to-no-case-1.0.2.tgz#c722907164ef6b178132c8e69930212d1b4aa16a" integrity sha512-Z3g735FxuZY8rodxV4gH7LxClE4H0hTIyHNIHdk+vpQxjLm0cwnKXq/OFVZ76SOQmto7txVcwSCwkU5kqp+FKg== -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -14360,7 +10531,7 @@ totalist@^1.0.0: resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== -tough-cookie@^4.0.0, tough-cookie@^4.1.2: +tough-cookie@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874" integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ== @@ -14382,26 +10553,16 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -tree-kill@1.2.2, tree-kill@^1.2.2: +tree-kill@1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== -treeverse@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-1.0.4.tgz#a6b0ebf98a1bca6846ddc7ecbc900df08cb9cd5f" - integrity sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g== - triple-beam@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9" integrity sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw== -try-require@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/try-require/-/try-require-1.2.1.tgz#34489a2cac0c09c1cc10ed91ba011594d4333be2" - integrity sha512-aMzrGUIA/R2LwUgvsOusx+GTy8ERyNjpBzbWgS1Qx4oTFlXCMxY3PyyXbPE1pvrvK/CXpO+BBREEqrTkNroC+A== - ts-jest@28.0.8: version "28.0.8" resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-28.0.8.tgz#cd204b8e7a2f78da32cf6c95c9a6165c5b99cc73" @@ -14487,7 +10648,7 @@ tsconfig-paths@^3.14.1: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@2.4.1, tslib@^2, tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.4.1: +tslib@2.4.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== @@ -14504,13 +10665,6 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -14540,16 +10694,6 @@ type-fest@^0.21.3: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - type-fest@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" @@ -14563,13 +10707,6 @@ type-is@^1.6.4, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" @@ -14595,11 +10732,6 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" -underscore@1.12.1: - version "1.12.1" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.12.1.tgz#7bb8cc9b3d397e201cf8553336d262544ead829e" - integrity sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw== - unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" @@ -14623,51 +10755,6 @@ unicode-property-aliases-ecmascript@^2.0.0: resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-filename@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" - integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== - dependencies: - unique-slug "^3.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - -unique-slug@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-3.0.0.tgz#6d347cf57c8a7a7a6044aabd0e2d74e4d76dc7c9" - integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== - dependencies: - imurmurhash "^0.1.4" - -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" - -universal-user-agent@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" - integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - universalify@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" @@ -14678,24 +10765,11 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -unix-dgram@2.0.x: - version "2.0.6" - resolved "https://registry.yarnpkg.com/unix-dgram/-/unix-dgram-2.0.6.tgz#6d567b0eb6d7a9504e561532b598a46e34c5968b" - integrity sha512-AURroAsb73BZ6CdAyMrTk/hYKNj3DuYYEuOaB8bYMOHGKupRNScw90Q5C71tWJc3uE7dIeXRyuwN0xLLq3vDTg== - dependencies: - bindings "^1.5.0" - nan "^2.16.0" - unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -untildify@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" - integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== - update-browserslist-db@^1.0.9: version "1.0.10" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" @@ -14704,26 +10778,6 @@ update-browserslist-db@^1.0.9: escalade "^3.1.1" picocolors "^1.0.0" -update-notifier@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9" - integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw== - dependencies: - boxen "^5.0.0" - chalk "^4.1.0" - configstore "^5.0.1" - has-yarn "^2.1.0" - import-lazy "^2.1.0" - is-ci "^2.0.0" - is-installed-globally "^0.4.0" - is-npm "^5.0.0" - is-yarn-global "^0.3.0" - latest-version "^5.1.0" - pupa "^2.1.1" - semver "^7.3.4" - semver-diff "^3.1.1" - xdg-basedir "^4.0.0" - uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -14731,13 +10785,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== - dependencies: - prepend-http "^2.0.0" - url-parse@^1.5.3: version "1.5.10" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" @@ -14746,21 +10793,6 @@ url-parse@^1.5.3: querystringify "^2.1.1" requires-port "^1.0.0" -url@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" - integrity sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ== - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -urljoin@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/urljoin/-/urljoin-0.1.5.tgz#b25d2c6112c55ac9d50096a49a0f1fb7f4f53921" - integrity sha512-OSGi+PS3zxk8XfQ+7buaupOdrW9P9p+V9rjxGzJaYEYDe/B2rv3WJCupq5LNERW4w4kWxsduUUrhCxZZiQ2udw== - dependencies: - extend "~2.0.0" - use-sync-external-store@1.2.0, use-sync-external-store@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" @@ -14771,7 +10803,7 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -util@^0.12.3, util@^0.12.4: +util@^0.12.3: version "0.12.5" resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== @@ -14792,12 +10824,7 @@ utils-merge@1.0.1, 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.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.0.0.tgz#bc6ccf91b5ff0ac07bbcdbf1c7c4e150db4dbb6c" - integrity sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw== - -uuid@8.3.2, uuid@^8.0.0, uuid@^8.3.1, uuid@^8.3.2: +uuid@8.3.2, uuid@^8.3.1, 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== @@ -14826,21 +10853,6 @@ v8-to-istanbul@^9.0.1: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -validate-npm-package-name@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" - integrity sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw== - dependencies: - builtins "^1.0.3" - validator@^13.7.0: version "13.7.0" resolved "https://registry.yarnpkg.com/validator/-/validator-13.7.0.tgz#4f9658ba13ba8f3d82ee881d3516489ea85c0857" @@ -14856,37 +10868,6 @@ vary@^1, vary@~1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -vinyl-file@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/vinyl-file/-/vinyl-file-3.0.0.tgz#b104d9e4409ffa325faadd520642d0a3b488b365" - integrity sha512-BoJDj+ca3D9xOuPEM6RWVtWQtvEPQiQYn82LvdxhLWplfQsBzBqtgK0yhCP0s1BNTi6dH9BO+dzybvyQIacifg== - dependencies: - graceful-fs "^4.1.2" - pify "^2.3.0" - strip-bom-buf "^1.0.0" - strip-bom-stream "^2.0.0" - vinyl "^2.0.1" - -vinyl@^2.0.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.1.tgz#23cfb8bbab5ece3803aa2c0a1eb28af7cbba1974" - integrity sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw== - dependencies: - clone "^2.1.1" - clone-buffer "^1.0.0" - clone-stats "^1.0.0" - cloneable-readable "^1.0.0" - remove-trailing-separator "^1.0.1" - replace-ext "^1.0.0" - -vm2@^3.9.8: - version "3.9.12" - resolved "https://registry.yarnpkg.com/vm2/-/vm2-3.9.12.tgz#9bfa6d913a8b467861524e5a11c3b038cc967ec4" - integrity sha512-OMmRsKh1gmdosFzuqmj6O43hqIStqXA24YbwjtUTO0TkOBP8yLNHLplbr4odnAzEcMnm9lt2r3R8kTivn8urMg== - dependencies: - acorn "^8.7.0" - acorn-walk "^8.2.0" - w3c-xmlserializer@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073" @@ -14894,11 +10875,6 @@ w3c-xmlserializer@^4.0.0: dependencies: xml-name-validator "^4.0.0" -walk-up-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-1.0.0.tgz#d4745e893dd5fd0dbb58dd0a4c6a33d9c9fec53e" - integrity sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg== - walker@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" @@ -15174,14 +11150,6 @@ which-collection@^1.0.1: is-weakmap "^2.0.1" is-weakset "^2.0.1" -which-pm@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-pm/-/which-pm-2.0.0.tgz#8245609ecfe64bf751d0eef2f376d83bf1ddb7ae" - integrity sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w== - dependencies: - load-yaml-file "^0.2.0" - path-exists "^4.0.0" - which-typed-array@^1.1.2, which-typed-array@^1.1.8: version "1.1.9" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" @@ -15201,27 +11169,20 @@ which@^1.2.9: dependencies: isexe "^2.0.0" -which@^2.0.1, which@^2.0.2: +which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" -wide-align@^1.1.2, wide-align@^1.1.5: +wide-align@^1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== dependencies: string-width "^1.0.2 || 2 || 3 || 4" -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== - dependencies: - string-width "^4.0.0" - wildcard@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" @@ -15265,23 +11226,6 @@ word-wrap@^1.2.3, word-wrap@~1.2.3: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw== - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -15296,17 +11240,7 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -write-file-atomic@^4.0.0, write-file-atomic@^4.0.1: +write-file-atomic@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== @@ -15326,14 +11260,14 @@ ws@8.11.0, ws@^8.11.0, ws@^8.4.2: resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== -ws@^5.2.0, ws@^5.2.2: +ws@^5.2.0: version "5.2.3" resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.3.tgz#05541053414921bc29c63bee14b8b0dd50b07b3d" integrity sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA== dependencies: async-limiter "~1.0.0" -"ws@^5.2.0 || ^6.0.0 || ^7.0.0", ws@^7.3.1, ws@^7.5.7: +"ws@^5.2.0 || ^6.0.0 || ^7.0.0", ws@^7.3.1: version "7.5.9" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== @@ -15343,34 +11277,16 @@ ws@~8.2.3: resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.3.tgz#63a56456db1b04367d0b721a0b80cae6d8becbba" integrity sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA== -xdg-basedir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" - integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== - xml-name-validator@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== -xml2js@0.4.19: - version "0.4.19" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" - integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== - dependencies: - sax ">=0.6.0" - xmlbuilder "~9.0.1" - xml@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5" integrity sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw== -xmlbuilder@~9.0.1: - version "9.0.7" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" - integrity sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ== - xmlchars@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" @@ -15381,11 +11297,6 @@ xmlhttprequest-ssl@~2.0.0: resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz#91360c86b914e67f44dce769180027c0da618c67" integrity sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A== -xregexp@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" - integrity sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA== - xtend@^4.0.0, xtend@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -15396,11 +11307,6 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" @@ -15416,24 +11322,6 @@ yargs-parser@21.1.1, yargs-parser@^21.0.1, yargs-parser@^21.1.1: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -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@^16.0.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.6.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.2.tgz#2e23f2944e976339a1ee00f18c77fedee8332541" @@ -15455,67 +11343,6 @@ yauzl@^2.10.0: buffer-crc32 "~0.2.3" fd-slicer "~1.1.0" -yeoman-environment@^3.11.1: - version "3.13.0" - resolved "https://registry.yarnpkg.com/yeoman-environment/-/yeoman-environment-3.13.0.tgz#9db29f47352cb4a38eb0ef830a86091be3fd7240" - integrity sha512-eBPpBZCvFzx6yk17x+ZrOHp8ADDv6qHradV+SgdugaQKIy9NjEX5AkbwdTHLOgccSTkQ9rN791xvYOu6OmqjBg== - dependencies: - "@npmcli/arborist" "^4.0.4" - are-we-there-yet "^2.0.0" - arrify "^2.0.1" - binaryextensions "^4.15.0" - chalk "^4.1.0" - cli-table "^0.3.1" - commander "7.1.0" - dateformat "^4.5.0" - debug "^4.1.1" - diff "^5.0.0" - error "^10.4.0" - escape-string-regexp "^4.0.0" - execa "^5.0.0" - find-up "^5.0.0" - globby "^11.0.1" - grouped-queue "^2.0.0" - inquirer "^8.0.0" - is-scoped "^2.1.0" - isbinaryfile "^4.0.10" - lodash "^4.17.10" - log-symbols "^4.0.0" - mem-fs "^1.2.0 || ^2.0.0" - mem-fs-editor "^8.1.2 || ^9.0.0" - minimatch "^3.0.4" - npmlog "^5.0.1" - p-queue "^6.6.2" - p-transform "^1.3.0" - pacote "^12.0.2" - preferred-pm "^3.0.3" - pretty-bytes "^5.3.0" - semver "^7.1.3" - slash "^3.0.0" - strip-ansi "^6.0.0" - text-table "^0.2.0" - textextensions "^5.12.0" - untildify "^4.0.0" - -yeoman-generator@^5.6.1: - version "5.7.0" - resolved "https://registry.yarnpkg.com/yeoman-generator/-/yeoman-generator-5.7.0.tgz#5cf24b9fca331646263749121d4f8d477698a83a" - integrity sha512-z9ZwgKoDOd+llPDCwn8Ax2l4In5FMhlslxdeByW4AMxhT+HbTExXKEAahsClHSbwZz1i5OzRwLwRIUdOJBr5Bw== - dependencies: - chalk "^4.1.0" - dargs "^7.0.0" - debug "^4.1.1" - execa "^5.1.1" - github-username "^6.0.0" - lodash "^4.17.11" - minimist "^1.2.5" - read-pkg-up "^7.0.1" - run-async "^2.0.0" - semver "^7.2.1" - shelljs "^0.8.5" - sort-keys "^4.2.0" - text-table "^0.2.0" - yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" @@ -15526,30 +11353,6 @@ yocto-queue@^0.1.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -yosay@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/yosay/-/yosay-2.0.2.tgz#a7017e764cd88d64a1ae64812201de5b157adf6d" - integrity sha512-avX6nz2esp7IMXGag4gu6OyQBsMh/SEn+ZybGu3yKPlOTE6z9qJrzG/0X5vCq/e0rPFy0CUYCze0G5hL310ibA== - dependencies: - ansi-regex "^2.0.0" - ansi-styles "^3.0.0" - chalk "^1.0.0" - cli-boxes "^1.0.0" - pad-component "0.0.1" - string-width "^2.0.0" - strip-ansi "^3.0.0" - taketalk "^1.0.0" - wrap-ansi "^2.0.0" - -zip-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.1.0.tgz#51dd326571544e36aa3f756430b313576dc8fc79" - integrity sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A== - dependencies: - archiver-utils "^2.1.0" - compress-commons "^4.1.0" - readable-stream "^3.6.0" - zustand@^4.1.4: version "4.1.4" resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.1.4.tgz#b0286da4cc9edd35e91c96414fa54bfa4652a54d" From a0a426158a0c60eac1bd6114ae590e5643c574b1 Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Wed, 14 Dec 2022 06:31:09 +0900 Subject: [PATCH 091/298] feat: community find using cache #393 --- server/apps/api/modules/Redis.module.ts | 1 - server/apps/api/src/api.module.ts | 3 +- .../api/src/community/community.service.ts | 2 +- server/dao/repository/community.repository.ts | 45 +++++- server/dao/repository/user.repository.ts | 23 ++- server/package.json | 4 + yarn.lock | 142 +++++++++++++++++- 7 files changed, 207 insertions(+), 13 deletions(-) diff --git a/server/apps/api/modules/Redis.module.ts b/server/apps/api/modules/Redis.module.ts index 0d79cd60..86c0f467 100644 --- a/server/apps/api/modules/Redis.module.ts +++ b/server/apps/api/modules/Redis.module.ts @@ -5,6 +5,5 @@ export const importRedisModule = () => config: { host: 'localhost', port: Number(process.env.REDIS_PORT), - password: process.env.REDIS_PASSWORD, }, }); diff --git a/server/apps/api/src/api.module.ts b/server/apps/api/src/api.module.ts index 44b13606..f5b38b56 100644 --- a/server/apps/api/src/api.module.ts +++ b/server/apps/api/src/api.module.ts @@ -1,4 +1,4 @@ -import { Module } from '@nestjs/common'; +import { CacheModule, Module } from '@nestjs/common'; import { ApiController } from './api.controller'; import { ApiService } from './api.service'; import { MongooseModule } from '@nestjs/mongoose'; @@ -12,6 +12,7 @@ import { mongoDbServerModule } from '@api/modules/mongo-server.module'; import { importWinstonModule } from '@api/modules/Winstone.module'; import { importConfigModule } from '@api/modules/Config.module'; import { importRedisModule } from '@api/modules/Redis.module'; +// import { RedisModule } from '@api/modules/redis/Redis.module'; @Module({ imports: [ diff --git a/server/apps/api/src/community/community.service.ts b/server/apps/api/src/community/community.service.ts index 8a0cc610..d461891d 100644 --- a/server/apps/api/src/community/community.service.ts +++ b/server/apps/api/src/community/community.service.ts @@ -35,7 +35,7 @@ export class CommunityService { await Promise.all( Array.from(user.communities.values()).map(async (userCommunity) => { const { _id, channels } = userCommunity as communityInUser; - const community = await this.communityRepository.findById(_id); + const community = await this.communityRepository.findByIdAfterCache(_id); if (!community) { throw new BadRequestException('해당하는 커뮤니티의 _id가 올바르지 않습니다.'); } diff --git a/server/dao/repository/community.repository.ts b/server/dao/repository/community.repository.ts index d472033b..a9ede4ab 100644 --- a/server/dao/repository/community.repository.ts +++ b/server/dao/repository/community.repository.ts @@ -3,10 +3,15 @@ import { InjectModel } from '@nestjs/mongoose'; import { Model } from 'mongoose'; import { Community, CommunityDocument } from '@schemas/community.schema'; import { CreateCommunityDto } from '@api/src/community/dto/create-community.dto'; +import { InjectRedis } from '@liaoliaots/nestjs-redis'; +import Redis from 'ioredis'; @Injectable() export class CommunityRepository { - constructor(@InjectModel(Community.name) private communityModel: Model) {} + constructor( + @InjectModel(Community.name) private communityModel: Model, + @InjectRedis() private readonly redis: Redis, + ) {} async create(createCommunityDto: CreateCommunityDto) { const result = await this.communityModel.create(createCommunityDto); @@ -17,11 +22,31 @@ export class CommunityRepository { return await this.communityModel.findById(_id); } + async findByIdAfterCache(_id: string) { + // await this.redis.del(`community/${_id}`); + const cache = await this.redis.get(`community/${_id}`); + if (cache) { + console.log(JSON.parse(cache)); + console.log('hit cache'); + return JSON.parse(cache); + } + const result = await this.communityModel.findById(_id); + await this.redis.set(`community/${_id}`, JSON.stringify(result)); + return result; + } + async addArrAtArr(filter, attribute, appendArr) { const addArr = {}; addArr[attribute] = { $each: appendArr }; - return await this.communityModel.findOneAndUpdate(filter, { $addToSet: addArr }, { new: true }); - // console.log('pass'); + const result = await this.communityModel.findOneAndUpdate( + filter, + { $addToSet: addArr }, + { new: true }, + ); + if (filter._id) { + await this.redis.set(`community/${filter._id}`, JSON.stringify(result)); + } + return result; } async findOne(condition: any) { @@ -30,13 +55,23 @@ export class CommunityRepository { async updateOne(filter, updateField) { await this.communityModel.updateOne(filter, updateField); + if (filter._id) { + await this.redis.del(`community/${filter._id}`); + } } async findAndUpdateOne(filter, updateField) { - return await this.communityModel.findOneAndUpdate(filter, updateField, { new: true }); + const result = await this.communityModel.findOneAndUpdate(filter, updateField, { new: true }); + if (filter._id) { + await this.redis.set(`community/${filter._id}`, JSON.stringify(result)); + } + return result; } async deleteElementAtArr(filter, removeElement) { - await this.communityModel.updateOne(filter, { $pullAll: removeElement }); + const result = await this.communityModel.updateOne(filter, { $pullAll: removeElement }); + if (filter._id) { + this.redis.del(`community/${filter._id}`); + } } } diff --git a/server/dao/repository/user.repository.ts b/server/dao/repository/user.repository.ts index 381bf68d..f4c73ec8 100644 --- a/server/dao/repository/user.repository.ts +++ b/server/dao/repository/user.repository.ts @@ -1,13 +1,18 @@ -import { Injectable } from '@nestjs/common'; +import { CACHE_MANAGER, Inject, Injectable } from '@nestjs/common'; import { InjectModel } from '@nestjs/mongoose'; import { User, UserDocument } from '@schemas/user.schema'; import { Model } from 'mongoose'; import { CreateUserDto } from '@user/dto/create-user.dto'; import { BOT_ID } from '@utils/def'; +import { InjectRedis } from '@liaoliaots/nestjs-redis'; +import Redis from 'ioredis'; @Injectable() export class UserRepository { - constructor(@InjectModel(User.name) private userModel: Model) {} + constructor( + @InjectModel(User.name) private userModel: Model, + @InjectRedis() private readonly redis: Redis, + ) {} async create(createUserDto: CreateUserDto) { await this.userModel.create(createUserDto); @@ -23,7 +28,19 @@ export class UserRepository { } async findById(_id: string) { - return await this.userModel.findById(_id); + const result = await this.userModel.findById(_id); + this.redis.set(`user/${_id}`, JSON.stringify(result)); + return result; + } + + async findByIdAfterCache(_id: string) { + const cache = await this.redis.get(`user/${_id}`); + if (cache) { + return JSON.parse(cache); + } + const result = await this.userModel.findById(_id); + await this.redis.set(`user/${_id}`, JSON.stringify(result)); + return result; } async updateOne(filter, updateField) { diff --git a/server/package.json b/server/package.json index 207267ac..cf610a0a 100644 --- a/server/package.json +++ b/server/package.json @@ -54,6 +54,7 @@ "@sentry/node": "^7.20.0", "@slack/client": "^5.0.2", "@slack/webhook": "^6.1.0", + "@types/cache-manager-ioredis": "^2.0.3", "@types/cookie-parser": "^1.4.3", "@types/express": "^4.17.13", "@types/jest": "^29.2.4", @@ -64,6 +65,8 @@ "@typescript-eslint/eslint-plugin": "^5.0.0", "@typescript-eslint/parser": "^5.0.0", "axios": "^1.2.1", + "cache-manager": "^5.1.4", + "cache-manager-ioredis": "^2.1.0", "class-transformer": "^0.5.1", "class-validator": "^0.13.2", "class-validator-mongo-object-id": "^1.3.0", @@ -79,6 +82,7 @@ "nest-raven": "^9.0.0", "nest-winston": "^1.8.0", "prettier": "^2.3.2", + "redis": "^4.5.1", "socket.io": "^4.5.4", "socket.io-client": "^4.5.4", "source-map-support": "^0.5.20", diff --git a/yarn.lock b/yarn.lock index 32e86a7a..a09a2bcd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2533,6 +2533,40 @@ resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== +"@redis/bloom@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@redis/bloom/-/bloom-1.1.0.tgz#64e310ddee72010676e14296076329e594a1f6c7" + integrity sha512-9QovlxmpRtvxVbN0UBcv8WfdSMudNZZTFqCsnBszcQXqaZb/TVe30ScgGEO7u1EAIacTPAo7/oCYjYAxiHLanQ== + +"@redis/client@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@redis/client/-/client-1.4.2.tgz#2a3f5e98bc33b7b979390442e6e08f96e57fabdd" + integrity sha512-oUdEjE0I7JS5AyaAjkD3aOXn9NhO7XKyPyXEyrgFDu++VrVBHUPnV6dgEya9TcMuj5nIJRuCzCm8ZP+c9zCHPw== + dependencies: + cluster-key-slot "1.1.1" + generic-pool "3.9.0" + yallist "4.0.0" + +"@redis/graph@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@redis/graph/-/graph-1.1.0.tgz#cc2b82e5141a29ada2cce7d267a6b74baa6dd519" + integrity sha512-16yZWngxyXPd+MJxeSr0dqh2AIOi8j9yXKcKCwVaKDbH3HTuETpDVPcLujhFYVPtYrngSco31BUcSa9TH31Gqg== + +"@redis/json@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@redis/json/-/json-1.0.4.tgz#f372b5f93324e6ffb7f16aadcbcb4e5c3d39bda1" + integrity sha512-LUZE2Gdrhg0Rx7AN+cZkb1e6HjoSKaeeW8rYnt89Tly13GBI5eP4CwDVr+MY8BAYfCg4/N15OUrtLoona9uSgw== + +"@redis/search@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@redis/search/-/search-1.1.0.tgz#7abb18d431f27ceafe6bcb4dd83a3fa67e9ab4df" + integrity sha512-NyFZEVnxIJEybpy+YskjgOJRNsfTYqaPbK/Buv6W2kmFNaRk85JiqjJZA5QkRmWvGbyQYwoO5QfDi2wHskKrQQ== + +"@redis/time-series@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@redis/time-series/-/time-series-1.0.4.tgz#af85eb080f6934580e4d3b58046026b6c2b18717" + integrity sha512-ThUIgo2U/g7cCuZavucQTQzA9g9JbDDY2f64u3AbAoz/8vE2lt2U37LamDUVChhaDA3IRT9R6VvJwqnUfTJzng== + "@remix-run/router@1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.0.3.tgz#953b88c20ea00d0eddaffdc1b115c08474aa295d" @@ -2858,6 +2892,19 @@ dependencies: "@types/node" "*" +"@types/cache-manager-ioredis@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/cache-manager-ioredis/-/cache-manager-ioredis-2.0.3.tgz#755f6f47ee298b77141f7d1aee93d9d2fa10d103" + integrity sha512-IIwKdlUSztH0TMk1ikRes2CDr2vV4UrSMKhdZ6fBN1++PdgAl/JsxHKRzaSThGqjDUb0UzcWo7dZF4RPPMInMA== + dependencies: + "@types/cache-manager" "*" + "@types/ioredis" "^4.28.10" + +"@types/cache-manager@*": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/cache-manager/-/cache-manager-4.0.2.tgz#5e76dd9e7881c23f332c2f48e5f326bd05ba9ac9" + integrity sha512-fT5FMdzsiSX0AbgnS5gDvHl2Nco0h5zYyjwDQy4yPC7Ww6DeGMVKPRqIZtg9HOXDV2kkc18SL1B0N8f0BecrCA== + "@types/connect-history-api-fallback@^1.3.5": version "1.3.5" resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" @@ -2966,6 +3013,13 @@ dependencies: "@types/node" "*" +"@types/ioredis@^4.28.10": + version "4.28.10" + resolved "https://registry.yarnpkg.com/@types/ioredis/-/ioredis-4.28.10.tgz#40ceb157a4141088d1394bb87c98ed09a75a06ff" + integrity sha512-69LyhUgrXdgcNDv7ogs1qXZomnfOEnSmrmMFqKgt1XMJxmoOSG/u3wYy13yACIfKuMJ8IhKgHafDO3sx19zVQQ== + dependencies: + "@types/node" "*" + "@types/is-stream@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@types/is-stream/-/is-stream-1.1.0.tgz#b84d7bb207a210f2af9bed431dc0fbe9c4143be1" @@ -4190,6 +4244,21 @@ bytes@3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== +cache-manager-ioredis@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cache-manager-ioredis/-/cache-manager-ioredis-2.1.0.tgz#69c9ab4cf72531f9015adf44d3822f9e2dcadc01" + integrity sha512-TCxbp9ceuFveTKWuNaCX8QjoC41rAlHen4s63u9Yd+iXlw3efYmimc/u935PKPxSdhkXpnMes4mxtK3/yb0L4g== + dependencies: + ioredis "^4.14.1" + +cache-manager@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/cache-manager/-/cache-manager-5.1.4.tgz#b3024f2127353f9f725f43ecbd184872101b6bb2" + integrity sha512-beXzzuboV6I0AkU25udrd8tRxFbU6c5m7+3eOdmznSVNkyKe0+uTK8EtcuhTwqc/wAYrAGl62w3s58rjKnrO6g== + dependencies: + lodash.clonedeep "^4.5.0" + lru-cache "^7.14.0" + call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -4423,6 +4492,11 @@ clsx@^1.1.1: resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== +cluster-key-slot@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.1.tgz#10ccb9ded0729464b6d2e7d714b100a2d1259d43" + integrity sha512-rwHwUfXL40Chm1r08yrhU3qpUvdVlgkKNeyeGPOxnW8/SyVDvgRaed/Uz54AqWNaTCAThlj6QAs3TZcKI0xDEw== + cluster-key-slot@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" @@ -4901,7 +4975,7 @@ debug@2.6.9, debug@^2.6.9: dependencies: ms "2.0.0" -debug@4, debug@4.x, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: +debug@4, debug@4.x, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -4998,6 +5072,11 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== +denque@^1.1.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/denque/-/denque-1.5.1.tgz#07f670e29c9a78f8faecb2566a1e2c11929c5cbf" + integrity sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw== + denque@^2.0.1, denque@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" @@ -6193,6 +6272,11 @@ gauge@^3.0.0: strip-ansi "^6.0.1" wide-align "^1.1.2" +generic-pool@3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-3.9.0.tgz#36f4a678e963f4fdb8707eab050823abc4e8f5e4" + integrity sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g== + 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" @@ -6732,6 +6816,23 @@ interpret@^2.2.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== +ioredis@^4.14.1: + version "4.28.5" + resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.28.5.tgz#5c149e6a8d76a7f8fa8a504ffc85b7d5b6797f9f" + integrity sha512-3GYo0GJtLqgNXj4YhrisLaNNvWSNwSS2wS4OELGfGxH8I69+XfNdnmV1AyN+ZqMh0i7eX+SWjrwFKDBDgfBC1A== + dependencies: + cluster-key-slot "^1.1.0" + debug "^4.3.1" + denque "^1.1.0" + lodash.defaults "^4.2.0" + lodash.flatten "^4.4.0" + lodash.isarguments "^3.1.0" + p-map "^2.1.0" + redis-commands "1.7.0" + redis-errors "^1.2.0" + redis-parser "^3.0.0" + standard-as-callback "^2.1.0" + ioredis@^5.2.4: version "5.2.4" resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.2.4.tgz#9e262a668bc29bae98f2054c1e0d7efd86996b96" @@ -7737,6 +7838,11 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +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.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" @@ -7747,6 +7853,11 @@ lodash.defaults@^4.2.0: resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== +lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== + lodash.includes@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" @@ -7852,6 +7963,11 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +lru-cache@^7.14.0: + version "7.14.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.14.1.tgz#8da8d2f5f59827edb388e63e459ac23d6d408fea" + integrity sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA== + lru_map@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" @@ -8591,6 +8707,11 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" +p-map@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + p-queue@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-2.4.2.tgz#03609826682b743be9a22dba25051bd46724fc34" @@ -9400,6 +9521,11 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" +redis-commands@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.7.0.tgz#15a6fea2d58281e27b1cd1acfb4b293e278c3a89" + integrity sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ== + redis-errors@^1.0.0, redis-errors@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" @@ -9412,6 +9538,18 @@ redis-parser@^3.0.0: dependencies: redis-errors "^1.0.0" +redis@^4.5.1: + version "4.5.1" + resolved "https://registry.yarnpkg.com/redis/-/redis-4.5.1.tgz#f5a818970bb2dc5d60540bab41308640604c7d33" + integrity sha512-oxXSoIqMJCQVBTfxP6BNTCtDMyh9G6Vi5wjdPdV/sRKkufyZslDqCScSGcOr6XGR/reAWZefz7E4leM31RgdBA== + dependencies: + "@redis/bloom" "1.1.0" + "@redis/client" "1.4.2" + "@redis/graph" "1.1.0" + "@redis/json" "1.0.4" + "@redis/search" "1.1.0" + "@redis/time-series" "1.0.4" + reflect-metadata@^0.1.13: version "0.1.13" resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" @@ -11307,7 +11445,7 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yallist@^4.0.0: +yallist@4.0.0, yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== From 6ec144a49b0349d587d8a0dd3d7ef566112cbfe9 Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Wed, 14 Dec 2022 23:49:30 +0900 Subject: [PATCH 092/298] =?UTF-8?q?doc:=20README=20=EA=B8=B0=EC=88=A0=20?= =?UTF-8?q?=EC=8A=A4=ED=83=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0c778a84..72b61b9e 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@
- +
@@ -65,4 +65,4 @@
-![stack](https://user-images.githubusercontent.com/79135734/206748158-d0659242-4034-4cf3-bbab-95418d49bf54.PNG) +![image](https://user-images.githubusercontent.com/34162358/207605404-3da6f4f9-65a6-4167-992a-6eef41ccebd9.png) From ec53510db82bd7f706325a7731c4ec331f30e22a Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Wed, 14 Dec 2022 23:51:15 +0900 Subject: [PATCH 093/298] feat: user repository redis caching #393 --- server/dao/repository/user.repository.ts | 25 ++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/server/dao/repository/user.repository.ts b/server/dao/repository/user.repository.ts index f4c73ec8..ff4bd902 100644 --- a/server/dao/repository/user.repository.ts +++ b/server/dao/repository/user.repository.ts @@ -44,6 +44,9 @@ export class UserRepository { } async updateOne(filter, updateField) { + if (filter._id) { + this.redis.del(`user/${filter._id}`); + } await this.userModel.updateOne(filter, updateField); } @@ -52,30 +55,32 @@ export class UserRepository { } async updateObject(filter, appendElement) { + if (filter._id) { + this.redis.del(`user/${filter._id}`); + } return await this.userModel.updateOne(filter, { $set: appendElement }); } async deleteObject(filter, appendElement) { + if (filter._id) { + this.redis.del(`user/${filter._id}`); + } return await this.userModel.updateOne(filter, { $unset: appendElement }, { new: true }); } async deleteElementAtArr(filter, removeElement) { + if (filter._id) { + this.redis.del(`user/${filter._id}`); + } await this.userModel.updateOne(filter, { $pullAll: removeElement }); } - async deleteElementAtArr2(_id, removeElement) { - await this.userModel.findByIdAndUpdate(_id, { $pullAll: removeElement }, { new: true }); - } - async addArrAtArr(filter, attribute, appendArr) { const addArr = {}; addArr[attribute] = { $each: appendArr }; + if (filter._id) { + this.redis.del(`user/${filter._id}`); + } return await this.userModel.findByIdAndUpdate(filter, { $addToSet: addArr }, { new: true }); } - - // async set(filter, obj) { - // const user = new User(); - // - // this.userModel.find(filter).communities.set(); - // } } From 187360b194bf6151dfca9b9d6efe4f5550d8d0e3 Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Wed, 14 Dec 2022 23:52:02 +0900 Subject: [PATCH 094/298] =?UTF-8?q?feat:=20=EC=9F=88=EC=8B=A0=EC=9D=98=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4,=20=EC=B1=84=EB=84=90=EC=9D=98=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=EC=9E=90=20=EC=A0=95=EB=B3=B4,=20=EC=BB=A4=EB=AE=A4?= =?UTF-8?q?=EB=8B=88=ED=8B=B0=EC=9D=98=20=EC=82=AC=EC=9A=A9=EC=9E=90=20?= =?UTF-8?q?=EC=A0=91=EA=B7=BC=20service=20cash=20search=20first=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20#393?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/auth/auth.service.ts | 2 +- server/apps/api/src/channel/channel.service.ts | 2 +- server/apps/api/src/community/community.service.ts | 3 ++- server/apps/api/src/user/user.service.ts | 1 + 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/server/apps/api/src/auth/auth.service.ts b/server/apps/api/src/auth/auth.service.ts index 83b01d13..ff2375e2 100644 --- a/server/apps/api/src/auth/auth.service.ts +++ b/server/apps/api/src/auth/auth.service.ts @@ -52,7 +52,7 @@ export class AuthService { } async getMyInfo(userId: string) { - const myInfo = await this.userRepository.findById(userId); + const myInfo = await this.userRepository.findByIdAfterCache(userId); return getUserBasicInfo(myInfo); } } diff --git a/server/apps/api/src/channel/channel.service.ts b/server/apps/api/src/channel/channel.service.ts index 1047779a..ff342473 100644 --- a/server/apps/api/src/channel/channel.service.ts +++ b/server/apps/api/src/channel/channel.service.ts @@ -80,7 +80,7 @@ export class ChannelService { if (!channel) throw new BadRequestException('존재하지 않는 채널입니다.'); const users = await Promise.all( channel.users.map(async (user_id) => { - const user = await this.userRepository.findById(user_id); + const user = await this.userRepository.findByIdAfterCache(user_id); return getUserBasicInfo(user); }), ); diff --git a/server/apps/api/src/community/community.service.ts b/server/apps/api/src/community/community.service.ts index d461891d..fe6e6a40 100644 --- a/server/apps/api/src/community/community.service.ts +++ b/server/apps/api/src/community/community.service.ts @@ -213,7 +213,7 @@ export class CommunityService { }); const result = await Promise.all( community.users.map(async (_id) => { - const user = await this.userRepository.findById(_id); + const user = await this.userRepository.findByIdAfterCache(_id); return getUserBasicInfo(user); }), ); @@ -224,6 +224,7 @@ export class CommunityService { const { requestUserId, community_id } = requestUserAboutCommunityDto; const user = await this.userRepository.findById(requestUserId); const community = await this.communityRepository.findById(community_id); + console.log(community); if (!user) { throw new BadRequestException(`요청한 사용자 _id(${requestUserId})가 올바르지 않습니다.`); } else if (!community) { diff --git a/server/apps/api/src/user/user.service.ts b/server/apps/api/src/user/user.service.ts index 0074fbb6..6e1ad70e 100644 --- a/server/apps/api/src/user/user.service.ts +++ b/server/apps/api/src/user/user.service.ts @@ -55,6 +55,7 @@ export class UserService { return users.map((user) => getUserBasicInfo(user)); } + // TODO : feature 수정으로 인해 안쓰는 코드로 유추 재확인 async getRelatedUsers(_id: string, option: string) { const user = await this.userRepository.findById(_id); if (!user) { From fb2d7806e948eb160cdd48faf5dc47fb5c5403d5 Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Wed, 14 Dec 2022 23:52:50 +0900 Subject: [PATCH 095/298] =?UTF-8?q?fix:=20console.log=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/dao/repository/community.repository.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/server/dao/repository/community.repository.ts b/server/dao/repository/community.repository.ts index a9ede4ab..2de4c016 100644 --- a/server/dao/repository/community.repository.ts +++ b/server/dao/repository/community.repository.ts @@ -23,11 +23,8 @@ export class CommunityRepository { } async findByIdAfterCache(_id: string) { - // await this.redis.del(`community/${_id}`); const cache = await this.redis.get(`community/${_id}`); if (cache) { - console.log(JSON.parse(cache)); - console.log('hit cache'); return JSON.parse(cache); } const result = await this.communityModel.findById(_id); @@ -71,7 +68,7 @@ export class CommunityRepository { async deleteElementAtArr(filter, removeElement) { const result = await this.communityModel.updateOne(filter, { $pullAll: removeElement }); if (filter._id) { - this.redis.del(`community/${filter._id}`); + await this.redis.del(`community/${filter._id}`); } } } From 348b540bd68da9061fb2534f69d81441fd596013 Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Thu, 15 Dec 2022 00:25:00 +0900 Subject: [PATCH 096/298] =?UTF-8?q?setting:=20docker-compose=20file=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1=20#393?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy/docker-compose.yml | 11 ++++++++++- server/apps/api/Dockerfile | 6 ++++++ server/apps/api/modules/Redis.module.ts | 1 + 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/deploy/docker-compose.yml b/deploy/docker-compose.yml index 1c464820..e963ac30 100644 --- a/deploy/docker-compose.yml +++ b/deploy/docker-compose.yml @@ -11,4 +11,13 @@ services: container_name: socket-container ports: - "8080:8080" - restart: "unless-stopped" \ No newline at end of file + restart: "unless-stopped" + redis: + image: redis:alpine + command: redis-server --requirepass {{REDIS_PW}} --port 6379 + restart: always + hostname: 'localhost' + network_mode: 'host' + ports: + - "6379:6379" + container_name: cache-redis diff --git a/server/apps/api/Dockerfile b/server/apps/api/Dockerfile index 8d4edc93..b20f1230 100644 --- a/server/apps/api/Dockerfile +++ b/server/apps/api/Dockerfile @@ -10,6 +10,12 @@ ARG ERROR_SLACK_WEBHOOK ENV ERROR_SLACK_WEBHOOK ${ERROR_SLACK_WEBHOOK} ARG JWT_SECRET ENV JWT_SECRET ${JWT_SECRET} +ARG REDIS_PORT +ENV REDIS_PORT ${REDIS_PORT} +ARG REDIS_PW +ENV REDIS_PW ${REDIS_PW} +ARG MONGODB_ATLAS +ENV MONGODB_ATLAS ${MONGODB_ATLAS} # yarn 설치 #RUN npm install -g yarn diff --git a/server/apps/api/modules/Redis.module.ts b/server/apps/api/modules/Redis.module.ts index 86c0f467..730e1361 100644 --- a/server/apps/api/modules/Redis.module.ts +++ b/server/apps/api/modules/Redis.module.ts @@ -5,5 +5,6 @@ export const importRedisModule = () => config: { host: 'localhost', port: Number(process.env.REDIS_PORT), + password: process.env.REDIS_PW, }, }); From 220f4e21deb9c7b58a734211c26ad6f1cc53bff5 Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Thu, 15 Dec 2022 00:28:38 +0900 Subject: [PATCH 097/298] =?UTF-8?q?fix:=20console.log=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/src/community/community.service.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/server/apps/api/src/community/community.service.ts b/server/apps/api/src/community/community.service.ts index fe6e6a40..f6abc7cb 100644 --- a/server/apps/api/src/community/community.service.ts +++ b/server/apps/api/src/community/community.service.ts @@ -224,7 +224,6 @@ export class CommunityService { const { requestUserId, community_id } = requestUserAboutCommunityDto; const user = await this.userRepository.findById(requestUserId); const community = await this.communityRepository.findById(community_id); - console.log(community); if (!user) { throw new BadRequestException(`요청한 사용자 _id(${requestUserId})가 올바르지 않습니다.`); } else if (!community) { From fd37f71ce0eceb5865482b48e1ede83c69a7398b Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Thu, 15 Dec 2022 01:21:24 +0900 Subject: [PATCH 098/298] =?UTF-8?q?fix:=20redis=20config=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/api/modules/Redis.module.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/server/apps/api/modules/Redis.module.ts b/server/apps/api/modules/Redis.module.ts index 730e1361..8c9a059c 100644 --- a/server/apps/api/modules/Redis.module.ts +++ b/server/apps/api/modules/Redis.module.ts @@ -3,8 +3,7 @@ import { RedisModule } from '@liaoliaots/nestjs-redis'; export const importRedisModule = () => RedisModule.forRoot({ config: { - host: 'localhost', - port: Number(process.env.REDIS_PORT), - password: process.env.REDIS_PW, + host: process.env.NODE_ENV == 'prod' ? 'cache-redis' : 'localhost', + port: 6379, }, }); From ff4e27df3688773133d261b934e48b3cb46d39fe Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Thu, 15 Dec 2022 01:23:37 +0900 Subject: [PATCH 099/298] =?UTF-8?q?fix:=20docker-compose=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy/docker-compose.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deploy/docker-compose.yml b/deploy/docker-compose.yml index e963ac30..62755a77 100644 --- a/deploy/docker-compose.yml +++ b/deploy/docker-compose.yml @@ -14,9 +14,9 @@ services: restart: "unless-stopped" redis: image: redis:alpine - command: redis-server --requirepass {{REDIS_PW}} --port 6379 + command: redis-server restart: always - hostname: 'localhost' + hostname: cache-redis network_mode: 'host' ports: - "6379:6379" From 4f663f223374b3362140b9a2b17f96ee87103efc Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Thu, 15 Dec 2022 01:45:08 +0900 Subject: [PATCH 100/298] =?UTF-8?q?fix:=20docker-compose=20redis=20network?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy/docker-compose.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/deploy/docker-compose.yml b/deploy/docker-compose.yml index 62755a77..e091a293 100644 --- a/deploy/docker-compose.yml +++ b/deploy/docker-compose.yml @@ -17,7 +17,6 @@ services: command: redis-server restart: always hostname: cache-redis - network_mode: 'host' ports: - "6379:6379" container_name: cache-redis From 7491ca013d704652e3ee4bfb0b8bc685cfc96d9d Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Thu, 15 Dec 2022 02:07:19 +0900 Subject: [PATCH 101/298] =?UTF-8?q?test:=20artillery=20test=20yml=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EC=97=85=EB=A1=9C=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/artillery/api_test.yaml | 59 ++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 server/artillery/api_test.yaml diff --git a/server/artillery/api_test.yaml b/server/artillery/api_test.yaml new file mode 100644 index 00000000..165c5cd5 --- /dev/null +++ b/server/artillery/api_test.yaml @@ -0,0 +1,59 @@ +config: + target : 'http://localhost:3000' + phases: + - duration: 40 + arrivalRate: 1 + name: Warm up +# - duration: 120 +# arrivalRate: 5 +# rampTo: 50 +# name: Ramp up load +# - duration: 600 +# arrivalRate: 50 +# name: Sustained load + +before: + flow: + - post: + url : '/api/user/auth/signin' + json: + id: 'knytest@gmail.com' + password: '12341234' + capture: + json: '$.result.accessToken' + as: accessToken + expect: + - statusCode: 201 +scenarios: + - flow: + - get: + url: '/api/users?search=t' + headers: + authorization: 'Bearer {{accessToken}}' + - get: + url: '/api/user/followings' + headers: + authorization: 'Bearer {{accessToken}}' + - think : 1 + - get: + url: '/api/user/auth/me' + headers: + authorization: 'Bearer {{accessToken}}' + - get: + url: '/api/channels/639846568ad1c10ed60d9653' + headers: + authorization: 'Bearer {{accessToken}}' + - get: + url: '/api/communities/63997033a59cf95317119f62/users' + headers: + authorization: 'Bearer {{accessToken}}' + - get: + url: '/api/communities' + headers: + authorization: 'Bearer {{accessToken}}' + - think : 1 + - get: + url: '/api/communities/63956c42d1a615bf564e3af6/users' + headers: + authorization: 'Bearer {{accessToken}}' + From 76efd02404a0818945fc846515ed14a211ec75af Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Thu, 15 Dec 2022 02:15:16 +0900 Subject: [PATCH 102/298] =?UTF-8?q?test:=20artillery=20test=20result=20?= =?UTF-8?q?=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../report_communities.json" | 151 + .../report_communities.json.html" | 1053 +++ .../api_test.yaml" | 47 + .../report_communities.json" | 225 + .../report_communities.json.html" | 1127 +++ .../api_test.yaml" | 47 + .../report_user_search.json" | 228 + .../report_user_search.json.html" | 1130 +++ .../api_test.yaml" | 47 + .../report_user_search.json" | 228 + .../report_user_search.json.html" | 1130 +++ .../api_test.yaml" | 47 + .../report_user_search.json" | 483 ++ .../report_user_search.json.html" | 1385 ++++ .../api_test.yaml" | 47 + .../report_user_search.json" | 375 + .../report_user_search.json.html" | 1277 +++ .../api_test.yaml" | 47 + .../report_community_users.json" | 225 + .../report_community_users.json.html" | 1127 +++ .../api_test.yaml" | 47 + .../report_community_users.json" | 76 + .../report_community_users.json.html" | 978 +++ .../api_test.yaml" | 47 + .../report_communities_promise.json" | 299 + .../report_communities_promise.json.html" | 1201 +++ .../api_test.yaml" | 47 + .../report_communities_no_promise.json" | 299 + .../report_communities_no_promise.json.html" | 1201 +++ .../Redis_Cache/report_cache_auth_me.json | 447 ++ .../Redis_Cache/report_cache_get_channel.json | 447 ++ .../report_cache_get_community_users.json | 373 + .../Redis_Cache/report_nocache_auth_me.json | 447 ++ .../report_nocache_get_channel.json | 447 ++ .../report_nocache_get_community_users.json | 447 ++ .../Sort/report_communities_sort_basic.json | 299 + .../Sort/report_communities_sort_no.json | 299 + .../report_communities_sort_no_forof.json | 299 + ...20\354\247\204\354\240\201_Test.json.html" | 6825 +++++++++++++++++ 39 files changed, 24951 insertions(+) create mode 100644 "server/artillery/result/NGINX_or_Direct/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26010\354\264\21010\353\252\205Direct/report_communities.json" create mode 100644 "server/artillery/result/NGINX_or_Direct/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26010\354\264\21010\353\252\205Direct/report_communities.json.html" create mode 100644 "server/artillery/result/NGINX_or_Direct/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26010\354\264\21010\353\252\205NGINX/api_test.yaml" create mode 100644 "server/artillery/result/NGINX_or_Direct/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26010\354\264\21010\353\252\205NGINX/report_communities.json" create mode 100644 "server/artillery/result/NGINX_or_Direct/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26010\354\264\21010\353\252\205NGINX/report_communities.json.html" create mode 100644 "server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21110\354\264\21010\353\252\205Direct/api_test.yaml" create mode 100644 "server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21110\354\264\21010\353\252\205Direct/report_user_search.json" create mode 100644 "server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21110\354\264\21010\353\252\205Direct/report_user_search.json.html" create mode 100644 "server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21110\354\264\21010\353\252\205NGINX/api_test.yaml" create mode 100644 "server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21110\354\264\21010\353\252\205NGINX/report_user_search.json" create mode 100644 "server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21110\354\264\21010\353\252\205NGINX/report_user_search.json.html" create mode 100644 "server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21150\354\264\210100\353\252\205Direct/api_test.yaml" create mode 100644 "server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21150\354\264\210100\353\252\205Direct/report_user_search.json" create mode 100644 "server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21150\354\264\210100\353\252\205Direct/report_user_search.json.html" create mode 100644 "server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21150\354\264\210200\353\252\205Direct/api_test.yaml" create mode 100644 "server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21150\354\264\210200\353\252\205Direct/report_user_search.json" create mode 100644 "server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21150\354\264\210200\353\252\205Direct/report_user_search.json.html" create mode 100644 "server/artillery/result/NGINX_or_Direct/\354\273\244\353\256\244\353\213\210\355\213\260\353\202\264\354\202\254\354\232\251\354\236\22010\354\264\21010\353\252\205Direct/api_test.yaml" create mode 100644 "server/artillery/result/NGINX_or_Direct/\354\273\244\353\256\244\353\213\210\355\213\260\353\202\264\354\202\254\354\232\251\354\236\22010\354\264\21010\353\252\205Direct/report_community_users.json" create mode 100644 "server/artillery/result/NGINX_or_Direct/\354\273\244\353\256\244\353\213\210\355\213\260\353\202\264\354\202\254\354\232\251\354\236\22010\354\264\21010\353\252\205Direct/report_community_users.json.html" create mode 100644 "server/artillery/result/NGINX_or_Direct/\354\273\244\353\256\244\353\213\210\355\213\260\353\202\264\354\202\254\354\232\251\354\236\22010\354\264\21010\353\252\205NGINX/api_test.yaml" create mode 100644 "server/artillery/result/NGINX_or_Direct/\354\273\244\353\256\244\353\213\210\355\213\260\353\202\264\354\202\254\354\232\251\354\236\22010\354\264\21010\353\252\205NGINX/report_community_users.json" create mode 100644 "server/artillery/result/NGINX_or_Direct/\354\273\244\353\256\244\353\213\210\355\213\260\353\202\264\354\202\254\354\232\251\354\236\22010\354\264\21010\353\252\205NGINX/report_community_users.json.html" create mode 100644 "server/artillery/result/PromiseAll_or_ForOf/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26020\354\264\2101\353\252\205NGINX_Promise/api_test.yaml" create mode 100644 "server/artillery/result/PromiseAll_or_ForOf/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26020\354\264\2101\353\252\205NGINX_Promise/report_communities_promise.json" create mode 100644 "server/artillery/result/PromiseAll_or_ForOf/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26020\354\264\2101\353\252\205NGINX_Promise/report_communities_promise.json.html" create mode 100644 "server/artillery/result/PromiseAll_or_ForOf/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26020\354\264\2101\353\252\205NGINX_noPromise/api_test.yaml" create mode 100644 "server/artillery/result/PromiseAll_or_ForOf/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26020\354\264\2101\353\252\205NGINX_noPromise/report_communities_no_promise.json" create mode 100644 "server/artillery/result/PromiseAll_or_ForOf/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26020\354\264\2101\353\252\205NGINX_noPromise/report_communities_no_promise.json.html" create mode 100644 server/artillery/result/Redis_Cache/report_cache_auth_me.json create mode 100644 server/artillery/result/Redis_Cache/report_cache_get_channel.json create mode 100644 server/artillery/result/Redis_Cache/report_cache_get_community_users.json create mode 100644 server/artillery/result/Redis_Cache/report_nocache_auth_me.json create mode 100644 server/artillery/result/Redis_Cache/report_nocache_get_channel.json create mode 100644 server/artillery/result/Redis_Cache/report_nocache_get_community_users.json create mode 100644 server/artillery/result/Sort/report_communities_sort_basic.json create mode 100644 server/artillery/result/Sort/report_communities_sort_no.json create mode 100644 server/artillery/result/Sort/report_communities_sort_no_forof.json create mode 100644 "server/artillery/result/\354\262\230\354\235\214_\354\240\220\354\247\204\354\240\201_Test.json.html" diff --git "a/server/artillery/result/NGINX_or_Direct/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26010\354\264\21010\353\252\205Direct/report_communities.json" "b/server/artillery/result/NGINX_or_Direct/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26010\354\264\21010\353\252\205Direct/report_communities.json" new file mode 100644 index 00000000..ff25f3ce --- /dev/null +++ "b/server/artillery/result/NGINX_or_Direct/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26010\354\264\21010\353\252\205Direct/report_communities.json" @@ -0,0 +1,151 @@ +{ + "aggregate": { + "counters": { + "vusers.created_by_name.0": 100, + "vusers.created": 100, + "http.requests": 100, + "http.codes.401": 100, + "http.responses": 100, + "vusers.failed": 0, + "vusers.completed": 100 + }, + "rates": { + "http.request_rate": 5 + }, + "firstCounterAt": 1670739140437, + "firstHistogramAt": 1670739140480, + "lastCounterAt": 1670739150252, + "lastHistogramAt": 1670739150252, + "firstMetricAt": 1670739140437, + "lastMetricAt": 1670739150252, + "period": 1670739150000, + "summaries": { + "http.response_time": { + "min": 5, + "max": 31, + "count": 100, + "p50": 7, + "median": 7, + "p75": 8.9, + "p90": 12.1, + "p95": 16, + "p99": 30.3, + "p999": 30.3 + }, + "vusers.session_length": { + "min": 10.4, + "max": 53.2, + "count": 100, + "p50": 15.6, + "median": 15.6, + "p75": 18.7, + "p90": 24.8, + "p95": 36.2, + "p99": 43.4, + "p999": 43.4 + } + }, + "histograms": { + "http.response_time": { + "min": 5, + "max": 31, + "count": 100, + "p50": 7, + "median": 7, + "p75": 8.9, + "p90": 12.1, + "p95": 16, + "p99": 30.3, + "p999": 30.3 + }, + "vusers.session_length": { + "min": 10.4, + "max": 53.2, + "count": 100, + "p50": 15.6, + "median": 15.6, + "p75": 18.7, + "p90": 24.8, + "p95": 36.2, + "p99": 43.4, + "p999": 43.4 + } + } + }, + "intermediate": [ + { + "counters": { + "vusers.created_by_name.0": 95, + "vusers.created": 95, + "http.requests": 95, + "http.codes.401": 94, + "http.responses": 94, + "vusers.failed": 0, + "vusers.completed": 94 + }, + "rates": { + "http.request_rate": 10 + }, + "http.request_rate": null, + "firstCounterAt": 1670739140437, + "firstHistogramAt": 1670739140480, + "lastCounterAt": 1670739149988, + "lastHistogramAt": 1670739149950, + "firstMetricAt": 1670739140437, + "lastMetricAt": 1670739149988, + "period": "1670739140000", + "summaries": { + "http.response_time": { + "min": 5, + "max": 31, + "count": 94, + "p50": 7, + "median": 7, + "p75": 8.9, + "p90": 12.1, + "p95": 16, + "p99": 30.3, + "p999": 30.3 + }, + "vusers.session_length": { + "min": 10.4, + "max": 53.2, + "count": 94, + "p50": 16, + "median": 16, + "p75": 18.4, + "p90": 24.3, + "p95": 36.2, + "p99": 43.4, + "p999": 43.4 + } + }, + "histograms": { + "http.response_time": { + "min": 5, + "max": 31, + "count": 94, + "p50": 7, + "median": 7, + "p75": 8.9, + "p90": 12.1, + "p95": 16, + "p99": 30.3, + "p999": 30.3 + }, + "vusers.session_length": { + "min": 10.4, + "max": 53.2, + "count": 94, + "p50": 16, + "median": 16, + "p75": 18.4, + "p90": 24.3, + "p95": 36.2, + "p99": 43.4, + "p999": 43.4 + } + } + } + ] +} \ No newline at end of file diff --git "a/server/artillery/result/NGINX_or_Direct/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26010\354\264\21010\353\252\205Direct/report_communities.json.html" "b/server/artillery/result/NGINX_or_Direct/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26010\354\264\21010\353\252\205Direct/report_communities.json.html" new file mode 100644 index 00000000..b0d66dcf --- /dev/null +++ "b/server/artillery/result/NGINX_or_Direct/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26010\354\264\21010\353\252\205Direct/report_communities.json.html" @@ -0,0 +1,1053 @@ + + + + + Artillery report + + + + + + + + + + + + + + + + + +
+
+
+
+ + + + +
+
+

+ Artillery Report +

+
+
+
+ +
+ +
+
+ + +
+
+
+
+
+ +
+
    +
+
+
+ +
+
+ + + + + + + + + +
+ Metric + + Value +
+
+
+

Errors at intervals

+ +
+ +
+
+
+
+
+
+
+ + +
+ +
+
+ + +
+
+
+
+
+
+ +
+ + + + + + + + \ No newline at end of file diff --git "a/server/artillery/result/NGINX_or_Direct/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26010\354\264\21010\353\252\205NGINX/api_test.yaml" "b/server/artillery/result/NGINX_or_Direct/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26010\354\264\21010\353\252\205NGINX/api_test.yaml" new file mode 100644 index 00000000..3984db6b --- /dev/null +++ "b/server/artillery/result/NGINX_or_Direct/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26010\354\264\21010\353\252\205NGINX/api_test.yaml" @@ -0,0 +1,47 @@ +config: + target : 'http://49.50.167.202:3001' + phases: +# - duration: 60 +# arrivalRate: 5 +# name: Warm up +# - duration: 120 +# arrivalRate: 5 +# rampTo: 50 +# name: Ramp up load + - duration: 10 + arrivalRate: 10 + name: Sustained load + +#before: +# flow: +# - post: +# url : '/api/user/auth/signin' +# json: +# id: 'kny@gmail.com' +# password: '12341234' +# capture: +# json: '$.result.accessToken' +# as: accessToken +# expect: +# - statusCode: 201 +scenarios: + - flow: +# - get: +# url: '/api/users?search=t' +# headers: +# authorization: 'Bearer {{accessToken}}' +# - get: +# url: '/api/user/followings' +# headers: +# authorization: 'Bearer {{accessToken}}' +# - think : 1 + - get: + url: '/api/communities' + headers: + authorization: 'Bearer {{accessToken}}' +# - think : 1 +# - get: +# url: '/api/communities/63956c42d1a615bf564e3af6/users' +# headers: +# authorization: 'Bearer {{accessToken}}' + diff --git "a/server/artillery/result/NGINX_or_Direct/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26010\354\264\21010\353\252\205NGINX/report_communities.json" "b/server/artillery/result/NGINX_or_Direct/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26010\354\264\21010\353\252\205NGINX/report_communities.json" new file mode 100644 index 00000000..14b0a6b9 --- /dev/null +++ "b/server/artillery/result/NGINX_or_Direct/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26010\354\264\21010\353\252\205NGINX/report_communities.json" @@ -0,0 +1,225 @@ +{ + "aggregate": { + "counters": { + "vusers.created_by_name.0": 100, + "vusers.created": 100, + "http.requests": 100, + "http.codes.401": 100, + "http.responses": 100, + "vusers.failed": 0, + "vusers.completed": 100 + }, + "rates": { + "http.request_rate": 14 + }, + "firstCounterAt": 1670739247261, + "firstHistogramAt": 1670739247287, + "lastCounterAt": 1670739257082, + "lastHistogramAt": 1670739257082, + "firstMetricAt": 1670739247261, + "lastMetricAt": 1670739257082, + "period": 1670739250000, + "summaries": { + "http.response_time": { + "min": 5, + "max": 23, + "count": 100, + "p50": 7.9, + "median": 7.9, + "p75": 7.9, + "p90": 10.9, + "p95": 10.9, + "p99": 13.1, + "p999": 13.1 + }, + "vusers.session_length": { + "min": 10.8, + "max": 57.7, + "count": 100, + "p50": 15.6, + "median": 15.6, + "p75": 19.9, + "p90": 25.3, + "p95": 37, + "p99": 43.4, + "p999": 43.4 + } + }, + "histograms": { + "http.response_time": { + "min": 5, + "max": 23, + "count": 100, + "p50": 7.9, + "median": 7.9, + "p75": 7.9, + "p90": 10.9, + "p95": 10.9, + "p99": 13.1, + "p999": 13.1 + }, + "vusers.session_length": { + "min": 10.8, + "max": 57.7, + "count": 100, + "p50": 15.6, + "median": 15.6, + "p75": 19.9, + "p90": 25.3, + "p95": 37, + "p99": 43.4, + "p999": 43.4 + } + } + }, + "intermediate": [ + { + "counters": { + "vusers.created_by_name.0": 28, + "vusers.created": 28, + "http.requests": 28, + "http.codes.401": 28, + "http.responses": 28, + "vusers.failed": 0, + "vusers.completed": 28 + }, + "rates": { + "http.request_rate": 14 + }, + "http.request_rate": null, + "firstCounterAt": 1670739247261, + "firstHistogramAt": 1670739247287, + "lastCounterAt": 1670739249979, + "lastHistogramAt": 1670739249979, + "firstMetricAt": 1670739247261, + "lastMetricAt": 1670739249979, + "period": "1670739240000", + "summaries": { + "http.response_time": { + "min": 6, + "max": 23, + "count": 28, + "p50": 7.9, + "median": 7.9, + "p75": 8.9, + "p90": 10.9, + "p95": 10.9, + "p99": 10.9, + "p999": 10.9 + }, + "vusers.session_length": { + "min": 12.1, + "max": 57.7, + "count": 28, + "p50": 16.9, + "median": 16.9, + "p75": 22, + "p90": 37, + "p95": 42.5, + "p99": 43.4, + "p999": 43.4 + } + }, + "histograms": { + "http.response_time": { + "min": 6, + "max": 23, + "count": 28, + "p50": 7.9, + "median": 7.9, + "p75": 8.9, + "p90": 10.9, + "p95": 10.9, + "p99": 10.9, + "p999": 10.9 + }, + "vusers.session_length": { + "min": 12.1, + "max": 57.7, + "count": 28, + "p50": 16.9, + "median": 16.9, + "p75": 22, + "p90": 37, + "p95": 42.5, + "p99": 43.4, + "p999": 43.4 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 72, + "vusers.created": 72, + "http.requests": 72, + "http.codes.401": 72, + "http.responses": 72, + "vusers.failed": 0, + "vusers.completed": 72 + }, + "rates": { + "http.request_rate": 10 + }, + "http.request_rate": null, + "firstCounterAt": 1670739250016, + "firstHistogramAt": 1670739250053, + "lastCounterAt": 1670739257082, + "lastHistogramAt": 1670739257082, + "firstMetricAt": 1670739250016, + "lastMetricAt": 1670739257082, + "period": "1670739250000", + "summaries": { + "http.response_time": { + "min": 5, + "max": 13, + "count": 72, + "p50": 7.9, + "median": 7.9, + "p75": 7.9, + "p90": 10.1, + "p95": 10.9, + "p99": 12.1, + "p999": 12.1 + }, + "vusers.session_length": { + "min": 10.8, + "max": 40.3, + "count": 72, + "p50": 15.3, + "median": 15.3, + "p75": 18, + "p90": 22.9, + "p95": 25.3, + "p99": 37, + "p999": 37 + } + }, + "histograms": { + "http.response_time": { + "min": 5, + "max": 13, + "count": 72, + "p50": 7.9, + "median": 7.9, + "p75": 7.9, + "p90": 10.1, + "p95": 10.9, + "p99": 12.1, + "p999": 12.1 + }, + "vusers.session_length": { + "min": 10.8, + "max": 40.3, + "count": 72, + "p50": 15.3, + "median": 15.3, + "p75": 18, + "p90": 22.9, + "p95": 25.3, + "p99": 37, + "p999": 37 + } + } + } + ] +} \ No newline at end of file diff --git "a/server/artillery/result/NGINX_or_Direct/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26010\354\264\21010\353\252\205NGINX/report_communities.json.html" "b/server/artillery/result/NGINX_or_Direct/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26010\354\264\21010\353\252\205NGINX/report_communities.json.html" new file mode 100644 index 00000000..26c91a28 --- /dev/null +++ "b/server/artillery/result/NGINX_or_Direct/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26010\354\264\21010\353\252\205NGINX/report_communities.json.html" @@ -0,0 +1,1127 @@ + + + + + Artillery report + + + + + + + + + + + + + + + + + +
+
+
+
+ + + + +
+
+

+ Artillery Report +

+
+
+
+ +
+ +
+
+ + +
+
+
+
+
+ +
+
    +
+
+
+ +
+
+ + + + + + + + + +
+ Metric + + Value +
+
+
+

Errors at intervals

+ +
+ +
+
+
+
+
+
+
+ + +
+ +
+
+ + +
+
+
+
+
+
+ +
+ + + + + + + + \ No newline at end of file diff --git "a/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21110\354\264\21010\353\252\205Direct/api_test.yaml" "b/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21110\354\264\21010\353\252\205Direct/api_test.yaml" new file mode 100644 index 00000000..d33153b4 --- /dev/null +++ "b/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21110\354\264\21010\353\252\205Direct/api_test.yaml" @@ -0,0 +1,47 @@ +config: + target : 'http://49.50.167.202:3001' + phases: +# - duration: 60 +# arrivalRate: 5 +# name: Warm up +# - duration: 120 +# arrivalRate: 5 +# rampTo: 50 +# name: Ramp up load + - duration: 10 + arrivalRate: 10 + name: Sustained load + +#before: +# flow: +# - post: +# url : '/api/user/auth/signin' +# json: +# id: 'kny@gmail.com' +# password: '12341234' +# capture: +# json: '$.result.accessToken' +# as: accessToken +# expect: +# - statusCode: 201 +scenarios: + - flow: + - get: + url: '/api/users?search=t' +# headers: +# authorization: 'Bearer {{accessToken}}' +# - get: +# url: '/api/user/followings' +# headers: +# authorization: 'Bearer {{accessToken}}' +# - think : 1 +# - get: +# url: '/api/communities' +# headers: +# authorization: 'Bearer {{accessToken}}' +# - think : 1 + - get: + url: '/api/communities/63956c42d1a615bf564e3af6/users' + headers: + authorization: 'Bearer {{accessToken}}' + diff --git "a/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21110\354\264\21010\353\252\205Direct/report_user_search.json" "b/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21110\354\264\21010\353\252\205Direct/report_user_search.json" new file mode 100644 index 00000000..ae0fa380 --- /dev/null +++ "b/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21110\354\264\21010\353\252\205Direct/report_user_search.json" @@ -0,0 +1,228 @@ +{ + "aggregate": { + "counters": { + "vusers.created_by_name.0": 100, + "vusers.created": 100, + "http.requests": 200, + "http.codes.200": 100, + "http.responses": 200, + "http.codes.401": 100, + "vusers.failed": 0, + "vusers.completed": 100 + }, + "rates": { + "http.request_rate": 27 + }, + "firstCounterAt": 1670738152823, + "firstHistogramAt": 1670738152903, + "lastCounterAt": 1670738162677, + "lastHistogramAt": 1670738162677, + "firstMetricAt": 1670738152823, + "lastMetricAt": 1670738162677, + "period": 1670738160000, + "summaries": { + "http.response_time": { + "min": 4, + "max": 54, + "count": 200, + "p50": 18, + "median": 18, + "p75": 25.8, + "p90": 30.9, + "p95": 34.1, + "p99": 47.9, + "p999": 53 + }, + "vusers.session_length": { + "min": 40.4, + "max": 97.8, + "count": 100, + "p50": 50.9, + "median": 50.9, + "p75": 56.3, + "p90": 61, + "p95": 68.7, + "p99": 76, + "p999": 76 + } + }, + "histograms": { + "http.response_time": { + "min": 4, + "max": 54, + "count": 200, + "p50": 18, + "median": 18, + "p75": 25.8, + "p90": 30.9, + "p95": 34.1, + "p99": 47.9, + "p999": 53 + }, + "vusers.session_length": { + "min": 40.4, + "max": 97.8, + "count": 100, + "p50": 50.9, + "median": 50.9, + "p75": 56.3, + "p90": 61, + "p95": 68.7, + "p99": 76, + "p999": 76 + } + } + }, + "intermediate": [ + { + "counters": { + "vusers.created_by_name.0": 73, + "vusers.created": 73, + "http.requests": 146, + "http.codes.200": 73, + "http.responses": 146, + "http.codes.401": 73, + "vusers.failed": 0, + "vusers.completed": 73 + }, + "rates": { + "http.request_rate": 20 + }, + "http.request_rate": null, + "firstCounterAt": 1670738152823, + "firstHistogramAt": 1670738152903, + "lastCounterAt": 1670738159969, + "lastHistogramAt": 1670738159969, + "firstMetricAt": 1670738152823, + "lastMetricAt": 1670738159969, + "period": "1670738150000", + "summaries": { + "http.response_time": { + "min": 4, + "max": 54, + "count": 146, + "p50": 18, + "median": 18, + "p75": 26.8, + "p90": 30.9, + "p95": 34.1, + "p99": 47.9, + "p999": 53 + }, + "vusers.session_length": { + "min": 40.4, + "max": 97.8, + "count": 73, + "p50": 51.9, + "median": 51.9, + "p75": 57.4, + "p90": 62.2, + "p95": 68.7, + "p99": 76, + "p999": 76 + } + }, + "histograms": { + "http.response_time": { + "min": 4, + "max": 54, + "count": 146, + "p50": 18, + "median": 18, + "p75": 26.8, + "p90": 30.9, + "p95": 34.1, + "p99": 47.9, + "p999": 53 + }, + "vusers.session_length": { + "min": 40.4, + "max": 97.8, + "count": 73, + "p50": 51.9, + "median": 51.9, + "p75": 57.4, + "p90": 62.2, + "p95": 68.7, + "p99": 76, + "p999": 76 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 27, + "vusers.created": 27, + "http.requests": 54, + "http.codes.200": 27, + "http.responses": 54, + "http.codes.401": 27, + "vusers.failed": 0, + "vusers.completed": 27 + }, + "rates": { + "http.request_rate": 27 + }, + "http.request_rate": null, + "firstCounterAt": 1670738160322, + "firstHistogramAt": 1670738160357, + "lastCounterAt": 1670738162677, + "lastHistogramAt": 1670738162677, + "firstMetricAt": 1670738160322, + "lastMetricAt": 1670738162677, + "period": "1670738160000", + "summaries": { + "http.response_time": { + "min": 5, + "max": 39, + "count": 54, + "p50": 10.9, + "median": 10.9, + "p75": 24.8, + "p90": 29.1, + "p95": 30.9, + "p99": 37.7, + "p999": 37.7 + }, + "vusers.session_length": { + "min": 41.9, + "max": 76, + "count": 27, + "p50": 47, + "median": 47, + "p75": 53, + "p90": 57.4, + "p95": 58.6, + "p99": 59.7, + "p999": 59.7 + } + }, + "histograms": { + "http.response_time": { + "min": 5, + "max": 39, + "count": 54, + "p50": 10.9, + "median": 10.9, + "p75": 24.8, + "p90": 29.1, + "p95": 30.9, + "p99": 37.7, + "p999": 37.7 + }, + "vusers.session_length": { + "min": 41.9, + "max": 76, + "count": 27, + "p50": 47, + "median": 47, + "p75": 53, + "p90": 57.4, + "p95": 58.6, + "p99": 59.7, + "p999": 59.7 + } + } + } + ] +} \ No newline at end of file diff --git "a/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21110\354\264\21010\353\252\205Direct/report_user_search.json.html" "b/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21110\354\264\21010\353\252\205Direct/report_user_search.json.html" new file mode 100644 index 00000000..6951a236 --- /dev/null +++ "b/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21110\354\264\21010\353\252\205Direct/report_user_search.json.html" @@ -0,0 +1,1130 @@ + + + + + Artillery report + + + + + + + + + + + + + + + + + +
+
+
+
+ + + + +
+
+

+ Artillery Report +

+
+
+
+ +
+ +
+
+ + +
+
+
+
+
+ +
+
    +
+
+
+ +
+
+ + + + + + + + + +
+ Metric + + Value +
+
+
+

Errors at intervals

+ +
+ +
+
+
+
+
+
+
+ + +
+ +
+
+ + +
+
+
+
+
+
+ +
+ + + + + + + + \ No newline at end of file diff --git "a/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21110\354\264\21010\353\252\205NGINX/api_test.yaml" "b/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21110\354\264\21010\353\252\205NGINX/api_test.yaml" new file mode 100644 index 00000000..7f0ed21a --- /dev/null +++ "b/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21110\354\264\21010\353\252\205NGINX/api_test.yaml" @@ -0,0 +1,47 @@ +config: + target : 'http://49.50.167.202:80' + phases: +# - duration: 60 +# arrivalRate: 5 +# name: Warm up +# - duration: 120 +# arrivalRate: 5 +# rampTo: 50 +# name: Ramp up load + - duration: 10 + arrivalRate: 10 + name: Sustained load + +#before: +# flow: +# - post: +# url : '/api/user/auth/signin' +# json: +# id: 'kny@gmail.com' +# password: '12341234' +# capture: +# json: '$.result.accessToken' +# as: accessToken +# expect: +# - statusCode: 201 +scenarios: + - flow: + - get: + url: '/api/users?search=t' +# headers: +# authorization: 'Bearer {{accessToken}}' +# - get: +# url: '/api/user/followings' +# headers: +# authorization: 'Bearer {{accessToken}}' +# - think : 1 +# - get: +# url: '/api/communities' +# headers: +# authorization: 'Bearer {{accessToken}}' +# - think : 1 + - get: + url: '/api/communities/63956c42d1a615bf564e3af6/users' + headers: + authorization: 'Bearer {{accessToken}}' + diff --git "a/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21110\354\264\21010\353\252\205NGINX/report_user_search.json" "b/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21110\354\264\21010\353\252\205NGINX/report_user_search.json" new file mode 100644 index 00000000..93d2f572 --- /dev/null +++ "b/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21110\354\264\21010\353\252\205NGINX/report_user_search.json" @@ -0,0 +1,228 @@ +{ + "aggregate": { + "counters": { + "vusers.created_by_name.0": 100, + "vusers.created": 100, + "http.requests": 200, + "http.codes.200": 100, + "http.responses": 200, + "http.codes.401": 100, + "vusers.failed": 0, + "vusers.completed": 100 + }, + "rates": { + "http.request_rate": 20 + }, + "firstCounterAt": 1670738000970, + "firstHistogramAt": 1670738001061, + "lastCounterAt": 1670738010829, + "lastHistogramAt": 1670738010829, + "firstMetricAt": 1670738000970, + "lastMetricAt": 1670738010829, + "period": 1670738010000, + "summaries": { + "http.response_time": { + "min": 5, + "max": 73, + "count": 200, + "p50": 22, + "median": 22, + "p75": 29.1, + "p90": 37.7, + "p95": 41.7, + "p99": 63.4, + "p999": 67.4 + }, + "vusers.session_length": { + "min": 43.3, + "max": 109, + "count": 100, + "p50": 51.9, + "median": 51.9, + "p75": 59.7, + "p90": 70.1, + "p95": 80.6, + "p99": 104.6, + "p999": 104.6 + } + }, + "histograms": { + "http.response_time": { + "min": 5, + "max": 73, + "count": 200, + "p50": 22, + "median": 22, + "p75": 29.1, + "p90": 37.7, + "p95": 41.7, + "p99": 63.4, + "p999": 67.4 + }, + "vusers.session_length": { + "min": 43.3, + "max": 109, + "count": 100, + "p50": 51.9, + "median": 51.9, + "p75": 59.7, + "p90": 70.1, + "p95": 80.6, + "p99": 104.6, + "p999": 104.6 + } + } + }, + "intermediate": [ + { + "counters": { + "vusers.created_by_name.0": 91, + "vusers.created": 91, + "http.requests": 181, + "http.codes.200": 90, + "http.responses": 180, + "http.codes.401": 90, + "vusers.failed": 0, + "vusers.completed": 90 + }, + "rates": { + "http.request_rate": 20 + }, + "http.request_rate": null, + "firstCounterAt": 1670738000970, + "firstHistogramAt": 1670738001061, + "lastCounterAt": 1670738009970, + "lastHistogramAt": 1670738009826, + "firstMetricAt": 1670738000970, + "lastMetricAt": 1670738009970, + "period": "1670738000000", + "summaries": { + "http.response_time": { + "min": 5, + "max": 73, + "count": 180, + "p50": 22, + "median": 22, + "p75": 29.1, + "p90": 37.7, + "p95": 40.9, + "p99": 63.4, + "p999": 67.4 + }, + "vusers.session_length": { + "min": 43.3, + "max": 109, + "count": 90, + "p50": 51.9, + "median": 51.9, + "p75": 59.7, + "p90": 70.1, + "p95": 80.6, + "p99": 104.6, + "p999": 104.6 + } + }, + "histograms": { + "http.response_time": { + "min": 5, + "max": 73, + "count": 180, + "p50": 22, + "median": 22, + "p75": 29.1, + "p90": 37.7, + "p95": 40.9, + "p99": 63.4, + "p999": 67.4 + }, + "vusers.session_length": { + "min": 43.3, + "max": 109, + "count": 90, + "p50": 51.9, + "median": 51.9, + "p75": 59.7, + "p90": 70.1, + "p95": 80.6, + "p99": 104.6, + "p999": 104.6 + } + } + }, + { + "counters": { + "http.codes.200": 10, + "http.responses": 20, + "http.requests": 19, + "http.codes.401": 10, + "vusers.failed": 0, + "vusers.completed": 10, + "vusers.created_by_name.0": 9, + "vusers.created": 9 + }, + "rates": { + "http.request_rate": 19 + }, + "http.request_rate": null, + "firstCounterAt": 1670738010002, + "firstHistogramAt": 1670738010002, + "lastCounterAt": 1670738010829, + "lastHistogramAt": 1670738010829, + "firstMetricAt": 1670738010002, + "lastMetricAt": 1670738010829, + "period": "1670738010000", + "summaries": { + "http.response_time": { + "min": 6, + "max": 52, + "count": 20, + "p50": 13.9, + "median": 13.9, + "p75": 26.8, + "p90": 30.9, + "p95": 46.1, + "p99": 46.1, + "p999": 46.1 + }, + "vusers.session_length": { + "min": 43.4, + "max": 72.3, + "count": 10, + "p50": 47.9, + "median": 47.9, + "p75": 51.9, + "p90": 70.1, + "p95": 70.1, + "p99": 70.1, + "p999": 70.1 + } + }, + "histograms": { + "http.response_time": { + "min": 6, + "max": 52, + "count": 20, + "p50": 13.9, + "median": 13.9, + "p75": 26.8, + "p90": 30.9, + "p95": 46.1, + "p99": 46.1, + "p999": 46.1 + }, + "vusers.session_length": { + "min": 43.4, + "max": 72.3, + "count": 10, + "p50": 47.9, + "median": 47.9, + "p75": 51.9, + "p90": 70.1, + "p95": 70.1, + "p99": 70.1, + "p999": 70.1 + } + } + } + ] +} \ No newline at end of file diff --git "a/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21110\354\264\21010\353\252\205NGINX/report_user_search.json.html" "b/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21110\354\264\21010\353\252\205NGINX/report_user_search.json.html" new file mode 100644 index 00000000..6564b7f0 --- /dev/null +++ "b/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21110\354\264\21010\353\252\205NGINX/report_user_search.json.html" @@ -0,0 +1,1130 @@ + + + + + Artillery report + + + + + + + + + + + + + + + + + +
+
+
+
+ + + + +
+
+

+ Artillery Report +

+
+
+
+ +
+ +
+
+ + +
+
+
+
+
+ +
+
    +
+
+
+ +
+
+ + + + + + + + + +
+ Metric + + Value +
+
+
+

Errors at intervals

+ +
+ +
+
+
+
+
+
+
+ + +
+ +
+
+ + +
+
+
+
+
+
+ +
+ + + + + + + + \ No newline at end of file diff --git "a/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21150\354\264\210100\353\252\205Direct/api_test.yaml" "b/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21150\354\264\210100\353\252\205Direct/api_test.yaml" new file mode 100644 index 00000000..33eb772c --- /dev/null +++ "b/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21150\354\264\210100\353\252\205Direct/api_test.yaml" @@ -0,0 +1,47 @@ +config: + target : 'http://49.50.167.202:3001' + phases: +# - duration: 60 +# arrivalRate: 5 +# name: Warm up +# - duration: 120 +# arrivalRate: 5 +# rampTo: 50 +# name: Ramp up load + - duration: 50 + arrivalRate: 100 + name: Sustained load + +#before: +# flow: +# - post: +# url : '/api/user/auth/signin' +# json: +# id: 'kny@gmail.com' +# password: '12341234' +# capture: +# json: '$.result.accessToken' +# as: accessToken +# expect: +# - statusCode: 201 +scenarios: + - flow: + - get: + url: '/api/users?search=t' +# headers: +# authorization: 'Bearer {{accessToken}}' +# - get: +# url: '/api/user/followings' +# headers: +# authorization: 'Bearer {{accessToken}}' +# - think : 1 +# - get: +# url: '/api/communities' +# headers: +# authorization: 'Bearer {{accessToken}}' +# - think : 1 +# - get: +# url: '/api/communities/6390862b2258e789af7d7366/users' +# headers: +# authorization: 'Bearer {{accessToken}}' + diff --git "a/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21150\354\264\210100\353\252\205Direct/report_user_search.json" "b/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21150\354\264\210100\353\252\205Direct/report_user_search.json" new file mode 100644 index 00000000..ca2ef4e0 --- /dev/null +++ "b/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21150\354\264\210100\353\252\205Direct/report_user_search.json" @@ -0,0 +1,483 @@ +{ + "aggregate": { + "counters": { + "vusers.created_by_name.0": 5000, + "vusers.created": 5000, + "http.requests": 5000, + "http.codes.200": 2474, + "http.responses": 2474, + "vusers.failed": 2526, + "vusers.completed": 2474, + "errors.ETIMEDOUT": 2526 + }, + "rates": { + "http.request_rate": 86 + }, + "firstCounterAt": 1670736277854, + "firstHistogramAt": 1670736277943, + "lastCounterAt": 1670736338090, + "lastHistogramAt": 1670736312522, + "firstMetricAt": 1670736277854, + "lastMetricAt": 1670736338090, + "period": 1670736330000, + "summaries": { + "http.response_time": { + "min": 68, + "max": 9844, + "count": 2474, + "p50": 4770.6, + "median": 4770.6, + "p75": 7557.1, + "p90": 9047.6, + "p95": 9607.1, + "p99": 9801.2, + "p999": 9801.2 + }, + "vusers.session_length": { + "min": 85.4, + "max": 9861.6, + "count": 2474, + "p50": 4770.6, + "median": 4770.6, + "p75": 7557.1, + "p90": 9047.6, + "p95": 9607.1, + "p99": 9801.2, + "p999": 9801.2 + } + }, + "histograms": { + "http.response_time": { + "min": 68, + "max": 9844, + "count": 2474, + "p50": 4770.6, + "median": 4770.6, + "p75": 7557.1, + "p90": 9047.6, + "p95": 9607.1, + "p99": 9801.2, + "p999": 9801.2 + }, + "vusers.session_length": { + "min": 85.4, + "max": 9861.6, + "count": 2474, + "p50": 4770.6, + "median": 4770.6, + "p75": 7557.1, + "p90": 9047.6, + "p95": 9607.1, + "p99": 9801.2, + "p999": 9801.2 + } + } + }, + "intermediate": [ + { + "counters": { + "vusers.created_by_name.0": 203, + "vusers.created": 203, + "http.requests": 203, + "http.codes.200": 132, + "http.responses": 132, + "vusers.failed": 0, + "vusers.completed": 132 + }, + "rates": { + "http.request_rate": 107 + }, + "http.request_rate": null, + "firstCounterAt": 1670736277854, + "firstHistogramAt": 1670736277943, + "lastCounterAt": 1670736279990, + "lastHistogramAt": 1670736279981, + "firstMetricAt": 1670736277854, + "lastMetricAt": 1670736279990, + "period": "1670736270000", + "summaries": { + "http.response_time": { + "min": 68, + "max": 771, + "count": 132, + "p50": 432.7, + "median": 432.7, + "p75": 561.2, + "p90": 620.3, + "p95": 658.6, + "p99": 757.6, + "p999": 772.9 + }, + "vusers.session_length": { + "min": 85.4, + "max": 793, + "count": 132, + "p50": 450.4, + "median": 450.4, + "p75": 584.2, + "p90": 632.8, + "p95": 685.5, + "p99": 788.5, + "p999": 788.5 + } + }, + "histograms": { + "http.response_time": { + "min": 68, + "max": 771, + "count": 132, + "p50": 432.7, + "median": 432.7, + "p75": 561.2, + "p90": 620.3, + "p95": 658.6, + "p99": 757.6, + "p999": 772.9 + }, + "vusers.session_length": { + "min": 85.4, + "max": 793, + "count": 132, + "p50": 450.4, + "median": 450.4, + "p75": 584.2, + "p90": 632.8, + "p95": 685.5, + "p99": 788.5, + "p999": 788.5 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 1000, + "vusers.created": 1000, + "http.requests": 1000, + "http.codes.200": 771, + "http.responses": 771, + "vusers.failed": 0, + "vusers.completed": 769 + }, + "rates": { + "http.request_rate": 100 + }, + "http.request_rate": null, + "firstCounterAt": 1670736280010, + "firstHistogramAt": 1670736280027, + "lastCounterAt": 1670736289997, + "lastHistogramAt": 1670736289997, + "firstMetricAt": 1670736280010, + "lastMetricAt": 1670736289997, + "period": "1670736280000", + "summaries": { + "http.response_time": { + "min": 619, + "max": 3154, + "count": 771, + "p50": 1826.6, + "median": 1826.6, + "p75": 2369, + "p90": 2780, + "p95": 2893.5, + "p99": 3011.6, + "p999": 3134.5 + }, + "vusers.session_length": { + "min": 640, + "max": 3179.6, + "count": 769, + "p50": 1826.6, + "median": 1826.6, + "p75": 2369, + "p90": 2780, + "p95": 2893.5, + "p99": 3011.6, + "p999": 3197.8 + } + }, + "histograms": { + "http.response_time": { + "min": 619, + "max": 3154, + "count": 771, + "p50": 1826.6, + "median": 1826.6, + "p75": 2369, + "p90": 2780, + "p95": 2893.5, + "p99": 3011.6, + "p999": 3134.5 + }, + "vusers.session_length": { + "min": 640, + "max": 3179.6, + "count": 769, + "p50": 1826.6, + "median": 1826.6, + "p75": 2369, + "p90": 2780, + "p95": 2893.5, + "p99": 3011.6, + "p999": 3197.8 + } + } + }, + { + "counters": { + "vusers.failed": 0, + "vusers.completed": 654, + "http.codes.200": 652, + "http.responses": 652, + "vusers.created_by_name.0": 1000, + "vusers.created": 1000, + "http.requests": 1000 + }, + "rates": { + "http.request_rate": 100 + }, + "http.request_rate": null, + "firstCounterAt": 1670736290003, + "firstHistogramAt": 1670736290003, + "lastCounterAt": 1670736299995, + "lastHistogramAt": 1670736299995, + "firstMetricAt": 1670736290003, + "lastMetricAt": 1670736299995, + "period": "1670736290000", + "summaries": { + "vusers.session_length": { + "min": 2830.9, + "max": 6501.8, + "count": 654, + "p50": 4770.6, + "median": 4770.6, + "p75": 5944.6, + "p90": 6187.2, + "p95": 6312.2, + "p99": 6439.7, + "p999": 6439.7 + }, + "http.response_time": { + "min": 2812, + "max": 6484, + "count": 652, + "p50": 4770.6, + "median": 4770.6, + "p75": 5944.6, + "p90": 6187.2, + "p95": 6312.2, + "p99": 6439.7, + "p999": 6439.7 + } + }, + "histograms": { + "vusers.session_length": { + "min": 2830.9, + "max": 6501.8, + "count": 654, + "p50": 4770.6, + "median": 4770.6, + "p75": 5944.6, + "p90": 6187.2, + "p95": 6312.2, + "p99": 6439.7, + "p999": 6439.7 + }, + "http.response_time": { + "min": 2812, + "max": 6484, + "count": 652, + "p50": 4770.6, + "median": 4770.6, + "p75": 5944.6, + "p90": 6187.2, + "p95": 6312.2, + "p99": 6439.7, + "p999": 6439.7 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 1000, + "vusers.created": 1000, + "http.requests": 1000, + "http.codes.200": 734, + "http.responses": 734, + "vusers.failed": 0, + "vusers.completed": 733 + }, + "rates": { + "http.request_rate": 100 + }, + "http.request_rate": null, + "firstCounterAt": 1670736300003, + "firstHistogramAt": 1670736300003, + "lastCounterAt": 1670736309994, + "lastHistogramAt": 1670736309994, + "firstMetricAt": 1670736300003, + "lastMetricAt": 1670736309994, + "period": "1670736300000", + "summaries": { + "http.response_time": { + "min": 6471, + "max": 9138, + "count": 734, + "p50": 7865.6, + "median": 7865.6, + "p75": 8692.8, + "p90": 8868.4, + "p95": 9047.6, + "p99": 9047.6, + "p999": 9047.6 + }, + "vusers.session_length": { + "min": 6491, + "max": 9164.5, + "count": 733, + "p50": 7865.6, + "median": 7865.6, + "p75": 8692.8, + "p90": 9047.6, + "p95": 9047.6, + "p99": 9230.4, + "p999": 9230.4 + } + }, + "histograms": { + "http.response_time": { + "min": 6471, + "max": 9138, + "count": 734, + "p50": 7865.6, + "median": 7865.6, + "p75": 8692.8, + "p90": 8868.4, + "p95": 9047.6, + "p99": 9047.6, + "p999": 9047.6 + }, + "vusers.session_length": { + "min": 6491, + "max": 9164.5, + "count": 733, + "p50": 7865.6, + "median": 7865.6, + "p75": 8692.8, + "p90": 9047.6, + "p95": 9047.6, + "p99": 9230.4, + "p999": 9230.4 + } + } + }, + { + "counters": { + "vusers.failed": 729, + "vusers.completed": 186, + "vusers.created_by_name.0": 1000, + "vusers.created": 1000, + "http.requests": 1000, + "http.codes.200": 185, + "http.responses": 185, + "errors.ETIMEDOUT": 729 + }, + "rates": { + "http.request_rate": 100 + }, + "http.request_rate": null, + "firstCounterAt": 1670736310001, + "firstHistogramAt": 1670736310001, + "lastCounterAt": 1670736319989, + "lastHistogramAt": 1670736312522, + "firstMetricAt": 1670736310001, + "lastMetricAt": 1670736319989, + "period": "1670736310000", + "summaries": { + "vusers.session_length": { + "min": 9131.5, + "max": 9861.6, + "count": 186, + "p50": 9607.1, + "median": 9607.1, + "p75": 9801.2, + "p90": 9801.2, + "p95": 9801.2, + "p99": 9801.2, + "p999": 9801.2 + }, + "http.response_time": { + "min": 9116, + "max": 9844, + "count": 185, + "p50": 9607.1, + "median": 9607.1, + "p75": 9607.1, + "p90": 9801.2, + "p95": 9801.2, + "p99": 9801.2, + "p999": 9801.2 + } + }, + "histograms": { + "vusers.session_length": { + "min": 9131.5, + "max": 9861.6, + "count": 186, + "p50": 9607.1, + "median": 9607.1, + "p75": 9801.2, + "p90": 9801.2, + "p95": 9801.2, + "p99": 9801.2, + "p999": 9801.2 + }, + "http.response_time": { + "min": 9116, + "max": 9844, + "count": 185, + "p50": 9607.1, + "median": 9607.1, + "p75": 9607.1, + "p90": 9801.2, + "p95": 9801.2, + "p99": 9801.2, + "p999": 9801.2 + } + } + }, + { + "counters": { + "errors.ETIMEDOUT": 1000, + "vusers.failed": 1000, + "vusers.created_by_name.0": 797, + "vusers.created": 797, + "http.requests": 797 + }, + "rates": { + "http.request_rate": 100 + }, + "http.request_rate": null, + "firstCounterAt": 1670736320009, + "lastCounterAt": 1670736329991, + "firstMetricAt": 1670736320009, + "lastMetricAt": 1670736329991, + "period": "1670736320000", + "summaries": {}, + "histograms": {} + }, + { + "counters": { + "errors.ETIMEDOUT": 797, + "vusers.failed": 797 + }, + "rates": {}, + "firstCounterAt": 1670736330011, + "lastCounterAt": 1670736338090, + "firstMetricAt": 1670736330011, + "lastMetricAt": 1670736338090, + "period": "1670736330000", + "summaries": {}, + "histograms": {} + } + ] +} \ No newline at end of file diff --git "a/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21150\354\264\210100\353\252\205Direct/report_user_search.json.html" "b/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21150\354\264\210100\353\252\205Direct/report_user_search.json.html" new file mode 100644 index 00000000..42c5c004 --- /dev/null +++ "b/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21150\354\264\210100\353\252\205Direct/report_user_search.json.html" @@ -0,0 +1,1385 @@ + + + + + Artillery report + + + + + + + + + + + + + + + + + +
+
+
+
+ + + + +
+
+

+ Artillery Report +

+
+
+
+ +
+ +
+
+ + +
+
+
+
+
+ +
+
    +
+
+
+ +
+
+ + + + + + + + + +
+ Metric + + Value +
+
+
+

Errors at intervals

+ +
+ +
+
+
+
+
+
+
+ + +
+ +
+
+ + +
+
+
+
+
+
+ +
+ + + + + + + + \ No newline at end of file diff --git "a/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21150\354\264\210200\353\252\205Direct/api_test.yaml" "b/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21150\354\264\210200\353\252\205Direct/api_test.yaml" new file mode 100644 index 00000000..30a70bb8 --- /dev/null +++ "b/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21150\354\264\210200\353\252\205Direct/api_test.yaml" @@ -0,0 +1,47 @@ +config: + target : 'http://49.50.167.202:3001' + phases: +# - duration: 60 +# arrivalRate: 5 +# name: Warm up +# - duration: 120 +# arrivalRate: 5 +# rampTo: 50 +# name: Ramp up load + - duration: 50 + arrivalRate: 200 + name: Sustained load + +#before: +# flow: +# - post: +# url : '/api/user/auth/signin' +# json: +# id: 'kny@gmail.com' +# password: '12341234' +# capture: +# json: '$.result.accessToken' +# as: accessToken +# expect: +# - statusCode: 201 +scenarios: + - flow: + - get: + url: '/api/users?search=t' +# headers: +# authorization: 'Bearer {{accessToken}}' +# - get: +# url: '/api/user/followings' +# headers: +# authorization: 'Bearer {{accessToken}}' +# - think : 1 +# - get: +# url: '/api/communities' +# headers: +# authorization: 'Bearer {{accessToken}}' +# - think : 1 +# - get: +# url: '/api/communities/6390862b2258e789af7d7366/users' +# headers: +# authorization: 'Bearer {{accessToken}}' + diff --git "a/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21150\354\264\210200\353\252\205Direct/report_user_search.json" "b/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21150\354\264\210200\353\252\205Direct/report_user_search.json" new file mode 100644 index 00000000..dfabb22b --- /dev/null +++ "b/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21150\354\264\210200\353\252\205Direct/report_user_search.json" @@ -0,0 +1,375 @@ +{ + "aggregate": { + "counters": { + "vusers.created_by_name.0": 10000, + "vusers.created": 10000, + "http.requests": 10000, + "http.codes.200": 818, + "http.responses": 818, + "vusers.failed": 9182, + "vusers.completed": 818, + "errors.ETIMEDOUT": 9182 + }, + "rates": { + "http.request_rate": 172 + }, + "firstCounterAt": 1670735988107, + "firstHistogramAt": 1670735988170, + "lastCounterAt": 1670736048373, + "lastHistogramAt": 1670736002168, + "firstMetricAt": 1670735988107, + "lastMetricAt": 1670736048373, + "period": 1670736040000, + "summaries": { + "http.response_time": { + "min": 50, + "max": 9960, + "count": 818, + "p50": 4867, + "median": 4867, + "p75": 7407.5, + "p90": 8692.8, + "p95": 9416.8, + "p99": 9801.2, + "p999": 9801.2 + }, + "vusers.session_length": { + "min": 72.8, + "max": 9976.3, + "count": 818, + "p50": 4867, + "median": 4867, + "p75": 7407.5, + "p90": 8692.8, + "p95": 9416.8, + "p99": 9801.2, + "p999": 9801.2 + } + }, + "histograms": { + "http.response_time": { + "min": 50, + "max": 9960, + "count": 818, + "p50": 4867, + "median": 4867, + "p75": 7407.5, + "p90": 8692.8, + "p95": 9416.8, + "p99": 9801.2, + "p999": 9801.2 + }, + "vusers.session_length": { + "min": 72.8, + "max": 9976.3, + "count": 818, + "p50": 4867, + "median": 4867, + "p75": 7407.5, + "p90": 8692.8, + "p95": 9416.8, + "p99": 9801.2, + "p999": 9801.2 + } + } + }, + "intermediate": [ + { + "counters": { + "vusers.created_by_name.0": 351, + "vusers.created": 351, + "http.requests": 351, + "http.codes.200": 99, + "http.responses": 99, + "vusers.failed": 0, + "vusers.completed": 99 + }, + "rates": { + "http.request_rate": 207 + }, + "http.request_rate": null, + "firstCounterAt": 1670735988107, + "firstHistogramAt": 1670735988170, + "lastCounterAt": 1670735989995, + "lastHistogramAt": 1670735989995, + "firstMetricAt": 1670735988107, + "lastMetricAt": 1670735989995, + "period": "1670735980000", + "summaries": { + "http.response_time": { + "min": 50, + "max": 1285, + "count": 99, + "p50": 699.4, + "median": 699.4, + "p75": 1043.3, + "p90": 1200.1, + "p95": 1224.4, + "p99": 1224.4, + "p999": 1224.4 + }, + "vusers.session_length": { + "min": 72.8, + "max": 1297.6, + "count": 99, + "p50": 713.5, + "median": 713.5, + "p75": 1043.3, + "p90": 1224.4, + "p95": 1249.1, + "p99": 1249.1, + "p999": 1249.1 + } + }, + "histograms": { + "http.response_time": { + "min": 50, + "max": 1285, + "count": 99, + "p50": 699.4, + "median": 699.4, + "p75": 1043.3, + "p90": 1200.1, + "p95": 1224.4, + "p99": 1224.4, + "p999": 1224.4 + }, + "vusers.session_length": { + "min": 72.8, + "max": 1297.6, + "count": 99, + "p50": 713.5, + "median": 713.5, + "p75": 1043.3, + "p90": 1224.4, + "p95": 1249.1, + "p99": 1249.1, + "p999": 1249.1 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 2000, + "vusers.created": 2000, + "http.requests": 2000, + "http.codes.200": 595, + "http.responses": 595, + "vusers.failed": 0, + "vusers.completed": 595 + }, + "rates": { + "http.request_rate": 200 + }, + "http.request_rate": null, + "firstCounterAt": 1670735990001, + "firstHistogramAt": 1670735990003, + "lastCounterAt": 1670735999987, + "lastHistogramAt": 1670735999898, + "firstMetricAt": 1670735990001, + "lastMetricAt": 1670735999987, + "period": "1670735990000", + "summaries": { + "http.response_time": { + "min": 1308, + "max": 8161, + "count": 595, + "p50": 4770.6, + "median": 4770.6, + "p75": 6439.7, + "p90": 7865.6, + "p95": 8024.5, + "p99": 8186.6, + "p999": 8186.6 + }, + "vusers.session_length": { + "min": 1327.6, + "max": 8182.7, + "count": 595, + "p50": 4770.6, + "median": 4770.6, + "p75": 6439.7, + "p90": 7865.6, + "p95": 8024.5, + "p99": 8186.6, + "p999": 8186.6 + } + }, + "histograms": { + "http.response_time": { + "min": 1308, + "max": 8161, + "count": 595, + "p50": 4770.6, + "median": 4770.6, + "p75": 6439.7, + "p90": 7865.6, + "p95": 8024.5, + "p99": 8186.6, + "p999": 8186.6 + }, + "vusers.session_length": { + "min": 1327.6, + "max": 8182.7, + "count": 595, + "p50": 4770.6, + "median": 4770.6, + "p75": 6439.7, + "p90": 7865.6, + "p95": 8024.5, + "p99": 8186.6, + "p999": 8186.6 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 2000, + "vusers.created": 2000, + "http.requests": 2000, + "http.codes.200": 124, + "http.responses": 124, + "vusers.failed": 1533, + "vusers.completed": 124, + "errors.ETIMEDOUT": 1533 + }, + "rates": { + "http.request_rate": 200 + }, + "http.request_rate": null, + "firstCounterAt": 1670736000001, + "firstHistogramAt": 1670736000053, + "lastCounterAt": 1670736009987, + "lastHistogramAt": 1670736002168, + "firstMetricAt": 1670736000001, + "lastMetricAt": 1670736009987, + "period": "1670736000000", + "summaries": { + "http.response_time": { + "min": 8317, + "max": 9960, + "count": 124, + "p50": 8868.4, + "median": 8868.4, + "p75": 9416.8, + "p90": 9801.2, + "p95": 9801.2, + "p99": 9801.2, + "p999": 9801.2 + }, + "vusers.session_length": { + "min": 8335.3, + "max": 9976.3, + "count": 124, + "p50": 8868.4, + "median": 8868.4, + "p75": 9416.8, + "p90": 9801.2, + "p95": 9801.2, + "p99": 9801.2, + "p999": 9801.2 + } + }, + "histograms": { + "http.response_time": { + "min": 8317, + "max": 9960, + "count": 124, + "p50": 8868.4, + "median": 8868.4, + "p75": 9416.8, + "p90": 9801.2, + "p95": 9801.2, + "p99": 9801.2, + "p999": 9801.2 + }, + "vusers.session_length": { + "min": 8335.3, + "max": 9976.3, + "count": 124, + "p50": 8868.4, + "median": 8868.4, + "p75": 9416.8, + "p90": 9801.2, + "p95": 9801.2, + "p99": 9801.2, + "p999": 9801.2 + } + } + }, + { + "counters": { + "errors.ETIMEDOUT": 2000, + "vusers.failed": 2000, + "vusers.created_by_name.0": 2000, + "vusers.created": 2000, + "http.requests": 2000 + }, + "rates": { + "http.request_rate": 200 + }, + "http.request_rate": null, + "firstCounterAt": 1670736010000, + "lastCounterAt": 1670736019987, + "firstMetricAt": 1670736010000, + "lastMetricAt": 1670736019987, + "period": "1670736010000", + "summaries": {}, + "histograms": {} + }, + { + "counters": { + "vusers.created_by_name.0": 2000, + "vusers.created": 2000, + "http.requests": 2000, + "errors.ETIMEDOUT": 2000, + "vusers.failed": 2000 + }, + "rates": { + "http.request_rate": 200 + }, + "http.request_rate": null, + "firstCounterAt": 1670736020000, + "lastCounterAt": 1670736029987, + "firstMetricAt": 1670736020000, + "lastMetricAt": 1670736029987, + "period": "1670736020000", + "summaries": {}, + "histograms": {} + }, + { + "counters": { + "vusers.created_by_name.0": 1649, + "vusers.created": 1649, + "http.requests": 1649, + "errors.ETIMEDOUT": 2000, + "vusers.failed": 2000 + }, + "rates": { + "http.request_rate": 200 + }, + "http.request_rate": null, + "firstCounterAt": 1670736030000, + "lastCounterAt": 1670736039988, + "firstMetricAt": 1670736030000, + "lastMetricAt": 1670736039988, + "period": "1670736030000", + "summaries": {}, + "histograms": {} + }, + { + "counters": { + "errors.ETIMEDOUT": 1649, + "vusers.failed": 1649 + }, + "rates": {}, + "firstCounterAt": 1670736040002, + "lastCounterAt": 1670736048373, + "firstMetricAt": 1670736040002, + "lastMetricAt": 1670736048373, + "period": "1670736040000", + "summaries": {}, + "histograms": {} + } + ] +} \ No newline at end of file diff --git "a/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21150\354\264\210200\353\252\205Direct/report_user_search.json.html" "b/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21150\354\264\210200\353\252\205Direct/report_user_search.json.html" new file mode 100644 index 00000000..b0ab15db --- /dev/null +++ "b/server/artillery/result/NGINX_or_Direct/\354\202\254\354\232\251\354\236\220\352\262\200\354\203\21150\354\264\210200\353\252\205Direct/report_user_search.json.html" @@ -0,0 +1,1277 @@ + + + + + Artillery report + + + + + + + + + + + + + + + + + +
+
+
+
+ + + + +
+
+

+ Artillery Report +

+
+
+
+ +
+ +
+
+ + +
+
+
+
+
+ +
+
    +
+
+
+ +
+
+ + + + + + + + + +
+ Metric + + Value +
+
+
+

Errors at intervals

+ +
+ +
+
+
+
+
+
+
+ + +
+ +
+
+ + +
+
+
+
+
+
+ +
+ + + + + + + + \ No newline at end of file diff --git "a/server/artillery/result/NGINX_or_Direct/\354\273\244\353\256\244\353\213\210\355\213\260\353\202\264\354\202\254\354\232\251\354\236\22010\354\264\21010\353\252\205Direct/api_test.yaml" "b/server/artillery/result/NGINX_or_Direct/\354\273\244\353\256\244\353\213\210\355\213\260\353\202\264\354\202\254\354\232\251\354\236\22010\354\264\21010\353\252\205Direct/api_test.yaml" new file mode 100644 index 00000000..6ecd678e --- /dev/null +++ "b/server/artillery/result/NGINX_or_Direct/\354\273\244\353\256\244\353\213\210\355\213\260\353\202\264\354\202\254\354\232\251\354\236\22010\354\264\21010\353\252\205Direct/api_test.yaml" @@ -0,0 +1,47 @@ +config: + target : 'http://49.50.167.202:3001' + phases: +# - duration: 60 +# arrivalRate: 5 +# name: Warm up +# - duration: 120 +# arrivalRate: 5 +# rampTo: 50 +# name: Ramp up load + - duration: 10 + arrivalRate: 10 + name: Sustained load + +before: + flow: + - post: + url : '/api/user/auth/signin' + json: + id: 'kny@gmail.com' + password: '12341234' + capture: + json: '$.result.accessToken' + as: accessToken + expect: + - statusCode: 201 +scenarios: + - flow: +# - get: +# url: '/api/users?search=t' +# headers: +# authorization: 'Bearer {{accessToken}}' +# - get: +# url: '/api/user/followings' +# headers: +# authorization: 'Bearer {{accessToken}}' +# - think : 1 +# - get: +# url: '/api/communities' +# headers: +# authorization: 'Bearer {{accessToken}}' +# - think : 1 + - get: + url: '/api/communities/63956c42d1a615bf564e3af6/users' + headers: + authorization: 'Bearer {{accessToken}}' + diff --git "a/server/artillery/result/NGINX_or_Direct/\354\273\244\353\256\244\353\213\210\355\213\260\353\202\264\354\202\254\354\232\251\354\236\22010\354\264\21010\353\252\205Direct/report_community_users.json" "b/server/artillery/result/NGINX_or_Direct/\354\273\244\353\256\244\353\213\210\355\213\260\353\202\264\354\202\254\354\232\251\354\236\22010\354\264\21010\353\252\205Direct/report_community_users.json" new file mode 100644 index 00000000..07732f67 --- /dev/null +++ "b/server/artillery/result/NGINX_or_Direct/\354\273\244\353\256\244\353\213\210\355\213\260\353\202\264\354\202\254\354\232\251\354\236\22010\354\264\21010\353\252\205Direct/report_community_users.json" @@ -0,0 +1,225 @@ +{ + "aggregate": { + "counters": { + "vusers.created_by_name.0": 100, + "vusers.created": 100, + "http.requests": 100, + "http.codes.200": 100, + "http.responses": 100, + "vusers.failed": 0, + "vusers.completed": 100 + }, + "rates": { + "http.request_rate": 17 + }, + "firstCounterAt": 1670737172600, + "firstHistogramAt": 1670737172682, + "lastCounterAt": 1670737182451, + "lastHistogramAt": 1670737182451, + "firstMetricAt": 1670737172600, + "lastMetricAt": 1670737182451, + "period": 1670737180000, + "summaries": { + "http.response_time": { + "min": 31, + "max": 118, + "count": 100, + "p50": 37.7, + "median": 37.7, + "p75": 40, + "p90": 47.9, + "p95": 67.4, + "p99": 96.6, + "p999": 96.6 + }, + "vusers.session_length": { + "min": 38.8, + "max": 139.8, + "count": 100, + "p50": 46.1, + "median": 46.1, + "p75": 50.9, + "p90": 61, + "p95": 76, + "p99": 104.6, + "p999": 104.6 + } + }, + "histograms": { + "http.response_time": { + "min": 31, + "max": 118, + "count": 100, + "p50": 37.7, + "median": 37.7, + "p75": 40, + "p90": 47.9, + "p95": 67.4, + "p99": 96.6, + "p999": 96.6 + }, + "vusers.session_length": { + "min": 38.8, + "max": 139.8, + "count": 100, + "p50": 46.1, + "median": 46.1, + "p75": 50.9, + "p90": 61, + "p95": 76, + "p99": 104.6, + "p999": 104.6 + } + } + }, + "intermediate": [ + { + "counters": { + "vusers.created_by_name.0": 73, + "vusers.created": 73, + "http.requests": 73, + "http.codes.200": 73, + "http.responses": 73, + "vusers.failed": 0, + "vusers.completed": 73 + }, + "rates": { + "http.request_rate": 10 + }, + "http.request_rate": null, + "firstCounterAt": 1670737172600, + "firstHistogramAt": 1670737172682, + "lastCounterAt": 1670737179756, + "lastHistogramAt": 1670737179756, + "firstMetricAt": 1670737172600, + "lastMetricAt": 1670737179756, + "period": "1670737170000", + "summaries": { + "http.response_time": { + "min": 31, + "max": 118, + "count": 73, + "p50": 37.7, + "median": 37.7, + "p75": 41.7, + "p90": 47.9, + "p95": 63.4, + "p99": 79.1, + "p999": 79.1 + }, + "vusers.session_length": { + "min": 38.9, + "max": 139.8, + "count": 73, + "p50": 47, + "median": 47, + "p75": 51.9, + "p90": 61, + "p95": 74.4, + "p99": 92.8, + "p999": 92.8 + } + }, + "histograms": { + "http.response_time": { + "min": 31, + "max": 118, + "count": 73, + "p50": 37.7, + "median": 37.7, + "p75": 41.7, + "p90": 47.9, + "p95": 63.4, + "p99": 79.1, + "p999": 79.1 + }, + "vusers.session_length": { + "min": 38.9, + "max": 139.8, + "count": 73, + "p50": 47, + "median": 47, + "p75": 51.9, + "p90": 61, + "p95": 74.4, + "p99": 92.8, + "p999": 92.8 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 27, + "vusers.created": 27, + "http.requests": 27, + "http.codes.200": 27, + "http.responses": 27, + "vusers.failed": 0, + "vusers.completed": 27 + }, + "rates": { + "http.request_rate": 17 + }, + "http.request_rate": null, + "firstCounterAt": 1670737180099, + "firstHistogramAt": 1670737180144, + "lastCounterAt": 1670737182451, + "lastHistogramAt": 1670737182451, + "firstMetricAt": 1670737180099, + "lastMetricAt": 1670737182451, + "period": "1670737180000", + "summaries": { + "http.response_time": { + "min": 31, + "max": 97, + "count": 27, + "p50": 36.2, + "median": 36.2, + "p75": 37, + "p90": 40.9, + "p95": 47, + "p99": 74.4, + "p999": 74.4 + }, + "vusers.session_length": { + "min": 38.8, + "max": 103.7, + "count": 27, + "p50": 45.2, + "median": 45.2, + "p75": 47.9, + "p90": 55.2, + "p95": 56.3, + "p99": 82.3, + "p999": 82.3 + } + }, + "histograms": { + "http.response_time": { + "min": 31, + "max": 97, + "count": 27, + "p50": 36.2, + "median": 36.2, + "p75": 37, + "p90": 40.9, + "p95": 47, + "p99": 74.4, + "p999": 74.4 + }, + "vusers.session_length": { + "min": 38.8, + "max": 103.7, + "count": 27, + "p50": 45.2, + "median": 45.2, + "p75": 47.9, + "p90": 55.2, + "p95": 56.3, + "p99": 82.3, + "p999": 82.3 + } + } + } + ] +} \ No newline at end of file diff --git "a/server/artillery/result/NGINX_or_Direct/\354\273\244\353\256\244\353\213\210\355\213\260\353\202\264\354\202\254\354\232\251\354\236\22010\354\264\21010\353\252\205Direct/report_community_users.json.html" "b/server/artillery/result/NGINX_or_Direct/\354\273\244\353\256\244\353\213\210\355\213\260\353\202\264\354\202\254\354\232\251\354\236\22010\354\264\21010\353\252\205Direct/report_community_users.json.html" new file mode 100644 index 00000000..6e5da2f4 --- /dev/null +++ "b/server/artillery/result/NGINX_or_Direct/\354\273\244\353\256\244\353\213\210\355\213\260\353\202\264\354\202\254\354\232\251\354\236\22010\354\264\21010\353\252\205Direct/report_community_users.json.html" @@ -0,0 +1,1127 @@ + + + + + Artillery report + + + + + + + + + + + + + + + + + +
+
+
+
+ + + + +
+
+

+ Artillery Report +

+
+
+
+ +
+ +
+
+ + +
+
+
+
+
+ +
+
    +
+
+
+ +
+
+ + + + + + + + + +
+ Metric + + Value +
+
+
+

Errors at intervals

+ +
+ +
+
+
+
+
+
+
+ + +
+ +
+
+ + +
+
+
+
+
+
+ +
+ + + + + + + + \ No newline at end of file diff --git "a/server/artillery/result/NGINX_or_Direct/\354\273\244\353\256\244\353\213\210\355\213\260\353\202\264\354\202\254\354\232\251\354\236\22010\354\264\21010\353\252\205NGINX/api_test.yaml" "b/server/artillery/result/NGINX_or_Direct/\354\273\244\353\256\244\353\213\210\355\213\260\353\202\264\354\202\254\354\232\251\354\236\22010\354\264\21010\353\252\205NGINX/api_test.yaml" new file mode 100644 index 00000000..51445858 --- /dev/null +++ "b/server/artillery/result/NGINX_or_Direct/\354\273\244\353\256\244\353\213\210\355\213\260\353\202\264\354\202\254\354\232\251\354\236\22010\354\264\21010\353\252\205NGINX/api_test.yaml" @@ -0,0 +1,47 @@ +config: + target : 'http://49.50.167.202:80' + phases: +# - duration: 60 +# arrivalRate: 5 +# name: Warm up +# - duration: 120 +# arrivalRate: 5 +# rampTo: 50 +# name: Ramp up load + - duration: 10 + arrivalRate: 10 + name: Sustained load + +before: + flow: + - post: + url : '/api/user/auth/signin' + json: + id: 'kny@gmail.com' + password: '12341234' + capture: + json: '$.result.accessToken' + as: accessToken + expect: + - statusCode: 201 +scenarios: + - flow: +# - get: +# url: '/api/users?search=t' +# headers: +# authorization: 'Bearer {{accessToken}}' +# - get: +# url: '/api/user/followings' +# headers: +# authorization: 'Bearer {{accessToken}}' +# - think : 1 +# - get: +# url: '/api/communities' +# headers: +# authorization: 'Bearer {{accessToken}}' +# - think : 1 + - get: + url: '/api/communities/63956c42d1a615bf564e3af6/users' + headers: + authorization: 'Bearer {{accessToken}}' + diff --git "a/server/artillery/result/NGINX_or_Direct/\354\273\244\353\256\244\353\213\210\355\213\260\353\202\264\354\202\254\354\232\251\354\236\22010\354\264\21010\353\252\205NGINX/report_community_users.json" "b/server/artillery/result/NGINX_or_Direct/\354\273\244\353\256\244\353\213\210\355\213\260\353\202\264\354\202\254\354\232\251\354\236\22010\354\264\21010\353\252\205NGINX/report_community_users.json" new file mode 100644 index 00000000..234e0a8d --- /dev/null +++ "b/server/artillery/result/NGINX_or_Direct/\354\273\244\353\256\244\353\213\210\355\213\260\353\202\264\354\202\254\354\232\251\354\236\22010\354\264\21010\353\252\205NGINX/report_community_users.json" @@ -0,0 +1,76 @@ +{ + "aggregate": { + "counters": { + "vusers.created_by_name.0": 100, + "vusers.created": 100, + "http.requests": 100, + "http.codes.200": 100, + "http.responses": 100, + "vusers.failed": 0, + "vusers.completed": 100 + }, + "rates": { + "http.request_rate": 10 + }, + "firstCounterAt": 1670737359443, + "firstHistogramAt": 1670737359520, + "lastCounterAt": 1670737369292, + "lastHistogramAt": 1670737369292, + "firstMetricAt": 1670737359443, + "lastMetricAt": 1670737369292, + "period": 1670737360000, + "summaries": { + "http.response_time": { + "min": 32, + "max": 126, + "count": 100, + "p50": 43.4, + "median": 43.4, + "p75": 49.9, + "p90": 76, + "p95": 92.8, + "p99": 100.5, + "p999": 100.5 + }, + "vusers.session_length": { + "min": 39.8, + "max": 139.7, + "count": 100, + "p50": 51.9, + "median": 51.9, + "p75": 61, + "p90": 83.9, + "p95": 102.5, + "p99": 111.1, + "p999": 111.1 + } + }, + "histograms": { + "http.response_time": { + "min": 32, + "max": 126, + "count": 100, + "p50": 43.4, + "median": 43.4, + "p75": 49.9, + "p90": 76, + "p95": 92.8, + "p99": 100.5, + "p999": 100.5 + }, + "vusers.session_length": { + "min": 39.8, + "max": 139.7, + "count": 100, + "p50": 51.9, + "median": 51.9, + "p75": 61, + "p90": 83.9, + "p95": 102.5, + "p99": 111.1, + "p999": 111.1 + } + } + }, + "intermediate": [] +} \ No newline at end of file diff --git "a/server/artillery/result/NGINX_or_Direct/\354\273\244\353\256\244\353\213\210\355\213\260\353\202\264\354\202\254\354\232\251\354\236\22010\354\264\21010\353\252\205NGINX/report_community_users.json.html" "b/server/artillery/result/NGINX_or_Direct/\354\273\244\353\256\244\353\213\210\355\213\260\353\202\264\354\202\254\354\232\251\354\236\22010\354\264\21010\353\252\205NGINX/report_community_users.json.html" new file mode 100644 index 00000000..ee6cdb51 --- /dev/null +++ "b/server/artillery/result/NGINX_or_Direct/\354\273\244\353\256\244\353\213\210\355\213\260\353\202\264\354\202\254\354\232\251\354\236\22010\354\264\21010\353\252\205NGINX/report_community_users.json.html" @@ -0,0 +1,978 @@ + + + + + Artillery report + + + + + + + + + + + + + + + + + +
+
+
+
+ + + + +
+
+

+ Artillery Report +

+
+
+
+ +
+ +
+
+ + +
+
+
+
+
+ +
+
    +
+
+
+ +
+
+ + + + + + + + + +
+ Metric + + Value +
+
+
+

Errors at intervals

+ +
+ +
+
+
+
+
+
+
+ + +
+ +
+
+ + +
+
+
+
+
+
+ +
+ + + + + + + + \ No newline at end of file diff --git "a/server/artillery/result/PromiseAll_or_ForOf/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26020\354\264\2101\353\252\205NGINX_Promise/api_test.yaml" "b/server/artillery/result/PromiseAll_or_ForOf/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26020\354\264\2101\353\252\205NGINX_Promise/api_test.yaml" new file mode 100644 index 00000000..3f64b6ac --- /dev/null +++ "b/server/artillery/result/PromiseAll_or_ForOf/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26020\354\264\2101\353\252\205NGINX_Promise/api_test.yaml" @@ -0,0 +1,47 @@ +config: + target : 'http://49.50.167.202:5001' + phases: + - duration: 20 + arrivalRate: 1 + name: Warm up +# - duration: 120 +# arrivalRate: 5 +# rampTo: 50 +# name: Ramp up load +# - duration: 600 +# arrivalRate: 50 +# name: Sustained load + +before: + flow: + - post: + url : '/api/user/auth/signin' + json: + id: 'kny@gmail.com' + password: '12341234' + capture: + json: '$.result.accessToken' + as: accessToken + expect: + - statusCode: 201 +scenarios: + - flow: +# - get: +# url: '/api/users?search=t' +# headers: +# authorization: 'Bearer {{accessToken}}' +# - get: +# url: '/api/user/followings' +# headers: +# authorization: 'Bearer {{accessToken}}' +# - think : 1 + - get: + url: '/api/communities' + headers: + authorization: 'Bearer {{accessToken}}' +# - think : 1 +# - get: +# url: '/api/communities/63956c42d1a615bf564e3af6/users' +# headers: +# authorization: 'Bearer {{accessToken}}' + diff --git "a/server/artillery/result/PromiseAll_or_ForOf/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26020\354\264\2101\353\252\205NGINX_Promise/report_communities_promise.json" "b/server/artillery/result/PromiseAll_or_ForOf/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26020\354\264\2101\353\252\205NGINX_Promise/report_communities_promise.json" new file mode 100644 index 00000000..a78fe6ce --- /dev/null +++ "b/server/artillery/result/PromiseAll_or_ForOf/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26020\354\264\2101\353\252\205NGINX_Promise/report_communities_promise.json" @@ -0,0 +1,299 @@ +{ + "aggregate": { + "counters": { + "vusers.created_by_name.0": 20, + "vusers.created": 20, + "http.requests": 20, + "http.codes.200": 20, + "http.responses": 20, + "vusers.failed": 0, + "vusers.completed": 20 + }, + "rates": { + "http.request_rate": 1 + }, + "firstCounterAt": 1670752896056, + "firstHistogramAt": 1670752896124, + "lastCounterAt": 1670752915099, + "lastHistogramAt": 1670752915099, + "firstMetricAt": 1670752896056, + "lastMetricAt": 1670752915099, + "period": 1670752910000, + "summaries": { + "http.response_time": { + "min": 26, + "max": 47, + "count": 20, + "p50": 30.9, + "median": 30.9, + "p75": 34.1, + "p90": 37.7, + "p95": 44.3, + "p99": 44.3, + "p999": 44.3 + }, + "vusers.session_length": { + "min": 35.3, + "max": 70, + "count": 20, + "p50": 42.5, + "median": 42.5, + "p75": 45.2, + "p90": 54.1, + "p95": 57.4, + "p99": 57.4, + "p999": 57.4 + } + }, + "histograms": { + "http.response_time": { + "min": 26, + "max": 47, + "count": 20, + "p50": 30.9, + "median": 30.9, + "p75": 34.1, + "p90": 37.7, + "p95": 44.3, + "p99": 44.3, + "p999": 44.3 + }, + "vusers.session_length": { + "min": 35.3, + "max": 70, + "count": 20, + "p50": 42.5, + "median": 42.5, + "p75": 45.2, + "p90": 54.1, + "p95": 57.4, + "p99": 57.4, + "p999": 57.4 + } + } + }, + "intermediate": [ + { + "counters": { + "vusers.created_by_name.0": 4, + "vusers.created": 4, + "http.requests": 4, + "http.codes.200": 4, + "http.responses": 4, + "vusers.failed": 0, + "vusers.completed": 4 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1670752896056, + "firstHistogramAt": 1670752896124, + "lastCounterAt": 1670752899103, + "lastHistogramAt": 1670752899103, + "firstMetricAt": 1670752896056, + "lastMetricAt": 1670752899103, + "period": "1670752890000", + "summaries": { + "http.response_time": { + "min": 29, + "max": 47, + "count": 4, + "p50": 32.8, + "median": 32.8, + "p75": 34.1, + "p90": 34.1, + "p95": 34.1, + "p99": 34.1, + "p999": 34.1 + }, + "vusers.session_length": { + "min": 40.6, + "max": 70, + "count": 4, + "p50": 45.2, + "median": 45.2, + "p75": 47.9, + "p90": 47.9, + "p95": 47.9, + "p99": 47.9, + "p999": 47.9 + } + }, + "histograms": { + "http.response_time": { + "min": 29, + "max": 47, + "count": 4, + "p50": 32.8, + "median": 32.8, + "p75": 34.1, + "p90": 34.1, + "p95": 34.1, + "p99": 34.1, + "p999": 34.1 + }, + "vusers.session_length": { + "min": 40.6, + "max": 70, + "count": 4, + "p50": 45.2, + "median": 45.2, + "p75": 47.9, + "p90": 47.9, + "p95": 47.9, + "p99": 47.9, + "p999": 47.9 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 10, + "vusers.created": 10, + "http.requests": 10, + "http.codes.200": 10, + "http.responses": 10, + "vusers.failed": 0, + "vusers.completed": 10 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1670752900055, + "firstHistogramAt": 1670752900112, + "lastCounterAt": 1670752909099, + "lastHistogramAt": 1670752909099, + "firstMetricAt": 1670752900055, + "lastMetricAt": 1670752909099, + "period": "1670752900000", + "summaries": { + "http.response_time": { + "min": 29, + "max": 44, + "count": 10, + "p50": 34.1, + "median": 34.1, + "p75": 34.1, + "p90": 37.7, + "p95": 37.7, + "p99": 37.7, + "p999": 37.7 + }, + "vusers.session_length": { + "min": 36.3, + "max": 56.8, + "count": 10, + "p50": 43.4, + "median": 43.4, + "p75": 43.4, + "p90": 54.1, + "p95": 54.1, + "p99": 54.1, + "p999": 54.1 + } + }, + "histograms": { + "http.response_time": { + "min": 29, + "max": 44, + "count": 10, + "p50": 34.1, + "median": 34.1, + "p75": 34.1, + "p90": 37.7, + "p95": 37.7, + "p99": 37.7, + "p999": 37.7 + }, + "vusers.session_length": { + "min": 36.3, + "max": 56.8, + "count": 10, + "p50": 43.4, + "median": 43.4, + "p75": 43.4, + "p90": 54.1, + "p95": 54.1, + "p99": 54.1, + "p999": 54.1 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 6, + "vusers.created": 6, + "http.requests": 6, + "http.codes.200": 6, + "http.responses": 6, + "vusers.failed": 0, + "vusers.completed": 6 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1670752910055, + "firstHistogramAt": 1670752910090, + "lastCounterAt": 1670752915099, + "lastHistogramAt": 1670752915099, + "firstMetricAt": 1670752910055, + "lastMetricAt": 1670752915099, + "period": "1670752910000", + "summaries": { + "http.response_time": { + "min": 26, + "max": 35, + "count": 6, + "p50": 29.1, + "median": 29.1, + "p75": 30.3, + "p90": 30.9, + "p95": 30.9, + "p99": 30.9, + "p999": 30.9 + }, + "vusers.session_length": { + "min": 35.3, + "max": 43.8, + "count": 6, + "p50": 39.3, + "median": 39.3, + "p75": 40.9, + "p90": 42.5, + "p95": 42.5, + "p99": 42.5, + "p999": 42.5 + } + }, + "histograms": { + "http.response_time": { + "min": 26, + "max": 35, + "count": 6, + "p50": 29.1, + "median": 29.1, + "p75": 30.3, + "p90": 30.9, + "p95": 30.9, + "p99": 30.9, + "p999": 30.9 + }, + "vusers.session_length": { + "min": 35.3, + "max": 43.8, + "count": 6, + "p50": 39.3, + "median": 39.3, + "p75": 40.9, + "p90": 42.5, + "p95": 42.5, + "p99": 42.5, + "p999": 42.5 + } + } + } + ] +} \ No newline at end of file diff --git "a/server/artillery/result/PromiseAll_or_ForOf/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26020\354\264\2101\353\252\205NGINX_Promise/report_communities_promise.json.html" "b/server/artillery/result/PromiseAll_or_ForOf/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26020\354\264\2101\353\252\205NGINX_Promise/report_communities_promise.json.html" new file mode 100644 index 00000000..c975050d --- /dev/null +++ "b/server/artillery/result/PromiseAll_or_ForOf/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26020\354\264\2101\353\252\205NGINX_Promise/report_communities_promise.json.html" @@ -0,0 +1,1201 @@ + + + + + Artillery report + + + + + + + + + + + + + + + + + +
+
+
+
+ + + + +
+
+

+ Artillery Report +

+
+
+
+ +
+ +
+
+ + +
+
+
+
+
+ +
+
    +
+
+
+ +
+
+ + + + + + + + + +
+ Metric + + Value +
+
+
+

Errors at intervals

+ +
+ +
+
+
+
+
+
+
+ + +
+ +
+
+ + +
+
+
+
+
+
+ +
+ + + + + + + + \ No newline at end of file diff --git "a/server/artillery/result/PromiseAll_or_ForOf/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26020\354\264\2101\353\252\205NGINX_noPromise/api_test.yaml" "b/server/artillery/result/PromiseAll_or_ForOf/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26020\354\264\2101\353\252\205NGINX_noPromise/api_test.yaml" new file mode 100644 index 00000000..3f64b6ac --- /dev/null +++ "b/server/artillery/result/PromiseAll_or_ForOf/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26020\354\264\2101\353\252\205NGINX_noPromise/api_test.yaml" @@ -0,0 +1,47 @@ +config: + target : 'http://49.50.167.202:5001' + phases: + - duration: 20 + arrivalRate: 1 + name: Warm up +# - duration: 120 +# arrivalRate: 5 +# rampTo: 50 +# name: Ramp up load +# - duration: 600 +# arrivalRate: 50 +# name: Sustained load + +before: + flow: + - post: + url : '/api/user/auth/signin' + json: + id: 'kny@gmail.com' + password: '12341234' + capture: + json: '$.result.accessToken' + as: accessToken + expect: + - statusCode: 201 +scenarios: + - flow: +# - get: +# url: '/api/users?search=t' +# headers: +# authorization: 'Bearer {{accessToken}}' +# - get: +# url: '/api/user/followings' +# headers: +# authorization: 'Bearer {{accessToken}}' +# - think : 1 + - get: + url: '/api/communities' + headers: + authorization: 'Bearer {{accessToken}}' +# - think : 1 +# - get: +# url: '/api/communities/63956c42d1a615bf564e3af6/users' +# headers: +# authorization: 'Bearer {{accessToken}}' + diff --git "a/server/artillery/result/PromiseAll_or_ForOf/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26020\354\264\2101\353\252\205NGINX_noPromise/report_communities_no_promise.json" "b/server/artillery/result/PromiseAll_or_ForOf/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26020\354\264\2101\353\252\205NGINX_noPromise/report_communities_no_promise.json" new file mode 100644 index 00000000..1199d6a2 --- /dev/null +++ "b/server/artillery/result/PromiseAll_or_ForOf/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26020\354\264\2101\353\252\205NGINX_noPromise/report_communities_no_promise.json" @@ -0,0 +1,299 @@ +{ + "aggregate": { + "counters": { + "vusers.created_by_name.0": 20, + "vusers.created": 20, + "http.requests": 20, + "http.codes.200": 20, + "http.responses": 20, + "vusers.failed": 0, + "vusers.completed": 20 + }, + "rates": { + "http.request_rate": 1 + }, + "firstCounterAt": 1670753455199, + "firstHistogramAt": 1670753455291, + "lastCounterAt": 1670753474268, + "lastHistogramAt": 1670753474268, + "firstMetricAt": 1670753455199, + "lastMetricAt": 1670753474268, + "period": 1670753470000, + "summaries": { + "http.response_time": { + "min": 51, + "max": 77, + "count": 20, + "p50": 55.2, + "median": 55.2, + "p75": 61, + "p90": 64.7, + "p95": 68.7, + "p99": 68.7, + "p999": 68.7 + }, + "vusers.session_length": { + "min": 59.7, + "max": 94, + "count": 20, + "p50": 67.4, + "median": 67.4, + "p75": 71.5, + "p90": 80.6, + "p95": 82.3, + "p99": 82.3, + "p999": 82.3 + } + }, + "histograms": { + "http.response_time": { + "min": 51, + "max": 77, + "count": 20, + "p50": 55.2, + "median": 55.2, + "p75": 61, + "p90": 64.7, + "p95": 68.7, + "p99": 68.7, + "p999": 68.7 + }, + "vusers.session_length": { + "min": 59.7, + "max": 94, + "count": 20, + "p50": 67.4, + "median": 67.4, + "p75": 71.5, + "p90": 80.6, + "p95": 82.3, + "p99": 82.3, + "p999": 82.3 + } + } + }, + "intermediate": [ + { + "counters": { + "vusers.created_by_name.0": 5, + "vusers.created": 5, + "http.requests": 5, + "http.codes.200": 5, + "http.responses": 5, + "vusers.failed": 0, + "vusers.completed": 5 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1670753455199, + "firstHistogramAt": 1670753455291, + "lastCounterAt": 1670753459265, + "lastHistogramAt": 1670753459265, + "firstMetricAt": 1670753455199, + "lastMetricAt": 1670753459265, + "period": "1670753450000", + "summaries": { + "http.response_time": { + "min": 51, + "max": 77, + "count": 5, + "p50": 55.2, + "median": 55.2, + "p75": 55.2, + "p90": 55.2, + "p95": 55.2, + "p99": 55.2, + "p999": 55.2 + }, + "vusers.session_length": { + "min": 59.7, + "max": 94, + "count": 5, + "p50": 64.7, + "median": 64.7, + "p75": 67.4, + "p90": 67.4, + "p95": 67.4, + "p99": 67.4, + "p999": 67.4 + } + }, + "histograms": { + "http.response_time": { + "min": 51, + "max": 77, + "count": 5, + "p50": 55.2, + "median": 55.2, + "p75": 55.2, + "p90": 55.2, + "p95": 55.2, + "p99": 55.2, + "p999": 55.2 + }, + "vusers.session_length": { + "min": 59.7, + "max": 94, + "count": 5, + "p50": 64.7, + "median": 64.7, + "p75": 67.4, + "p90": 67.4, + "p95": 67.4, + "p99": 67.4, + "p999": 67.4 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 10, + "vusers.created": 10, + "http.requests": 10, + "http.codes.200": 10, + "http.responses": 10, + "vusers.failed": 0, + "vusers.completed": 10 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1670753460198, + "firstHistogramAt": 1670753460279, + "lastCounterAt": 1670753469265, + "lastHistogramAt": 1670753469265, + "firstMetricAt": 1670753460198, + "lastMetricAt": 1670753469265, + "period": "1670753460000", + "summaries": { + "http.response_time": { + "min": 52, + "max": 69, + "count": 10, + "p50": 54.1, + "median": 54.1, + "p75": 61, + "p90": 64.7, + "p95": 64.7, + "p99": 64.7, + "p999": 64.7 + }, + "vusers.session_length": { + "min": 62.6, + "max": 81.7, + "count": 10, + "p50": 67.4, + "median": 67.4, + "p75": 71.5, + "p90": 80.6, + "p95": 80.6, + "p99": 80.6, + "p999": 80.6 + } + }, + "histograms": { + "http.response_time": { + "min": 52, + "max": 69, + "count": 10, + "p50": 54.1, + "median": 54.1, + "p75": 61, + "p90": 64.7, + "p95": 64.7, + "p99": 64.7, + "p999": 64.7 + }, + "vusers.session_length": { + "min": 62.6, + "max": 81.7, + "count": 10, + "p50": 67.4, + "median": 67.4, + "p75": 71.5, + "p90": 80.6, + "p95": 80.6, + "p99": 80.6, + "p999": 80.6 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 5, + "vusers.created": 5, + "http.requests": 5, + "http.codes.200": 5, + "http.responses": 5, + "vusers.failed": 0, + "vusers.completed": 5 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1670753470198, + "firstHistogramAt": 1670753470272, + "lastCounterAt": 1670753474268, + "lastHistogramAt": 1670753474268, + "firstMetricAt": 1670753470198, + "lastMetricAt": 1670753474268, + "period": "1670753470000", + "summaries": { + "http.response_time": { + "min": 53, + "max": 61, + "count": 5, + "p50": 58.6, + "median": 58.6, + "p75": 58.6, + "p90": 58.6, + "p95": 58.6, + "p99": 58.6, + "p999": 58.6 + }, + "vusers.session_length": { + "min": 61.1, + "max": 74.4, + "count": 5, + "p50": 70.1, + "median": 70.1, + "p75": 70.1, + "p90": 70.1, + "p95": 70.1, + "p99": 70.1, + "p999": 70.1 + } + }, + "histograms": { + "http.response_time": { + "min": 53, + "max": 61, + "count": 5, + "p50": 58.6, + "median": 58.6, + "p75": 58.6, + "p90": 58.6, + "p95": 58.6, + "p99": 58.6, + "p999": 58.6 + }, + "vusers.session_length": { + "min": 61.1, + "max": 74.4, + "count": 5, + "p50": 70.1, + "median": 70.1, + "p75": 70.1, + "p90": 70.1, + "p95": 70.1, + "p99": 70.1, + "p999": 70.1 + } + } + } + ] +} \ No newline at end of file diff --git "a/server/artillery/result/PromiseAll_or_ForOf/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26020\354\264\2101\353\252\205NGINX_noPromise/report_communities_no_promise.json.html" "b/server/artillery/result/PromiseAll_or_ForOf/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26020\354\264\2101\353\252\205NGINX_noPromise/report_communities_no_promise.json.html" new file mode 100644 index 00000000..b99cfc99 --- /dev/null +++ "b/server/artillery/result/PromiseAll_or_ForOf/\353\202\230\354\235\230\354\273\244\353\256\244\353\213\210\355\213\26020\354\264\2101\353\252\205NGINX_noPromise/report_communities_no_promise.json.html" @@ -0,0 +1,1201 @@ + + + + + Artillery report + + + + + + + + + + + + + + + + + +
+
+
+
+ + + + +
+
+

+ Artillery Report +

+
+
+
+ +
+ +
+
+ + +
+
+
+
+
+ +
+
    +
+
+
+ +
+
+ + + + + + + + + +
+ Metric + + Value +
+
+
+

Errors at intervals

+ +
+ +
+
+
+
+
+
+
+ + +
+ +
+
+ + +
+
+
+
+
+
+ +
+ + + + + + + + \ No newline at end of file diff --git a/server/artillery/result/Redis_Cache/report_cache_auth_me.json b/server/artillery/result/Redis_Cache/report_cache_auth_me.json new file mode 100644 index 00000000..4933d68d --- /dev/null +++ b/server/artillery/result/Redis_Cache/report_cache_auth_me.json @@ -0,0 +1,447 @@ +{ + "aggregate": { + "counters": { + "vusers.created_by_name.0": 40, + "vusers.created": 40, + "http.requests": 40, + "http.codes.200": 40, + "http.responses": 40, + "vusers.failed": 0, + "vusers.completed": 40 + }, + "rates": { + "http.request_rate": 1 + }, + "firstCounterAt": 1671001592067, + "firstHistogramAt": 1671001592098, + "lastCounterAt": 1671001631072, + "lastHistogramAt": 1671001631072, + "firstMetricAt": 1671001592067, + "lastMetricAt": 1671001631072, + "period": 1671001630000, + "summaries": { + "http.response_time": { + "min": 2, + "max": 17, + "count": 40, + "p50": 4, + "median": 4, + "p75": 5, + "p90": 6, + "p95": 7, + "p99": 7, + "p999": 7 + }, + "vusers.session_length": { + "min": 3.6, + "max": 32.5, + "count": 40, + "p50": 6.4, + "median": 6.4, + "p75": 7.9, + "p90": 9.9, + "p95": 11.4, + "p99": 12.6, + "p999": 12.6 + } + }, + "histograms": { + "http.response_time": { + "min": 2, + "max": 17, + "count": 40, + "p50": 4, + "median": 4, + "p75": 5, + "p90": 6, + "p95": 7, + "p99": 7, + "p999": 7 + }, + "vusers.session_length": { + "min": 3.6, + "max": 32.5, + "count": 40, + "p50": 6.4, + "median": 6.4, + "p75": 7.9, + "p90": 9.9, + "p95": 11.4, + "p99": 12.6, + "p999": 12.6 + } + } + }, + "intermediate": [ + { + "counters": { + "vusers.created_by_name.0": 8, + "vusers.created": 8, + "http.requests": 8, + "http.codes.200": 8, + "http.responses": 8, + "vusers.failed": 0, + "vusers.completed": 8 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1671001592067, + "firstHistogramAt": 1671001592098, + "lastCounterAt": 1671001599075, + "lastHistogramAt": 1671001599075, + "firstMetricAt": 1671001592067, + "lastMetricAt": 1671001599075, + "period": "1671001590000", + "summaries": { + "http.response_time": { + "min": 2, + "max": 17, + "count": 8, + "p50": 5, + "median": 5, + "p75": 6, + "p90": 7, + "p95": 7, + "p99": 7, + "p999": 7 + }, + "vusers.session_length": { + "min": 4.3, + "max": 32.5, + "count": 8, + "p50": 8.4, + "median": 8.4, + "p75": 10.7, + "p90": 12.6, + "p95": 12.6, + "p99": 12.6, + "p999": 12.6 + } + }, + "histograms": { + "http.response_time": { + "min": 2, + "max": 17, + "count": 8, + "p50": 5, + "median": 5, + "p75": 6, + "p90": 7, + "p95": 7, + "p99": 7, + "p999": 7 + }, + "vusers.session_length": { + "min": 4.3, + "max": 32.5, + "count": 8, + "p50": 8.4, + "median": 8.4, + "p75": 10.7, + "p90": 12.6, + "p95": 12.6, + "p99": 12.6, + "p999": 12.6 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 10, + "vusers.created": 10, + "http.requests": 10, + "http.codes.200": 10, + "http.responses": 10, + "vusers.failed": 0, + "vusers.completed": 10 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1671001600066, + "firstHistogramAt": 1671001600075, + "lastCounterAt": 1671001609071, + "lastHistogramAt": 1671001609071, + "firstMetricAt": 1671001600066, + "lastMetricAt": 1671001609071, + "period": "1671001600000", + "summaries": { + "http.response_time": { + "min": 2, + "max": 5, + "count": 10, + "p50": 3, + "median": 3, + "p75": 4, + "p90": 5, + "p95": 5, + "p99": 5, + "p999": 5 + }, + "vusers.session_length": { + "min": 3.8, + "max": 11.4, + "count": 10, + "p50": 6.6, + "median": 6.6, + "p75": 7.9, + "p90": 9.7, + "p95": 9.7, + "p99": 9.7, + "p999": 9.7 + } + }, + "histograms": { + "http.response_time": { + "min": 2, + "max": 5, + "count": 10, + "p50": 3, + "median": 3, + "p75": 4, + "p90": 5, + "p95": 5, + "p99": 5, + "p999": 5 + }, + "vusers.session_length": { + "min": 3.8, + "max": 11.4, + "count": 10, + "p50": 6.6, + "median": 6.6, + "p75": 7.9, + "p90": 9.7, + "p95": 9.7, + "p99": 9.7, + "p999": 9.7 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 10, + "vusers.created": 10, + "http.requests": 10, + "http.codes.200": 10, + "http.responses": 10, + "vusers.failed": 0, + "vusers.completed": 10 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1671001610066, + "firstHistogramAt": 1671001610070, + "lastCounterAt": 1671001619072, + "lastHistogramAt": 1671001619072, + "firstMetricAt": 1671001610066, + "lastMetricAt": 1671001619072, + "period": "1671001610000", + "summaries": { + "http.response_time": { + "min": 2, + "max": 6, + "count": 10, + "p50": 4, + "median": 4, + "p75": 5, + "p90": 6, + "p95": 6, + "p99": 6, + "p999": 6 + }, + "vusers.session_length": { + "min": 3.6, + "max": 7.7, + "count": 10, + "p50": 6.2, + "median": 6.2, + "p75": 7, + "p90": 7.6, + "p95": 7.6, + "p99": 7.6, + "p999": 7.6 + } + }, + "histograms": { + "http.response_time": { + "min": 2, + "max": 6, + "count": 10, + "p50": 4, + "median": 4, + "p75": 5, + "p90": 6, + "p95": 6, + "p99": 6, + "p999": 6 + }, + "vusers.session_length": { + "min": 3.6, + "max": 7.7, + "count": 10, + "p50": 6.2, + "median": 6.2, + "p75": 7, + "p90": 7.6, + "p95": 7.6, + "p99": 7.6, + "p999": 7.6 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 10, + "vusers.created": 10, + "http.requests": 10, + "http.codes.200": 10, + "http.responses": 10, + "vusers.failed": 0, + "vusers.completed": 10 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1671001620066, + "firstHistogramAt": 1671001620072, + "lastCounterAt": 1671001629072, + "lastHistogramAt": 1671001629072, + "firstMetricAt": 1671001620066, + "lastMetricAt": 1671001629072, + "period": "1671001620000", + "summaries": { + "http.response_time": { + "min": 3, + "max": 7, + "count": 10, + "p50": 4, + "median": 4, + "p75": 4, + "p90": 4, + "p95": 4, + "p99": 4, + "p999": 4 + }, + "vusers.session_length": { + "min": 5.2, + "max": 9.9, + "count": 10, + "p50": 6.1, + "median": 6.1, + "p75": 6.2, + "p90": 6.5, + "p95": 6.5, + "p99": 6.5, + "p999": 6.5 + } + }, + "histograms": { + "http.response_time": { + "min": 3, + "max": 7, + "count": 10, + "p50": 4, + "median": 4, + "p75": 4, + "p90": 4, + "p95": 4, + "p99": 4, + "p999": 4 + }, + "vusers.session_length": { + "min": 5.2, + "max": 9.9, + "count": 10, + "p50": 6.1, + "median": 6.1, + "p75": 6.2, + "p90": 6.5, + "p95": 6.5, + "p99": 6.5, + "p999": 6.5 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 2, + "vusers.created": 2, + "http.requests": 2, + "http.codes.200": 2, + "http.responses": 2, + "vusers.failed": 0, + "vusers.completed": 2 + }, + "rates": { + "http.request_rate": 2 + }, + "http.request_rate": null, + "firstCounterAt": 1671001630066, + "firstHistogramAt": 1671001630070, + "lastCounterAt": 1671001631072, + "lastHistogramAt": 1671001631072, + "firstMetricAt": 1671001630066, + "lastMetricAt": 1671001631072, + "period": "1671001630000", + "summaries": { + "http.response_time": { + "min": 2, + "max": 3, + "count": 2, + "p50": 2, + "median": 2, + "p75": 2, + "p90": 2, + "p95": 2, + "p99": 2, + "p999": 2 + }, + "vusers.session_length": { + "min": 3.8, + "max": 5.9, + "count": 2, + "p50": 3.8, + "median": 3.8, + "p75": 3.8, + "p90": 3.8, + "p95": 3.8, + "p99": 3.8, + "p999": 3.8 + } + }, + "histograms": { + "http.response_time": { + "min": 2, + "max": 3, + "count": 2, + "p50": 2, + "median": 2, + "p75": 2, + "p90": 2, + "p95": 2, + "p99": 2, + "p999": 2 + }, + "vusers.session_length": { + "min": 3.8, + "max": 5.9, + "count": 2, + "p50": 3.8, + "median": 3.8, + "p75": 3.8, + "p90": 3.8, + "p95": 3.8, + "p99": 3.8, + "p999": 3.8 + } + } + } + ] +} \ No newline at end of file diff --git a/server/artillery/result/Redis_Cache/report_cache_get_channel.json b/server/artillery/result/Redis_Cache/report_cache_get_channel.json new file mode 100644 index 00000000..5d6f3675 --- /dev/null +++ b/server/artillery/result/Redis_Cache/report_cache_get_channel.json @@ -0,0 +1,447 @@ +{ + "aggregate": { + "counters": { + "vusers.created_by_name.0": 40, + "vusers.created": 40, + "http.requests": 40, + "http.codes.200": 40, + "http.responses": 40, + "vusers.failed": 0, + "vusers.completed": 40 + }, + "rates": { + "http.request_rate": 1 + }, + "firstCounterAt": 1671002095389, + "firstHistogramAt": 1671002095426, + "lastCounterAt": 1671002134406, + "lastHistogramAt": 1671002134406, + "firstMetricAt": 1671002095389, + "lastMetricAt": 1671002134406, + "period": 1671002130000, + "summaries": { + "http.response_time": { + "min": 11, + "max": 28, + "count": 40, + "p50": 13.9, + "median": 13.9, + "p75": 16, + "p90": 19.1, + "p95": 21.1, + "p99": 22, + "p999": 22 + }, + "vusers.session_length": { + "min": 13, + "max": 37.6, + "count": 40, + "p50": 16.9, + "median": 16.9, + "p75": 18.7, + "p90": 22, + "p95": 24.3, + "p99": 24.8, + "p999": 24.8 + } + }, + "histograms": { + "http.response_time": { + "min": 11, + "max": 28, + "count": 40, + "p50": 13.9, + "median": 13.9, + "p75": 16, + "p90": 19.1, + "p95": 21.1, + "p99": 22, + "p999": 22 + }, + "vusers.session_length": { + "min": 13, + "max": 37.6, + "count": 40, + "p50": 16.9, + "median": 16.9, + "p75": 18.7, + "p90": 22, + "p95": 24.3, + "p99": 24.8, + "p999": 24.8 + } + } + }, + "intermediate": [ + { + "counters": { + "vusers.created_by_name.0": 5, + "vusers.created": 5, + "http.requests": 5, + "http.codes.200": 5, + "http.responses": 5, + "vusers.failed": 0, + "vusers.completed": 5 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1671002095389, + "firstHistogramAt": 1671002095426, + "lastCounterAt": 1671002099407, + "lastHistogramAt": 1671002099407, + "firstMetricAt": 1671002095389, + "lastMetricAt": 1671002099407, + "period": "1671002090000", + "summaries": { + "http.response_time": { + "min": 15, + "max": 28, + "count": 5, + "p50": 16, + "median": 16, + "p75": 21.1, + "p90": 21.1, + "p95": 21.1, + "p99": 21.1, + "p999": 21.1 + }, + "vusers.session_length": { + "min": 17.5, + "max": 37.6, + "count": 5, + "p50": 18.7, + "median": 18.7, + "p75": 24.8, + "p90": 24.8, + "p95": 24.8, + "p99": 24.8, + "p999": 24.8 + } + }, + "histograms": { + "http.response_time": { + "min": 15, + "max": 28, + "count": 5, + "p50": 16, + "median": 16, + "p75": 21.1, + "p90": 21.1, + "p95": 21.1, + "p99": 21.1, + "p999": 21.1 + }, + "vusers.session_length": { + "min": 17.5, + "max": 37.6, + "count": 5, + "p50": 18.7, + "median": 18.7, + "p75": 24.8, + "p90": 24.8, + "p95": 24.8, + "p99": 24.8, + "p999": 24.8 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 10, + "vusers.created": 10, + "http.requests": 10, + "http.codes.200": 10, + "http.responses": 10, + "vusers.failed": 0, + "vusers.completed": 10 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1671002100389, + "firstHistogramAt": 1671002100406, + "lastCounterAt": 1671002109408, + "lastHistogramAt": 1671002109408, + "firstMetricAt": 1671002100389, + "lastMetricAt": 1671002109408, + "period": "1671002100000", + "summaries": { + "http.response_time": { + "min": 14, + "max": 21, + "count": 10, + "p50": 15, + "median": 15, + "p75": 15, + "p90": 16.9, + "p95": 16.9, + "p99": 16.9, + "p999": 16.9 + }, + "vusers.session_length": { + "min": 16.9, + "max": 22.2, + "count": 10, + "p50": 18, + "median": 18, + "p75": 19.1, + "p90": 22, + "p95": 22, + "p99": 22, + "p999": 22 + } + }, + "histograms": { + "http.response_time": { + "min": 14, + "max": 21, + "count": 10, + "p50": 15, + "median": 15, + "p75": 15, + "p90": 16.9, + "p95": 16.9, + "p99": 16.9, + "p999": 16.9 + }, + "vusers.session_length": { + "min": 16.9, + "max": 22.2, + "count": 10, + "p50": 18, + "median": 18, + "p75": 19.1, + "p90": 22, + "p95": 22, + "p99": 22, + "p999": 22 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 10, + "vusers.created": 10, + "http.requests": 10, + "http.codes.200": 10, + "http.responses": 10, + "vusers.failed": 0, + "vusers.completed": 10 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1671002110389, + "firstHistogramAt": 1671002110407, + "lastCounterAt": 1671002119403, + "lastHistogramAt": 1671002119403, + "firstMetricAt": 1671002110389, + "lastMetricAt": 1671002119403, + "period": "1671002110000", + "summaries": { + "http.response_time": { + "min": 12, + "max": 22, + "count": 10, + "p50": 13.9, + "median": 13.9, + "p75": 13.9, + "p90": 19.1, + "p95": 19.1, + "p99": 19.1, + "p999": 19.1 + }, + "vusers.session_length": { + "min": 14.4, + "max": 24.5, + "count": 10, + "p50": 16.6, + "median": 16.6, + "p75": 18, + "p90": 21.5, + "p95": 21.5, + "p99": 21.5, + "p999": 21.5 + } + }, + "histograms": { + "http.response_time": { + "min": 12, + "max": 22, + "count": 10, + "p50": 13.9, + "median": 13.9, + "p75": 13.9, + "p90": 19.1, + "p95": 19.1, + "p99": 19.1, + "p999": 19.1 + }, + "vusers.session_length": { + "min": 14.4, + "max": 24.5, + "count": 10, + "p50": 16.6, + "median": 16.6, + "p75": 18, + "p90": 21.5, + "p95": 21.5, + "p99": 21.5, + "p999": 21.5 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 10, + "vusers.created": 10, + "http.requests": 10, + "http.codes.200": 10, + "http.responses": 10, + "vusers.failed": 0, + "vusers.completed": 10 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1671002120389, + "firstHistogramAt": 1671002120403, + "lastCounterAt": 1671002129404, + "lastHistogramAt": 1671002129404, + "firstMetricAt": 1671002120389, + "lastMetricAt": 1671002129404, + "period": "1671002120000", + "summaries": { + "http.response_time": { + "min": 11, + "max": 17, + "count": 10, + "p50": 13.1, + "median": 13.1, + "p75": 13.9, + "p90": 13.9, + "p95": 13.9, + "p99": 13.9, + "p999": 13.9 + }, + "vusers.session_length": { + "min": 13, + "max": 19.8, + "count": 10, + "p50": 16, + "median": 16, + "p75": 16.9, + "p90": 16.9, + "p95": 16.9, + "p99": 16.9, + "p999": 16.9 + } + }, + "histograms": { + "http.response_time": { + "min": 11, + "max": 17, + "count": 10, + "p50": 13.1, + "median": 13.1, + "p75": 13.9, + "p90": 13.9, + "p95": 13.9, + "p99": 13.9, + "p999": 13.9 + }, + "vusers.session_length": { + "min": 13, + "max": 19.8, + "count": 10, + "p50": 16, + "median": 16, + "p75": 16.9, + "p90": 16.9, + "p95": 16.9, + "p99": 16.9, + "p999": 16.9 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 5, + "vusers.created": 5, + "http.requests": 5, + "http.codes.200": 5, + "http.responses": 5, + "vusers.failed": 0, + "vusers.completed": 5 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1671002130389, + "firstHistogramAt": 1671002130404, + "lastCounterAt": 1671002134406, + "lastHistogramAt": 1671002134406, + "firstMetricAt": 1671002130389, + "lastMetricAt": 1671002134406, + "period": "1671002130000", + "summaries": { + "http.response_time": { + "min": 13, + "max": 16, + "count": 5, + "p50": 15, + "median": 15, + "p75": 15, + "p90": 15, + "p95": 15, + "p99": 15, + "p999": 15 + }, + "vusers.session_length": { + "min": 15.4, + "max": 17.2, + "count": 5, + "p50": 16.3, + "median": 16.3, + "p75": 17.3, + "p90": 17.3, + "p95": 17.3, + "p99": 17.3, + "p999": 17.3 + } + }, + "histograms": { + "http.response_time": { + "min": 13, + "max": 16, + "count": 5, + "p50": 15, + "median": 15, + "p75": 15, + "p90": 15, + "p95": 15, + "p99": 15, + "p999": 15 + }, + "vusers.session_length": { + "min": 15.4, + "max": 17.2, + "count": 5, + "p50": 16.3, + "median": 16.3, + "p75": 17.3, + "p90": 17.3, + "p95": 17.3, + "p99": 17.3, + "p999": 17.3 + } + } + } + ] +} \ No newline at end of file diff --git a/server/artillery/result/Redis_Cache/report_cache_get_community_users.json b/server/artillery/result/Redis_Cache/report_cache_get_community_users.json new file mode 100644 index 00000000..05733111 --- /dev/null +++ b/server/artillery/result/Redis_Cache/report_cache_get_community_users.json @@ -0,0 +1,373 @@ +{ + "aggregate": { + "counters": { + "vusers.created_by_name.0": 40, + "vusers.created": 40, + "http.requests": 40, + "http.codes.400": 40, + "http.responses": 40, + "vusers.failed": 0, + "vusers.completed": 40 + }, + "rates": { + "http.request_rate": 1 + }, + "firstCounterAt": 1671004850867, + "firstHistogramAt": 1671004850893, + "lastCounterAt": 1671004889880, + "lastHistogramAt": 1671004889880, + "firstMetricAt": 1671004850867, + "lastMetricAt": 1671004889880, + "period": 1671004880000, + "summaries": { + "http.response_time": { + "min": 9, + "max": 31, + "count": 40, + "p50": 12.1, + "median": 12.1, + "p75": 13.9, + "p90": 19.1, + "p95": 25.8, + "p99": 29.1, + "p999": 29.1 + }, + "vusers.session_length": { + "min": 12.1, + "max": 43.2, + "count": 40, + "p50": 15.6, + "median": 15.6, + "p75": 21.1, + "p90": 25.8, + "p95": 27.9, + "p99": 32.1, + "p999": 32.1 + } + }, + "histograms": { + "http.response_time": { + "min": 9, + "max": 31, + "count": 40, + "p50": 12.1, + "median": 12.1, + "p75": 13.9, + "p90": 19.1, + "p95": 25.8, + "p99": 29.1, + "p999": 29.1 + }, + "vusers.session_length": { + "min": 12.1, + "max": 43.2, + "count": 40, + "p50": 15.6, + "median": 15.6, + "p75": 21.1, + "p90": 25.8, + "p95": 27.9, + "p99": 32.1, + "p999": 32.1 + } + } + }, + "intermediate": [ + { + "counters": { + "vusers.created_by_name.0": 10, + "vusers.created": 10, + "http.requests": 10, + "http.codes.400": 10, + "http.responses": 10, + "vusers.failed": 0, + "vusers.completed": 10 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1671004850867, + "firstHistogramAt": 1671004850893, + "lastCounterAt": 1671004859886, + "lastHistogramAt": 1671004859886, + "firstMetricAt": 1671004850867, + "lastMetricAt": 1671004859886, + "period": "1671004850000", + "summaries": { + "http.response_time": { + "min": 10, + "max": 19, + "count": 10, + "p50": 13.1, + "median": 13.1, + "p75": 13.9, + "p90": 16.9, + "p95": 16.9, + "p99": 16.9, + "p999": 16.9 + }, + "vusers.session_length": { + "min": 13.9, + "max": 27.4, + "count": 10, + "p50": 18.7, + "median": 18.7, + "p75": 22.4, + "p90": 24.8, + "p95": 24.8, + "p99": 24.8, + "p999": 24.8 + } + }, + "histograms": { + "http.response_time": { + "min": 10, + "max": 19, + "count": 10, + "p50": 13.1, + "median": 13.1, + "p75": 13.9, + "p90": 16.9, + "p95": 16.9, + "p99": 16.9, + "p999": 16.9 + }, + "vusers.session_length": { + "min": 13.9, + "max": 27.4, + "count": 10, + "p50": 18.7, + "median": 18.7, + "p75": 22.4, + "p90": 24.8, + "p95": 24.8, + "p99": 24.8, + "p999": 24.8 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 10, + "vusers.created": 10, + "http.requests": 10, + "http.codes.400": 10, + "http.responses": 10, + "vusers.failed": 0, + "vusers.completed": 10 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1671004860866, + "firstHistogramAt": 1671004860881, + "lastCounterAt": 1671004869910, + "lastHistogramAt": 1671004869910, + "firstMetricAt": 1671004860866, + "lastMetricAt": 1671004869910, + "period": "1671004860000", + "summaries": { + "http.response_time": { + "min": 10, + "max": 31, + "count": 10, + "p50": 12.1, + "median": 12.1, + "p75": 16.9, + "p90": 25.8, + "p95": 25.8, + "p99": 25.8, + "p999": 25.8 + }, + "vusers.session_length": { + "min": 14.1, + "max": 43.2, + "count": 10, + "p50": 15.6, + "median": 15.6, + "p75": 21.1, + "p90": 27.9, + "p95": 27.9, + "p99": 27.9, + "p999": 27.9 + } + }, + "histograms": { + "http.response_time": { + "min": 10, + "max": 31, + "count": 10, + "p50": 12.1, + "median": 12.1, + "p75": 16.9, + "p90": 25.8, + "p95": 25.8, + "p99": 25.8, + "p999": 25.8 + }, + "vusers.session_length": { + "min": 14.1, + "max": 43.2, + "count": 10, + "p50": 15.6, + "median": 15.6, + "p75": 21.1, + "p90": 27.9, + "p95": 27.9, + "p99": 27.9, + "p999": 27.9 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 10, + "vusers.created": 10, + "http.requests": 10, + "http.codes.400": 10, + "http.responses": 10, + "vusers.failed": 0, + "vusers.completed": 10 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1671004870867, + "firstHistogramAt": 1671004870881, + "lastCounterAt": 1671004879881, + "lastHistogramAt": 1671004879881, + "firstMetricAt": 1671004870867, + "lastMetricAt": 1671004879881, + "period": "1671004870000", + "summaries": { + "http.response_time": { + "min": 10, + "max": 23, + "count": 10, + "p50": 10.9, + "median": 10.9, + "p75": 12.1, + "p90": 13.1, + "p95": 13.1, + "p99": 13.1, + "p999": 13.1 + }, + "vusers.session_length": { + "min": 12.1, + "max": 25.8, + "count": 10, + "p50": 14.4, + "median": 14.4, + "p75": 15.3, + "p90": 16, + "p95": 16, + "p99": 16, + "p999": 16 + } + }, + "histograms": { + "http.response_time": { + "min": 10, + "max": 23, + "count": 10, + "p50": 10.9, + "median": 10.9, + "p75": 12.1, + "p90": 13.1, + "p95": 13.1, + "p99": 13.1, + "p999": 13.1 + }, + "vusers.session_length": { + "min": 12.1, + "max": 25.8, + "count": 10, + "p50": 14.4, + "median": 14.4, + "p75": 15.3, + "p90": 16, + "p95": 16, + "p99": 16, + "p999": 16 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 10, + "vusers.created": 10, + "http.requests": 10, + "http.codes.400": 10, + "http.responses": 10, + "vusers.failed": 0, + "vusers.completed": 10 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1671004880867, + "firstHistogramAt": 1671004880881, + "lastCounterAt": 1671004889880, + "lastHistogramAt": 1671004889880, + "firstMetricAt": 1671004880867, + "lastMetricAt": 1671004889880, + "period": "1671004880000", + "summaries": { + "http.response_time": { + "min": 9, + "max": 29, + "count": 10, + "p50": 10.9, + "median": 10.9, + "p75": 13.1, + "p90": 19.1, + "p95": 19.1, + "p99": 19.1, + "p999": 19.1 + }, + "vusers.session_length": { + "min": 12.9, + "max": 32.4, + "count": 10, + "p50": 15, + "median": 15, + "p75": 15.6, + "p90": 21.5, + "p95": 21.5, + "p99": 21.5, + "p999": 21.5 + } + }, + "histograms": { + "http.response_time": { + "min": 9, + "max": 29, + "count": 10, + "p50": 10.9, + "median": 10.9, + "p75": 13.1, + "p90": 19.1, + "p95": 19.1, + "p99": 19.1, + "p999": 19.1 + }, + "vusers.session_length": { + "min": 12.9, + "max": 32.4, + "count": 10, + "p50": 15, + "median": 15, + "p75": 15.6, + "p90": 21.5, + "p95": 21.5, + "p99": 21.5, + "p999": 21.5 + } + } + } + ] +} \ No newline at end of file diff --git a/server/artillery/result/Redis_Cache/report_nocache_auth_me.json b/server/artillery/result/Redis_Cache/report_nocache_auth_me.json new file mode 100644 index 00000000..bb391c90 --- /dev/null +++ b/server/artillery/result/Redis_Cache/report_nocache_auth_me.json @@ -0,0 +1,447 @@ +{ + "aggregate": { + "counters": { + "vusers.created_by_name.0": 40, + "vusers.created": 40, + "http.requests": 40, + "http.codes.200": 40, + "http.responses": 40, + "vusers.failed": 0, + "vusers.completed": 40 + }, + "rates": { + "http.request_rate": 1 + }, + "firstCounterAt": 1671001668367, + "firstHistogramAt": 1671001668400, + "lastCounterAt": 1671001707379, + "lastHistogramAt": 1671001707379, + "firstMetricAt": 1671001668367, + "lastMetricAt": 1671001707379, + "period": 1671001700000, + "summaries": { + "http.response_time": { + "min": 9, + "max": 24, + "count": 40, + "p50": 13.1, + "median": 13.1, + "p75": 13.9, + "p90": 18, + "p95": 21.1, + "p99": 23.8, + "p999": 23.8 + }, + "vusers.session_length": { + "min": 9.5, + "max": 34.2, + "count": 40, + "p50": 15.6, + "median": 15.6, + "p75": 18.7, + "p90": 23.8, + "p95": 26.3, + "p99": 26.8, + "p999": 26.8 + } + }, + "histograms": { + "http.response_time": { + "min": 9, + "max": 24, + "count": 40, + "p50": 13.1, + "median": 13.1, + "p75": 13.9, + "p90": 18, + "p95": 21.1, + "p99": 23.8, + "p999": 23.8 + }, + "vusers.session_length": { + "min": 9.5, + "max": 34.2, + "count": 40, + "p50": 15.6, + "median": 15.6, + "p75": 18.7, + "p90": 23.8, + "p95": 26.3, + "p99": 26.8, + "p999": 26.8 + } + } + }, + "intermediate": [ + { + "counters": { + "vusers.created_by_name.0": 2, + "vusers.created": 2, + "http.requests": 2, + "http.codes.200": 2, + "http.responses": 2, + "vusers.failed": 0, + "vusers.completed": 2 + }, + "rates": { + "http.request_rate": 2 + }, + "http.request_rate": null, + "firstCounterAt": 1671001668367, + "firstHistogramAt": 1671001668400, + "lastCounterAt": 1671001669378, + "lastHistogramAt": 1671001669379, + "firstMetricAt": 1671001668367, + "lastMetricAt": 1671001669379, + "period": "1671001660000", + "summaries": { + "http.response_time": { + "min": 10, + "max": 24, + "count": 2, + "p50": 10.1, + "median": 10.1, + "p75": 10.1, + "p90": 10.1, + "p95": 10.1, + "p99": 10.1, + "p999": 10.1 + }, + "vusers.session_length": { + "min": 12.2, + "max": 34.2, + "count": 2, + "p50": 12.1, + "median": 12.1, + "p75": 12.1, + "p90": 12.1, + "p95": 12.1, + "p99": 12.1, + "p999": 12.1 + } + }, + "histograms": { + "http.response_time": { + "min": 10, + "max": 24, + "count": 2, + "p50": 10.1, + "median": 10.1, + "p75": 10.1, + "p90": 10.1, + "p95": 10.1, + "p99": 10.1, + "p999": 10.1 + }, + "vusers.session_length": { + "min": 12.2, + "max": 34.2, + "count": 2, + "p50": 12.1, + "median": 12.1, + "p75": 12.1, + "p90": 12.1, + "p95": 12.1, + "p99": 12.1, + "p999": 12.1 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 10, + "vusers.created": 10, + "http.requests": 10, + "http.codes.200": 10, + "http.responses": 10, + "vusers.failed": 0, + "vusers.completed": 10 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1671001670366, + "firstHistogramAt": 1671001670384, + "lastCounterAt": 1671001679385, + "lastHistogramAt": 1671001679385, + "firstMetricAt": 1671001670366, + "lastMetricAt": 1671001679385, + "period": "1671001670000", + "summaries": { + "http.response_time": { + "min": 12, + "max": 21, + "count": 10, + "p50": 13.9, + "median": 13.9, + "p75": 13.9, + "p90": 16.9, + "p95": 16.9, + "p99": 16.9, + "p999": 16.9 + }, + "vusers.session_length": { + "min": 16.4, + "max": 26.4, + "count": 10, + "p50": 18.4, + "median": 18.4, + "p75": 19.1, + "p90": 25.8, + "p95": 25.8, + "p99": 25.8, + "p999": 25.8 + } + }, + "histograms": { + "http.response_time": { + "min": 12, + "max": 21, + "count": 10, + "p50": 13.9, + "median": 13.9, + "p75": 13.9, + "p90": 16.9, + "p95": 16.9, + "p99": 16.9, + "p999": 16.9 + }, + "vusers.session_length": { + "min": 16.4, + "max": 26.4, + "count": 10, + "p50": 18.4, + "median": 18.4, + "p75": 19.1, + "p90": 25.8, + "p95": 25.8, + "p99": 25.8, + "p999": 25.8 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 10, + "vusers.created": 10, + "http.requests": 10, + "http.codes.200": 10, + "http.responses": 10, + "vusers.failed": 0, + "vusers.completed": 10 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1671001680366, + "firstHistogramAt": 1671001680385, + "lastCounterAt": 1671001689384, + "lastHistogramAt": 1671001689384, + "firstMetricAt": 1671001680366, + "lastMetricAt": 1671001689384, + "period": "1671001680000", + "summaries": { + "http.response_time": { + "min": 10, + "max": 18, + "count": 10, + "p50": 13.1, + "median": 13.1, + "p75": 13.9, + "p90": 15, + "p95": 15, + "p99": 15, + "p999": 15 + }, + "vusers.session_length": { + "min": 12.1, + "max": 20.9, + "count": 10, + "p50": 15.6, + "median": 15.6, + "p75": 17.3, + "p90": 19.9, + "p95": 19.9, + "p99": 19.9, + "p999": 19.9 + } + }, + "histograms": { + "http.response_time": { + "min": 10, + "max": 18, + "count": 10, + "p50": 13.1, + "median": 13.1, + "p75": 13.9, + "p90": 15, + "p95": 15, + "p99": 15, + "p999": 15 + }, + "vusers.session_length": { + "min": 12.1, + "max": 20.9, + "count": 10, + "p50": 15.6, + "median": 15.6, + "p75": 17.3, + "p90": 19.9, + "p95": 19.9, + "p99": 19.9, + "p999": 19.9 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 10, + "vusers.created": 10, + "http.requests": 10, + "http.codes.200": 10, + "http.responses": 10, + "vusers.failed": 0, + "vusers.completed": 10 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1671001690366, + "firstHistogramAt": 1671001690385, + "lastCounterAt": 1671001699380, + "lastHistogramAt": 1671001699380, + "firstMetricAt": 1671001690366, + "lastMetricAt": 1671001699380, + "period": "1671001690000", + "summaries": { + "http.response_time": { + "min": 9, + "max": 24, + "count": 10, + "p50": 10.9, + "median": 10.9, + "p75": 10.9, + "p90": 16, + "p95": 16, + "p99": 16, + "p999": 16 + }, + "vusers.session_length": { + "min": 11.8, + "max": 27, + "count": 10, + "p50": 13.3, + "median": 13.3, + "p75": 13.6, + "p90": 19.1, + "p95": 19.1, + "p99": 19.1, + "p999": 19.1 + } + }, + "histograms": { + "http.response_time": { + "min": 9, + "max": 24, + "count": 10, + "p50": 10.9, + "median": 10.9, + "p75": 10.9, + "p90": 16, + "p95": 16, + "p99": 16, + "p999": 16 + }, + "vusers.session_length": { + "min": 11.8, + "max": 27, + "count": 10, + "p50": 13.3, + "median": 13.3, + "p75": 13.6, + "p90": 19.1, + "p95": 19.1, + "p99": 19.1, + "p999": 19.1 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 8, + "vusers.created": 8, + "http.requests": 8, + "http.codes.200": 8, + "http.responses": 8, + "vusers.failed": 0, + "vusers.completed": 8 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1671001700366, + "firstHistogramAt": 1671001700382, + "lastCounterAt": 1671001707379, + "lastHistogramAt": 1671001707379, + "firstMetricAt": 1671001700366, + "lastMetricAt": 1671001707379, + "period": "1671001700000", + "summaries": { + "http.response_time": { + "min": 9, + "max": 21, + "count": 8, + "p50": 10.1, + "median": 10.1, + "p75": 10.9, + "p90": 13.1, + "p95": 13.1, + "p99": 13.1, + "p999": 13.1 + }, + "vusers.session_length": { + "min": 9.5, + "max": 23.6, + "count": 8, + "p50": 12.8, + "median": 12.8, + "p75": 13.9, + "p90": 16, + "p95": 16, + "p99": 16, + "p999": 16 + } + }, + "histograms": { + "http.response_time": { + "min": 9, + "max": 21, + "count": 8, + "p50": 10.1, + "median": 10.1, + "p75": 10.9, + "p90": 13.1, + "p95": 13.1, + "p99": 13.1, + "p999": 13.1 + }, + "vusers.session_length": { + "min": 9.5, + "max": 23.6, + "count": 8, + "p50": 12.8, + "median": 12.8, + "p75": 13.9, + "p90": 16, + "p95": 16, + "p99": 16, + "p999": 16 + } + } + } + ] +} \ No newline at end of file diff --git a/server/artillery/result/Redis_Cache/report_nocache_get_channel.json b/server/artillery/result/Redis_Cache/report_nocache_get_channel.json new file mode 100644 index 00000000..b5b941d5 --- /dev/null +++ b/server/artillery/result/Redis_Cache/report_nocache_get_channel.json @@ -0,0 +1,447 @@ +{ + "aggregate": { + "counters": { + "vusers.created_by_name.0": 40, + "vusers.created": 40, + "http.requests": 40, + "http.codes.200": 40, + "http.responses": 40, + "vusers.failed": 0, + "vusers.completed": 40 + }, + "rates": { + "http.request_rate": 1 + }, + "firstCounterAt": 1671002009622, + "firstHistogramAt": 1671002009687, + "lastCounterAt": 1671002048645, + "lastHistogramAt": 1671002048645, + "firstMetricAt": 1671002009622, + "lastMetricAt": 1671002048645, + "period": 1671002040000, + "summaries": { + "http.response_time": { + "min": 19, + "max": 44, + "count": 40, + "p50": 23.8, + "median": 23.8, + "p75": 27.9, + "p90": 37, + "p95": 40, + "p99": 41.7, + "p999": 41.7 + }, + "vusers.session_length": { + "min": 21.5, + "max": 66.3, + "count": 40, + "p50": 27.4, + "median": 27.4, + "p75": 32.1, + "p90": 41.7, + "p95": 44.3, + "p99": 47.9, + "p999": 47.9 + } + }, + "histograms": { + "http.response_time": { + "min": 19, + "max": 44, + "count": 40, + "p50": 23.8, + "median": 23.8, + "p75": 27.9, + "p90": 37, + "p95": 40, + "p99": 41.7, + "p999": 41.7 + }, + "vusers.session_length": { + "min": 21.5, + "max": 66.3, + "count": 40, + "p50": 27.4, + "median": 27.4, + "p75": 32.1, + "p90": 41.7, + "p95": 44.3, + "p99": 47.9, + "p999": 47.9 + } + } + }, + "intermediate": [ + { + "counters": { + "vusers.created_by_name.0": 1, + "vusers.created": 1, + "http.requests": 1, + "http.codes.200": 1, + "http.responses": 1, + "vusers.failed": 0, + "vusers.completed": 1 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1671002009622, + "firstHistogramAt": 1671002009687, + "lastCounterAt": 1671002009688, + "lastHistogramAt": 1671002009688, + "firstMetricAt": 1671002009622, + "lastMetricAt": 1671002009688, + "period": "1671002000000", + "summaries": { + "http.response_time": { + "min": 42, + "max": 42, + "count": 1, + "p50": 41.7, + "median": 41.7, + "p75": 41.7, + "p90": 41.7, + "p95": 41.7, + "p99": 41.7, + "p999": 41.7 + }, + "vusers.session_length": { + "min": 66.3, + "max": 66.3, + "count": 1, + "p50": 66, + "median": 66, + "p75": 66, + "p90": 66, + "p95": 66, + "p99": 66, + "p999": 66 + } + }, + "histograms": { + "http.response_time": { + "min": 42, + "max": 42, + "count": 1, + "p50": 41.7, + "median": 41.7, + "p75": 41.7, + "p90": 41.7, + "p95": 41.7, + "p99": 41.7, + "p999": 41.7 + }, + "vusers.session_length": { + "min": 66.3, + "max": 66.3, + "count": 1, + "p50": 66, + "median": 66, + "p75": 66, + "p90": 66, + "p95": 66, + "p99": 66, + "p999": 66 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 10, + "vusers.created": 10, + "http.requests": 10, + "http.codes.200": 10, + "http.responses": 10, + "vusers.failed": 0, + "vusers.completed": 10 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1671002010621, + "firstHistogramAt": 1671002010669, + "lastCounterAt": 1671002019652, + "lastHistogramAt": 1671002019652, + "firstMetricAt": 1671002010621, + "lastMetricAt": 1671002019652, + "period": "1671002010000", + "summaries": { + "http.response_time": { + "min": 19, + "max": 44, + "count": 10, + "p50": 26.8, + "median": 26.8, + "p75": 27.9, + "p90": 40, + "p95": 40, + "p99": 40, + "p999": 40 + }, + "vusers.session_length": { + "min": 21.5, + "max": 47.9, + "count": 10, + "p50": 30.3, + "median": 30.3, + "p75": 31.5, + "p90": 44.3, + "p95": 44.3, + "p99": 44.3, + "p999": 44.3 + } + }, + "histograms": { + "http.response_time": { + "min": 19, + "max": 44, + "count": 10, + "p50": 26.8, + "median": 26.8, + "p75": 27.9, + "p90": 40, + "p95": 40, + "p99": 40, + "p999": 40 + }, + "vusers.session_length": { + "min": 21.5, + "max": 47.9, + "count": 10, + "p50": 30.3, + "median": 30.3, + "p75": 31.5, + "p90": 44.3, + "p95": 44.3, + "p99": 44.3, + "p999": 44.3 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 10, + "vusers.created": 10, + "http.requests": 10, + "http.codes.200": 10, + "http.responses": 10, + "vusers.failed": 0, + "vusers.completed": 10 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1671002020621, + "firstHistogramAt": 1671002020647, + "lastCounterAt": 1671002029651, + "lastHistogramAt": 1671002029651, + "firstMetricAt": 1671002020621, + "lastMetricAt": 1671002029651, + "period": "1671002020000", + "summaries": { + "http.response_time": { + "min": 21, + "max": 37, + "count": 10, + "p50": 23.8, + "median": 23.8, + "p75": 26.8, + "p90": 30.9, + "p95": 30.9, + "p99": 30.9, + "p999": 30.9 + }, + "vusers.session_length": { + "min": 25, + "max": 43.3, + "count": 10, + "p50": 30.3, + "median": 30.3, + "p75": 32.1, + "p90": 34.8, + "p95": 34.8, + "p99": 34.8, + "p999": 34.8 + } + }, + "histograms": { + "http.response_time": { + "min": 21, + "max": 37, + "count": 10, + "p50": 23.8, + "median": 23.8, + "p75": 26.8, + "p90": 30.9, + "p95": 30.9, + "p99": 30.9, + "p999": 30.9 + }, + "vusers.session_length": { + "min": 25, + "max": 43.3, + "count": 10, + "p50": 30.3, + "median": 30.3, + "p75": 32.1, + "p90": 34.8, + "p95": 34.8, + "p99": 34.8, + "p999": 34.8 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 10, + "vusers.created": 10, + "http.requests": 10, + "http.codes.200": 10, + "http.responses": 10, + "vusers.failed": 0, + "vusers.completed": 10 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1671002030621, + "firstHistogramAt": 1671002030646, + "lastCounterAt": 1671002039645, + "lastHistogramAt": 1671002039645, + "firstMetricAt": 1671002030621, + "lastMetricAt": 1671002039645, + "period": "1671002030000", + "summaries": { + "http.response_time": { + "min": 21, + "max": 33, + "count": 10, + "p50": 22.9, + "median": 22.9, + "p75": 23.8, + "p90": 29.1, + "p95": 29.1, + "p99": 29.1, + "p999": 29.1 + }, + "vusers.session_length": { + "min": 23.3, + "max": 37, + "count": 10, + "p50": 25.3, + "median": 25.3, + "p75": 27.4, + "p90": 32.8, + "p95": 32.8, + "p99": 32.8, + "p999": 32.8 + } + }, + "histograms": { + "http.response_time": { + "min": 21, + "max": 33, + "count": 10, + "p50": 22.9, + "median": 22.9, + "p75": 23.8, + "p90": 29.1, + "p95": 29.1, + "p99": 29.1, + "p999": 29.1 + }, + "vusers.session_length": { + "min": 23.3, + "max": 37, + "count": 10, + "p50": 25.3, + "median": 25.3, + "p75": 27.4, + "p90": 32.8, + "p95": 32.8, + "p99": 32.8, + "p999": 32.8 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 9, + "vusers.created": 9, + "http.requests": 9, + "http.codes.200": 9, + "http.responses": 9, + "vusers.failed": 0, + "vusers.completed": 9 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1671002040621, + "firstHistogramAt": 1671002040644, + "lastCounterAt": 1671002048645, + "lastHistogramAt": 1671002048645, + "firstMetricAt": 1671002040621, + "lastMetricAt": 1671002048645, + "period": "1671002040000", + "summaries": { + "http.response_time": { + "min": 21, + "max": 31, + "count": 9, + "p50": 22, + "median": 22, + "p75": 22, + "p90": 22.9, + "p95": 22.9, + "p99": 22.9, + "p999": 22.9 + }, + "vusers.session_length": { + "min": 23, + "max": 33.8, + "count": 9, + "p50": 23.8, + "median": 23.8, + "p75": 24.3, + "p90": 25.3, + "p95": 25.3, + "p99": 25.3, + "p999": 25.3 + } + }, + "histograms": { + "http.response_time": { + "min": 21, + "max": 31, + "count": 9, + "p50": 22, + "median": 22, + "p75": 22, + "p90": 22.9, + "p95": 22.9, + "p99": 22.9, + "p999": 22.9 + }, + "vusers.session_length": { + "min": 23, + "max": 33.8, + "count": 9, + "p50": 23.8, + "median": 23.8, + "p75": 24.3, + "p90": 25.3, + "p95": 25.3, + "p99": 25.3, + "p999": 25.3 + } + } + } + ] +} \ No newline at end of file diff --git a/server/artillery/result/Redis_Cache/report_nocache_get_community_users.json b/server/artillery/result/Redis_Cache/report_nocache_get_community_users.json new file mode 100644 index 00000000..93a1e59f --- /dev/null +++ b/server/artillery/result/Redis_Cache/report_nocache_get_community_users.json @@ -0,0 +1,447 @@ +{ + "aggregate": { + "counters": { + "vusers.created_by_name.0": 40, + "vusers.created": 40, + "http.requests": 40, + "http.codes.400": 40, + "http.responses": 40, + "vusers.failed": 0, + "vusers.completed": 40 + }, + "rates": { + "http.request_rate": 1 + }, + "firstCounterAt": 1671004977598, + "firstHistogramAt": 1671004977635, + "lastCounterAt": 1671005016612, + "lastHistogramAt": 1671005016612, + "firstMetricAt": 1671004977598, + "lastMetricAt": 1671005016612, + "period": 1671005010000, + "summaries": { + "http.response_time": { + "min": 8, + "max": 26, + "count": 40, + "p50": 10.9, + "median": 10.9, + "p75": 13.1, + "p90": 15, + "p95": 16, + "p99": 16, + "p999": 16 + }, + "vusers.session_length": { + "min": 10.8, + "max": 38.4, + "count": 40, + "p50": 14.7, + "median": 14.7, + "p75": 16.6, + "p90": 18.7, + "p95": 22.4, + "p99": 27.4, + "p999": 27.4 + } + }, + "histograms": { + "http.response_time": { + "min": 8, + "max": 26, + "count": 40, + "p50": 10.9, + "median": 10.9, + "p75": 13.1, + "p90": 15, + "p95": 16, + "p99": 16, + "p999": 16 + }, + "vusers.session_length": { + "min": 10.8, + "max": 38.4, + "count": 40, + "p50": 14.7, + "median": 14.7, + "p75": 16.6, + "p90": 18.7, + "p95": 22.4, + "p99": 27.4, + "p999": 27.4 + } + } + }, + "intermediate": [ + { + "counters": { + "vusers.created_by_name.0": 3, + "vusers.created": 3, + "http.requests": 3, + "http.codes.400": 3, + "http.responses": 3, + "vusers.failed": 0, + "vusers.completed": 3 + }, + "rates": { + "http.request_rate": 2 + }, + "http.request_rate": null, + "firstCounterAt": 1671004977598, + "firstHistogramAt": 1671004977635, + "lastCounterAt": 1671004979614, + "lastHistogramAt": 1671004979614, + "firstMetricAt": 1671004977598, + "lastMetricAt": 1671004979614, + "period": "1671004970000", + "summaries": { + "http.response_time": { + "min": 9, + "max": 15, + "count": 3, + "p50": 13.9, + "median": 13.9, + "p75": 13.9, + "p90": 13.9, + "p95": 13.9, + "p99": 13.9, + "p999": 13.9 + }, + "vusers.session_length": { + "min": 13.4, + "max": 38.4, + "count": 3, + "p50": 16.6, + "median": 16.6, + "p75": 16.6, + "p90": 16.6, + "p95": 16.6, + "p99": 16.6, + "p999": 16.6 + } + }, + "histograms": { + "http.response_time": { + "min": 9, + "max": 15, + "count": 3, + "p50": 13.9, + "median": 13.9, + "p75": 13.9, + "p90": 13.9, + "p95": 13.9, + "p99": 13.9, + "p999": 13.9 + }, + "vusers.session_length": { + "min": 13.4, + "max": 38.4, + "count": 3, + "p50": 16.6, + "median": 16.6, + "p75": 16.6, + "p90": 16.6, + "p95": 16.6, + "p99": 16.6, + "p999": 16.6 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 10, + "vusers.created": 10, + "http.requests": 10, + "http.codes.400": 10, + "http.responses": 10, + "vusers.failed": 0, + "vusers.completed": 10 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1671004980598, + "firstHistogramAt": 1671004980613, + "lastCounterAt": 1671004989613, + "lastHistogramAt": 1671004989613, + "firstMetricAt": 1671004980598, + "lastMetricAt": 1671004989613, + "period": "1671004980000", + "summaries": { + "http.response_time": { + "min": 8, + "max": 16, + "count": 10, + "p50": 12.1, + "median": 12.1, + "p75": 12.1, + "p90": 15, + "p95": 15, + "p99": 15, + "p999": 15 + }, + "vusers.session_length": { + "min": 11.8, + "max": 22.5, + "count": 10, + "p50": 15.6, + "median": 15.6, + "p75": 17.6, + "p90": 21.1, + "p95": 21.1, + "p99": 21.1, + "p999": 21.1 + } + }, + "histograms": { + "http.response_time": { + "min": 8, + "max": 16, + "count": 10, + "p50": 12.1, + "median": 12.1, + "p75": 12.1, + "p90": 15, + "p95": 15, + "p99": 15, + "p999": 15 + }, + "vusers.session_length": { + "min": 11.8, + "max": 22.5, + "count": 10, + "p50": 15.6, + "median": 15.6, + "p75": 17.6, + "p90": 21.1, + "p95": 21.1, + "p99": 21.1, + "p999": 21.1 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 10, + "vusers.created": 10, + "http.requests": 10, + "http.codes.400": 10, + "http.responses": 10, + "vusers.failed": 0, + "vusers.completed": 10 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1671004990598, + "firstHistogramAt": 1671004990613, + "lastCounterAt": 1671004999612, + "lastHistogramAt": 1671004999612, + "firstMetricAt": 1671004990598, + "lastMetricAt": 1671004999612, + "period": "1671004990000", + "summaries": { + "http.response_time": { + "min": 10, + "max": 16, + "count": 10, + "p50": 12.1, + "median": 12.1, + "p75": 13.1, + "p90": 16, + "p95": 16, + "p99": 16, + "p999": 16 + }, + "vusers.session_length": { + "min": 13.7, + "max": 18.1, + "count": 10, + "p50": 16, + "median": 16, + "p75": 18, + "p90": 18, + "p95": 18, + "p99": 18, + "p999": 18 + } + }, + "histograms": { + "http.response_time": { + "min": 10, + "max": 16, + "count": 10, + "p50": 12.1, + "median": 12.1, + "p75": 13.1, + "p90": 16, + "p95": 16, + "p99": 16, + "p999": 16 + }, + "vusers.session_length": { + "min": 13.7, + "max": 18.1, + "count": 10, + "p50": 16, + "median": 16, + "p75": 18, + "p90": 18, + "p95": 18, + "p99": 18, + "p999": 18 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 10, + "vusers.created": 10, + "http.requests": 10, + "http.codes.400": 10, + "http.responses": 10, + "vusers.failed": 0, + "vusers.completed": 10 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1671005000598, + "firstHistogramAt": 1671005000610, + "lastCounterAt": 1671005009611, + "lastHistogramAt": 1671005009611, + "firstMetricAt": 1671005000598, + "lastMetricAt": 1671005009611, + "period": "1671005000000", + "summaries": { + "http.response_time": { + "min": 9, + "max": 13, + "count": 10, + "p50": 10.1, + "median": 10.1, + "p75": 10.9, + "p90": 12.1, + "p95": 12.1, + "p99": 12.1, + "p999": 12.1 + }, + "vusers.session_length": { + "min": 11.4, + "max": 15.8, + "count": 10, + "p50": 12.6, + "median": 12.6, + "p75": 13.3, + "p90": 15.3, + "p95": 15.3, + "p99": 15.3, + "p999": 15.3 + } + }, + "histograms": { + "http.response_time": { + "min": 9, + "max": 13, + "count": 10, + "p50": 10.1, + "median": 10.1, + "p75": 10.9, + "p90": 12.1, + "p95": 12.1, + "p99": 12.1, + "p999": 12.1 + }, + "vusers.session_length": { + "min": 11.4, + "max": 15.8, + "count": 10, + "p50": 12.6, + "median": 12.6, + "p75": 13.3, + "p90": 15.3, + "p95": 15.3, + "p99": 15.3, + "p999": 15.3 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 7, + "vusers.created": 7, + "http.requests": 7, + "http.codes.400": 7, + "http.responses": 7, + "vusers.failed": 0, + "vusers.completed": 7 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1671005010598, + "firstHistogramAt": 1671005010625, + "lastCounterAt": 1671005016612, + "lastHistogramAt": 1671005016612, + "firstMetricAt": 1671005010598, + "lastMetricAt": 1671005016612, + "period": "1671005010000", + "summaries": { + "http.response_time": { + "min": 9, + "max": 26, + "count": 7, + "p50": 10.1, + "median": 10.1, + "p75": 10.9, + "p90": 13.1, + "p95": 13.1, + "p99": 13.1, + "p999": 13.1 + }, + "vusers.session_length": { + "min": 10.8, + "max": 27.3, + "count": 7, + "p50": 13.6, + "median": 13.6, + "p75": 13.9, + "p90": 15.6, + "p95": 15.6, + "p99": 15.6, + "p999": 15.6 + } + }, + "histograms": { + "http.response_time": { + "min": 9, + "max": 26, + "count": 7, + "p50": 10.1, + "median": 10.1, + "p75": 10.9, + "p90": 13.1, + "p95": 13.1, + "p99": 13.1, + "p999": 13.1 + }, + "vusers.session_length": { + "min": 10.8, + "max": 27.3, + "count": 7, + "p50": 13.6, + "median": 13.6, + "p75": 13.9, + "p90": 15.6, + "p95": 15.6, + "p99": 15.6, + "p999": 15.6 + } + } + } + ] +} \ No newline at end of file diff --git a/server/artillery/result/Sort/report_communities_sort_basic.json b/server/artillery/result/Sort/report_communities_sort_basic.json new file mode 100644 index 00000000..a9d108f0 --- /dev/null +++ b/server/artillery/result/Sort/report_communities_sort_basic.json @@ -0,0 +1,299 @@ +{ + "aggregate": { + "counters": { + "vusers.created_by_name.0": 20, + "vusers.created": 20, + "http.requests": 20, + "http.codes.200": 20, + "http.responses": 20, + "vusers.failed": 0, + "vusers.completed": 20 + }, + "rates": { + "http.request_rate": 1 + }, + "firstCounterAt": 1670812342778, + "firstHistogramAt": 1670812342829, + "lastCounterAt": 1670812361811, + "lastHistogramAt": 1670812361811, + "firstMetricAt": 1670812342778, + "lastMetricAt": 1670812361811, + "period": 1670812360000, + "summaries": { + "http.response_time": { + "min": 25, + "max": 87, + "count": 20, + "p50": 30.3, + "median": 30.3, + "p75": 37.7, + "p90": 61, + "p95": 67.4, + "p99": 67.4, + "p999": 67.4 + }, + "vusers.session_length": { + "min": 28.3, + "max": 91.4, + "count": 20, + "p50": 32.1, + "median": 32.1, + "p75": 40.9, + "p90": 64.7, + "p95": 71.5, + "p99": 71.5, + "p999": 71.5 + } + }, + "histograms": { + "http.response_time": { + "min": 25, + "max": 87, + "count": 20, + "p50": 30.3, + "median": 30.3, + "p75": 37.7, + "p90": 61, + "p95": 67.4, + "p99": 67.4, + "p999": 67.4 + }, + "vusers.session_length": { + "min": 28.3, + "max": 91.4, + "count": 20, + "p50": 32.1, + "median": 32.1, + "p75": 40.9, + "p90": 64.7, + "p95": 71.5, + "p99": 71.5, + "p999": 71.5 + } + } + }, + "intermediate": [ + { + "counters": { + "vusers.created_by_name.0": 8, + "vusers.created": 8, + "http.requests": 8, + "http.codes.200": 8, + "http.responses": 8, + "vusers.failed": 0, + "vusers.completed": 8 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1670812342778, + "firstHistogramAt": 1670812342829, + "lastCounterAt": 1670812349810, + "lastHistogramAt": 1670812349810, + "firstMetricAt": 1670812342778, + "lastMetricAt": 1670812349810, + "period": "1670812340000", + "summaries": { + "http.response_time": { + "min": 27, + "max": 87, + "count": 8, + "p50": 30.3, + "median": 30.3, + "p75": 61, + "p90": 67.4, + "p95": 67.4, + "p99": 67.4, + "p999": 67.4 + }, + "vusers.session_length": { + "min": 30.1, + "max": 91.4, + "count": 8, + "p50": 32.1, + "median": 32.1, + "p75": 64.7, + "p90": 71.5, + "p95": 71.5, + "p99": 71.5, + "p999": 71.5 + } + }, + "histograms": { + "http.response_time": { + "min": 27, + "max": 87, + "count": 8, + "p50": 30.3, + "median": 30.3, + "p75": 61, + "p90": 67.4, + "p95": 67.4, + "p99": 67.4, + "p999": 67.4 + }, + "vusers.session_length": { + "min": 30.1, + "max": 91.4, + "count": 8, + "p50": 32.1, + "median": 32.1, + "p75": 64.7, + "p90": 71.5, + "p95": 71.5, + "p99": 71.5, + "p999": 71.5 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 10, + "vusers.created": 10, + "http.requests": 10, + "http.codes.200": 10, + "http.responses": 10, + "vusers.failed": 0, + "vusers.completed": 10 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1670812350777, + "firstHistogramAt": 1670812350806, + "lastCounterAt": 1670812359818, + "lastHistogramAt": 1670812359818, + "firstMetricAt": 1670812350777, + "lastMetricAt": 1670812359818, + "period": "1670812350000", + "summaries": { + "http.response_time": { + "min": 25, + "max": 43, + "count": 10, + "p50": 27.9, + "median": 27.9, + "p75": 30.3, + "p90": 37.7, + "p95": 37.7, + "p99": 37.7, + "p999": 37.7 + }, + "vusers.session_length": { + "min": 28.3, + "max": 45.3, + "count": 10, + "p50": 31.5, + "median": 31.5, + "p75": 32.1, + "p90": 40.9, + "p95": 40.9, + "p99": 40.9, + "p999": 40.9 + } + }, + "histograms": { + "http.response_time": { + "min": 25, + "max": 43, + "count": 10, + "p50": 27.9, + "median": 27.9, + "p75": 30.3, + "p90": 37.7, + "p95": 37.7, + "p99": 37.7, + "p999": 37.7 + }, + "vusers.session_length": { + "min": 28.3, + "max": 45.3, + "count": 10, + "p50": 31.5, + "median": 31.5, + "p75": 32.1, + "p90": 40.9, + "p95": 40.9, + "p99": 40.9, + "p999": 40.9 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 2, + "vusers.created": 2, + "http.requests": 2, + "http.codes.200": 2, + "http.responses": 2, + "vusers.failed": 0, + "vusers.completed": 2 + }, + "rates": { + "http.request_rate": 2 + }, + "http.request_rate": null, + "firstCounterAt": 1670812360778, + "firstHistogramAt": 1670812360813, + "lastCounterAt": 1670812361811, + "lastHistogramAt": 1670812361811, + "firstMetricAt": 1670812360778, + "lastMetricAt": 1670812361811, + "period": "1670812360000", + "summaries": { + "http.response_time": { + "min": 30, + "max": 33, + "count": 2, + "p50": 30.3, + "median": 30.3, + "p75": 30.3, + "p90": 30.3, + "p95": 30.3, + "p99": 30.3, + "p999": 30.3 + }, + "vusers.session_length": { + "min": 33, + "max": 35.7, + "count": 2, + "p50": 32.8, + "median": 32.8, + "p75": 32.8, + "p90": 32.8, + "p95": 32.8, + "p99": 32.8, + "p999": 32.8 + } + }, + "histograms": { + "http.response_time": { + "min": 30, + "max": 33, + "count": 2, + "p50": 30.3, + "median": 30.3, + "p75": 30.3, + "p90": 30.3, + "p95": 30.3, + "p99": 30.3, + "p999": 30.3 + }, + "vusers.session_length": { + "min": 33, + "max": 35.7, + "count": 2, + "p50": 32.8, + "median": 32.8, + "p75": 32.8, + "p90": 32.8, + "p95": 32.8, + "p99": 32.8, + "p999": 32.8 + } + } + } + ] +} \ No newline at end of file diff --git a/server/artillery/result/Sort/report_communities_sort_no.json b/server/artillery/result/Sort/report_communities_sort_no.json new file mode 100644 index 00000000..1d86eba1 --- /dev/null +++ b/server/artillery/result/Sort/report_communities_sort_no.json @@ -0,0 +1,299 @@ +{ + "aggregate": { + "counters": { + "vusers.created_by_name.0": 20, + "vusers.created": 20, + "http.requests": 20, + "http.codes.200": 20, + "http.responses": 20, + "vusers.failed": 0, + "vusers.completed": 20 + }, + "rates": { + "http.request_rate": 1 + }, + "firstCounterAt": 1670812301459, + "firstHistogramAt": 1670812301512, + "lastCounterAt": 1670812320485, + "lastHistogramAt": 1670812320485, + "firstMetricAt": 1670812301459, + "lastMetricAt": 1670812320485, + "period": 1670812320000, + "summaries": { + "http.response_time": { + "min": 24, + "max": 52, + "count": 20, + "p50": 25.8, + "median": 25.8, + "p75": 44.3, + "p90": 49.9, + "p95": 50.9, + "p99": 50.9, + "p999": 50.9 + }, + "vusers.session_length": { + "min": 26.2, + "max": 55.8, + "count": 20, + "p50": 29.1, + "median": 29.1, + "p75": 50.9, + "p90": 53, + "p95": 54.1, + "p99": 54.1, + "p999": 54.1 + } + }, + "histograms": { + "http.response_time": { + "min": 24, + "max": 52, + "count": 20, + "p50": 25.8, + "median": 25.8, + "p75": 44.3, + "p90": 49.9, + "p95": 50.9, + "p99": 50.9, + "p999": 50.9 + }, + "vusers.session_length": { + "min": 26.2, + "max": 55.8, + "count": 20, + "p50": 29.1, + "median": 29.1, + "p75": 50.9, + "p90": 53, + "p95": 54.1, + "p99": 54.1, + "p999": 54.1 + } + } + }, + "intermediate": [ + { + "counters": { + "vusers.created_by_name.0": 9, + "vusers.created": 9, + "http.requests": 9, + "http.codes.200": 9, + "http.responses": 9, + "vusers.failed": 0, + "vusers.completed": 9 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1670812301459, + "firstHistogramAt": 1670812301512, + "lastCounterAt": 1670812309488, + "lastHistogramAt": 1670812309488, + "firstMetricAt": 1670812301459, + "lastMetricAt": 1670812309488, + "period": "1670812300000", + "summaries": { + "http.response_time": { + "min": 25, + "max": 52, + "count": 9, + "p50": 39.3, + "median": 39.3, + "p75": 49.9, + "p90": 49.9, + "p95": 49.9, + "p99": 49.9, + "p999": 49.9 + }, + "vusers.session_length": { + "min": 28.9, + "max": 55.8, + "count": 9, + "p50": 41.7, + "median": 41.7, + "p75": 53, + "p90": 54.1, + "p95": 54.1, + "p99": 54.1, + "p999": 54.1 + } + }, + "histograms": { + "http.response_time": { + "min": 25, + "max": 52, + "count": 9, + "p50": 39.3, + "median": 39.3, + "p75": 49.9, + "p90": 49.9, + "p95": 49.9, + "p99": 49.9, + "p999": 49.9 + }, + "vusers.session_length": { + "min": 28.9, + "max": 55.8, + "count": 9, + "p50": 41.7, + "median": 41.7, + "p75": 53, + "p90": 54.1, + "p95": 54.1, + "p99": 54.1, + "p999": 54.1 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 10, + "vusers.created": 10, + "http.requests": 10, + "http.codes.200": 10, + "http.responses": 10, + "vusers.failed": 0, + "vusers.completed": 10 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1670812310459, + "firstHistogramAt": 1670812310487, + "lastCounterAt": 1670812319511, + "lastHistogramAt": 1670812319511, + "firstMetricAt": 1670812310459, + "lastMetricAt": 1670812319511, + "period": "1670812310000", + "summaries": { + "http.response_time": { + "min": 24, + "max": 51, + "count": 10, + "p50": 25.8, + "median": 25.8, + "p75": 25.8, + "p90": 47.9, + "p95": 47.9, + "p99": 47.9, + "p999": 47.9 + }, + "vusers.session_length": { + "min": 26.5, + "max": 52, + "count": 10, + "p50": 28.5, + "median": 28.5, + "p75": 29.1, + "p90": 50.9, + "p95": 50.9, + "p99": 50.9, + "p999": 50.9 + } + }, + "histograms": { + "http.response_time": { + "min": 24, + "max": 51, + "count": 10, + "p50": 25.8, + "median": 25.8, + "p75": 25.8, + "p90": 47.9, + "p95": 47.9, + "p99": 47.9, + "p999": 47.9 + }, + "vusers.session_length": { + "min": 26.5, + "max": 52, + "count": 10, + "p50": 28.5, + "median": 28.5, + "p75": 29.1, + "p90": 50.9, + "p95": 50.9, + "p99": 50.9, + "p999": 50.9 + } + } + }, + { + "counters": { + "vusers.created_by_name.0": 1, + "vusers.created": 1, + "http.requests": 1, + "http.codes.200": 1, + "http.responses": 1, + "vusers.failed": 0, + "vusers.completed": 1 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1670812320459, + "firstHistogramAt": 1670812320485, + "lastCounterAt": 1670812320485, + "lastHistogramAt": 1670812320485, + "firstMetricAt": 1670812320459, + "lastMetricAt": 1670812320485, + "period": "1670812320000", + "summaries": { + "http.response_time": { + "min": 25, + "max": 25, + "count": 1, + "p50": 24.8, + "median": 24.8, + "p75": 24.8, + "p90": 24.8, + "p95": 24.8, + "p99": 24.8, + "p999": 24.8 + }, + "vusers.session_length": { + "min": 26.2, + "max": 26.2, + "count": 1, + "p50": 26.3, + "median": 26.3, + "p75": 26.3, + "p90": 26.3, + "p95": 26.3, + "p99": 26.3, + "p999": 26.3 + } + }, + "histograms": { + "http.response_time": { + "min": 25, + "max": 25, + "count": 1, + "p50": 24.8, + "median": 24.8, + "p75": 24.8, + "p90": 24.8, + "p95": 24.8, + "p99": 24.8, + "p999": 24.8 + }, + "vusers.session_length": { + "min": 26.2, + "max": 26.2, + "count": 1, + "p50": 26.3, + "median": 26.3, + "p75": 26.3, + "p90": 26.3, + "p95": 26.3, + "p99": 26.3, + "p999": 26.3 + } + } + } + ] +} \ No newline at end of file diff --git a/server/artillery/result/Sort/report_communities_sort_no_forof.json b/server/artillery/result/Sort/report_communities_sort_no_forof.json new file mode 100644 index 00000000..4ab52df6 --- /dev/null +++ b/server/artillery/result/Sort/report_communities_sort_no_forof.json @@ -0,0 +1,299 @@ +{ + "aggregate": { + "counters": { + "vusers.created_by_name.0": 20, + "vusers.created": 20, + "http.requests": 20, + "http.codes.200": 20, + "http.responses": 20, + "vusers.failed": 0, + "vusers.completed": 20 + }, + "rates": { + "http.request_rate": 1 + }, + "firstCounterAt": 1670817806914, + "firstHistogramAt": 1670817807033, + "lastCounterAt": 1670817826090, + "lastHistogramAt": 1670817826090, + "firstMetricAt": 1670817806914, + "lastMetricAt": 1670817826090, + "period": 1670817820000, + "summaries": { + "http.response_time": { + "min": 100, + "max": 175, + "count": 20, + "p50": 127.8, + "median": 127.8, + "p75": 138.4, + "p90": 149.9, + "p95": 159.2, + "p99": 159.2, + "p999": 159.2 + }, + "vusers.session_length": { + "min": 103, + "max": 177.1, + "count": 20, + "p50": 130.3, + "median": 130.3, + "p75": 138.4, + "p90": 156, + "p95": 159.2, + "p99": 159.2, + "p999": 159.2 + } + }, + "histograms": { + "http.response_time": { + "min": 100, + "max": 175, + "count": 20, + "p50": 127.8, + "median": 127.8, + "p75": 138.4, + "p90": 149.9, + "p95": 159.2, + "p99": 159.2, + "p999": 159.2 + }, + "vusers.session_length": { + "min": 103, + "max": 177.1, + "count": 20, + "p50": 130.3, + "median": 130.3, + "p75": 138.4, + "p90": 156, + "p95": 159.2, + "p99": 159.2, + "p999": 159.2 + } + } + }, + "intermediate": [ + { + "counters": { + "vusers.created_by_name.0": 4, + "vusers.created": 4, + "http.requests": 4, + "http.codes.200": 3, + "http.responses": 3, + "vusers.failed": 0, + "vusers.completed": 3 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1670817806914, + "firstHistogramAt": 1670817807033, + "lastCounterAt": 1670817809915, + "lastHistogramAt": 1670817809035, + "firstMetricAt": 1670817806914, + "lastMetricAt": 1670817809915, + "period": "1670817800000", + "summaries": { + "http.response_time": { + "min": 107, + "max": 118, + "count": 3, + "p50": 111.1, + "median": 111.1, + "p75": 111.1, + "p90": 111.1, + "p95": 111.1, + "p99": 111.1, + "p999": 111.1 + }, + "vusers.session_length": { + "min": 117, + "max": 121.4, + "count": 3, + "p50": 120.3, + "median": 120.3, + "p75": 120.3, + "p90": 120.3, + "p95": 120.3, + "p99": 120.3, + "p999": 120.3 + } + }, + "histograms": { + "http.response_time": { + "min": 107, + "max": 118, + "count": 3, + "p50": 111.1, + "median": 111.1, + "p75": 111.1, + "p90": 111.1, + "p95": 111.1, + "p99": 111.1, + "p999": 111.1 + }, + "vusers.session_length": { + "min": 117, + "max": 121.4, + "count": 3, + "p50": 120.3, + "median": 120.3, + "p75": 120.3, + "p90": 120.3, + "p95": 120.3, + "p99": 120.3, + "p999": 120.3 + } + } + }, + { + "counters": { + "http.codes.200": 10, + "http.responses": 10, + "vusers.failed": 0, + "vusers.completed": 10, + "vusers.created_by_name.0": 10, + "vusers.created": 10, + "http.requests": 10 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1670817810023, + "firstHistogramAt": 1670817810023, + "lastCounterAt": 1670817819914, + "lastHistogramAt": 1670817819032, + "firstMetricAt": 1670817810023, + "lastMetricAt": 1670817819914, + "period": "1670817810000", + "summaries": { + "http.response_time": { + "min": 100, + "max": 151, + "count": 10, + "p50": 125.2, + "median": 125.2, + "p75": 133, + "p90": 147, + "p95": 147, + "p99": 147, + "p999": 147 + }, + "vusers.session_length": { + "min": 103, + "max": 155.2, + "count": 10, + "p50": 130.3, + "median": 130.3, + "p75": 138.4, + "p90": 149.9, + "p95": 149.9, + "p99": 149.9, + "p999": 149.9 + } + }, + "histograms": { + "http.response_time": { + "min": 100, + "max": 151, + "count": 10, + "p50": 125.2, + "median": 125.2, + "p75": 133, + "p90": 147, + "p95": 147, + "p99": 147, + "p999": 147 + }, + "vusers.session_length": { + "min": 103, + "max": 155.2, + "count": 10, + "p50": 130.3, + "median": 130.3, + "p75": 138.4, + "p90": 149.9, + "p95": 149.9, + "p99": 149.9, + "p999": 149.9 + } + } + }, + { + "counters": { + "http.codes.200": 7, + "http.responses": 7, + "vusers.failed": 0, + "vusers.completed": 7, + "vusers.created_by_name.0": 6, + "vusers.created": 6, + "http.requests": 6 + }, + "rates": { + "http.request_rate": 1 + }, + "http.request_rate": null, + "firstCounterAt": 1670817820037, + "firstHistogramAt": 1670817820037, + "lastCounterAt": 1670817826090, + "lastHistogramAt": 1670817826090, + "firstMetricAt": 1670817820037, + "lastMetricAt": 1670817826090, + "period": "1670817820000", + "summaries": { + "http.response_time": { + "min": 123, + "max": 175, + "count": 7, + "p50": 138.4, + "median": 138.4, + "p75": 138.4, + "p90": 159.2, + "p95": 159.2, + "p99": 159.2, + "p999": 159.2 + }, + "vusers.session_length": { + "min": 124.3, + "max": 177.1, + "count": 7, + "p50": 138.4, + "median": 138.4, + "p75": 138.4, + "p90": 159.2, + "p95": 159.2, + "p99": 159.2, + "p999": 159.2 + } + }, + "histograms": { + "http.response_time": { + "min": 123, + "max": 175, + "count": 7, + "p50": 138.4, + "median": 138.4, + "p75": 138.4, + "p90": 159.2, + "p95": 159.2, + "p99": 159.2, + "p999": 159.2 + }, + "vusers.session_length": { + "min": 124.3, + "max": 177.1, + "count": 7, + "p50": 138.4, + "median": 138.4, + "p75": 138.4, + "p90": 159.2, + "p95": 159.2, + "p99": 159.2, + "p999": 159.2 + } + } + } + ] +} \ No newline at end of file diff --git "a/server/artillery/result/\354\262\230\354\235\214_\354\240\220\354\247\204\354\240\201_Test.json.html" "b/server/artillery/result/\354\262\230\354\235\214_\354\240\220\354\247\204\354\240\201_Test.json.html" new file mode 100644 index 00000000..28e142d8 --- /dev/null +++ "b/server/artillery/result/\354\262\230\354\235\214_\354\240\220\354\247\204\354\240\201_Test.json.html" @@ -0,0 +1,6825 @@ + + + + + Artillery report + + + + + + + + + + + + + + + + + +
+
+
+
+ + + + +
+
+

+ Artillery Report +

+
+
+
+ +
+ +
+
+ + +
+
+
+
+
+ +
+
    +
+
+
+ +
+
+ + + + + + + + + +
+ Metric + + Value +
+
+
+

Errors at intervals

+ +
+ +
+
+
+
+
+
+
+ + +
+ +
+
+ + +
+
+
+
+
+
+ +
+ + + + + + + + \ No newline at end of file From 2f1dd76636d0344e8c33115b8ab48d37b8915438 Mon Sep 17 00:00:00 2001 From: NaayoungKwon Date: Thu, 15 Dec 2022 14:28:33 +0900 Subject: [PATCH 103/298] =?UTF-8?q?doc:=20readme=20=EC=86=8C=EA=B0=9C?= =?UTF-8?q?=EC=9E=90=EB=A3=8C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 72b61b9e..9384d4d8 100644 --- a/README.md +++ b/README.md @@ -30,16 +30,29 @@ ## 프로젝트 소개 아스니티(Asmi + Community)는 디스코드와 슬랙을 참고한 실시간 채팅 서비스입니다. -실시간 통신을 통해 커뮤니티에 속한 사용자들끼리 채팅할 수 있으며, 귤 까먹으면서 채팅(시간제한이 있는 채팅)을 할 수 있는 기능이 있습니다. +실시간 통신을 통해 커뮤니티에 속한 사용자들끼리 채팅할 수 있습니다. + +## 프로젝스 소개 자료 + +📎 [배포 링크](http://www.asnity.site) : http://www.asnity.site + +🖥 [데모 영상](https://www.youtube.com/watch?v=2gI3OlJXAZQ) + +📽 [발표 영상](https://youtu.be/vEL2TTPZ9tk) + +📋 [발표 PPT](https://docs.google.com/presentation/d/1kduK9v3o7nCGQghsplh-WrS9VVjWvp8R/edit?usp=sharing&ouid=115620821189866783380&rtpof=true&sd=true) ## Wiki +- [Team Notion](https://grand-beanie-e57.notion.site/Asnity-cbd4dcce58f540b4b5b7ff33c8cea984) - [기획서](https://github.com/boostcampwm-2022/web24-Asnity/wiki/%EA%B8%B0%ED%9A%8D%EC%84%9C) - [Architecture](https://github.com/boostcampwm-2022/web24-Asnity/wiki/Architecture) - [Skill Spec](https://github.com/boostcampwm-2022/web24-Asnity/wiki/Skill-Spec) - [Database ERD](https://github.com/boostcampwm-2022/web24-Asnity/wiki/DB-Diagram) - [Backlog](https://lake-duke-f63.notion.site/25c4c9e46d464ea1a82a68c8399ceaf0?v=ea1b4f77e71f4d17b2be0ebdc9c03702) - + + + ## Skill Spec
From 1ad388fd796f772825fabeb30cf578c2031d3b36 Mon Sep 17 00:00:00 2001 From: leegwae Date: Fri, 9 Dec 2022 19:55:13 +0900 Subject: [PATCH 104/298] =?UTF-8?q?refactor:=20`@hooks/useMyInfoQuery`?= =?UTF-8?q?=EC=9D=98=20=EC=BB=A4=EC=8A=A4=ED=85=80=20=ED=9B=85=EC=9D=84=20?= =?UTF-8?q?`@hooks/auth`=EB=A1=9C=20=EC=9D=B4=EB=8F=99=20(#296)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/hooks/auth.ts | 24 +++++++++++++++++++- client/src/hooks/useMyInfoQuery.ts | 23 ------------------- client/src/layouts/DmNav/index.tsx | 1 - client/src/layouts/Sidebar/index.tsx | 2 +- client/src/layouts/SocketLayer/index.tsx | 4 ++-- client/src/pages/AuthorizedLayer/index.tsx | 4 ++-- client/src/pages/Channel/index.tsx | 4 ++-- client/src/pages/Root/index.tsx | 4 ++-- client/src/pages/UnAuthorizedLayer/index.tsx | 4 ++-- 9 files changed, 34 insertions(+), 36 deletions(-) delete mode 100644 client/src/hooks/useMyInfoQuery.ts diff --git a/client/src/hooks/auth.ts b/client/src/hooks/auth.ts index 49a7eb6c..1e0f494b 100644 --- a/client/src/hooks/auth.ts +++ b/client/src/hooks/auth.ts @@ -1,8 +1,11 @@ import type { SignOutResult } from '@apis/auth'; +import type { GetMyInfoResult } from '@apis/user'; import type { UseMutationOptions } from '@tanstack/react-query'; +import type { AxiosError } from 'axios'; import { signOut } from '@apis/auth'; -import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { getMyInfo } from '@apis/user'; +import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import queryKeyCreator from '@/queryKeyCreator'; @@ -17,9 +20,28 @@ export const useSignOutMutation = ( return mutation; }; +/* ============================ [ myInfo ] ================================ */ +// 로그인한 사용자의 정보 + +export const useMyInfoQuery = () => { + const key = queryKeyCreator.me(); + const query = useQuery(key, getMyInfo); + + return query; +}; + +export const useMyInfoQueryData = () => { + const queryClient = useQueryClient(); + const key = queryKeyCreator.me(); + const me = queryClient.getQueryData(key); + + return me; +}; + export const useSetMyInfoQueryData = () => { const key = queryKeyCreator.me(); const queryClient = useQueryClient(); + const removeMyInfoQueryData = () => { queryClient.setQueryData(key, () => null); }; diff --git a/client/src/hooks/useMyInfoQuery.ts b/client/src/hooks/useMyInfoQuery.ts deleted file mode 100644 index eaeeacdd..00000000 --- a/client/src/hooks/useMyInfoQuery.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type { GetMyInfoResult } from '@apis/user'; -import type { AxiosError } from 'axios'; - -import { getMyInfo } from '@apis/user'; -import { useQuery, useQueryClient } from '@tanstack/react-query'; -import queryKeyCreator from 'src/queryKeyCreator'; - -export const useMyInfoQuery = () => { - const key = queryKeyCreator.me(); - const query = useQuery(key, getMyInfo); - - return query; -}; - -export default useMyInfoQuery; - -export const useMyInfo = () => { - const queryClient = useQueryClient(); - const key = queryKeyCreator.me(); - const me = queryClient.getQueryData(key); - - return me; -}; diff --git a/client/src/layouts/DmNav/index.tsx b/client/src/layouts/DmNav/index.tsx index dbd57d79..5d697453 100644 --- a/client/src/layouts/DmNav/index.tsx +++ b/client/src/layouts/DmNav/index.tsx @@ -1,7 +1,6 @@ import Spinner from '@components/Spinner'; import UserProfile from '@components/UserProfile'; import { useChannelQuery } from '@hooks/channel'; -// import { useMyInfo } from '@hooks/useMyInfoQuery'; import React from 'react'; import Scrollbars from 'react-custom-scrollbars-2'; import { Link } from 'react-router-dom'; diff --git a/client/src/layouts/Sidebar/index.tsx b/client/src/layouts/Sidebar/index.tsx index e4c1c0ed..3580d9f7 100644 --- a/client/src/layouts/Sidebar/index.tsx +++ b/client/src/layouts/Sidebar/index.tsx @@ -2,7 +2,7 @@ import type { MouseEventHandler } from 'react'; import MyPanel from '@components/MyPanel'; import Spinner from '@components/Spinner'; -import useMyInfoQuery from '@hooks/useMyInfoQuery'; +import { useMyInfoQuery } from '@hooks/auth'; import CommunityNav from '@layouts/CommunityNav'; import DmNav from '@layouts/DmNav'; import React from 'react'; diff --git a/client/src/layouts/SocketLayer/index.tsx b/client/src/layouts/SocketLayer/index.tsx index f220bd7b..210df81c 100644 --- a/client/src/layouts/SocketLayer/index.tsx +++ b/client/src/layouts/SocketLayer/index.tsx @@ -3,8 +3,8 @@ import type { CommunitySummaries } from '@apis/community'; import type { Sockets } from '@stores/socketStore'; import { SOCKET_URL } from '@constants/url'; +import { useMyInfoQueryData } from '@hooks/auth'; import { useSetChatsQuery } from '@hooks/chat'; -import { useMyInfo } from '@hooks/useMyInfoQuery'; import { useRootStore } from '@stores/rootStore'; import { useSocketStore } from '@stores/socketStore'; import { useTokenStore } from '@stores/tokenStore'; @@ -16,7 +16,7 @@ import { io } from 'socket.io-client'; import { joinChannelsPayload, SOCKET_EVENTS } from '@/socketEvents'; const SocketLayer = () => { - const myInfo = useMyInfo(); + const myInfo = useMyInfoQueryData(); const accessToken = useTokenStore((state) => state.accessToken); const firstEffect = useRef(true); const sockets = useSocketStore((state) => state.sockets); diff --git a/client/src/pages/AuthorizedLayer/index.tsx b/client/src/pages/AuthorizedLayer/index.tsx index 7f0a9194..4bd02277 100644 --- a/client/src/pages/AuthorizedLayer/index.tsx +++ b/client/src/pages/AuthorizedLayer/index.tsx @@ -1,5 +1,5 @@ import FullScreenSpinner from '@components/FullScreenSpinner'; -import { useMyInfo } from '@hooks/useMyInfoQuery'; +import { useMyInfoQueryData } from '@hooks/auth'; import useReissueTokenMutation from '@hooks/useReissueTokenMutation'; import { useTokenStore } from '@stores/tokenStore'; import React, { useEffect } from 'react'; @@ -12,7 +12,7 @@ import { Outlet, useNavigate } from 'react-router-dom'; * - 토큰 갱신 요청시, 알 수 없는 에러가 발생하면 **`/unknown-error`** 로 리다이렉트 된다. */ const AuthorizedLayer = () => { - const user = useMyInfo(); + const user = useMyInfoQueryData(); const accessToken = useTokenStore((state) => state.accessToken); const navigate = useNavigate(); diff --git a/client/src/pages/Channel/index.tsx b/client/src/pages/Channel/index.tsx index f050a5c6..e1e1f2cb 100644 --- a/client/src/pages/Channel/index.tsx +++ b/client/src/pages/Channel/index.tsx @@ -4,10 +4,10 @@ import ChatForm from '@components/ChatForm'; import ChatList from '@components/ChatList'; import Spinner from '@components/Spinner'; import { faker } from '@faker-js/faker'; +import { useMyInfoQueryData } from '@hooks/auth'; import { useChannelWithUsersMapQuery } from '@hooks/channel'; import { useChatsInfiniteQuery, useSetChatsQuery } from '@hooks/chat'; import useIntersectionObservable from '@hooks/useIntersectionObservable'; -import { useMyInfo } from '@hooks/useMyInfoQuery'; import ChannelUserStatus from '@layouts/ChannelUserStatus'; import { useRootStore } from '@stores/rootStore'; import { useSocketStore } from '@stores/socketStore'; @@ -25,7 +25,7 @@ const Channel = () => { const communityId = params.communityId as string; const roomId = params.roomId as string; - const myInfo = useMyInfo() as User; // 인증되지 않으면 이 페이지에 접근이 불가능하기 때문에 무조건 myInfo가 있음. + const myInfo = useMyInfoQueryData() as User; // 인증되지 않으면 이 페이지에 접근이 불가능하기 때문에 무조건 myInfo가 있음. const channelWithUsersMap = useChannelWithUsersMapQuery(roomId); const chatsInfiniteQuery = useChatsInfiniteQuery(roomId); diff --git a/client/src/pages/Root/index.tsx b/client/src/pages/Root/index.tsx index ced43a86..4c30d743 100644 --- a/client/src/pages/Root/index.tsx +++ b/client/src/pages/Root/index.tsx @@ -1,4 +1,4 @@ -import { useMyInfo } from '@hooks/useMyInfoQuery'; +import { useMyInfoQueryData } from '@hooks/auth'; import { useTokenStore } from '@stores/tokenStore'; import React from 'react'; import { Navigate } from 'react-router-dom'; @@ -11,7 +11,7 @@ import { Navigate } from 'react-router-dom'; * - 조건문에 user || accessToken 중 하나라도 없으면 **`/sign-in`** -> **`/`** -> **`/sign-in`** ... 무한루프 발생함. */ const Root = () => { - const user = useMyInfo(); + const user = useMyInfoQueryData(); const accessToken = useTokenStore((state) => state.accessToken); if (user || accessToken) return ; diff --git a/client/src/pages/UnAuthorizedLayer/index.tsx b/client/src/pages/UnAuthorizedLayer/index.tsx index a70bbbb0..ac7ce037 100644 --- a/client/src/pages/UnAuthorizedLayer/index.tsx +++ b/client/src/pages/UnAuthorizedLayer/index.tsx @@ -1,5 +1,5 @@ import FullScreenSpinner from '@components/FullScreenSpinner'; -import { useMyInfo } from '@hooks/useMyInfoQuery'; +import { useMyInfoQueryData } from '@hooks/auth'; import useReissueTokenMutation from '@hooks/useReissueTokenMutation'; import { useTokenStore } from '@stores/tokenStore'; import React, { useEffect, useState } from 'react'; @@ -11,7 +11,7 @@ import { Outlet, Navigate, useLocation } from 'react-router-dom'; * - 토큰 갱신 요청시, 유효하지 않은 토큰 에러나 알 수 없는 에러가 발생하면 페이지 이동 없이 그대로 유지한다. */ const UnAuthorizedLayer = () => { - const user = useMyInfo(); + const user = useMyInfoQueryData(); const location = useLocation(); const accessToken = useTokenStore((state) => state.accessToken); From 1122e2b2e7b9358e65dcf6abbee25631396e5811 Mon Sep 17 00:00:00 2001 From: leegwae Date: Fri, 9 Dec 2022 21:25:15 +0900 Subject: [PATCH 105/298] =?UTF-8?q?refactor:=20`@hooks/useSignInMutation`?= =?UTF-8?q?=EC=9D=98=20=EC=BB=A4=EC=8A=A4=ED=85=80=20=ED=9B=85=EC=9D=84=20?= =?UTF-8?q?`@hooks/auth`=EB=A1=9C=20=EC=9D=B4=EB=8F=99=20(#296)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/hooks/auth.ts | 17 ++++++++++++++--- client/src/hooks/useSignInMutation.ts | 20 -------------------- client/src/pages/SignIn/index.tsx | 2 +- 3 files changed, 15 insertions(+), 24 deletions(-) delete mode 100644 client/src/hooks/useSignInMutation.ts diff --git a/client/src/hooks/auth.ts b/client/src/hooks/auth.ts index 1e0f494b..e91bcc0d 100644 --- a/client/src/hooks/auth.ts +++ b/client/src/hooks/auth.ts @@ -1,14 +1,25 @@ -import type { SignOutResult } from '@apis/auth'; +import type { SignOutResult, SignInRequest, SignInResult } from '@apis/auth'; import type { GetMyInfoResult } from '@apis/user'; import type { UseMutationOptions } from '@tanstack/react-query'; import type { AxiosError } from 'axios'; -import { signOut } from '@apis/auth'; +import { signOut, signIn } from '@apis/auth'; import { getMyInfo } from '@apis/user'; -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; +import { useQuery, useQueryClient, useMutation } from '@tanstack/react-query'; import queryKeyCreator from '@/queryKeyCreator'; +export const useSignInMutation = ( + options: UseMutationOptions, +) => { + const key = queryKeyCreator.signIn(); + const mutation = useMutation(key, signIn, { + ...options, + }); + + return mutation; +}; + export const useSignOutMutation = ( options: UseMutationOptions, ) => { diff --git a/client/src/hooks/useSignInMutation.ts b/client/src/hooks/useSignInMutation.ts deleted file mode 100644 index 73e5c718..00000000 --- a/client/src/hooks/useSignInMutation.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { SignInRequest, SignInResult } from '@apis/auth'; -import type { UseMutationOptions } from '@tanstack/react-query'; - -import { signIn } from '@apis/auth'; -import { useMutation } from '@tanstack/react-query'; - -import queryKeyCreator from '@/queryKeyCreator'; - -const useSignInMutation = ( - options: UseMutationOptions, -) => { - const key = queryKeyCreator.signIn(); - const mutation = useMutation(key, signIn, { - ...options, - }); - - return mutation; -}; - -export default useSignInMutation; diff --git a/client/src/pages/SignIn/index.tsx b/client/src/pages/SignIn/index.tsx index 3491377b..126f8a4d 100644 --- a/client/src/pages/SignIn/index.tsx +++ b/client/src/pages/SignIn/index.tsx @@ -7,7 +7,7 @@ import Logo from '@components/Logo'; import TextButton from '@components/TextButton'; import REGEX from '@constants/regex'; import defaultErrorHandler from '@errors/defaultErrorHandler'; -import useSignInMutation from '@hooks/useSignInMutation'; +import { useSignInMutation } from '@hooks/auth'; import { useTokenStore } from '@stores/tokenStore'; import React from 'react'; import { Controller, useForm } from 'react-hook-form'; From d6f9b2eacecc465e71479061d36a667e88941abf Mon Sep 17 00:00:00 2001 From: leegwae Date: Fri, 9 Dec 2022 21:26:51 +0900 Subject: [PATCH 106/298] =?UTF-8?q?refactor:=20`@hooks/useSignUpMutation`?= =?UTF-8?q?=EC=9D=98=20=EC=BB=A4=EC=8A=A4=ED=85=80=20=ED=9B=85=EC=9D=84=20?= =?UTF-8?q?`@hooks/auth`=EB=A1=9C=20=EC=9D=B4=EB=8F=99=20(#296)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/hooks/auth.ts | 21 +++++++++++++++++++-- client/src/hooks/useSignUpMutation.ts | 20 -------------------- client/src/pages/SignUp/index.tsx | 2 +- 3 files changed, 20 insertions(+), 23 deletions(-) delete mode 100644 client/src/hooks/useSignUpMutation.ts diff --git a/client/src/hooks/auth.ts b/client/src/hooks/auth.ts index e91bcc0d..cfc92634 100644 --- a/client/src/hooks/auth.ts +++ b/client/src/hooks/auth.ts @@ -1,14 +1,31 @@ -import type { SignOutResult, SignInRequest, SignInResult } from '@apis/auth'; +import type { + SignOutResult, + SignInRequest, + SignInResult, + SignUpRequest, + SignUpResult, +} from '@apis/auth'; import type { GetMyInfoResult } from '@apis/user'; import type { UseMutationOptions } from '@tanstack/react-query'; import type { AxiosError } from 'axios'; -import { signOut, signIn } from '@apis/auth'; +import { signOut, signIn, signUp } from '@apis/auth'; import { getMyInfo } from '@apis/user'; import { useQuery, useQueryClient, useMutation } from '@tanstack/react-query'; import queryKeyCreator from '@/queryKeyCreator'; +export const useSignUpMutation = ( + options: UseMutationOptions, +) => { + const key = queryKeyCreator.signUp(); + const mutation = useMutation(key, signUp, { + ...options, + }); + + return mutation; +}; + export const useSignInMutation = ( options: UseMutationOptions, ) => { diff --git a/client/src/hooks/useSignUpMutation.ts b/client/src/hooks/useSignUpMutation.ts deleted file mode 100644 index 097d76b9..00000000 --- a/client/src/hooks/useSignUpMutation.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { SignUpRequest, SignUpResult } from '@apis/auth'; -import type { UseMutationOptions } from '@tanstack/react-query'; - -import { signUp } from '@apis/auth'; -import { useMutation } from '@tanstack/react-query'; - -import queryKeyCreator from '@/queryKeyCreator'; - -const useSignUpMutation = ( - options: UseMutationOptions, -) => { - const key = queryKeyCreator.signUp(); - const mutation = useMutation(key, signUp, { - ...options, - }); - - return mutation; -}; - -export default useSignUpMutation; diff --git a/client/src/pages/SignUp/index.tsx b/client/src/pages/SignUp/index.tsx index a1911748..d141fc9e 100644 --- a/client/src/pages/SignUp/index.tsx +++ b/client/src/pages/SignUp/index.tsx @@ -8,7 +8,7 @@ import SuccessMessage from '@components/SuccessMessage'; import TextButton from '@components/TextButton'; import REGEX from '@constants/regex'; import defaultErrorHandler from '@errors/defaultErrorHandler'; -import useSignUpMutation from '@hooks/useSignUpMutation'; +import { useSignUpMutation } from '@hooks/auth'; import React from 'react'; import { useForm, Controller } from 'react-hook-form'; import { useNavigate } from 'react-router-dom'; From c059d3531a109ffc84c94cf4e8fb4c3728f72cc2 Mon Sep 17 00:00:00 2001 From: leegwae Date: Fri, 9 Dec 2022 21:29:18 +0900 Subject: [PATCH 107/298] =?UTF-8?q?refactor:=20`@hooks/useReissueTokenMuta?= =?UTF-8?q?tion`=EC=9D=98=20=EC=BB=A4=EC=8A=A4=ED=85=80=20=ED=9B=85?= =?UTF-8?q?=EC=9D=84=20`@hooks/auth`=EB=A1=9C=20=EC=9D=B4=EB=8F=99=20(#296?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/hooks/auth.ts | 69 +++++++++++++++++++- client/src/hooks/useReissueTokenMutation.ts | 69 -------------------- client/src/pages/AuthorizedLayer/index.tsx | 3 +- client/src/pages/UnAuthorizedLayer/index.tsx | 3 +- 4 files changed, 68 insertions(+), 76 deletions(-) delete mode 100644 client/src/hooks/useReissueTokenMutation.ts diff --git a/client/src/hooks/auth.ts b/client/src/hooks/auth.ts index cfc92634..67cc9b6c 100644 --- a/client/src/hooks/auth.ts +++ b/client/src/hooks/auth.ts @@ -1,17 +1,24 @@ +import type { ErrorResponse } from '@@types/apis/response'; import type { SignOutResult, SignInRequest, SignInResult, SignUpRequest, SignUpResult, + ReissueTokenResult, } from '@apis/auth'; import type { GetMyInfoResult } from '@apis/user'; -import type { UseMutationOptions } from '@tanstack/react-query'; -import type { AxiosError } from 'axios'; +import type { + UseMutationOptions, + UseMutationResult, +} from '@tanstack/react-query'; -import { signOut, signIn, signUp } from '@apis/auth'; +import { signOut, signIn, signUp, reissueToken } from '@apis/auth'; import { getMyInfo } from '@apis/user'; +import { useTokenStore } from '@stores/tokenStore'; import { useQuery, useQueryClient, useMutation } from '@tanstack/react-query'; +import { AxiosError } from 'axios'; +import { useNavigate } from 'react-router-dom'; import queryKeyCreator from '@/queryKeyCreator'; @@ -48,6 +55,62 @@ export const useSignOutMutation = ( return mutation; }; +type UseReissueTokenMutationResult = UseMutationResult< + ReissueTokenResult, + unknown, + void, + unknown +>; + +interface UseReissueTokenMutation { + ( + invalidTokenErrorFallback?: string | (() => void), + unknownErrorFallback?: string | (() => void), + ): UseReissueTokenMutationResult; +} + +/** + * @description 서버에서 401 에러가 발생하는 경우에만 accessToken을 리셋하기 때문에, 그 이외의 에러로 로그인이 풀리지는 않음. + */ +export const useReissueTokenMutation: UseReissueTokenMutation = ( + invalidTokenErrorFallback, + unknownErrorFallback, +) => { + const navigate = useNavigate(); + const setAccessToken = useTokenStore((state) => state.setAccessToken); + const key = queryKeyCreator.reissueToken(); + const mutation = useMutation(key, reissueToken, { + onSuccess: (data) => { + setAccessToken(data.accessToken); + }, + onError: (error) => { + if (!(error instanceof AxiosError)) { + console.error(error); + return; + } + + const errorResponse = error.response?.data as ErrorResponse | undefined; + + /** 유효하지 않은 토큰 */ + if (errorResponse?.statusCode === 401) { + setAccessToken(null); + if (typeof invalidTokenErrorFallback === 'string') + navigate(invalidTokenErrorFallback); + else invalidTokenErrorFallback && invalidTokenErrorFallback(); + + return; + } + + /** 네트워크 오류나 기타 서버 오류 등 */ + if (typeof unknownErrorFallback === 'string') { + navigate(unknownErrorFallback); + } else unknownErrorFallback && unknownErrorFallback(); + }, + }); + + return mutation; +}; + /* ============================ [ myInfo ] ================================ */ // 로그인한 사용자의 정보 diff --git a/client/src/hooks/useReissueTokenMutation.ts b/client/src/hooks/useReissueTokenMutation.ts deleted file mode 100644 index e0c55d31..00000000 --- a/client/src/hooks/useReissueTokenMutation.ts +++ /dev/null @@ -1,69 +0,0 @@ -import type { ErrorResponse } from '@@types/apis/response'; -import type { ReissueTokenResult } from '@apis/auth'; -import type { UseMutationResult } from '@tanstack/react-query'; - -import { reissueToken } from '@apis/auth'; -import { useTokenStore } from '@stores/tokenStore'; -import { useMutation } from '@tanstack/react-query'; -import { AxiosError } from 'axios'; -import { useNavigate } from 'react-router-dom'; - -import queryKeyCreator from '@/queryKeyCreator'; - -type UseReissueTokenMutationResult = UseMutationResult< - ReissueTokenResult, - unknown, - void, - unknown ->; - -interface UseReissueTokenMutation { - ( - invalidTokenErrorFallback?: string | (() => void), - unknownErrorFallback?: string | (() => void), - ): UseReissueTokenMutationResult; -} - -/** - * @description 서버에서 401 에러가 발생하는 경우에만 accessToken을 리셋하기 때문에, 그 이외의 에러로 로그인이 풀리지는 않음. - */ -const useReissueTokenMutation: UseReissueTokenMutation = ( - invalidTokenErrorFallback, - unknownErrorFallback, -) => { - const navigate = useNavigate(); - const setAccessToken = useTokenStore((state) => state.setAccessToken); - const key = queryKeyCreator.reissueToken(); - const mutation = useMutation(key, reissueToken, { - onSuccess: (data) => { - setAccessToken(data.accessToken); - }, - onError: (error) => { - if (!(error instanceof AxiosError)) { - console.error(error); - return; - } - - const errorResponse = error.response?.data as ErrorResponse | undefined; - - /** 유효하지 않은 토큰 */ - if (errorResponse?.statusCode === 401) { - setAccessToken(null); - if (typeof invalidTokenErrorFallback === 'string') - navigate(invalidTokenErrorFallback); - else invalidTokenErrorFallback && invalidTokenErrorFallback(); - - return; - } - - /** 네트워크 오류나 기타 서버 오류 등 */ - if (typeof unknownErrorFallback === 'string') { - navigate(unknownErrorFallback); - } else unknownErrorFallback && unknownErrorFallback(); - }, - }); - - return mutation; -}; - -export default useReissueTokenMutation; diff --git a/client/src/pages/AuthorizedLayer/index.tsx b/client/src/pages/AuthorizedLayer/index.tsx index 4bd02277..3c2852cc 100644 --- a/client/src/pages/AuthorizedLayer/index.tsx +++ b/client/src/pages/AuthorizedLayer/index.tsx @@ -1,6 +1,5 @@ import FullScreenSpinner from '@components/FullScreenSpinner'; -import { useMyInfoQueryData } from '@hooks/auth'; -import useReissueTokenMutation from '@hooks/useReissueTokenMutation'; +import { useMyInfoQueryData, useReissueTokenMutation } from '@hooks/auth'; import { useTokenStore } from '@stores/tokenStore'; import React, { useEffect } from 'react'; import { Outlet, useNavigate } from 'react-router-dom'; diff --git a/client/src/pages/UnAuthorizedLayer/index.tsx b/client/src/pages/UnAuthorizedLayer/index.tsx index ac7ce037..460c3f51 100644 --- a/client/src/pages/UnAuthorizedLayer/index.tsx +++ b/client/src/pages/UnAuthorizedLayer/index.tsx @@ -1,6 +1,5 @@ import FullScreenSpinner from '@components/FullScreenSpinner'; -import { useMyInfoQueryData } from '@hooks/auth'; -import useReissueTokenMutation from '@hooks/useReissueTokenMutation'; +import { useMyInfoQueryData, useReissueTokenMutation } from '@hooks/auth'; import { useTokenStore } from '@stores/tokenStore'; import React, { useEffect, useState } from 'react'; import { Outlet, Navigate, useLocation } from 'react-router-dom'; From 5f91dd0f0262ca511f5a9dae2b1d624eb236f050 Mon Sep 17 00:00:00 2001 From: leegwae Date: Fri, 9 Dec 2022 21:34:37 +0900 Subject: [PATCH 108/298] =?UTF-8?q?refactor:=20`@hooks/useUsersQuery`?= =?UTF-8?q?=EC=9D=98=20=EC=BB=A4=EC=8A=A4=ED=85=80=20=ED=9B=85=EC=9D=84=20?= =?UTF-8?q?`@hooks/user`=EB=A1=9C=20=EC=9D=B4=EB=8F=99=20(#296)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/CommunityInviteBox/index.tsx | 2 +- client/src/hooks/useUsersQuery.ts | 26 ------------------- client/src/hooks/user.ts | 21 +++++++++++++-- client/src/layouts/UserSearch/index.tsx | 2 +- 4 files changed, 21 insertions(+), 30 deletions(-) delete mode 100644 client/src/hooks/useUsersQuery.ts diff --git a/client/src/components/CommunityInviteBox/index.tsx b/client/src/components/CommunityInviteBox/index.tsx index 8fc380c5..dacd6094 100644 --- a/client/src/components/CommunityInviteBox/index.tsx +++ b/client/src/components/CommunityInviteBox/index.tsx @@ -4,7 +4,7 @@ import Button from '@components/Button'; import CommunityInviteUserSearchResult from '@components/CommunityInviteUserSearchResult'; import ErrorMessage from '@components/ErrorMessage'; import SearchInput from '@components/SearchInput'; -import useUsersQuery from '@hooks/useUsersQuery'; +import { useUsersQuery } from '@hooks/user'; import React, { useState } from 'react'; import { useForm } from 'react-hook-form'; diff --git a/client/src/hooks/useUsersQuery.ts b/client/src/hooks/useUsersQuery.ts deleted file mode 100644 index bb49221f..00000000 --- a/client/src/hooks/useUsersQuery.ts +++ /dev/null @@ -1,26 +0,0 @@ -import type { GetUsersResult } from '@apis/user'; -import type { AxiosError } from 'axios'; - -import { getUsers } from '@apis/user'; -import { useQuery } from '@tanstack/react-query'; - -import queryKeyCreator from '@/queryKeyCreator'; - -const useUserSearchQuery = ( - filter: string, - options?: { suspense?: boolean; enabled?: boolean }, -) => { - const key = queryKeyCreator.userSearch(filter); - const query = useQuery( - key, - () => getUsers({ search: filter }), - { - ...options, - refetchOnWindowFocus: false, - }, - ); - - return query; -}; - -export default useUserSearchQuery; diff --git a/client/src/hooks/user.ts b/client/src/hooks/user.ts index a3ec8cf0..7e2fe9dd 100644 --- a/client/src/hooks/user.ts +++ b/client/src/hooks/user.ts @@ -1,13 +1,30 @@ import type { Channel } from '@apis/channel'; -import type { User, UserUID } from '@apis/user'; +import type { User, UserUID, GetUsersResult } from '@apis/user'; import type { AxiosError } from 'axios'; import { getChannel } from '@apis/channel'; -import { getCommunityUsers } from '@apis/user'; +import { getCommunityUsers, getUsers } from '@apis/user'; import { useQuery, useQueryClient } from '@tanstack/react-query'; import queryKeyCreator from '@/queryKeyCreator'; +export const useUsersQuery = ( + filter: string, + options?: { suspense?: boolean; enabled?: boolean }, +) => { + const key = queryKeyCreator.userSearch(filter); + const query = useQuery( + key, + () => getUsers({ search: filter }), + { + ...options, + refetchOnWindowFocus: false, + }, + ); + + return query; +}; + export const useCommunityUsersQuery = ( communityId: string, filter?: string, diff --git a/client/src/layouts/UserSearch/index.tsx b/client/src/layouts/UserSearch/index.tsx index 152ace58..40a223dc 100644 --- a/client/src/layouts/UserSearch/index.tsx +++ b/client/src/layouts/UserSearch/index.tsx @@ -1,7 +1,7 @@ import ErrorMessage from '@components/ErrorMessage'; import SearchInput from '@components/SearchInput'; import UserSearchResult from '@components/UserSearchResult'; -import useUsersQuery from '@hooks/useUsersQuery'; +import { useUsersQuery } from '@hooks/user'; import React, { useState } from 'react'; import { useForm } from 'react-hook-form'; From d099dd054c6123e7d238a6c2dcfcbc47c57b469f Mon Sep 17 00:00:00 2001 From: leegwae Date: Fri, 9 Dec 2022 21:39:27 +0900 Subject: [PATCH 109/298] =?UTF-8?q?refactor:=20`@hooks/useFollowersQuery`?= =?UTF-8?q?=EC=9D=98=20=EC=BB=A4=EC=8A=A4=ED=85=80=20=ED=9B=85=EC=9D=84=20?= =?UTF-8?q?`@hooks/user`=EB=A1=9C=20=EC=9D=B4=EB=8F=99=20(#296)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FollowingUserSearchResult/index.tsx | 2 +- .../src/components/UserSearchResult/index.tsx | 2 +- client/src/hooks/useFollowersQuery.ts | 38 ------------------- client/src/hooks/user.ts | 33 +++++++++++++++- client/src/layouts/Followers/index.tsx | 2 +- 5 files changed, 34 insertions(+), 43 deletions(-) delete mode 100644 client/src/hooks/useFollowersQuery.ts diff --git a/client/src/components/FollowingUserSearchResult/index.tsx b/client/src/components/FollowingUserSearchResult/index.tsx index ffbe3ec2..da445d25 100644 --- a/client/src/components/FollowingUserSearchResult/index.tsx +++ b/client/src/components/FollowingUserSearchResult/index.tsx @@ -5,7 +5,7 @@ import FollowingUserContextMenu from '@components/FollowingUserContextMenu'; import UserItem from '@components/UserItem'; import UserList from '@components/UserList'; import { EllipsisHorizontalIcon } from '@heroicons/react/20/solid'; -import { useFollowersMapQuery } from '@hooks/useFollowersQuery'; +import { useFollowersMapQuery } from '@hooks/user'; import { useRootStore } from '@stores/rootStore'; import React from 'react'; import Scrollbars from 'react-custom-scrollbars-2'; diff --git a/client/src/components/UserSearchResult/index.tsx b/client/src/components/UserSearchResult/index.tsx index 0656e830..7bb2ccfd 100644 --- a/client/src/components/UserSearchResult/index.tsx +++ b/client/src/components/UserSearchResult/index.tsx @@ -5,8 +5,8 @@ import FollowerUserContextMenu from '@components/FollowerUserContextMenu'; import UserItem from '@components/UserItem'; import UserList from '@components/UserList'; import { EllipsisHorizontalIcon } from '@heroicons/react/20/solid'; -import { useFollowersMapQuery } from '@hooks/useFollowersQuery'; import { useFollowingsMapQuery } from '@hooks/useFollowingsQuery'; +import { useFollowersMapQuery } from '@hooks/user'; import { useRootStore } from '@stores/rootStore'; import React from 'react'; import Scrollbars from 'react-custom-scrollbars-2'; diff --git a/client/src/hooks/useFollowersQuery.ts b/client/src/hooks/useFollowersQuery.ts deleted file mode 100644 index d681a41b..00000000 --- a/client/src/hooks/useFollowersQuery.ts +++ /dev/null @@ -1,38 +0,0 @@ -import type { User } from '@apis/user'; -import type { AxiosError } from 'axios'; - -import { getFollowers } from '@apis/user'; -import { useQuery } from '@tanstack/react-query'; - -import queryKeyCreator from '@/queryKeyCreator'; - -const useFollowersQuery = ( - filter?: string, - options?: { suspense: boolean }, -) => { - const key = queryKeyCreator.followers(); - const query = useQuery(key, getFollowers, { - ...options, - select: (data) => - filter - ? data.filter(({ nickname }) => - nickname.toUpperCase().includes(filter.toUpperCase()), - ) - : data, - }); - - return query; -}; - -export default useFollowersQuery; - -export type FollowersMap = Record; -export const useFollowersMapQuery = () => { - const key = queryKeyCreator.followers(); - const query = useQuery(key, getFollowers, { - select: (followers) => - followers.reduce((acc, cur) => ({ ...acc, [cur._id]: cur }), {}), - }); - - return query; -}; diff --git a/client/src/hooks/user.ts b/client/src/hooks/user.ts index 7e2fe9dd..a52cdfa2 100644 --- a/client/src/hooks/user.ts +++ b/client/src/hooks/user.ts @@ -3,8 +3,8 @@ import type { User, UserUID, GetUsersResult } from '@apis/user'; import type { AxiosError } from 'axios'; import { getChannel } from '@apis/channel'; -import { getCommunityUsers, getUsers } from '@apis/user'; -import { useQuery, useQueryClient } from '@tanstack/react-query'; +import { getCommunityUsers, getUsers, getFollowers } from '@apis/user'; +import { useQueryClient, useQuery } from '@tanstack/react-query'; import queryKeyCreator from '@/queryKeyCreator'; @@ -25,6 +25,35 @@ export const useUsersQuery = ( return query; }; +export const useFollowersQuery = ( + filter?: string, + options?: { suspense: boolean }, +) => { + const key = queryKeyCreator.followers(); + const query = useQuery(key, getFollowers, { + ...options, + select: (data) => + filter + ? data.filter(({ nickname }) => + nickname.toUpperCase().includes(filter.toUpperCase()), + ) + : data, + }); + + return query; +}; + +export type FollowersMap = Record; +export const useFollowersMapQuery = () => { + const key = queryKeyCreator.followers(); + const query = useQuery(key, getFollowers, { + select: (followers) => + followers.reduce((acc, cur) => ({ ...acc, [cur._id]: cur }), {}), + }); + + return query; +}; + export const useCommunityUsersQuery = ( communityId: string, filter?: string, diff --git a/client/src/layouts/Followers/index.tsx b/client/src/layouts/Followers/index.tsx index 599aa534..2984e9ef 100644 --- a/client/src/layouts/Followers/index.tsx +++ b/client/src/layouts/Followers/index.tsx @@ -2,7 +2,7 @@ import ErrorMessage from '@components/ErrorMessage'; import FollowerUserSearchResult from '@components/FollowerUserSearchResult'; import SearchInput from '@components/SearchInput'; import useDebouncedValue from '@hooks/useDebouncedValue'; -import useFollowersQuery from '@hooks/useFollowersQuery'; +import { useFollowersQuery } from '@hooks/user'; import React, { useState } from 'react'; /** From 95347e1ca0fddd7864a4793fe7fa08b738282783 Mon Sep 17 00:00:00 2001 From: leegwae Date: Fri, 9 Dec 2022 21:41:39 +0900 Subject: [PATCH 110/298] =?UTF-8?q?refactor:=20`@hooks/useFollowingMutatio?= =?UTF-8?q?n`=EC=9D=98=20=EC=BB=A4=EC=8A=A4=ED=85=80=20=ED=9B=85=EC=9D=84?= =?UTF-8?q?=20`@hooks/user`=EB=A1=9C=20=EC=9D=B4=EB=8F=99=20(#296)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FollowerUserContextMenu/index.tsx | 2 +- .../FollowingUserContextMenu/index.tsx | 2 +- client/src/hooks/useFollowingMutation.ts | 18 ------------- client/src/hooks/user.ts | 26 ++++++++++++++++--- 4 files changed, 25 insertions(+), 23 deletions(-) delete mode 100644 client/src/hooks/useFollowingMutation.ts diff --git a/client/src/components/FollowerUserContextMenu/index.tsx b/client/src/components/FollowerUserContextMenu/index.tsx index f154a9b7..a714f35e 100644 --- a/client/src/components/FollowerUserContextMenu/index.tsx +++ b/client/src/components/FollowerUserContextMenu/index.tsx @@ -3,8 +3,8 @@ import type { FC } from 'react'; import defaultErrorHandler from '@errors/defaultErrorHandler'; import { UserPlusIcon } from '@heroicons/react/20/solid'; -import useFollowingMutation from '@hooks/useFollowingMutation'; import { useInvalidateFollowingsQuery } from '@hooks/useFollowingsQuery'; +import { useFollowingMutation } from '@hooks/user'; import { useRootStore } from '@stores/rootStore'; import React from 'react'; diff --git a/client/src/components/FollowingUserContextMenu/index.tsx b/client/src/components/FollowingUserContextMenu/index.tsx index ff06232a..b80b89a3 100644 --- a/client/src/components/FollowingUserContextMenu/index.tsx +++ b/client/src/components/FollowingUserContextMenu/index.tsx @@ -3,8 +3,8 @@ import type { FC } from 'react'; import defaultErrorHandler from '@errors/defaultErrorHandler'; import { UserMinusIcon } from '@heroicons/react/20/solid'; -import useFollowingMutation from '@hooks/useFollowingMutation'; import { useInvalidateFollowingsQuery } from '@hooks/useFollowingsQuery'; +import { useFollowingMutation } from '@hooks/user'; import { useRootStore } from '@stores/rootStore'; import React from 'react'; diff --git a/client/src/hooks/useFollowingMutation.ts b/client/src/hooks/useFollowingMutation.ts deleted file mode 100644 index aa377ca7..00000000 --- a/client/src/hooks/useFollowingMutation.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { UpdateFollowingResult } from '@apis/user'; -import type { UseMutationOptions } from '@tanstack/react-query'; - -import { updateFollowing } from '@apis/user'; -import { useMutation } from '@tanstack/react-query'; - -import queryKeyCreator from '@/queryKeyCreator'; - -const useFollowingMutation = ( - options?: UseMutationOptions, -) => { - const key = queryKeyCreator.followings.toggleFollowing(); - const mutation = useMutation(key, updateFollowing, { ...options }); - - return mutation; -}; - -export default useFollowingMutation; diff --git a/client/src/hooks/user.ts b/client/src/hooks/user.ts index a52cdfa2..cae08d65 100644 --- a/client/src/hooks/user.ts +++ b/client/src/hooks/user.ts @@ -1,10 +1,21 @@ import type { Channel } from '@apis/channel'; -import type { User, UserUID, GetUsersResult } from '@apis/user'; +import type { + User, + UserUID, + GetUsersResult, + UpdateFollowingResult, +} from '@apis/user'; +import type { UseMutationOptions } from '@tanstack/react-query'; import type { AxiosError } from 'axios'; import { getChannel } from '@apis/channel'; -import { getCommunityUsers, getUsers, getFollowers } from '@apis/user'; -import { useQueryClient, useQuery } from '@tanstack/react-query'; +import { + getCommunityUsers, + getUsers, + getFollowers, + updateFollowing, +} from '@apis/user'; +import { useQueryClient, useQuery, useMutation } from '@tanstack/react-query'; import queryKeyCreator from '@/queryKeyCreator'; @@ -54,6 +65,15 @@ export const useFollowersMapQuery = () => { return query; }; +export const useFollowingMutation = ( + options?: UseMutationOptions, +) => { + const key = queryKeyCreator.followings.toggleFollowing(); + const mutation = useMutation(key, updateFollowing, { ...options }); + + return mutation; +}; + export const useCommunityUsersQuery = ( communityId: string, filter?: string, From bb1c918be70e5f4d3b3c1da5f3041cef08d1293f Mon Sep 17 00:00:00 2001 From: leegwae Date: Fri, 9 Dec 2022 21:47:57 +0900 Subject: [PATCH 111/298] =?UTF-8?q?refactor:=20`@hooks/useFollowingsQuery`?= =?UTF-8?q?=EC=9D=98=20=EC=BB=A4=EC=8A=A4=ED=85=80=20=ED=9B=85=EC=9D=84=20?= =?UTF-8?q?`@hooks/user`=EB=A1=9C=20=EC=9D=B4=EB=8F=99=20(#296)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FollowerUserContextMenu/index.tsx | 6 +- .../FollowerUserSearchResult/index.tsx | 2 +- .../FollowingUserContextMenu/index.tsx | 6 +- .../src/components/UserSearchResult/index.tsx | 3 +- client/src/hooks/useFollowingsQuery.ts | 55 ------------------- client/src/hooks/user.ts | 47 ++++++++++++++++ client/src/layouts/Followings/index.tsx | 4 +- 7 files changed, 59 insertions(+), 64 deletions(-) delete mode 100644 client/src/hooks/useFollowingsQuery.ts diff --git a/client/src/components/FollowerUserContextMenu/index.tsx b/client/src/components/FollowerUserContextMenu/index.tsx index a714f35e..df74f0ca 100644 --- a/client/src/components/FollowerUserContextMenu/index.tsx +++ b/client/src/components/FollowerUserContextMenu/index.tsx @@ -3,8 +3,10 @@ import type { FC } from 'react'; import defaultErrorHandler from '@errors/defaultErrorHandler'; import { UserPlusIcon } from '@heroicons/react/20/solid'; -import { useInvalidateFollowingsQuery } from '@hooks/useFollowingsQuery'; -import { useFollowingMutation } from '@hooks/user'; +import { + useInvalidateFollowingsQuery, + useFollowingMutation, +} from '@hooks/user'; import { useRootStore } from '@stores/rootStore'; import React from 'react'; diff --git a/client/src/components/FollowerUserSearchResult/index.tsx b/client/src/components/FollowerUserSearchResult/index.tsx index f7a0bca8..6642f2bc 100644 --- a/client/src/components/FollowerUserSearchResult/index.tsx +++ b/client/src/components/FollowerUserSearchResult/index.tsx @@ -5,7 +5,7 @@ import FollowerUserContextMenu from '@components/FollowerUserContextMenu'; import UserItem from '@components/UserItem'; import UserList from '@components/UserList'; import { EllipsisHorizontalIcon } from '@heroicons/react/20/solid'; -import { useFollowingsMapQuery } from '@hooks/useFollowingsQuery'; +import { useFollowingsMapQuery } from '@hooks/user'; import { useRootStore } from '@stores/rootStore'; import React from 'react'; import Scrollbars from 'react-custom-scrollbars-2'; diff --git a/client/src/components/FollowingUserContextMenu/index.tsx b/client/src/components/FollowingUserContextMenu/index.tsx index b80b89a3..1da0faae 100644 --- a/client/src/components/FollowingUserContextMenu/index.tsx +++ b/client/src/components/FollowingUserContextMenu/index.tsx @@ -3,8 +3,10 @@ import type { FC } from 'react'; import defaultErrorHandler from '@errors/defaultErrorHandler'; import { UserMinusIcon } from '@heroicons/react/20/solid'; -import { useInvalidateFollowingsQuery } from '@hooks/useFollowingsQuery'; -import { useFollowingMutation } from '@hooks/user'; +import { + useInvalidateFollowingsQuery, + useFollowingMutation, +} from '@hooks/user'; import { useRootStore } from '@stores/rootStore'; import React from 'react'; diff --git a/client/src/components/UserSearchResult/index.tsx b/client/src/components/UserSearchResult/index.tsx index 7bb2ccfd..e09a9271 100644 --- a/client/src/components/UserSearchResult/index.tsx +++ b/client/src/components/UserSearchResult/index.tsx @@ -5,8 +5,7 @@ import FollowerUserContextMenu from '@components/FollowerUserContextMenu'; import UserItem from '@components/UserItem'; import UserList from '@components/UserList'; import { EllipsisHorizontalIcon } from '@heroicons/react/20/solid'; -import { useFollowingsMapQuery } from '@hooks/useFollowingsQuery'; -import { useFollowersMapQuery } from '@hooks/user'; +import { useFollowingsMapQuery, useFollowersMapQuery } from '@hooks/user'; import { useRootStore } from '@stores/rootStore'; import React from 'react'; import Scrollbars from 'react-custom-scrollbars-2'; diff --git a/client/src/hooks/useFollowingsQuery.ts b/client/src/hooks/useFollowingsQuery.ts deleted file mode 100644 index 7f846a61..00000000 --- a/client/src/hooks/useFollowingsQuery.ts +++ /dev/null @@ -1,55 +0,0 @@ -import type { User } from '@apis/user'; -import type { AxiosError } from 'axios'; - -import { getFollowings } from '@apis/user'; -import { useQuery, useQueryClient } from '@tanstack/react-query'; -import { useCallback } from 'react'; - -import queryKeyCreator from '@/queryKeyCreator'; - -const useFollowingsQuery = ( - filter?: string, - options?: { suspense: boolean }, -) => { - const key = queryKeyCreator.followings.all(); - const query = useQuery(key, getFollowings, { - ...options, - select: (data) => - filter - ? data.filter(({ nickname }) => - nickname.toUpperCase().includes(filter.toUpperCase()), - ) - : data, - }); - - return query; -}; - -export default useFollowingsQuery; - -export type FollowingsMap = Record; -export const useFollowingsMapQuery = () => { - const key = queryKeyCreator.followings.all(); - const query = useQuery( - key, - getFollowings, - { - select: (followings) => - followings.reduce((acc, cur) => ({ ...acc, [cur._id]: cur }), {}), - }, - ); - - return query; -}; - -export const useInvalidateFollowingsQuery = () => { - const key = queryKeyCreator.followings.all(); - - const queryClient = useQueryClient(); - const invalidate = useCallback( - () => queryClient.invalidateQueries(key), - [queryClient, key], - ); - - return invalidate; -}; diff --git a/client/src/hooks/user.ts b/client/src/hooks/user.ts index cae08d65..ac346239 100644 --- a/client/src/hooks/user.ts +++ b/client/src/hooks/user.ts @@ -14,8 +14,10 @@ import { getUsers, getFollowers, updateFollowing, + getFollowings, } from '@apis/user'; import { useQueryClient, useQuery, useMutation } from '@tanstack/react-query'; +import { useCallback } from 'react'; import queryKeyCreator from '@/queryKeyCreator'; @@ -36,6 +38,51 @@ export const useUsersQuery = ( return query; }; +export const useFollowingsQuery = ( + filter?: string, + options?: { suspense: boolean }, +) => { + const key = queryKeyCreator.followings.all(); + const query = useQuery(key, getFollowings, { + ...options, + select: (data) => + filter + ? data.filter(({ nickname }) => + nickname.toUpperCase().includes(filter.toUpperCase()), + ) + : data, + }); + + return query; +}; + +export type FollowingsMap = Record; +export const useFollowingsMapQuery = () => { + const key = queryKeyCreator.followings.all(); + const query = useQuery( + key, + getFollowings, + { + select: (followings) => + followings.reduce((acc, cur) => ({ ...acc, [cur._id]: cur }), {}), + }, + ); + + return query; +}; + +export const useInvalidateFollowingsQuery = () => { + const key = queryKeyCreator.followings.all(); + + const queryClient = useQueryClient(); + const invalidate = useCallback( + () => queryClient.invalidateQueries(key), + [queryClient, key], + ); + + return invalidate; +}; + export const useFollowersQuery = ( filter?: string, options?: { suspense: boolean }, diff --git a/client/src/layouts/Followings/index.tsx b/client/src/layouts/Followings/index.tsx index 24651edb..8860d1a7 100644 --- a/client/src/layouts/Followings/index.tsx +++ b/client/src/layouts/Followings/index.tsx @@ -2,7 +2,7 @@ import ErrorMessage from '@components/ErrorMessage'; import FollowingUserSearchResult from '@components/FollowingUserSearchResult'; import SearchInput from '@components/SearchInput'; import useDebouncedValue from '@hooks/useDebouncedValue'; -import usefollowingsQuery from '@hooks/useFollowingsQuery'; +import { useFollowingsQuery } from '@hooks/user'; import React, { useState } from 'react'; /** @@ -15,7 +15,7 @@ const Followings = () => { const DEBOUNCE_DELAY = 500; const [filter, setFilter] = useState(''); const debouncedFilter = useDebouncedValue(filter, DEBOUNCE_DELAY); - const followingsQuery = usefollowingsQuery(debouncedFilter); + const followingsQuery = useFollowingsQuery(debouncedFilter); return (
From 4b46177e5a57bdd841bcce272da7ad23ff09a84c Mon Sep 17 00:00:00 2001 From: leegwae Date: Fri, 9 Dec 2022 21:50:24 +0900 Subject: [PATCH 112/298] =?UTF-8?q?refactor:=20`@hooks/useDirectMessagesQu?= =?UTF-8?q?ery`=EC=9D=98=20=EC=BB=A4=EC=8A=A4=ED=85=80=20=ED=9B=85?= =?UTF-8?q?=EC=9D=84=20`@hooks/dm`=EB=A1=9C=20=EC=9D=B4=EB=8F=99=20(#296)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/hooks/{useDirectMessagesQuery.ts => dm.ts} | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) rename client/src/hooks/{useDirectMessagesQuery.ts => dm.ts} (84%) diff --git a/client/src/hooks/useDirectMessagesQuery.ts b/client/src/hooks/dm.ts similarity index 84% rename from client/src/hooks/useDirectMessagesQuery.ts rename to client/src/hooks/dm.ts index 2d7d78a4..89cc9c93 100644 --- a/client/src/hooks/useDirectMessagesQuery.ts +++ b/client/src/hooks/dm.ts @@ -6,7 +6,7 @@ import { useQuery } from '@tanstack/react-query'; import queryKeyCreator from '@/queryKeyCreator'; -const useDirectMessagesQuery = () => { +export const useDirectMessagesQuery = () => { const key = queryKeyCreator.directMessage.list(); const query = useQuery( @@ -16,5 +16,3 @@ const useDirectMessagesQuery = () => { return query; }; - -export default useDirectMessagesQuery; From 1d14c18754ac4ebab5236fae7272adc513c36088 Mon Sep 17 00:00:00 2001 From: leegwae Date: Fri, 9 Dec 2022 21:56:59 +0900 Subject: [PATCH 113/298] =?UTF-8?q?refactor:=20`useChannelQuery`=20?= =?UTF-8?q?=EB=B0=98=ED=99=98=20=EA=B0=92=EC=9D=84=20=EA=B0=9D=EC=B2=B4?= =?UTF-8?q?=EB=A1=9C=20=EB=9E=98=ED=95=91=ED=95=98=EC=97=AC=20=EB=82=B4?= =?UTF-8?q?=EB=B3=B4=EB=82=B4=EC=A7=80=20=EC=95=8A=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20(#296)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/hooks/channel.ts | 2 +- client/src/layouts/DmNav/index.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/hooks/channel.ts b/client/src/hooks/channel.ts index 96357a08..4e84f909 100644 --- a/client/src/hooks/channel.ts +++ b/client/src/hooks/channel.ts @@ -33,7 +33,7 @@ export const useChannelQuery = (channelId: string) => { getChannel(channelId), ); - return { channelQuery: query }; + return query; }; export const useInvalidateChannelQuery = (channelId: string) => { diff --git a/client/src/layouts/DmNav/index.tsx b/client/src/layouts/DmNav/index.tsx index 5d697453..c964d9b7 100644 --- a/client/src/layouts/DmNav/index.tsx +++ b/client/src/layouts/DmNav/index.tsx @@ -8,7 +8,7 @@ import { Link } from 'react-router-dom'; const DmNav = () => { // const myInfo = useMyInfo(); // TODO 현재 DM API 없는 관계로 임시로 channel의 사용자 목록 가져오는 API 사용함 - const { channelQuery } = useChannelQuery('dm'); + const channelQuery = useChannelQuery('dm'); return (
-
- - {user.nickname} - - {isFailedToSendChat ? ( - 전송 실패 - ) : ( - - {dateStringToKRLocaleDateString(createdAt, { - hour: 'numeric', - minute: 'numeric', - })} - - )} - {isDeleted ? ( - (삭제됨) - ) : ( - isUpdated && (수정됨) - )} -
- {isFailedToSendChat && isHover && ( - - )} -
-
-
+ +
{isDeleted ? ( '삭제된 메시지입니다' ) : ( From d999140eb9dbacdc110c5fe85d22ec6e92390654 Mon Sep 17 00:00:00 2001 From: Cola Date: Sat, 10 Dec 2022 21:19:33 +0900 Subject: [PATCH 143/298] =?UTF-8?q?refactor:=20=EC=8B=9C=EC=8A=A4=ED=85=9C?= =?UTF-8?q?=20=EC=B1=84=ED=8C=85=20=ED=83=80=EC=9E=85=EC=9D=84=20BOT=20->?= =?UTF-8?q?=20SYSTEM=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/apis/chat.ts | 2 +- client/src/components/ChatItem/index.tsx | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/client/src/apis/chat.ts b/client/src/apis/chat.ts index b7840a42..453cf34c 100644 --- a/client/src/apis/chat.ts +++ b/client/src/apis/chat.ts @@ -3,7 +3,7 @@ import type { SuccessResponse } from '@@types/apis/response'; import endPoint from '@constants/endPoint'; import { tokenAxios } from '@utils/axios'; -export type ChatType = 'TEXT' | 'IMAGE' | 'BOT'; +export type ChatType = 'TEXT' | 'IMAGE' | 'SYSTEM'; export interface Chat { id: string; diff --git a/client/src/components/ChatItem/index.tsx b/client/src/components/ChatItem/index.tsx index 27ea31a6..b3abc02c 100644 --- a/client/src/components/ChatItem/index.tsx +++ b/client/src/components/ChatItem/index.tsx @@ -21,9 +21,9 @@ const getChatStatus = ({ const isUpdated = updatedAt && updatedAt !== createdAt; const isDeleted = !!deletedAt; const isFailedToSendChat = written === false; - const isSendFromBot = type === 'BOT'; + const isSystemChat = type === 'SYSTEM'; - return { isUpdated, isDeleted, isFailedToSendChat, isSendFromBot }; + return { isUpdated, isDeleted, isFailedToSendChat, isSystemChat }; }; interface ChatItemHeadProps { @@ -42,7 +42,7 @@ const ChatItemHead: FC = ({ handleClickDiscardButton, }) => { const { createdAt } = chat; - const { isUpdated, isDeleted, isFailedToSendChat, isSendFromBot } = + const { isUpdated, isDeleted, isFailedToSendChat, isSystemChat } = getChatStatus(chat); const failedChatControlButtonsClassnames = `flex items-center px-3 rounded`; @@ -50,7 +50,7 @@ const ChatItemHead: FC = ({
{user.nickname} From 48984346a70a54b5c963fe61180d1119b22f164a Mon Sep 17 00:00:00 2001 From: Cola Date: Sat, 10 Dec 2022 21:22:51 +0900 Subject: [PATCH 144/298] =?UTF-8?q?refactor:=20=EC=82=AD=EC=A0=9C=EB=90=9C?= =?UTF-8?q?=20=EC=B1=84=ED=8C=85=20p=ED=83=9C=EA=B7=B8=20=EB=9E=98?= =?UTF-8?q?=ED=95=91,=20opacity=20=EC=A1=B0=EC=A0=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/components/ChatItem/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/components/ChatItem/index.tsx b/client/src/components/ChatItem/index.tsx index b3abc02c..863f2c4a 100644 --- a/client/src/components/ChatItem/index.tsx +++ b/client/src/components/ChatItem/index.tsx @@ -139,7 +139,7 @@ const ChatItem: FC = ({ className = '', chat, user = deletedUser }) => { />
{isDeleted ? ( - '삭제된 메시지입니다' +

삭제된 채팅입니다.

) : ( )} From e7513d7d68fd196324ab1043f57eea0f6ced24b2 Mon Sep 17 00:00:00 2001 From: Cola Date: Sat, 10 Dec 2022 22:31:12 +0900 Subject: [PATCH 145/298] =?UTF-8?q?feat:=20ChatActions=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/ChatItem/ChatActions.tsx | 78 +++++++++++++++++++ client/src/components/ChatItem/index.tsx | 12 ++- 2 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 client/src/components/ChatItem/ChatActions.tsx diff --git a/client/src/components/ChatItem/ChatActions.tsx b/client/src/components/ChatItem/ChatActions.tsx new file mode 100644 index 00000000..e883add2 --- /dev/null +++ b/client/src/components/ChatItem/ChatActions.tsx @@ -0,0 +1,78 @@ +import type { ComponentPropsWithoutRef, FC, ReactNode } from 'react'; + +import { + DocumentDuplicateIcon, + TrashIcon, + PencilIcon, +} from '@heroicons/react/24/solid'; +import React from 'react'; + +const defaultActionButtonShapeClassnames = `p-1 rounded-lg`; +const defaultActionButtonColorClassnames = `bg-placeholder hover:bg-indigo`; +const removeActionButtonColorClassnames = `bg-error hover:bg-error-dark`; +const defaultIconClassnames = `w-5 h-5 fill-offWhite pointer-events-none`; + +export interface ContainerProps { + className?: string; + children: ReactNode; +} + +const Container: FC = ({ children, className = '' }) => { + return ( +
+ {children} +
+ ); +}; + +export interface ActionProps extends ComponentPropsWithoutRef<'button'> {} + +const Copy: FC = (props) => { + return ( + + ); +}; + +const Remove: FC = (props) => { + return ( + + ); +}; + +const Edit: FC = (props) => { + return ( + + ); +}; + +const ChatActions = { + Container, + Remove, + Edit, + Copy, +}; + +export default ChatActions; diff --git a/client/src/components/ChatItem/index.tsx b/client/src/components/ChatItem/index.tsx index 863f2c4a..b955511a 100644 --- a/client/src/components/ChatItem/index.tsx +++ b/client/src/components/ChatItem/index.tsx @@ -4,6 +4,7 @@ import type { ComponentPropsWithoutRef, FC } from 'react'; import Avatar from '@components/Avatar'; import ChatContent from '@components/ChatContent'; +import ChatActions from '@components/ChatItem/ChatActions'; import { useSetChatsQueryData } from '@hooks/chat'; import useHover from '@hooks/useHover'; import { dateStringToKRLocaleDateString } from '@utils/date'; @@ -119,7 +120,7 @@ const ChatItem: FC = ({ className = '', chat, user = deletedUser }) => { return ( chat && ( -
  • +
  • = ({ className = '', chat, user = deletedUser }) => { )}
    +
    + {isHover && ( + + + + + + )} +
  • ) From aa8775b42a011dc699b885a2ad8c8e96428dc8a9 Mon Sep 17 00:00:00 2001 From: Cola Date: Sat, 10 Dec 2022 23:12:10 +0900 Subject: [PATCH 146/298] =?UTF-8?q?feat:=20Clipboard=20Copy=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/components/ChatItem/index.tsx | 27 ++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/client/src/components/ChatItem/index.tsx b/client/src/components/ChatItem/index.tsx index b955511a..e33be14f 100644 --- a/client/src/components/ChatItem/index.tsx +++ b/client/src/components/ChatItem/index.tsx @@ -1,6 +1,6 @@ import type { Chat } from '@apis/chat'; import type { User } from '@apis/user'; -import type { ComponentPropsWithoutRef, FC } from 'react'; +import type { ComponentPropsWithoutRef, FC, MouseEventHandler } from 'react'; import Avatar from '@components/Avatar'; import ChatContent from '@components/ChatContent'; @@ -9,8 +9,9 @@ import { useSetChatsQueryData } from '@hooks/chat'; import useHover from '@hooks/useHover'; import { dateStringToKRLocaleDateString } from '@utils/date'; import cn from 'classnames'; -import React, { memo } from 'react'; +import React, { memo, useRef } from 'react'; import { useParams } from 'react-router-dom'; +import { toast } from 'react-toastify'; const getChatStatus = ({ updatedAt, @@ -103,6 +104,7 @@ interface Props extends ComponentPropsWithoutRef<'li'> { } const ChatItem: FC = ({ className = '', chat, user = deletedUser }) => { + const chatContentRef = useRef(null); const params = useParams(); const roomId = params.roomId as string; const { content, written, id } = chat; @@ -118,6 +120,23 @@ const ChatItem: FC = ({ className = '', chat, user = deletedUser }) => { removeChatQueryData({ channelId: roomId, id }); }; + const handleClickCopyButton: MouseEventHandler = () => { + if (!chatContentRef.current) return; + + const $$p = chatContentRef.current?.querySelectorAll('p'); + const chunks = [] as string[]; + + if ($$p) { + $$p.forEach(($p) => { + chunks.push($p.textContent || ''); + }); + } + + window.navigator.clipboard.writeText(chunks.join('\n')).then(() => { + toast.success('클립보드에 복사 완료!', { position: 'bottom-right' }); + }); + }; + return ( chat && (
  • @@ -138,7 +157,7 @@ const ChatItem: FC = ({ className = '', chat, user = deletedUser }) => { opacityClassnames={opacityClassnames} user={user} /> -
    +
    {isDeleted ? (

    삭제된 채팅입니다.

    ) : ( @@ -149,7 +168,7 @@ const ChatItem: FC = ({ className = '', chat, user = deletedUser }) => {
    {isHover && ( - + From 91cce63dd017b728a88f9f6d8aaaa28204d76db8 Mon Sep 17 00:00:00 2001 From: leegwae Date: Sat, 10 Dec 2022 23:37:53 +0900 Subject: [PATCH 147/298] =?UTF-8?q?refactor:=20=EA=B8=B4=20=EC=BB=A4?= =?UTF-8?q?=EC=8A=A4=ED=85=80=20=ED=9B=85=20=EC=9D=B4=EB=A6=84=20=EC=A4=84?= =?UTF-8?q?=EC=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/hooks/chat.ts | 14 +++++++------- client/src/pages/Channel/index.tsx | 11 ++++------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/client/src/hooks/chat.ts b/client/src/hooks/chat.ts index 25f149b9..f59dba0e 100644 --- a/client/src/hooks/chat.ts +++ b/client/src/hooks/chat.ts @@ -38,7 +38,7 @@ type AddChatsQueryData = ({ written?: boolean | -1; }) => void; -type UpdateChatQueryDataToWrittenChat = ({ +type UpdateChatToWrittenChat = ({ id, channelId, }: { @@ -46,8 +46,8 @@ type UpdateChatQueryDataToWrittenChat = ({ channelId: string; }) => void; -type UpdateChatQueryDataToFailedChat = UpdateChatQueryDataToWrittenChat; -type RemoveChatQueryData = UpdateChatQueryDataToWrittenChat; +type UpdateChatToFailedChat = UpdateChatToWrittenChat; +type RemoveChatQueryData = UpdateChatToWrittenChat; export const useSetChatsQueryData = () => { const queryClient = useQueryClient(); @@ -86,7 +86,7 @@ export const useSetChatsQueryData = () => { /** * Optimistic Updates한 채팅의 id와 채널 id를 받아서, 해당 채팅의 written 프로퍼티를 true로 변경시킨다, */ - const updateChatQueryDataToWrittenChat: UpdateChatQueryDataToWrittenChat = ({ + const updateChatToWrittenChat: UpdateChatToWrittenChat = ({ id, channelId, }) => { @@ -110,7 +110,7 @@ export const useSetChatsQueryData = () => { /** * Optimistic Updates한 채팅의 id와 채널 id를 받아서, 해당 채팅의 written 프로퍼티를 false로 변경시킨다. */ - const updateChatQueryDataToFailedChat: UpdateChatQueryDataToFailedChat = ({ + const updateChatToFailedChat: UpdateChatToFailedChat = ({ id, channelId, }) => { @@ -156,8 +156,8 @@ export const useSetChatsQueryData = () => { return { addChatsQueryData, - updateChatQueryDataToWrittenChat, - updateChatQueryDataToFailedChat, + updateChatToWrittenChat, + updateChatToFailedChat, removeChatQueryData, }; }; diff --git a/client/src/pages/Channel/index.tsx b/client/src/pages/Channel/index.tsx index 153d9a00..5baf433e 100644 --- a/client/src/pages/Channel/index.tsx +++ b/client/src/pages/Channel/index.tsx @@ -48,11 +48,8 @@ const Channel = () => { }, ); - const { - addChatsQueryData, - updateChatQueryDataToFailedChat, - updateChatQueryDataToWrittenChat, - } = useSetChatsQueryData(); + const { addChatsQueryData, updateChatToFailedChat, updateChatToWrittenChat } = + useSetChatsQueryData(); const setChatScrollbar = useRootStore((state) => state.setChatScrollbar); const chatScrollbar = useRootStore((state) => state.chatScrollbar); @@ -82,11 +79,11 @@ const Channel = () => { }), ({ written }: { written: boolean }) => { if (written) { - updateChatQueryDataToWrittenChat({ id, channelId: roomId }); + updateChatToWrittenChat({ id, channelId: roomId }); return; } - updateChatQueryDataToFailedChat({ id, channelId: roomId }); + updateChatToFailedChat({ id, channelId: roomId }); }, ); From 67c3f4e9302aa58bac0a6315ce529771023a445a Mon Sep 17 00:00:00 2001 From: leegwae Date: Sun, 11 Dec 2022 00:01:04 +0900 Subject: [PATCH 148/298] =?UTF-8?q?style:=20`invalidte`=EB=A5=BC=20`invali?= =?UTF-8?q?date`=EB=A1=9C=20=EC=98=A4=ED=83=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/hooks/channel.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/hooks/channel.ts b/client/src/hooks/channel.ts index 5b33cfb0..23a4c97d 100644 --- a/client/src/hooks/channel.ts +++ b/client/src/hooks/channel.ts @@ -40,12 +40,12 @@ export const useInvalidateChannelQuery = (channelId: string) => { const queryClient = useQueryClient(); const key = queryKeyCreator.channel.detail(channelId); - const invalidte = useCallback( + const invalidate = useCallback( () => queryClient.invalidateQueries(key), [queryClient, key], ); - return invalidte; + return invalidate; }; export const usePrefetchChannelQuery = (channelId: string) => { From aebafbe7f1e8f3aff9d338d513f782b9536ec3b7 Mon Sep 17 00:00:00 2001 From: leegwae Date: Sun, 11 Dec 2022 00:31:40 +0900 Subject: [PATCH 149/298] =?UTF-8?q?feat:=20Gnb=20=EB=B2=84=ED=8A=BC?= =?UTF-8?q?=EC=97=90=20=EC=95=88=20=EC=9D=BD=EC=9D=80=20=EB=A9=94=EC=8B=9C?= =?UTF-8?q?=EC=A7=80=20=EB=B1=83=EC=A7=80=20=ED=91=9C=EC=8B=9C=20(#315)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/components/Avatar/index.tsx | 3 ++- client/src/layouts/Gnb/index.tsx | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/client/src/components/Avatar/index.tsx b/client/src/components/Avatar/index.tsx index c72b4137..f8edccb8 100644 --- a/client/src/components/Avatar/index.tsx +++ b/client/src/components/Avatar/index.tsx @@ -3,7 +3,7 @@ import type { ReactNode, FC } from 'react'; import React, { memo } from 'react'; -type BadgeType = keyof typeof USER_STATUS; +type BadgeType = keyof typeof USER_STATUS | 'NEW'; export interface Props { name: string; @@ -49,6 +49,7 @@ const BADGE_COLOR: Record = { ONLINE: 'bg-success', AFK: 'bg-error', OFFLINE: 'bg-label', + NEW: 'bg-indigo', }; const Avatar: FC = ({ diff --git a/client/src/layouts/Gnb/index.tsx b/client/src/layouts/Gnb/index.tsx index 21863ad1..40aa0167 100644 --- a/client/src/layouts/Gnb/index.tsx +++ b/client/src/layouts/Gnb/index.tsx @@ -100,6 +100,9 @@ const Gnb = () => { ) : ( communitiesQuery.data?.map((community) => { const { _id, name, profileUrl } = community; + const existUnreadChat = community.channels.some( + (channel) => channel.lastRead, + ); return (
  • @@ -113,6 +116,9 @@ const Gnb = () => { size="sm" variant="rectangle" profileUrl={profileUrl} + badge={existUnreadChat} + badgePosition="top-left" + status="NEW" /> From f3c7e206a9f673d55465579bac2e3678e4a8693d Mon Sep 17 00:00:00 2001 From: leegwae Date: Sun, 11 Dec 2022 00:50:42 +0900 Subject: [PATCH 150/298] =?UTF-8?q?feat:=20=EC=B1=84=EB=84=90=20=EB=B2=84?= =?UTF-8?q?=ED=8A=BC=EC=97=90=20=EC=95=88=20=EC=9D=BD=EC=9D=80=20=EB=A9=94?= =?UTF-8?q?=EC=8B=9C=EC=A7=80=20=ED=94=8C=EB=9E=98=EA=B7=B8=20=ED=91=9C?= =?UTF-8?q?=EC=8B=9C=20(#315)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/components/ChannelItem/index.tsx | 7 +++- client/src/layouts/CommunityNav/index.tsx | 36 ++++++++++++--------- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/client/src/components/ChannelItem/index.tsx b/client/src/components/ChannelItem/index.tsx index ae2f5311..97dc3412 100644 --- a/client/src/components/ChannelItem/index.tsx +++ b/client/src/components/ChannelItem/index.tsx @@ -15,13 +15,18 @@ const ChannelItem: FC = ({ channel, communityId, ...restProps }) => {
  • + {channel.lastRead && ( + + new + + )}
  • ); diff --git a/client/src/layouts/CommunityNav/index.tsx b/client/src/layouts/CommunityNav/index.tsx index b43e4fa0..03614231 100644 --- a/client/src/layouts/CommunityNav/index.tsx +++ b/client/src/layouts/CommunityNav/index.tsx @@ -5,11 +5,9 @@ import ChannelContextMenu from '@components/ChannelContextMenu'; import ChannelCreateBox from '@components/ChannelCreateBox'; import ChannelItem from '@components/ChannelItem'; import ErrorMessage from '@components/ErrorMessage'; +import Spinner from '@components/Spinner'; import { ChevronDownIcon, PlusIcon } from '@heroicons/react/20/solid'; -import { - useCommunitiesMapQuery, - useJoinedChannelsQuery, -} from '@hooks/community'; +import { useCommunitiesMapQuery } from '@hooks/community'; import { useRootStore } from '@stores/rootStore'; import cn from 'classnames'; import React, { useState } from 'react'; @@ -18,15 +16,16 @@ import { useParams, Link } from 'react-router-dom'; const CommunityNav = () => { const params = useParams() as { communityId: string; roomId?: string }; const { communityId, roomId } = params; + const communitiesMapQuery = useCommunitiesMapQuery(); const communitySummary = communitiesMapQuery.data?.[communityId]; - const joinedChannelsQuery = useJoinedChannelsQuery(communityId); - const joinedChannelsLength = joinedChannelsQuery.data?.length || 0; + const joinedChannels = communitySummary?.channels; + const joinedChannelsLength = joinedChannels?.length || 0; const [visible, setVisible] = useState(true); - const toggleVisible = () => setVisible((prevVisible) => !prevVisible); const rotateChevronIconClassnames = cn({ 'rotate-[-90deg]': !visible }); + const openContextMenuModal = useRootStore( (state) => state.openContextMenuModal, ); @@ -61,9 +60,11 @@ const CommunityNav = () => {